def display(self, arg): """sets the text of the WP button""" o = self.getOffset() if o: if o > 0: suffix = ' +O' else: suffix = ' -O' else: suffix = '' vdir = FreeCAD.DraftWorkingPlane.axis vdir = '(' + str(vdir.x)[:4] + ',' + str(vdir.y)[:4] + ',' + str( vdir.z)[:4] + ')' vdir = " " + translate("draft", "Dir") + ": " + vdir if type(arg).__name__ == 'str': self.wpButton.setText(arg + suffix) if o != 0: o = " " + translate("draft", "Offset") + ": " + str(o) else: o = "" self.wpButton.setToolTip( translate("draft", "Current working plane") + ": " + self.wpButton.text() + o + vdir) elif type(arg).__name__ == 'Vector': plv = '(' + str(arg.x)[:6] + ',' + str(arg.y)[:6] + ',' + str( arg.z)[:6] + ')' self.wpButton.setText(translate("draft", "Custom")) self.wpButton.setToolTip( translate("draft", "Current working plane") + ": " + plv + vdir) p = FreeCAD.DraftWorkingPlane self.states.append([p.u, p.v, p.axis, p.position]) FreeCADGui.doCommandGui("FreeCADGui.Snapper.setGrid()")
def Activated(self): self.name = translate("draft","Scale", utf8_decode=True) Modifier.Activated(self,self.name) self.ghost = None if self.ui: if not FreeCADGui.Selection.getSelection(): self.ui.selectUi() msg(translate("draft", "Select an object to scale")+"\n") self.call = self.view.addEventCallback("SoEvent",selectObject) else: self.proceed()
def Activated(self): self.name = translate("draft", "BaseTransform", utf8_decode=True) Modifier.Activated(self, self.name) if self.ui: if not FreeCADGui.Selection.getSelection(): self.ui.selectUi() msg(translate("draft", "Select an object to edit") + "\n") self.call_sel = \ self.view.addEventCallback("SoEvent", selectObject) ## TODO it should allow multiple selections ## TODO Ui should be more explanatory else: self.proceed()
def makeValve(propList=[], pos=None, Z=None): '''add a Valve object makeValve(propList,pos,Z); propList is one optional list with at least 4 elements: DN (string): nominal diameter VType (string): type of valve OD (float): outside diameter ID (float): inside diameter H (float): length of pipe Kv (float): valve's flow factor (optional) Default is "DN50 ball valve ('ball')" pos (vector): position of insertion; default = 0,0,0 Z (vector): orientation: default = 0,0,1 ''' if pos==None: pos=FreeCAD.Vector(0,0,0) if Z==None: Z=FreeCAD.Vector(0,0,1) a=FreeCAD.ActiveDocument.addObject("Part::FeaturePython",translate("Part::FeaturePython","Valve")) if len(propList): pFeatures.Valve(a,*propList) else: pFeatures.Valve(a) a.ViewObject.Proxy=0 a.Placement.Base=pos rot=FreeCAD.Rotation(FreeCAD.Vector(0,0,1),Z) a.Placement.Rotation=rot.multiply(a.Placement.Rotation) return a
def makeCap(propList=[], pos=None, Z=None): '''add a Cap object makeCap(propList,pos,Z); propList is one optional list with 4 elements: DN (string): nominal diameter OD (float): outside diameter thk (float): shell thickness Default is "DN50 (SCH-STD)" pos (vector): position of insertion; default = 0,0,0 Z (vector): orientation: default = 0,0,1 Remember: property PRating must be defined afterwards ''' if pos==None: pos=FreeCAD.Vector(0,0,0) if Z==None: Z=FreeCAD.Vector(0,0,1) a=FreeCAD.ActiveDocument.addObject("Part::FeaturePython",translate("Part::FeaturePython","Cap")) if len(propList)==3: pFeatures.Cap(a,*propList) else: pFeatures.Cap(a) a.ViewObject.Proxy=0 a.Placement.Base=pos rot=FreeCAD.Rotation(FreeCAD.Vector(0,0,1),Z) a.Placement.Rotation=rot.multiply(a.Placement.Rotation) return a
def makeUbolt(propList=[], pos=None, Z=None): '''Adds a Ubolt object: makeUbolt(propList,pos,Z); propList is one optional list with 5 elements: PSize (string): nominal diameter ClampType (string): the clamp type or standard C (float): the diameter of the U-bolt H (float): the total height of the U-bolt d (float): the rod diameter pos (vector): position of insertion; default = 0,0,0 Z (vector): orientation: default = 0,0,1 Remember: property PRating must be defined afterwards ''' if pos==None: pos=FreeCAD.Vector(0,0,0) if Z==None: Z=FreeCAD.Vector(0,0,1) a=FreeCAD.ActiveDocument.addObject("Part::FeaturePython",translate("Part::FeaturePython","U-Bolt")) if len(propList)==5: pFeatures.Ubolt(a,*propList) else: pFeatures.Ubolt(a) a.ViewObject.Proxy=0 a.Placement.Base=pos rot=FreeCAD.Rotation(FreeCAD.Vector(0,0,1),Z) a.Placement.Rotation=rot.multiply(a.Placement.Rotation) return a
def simpleSurfBend(path=None,profile=None): 'select the centerline and the O.D. and let it sweep' curva=FreeCAD.activeDocument().addObject("Part::Feature",translate("Part::Feature","Simple curve")) if path==None or profile==None: curva.Shape=Part.makeSweepSurface(*fCmd.edges()[:2]) elif path.ShapeType==profile.ShapeType=='Edge': curva.Shape=Part.makeSweepSurface(path,profile)
def scale(self,x,y,z,rel,mode): delta = Vector(x,y,z) if rel: delta = FreeCAD.DraftWorkingPlane.getGlobalCoords(delta) if mode == 0: copy = False legacy = False elif mode == 1: copy = False legacy = True elif mode == 2: copy = True legacy = True "moving the real shapes" sel = '[' for o in self.sel: if len(sel) > 1: sel += ',' sel += 'FreeCAD.ActiveDocument.'+o.Name sel += ']' FreeCADGui.addModule("Draft") self.commit(translate("draft","Copy"), ['Draft.scale('+sel+',delta='+DraftVecUtils.toString(delta)+',center='+DraftVecUtils.toString(self.node[0])+',copy='+str(copy)+',legacy='+str(legacy)+')', 'FreeCAD.ActiveDocument.recompute()']) self.finish()
def numericInput(self,numx,numy,numz): "this function gets called by the toolbar when a valid base point has been entered" self.point = Vector(numx,numy,numz) self.node.append(self.point) if not self.pickmode: self.ui.offUi() if self.call: self.view.removeEventCallback("SoEvent",self.call) self.task = DraftGui.ScaleTaskPanel() self.task.sourceCmd = self DraftGui.todo.delay(FreeCADGui.Control.showDialog,self.task) if self.ghost: self.ghost.on() elif len(self.node) == 2: msg(translate("draft", "Pick new distance from base point:")+"\n") elif len(self.node) == 3: if hasattr(FreeCADGui,"Snapper"): FreeCADGui.Snapper.off() if self.call: self.view.removeEventCallback("SoEvent",self.call) d1 = (self.node[1].sub(self.node[0])).Length d2 = (self.node[2].sub(self.node[0])).Length #print d2,"/",d1,"=",d2/d1 if hasattr(self,"task"): if self.task: self.task.lock.setChecked(True) self.task.setValue(d2/d1)
def __init__(self): # create the se Toolbar self.mw = getMainWindow() self.seWidget = QtGui.QDockWidget() self.baseWidget = DraftDockWidget() self.seWidget.setObjectName("seToolbar") self.seWidget.setTitleBarWidget(self.baseWidget) self.seWidget.setWindowTitle(translate("se", "Surface Editor Command Bar")) self.mw.addDockWidget(QtCore.Qt.TopDockWidgetArea,self.seWidget) self.baseWidget.setVisible(False) self.seWidget.setVisible(False) #self.seWidget.toggleViewAction().setVisible(False) #self.sourceCmd = None #self.taskmode = Draft.getParam("UiMode") self.layout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight,self.baseWidget) self.layout.setDirection(QtGui.QBoxLayout.LeftToRight) self.layout.setObjectName("layout") self.l1 = self.label("l1","current command: ") self.lcommand = self.label("lcommand", "None") self.w1 = self.lineedit("w1",width=100) self.l2 = self.label("l1","value:") self.w2 = self.lineedit("w2",width=100) self.q1 = self.combo("q1",[("String","App::PropertyString"),("Float","App::PropertyFloat"),("Vector","App::PropertyVector")]) self.b1 = self.button("b1","OK") self.layout.addStretch(100)
def makeReduct(propList=[], pos=None, Z=None, conc=True): '''Adds a Reduct object makeReduct(propList=[], pos=None, Z=None, conc=True) propList is one optional list with 6 elements: PSize (string): nominal diameter OD (float): major diameter OD2 (float): minor diameter thk (float): major thickness thk2 (float): minor thickness H (float): length of reduction pos (vector): position of insertion; default = 0,0,0 Z (vector): orientation: default = 0,0,1 conc (bool): True for concentric or Flase for eccentric reduction Remember: property PRating must be defined afterwards ''' if pos==None: pos=FreeCAD.Vector(0,0,0) if Z==None: Z=FreeCAD.Vector(0,0,1) a=FreeCAD.ActiveDocument.addObject("Part::FeaturePython",translate("Part::FeaturePython","Reduction")) propList.append(conc) pFeatures.Reduct(a,*propList) a.ViewObject.Proxy=0 a.Placement.Base=pos rot=FreeCAD.Rotation(FreeCAD.Vector(0,0,1),Z) a.Placement.Rotation=rot.multiply(a.Placement.Rotation) return a
def draw_update(self, point): """ Update the geometry as it has been defined """ if len(self.node) == 1: self.alignment_tracker.on() #if self.planetrack: # self.planetrack.set(self.node[0]) #print(translate('Transportation', 'Pick next point:\n')) return print(type(self.obj.Shape)) #res = self.update_shape(self.node) #print(type(res)) #self.obj.Shape = self.update_shape(self.node) print( translate('Transportation', 'Pick next point, finish (Shift+f), or close (o):') + '\n')
def __init__(self): # create the se Toolbar self.mw = FreeCADGui.getMainWindow() self.seWidget = QtGui.QDockWidget() self.baseWidget = DraftDockWidget() self.seWidget.setObjectName("seToolbar") self.seWidget.setTitleBarWidget(self.baseWidget) self.seWidget.setWindowTitle( translate("se", "Surface Editor Command Bar")) self.mw.addDockWidget(QtCore.Qt.TopDockWidgetArea, self.seWidget) self.baseWidget.setVisible(False) self.seWidget.setVisible(False) #self.seWidget.toggleViewAction().setVisible(False) #self.sourceCmd = None #self.taskmode = Draft.getParam("UiMode") self.layout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self.baseWidget) self.layout.setDirection(QtGui.QBoxLayout.LeftToRight) self.layout.setObjectName("layout") self.l1 = self.label("l1", "current command: ") self.lcommand = self.label("lcommand", "None") self.w1 = self.lineedit("w1", width=100) self.l2 = self.label("l1", "value:") self.w2 = self.lineedit("w2", width=100) self.q1 = self.combo("q1", [("String", "App::PropertyString"), ("Float", "App::PropertyFloat"), ("Vector", "App::PropertyVector")]) self.b1 = self.button("b1", "OK") self.layout.addStretch(100)
def draw_arc(self, rad, chamfer, delete): """Processes the selection and draws the actual object""" wires = FreeCADGui.Selection.getSelection() _two = translate("draft", "two elements needed") if not wires: FCC.PrintError("CommandFillet: " + _two + "\n") return if len(wires) != 2: FCC.PrintError("CommandFillet: " + _two + "\n") return for o in wires: FCC.PrintMessage("CommandFillet: " + Draft.getType(o) + "\n") _test = translate("draft", "Test object") _test_off = translate("draft", "Test object removed") _cant = translate("draft", "fillet cannot be created") FCC.PrintMessage(4 * "=" + _test + "\n") arc = makeFillet(wires, rad) if not arc: FCC.PrintError("CommandFillet: " + _cant + "\n") return self.doc.removeObject(arc.Name) FCC.PrintMessage(4 * "=" + _test_off + "\n") doc = 'FreeCAD.ActiveDocument.' _wires = '[' + doc + wires[0].Name + ', ' + doc + wires[1].Name + ']' FreeCADGui.addModule("DraftFillet") name = translate("draft", "Create fillet") args = _wires + ', radius=' + str(rad) if chamfer: args += ', chamfer=' + str(chamfer) if delete: args += ', delete=' + str(delete) func = ['arc = DraftFillet.makeFillet(' + args + ')'] func.append('Draft.autogroup(arc)') # Here we could remove the old objects, but the makeFillet() # command already includes an option to remove them. # Therefore, the following is not necessary # rems = [doc + 'removeObject("' + o.Name + '")' for o in wires] # func.extend(rems) func.append('FreeCAD.ActiveDocument.recompute()') self.commit(name, func)
def Initialize(self): import pForms import CUtils import CFrame import CPipe from PySide.QtCore import QT_TRANSLATE_NOOP from DraftGui import translate from dodoPM import toolList FreeCADGui.addLanguagePath(pForms.getLanguagePath()) FreeCADGui.updateLocale() self.utilsList=["selectSolids","queryModel","moveWorkPlane","offsetWorkPlane","rotateWorkPlane","hackedL","moveHandle","dpCalc"] self.appendToolbar(translate("dodo","Utils"),self.utilsList) Log ('Loading Utils: done\n') self.frameList=["frameIt","FrameBranchManager","insertSection","spinSect","reverseBeam","shiftBeam","pivotBeam","levelBeam","alignEdge","rotJoin","alignFlange","stretchBeam","extend","adjustFrameAngle","insertPath"] self.appendToolbar(translate("dodo","frametools"),self.frameList) Log ('Loading Frame tools: done\n') self.pypeList=["insertPipe","insertElbow","insertReduct","insertCap","insertValve","insertFlange","insertUbolt","insertPypeLine","insertBranch","insertTank","insertRoute","breakPipe","mateEdges","flat","extend2intersection","extend1intersection","laydown","raiseup","attach2tube","point2point","insertAnyz"]#,"joinPype"] self.qm=toolList # ["pipeQM","elbowQM","reductQM"] self.appendToolbar(translate("dodo","pypetools"),self.pypeList) Log ('Loading Pipe tools: done\n') self.appendMenu(translate("dodo","Frame tools"),self.frameList) self.appendMenu(translate("dodo","Pype tools"),self.pypeList) self.appendMenu(translate("dodo","Utils"),self.utilsList) self.appendMenu(translate("dodo","QkMenus"),self.qm)
def Activated(self): """ Command activation method """ if self.is_activated: return self.is_activated = True DraftTools.DraftTool.Activated(self, name=translate('Transportation', 'Alignment')) self.call = self.view.addEventCallback("SoEvent", self.action) #make all other visible geometry unselectable view_objects = [ _v.ViewObject for _v in App.ActiveDocument.findObjects() if hasattr(_v, 'ViewObject') ] self.selectable_objects = [ _v for _v in view_objects if hasattr(_v, 'Selectable') ] for vobj in self.selectable_objects: vobj.Selectable = False #create temporary group and geometry self.temp_group = \ App.ActiveDocument.addObject('App::DocumentObjectGroup', 'Temp') points = self.alignment.Points[:] for point in points: point.z = 0.1 self.alignment_draft = utils.make_wire(points, str(uuid.uuid4())) self.temp_group.addObject(self.alignment_draft) if not self.alignment_tracker: self.alignment_tracker = AlignmentTracker() self.alignment.ViewObject.LineColor = (0.5, 0.5, 0.5) self.alignment.ViewObject.DrawStyle = u'Dashed' self.alignment.ViewObject.Selectable = False self.edges = self.alignment.Proxy.get_edges() #panel = DraftAlignmentTask(self.clean_up) #Gui.Control.showDialog(panel) #panel.setup() App.ActiveDocument.recompute()
def Activated(self): ''' Command activation method ''' DraftTools.Line.Activated(self, name=translate('Transportation', 'Alignment')) if self.doc: self.alignment_tracker = AlignmentTracker()
def undo_last(self): ''' Undo the last segment ''' if len(self.node) > 1: self.node.pop() self.alignment_tracker.update(self.node, degree = self.degree) self.obj.Shape = self.updateShape(self.node) print(translate('Transporation', 'Undo last point'))
def ContextMenu(self, recipient): """Define an optional custom context menu.""" from DraftGui import translate if recipient == "View": if FreeCAD.activeDraftCommand is None: if FreeCADGui.Selection.getSelection(): self.appendContextMenu( "Draft", self.drawing_commands + self.modification_commands) self.appendContextMenu("Utilities", self.context_commands) else: self.appendContextMenu("Draft", self.drawing_commands) else: if FreeCAD.activeDraftCommand.featureName in ( translate("draft", "Line"), translate("draft", "Wire"), translate("draft", "Polyline"), translate("draft", "BSpline"), translate("draft", "BezCurve"), translate("draft", "CubicBezCurve")): # BUG: the line subcommands are in fact listed # in the context menu, but they are de-activated # so they don't work. self.appendContextMenu("", self.line_commands) else: if FreeCADGui.Selection.getSelection(): self.appendContextMenu("Utilities", self.context_commands)
def Activated(self): from bimEdit import hideAttribute self.name = translate("draft","bimMove", utf8_decode=True) Modifier.Activated(self,self.name) self.ghost = {} for typ in self.sel_dict: if typ not in self.ghost: self.ghost.update({typ:[]}) for o in self.sel_dict[typ]: self.ghost[typ].append(o.ghost[typ]) ## Proceeding if self.call: self.view.removeEventCallback("SoEvent",self.call) self.ui.pointUi(self.name) self.ui.modUi() if self.copymode: self.ui.isCopy.setChecked(True) self.ui.xValue.setFocus() self.ui.xValue.selectAll() self.call = self.view.addEventCallback("SoEvent",self.action) msg(translate("draft", "Pick start point:")+"\n")
def proceed(self): if self.call: self.view.removeEventCallback("SoEvent",self.call) self.sel = FreeCADGui.Selection.getSelection() self.sel = Draft.getGroupContents(self.sel) self.refs = [] self.ui.pointUi(self.name) self.ui.modUi() self.ui.xValue.setFocus() self.ui.xValue.selectAll() self.ghost = ghostTracker(self.sel) self.pickmode = False self.task = None self.call = self.view.addEventCallback("SoEvent",self.action) msg(translate("draft", "Pick base point:")+"\n")
def ContextMenu(self, recipient): "right-clicks on screen" try: import BOPTools # as bop import Design456_Extrude # import all needed files import Design456_Extract import Design456_ExtrudeFace import Design456_SplitObject import Design456_loftOnDirection import Design456_Part as designPart import Design456_Part_Tools as pTools import Design456_Part_Utils as pUtils import Design456_2Ddrawing as TwoDDraw self.appendContextMenu("Design456_Part", designPart.Design456_Part.list) self.appendContextMenu("Design456_Tools", pTools.Design456_Part_Tools.list) self.appendContextMenu("Design456_2DTools", pUtils.Design456_Part_Utils.list) self.appendContextMenu("Design456_2Ddrawing", TwoDDraw.Design456_2Ddrawing.list) # from DRAFT """Define an optional custom context menu.""" # from Design456_PART self.appendContextMenu("Design456_Part", designPart.Design456_Part.list) from DraftGui import translate if recipient == "View": if App.activeDraftCommand is None: if Gui.Selection.getSelection(): self.appendContextMenu( "Draft", self.drawing_commands + self.modification_commands) self.appendContextMenu("Utilities", self.context_commands) else: self.appendContextMenu("Draft", self.drawing_commands) else: if App.activeDraftCommand.featureName in ( translate("draft", "Line"), translate("draft", "Wire"), translate("draft", "Polyline"), translate("draft", "BSpline"), translate("draft", "BezCurve"), translate("draft", "CubicBezCurve")): self.appendContextMenu("", self.line_commands) else: if Gui.Selection.getSelection(): self.appendContextMenu("Utilities", self.context_commands) # END DRAFT except Exception as exc: App.Console.PrintError(exc) App.Console.PrintError("Error: Draft ContexMenu " "failed, " "Draft will not work as expected.\n")
def Activated(self): from bimEdit import hideAttribute self.name = translate("draft","bimRotate", utf8_decode=True) Modifier.Activated(self,self.name) self.ghost = {} for typ in self.sel_dict: if typ not in self.ghost: self.ghost.update({typ:[]}) for o in self.sel_dict[typ]: self.ghost[typ].append(o.ghost[typ]) self.arctrack = None ## Proceeding if self.call: self.view.removeEventCallback("SoEvent",self.call) self.step = 0 self.center = None self.ui.arcUi() self.ui.modUi() self.ui.setTitle("Rotate") self.arctrack = arcTracker() self.call = self.view.addEventCallback("SoEvent",self.action) msg(translate("draft", "Pick rotation center:")+"\n")
def numericInput(self,numx,numy,numz): "this function gets called by the toolbar when valid x, y, and z \ have been entered there" self.center = Vector(numx,numy,numz) self.node = [self.center] self.arctrack.setCenter(self.center) if self.ghost: for typ in self.ghost: if typ == 'toEdit' or typ == 'dirDeps': for g in [i for i in self.ghost[typ]]: g.center(self.center) self.ui.radiusUi() self.ui.hasFill.hide() self.ui.labelRadius.setText("Base angle") self.step = 1 msg(translate("draft", "Pick base angle:")+"\n")
def numericRadius(self,rad): "this function gets called by the toolbar when valid radius have been entered there" if (self.step == 1): self.ui.labelRadius.setText("Rotation") self.firstangle = math.radians(rad) self.arctrack.setStartAngle(self.firstangle) self.arctrack.on() if self.ghost: for typ in self.ghost: if typ == 'toEdit' or typ == 'dirDeps': for g in [i for i in self.ghost[typ]]: g.on() self.step = 2 msg(translate("draft", "Pick rotation angle:")+"\n") else: self.rot(math.radians(rad),self.ui.isCopy.isChecked()) self.finish(cont=True)
def makeShell(L=1000,W=1500,H=1500,thk1=6,thk2=8): ''' makeShell(L,W,H,thk1,thk2) Adds the shell of a tank, given L(ength): default=800 W(idth): default=400 H(eight): default=500 thk (thickness): default=6 ''' a=FreeCAD.ActiveDocument.addObject("Part::FeaturePython",translate("Part::FeaturePython","Tank")) pFeatures.Shell(a,L,W,H,thk1,thk2) a.ViewObject.Proxy=0 a.Placement.Base=FreeCAD.Vector(0,0,0) a.ViewObject.ShapeColor=0.0,0.0,1.0 a.ViewObject.Transparency=85 FreeCAD.ActiveDocument.recompute() return a
def ContextMenu(self, recipient): """Define an optional custom context menu.""" from DraftGui import translate if recipient == "View": if FreeCAD.activeDraftCommand is None: if FreeCADGui.Selection.getSelection(): self.appendContextMenu("Draft", self.drawing_commands + self.modification_commands) self.appendContextMenu("Utilities", self.context_commands) else: self.appendContextMenu("Draft", self.drawing_commands) else: if FreeCAD.activeDraftCommand.featureName == translate("draft","Line"): # BUG: line subcommands are not usable while another command is active self.appendContextMenu("", self.line_commands) else: if FreeCADGui.Selection.getSelection(): self.appendContextMenu("Utilities", self.context_commands)
def action(self,arg): "scene event handler" if arg["Type"] == "SoKeyboardEvent": if arg["Key"] == "ESCAPE": self.finish() elif arg["Type"] == "SoLocation2Event": #mouse movement detection #if self.ghost: # self.ghost.off() self.point,ctrlPoint,info = getPoint(self,arg) if (len(self.node) > 0): last = self.node[len(self.node)-1] delta = self.point.sub(last) if self.ghost: for typ in self.ghost: if typ == 'toEdit' or typ == 'dirDeps': for g in [i for i in self.ghost[typ]]: g.move(delta) g.on() if self.extendedCopy: if not hasMod(arg,MODALT): self.finish() redraw3DView() elif arg["Type"] == "SoMouseButtonEvent": if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): if self.point: self.ui.redraw() if (self.node == []): self.node.append(self.point) self.ui.isRelative.show() if self.ghost: for typ in self.ghost: if typ == 'toEdit' or typ == 'dirDeps': for g in [i for i in self.ghost[typ]]: g.on() msg(translate("draft", "Pick end point:")+"\n") if self.planetrack: self.planetrack.set(self.point) else: last = self.node[0] if self.ui.isCopy.isChecked() or hasMod(arg,MODALT): self.move(self.point.sub(last),True) else: self.move(self.point.sub(last)) if hasMod(arg,MODALT): self.extendedCopy = True else: self.finish(cont=True)
def move(self,delta,copy=False): "moving the real shape's bases" FreeCADGui.addModule("Draft") sel_to_edit = [o for typ in self.sel_dict \ for o in self.sel_dict[typ] if typ == 'toEdit'] if copy: obj_to_edit = replica(sel_to_edit) else: obj_to_edit = [s.obj for s in sel_to_edit] sel = '[' for o in obj_to_edit: if len(sel) > 1: sel += ',' sel += 'FreeCAD.ActiveDocument.' + o.Name sel += ']' self.commit(translate("draft","Move"), ['Draft.move('+sel+','+DraftVecUtils.toString(delta)+ \ ',copy=False)', 'FreeCAD.ActiveDocument.recompute()'])
def numericInput(self,numx,numy,numz): "this function gets called by the toolbar when valid x, y, and z \ have been entered there" self.point = Vector(numx,numy,numz) if not self.node: self.node.append(self.point) self.ui.isRelative.show() self.ui.isCopy.show() for typ in self.ghost: if typ == 'toEdit' or typ == 'dirDeps': for g in [i for i in self.ghost[typ]]: g.on() msg(translate("draft", "Pick end point:")+"\n") else: last = self.node[-1] if self.ui.isCopy.isChecked(): self.move(self.point.sub(last),True) else: self.move(self.point.sub(last)) self.finish()
def rot (self,angle,copy=False): "rotating the real shapes'bases" FreeCADGui.addModule("Draft") sel_to_edit = [o for typ in self.sel_dict \ for o in self.sel_dict[typ] if typ == 'toEdit'] if copy: obj_to_edit = replica(sel_to_edit) else: obj_to_edit = [s.obj for s in sel_to_edit] sel = '[' for o in obj_to_edit: if len(sel) > 1: sel += ',' sel += 'FreeCAD.ActiveDocument.'+o.Name sel += ']' self.commit(translate("draft","Rotate"), ['Draft.rotate('+sel+','+str(math.degrees(angle))+','+ \ DraftVecUtils.toString(self.center)+',axis='+ \ DraftVecUtils.toString(plane.axis)+',copy=False)'])