Arbeitsbereich Zeichnen

From FreeCAD Documentation
Revision as of 15:59, 14 September 2011 by Splineman (talk | contribs) (languages in alphabetic order, except english that goes first)

Das Zeichnungsmodul erlaubt Ihnen, Ihre 3D-Arbeit zu Papier zu bringen. Das bedeutet, gewählte Ansichten von Ihren Modellen in einem 2D-Fenster anzeigen und dieses Fenster in eine Zeichnung einzufügen, zum Beispiel in ein Blatt mit einer Umrandung, einen Titel und Ihrem Logo und druckt schließlich das Blatt. Das Zeichnungsmodul wird zurzeit noch bearbeitet und ist mehr oder weniger eine Technologievorschau!

GUI Werkzeuge

Template:Drawing Tools/de


In diesem Bild sehen Sie die wichtigsten Konzepte des Zeichnungs-Modul. Das Dokument enthält einen Gestalt-Gegenstand (Schenkel), den wir zu einer Zeichnung herausziehen wollen. Deshalb wird eine "Seite" erstellt. Eine Seite wird durch eine Schablone, in diesem Fall die "A3_Landscape" Schablone realisiert. Die Vorlage ist ein SVG-Dokument, das Ihre üblichen Blatt-Rahmen und Ihr Logo beinhaltet, oder Ihre Präsentations-Standards erfüllt.

In diese Seite können wir eine oder mehrere Ansichten einfügen. Jede Ansicht hat eine Position auf der Seite (Eigenschaften X, Y), einen Skalen-Faktor (Eigene Skalierung) und zusätzliche Eigenschaften. Jedes Mal, wenn sich die Seite oder die Ansicht oder das referenzierte Objekt ändert, wird die Seite regeneriert, und die Seitenanzeige aktualisiert.

Scripting

Im Moment der Endbenutzer(GUI)-Arbeitsablauf sehr beschränkt, somit ist die Scripting-API interessanter. Hier folgen Beispiele darzu, wie man die Scripting-API des Zeichnungsmoduls verwendet.

Einfaches Beispiel

Zuallererst brauchen Sie das Part- und das Zeichnungsmodul:

import FreeCAD, Part, Drawing

Erstellen Sie ein kleines Beispiel-Teil

Part.show(Part.makeBox(100,100,100).cut(Part.makeCylinder(80,100)).cut(Part.makeBox(90,40,100)).cut(Part.makeBox(20,85,100)))

Direkte Projektion. Das G0 bedeutet harte Kante, der G1 ist dauernde Tangente.

Shape = App.ActiveDocument.Shape.Shape
[visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape)
print "visible edges:", len(visibleG0.Edges)
print "hidden edges:", len(hiddenG0.Edges)

Alles wird auf der Z-Ebene projiziert:

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

Anderer Projektions-Vektor

[visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape,App.Vector(1,1,1))

Projekt zu SVG

resultSVG = Drawing.projectToSVG(Shape,App.Vector(1,1,1))
print resultSVG

Der parametrische Weg

Erstellen Sie den Körper

# Erstellen Sie drei Boxen und einen Zylinder
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
# Verschmelzen Sie zwei Boxen und den Zylinder
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
# Schneiden Sie die verschmolzenen Formen aus der ersten Box aus
App.activeDocument().addObject("Part::Cut","Shape")
App.activeDocument().Shape.Base = App.activeDocument().Box
App.activeDocument().Shape.Tool = App.activeDocument().Fusion1
# Verbergen Sie alle Zwischengestalten
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

Fügen Sie einen Seitenobjekt ein und weisen Sie eine Schablone zu

App.activeDocument().addObject('Drawing::FeaturePage','Page')
App.activeDocument().Page.Template = App.getResourceDir()+'Mod/Drawing/Templates/A3_Landscape.svg'

Erstellen Sie Sicht auf das "Shape"-Objekt, die Position und Größe und weisen Sie es einer Seite zu

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)

Erstellen Sie eine zweite Ansicht auf denselben Gegenstand, aber dieses Mal wird die Ansicht um 90Grad rotieret.

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) 

Erstellen Sie eine dritte Sicht auf das gleiche Objekt, aber mit einer isometrischen Ansichts-Richtung. Die verborgenen Linien sind auch aktiviert.

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) 

Ändern Sie etwas und aktualisieren Sie. Der Aktualisierungsprozess ändert die Ansicht und die Seite.

App.activeDocument().View.X = 30.0
App.activeDocument().View.Y = 30.0
App.activeDocument().View.Scale = 1.5
App.activeDocument().recompute()

Zugriff auf die Bits und Stücke

Holen Sie sich das SVG-Fragment einer einzelnen Ansicht

ViewSVG = App.activeDocument().View.ViewResult
print ViewSVG

Holen Sie sich die ganze Ergebnis-Seite(es ist eine Datei im vorläufigen Verzeichnis des Dokumentes, nur Leserechte)

print "Resulting SVG document: ",App.activeDocument().Page.PageResult
file = open(App.activeDocument().Page.PageResult,"r")
print "Result page is ",len(file.readlines())," lines long"

Wichtig: Geben Sie die Datei frei!

del file

Fügen Sie eine Ansicht mit Ihrem eigenen Inhalt ein:

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

Das führt zu folgendem Ergebnis:

Vorlagen

FreeCAD kommt mit einer Reihe von Standard-Templates, mehr darüber finden Sie auf der Drawing templates-Seite.

Der Part Arbeitsbereich
Der Raytracing-Arbeitsbereich
Verfügbare Übersetzungen dieser Seite: Template:Se