Code: Select all
# -*- coding: utf-8 -*-
# Macro Begin +++++++++++++++++++++++++++++++++++++++++++++++++
import FreeCAD
import PartDesign
import PartDesignGui
#import Show.TempoVis
import Sketcher
import DraftTools
import Draft
import Part
doc_name = "Test"
# If there is an old version of the document, close it
try:
App.getDocument(doc_name)
App.closeDocument(doc_name)
except NameError:
pass
# Create a new document, add a body and a sketch
doc = App.newDocument(doc_name)
doc.addObject('PartDesign::Body','Body')
sk = doc.Body.newObject('Sketcher::SketchObject','Sketch')
doc.Sketch.Support = (doc.XY_Plane, [''])
doc.Sketch.MapMode = 'FlatFace'
App.ActiveDocument.recompute()
#
# Add a closed figure to the sketch (in this case a rectangle)
sk.addGeometry(Part.LineSegment(App.Vector(-23.815701,12.635452,0),App.Vector(21.331200,12.706439,0)),False)
sk.addConstraint(Sketcher.Constraint('Horizontal',0))
sk.addGeometry(Part.LineSegment(App.Vector(21.331200,12.635452,0),App.Vector(21.331200,-9.512083,0)),False)
sk.addConstraint(Sketcher.Constraint('Coincident',1,1,0,2))
sk.addConstraint(Sketcher.Constraint('Vertical',1))
sk.addGeometry(Part.LineSegment(App.Vector(21.331200,-9.512083,0),App.Vector(-24.312599,-9.299126,0)),False)
sk.addConstraint(Sketcher.Constraint('Coincident',2,1,1,2))
sk.addConstraint(Sketcher.Constraint('Horizontal',2))
sk.addGeometry(Part.LineSegment(App.Vector(-24.312599,-9.512083,0),App.Vector(-23.815701,12.635452,0)),False)
sk.addConstraint(Sketcher.Constraint('Coincident',3,1,2,2))
sk.addConstraint(Sketcher.Constraint('Coincident',3,2,0,1))
sk.addConstraint(Sketcher.Constraint('Vertical',3))
sk.addConstraint(Sketcher.Constraint('Distance',1,22.147535))
sk.setDatum(8,App.Units.Quantity('30.000000 mm'))
sk.addConstraint(Sketcher.Constraint('Distance',0,45.643799))
sk.setDatum(9,App.Units.Quantity('60.000000 mm'))
App.getDocument('Test').recompute()
# Pad the sketch
doc.Body.newObject("PartDesign::Pad","Pad")
doc.Pad.Profile = doc.Sketch
doc.Pad.Length = 10.0
#App.ActiveDocument.recompute()
App.ActiveDocument.Pad.Length = 10.000000
App.ActiveDocument.Pad.Length2 = 100.000000
App.ActiveDocument.Pad.Type = 0
App.ActiveDocument.Pad.UpToFace = None
App.ActiveDocument.Pad.Reversed = 0
App.ActiveDocument.Pad.Midplane = 0
App.ActiveDocument.Pad.Offset = 0.000000
App.ActiveDocument.recompute()
# Create a shapestring
ss=Draft.makeShapeString(String=u"Hello",FontFile="/usr/share/fonts/truetype/msttcorefonts/Arial.ttf",Size=10.0,Tracking=0.0)
plm=FreeCAD.Placement()
plm.Base=FreeCAD.Vector(-20.0,-10.0,0.0)
plm.Rotation.Q=(0.0,-0.0,-0.707106781187,0.707106781187)
ss.Placement=plm
ss.Support=FreeCAD.ActiveDocument.getObject("Pad")
Draft.autogroup(ss)
ss.Placement = App.Placement(App.Vector(-20,-10,0),App.Rotation(App.Vector(0,0,-1),0))
##ss.Size = '1 mm'
ss.Size = '15 mm'
# Extrude the shapestring as a solid
f = FreeCAD.getDocument('Test').addObject('Part::Extrusion', 'Extrude')
f = App.getDocument('Test').getObject('Extrude')
f.Base = App.getDocument('Test').getObject('ShapeString')
f.DirMode = "Normal"
f.DirLink = None
f.LengthFwd = 2.000000000000000
f.LengthRev = 0.000000000000000
f.Solid = True
f.Reversed = False
f.Symmetric = False
f.TaperAngle = 0.000000000000000
f.TaperAngleRev = 0.000000000000000
App.ActiveDocument.recompute()
# Move the extruded shapestring to the placement (Learned: Subsequent moves will be relative)
Draft.move([FreeCAD.ActiveDocument.Extrude],FreeCAD.Vector(-6.6,3.2,8.0),copy=False)
FreeCAD.ActiveDocument.recompute()
# Cut the extruded shapestring from the pad
doc.addObject("Part::Cut","Cut")
doc.Cut.Base = doc.Pad
doc.Cut.Tool = doc.Extrude
App.ActiveDocument.recompute()
Gui.getDocument("Test").getObject("ShapeString").Visibility=False # Learned: App.getDocument and Gui.getDocument are different!
# Macro End+++++++++++++++++++++++++++++++++++++++++++++++++