# exampel how to use the scripting API of the drawing module # # first of all you need the Part and the Drawing module: import FreeCAD, Part, Drawing # create a small sample part Part.show(Part.makeBox(100,100,100).cut(Part.makeCylinder(80,100)).cut(Part.makeBox(90,40,100)).cut(Part.makeBox(20,85,100))) # direct projection. The G0 means hard edge, the G1 is tangend continues. Shape = App.ActiveDocument.Shape.Shape [visiblyG0,visiblyG1,hiddenG0,hiddenG1] = Drawing.project(Shape) print "visible edges:", len(visiblyG0.Edges) print "hidden edges:", len(hiddenG0.Edges) # all was projected on the Z-plane: print "Bnd Box shape: X=",Shape.BoundBox.XLength," Y=",Shape.BoundBox.YLength," Z=",Shape.BoundBox.ZLength print "Bnd Box project: X=",visiblyG0.BoundBox.XLength," Y=",visiblyG0.BoundBox.YLength," Z=",visiblyG0.BoundBox.ZLength # different projection vector [visiblyG0,visiblyG1,hiddenG0,hiddenG1] = Drawing.project(Shape,Base.Vector(1,1,1)) # project to SVG resultSVG = Drawing.projectToSVG(Shape,App.Vector(1,1,1)) print resultSVG # And now the parametric way # # insert a Page object and assign a template App.activeDocument().addObject('Drawing::FeaturePage','Page') App.activeDocument().Page.Template = App.ConfigGet('AppHomePath')+'Mod/Drawing/Templates/A3_Landscape.svg' # create a view on the "Shape" object, define the position and scale and assign it to a 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) # create a second view on the same object but the view is # rotatet 90 degrees. 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) # create a third view on the same object but with an isometric # view direction. Also the hidden lines are activated. 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) # change something and update. # The update process change the view and the page App.activeDocument().View.X = 30.0 App.activeDocument().View.Y = 30.0 App.activeDocument().View.Scale = 1.5 App.activeDocument().recompute() # Accessing the bits and peaces: # get the SVG fragment of a single view ViewSVG = App.activeDocument().View.ViewResult print ViewSVG # get the hole result page (its a file in the document temp dir, only read allowed) print "Resulting SVG document: ",App.activeDocument().Page.PageResult file = open(App.activeDocument().Page.PageResult,"r") print "Result page is ",len(file.readlines())," lines long" # important, give free the file! del file # insert a view with your own content: App.activeDocument().addObject('Drawing::FeatureView','ViewSelf') App.activeDocument().ViewSelf.ViewResult = """ """ App.activeDocument().Page.addObject(App.activeDocument().ViewSelf) App.activeDocument().recompute() del Shape,ViewSVG, resultSVG