Today, I didn’t worked so much but I solved one problem related the Arch module present in the FreeCAD on the Experimental server. Actually, when I imported Arch module in command line FreeCAD freecadcmd
it gave a error “Exception while processing file: drawing.FCMacro [‘module’ object has no attribute ‘updateLocale’]”. It was the bug presented in the FreeCAD command line 0.14 version because in 0.14 version Arch module depended on GUI and in command line FreeCAD, GUI is not present. Then, I upgraded the command line FreeCAD to 0.16 version and after this my problem was solved.
module
FreeCAD Drawing module
Today, I tried to elaborate that is FreeCAD capable of converting 3D drawing to 2D and at the end of the day I said that FreeCAD fully capable of converting 3D drawing to 2D drawing by using Drawing module.
The Drawing module allows you to put your 3D work on paper. That is, to put views of your models in a 2D window and to insert that window in a drawing, for example a sheet with a border, a title and your logo and finally print that sheet. The Drawing module is currently under construction and more or less a technology preview!
When I copy paste the code present onĀ http://www.freecadweb.org/wiki/index.php?title=Drawing_Module it gave the below output.
The below is updated code:
# 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 tangent continuous. Shape = App.ActiveDocument.Shape.Shape [visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape) print "visible edges:", len(visibleG0.Edges) print "hidden edges:", len(hiddenG0.Edges) # Everything 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=",visibleG0.BoundBox.XLength," Y=",visibleG0.BoundBox.YLength," Z=",visibleG0.BoundBox.ZLength # Different projection vector [visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape,App.Vector(1,1,1)) # Project to SVG resultSVG = Drawing.projectToSVG(Shape,App.Vector(1,1,1)) print resultSVG # Create the body 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 # Fuse two boxes and the cylinder 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 # Cut the fused shapes from the first box App.ActiveDocument.addObject("Part::Cut","Shape") App.ActiveDocument.Shape.Base = App.ActiveDocument.Box App.ActiveDocument.Shape.Tool = App.ActiveDocument.Fusion1 # Hide all the intermediate shapes 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 # Insert a Page object and assign a template App.ActiveDocument.addObject('Drawing::FeaturePage','Page') 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 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 this time the view will be rotated by 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 = 80.0 App.ActiveDocument.ViewRot.Y = 100.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. The hidden lines are activated too. 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 changes the view and the page. App.ActiveDocument.View.X = 160.0 App.ActiveDocument.View.Y = 140.0 App.ActiveDocument.View.Scale = 1.0 App.ActiveDocument.recompute() # Get the SVG fragment of a single view ViewSVG = App.ActiveDocument.View.ViewResult print ViewSVG print "Resulting SVG document: ",App.ActiveDocument.Page.PageResult file = open(App.ActiveDocument.Page.PageResult,"r") print "Result page is ",len(file.readlines())," lines long" del file # Insert a view with your content App.ActiveDocument.addObject('Drawing::FeatureView','ViewSelf') App.ActiveDocument.ViewSelf.ViewResult = """ """ App.ActiveDocument.Page.addObject(App.ActiveDocument.ViewSelf) App.ActiveDocument.recompute() del ViewSVG
By running the above code we have two outputs. First is 3D design of the object.
Second is the image which is converted by using Drawing module in FreeCAD.
However, I understand the code little bit and changed the code little bit because positions of object on the drawing was not very good and they overlap with eachother.
http://www.freecadweb.org/wiki/index.php?title=Drawing_Module
There are many templates of drawing sheet present in FreeCAD are
http://www.freecadweb.org/wiki/index.php?title=Drawing_templates