Drawing Workbench/pl: Difference between revisions
(Created page with '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. …') |
No edit summary |
||
Line 42: | Line 42: | ||
=== Metoda parametryczna === |
=== Metoda parametryczna === |
||
Tworzenia ciała |
|||
Create the body |
|||
# Stwórz trzy sześciany i walec |
|||
# Create three boxes and a cylinder |
|||
App.ActiveDocument.addObject("Part::Box","Box") |
App.ActiveDocument.addObject("Part::Box","Box") |
||
App.ActiveDocument.Box.Length=100.00 |
App.ActiveDocument.Box.Length=100.00 |
||
Line 63: | Line 63: | ||
App.ActiveDocument.Cylinder.Height=100.00 |
App.ActiveDocument.Cylinder.Height=100.00 |
||
App.ActiveDocument.Cylinder.Angle=360.00 |
App.ActiveDocument.Cylinder.Angle=360.00 |
||
# Połącz dwa sześciany i walec |
|||
# Fuse two boxes and the cylinder |
|||
App.activeDocument().addObject("Part::Fuse","Fusion") |
App.activeDocument().addObject("Part::Fuse","Fusion") |
||
App.activeDocument().Fusion.Base = App.activeDocument().Cylinder |
App.activeDocument().Fusion.Base = App.activeDocument().Cylinder |
||
Line 71: | Line 71: | ||
App.activeDocument().Fusion1.Base = App.activeDocument().Box2 |
App.activeDocument().Fusion1.Base = App.activeDocument().Box2 |
||
App.activeDocument().Fusion1.Tool = App.activeDocument().Fusion |
App.activeDocument().Fusion1.Tool = App.activeDocument().Fusion |
||
# Wytnij połączone kształty z pierwszego sześcianu |
|||
# Cut the fused shapes from the first box |
|||
App.activeDocument().addObject("Part::Cut","Shape") |
App.activeDocument().addObject("Part::Cut","Shape") |
||
App.activeDocument().Shape.Base = App.activeDocument().Box |
App.activeDocument().Shape.Base = App.activeDocument().Box |
||
App.activeDocument().Shape.Tool = App.activeDocument().Fusion1 |
App.activeDocument().Shape.Tool = App.activeDocument().Fusion1 |
||
# Ukryj wszystkie pośrednie kształty |
|||
# Hide all the intermediate shapes |
|||
Gui.activeDocument().Box.Visibility=False |
Gui.activeDocument().Box.Visibility=False |
||
Gui.activeDocument().Box1.Visibility=False |
Gui.activeDocument().Box1.Visibility=False |
||
Line 83: | Line 83: | ||
Gui.activeDocument().Fusion1.Visibility=False |
Gui.activeDocument().Fusion1.Visibility=False |
||
Wstaw obiekt strony i załącz szablon |
|||
Insert a Page object and assign a template |
|||
App.activeDocument().addObject('Drawing::FeaturePage','Page') |
App.activeDocument().addObject('Drawing::FeaturePage','Page') |
||
App.activeDocument().Page.Template = App.getResourceDir()+'Mod/Drawing/Templates/A3_Landscape.svg' |
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().addObject('Drawing::FeatureViewPart','View') |
||
App.activeDocument().View.Source = App.activeDocument().Shape |
App.activeDocument().View.Source = App.activeDocument().Shape |
||
Line 95: | Line 95: | ||
App.activeDocument().Page.addObject(App.activeDocument().View) |
App.activeDocument().Page.addObject(App.activeDocument().View) |
||
Stwórz drugi wodok tego samego obiektu, ale tym razem obrócony o 90 stopni. |
|||
Create a second view on the same object but this time the view will be rotated by 90 degrees. |
|||
App.activeDocument().addObject('Drawing::FeatureViewPart','ViewRot') |
App.activeDocument().addObject('Drawing::FeatureViewPart','ViewRot') |
||
App.activeDocument().ViewRot.Source = App.activeDocument().Shape |
App.activeDocument().ViewRot.Source = App.activeDocument().Shape |
||
Line 105: | Line 105: | ||
App.activeDocument().Page.addObject(App.activeDocument().ViewRot) |
App.activeDocument().Page.addObject(App.activeDocument().ViewRot) |
||
Stwórz trzeci widok tego samego obiektu, ale z widokiem izometrycznym. Ukryte linie są także pokazywane. |
|||
Create a third view on the same object but with an isometric view direction. The hidden lines are activated too. |
|||
App.activeDocument().addObject('Drawing::FeatureViewPart','ViewIso') |
App.activeDocument().addObject('Drawing::FeatureViewPart','ViewIso') |
||
App.activeDocument().ViewIso.Source = App.activeDocument().Shape |
App.activeDocument().ViewIso.Source = App.activeDocument().Shape |
||
Line 114: | Line 114: | ||
App.activeDocument().Page.addObject(App.activeDocument().ViewIso) |
App.activeDocument().Page.addObject(App.activeDocument().ViewIso) |
||
Zmień coś i zaktualizuj. Aktualizacja zmieni widok i stronę. |
|||
Change something and update. The update process changes the view and the page. |
|||
App.activeDocument().View.X = 30.0 |
App.activeDocument().View.X = 30.0 |
||
App.activeDocument().View.Y = 30.0 |
App.activeDocument().View.Y = 30.0 |
||
Line 120: | Line 120: | ||
App.activeDocument().recompute() |
App.activeDocument().recompute() |
||
=== |
=== Dostęp do elementów składowych === |
||
Weź fragment SVG pojedynczego widoku |
|||
Get the SVG fragment of a single view |
|||
ViewSVG = App.activeDocument().View.ViewResult |
ViewSVG = App.activeDocument().View.ViewResult |
||
print ViewSVG |
print ViewSVG |
||
Weź całą stronę wyników (jest w pliku w tymczasowym katalogu dokumentu, z prawami tylko do odczytu) |
|||
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 |
print "Resulting SVG document: ",App.activeDocument().Page.PageResult |
||
file = open(App.activeDocument().Page.PageResult,"r") |
file = open(App.activeDocument().Page.PageResult,"r") |
||
print "Result page is ",len(file.readlines())," lines long" |
print "Result page is ",len(file.readlines())," lines long" |
||
Ważne: Uwolnij plik! |
|||
Important: free the file! |
|||
del file |
del file |
||
Wstaw widok z własną zawartością: |
|||
Insert a view with your own content: |
|||
App.activeDocument().addObject('Drawing::FeatureView','ViewSelf') |
App.activeDocument().addObject('Drawing::FeatureView','ViewSelf') |
||
App.activeDocument().ViewSelf.ViewResult = """<g id="ViewSelf" |
App.activeDocument().ViewSelf.ViewResult = """<g id="ViewSelf" |
||
Line 153: | Line 153: | ||
del Shape,ViewSVG, resultSVG |
del Shape,ViewSVG, resultSVG |
||
To prowadzi do takiego rezulatatu: |
|||
That leads to the following result: |
|||
[[Image:DrawingScriptResult.jpg|800px]] |
[[Image:DrawingScriptResult.jpg|800px]] |
||
=== |
=== Szablony === |
||
FreeCAD |
FreeCAD posiada wbudowany pakiet szablonów, możesz znaleźć ich więcej na stronie [[Drawing templates/pl | Szablony rysunku]]. |
||
{{docnav/pl|Part Module/pl|Raytracing Module/pl}} |
{{docnav/pl|Part Module/pl|Raytracing Module/pl}} |
Revision as of 14:55, 7 September 2010
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!
Narzędzia interfejsu użytkownika
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.