def updateGhost(self,obj,idx,pt): if Draft.getType(obj) in ["Wire"]: self.ghost.on() pointList = self.applyPlacement(obj.Points) pointList[idx] = pt if obj.Closed: pointList.append(pointList[0]) self.ghost.updateFromPointlist(pointList) elif Draft.getType(obj) == "BSpline": self.ghost.on() pointList = self.applyPlacement(obj.Points) pointList[idx] = pt if obj.Closed: pointList.append(pointList[0]) self.ghost.update(pointList) elif Draft.getType(obj) == "BezCurve": self.ghost.on() plist = self.applyPlacement(obj.Points) pointList = self.recomputePointsBezier(plist,idx,pt,obj.Degree,moveTrackers=True) self.ghost.update(pointList,obj.Degree) elif Draft.getType(obj) == "Circle": self.ghost.on() if self.arc3Pt == False: self.ghost.setCenter(obj.Placement.Base) self.ghost.setRadius(obj.Radius) self.ghost.setStartAngle(math.radians(obj.FirstAngle)) self.ghost.setEndAngle(math.radians(obj.LastAngle)) if self.editing == 0: self.ghost.setCenter(pt) elif self.editing == 1: self.ghost.setStartPoint(pt) elif self.editing == 2: self.ghost.setEndPoint(pt) elif self.editing == 3: self.ghost.setRadius(self.invpl.multVec(pt).Length) elif self.arc3Pt == True: if self.editing == 0:#center point import DraftVecUtils p1 = self.invpl.multVec(self.obj.Shape.Vertexes[0].Point) p2 = self.invpl.multVec(self.obj.Shape.Vertexes[1].Point) p0 = DraftVecUtils.project(self.invpl.multVec(pt),self.invpl.multVec(self.getArcMid())) self.ghost.autoinvert=False self.ghost.setRadius(p1.sub(p0).Length) self.ghost.setStartPoint(self.obj.Shape.Vertexes[1].Point) self.ghost.setEndPoint(self.obj.Shape.Vertexes[0].Point) self.ghost.setCenter(self.pl.multVec(p0)) return else: p1=self.obj.Shape.Vertexes[0].Point p2=self.getArcMid() p3=self.obj.Shape.Vertexes[1].Point if self.editing == 1: p1=pt elif self.editing == 3: p2=pt elif self.editing == 2: p3=pt self.ghost.setBy3Points(p1,p2,p3) DraftTools.redraw3DView()
def Activated(self, shapeType=None): self.ShapeType = shapeType name = DraftTools.translate("draft", "Rectangle") DraftTools.Creator.Activated(self, name) if self.ui: self.refpoint = None self.ui.pointUi(name) self.ui.extUi() self.call = self.view.addEventCallback("SoEvent", self.action) self.rect = trackers.rectangleTracker() Utils.EB_Print.print_msg( DraftTools.translate("draft", "Pick first point:") + "\n")
def action(self, arg): """Scene event handler. CURRENTLY NOT USED. Here the displaying of the trackers (previews) should be implemented by considering the current value of the `ui.radiusValue`. """ if arg["Type"] == "SoKeyboardEvent": if arg["Key"] == "ESCAPE": self.finish() elif arg["Type"] == "SoLocation2Event": self.point, ctrlPoint, info = DraftTools.getPoint(self, arg) DraftTools.redraw3DView()
def button_action(self, arg): """ Button click trapping """ _p = self.view.getCursorPos() self.mouse.update(arg, _p) #manage selection if self.mouse.button1.pressed: self.on_selection(arg, _p) DraftTools.redraw3DView()
def action(self, arg): #re-defintition of the method of parent "scene event handler" if arg["Type"] == "SoKeyboardEvent" and arg["State"] == 'DOWN': # key detection if arg["Key"] == "ESCAPE": self.finish() elif arg["ShiftDown"] and arg["CtrlDown"]: if arg["Key"] in ('M', 'm'): if self.hackedUI.cb1.isChecked(): self.hackedUI.cb1.setChecked(False) else: self.hackedUI.cb1.setChecked(True) elif arg["Key"] in ('O', 'o'): self.offsetWP() elif arg["Key"] in ('R', 'r'): self.rotateWP() elif arg["Type"] == "SoLocation2Event": # mouse movement detection self.point, ctrlPoint, info = DraftTools.getPoint(self, arg) elif arg["Type"] == "SoMouseButtonEvent": # mouse button detection if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): if (arg["Position"] == self.pos): self.finish(False, cont=True) else: if (not self.node) and (not self.support): DraftTools.getSupport(arg) self.point, ctrlPoint, info = DraftTools.getPoint( self, arg) if self.point: self.ui.redraw() self.pos = arg["Position"] self.node.append(self.point) self.drawSegment(self.point) if self.hackedUI.cb1.isChecked(): rot = FreeCAD.DraftWorkingPlane.getPlacement( ).Rotation normal = rot.multVec(FreeCAD.Vector(0, 0, 1)) FreeCAD.DraftWorkingPlane.alignToPointAndAxis( self.point, normal) FreeCADGui.Snapper.setGrid() if (not self.isWire and len(self.node) == 2): self.finish(False, cont=True) if (len(self.node) > 2): if ((self.point - self.node[0]).Length < Draft.tolerance()): self.undolast() self.finish(True, cont=True)
def Activated(self): wires = FreeCADGui.Selection.getSelection() if not wires: FCC.PrintError("CommandFillet: two elements needed" + "\n") return if len(wires) != 2: FCC.PrintError("CommandFillet: two elements needed" + "\n") return for o in wires: FCC.PrintMessage("CommandFillet: " + Draft.getType(o) + "\n") # Choose only wires. # A test could be used to chose edges in general. if Draft.getType(o) not in "Wire": FCC.PrintError("CommandFillet: wires needed" + "\n") return doc = 'FreeCAD.ActiveDocument.' _wires = '[' + doc + wires[0].Name + ', ' + doc + wires[1].Name + ']' rems = [doc + 'removeObject("' + o.Name + '")' for o in wires] FreeCADGui.addModule("Draft") func = DraftTools.translate("draft", "Create fillet") arg = [ 'arc = DraftFillet.makeFillet(' + _wires + ')', *rems, 'Draft.autogroup(arc)', 'FreeCAD.ActiveDocument.recompute()' ] DraftGui.todo.delayCommit([(func, arg)])
def action(self, arg): ''' Event handling for alignment drawing ''' #trap the escape key to quit if arg['Type'] == 'SoKeyboardEvent': if arg['Key'] == 'ESCAPE': self.finish() return #trap mouse movement if arg['Type'] == 'SoLocation2Event': self.point, ctrl_point, info = DraftTools.getPoint(self, arg, noTracker=False) self.alignment_tracker.update(self.node + [self.point], degree=self.degree) redraw3DView() return #trap button clicks if arg['Type'] == 'SoMouseButtonEvent': if (arg['State'] == 'DOWN') and (arg['Button'] == 'BUTTON1'): if arg['Position'] == self.pos: self.finish(False, cont=True) return #first point if not (self.node or self.support): getSupport(arg) self.point, ctrl_point, info = DraftTools.getPoint(self, arg, noTracker=True) if self.point: self.ui.redraw() self.node.append(self.point) self.draw_update(self.point) if not self.isWire and len(self.node) == 2: self.finish(False, cont = True)
def __init__(self, doc): self.ui_path = resources.__path__[0] + '/ui/' self.ui = self.ui_path + 'sprite_splitter_task_panel.ui' self.form = None self.subtask = None self.panel = None self.doc = doc self.plane = None self.names = ['FreeCAD', self.doc.Name, 'Sprite Splitter'] self.image = QtGui.QImage() self.cursor_trackers = [ WireTracker(self.names), WireTracker(self.names[:2] + ['CURSOR']) ] self.rubberband_tracker = BoxTracker(self.names[:2] + ['RUBBERBAND']) self.rubberband_tracker.set_selectability(False) self.node = BaseTracker(self.names) self.node.insert_node(self.cursor_trackers[0].switch) self.node.insert_node(self.cursor_trackers[1].switch) self.node.insert_node(self.rubberband_tracker.switch) #deselect existing selections Gui.Selection.clearSelection() self.callbacks = { 'SoLocation2Event': ViewState().view.addEventCallback('SoLocation2Event', self.mouse_event), 'SoMouseButtonEvent': ViewState().view.addEventCallback('SoMouseButtonEvent', self.button_event) } self.grid_tracker = GridTracker(self.names) DraftTools.redraw3DView()
def Activated(self, shapeType=None): DraftTools.Creator.Activated(self) self.ShapeType = shapeType self.view = Draft.get3DView() self.stack = [] rot = self.view.getCameraNode().getField("orientation").getValue() upv = DraftTools.Vector(rot.multVec(coin.SbVec3f(0, 1, 0)).getValue()) DraftTools.plane.setup(self.view.getViewDirection().negative(), DraftTools.Vector(0, 0, 0), upv) self.point = None if self.ui: self.ui.pointUi() self.ui.continueCmd.show() # adding 2 callback functions self.callbackClick = self.view.addEventCallbackPivy( coin.SoMouseButtonEvent.getClassTypeId(), self.click) self.callbackMove = self.view.addEventCallbackPivy( coin.SoLocation2Event.getClassTypeId(), self.move)
def action(self,arg): #re-defintition of the method of parent "scene event handler" if arg["Type"] == "SoKeyboardEvent" and arg["State"]=='DOWN': # key detection if arg["Key"] == "ESCAPE": self.finish() elif arg["ShiftDown"] and arg["CtrlDown"]: if arg["Key"] in ('M','m'): if self.hackedUI.cb1.isChecked(): self.hackedUI.cb1.setChecked(False) else: self.hackedUI.cb1.setChecked(True) elif arg["Key"] in ('O','o'): self.offsetWP() elif arg["Key"] in ('R','r'): self.rotateWP() elif arg["Type"] == "SoLocation2Event": # mouse movement detection self.point,ctrlPoint,info = DraftTools.getPoint(self,arg) elif arg["Type"] == "SoMouseButtonEvent": # mouse button detection if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): if (arg["Position"] == self.pos): self.finish(False,cont=True) else: if (not self.node) and (not self.support): DraftTools.getSupport(arg) self.point,ctrlPoint,info = DraftTools.getPoint(self,arg) if self.point: self.ui.redraw() self.pos = arg["Position"] self.node.append(self.point) self.drawSegment(self.point) if self.hackedUI.cb1.isChecked(): rot=FreeCAD.DraftWorkingPlane.getPlacement().Rotation normal=rot.multVec(FreeCAD.Vector(0,0,1)) FreeCAD.DraftWorkingPlane.alignToPointAndAxis(self.point,normal) FreeCADGui.Snapper.setGrid() if (not self.isWire and len(self.node) == 2): self.finish(False,cont=True) if (len(self.node) > 2): if ((self.point-self.node[0]).Length < Draft.tolerance()): self.undolast() self.finish(True,cont=True)
def Initialize(self): # run self-tests depsOK = False try: from pivy import coin if FreeCADGui.getSoDBVersion() != coin.SoDB.getVersion(): raise AssertionError("FreeCAD and Pivy use different versions of Coin. This will lead to unexpected behaviour.") except AssertionError: FreeCAD.Console.PrintWarning("Error: FreeCAD and Pivy use different versions of Coin. This will lead to unexpected behaviour.\n") except ImportError: FreeCAD.Console.PrintWarning("Error: Pivy not found, Draft workbench will be disabled.\n") except: FreeCAD.Console.PrintWarning("Error: Unknown error while trying to load Pivy\n") else: try: import PyQt4 except ImportError: FreeCAD.Console.PrintWarning("Error: PyQt4 not found, Draft workbench will be disabled.\n") else: depsOK = True if not depsOK: return try: import os,macros,DraftTools,DraftGui,Draft_rc FreeCADGui.addLanguagePath(":/translations") FreeCADGui.addIconPath(":/icons") if not hasattr(FreeCADGui.draftToolBar,"loadedPreferences"): FreeCADGui.addPreferencePage(":/ui/userprefs-base.ui","Draft") FreeCADGui.addPreferencePage(":/ui/userprefs-import.ui","Draft") FreeCADGui.draftToolBar.loadedPreferences = True self.appendMenu(["&Macro",str(DraftTools.translate("draft","Installed Macros"))],macros.macrosList) Log ('Loading Draft module...done\n') except: pass self.cmdList = ["Draft_Line","Draft_Wire","Draft_Circle","Draft_Arc","Draft_Ellipse", "Draft_Polygon","Draft_Rectangle", "Draft_Text", "Draft_Dimension", "Draft_BSpline","Draft_Point", "Draft_ShapeString"] self.modList = ["Draft_Move","Draft_Rotate","Draft_Offset", "Draft_Trimex", "Draft_Upgrade", "Draft_Downgrade", "Draft_Scale", "Draft_Drawing","Draft_Edit","Draft_WireToBSpline","Draft_AddPoint", "Draft_DelPoint","Draft_Shape2DView","Draft_Draft2Sketch","Draft_Array", "Draft_Clone","Draft_Heal"] self.treecmdList = ["Draft_ApplyStyle","Draft_ToggleDisplayMode","Draft_AddToGroup", "Draft_SelectGroup","Draft_SelectPlane","Draft_ToggleSnap", "Draft_ShowSnapBar","Draft_ToggleGrid"] self.lineList = ["Draft_UndoLine","Draft_FinishLine","Draft_CloseLine"] self.appendToolbar(str(DraftTools.translate("draft","Draft creation tools")),self.cmdList) self.appendToolbar(str(DraftTools.translate("draft","Draft modification tools")),self.modList) self.appendMenu(str(DraftTools.translate("draft","&Draft")),self.cmdList+self.modList) self.appendMenu([str(DraftTools.translate("draft","&Draft")),str(DraftTools.translate("draft","Context tools"))],self.treecmdList) self.appendMenu([str(DraftTools.translate("draft","&Draft")),str(DraftTools.translate("draft","Wire tools"))],self.lineList)
def updateGhost(self,obj,idx,pt): if Draft.getType(obj) in ["Wire"]: self.ghost.on() pointList = self.applyPlacement(obj.Points) pointList[idx] = pt if obj.Closed: pointList.append(pointList[0]) self.ghost.updateFromPointlist(pointList) elif Draft.getType(obj) == "BSpline": self.ghost.on() pointList = self.applyPlacement(obj.Points) pointList[idx] = pt if obj.Closed: pointList.append(pointList[0]) self.ghost.update(pointList) elif Draft.getType(obj) == "BezCurve": self.ghost.on() plist = self.applyPlacement(obj.Points) pointList = self.recomputePointsBezier(plist,idx,pt,obj.Degree,moveTrackers=True) self.ghost.update(pointList,obj.Degree) DraftTools.redraw3DView()
def __init__(self): super().__init__('PivyTrackerTask', Gui.ActiveDocument.ActiveView) #self.panel = None _camera = self.view_state.view.getCameraNode() self.camera_state = self.CameraState(position=(0.0, 0.0, 0.0), height=0.0, box_corners=(-120.0, -120.0, 120.0, 120.0)) self.pivy_tracker = PivyTracker() self.pivy_tracker.insert_into_scenegraph(True) DraftTools.redraw3DView() self._zoom_camera()
def Initialize(self): import DraftTools,DraftGui,Arch_rc,Arch self.archtools = ["Arch_Wall","Arch_Structure", "Arch_Floor","Arch_Building","Arch_Site", "Arch_Window","Arch_Roof","Arch_Axis", "Arch_SectionPlane","Arch_Add","Arch_Remove"] self.drafttools = ["Draft_Line","Draft_Wire","Draft_Rectangle", "Draft_Polygon","Draft_Arc", "Draft_Circle","Draft_Dimension", "Draft_Move","Draft_Rotate", "Draft_Offset","Draft_Upgrade", "Draft_Downgrade","Draft_Trimex"] self.draftcontexttools = ["Draft_ApplyStyle","Draft_ToggleDisplayMode", "Draft_AddToGroup","Draft_SelectGroup", "Draft_SelectPlane","Draft_ToggleSnap", "Draft_ShowSnapBar","Draft_ToggleGrid"] self.meshtools = ["Arch_SplitMesh","Arch_MeshToShape", "Arch_SelectNonSolidMeshes","Arch_RemoveShape"] self.appendToolbar(str(DraftTools.translate("arch","Arch tools")),self.archtools) self.appendToolbar(str(DraftTools.translate("arch","Draft tools")),self.drafttools) self.appendMenu([str(DraftTools.translate("arch","&Architecture")),str(DraftTools.translate("arch","Conversion Tools"))],self.meshtools) self.appendMenu(str(DraftTools.translate("arch","&Architecture")),self.archtools) self.appendMenu(str(DraftTools.translate("arch","&Draft")),self.drafttools+self.draftcontexttools) FreeCADGui.addIconPath(":/icons") FreeCADGui.addLanguagePath(":/translations") FreeCADGui.addPreferencePage(":/ui/archprefs-base.ui","Arch") Log ('Loading Arch module... done\n')
def appendPoint(self, point): self.node.append(point) if (len(self.node) > 1): self.rect.update(point) self.createObject() else: Utils.EB_Print.print_msg( DraftTools.translate("draft", "Pick opposite point:") + "\n") self.ui.setRelative() self.rect.setorigin(point) self.rect.on() if self.planetrack: self.planetrack.set(point)
def action(self, arg): """scene event handler""" if arg["Type"] == "SoKeyboardEvent": if arg["Key"] == "ESCAPE": self.reject() elif arg["Type"] == "SoLocation2Event": # mouse movement detection self.point, ctrlPoint, info = DraftTools.getPoint(self.sourceCmd, arg, noTracker=True) if not self.pointPicked: self.setPoint(self.point) elif arg["Type"] == "SoMouseButtonEvent": if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): self.setPoint(self.point) self.pointPicked = True
def Initialize(self): import DraftTools, DraftGui, Arch_rc, Arch self.archtools = [ "Arch_Wall", "Arch_Structure", "Arch_Floor", "Arch_Building", "Arch_Site", "Arch_Window", "Arch_Roof", "Arch_Axis", "Arch_SectionPlane", "Arch_Add", "Arch_Remove" ] self.drafttools = [ "Draft_Line", "Draft_Wire", "Draft_Rectangle", "Draft_Polygon", "Draft_Arc", "Draft_Circle", "Draft_Dimension", "Draft_Move", "Draft_Rotate", "Draft_Offset", "Draft_Upgrade", "Draft_Downgrade", "Draft_Trimex" ] self.draftcontexttools = [ "Draft_ApplyStyle", "Draft_ToggleDisplayMode", "Draft_AddToGroup", "Draft_SelectGroup", "Draft_SelectPlane", "Draft_ToggleSnap", "Draft_ShowSnapBar", "Draft_ToggleGrid" ] self.meshtools = [ "Arch_SplitMesh", "Arch_MeshToShape", "Arch_SelectNonSolidMeshes", "Arch_RemoveShape" ] self.appendToolbar(str(DraftTools.translate("arch", "Arch tools")), self.archtools) self.appendToolbar(str(DraftTools.translate("arch", "Draft tools")), self.drafttools) self.appendMenu([ str(DraftTools.translate("arch", "&Architecture")), str(DraftTools.translate("arch", "Conversion Tools")) ], self.meshtools) self.appendMenu(str(DraftTools.translate("arch", "&Architecture")), self.archtools) self.appendMenu(str(DraftTools.translate("arch", "&Draft")), self.drafttools + self.draftcontexttools) FreeCADGui.addIconPath(":/icons") FreeCADGui.addLanguagePath(":/translations") FreeCADGui.addPreferencePage(":/ui/archprefs-base.ui", "Arch") Log('Loading Arch module... done\n')
def action(self, arg): "scene event handler" if arg["Type"] == "SoKeyboardEvent": if arg["Key"] == "ESCAPE": self.finish() elif arg["Type"] == "SoLocation2Event": #mouse movement detection self.point, ctrlPoint, info = DraftTools.getPoint(self, arg, mobile=True, noTracker=True) self.rect.update(self.point) DraftTools.redraw3DView() elif arg["Type"] == "SoMouseButtonEvent": if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): if (arg["Position"] == self.pos): self.finish() else: if (not self.node) and (not self.support): DraftTools.getSupport(arg) self.point, ctrlPoint, info = DraftTools.getPoint( self, arg, mobile=True, noTracker=True) if self.point: self.ui.redraw() self.appendPoint(self.point)
def Initialize(self): # run self-tests depsOK = False try: from pivy import coin if FreeCADGui.getSoDBVersion() != coin.SoDB.getVersion(): raise AssertionError( "FreeCAD and Pivy use different versions of Coin. This will lead to unexpected behaviour." ) except AssertionError: FreeCAD.Console.PrintWarning( "Error: FreeCAD and Pivy use different versions of Coin. This will lead to unexpected behaviour.\n" ) except ImportError: FreeCAD.Console.PrintWarning( "Error: Pivy not found, Draft workbench will be disabled.\n") except: FreeCAD.Console.PrintWarning( "Error: Unknown error while trying to load Pivy\n") else: try: import PyQt4 except ImportError: FreeCAD.Console.PrintWarning( "Error: PyQt4 not found, Draft workbench will be disabled.\n" ) else: depsOK = True if depsOK: import Draft_rc FreeCADGui.addLanguagePath(":/translations") FreeCADGui.addIconPath(":/icons") FreeCADGui.addPreferencePage(":/ui/userprefs-base.ui", "Draft") FreeCADGui.addPreferencePage(":/ui/userprefs-import.ui", "Draft") else: return try: import macros, DraftTools, DraftGui self.appendMenu([ "&Macro", str(DraftTools.translate("draft", "Installed Macros")) ], macros.macrosList) Log('Loading Draft GUI...done\n') except: pass self.cmdList = [ "Draft_Line", "Draft_Wire", "Draft_Circle", "Draft_Arc", "Draft_Polygon", "Draft_Rectangle", "Draft_Text", "Draft_Dimension", "Draft_BSpline", "Draft_Point" ] self.modList = [ "Draft_Move", "Draft_Rotate", "Draft_Offset", "Draft_Trimex", "Draft_Upgrade", "Draft_Downgrade", "Draft_Scale", "Draft_Drawing", "Draft_Edit", "Draft_WireToBSpline", "Draft_AddPoint", "Draft_DelPoint", "Draft_Shape2DView", "Draft_Draft2Sketch", "Draft_Array" ] self.treecmdList = [ "Draft_ApplyStyle", "Draft_ToggleDisplayMode", "Draft_AddToGroup", "Draft_SelectGroup", "Draft_SelectPlane", "Draft_ToggleSnap", "Draft_ShowSnapBar" ] self.lineList = [ "Draft_UndoLine", "Draft_FinishLine", "Draft_CloseLine" ] self.appendToolbar( str(DraftTools.translate("draft", "Draft creation tools")), self.cmdList) self.appendToolbar( str(DraftTools.translate("draft", "Draft modification tools")), self.modList) self.appendMenu(str(DraftTools.translate("draft", "&Draft")), self.cmdList + self.modList) self.appendMenu([ str(DraftTools.translate("draft", "&Draft")), str(DraftTools.translate("draft", "Display options")) ], self.treecmdList) self.appendMenu([ str(DraftTools.translate("draft", "&Draft")), str(DraftTools.translate("draft", "Wire tools")) ], self.lineList)
def action(self, arg): """ Coin SoEvent callback for mouse / keyboard handling """ #trap mouse movement if arg['Type'] == 'SoLocation2Event': _p = self.view.getCursorPos() _pt = self.view.getPoint(_p) info = self.view.getObjectInfo(_p) if info: print(info) return if not self.button_states['BUTTON1']: self.handle_mouseover_tracker(info) else: self.handle_drag_tracker(self.view.getPoint(_p)) #trap button clicks elif arg['Type'] == 'SoMouseButtonEvent': self.get_button_states(arg) _p = self.view.getCursorPos() info = self.view.getObjectInfo(_p) multi_select = arg['AltDown'] _key, _it = self.get_current_tracker(info) #empty the arry and reset the trackers if self.selected_trackers: for _tracker in self.selected_trackers: _tracker.set_style(self.STYLES.ENABLED) self.selected_trackers = [] #current defined? add it to the selection. if _it: #Clear the button states so dragging won't work unles for _v in self.button_states.values(): _v = False while True: _current = self.trackers[_key] _current.set_style(self.STYLES.SELECTED) self.active_tracker = _current self.selected_trackers.append(_current) if not multi_select: break try: _key = next(_it) except StopIteration: break self.doc.recompute() DraftTools.redraw3DView()
def Initialize(self): import DraftTools,DraftGui,Arch_rc,Arch,Draft_rc # arch tools self.archtools = ["Arch_Wall","Arch_Structure", "Arch_Floor","Arch_Building","Arch_Site", "Arch_Window","Arch_Roof","Arch_Axis", "Arch_SectionPlane","Arch_Add","Arch_Remove"] self.meshtools = ["Arch_SplitMesh","Arch_MeshToShape", "Arch_SelectNonSolidMeshes","Arch_RemoveShape", "Arch_CloseHoles"] self.calctools = ["Arch_Check"] # draft tools self.drafttools = ["Draft_Line","Draft_Wire","Draft_Circle","Draft_Arc", "Draft_Polygon","Draft_Rectangle", "Draft_Text", "Draft_Dimension", "Draft_BSpline","Draft_Point"] self.draftmodtools = ["Draft_Move","Draft_Rotate","Draft_Offset", "Draft_Trimex", "Draft_Upgrade", "Draft_Downgrade", "Draft_Scale", "Draft_Drawing","Draft_Edit","Draft_WireToBSpline","Draft_AddPoint", "Draft_DelPoint","Draft_Shape2DView","Draft_Draft2Sketch","Draft_Array", "Draft_Clone","Draft_Heal"] self.draftcontexttools = ["Draft_ApplyStyle","Draft_ToggleDisplayMode","Draft_AddToGroup", "Draft_SelectGroup","Draft_SelectPlane","Draft_ToggleSnap", "Draft_ShowSnapBar","Draft_ToggleGrid","Draft_UndoLine", "Draft_FinishLine","Draft_CloseLine"] self.appendToolbar(str(DraftTools.translate("arch","Arch tools")),self.archtools) self.appendToolbar(str(DraftTools.translate("arch","Draft tools")),self.drafttools) self.appendToolbar(str(DraftTools.translate("arch","Draft mod tools")),self.draftmodtools) self.appendMenu([str(DraftTools.translate("arch","&Architecture")),str(DraftTools.translate("arch","Conversion Tools"))],self.meshtools) self.appendMenu([str(DraftTools.translate("arch","&Architecture")),str(DraftTools.translate("arch","Calculation Tools"))],self.calctools) self.appendMenu(str(DraftTools.translate("arch","&Architecture")),self.archtools) self.appendMenu(str(DraftTools.translate("arch","&Draft")),self.drafttools+self.draftmodtools) self.appendMenu([str(DraftTools.translate("arch","&Draft")),str(DraftTools.translate("arch","Context Tools"))],self.draftcontexttools) FreeCADGui.addIconPath(":/icons") FreeCADGui.addLanguagePath(":/translations") FreeCADGui.addPreferencePage(":/ui/archprefs-base.ui","Arch") if not hasattr(FreeCADGui.draftToolBar,"loadedPreferences"): FreeCADGui.addPreferencePage(":/ui/userprefs-base.ui","Draft") FreeCADGui.addPreferencePage(":/ui/userprefs-import.ui","Draft") FreeCADGui.draftToolBar.loadedPreferences = True Log ('Loading Arch module... done\n')
def __init__(self, doc, alignment_data, obj, is_linked): super().__init__() # '.'.join([doc.Name, 'BASE_TRACKER_TEST_TASK', 'TASK'])) self.view_state = ViewState(Gui.ActiveDocument.ActiveView) self.panel = None self.doc = doc self.Object = obj self.alignment = alignment.create(alignment_data, 'TEMP', True, False) self.pi_tracker = None self.drag_tracker = None self.alignment_tracker = None #self.callbacks = {} self.camera_state = { 'position': None, 'height': None, 'bound box': None } self.view_state.view_objects = { 'selectables': [], 'line_colors': [], } #disable selection entirely self.view_state.sg_root.getField("selectionRole").setValue(0) #get all objects with LineColor and set them all to gray self.view_state.view_objects['line_colors'] = [ (_v.ViewObject, _v.ViewObject.LineColor) for _v in self.doc.findObjects() if hasattr(_v, 'ViewObject') if hasattr(_v.ViewObject, 'LineColor') ] for _v in self.view_state.view_objects['line_colors']: self.set_vobj_style(_v[0], self.STYLES.DISABLED) #get all objects in the scene that are selectable. self.view_state.view_objects['selectable'] = [ (_v.ViewObject, _v.ViewObject.Selectable) for _v in self.doc.findObjects() if hasattr(_v, 'ViewObject') if hasattr(_v.ViewObject, 'Selectable') ] for _v in self.view_state.view_objects['selectable']: _v[0].Selectable = False #deselect existing selections Gui.Selection.clearSelection() self.task_tracker = TaskTracker() self.alignment_tracker = TrackerTester(self.doc, self.Object.Name, self.alignment, is_linked, self.task_tracker.base) #self.task_tracker.insert_group(self.alignment_tracker.base) #save camera state _camera = self.view_state.view.getCameraNode() self.camera_state['position'] = _camera.position.getValue().getValue() self.camera_state['height'] = _camera.height.getValue() self.camera_state['bound box'] = self.Object.Shape.BoundBox #add mouse callbacks for updating mouse state #ViewState().add_mouse_event(self.mouse_event) #ViewState().add_button_event(self.button_event) self._zoom_camera() self.task_tracker.insert_into_scenegraph(True) DraftTools.redraw3DView()
def Initialize(self): import DraftTools,DraftGui,Arch_rc,Arch,Draft_rc # arch tools self.archtools = ["Arch_Wall","Arch_Structure", "Arch_Floor","Arch_Building","Arch_Site", "Arch_Window","Arch_Roof","Arch_Axis", "Arch_SectionPlane","Arch_Add","Arch_Remove"] self.meshtools = ["Arch_SplitMesh","Arch_MeshToShape", "Arch_SelectNonSolidMeshes","Arch_RemoveShape", "Arch_CloseHoles","Arch_MergeWalls"] self.calctools = ["Arch_Check"] # draft tools self.drafttools = ["Draft_Line","Draft_Wire","Draft_Circle","Draft_Arc","Draft_Ellipse", "Draft_Polygon","Draft_Rectangle", "Draft_Text", "Draft_Dimension", "Draft_BSpline","Draft_Point"] self.draftmodtools = ["Draft_Move","Draft_Rotate","Draft_Offset", "Draft_Trimex", "Draft_Upgrade", "Draft_Downgrade", "Draft_Scale", "Draft_Drawing","Draft_Edit","Draft_WireToBSpline","Draft_AddPoint", "Draft_DelPoint","Draft_Shape2DView","Draft_Draft2Sketch","Draft_Array", "Draft_Clone","Draft_Heal"] self.draftcontexttools = ["Draft_ApplyStyle","Draft_ToggleDisplayMode","Draft_AddToGroup", "Draft_SelectGroup","Draft_SelectPlane","Draft_ToggleSnap", "Draft_ShowSnapBar","Draft_ToggleGrid","Draft_UndoLine", "Draft_FinishLine","Draft_CloseLine"] self.appendToolbar(str(DraftTools.translate("arch","Arch tools")),self.archtools) self.appendToolbar(str(DraftTools.translate("arch","Draft tools")),self.drafttools) self.appendToolbar(str(DraftTools.translate("arch","Draft mod tools")),self.draftmodtools) self.appendMenu([str(DraftTools.translate("arch","&Architecture")),str(DraftTools.translate("arch","Conversion Tools"))],self.meshtools) self.appendMenu([str(DraftTools.translate("arch","&Architecture")),str(DraftTools.translate("arch","Calculation Tools"))],self.calctools) self.appendMenu(str(DraftTools.translate("arch","&Architecture")),self.archtools) self.appendMenu(str(DraftTools.translate("arch","&Draft")),self.drafttools+self.draftmodtools) self.appendMenu([str(DraftTools.translate("arch","&Draft")),str(DraftTools.translate("arch","Context Tools"))],self.draftcontexttools) FreeCADGui.addIconPath(":/icons") FreeCADGui.addLanguagePath(":/translations") FreeCADGui.addPreferencePage(":/ui/archprefs-base.ui","Arch") if not hasattr(FreeCADGui.draftToolBar,"loadedPreferences"): FreeCADGui.addPreferencePage(":/ui/userprefs-base.ui","Draft") FreeCADGui.addPreferencePage(":/ui/userprefs-import.ui","Draft") FreeCADGui.draftToolBar.loadedPreferences = True Log ('Loading Arch module... done\n')
def __init__(self, doc, view, alignment_data, obj): self.panel = None self.view = view self.doc = doc self.obj = obj self.alignment = alignment_model.AlignmentModel() self.alignment.data = alignment_data self.pi_tracker = None self.drag_tracker = None self.callbacks = {} self.mouse = MouseState() self.view_objects = { 'selectables': [], 'line_colors': [], } #disable selection entirely self.view.getSceneGraph().getField("selectionRole").setValue(0) #get all objects with LineColor and set them all to gray self.view_objects['line_colors'] = [ (_v.ViewObject, _v.ViewObject.LineColor) for _v in self.doc.findObjects() if hasattr(_v, 'ViewObject') if hasattr(_v.ViewObject, 'LineColor') ] for _v in self.view_objects['line_colors']: self.set_vobj_style(_v[0], self.STYLES.DISABLED) #get all objects in the scene that are selecctable. self.view_objects['selectable'] = [ (_v.ViewObject, _v.ViewObject.Selectable) for _v in self.doc.findObjects() if hasattr(_v, 'ViewObject') if hasattr(_v.ViewObject, 'Selectable') ] for _v in self.view_objects['selectable']: _v[0].Selectable = False #deselect existing selections Gui.Selection.clearSelection() _points = self.alignment.get_pi_coords() self.pi_tracker = PiTracker( self.doc, self.view, self.obj.Name, 'PI_TRACKER', _points ) self.callbacks = { 'SoKeyboardEvent': self.key_action, 'SoMouseButtonEvent': self.button_action, 'SoLocation2Event': self.mouse_action } for _k, _v in self.callbacks.items(): self.view.addEventCallback(_k, _v) panel = DraftAlignmentTask(self.clean_up) Gui.Control.showDialog(panel) #panel.setup() self.doc.recompute() DraftTools.redraw3DView()
def action(self, arg): """ Event handling for alignment drawing """ #trap the escape key to quit if arg['Type'] == 'SoKeyboardEvent': if arg['Key'] == 'ESCAPE': self.finish() return #trap mouse movement if arg['Type'] == 'SoLocation2Event': _p = Gui.ActiveDocument.ActiveView.getCursorPos() info = Gui.ActiveDocument.ActiveView.getObjectInfo(_p) curve_hash = None #test to see which curve is under the cursor if info: if info['Object'] == self.alignment_draft.Name: curve_hash = self.select_curve_edges(info['Component']) #matching hashes? nothing to do for mouseover if self.curve_hash == curve_hash: return #hashes do not match. Deselect last selected curve if Gui.Selection.getSelection(): Gui.Selection.clearSelection() if self.active_curve != self.curve_hash: self.hide_control_geometry() #if self.active_curve != curve_hash: if curve_hash: self.show_control_geometry(curve_hash) self.curve_hash = curve_hash #if this is a new curve, hide the prev geometry if not active # if self.curve_hash: #trap button clicks elif arg['Type'] == 'SoMouseButtonEvent': _p = Gui.ActiveDocument.ActiveView.getCursorPos() info = Gui.ActiveDocument.ActiveView.getObjectInfo(_p) curve_hash = None if self.active_curve: self.hide_control_geometry(self.active_curve) self.hide_curve(self.active_curve) if info: if info['Object'] == self.alignment_draft.Name: curve_hash = info['Component'] self.show_curve(self.curve_hash) self.active_curve = self.curve_hash else: self.active_curve = None if Gui.Selection.getSelection(): Gui.Selection.clearSelection() if self.curve_hash: self.hide_control_geometry() self.curve_hash = None # self.alignment_tracker.update(self.node + [self.point]) else: return App.ActiveDocument.recompute() DraftTools.redraw3DView()
def action(self,arg): "scene event handler" if arg["Type"] == "SoKeyboardEvent" and arg["State"] == "DOWN": if arg["Key"] == "ESCAPE": self.finish() elif arg["Key"] == "a": self.finish() elif arg["Key"] == "o": self.finish(closed=True) elif arg["Key"] == "i": if Draft.getType(self.obj) == "Circle": self.arcInvert() elif arg["Type"] == "SoLocation2Event": #mouse movement detection self.point,ctrlPoint,info = DraftTools.getPoint(self,arg)# causes problems when mouseover bezcurves if self.editing != None: self.trackers[self.editing].set(self.point) #FreeCAD.Console.PrintMessage(self.ghost) self.updateGhost(obj=self.obj,idx=self.editing,pt=self.point) if hasattr(self.obj.ViewObject,"Selectable"): if self.ui.addButton.isChecked(): self.obj.ViewObject.Selectable = True else: self.obj.ViewObject.Selectable = False DraftTools.redraw3DView() elif arg["Type"] == "SoMouseButtonEvent" and arg["State"] == "DOWN": if arg["Button"] == "BUTTON1": self.ui.redraw() if self.editing == None: # USECASE: User click on one of the editpoints or another object ep = None selobjs = self.getSelection() if selobjs == None: return if self.ui.addButton.isChecked():# still quite raw # USECASE: User add a new point to the object for info in selobjs: if Draft.getType(self.obj) == "Wire" and 'Edge' in info["Component"]: pt = FreeCAD.Vector(info["x"],info["y"],info["z"]) self.addPointToWire(pt, int(info["Component"][4:])) elif self.point: pt = self.point if "x" in info:# prefer "real" 3D location over working-plane-driven one if possible pt = FreeCAD.Vector(info["x"],info["y"],info["z"]) self.addPointToCurve(pt,info) self.removeTrackers() self.editpoints = [] self.setEditPoints(self.obj) self.resetTrackers() return ep = self.lookForClickedNode(selobjs,tolerance=20) if ep == None: return if self.ui.delButton.isChecked(): # still quite raw # USECASE: User delete a point of the object self.delPoint(ep) # don't do tan/sym on DWire/BSpline! self.removeTrackers() self.editpoints = [] self.setEditPoints(self.obj) self.resetTrackers() return if Draft.getType(self.obj) == "BezCurve": # USECASE: User change the continuity of a Bezcurve point if self.ui.sharpButton.isChecked(): return self.smoothBezPoint(ep, 'Sharp') elif self.ui.tangentButton.isChecked(): return self.smoothBezPoint(ep, 'Tangent') elif self.ui.symmetricButton.isChecked(): return self.smoothBezPoint(ep, 'Symmetric') if self.ui.arc3PtButton.isChecked(): self.arc3Pt = False else: self.arc3Pt = True self.ui.pointUi() self.ui.isRelative.show() self.editing = ep self.trackers[self.editing].off() self.finalizeGhost() self.ghost = self.initGhost(self.obj) '''if hasattr(self.obj.ViewObject,"Selectable"): self.obj.ViewObject.Selectable = False''' self.node.append(self.trackers[self.editing].get()) FreeCADGui.Snapper.setSelectMode(False) else: #if self.editing != None: # USECASE: Destination point of editing is clicked self.finalizeGhost() self.trackers[self.editing].on() #if hasattr(self.obj.ViewObject,"Selectable"): # self.obj.ViewObject.Selectable = True FreeCADGui.Snapper.setSelectMode(True) self.numericInput(self.trackers[self.editing].get())
def __init__(self, doc, alignment_data, obj): self.name = 'Edit Alignment Task' self.panel = None self.doc = doc self.Object = obj self.alignment = alignment.create(alignment_data, 'TEMP', True, False) self.alignment_tracker = None self.terminator_tracker = None self.callbacks = {} self.mouse = MouseState() self.form = None self.ui_path = resources.__path__[0] + '/ui/' self.ui = self.ui_path + 'edit_alignment_task.ui' self.unit_scale = units.scale_factor() self.masks = { 'float': '#90000.99', 'degree_float': '900.99\u00b0', 'station_imp_float': '00009+99.99', 'station_eng_float': '00009+999.99', } self.camera_state = { 'position': None, 'height': None, 'bound box': None } ViewState().view_objects = { 'selectables': [], 'line_colors': [], } super().__init__("Edit Alignment Task") #disable selection entirely ViewState().sg_root.getField("selectionRole").setValue(0) #get all objects with LineColor and set them all to gray ViewState().view_objects['line_colors'] = [ (_v.ViewObject, _v.ViewObject.LineColor) for _v in self.doc.findObjects() if hasattr(_v, 'ViewObject') if hasattr(_v.ViewObject, 'LineColor') ] for _v in ViewState().view_objects['line_colors']: self.set_vobj_style(_v[0], self.STYLES.DISABLED) #get all objects in the scene that are selectable. ViewState().view_objects['selectable'] = [ (_v.ViewObject, _v.ViewObject.Selectable) for _v in self.doc.findObjects() if hasattr(_v, 'ViewObject') if hasattr(_v.ViewObject, 'Selectable') ] for _v in ViewState().view_objects['selectable']: _v[0].Selectable = False #deselect existing selections Gui.Selection.clearSelection() self.callbacks = { 'SoLocation2Event': ViewState().view.addEventCallback('SoLocation2Event', self.mouse_event), 'SoMouseButtonEvent': ViewState().view.addEventCallback('SoMouseButtonEvent', self.button_event) } self.alignment_tracker = AlignmentTracker(self.doc, self.Object.Name, self.alignment) self.terminator_tracker = TerminatorTracker() #subscribe the alignment tracker to all events from the task #and subscribe the task to task events from the tracker self.alignment_tracker.register(self, Events.ALIGNMENT.UPDATED) self.register(self.alignment_tracker, Events.ALIGNMENT.UPDATE) self.terminator_tracker.register(self, Events.TASK.EVENTS) #save camera state _camera = ViewState().view.getCameraNode() self.camera_state['position'] = _camera.position.getValue().getValue() self.camera_state['height'] = _camera.height.getValue() self.camera_state['bound box'] = self.Object.Shape.BoundBox self._zoom_camera, self DraftTools.redraw3DView()