Drawing Workbench/es: Difference between revisions

From FreeCAD Documentation
(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

Template:Drawing Tools


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.


Part Module/es
Raytracing Module/es
Available translations of this page: Template:Se