Drawing Workbench/es: Difference between revisions
(Created page with '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 es…') |
No edit summary |
||
Line 170: | Line 170: | ||
{{docnav/es|Part Module/es|Raytracing Module/es}} |
{{docnav/es|Part Module/es|Raytracing Module/es}} |
||
{{languages | {{en|Drawing Module/en}} {{se|Drawing Module/se}} {{ru|Drawing Module/ru}} }} |
|||
[[Category:User Documentation]] |
[[Category:User Documentation]] |
Revision as of 19:15, 5 October 2010
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
# Crea 3 cajas y un cilindro (3 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
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 = """<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
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.