示例#1
0
    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()
示例#2
0
 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")
示例#3
0
    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()
示例#4
0
    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()
示例#5
0
 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)
示例#6
0
    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()
示例#9
0
 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)
示例#10
0
 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)
示例#11
0
 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)
示例#12
0
 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()
示例#13
0
    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()
示例#14
0
 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')
示例#15
0
 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)
示例#16
0
 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
示例#17
0
 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')
示例#18
0
 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)
示例#19
0
    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)
示例#20
0
    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()
示例#21
0
    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()
示例#23
0
    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')
示例#24
0
    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()
示例#25
0
    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()
示例#26
0
    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()