Drawing Module/es

El módulo de Dibujo te permite poner en papel tu trabajo 3D. Es decir, sirve para poner vistas de tus modelos en una ventana 2D e insertar esas ventanas en un dibujo, por ejemplo una hoja con un formato, un título y tu logotipo y, finalmente, imprimir esa hoja. El módulo de Dibujo está en desarrollo y es más o menos una muestra de sus posibilidades!

Herramientas GUI


En la imagen se ven los principales elementos del módulo de Dibujo. 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 tus dibujos, tu logotipo o los estándares que utilices.

En la página puedes 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 referenciado cambia, la página se regenera y la visualización de la página se actualiza.

Archivos de guión
De momento, el interfaz (GUI) para el usuario final está poco desarrollado, por lo que los archivos de guión de la API son más interesantes. A continuación veremos ejemplos de cómo utilizar los archivos de guión de la API del módulo de Dibujo.

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

import FreeCAD, Part, Drawing Creamos una pequeña Pieza, 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 directa. 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 Vector de proyección diferente [visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape,App.Vector(1,1,1)) Projectar a SVG resultSVG = Drawing.projectToSVG(Shape,App.Vector(1,1,1)) print resultSVG

En modo paramétrico
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
 * 1) Crea 3 cajas y un cilindro

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
 * 1) Unión de 2 cajas y el cilíndro

App.activeDocument.addObject("Part::Cut","Shape") App.activeDocument.Shape.Base = App.activeDocument.Box App.activeDocument.Shape.Tool = App.activeDocument.Fusion1
 * 1) Eliminar los elementos unidos anteriormente con la primera caja

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) Ocultar todas las formas intermedias

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

Crea una vista del objeto "forma", define la posicion y la escala, y la asigna a la Página 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

Accediendo a los datos y las partes
Obtiene el fragmento de SVG de una sola vista ViewSVG = App.activeDocument.View.ViewResult print ViewSVG Obtiene la página de resultados completa (Es un archivo en el directorio de archivos temporales, con permisos de solo lectura) print "Resulting SVG document: ",App.activeDocument.Page.PageResult file = open(App.activeDocument.Page.PageResult,"r") print "Result page is ",len(file.readlines)," lines long"

Importante: Liberar el archivo! del file Inserta una vista con tu propio contenido: 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/es.