Drawing Workbench/ru: Difference between revisions
No edit summary |
No edit summary |
||
Line 161: | Line 161: | ||
FreeCAD поставляется вместе с набором стандартных шаблонов, но вы также можете найти больше на странице [[Drawing templates|Чертежных шаблонов]] . |
FreeCAD поставляется вместе с набором стандартных шаблонов, но вы также можете найти больше на странице [[Drawing templates|Чертежных шаблонов]] . |
||
{{docnav|Part Module/ru|Raytracing Module}} |
{{docnav/ru|Part Module/ru|Raytracing Module/ru}} |
||
{{languages | {{es|Drawing Module/es}} {{en|Drawing Module}} {{se|Drawing Module/se}} }} |
{{languages | {{es|Drawing Module/es}} {{en|Drawing Module}} {{se|Drawing Module/se}} }} |
Revision as of 12:42, 23 February 2011
Модуль Черчения позволяет поместить ваши 3D наработки на бумагу. То есть, поместить проекции ваших моделей в 2D окно и вставить это окно в рисунок, например на лист с рамкой, вашим заголовком и логотипом и наконец распечатать всё это. Модуль черчения находится в стадии разработки и приблизительного технологического тестирования!
GUI Инструменты
На картинке вы видите, основные концепции модуля Черчения. Документ содержит объект-форму (Schenkel) который мы хотим извлеч для черчения. Поэтому создается "Лист". Лист автоматически получает шаблон, в даннном случае шаблон "A3_Landscape". Шаблон это SVG документ, может содержать обычно чертежную рамку, ваш логотип или же соблюдать ваши собственные стандарты.
На этот лист вы можете поместить один и более видов. Каждый вид обладает своей позицией на странице (свойства X,Y), и коэффициентом масштабирования (свойство scale) и другие дополнительные свойства. Каждый раз когда лист или вид или объект на который они ссылаются, изменяются лист перерисовывается, и отображение листа обновляется.
Написание сценариев
На данный момент рабочий процес для конечного пользователя(GUI) очень ограничен, поэтому интересней писать сценарии для API. Ниже следуют примеры о том как сценариев API чертежного модуля.
Простейшие примеры
прежде всего нам нужны модуль черчения и модуль Деталей:
import FreeCAD, Part, Drawing
Создадим простую маленькую деталь
Part.show(Part.makeBox(100,100,100).cut(Part.makeCylinder(80,100)).cut(Part.makeBox(90,40,100)).cut(Part.makeBox(20,85,100)))
Прямая проекция. G0 будет жесткой гранью, а G1 непрерывно касается.
Shape = App.ActiveDocument.Shape.Shape [visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape) print "visible edges:", len(visibleG0.Edges) print "hidden edges:", len(hiddenG0.Edges)
Всё было в проекции на плоскость Z:
print "Bnd Box shape: X=",Shape.BoundBox.XLength," Y=",Shape.BoundBox.YLength," Z=",Shape.BoundBox.ZLength print "Bnd Box project: X=",visibleG0.BoundBox.XLength," Y=",visibleG0.BoundBox.YLength," Z=",visibleG0.BoundBox.ZLength
Различные вектора проекции
[visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape,Base.Vector(1,1,1))
Спроецировать в SVG
resultSVG = Drawing.projectToSVG(Shape,App.Vector(1,1,1)) print resultSVG
Параметрический метод
Создадим новое тело
# Create three boxes and a cylinder App.ActiveDocument.addObject("Part::Box","Box") App.ActiveDocument.Box.Length=100.00 App.ActiveDocument.Box.Width=100.00 App.ActiveDocument.Box.Height=100.00 App.ActiveDocument.addObject("Part::Box","Box1") App.ActiveDocument.Box1.Length=90.00 App.ActiveDocument.Box1.Width=40.00 App.ActiveDocument.Box1.Height=100.00 App.ActiveDocument.addObject("Part::Box","Box2") App.ActiveDocument.Box2.Length=20.00 App.ActiveDocument.Box2.Width=85.00 App.ActiveDocument.Box2.Height=100.00 App.ActiveDocument.addObject("Part::Cylinder","Cylinder") App.ActiveDocument.Cylinder.Radius=80.00 App.ActiveDocument.Cylinder.Height=100.00 App.ActiveDocument.Cylinder.Angle=360.00 # Fuse two boxes and the cylinder App.activeDocument().addObject("Part::Fuse","Fusion") App.activeDocument().Fusion.Base = App.activeDocument().Cylinder App.activeDocument().Fusion.Tool = App.activeDocument().Box1 App.activeDocument().addObject("Part::Fuse","Fusion1") App.activeDocument().Fusion1.Base = App.activeDocument().Box2 App.activeDocument().Fusion1.Tool = App.activeDocument().Fusion # Cut the fused shapes from the first box App.activeDocument().addObject("Part::Cut","Shape") App.activeDocument().Shape.Base = App.activeDocument().Box App.activeDocument().Shape.Tool = App.activeDocument().Fusion1 # Hide all the intermediate shapes Gui.activeDocument().Box.Visibility=False Gui.activeDocument().Box1.Visibility=False Gui.activeDocument().Box2.Visibility=False Gui.activeDocument().Cylinder.Visibility=False Gui.activeDocument().Fusion.Visibility=False Gui.activeDocument().Fusion1.Visibility=False
вставляем на лист и добавляем шаблон
App.activeDocument().addObject('Drawing::FeaturePage','Page') App.activeDocument().Page.Template = App.getResourceDir()+'Mod/Drawing/Templates/A3_Landscape.svg'
Создает вид на "Форму" объекта,определяем положение и масштаб и помещаем его на лист
App.activeDocument().addObject('Drawing::FeatureViewPart','View') App.activeDocument().View.Source = App.activeDocument().Shape App.activeDocument().View.Direction = (0.0,0.0,1.0) App.activeDocument().View.X = 10.0 App.activeDocument().View.Y = 10.0 App.activeDocument().Page.addObject(App.activeDocument().View)
Создать второй вид на тот же объект, но на этот раз вид представление объекта будет повернуто на 90 градусов.
App.activeDocument().addObject('Drawing::FeatureViewPart','ViewRot') App.activeDocument().ViewRot.Source = App.activeDocument().Shape App.activeDocument().ViewRot.Direction = (0.0,0.0,1.0) App.activeDocument().ViewRot.X = 290.0 App.activeDocument().ViewRot.Y = 30.0 App.activeDocument().ViewRot.Scale = 1.0 App.activeDocument().ViewRot.Rotation = 90.0 App.activeDocument().Page.addObject(App.activeDocument().ViewRot)
Создание третьего вида на данный объект , но с изометрической точки зрения. Также активируем скрытые линии.
App.activeDocument().addObject('Drawing::FeatureViewPart','ViewIso') App.activeDocument().ViewIso.Source = App.activeDocument().Shape App.activeDocument().ViewIso.Direction = (1.0,1.0,1.0) App.activeDocument().ViewIso.X = 335.0 App.activeDocument().ViewIso.Y = 140.0 App.activeDocument().ViewIso.ShowHiddenLines = True App.activeDocument().Page.addObject(App.activeDocument().ViewIso)
Изменим кое-что и обновим. В процессе обновления, изменится отображение и лист.
App.activeDocument().View.X = 30.0 App.activeDocument().View.Y = 30.0 App.activeDocument().View.Scale = 1.5 App.activeDocument().recompute()
Получение доступа к битам и деталям
Получить SVG фрагмент первого вида
ViewSVG = App.activeDocument().View.ViewResult print ViewSVG
Получить весь лист (это файл в во временном каталоге документа, доступный только для чтения)
print "Resulting SVG document: ",App.activeDocument().Page.PageResult file = open(App.activeDocument().Page.PageResult,"r") print "Result page is ",len(file.readlines())," lines long"
Важно : освобождаем файл!
del file
Вставить вид с вашим собственным содержанием:
App.activeDocument().addObject('Drawing::FeatureView','ViewSelf') App.activeDocument().ViewSelf.ViewResult = """<g id="ViewSelf" stroke="rgb(0, 0, 0)" stroke-width="0.35" stroke-linecap="butt" stroke-linejoin="miter" transform="translate(30,30)" fill="#00cc00" > <ellipse cx="40" cy="40" rx="30" ry="15"/> </g> """ App.activeDocument().Page.addObject(App.activeDocument().ViewSelf) App.activeDocument().recompute() del Shape,ViewSVG, resultSVG
Это приводит к следующим результатам:
Шаблоны
FreeCAD поставляется вместе с набором стандартных шаблонов, но вы также можете найти больше на странице Чертежных шаблонов .