Środowisko pracy Kreślenie

From FreeCAD Documentation
Revision as of 14:55, 7 September 2010 by Kwahoo (talk | contribs)

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