Drawing Module/es

El módulo Drawing (Dibujar, plotear, de dibujo) le permite poner en papel su trabajo 3D. Es decir, sirve para poner vistas de sus modelos en una ventana 2D e insertar esas ventanas en un dibujo, por ejemplo una lámina con recuadro, un título y su logotipo y, finalmente, imprimir esa lámina. El módulo Drawing(Dibujar, plotear, de dibujo) está en construcción y es más o menos una muestra de posibilidades!

Herramientas GUI


En la imagen se ven los principales elementos del módulo Drawing. El documento contiene un objeto forma (Schenkel) que queremos poner en papel. Para ello creamos una "Página". Una página se crea a partir de una plantilla, en este caso la plantilla "A3_apaisado". La plantilla es un documento SVG que puede contener la disposición habitual de sus dibujos, su logotipo o los estándares que usted use.

En la página puede insertar una o varias vistas. Cada vista tiene una posición en la página (Propiedades X, Y), un factor de escala (Propiedad escala ) y propiedades adicionales. Cada vez que la página, o la vista, o el objeto cambia, las referencias a la página se regeneran y la visualización de la página se actualiza.

Scripting
De momento, el interfaz (GUI) para el usuario final está poco desarrollado, por lo que la API de guiones de comandos (scripting) es más interesante. A continuación veremos ejemplos de cómo utilizar la API de secuencias de comandos del módulo Drawing (ploteo, de dibujo).

Ejemplo Simple
Lo primero, se necesitan los módulos Parte y Drawing:

import FreeCAD, Part, Drawing Creamos una pequeña Parte, como muestra

Part.show(Part.makeBox(100,100,100).cut(Part.makeCylinder(80,100)).cut(Part.makeBox(90,40,100)).cut(Part.makeBox(20,85,100))) Proyección recta. G0 significa borde en arista, y G1 es continuidad de tangencia.

Shape = App.ActiveDocument.Shape.Shape [visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape) print "visible edges:", len(visibleG0.Edges) print "hidden edges:", len(hiddenG0.Edges) Todo se proyecta sobre el plano 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 Different projection vector [visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape,Base.Vector(1,1,1)) Project to SVG resultSVG = Drawing.projectToSVG(Shape,App.Vector(1,1,1)) print resultSVG

En forma paramétrica
Se Crea la pieza 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 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 App.activeDocument.addObject("Part::Cut","Shape") App.activeDocument.Shape.Base = App.activeDocument.Box App.activeDocument.Shape.Tool = App.activeDocument.Fusion1 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
 * 1) Crea 3 cajas y un cilindro (3 boxes and a cylinder)
 * 1) Fuse two boxes and the cylinder
 * 1) Cut the fused shapes from the first box
 * 1) Hide all the intermediate shapes

Inserta un objeto página (Page object), y se asigna una plantilla App.activeDocument.addObject('Drawing::FeaturePage','Page') App.activeDocument.Page.Template = App.getResourceDir+'Mod/Drawing/Templates/A3_Landscape.svg'

Crea una vista el objeto "forma" (on the "Shape" object), define la posicion y la escala, y la asigna a la Pagina 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)

Crea una segunda vista del mismo objecto, pero esta vez la vista está girada 90 grados. 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)

Crea una tercera vista del mismo objeto, pero en proyección isométrica. Se activa también la ocultación de líneas. 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) Cambiamos algo, y actualizamos. Se regenera la vista y la página. App.activeDocument.View.X = 30.0 App.activeDocument.View.Y = 30.0 App.activeDocument.View.Scale = 1.5 App.activeDocument.recompute

Accessing the bits and pieces
Get the SVG fragment of a single view ViewSVG = App.activeDocument.View.ViewResult print ViewSVG Get the whole result page (it's a file in the document's temporary directory, only read permission) print "Resulting SVG document: ",App.activeDocument.Page.PageResult file = open(App.activeDocument.Page.PageResult,"r") print "Result page is ",len(file.readlines)," lines long"

Important: free the file! del file Insert a view with your own content: App.activeDocument.addObject('Drawing::FeatureView','ViewSelf') App.activeDocument.ViewSelf.ViewResult = """       """ App.activeDocument.Page.addObject(App.activeDocument.ViewSelf) App.activeDocument.recompute del Shape,ViewSVG, resultSVG Eso da como resultado lo siguiente:



Plantillas
FreeCAD viene con un juego de plantillas básico, pero se pueden obtener más en la página Drawing templates.