Attention: this wiki is deactivated
The new wiki is up and running at http://www.freecadweb.org/wiki
Important: Do not edit this wiki anymore, it will be deleted soon. If you have edit rights here, please read this article to know how to regain your edit rights on the new wiki.
Drawing Module/pl
From free-cad
Moduł Rysunku (Drawing) pozwala na przeniesienie twojej pracy 3D na papier. To znaczy na umieszczenie rzutów twoich modeli 3D w oknie 2D i wstawienie tego okna do rysunku, np. arkusza z ramką, tytułem i twoim logo oraz ostatecznie na wydrukowanie tego arkusza. Moduł Drawing aktualnie jest w czasie konstrukcji i jest mniej lub bardziej przeglądem technologii!
Contents |
Narzędzia interfejsu użytkownika
Narzędzia do tworzenia, konfigurowania i eksportowania arkuszy rysunków 2D
-
Nowy arkusz rysunku: Tworzy nowy akusz rysunku z istniejącego arkusz SVG
-
Nowy arkusz A3 "pejzaż": Tworzy nowy arkusz rysunku z domyślnego szablonu A3 FreeCADa
-
Wstaw widok: Wstawia widok zaznaczonego obiektu do aktywnego arkusza rysunku
-
Zapisz arkusz: Zapisuje aktualny arkusz rysunku jako plik SVG
Na ilustracji możesz zobaczyć główne koncepcje modułu Rysunku.In the picture you see the main concepts of the Drawing module. Dokument zawiera obiekt kształtu (Schenkel), który musimy wypakować na rysunek. Wtedy "Page" (strona) jest tworzona. Strona dostaje instancję przez szablon, w tym przypadku przez szablon "A3_Landscape". Szablon jest dokumentem SVG, który przechowuje ramkę strony, logo czy twoje standardy wyświetlania.
Na tej stronie możemy wstawić jeden lub więcej rzutów. Każdy rzut posiada pozycję na stronie (Properties X,Y), współczynnik skali (Property scale) i dodatkowe właściwości. Za każdym razem kiedy strona lub rzut lub obiekt referencyjny się zmieniająją strona jest regenerowana i wyświetlanie jest uaktualniane.
Skryptowanie
Aktualnie funkcjonalność graficznego interfejsu użytkownika jest bardzo ograniczona, więc API skryptowania jest bardziej interesujące. Poniże znajdują się przykłady jak używać API skryptowania w module rysunku.
Prosty przykład
Po pierwsze potrzebujesz modułu Części (Part) i Rysunku (Drawing):
import FreeCAD, Part, Drawing
Stworzenie małej przykładowej części
Part.show(Part.makeBox(100,100,100).cut(Part.makeCylinder(80,100)).cut(Part.makeBox(90,40,100)).cut(Part.makeBox(20,85,100)))
Projekcja bezpośrednia. G0 oznacza ostrą krawędź, G1 ciągłą styczną.
Shape = App.ActiveDocument.Shape.Shape [visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape) print "visible edges:", len(visibleG0.Edges) print "hidden edges:", len(hiddenG0.Edges)
Wszystko jest rzutowane na płaszczyznę 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
Różny wektor projekcji
[visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape,Base.Vector(1,1,1))
Projekt SVG
resultSVG = Drawing.projectToSVG(Shape,App.Vector(1,1,1)) print resultSVG
Metoda parametryczna
Tworzenia ciała
# Stwórz trzy sześciany i walec
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
# Połącz dwa sześciany i walec
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
# Wytnij połączone kształty z pierwszego sześcianu
App.activeDocument().addObject("Part::Cut","Shape")
App.activeDocument().Shape.Base = App.activeDocument().Box
App.activeDocument().Shape.Tool = App.activeDocument().Fusion1
# Ukryj wszystkie pośrednie kształty
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
Wstaw obiekt strony i załącz szablon
App.activeDocument().addObject('Drawing::FeaturePage','Page')
App.activeDocument().Page.Template = App.getResourceDir()+'Mod/Drawing/Templates/A3_Landscape.svg'
Stwórz widok obiektu "Shape", zdefiniuj pozycję, skalę i załącz do Strony (Page)
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)
Stwórz drugi wodok tego samego obiektu, ale tym razem obrócony o 90 stopni.
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)
Stwórz trzeci widok tego samego obiektu, ale z widokiem izometrycznym. Ukryte linie są także pokazywane.
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)
Zmień coś i zaktualizuj. Aktualizacja zmieni widok i stronę.
App.activeDocument().View.X = 30.0 App.activeDocument().View.Y = 30.0 App.activeDocument().View.Scale = 1.5 App.activeDocument().recompute()
Dostęp do elementów składowych
Weź fragment SVG pojedynczego widoku
ViewSVG = App.activeDocument().View.ViewResult print ViewSVG
Weź całą stronę wyników (jest w pliku w tymczasowym katalogu dokumentu, z prawami tylko do odczytu)
print "Resulting SVG document: ",App.activeDocument().Page.PageResult file = open(App.activeDocument().Page.PageResult,"r") print "Result page is ",len(file.readlines())," lines long"
Ważne: Uwolnij plik!
del file
Wstaw widok z własną zawartością:
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
To prowadzi do takiego rezulatatu:
Szablony
FreeCAD posiada wbudowany pakiet szablonów, możesz znaleźć ich więcej na stronie Szablony rysunku.
