Drawing Workbench/pl: Difference between revisions

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


Create a view on the "Shape" object, define the position and scale and assign it to a Page
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()


=== Accessing the bits and pieces ===
=== 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]]


=== Templates ===
=== Szablony ===


FreeCAD comes bundled with a set of default templates, but you can find more on the [[Drawing templates]] page.
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

Template:Drawing Tools/pl


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.

Part Module/pl
Raytracing Module/pl
Dostępne języki: Template:Se