diff --git a/src/Mod/Draft/CMakeLists.txt b/src/Mod/Draft/CMakeLists.txt index 4d9601a5c1..11c3950c2d 100644 --- a/src/Mod/Draft/CMakeLists.txt +++ b/src/Mod/Draft/CMakeLists.txt @@ -17,6 +17,7 @@ SET(Draft_SRCS DraftLayer.py DraftEdit.py DraftFillet.py + DraftSelectPlane.py WorkingPlane.py getSVG.py importDXF.py diff --git a/src/Mod/Draft/DraftSelectPlane.py b/src/Mod/Draft/DraftSelectPlane.py new file mode 100644 index 0000000000..d390c6c782 --- /dev/null +++ b/src/Mod/Draft/DraftSelectPlane.py @@ -0,0 +1,324 @@ +# -*- coding: utf8 -*- + +#*************************************************************************** +#* * +#* Copyright (c) 2019 Yorik van Havre * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +__title__="FreeCAD Draft Workbench GUI Tools - Working plane-related tools" +__author__ = "Yorik van Havre, Werner Mayer, Martin Burbaum, Ken Cline, Dmitry Chigrin" +__url__ = "https://www.freecadweb.org" + + +import FreeCAD +import FreeCADGui +import math +import Draft +import DraftVecUtils +from DraftGui import translate + +def QT_TRANSLATE_NOOP(ctx,txt): return txt + + + +class Draft_SelectPlane: + + """The Draft_SelectPlane FreeCAD command definition""" + + def GetResources(self): + + return {'Pixmap' : 'Draft_SelectPlane', + 'Accel' : "W, P", + 'MenuText': QT_TRANSLATE_NOOP("Draft_SelectPlane", "SelectPlane"), + 'ToolTip' : QT_TRANSLATE_NOOP("Draft_SelectPlane", "Select a working plane for geometry creation")} + + def IsActive(self): + + if FreeCADGui.ActiveDocument: + return True + else: + return False + + def Activated(self): + + if FreeCAD.activeDraftCommand: + FreeCAD.activeDraftCommand.finish() + FreeCAD.activeDraftCommand = self + self.view = Draft.get3DView() + self.ui = FreeCADGui.draftToolBar + self.featureName = "SelectPlane" + self.ui.sourceCmd = self + self.ui.setTitle(translate("draft","Set Working Plane")) + self.ui.show() + FreeCAD.DraftWorkingPlane.setup() + if hasattr(FreeCADGui,"Snapper"): + FreeCADGui.Snapper.setTrackers() + self.offset = 0 + if self.handle(): + return + self.ui.selectPlaneUi() + FreeCAD.Console.PrintMessage(translate("draft", "Pick a face to define the drawing plane")+"\n") + if FreeCAD.DraftWorkingPlane.alignToSelection(self.offset): + FreeCADGui.Selection.clearSelection() + self.display(FreeCAD.DraftWorkingPlane.axis) + self.finish() + else: + self.call = self.view.addEventCallback("SoEvent", self.action) + + def finish(self,close=False): + + FreeCAD.activeDraftCommand = None + if self.ui: + self.ui.offUi() + self.ui.sourceCmd = None + FreeCAD.DraftWorkingPlane.restore() + if hasattr(FreeCADGui,"Snapper"): + FreeCADGui.Snapper.off() + if self.call: + try: + self.view.removeEventCallback("SoEvent",self.call) + except RuntimeError: + # the view has been deleted already + pass + self.call = None + + def action(self, arg): + + if arg["Type"] == "SoKeyboardEvent" and arg["Key"] == "ESCAPE": + self.finish() + if arg["Type"] == "SoMouseButtonEvent": + if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): + # coin detection happens before the selection got a chance of being updated, so we must delay + DraftGui.todo.delay(self.checkSelection,None) + + def checkSelection(self): + + if self.handle(): + self.finish() + + def handle(self): + + sel = FreeCADGui.Selection.getSelectionEx() + if len(sel) == 1: + sel = sel[0] + self.ui = FreeCADGui.draftToolBar + if Draft.getType(sel.Object) == "Axis": + FreeCAD.DraftWorkingPlane.alignToEdges(sel.Object.Shape.Edges) + self.display(FreeCAD.DraftWorkingPlane.axis) + return True + elif Draft.getType(sel.Object) in ["WorkingPlaneProxy","BuildingPart"]: + FreeCAD.DraftWorkingPlane.setFromPlacement(sel.Object.Placement,rebase=True) + FreeCAD.DraftWorkingPlane.weak = False + if hasattr(sel.Object.ViewObject,"AutoWorkingPlane"): + if sel.Object.ViewObject.AutoWorkingPlane: + FreeCAD.DraftWorkingPlane.weak = True + if hasattr(sel.Object.ViewObject,"CutView") and hasattr(sel.Object.ViewObject,"AutoCutView"): + if sel.Object.ViewObject.AutoCutView: + sel.Object.ViewObject.CutView = True + if hasattr(sel.Object.ViewObject,"RestoreView"): + if sel.Object.ViewObject.RestoreView: + if hasattr(sel.Object.ViewObject,"ViewData"): + if len(sel.Object.ViewObject.ViewData) >= 12: + d = sel.Object.ViewObject.ViewData + camtype = "orthographic" + if len(sel.Object.ViewObject.ViewData) == 13: + if d[12] == 1: + camtype = "perspective" + c = FreeCADGui.ActiveDocument.ActiveView.getCameraNode() + from pivy import coin + if isinstance(c,coin.SoOrthographicCamera): + if camtype == "perspective": + FreeCADGui.ActiveDocument.ActiveView.setCameraType("Perspective") + elif isinstance(c,coin.SoPerspectiveCamera): + if camtype == "orthographic": + FreeCADGui.ActiveDocument.ActiveView.setCameraType("Orthographic") + c = FreeCADGui.ActiveDocument.ActiveView.getCameraNode() + c.position.setValue([d[0],d[1],d[2]]) + c.orientation.setValue([d[3],d[4],d[5],d[6]]) + c.nearDistance.setValue(d[7]) + c.farDistance.setValue(d[8]) + c.aspectRatio.setValue(d[9]) + c.focalDistance.setValue(d[10]) + if camtype == "orthographic": + c.height.setValue(d[11]) + else: + c.heightAngle.setValue(d[11]) + if hasattr(sel.Object.ViewObject,"RestoreState"): + if sel.Object.ViewObject.RestoreState: + if hasattr(sel.Object.ViewObject,"VisibilityMap"): + if sel.Object.ViewObject.VisibilityMap: + for k,v in sel.Object.ViewObject.VisibilityMap.items(): + o = FreeCADGui.ActiveDocument.getObject(k) + if o: + if o.Visibility != (v == "True"): + FreeCADGui.doCommand("FreeCADGui.ActiveDocument.getObject(\""+k+"\").Visibility = "+v) + self.display(FreeCAD.DraftWorkingPlane.axis) + self.ui.wplabel.setText(sel.Object.Label) + self.ui.wplabel.setToolTip(translate("draft", "Current working plane")+": "+self.ui.wplabel.text()) + return True + elif Draft.getType(sel.Object) == "SectionPlane": + FreeCAD.DraftWorkingPlane.setFromPlacement(sel.Object.Placement,rebase=True) + FreeCAD.DraftWorkingPlane.weak = False + self.display(FreeCAD.DraftWorkingPlane.axis) + self.ui.wplabel.setText(sel.Object.Label) + self.ui.wplabel.setToolTip(translate("draft", "Current working plane")+": "+self.ui.wplabel.text()) + return True + elif sel.HasSubObjects: + if len(sel.SubElementNames) == 1: + if "Face" in sel.SubElementNames[0]: + FreeCAD.DraftWorkingPlane.alignToFace(sel.SubObjects[0], self.offset) + self.display(FreeCAD.DraftWorkingPlane.axis) + return True + elif sel.SubElementNames[0] == "Plane": + FreeCAD.DraftWorkingPlane.setFromPlacement(sel.Object.Placement,rebase=True) + self.display(FreeCAD.DraftWorkingPlane.axis) + return True + elif len(sel.SubElementNames) == 3: + if ("Vertex" in sel.SubElementNames[0]) \ + and ("Vertex" in sel.SubElementNames[1]) \ + and ("Vertex" in sel.SubElementNames[2]): + FreeCAD.DraftWorkingPlane.alignTo3Points(sel.SubObjects[0].Point, + sel.SubObjects[1].Point, + sel.SubObjects[2].Point, + self.offset) + self.display(FreeCAD.DraftWorkingPlane.axis) + return True + elif sel.Object.isDerivedFrom("Part::Feature"): + if sel.Object.Shape: + if len(sel.Object.Shape.Faces) == 1: + FreeCAD.DraftWorkingPlane.alignToFace(sel.Object.Shape.Faces[0], self.offset) + self.display(FreeCAD.DraftWorkingPlane.axis) + return True + elif sel: + subs = [] + import Part + for s in sel: + for so in s.SubObjects: + if isinstance(so,Part.Vertex): + subs.append(so) + if len(subs) == 3: + FreeCAD.DraftWorkingPlane.alignTo3Points(subs[0].Point, + subs[1].Point, + subs[2].Point, + self.offset) + self.display(FreeCAD.DraftWorkingPlane.axis) + return True + return False + + def getCenterPoint(self,x,y,z): + + if not self.ui.isCenterPlane: + return "0,0,0" + v = FreeCAD.Vector(x,y,z) + cam1 = FreeCAD.Vector(FreeCADGui.ActiveDocument.ActiveView.getCameraNode().position.getValue().getValue()) + cam2 = FreeCADGui.ActiveDocument.ActiveView.getViewDirection() + vcam1 = DraftVecUtils.project(cam1,v) + a = vcam1.getAngle(cam2) + if a < 0.0001: + return "0,0,0" + d = vcam1.Length + L = d/math.cos(a) + vcam2 = DraftVecUtils.scaleTo(cam2,L) + cp = cam1.add(vcam2) + return str(cp.x)+","+str(cp.y)+","+str(cp.z) + + def selectHandler(self, arg): + + try: + self.offset = float(self.ui.offset) + except: + self.offset = 0 + if arg == "XY": + FreeCADGui.doCommandGui("FreeCAD.DraftWorkingPlane.alignToPointAndAxis(FreeCAD.Vector("+self.getCenterPoint(0,0,1)+"), FreeCAD.Vector(0,0,1), "+str(self.offset)+")") + self.display('Top') + self.finish() + elif arg == "XZ": + FreeCADGui.doCommandGui("FreeCAD.DraftWorkingPlane.alignToPointAndAxis(FreeCAD.Vector("+self.getCenterPoint(0,-1,0)+"), FreeCAD.Vector(0,-1,0), "+str(self.offset)+")") + self.display('Front') + self.finish() + elif arg == "YZ": + FreeCADGui.doCommandGui("FreeCAD.DraftWorkingPlane.alignToPointAndAxis(FreeCAD.Vector("+self.getCenterPoint(1,0,0)+"), FreeCAD.Vector(1,0,0), "+str(self.offset)+")") + self.display('Side') + self.finish() + elif arg == "currentView": + d = self.view.getViewDirection().negative() + FreeCADGui.doCommandGui("FreeCAD.DraftWorkingPlane.alignToPointAndAxis(FreeCAD.Vector("+self.getCenterPoint(d.x,d.y,d.z)+"), FreeCAD.Vector("+str(d.x)+","+str(d.y)+","+str(d.z)+"), "+str(self.offset)+")") + self.display(d) + self.finish() + elif arg == "reset": + FreeCADGui.doCommandGui("FreeCAD.DraftWorkingPlane.reset()") + self.display('Auto') + self.finish() + elif arg == "alignToWP": + c = FreeCADGui.ActiveDocument.ActiveView.getCameraNode() + r = FreeCAD.DraftWorkingPlane.getRotation().Rotation.Q + c.orientation.setValue(r) + self.finish() + + def offsetHandler(self, arg): + + self.offset = arg + + def display(self,arg): + + if self.offset: + if self.offset > 0: suffix = ' + '+str(self.offset) + else: suffix = ' - '+str(self.offset) + else: suffix = '' + if type(arg).__name__ == 'str': + self.ui.wplabel.setText(arg+suffix) + elif type(arg).__name__ == 'Vector': + plv = 'd('+str(arg.x)+','+str(arg.y)+','+str(arg.z)+')' + self.ui.wplabel.setText(plv+suffix) + self.ui.wplabel.setToolTip(translate("draft", "Current working plane:")+self.ui.wplabel.text()) + FreeCADGui.doCommandGui("FreeCADGui.Snapper.setGrid()") + + + +class Draft_SetWorkingPlaneProxy(): + + """The Draft_SetWorkingPlaneProxy FreeCAD command definition""" + + def GetResources(self): + + return {'Pixmap' : 'Draft_SelectPlane', + 'MenuText': QT_TRANSLATE_NOOP("Draft_SetWorkingPlaneProxy", "Create Working Plane Proxy"), + 'ToolTip': QT_TRANSLATE_NOOP("Draft_SetWorkingPlaneProxy", "Creates a proxy object from the current working plane")} + + def IsActive(self): + + if FreeCADGui.ActiveDocument: + return True + else: + return False + + def Activated(self): + + if hasattr(FreeCAD,"DraftWorkingPlane"): + FreeCAD.ActiveDocument.openTransaction("Create WP proxy") + FreeCADGui.addModule("Draft") + FreeCADGui.doCommand("Draft.makeWorkingPlaneProxy(FreeCAD.DraftWorkingPlane.getPlacement())") + FreeCAD.ActiveDocument.recompute() + FreeCAD.ActiveDocument.commitTransaction() + + + +FreeCADGui.addCommand('Draft_SelectPlane',Draft_SelectPlane()) +FreeCADGui.addCommand('Draft_SetWorkingPlaneProxy',Draft_SetWorkingPlaneProxy()) diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index bea3927b1b..9c5a748d5d 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -52,6 +52,7 @@ from pivy import coin import DraftEdit # import DraftFillet +import DraftSelectPlane #--------------------------------------------------------------------------- # Preflight stuff @@ -324,218 +325,6 @@ class DraftTool: return qr,sup,points,fil -#--------------------------------------------------------------------------- -# Helper tools -#--------------------------------------------------------------------------- - -class SelectPlane(DraftTool): - """The Draft_SelectPlane FreeCAD command definition""" - - def GetResources(self): - return {'Pixmap' : 'Draft_SelectPlane', - 'Accel' : "W, P", - 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_SelectPlane", "SelectPlane"), - 'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Draft_SelectPlane", "Select a working plane for geometry creation")} - - def Activated(self): - DraftTool.Activated(self) - self.offset = 0 - if not self.doc: - return - if self.handle(): - return - self.ui.selectPlaneUi() - FreeCAD.Console.PrintMessage(translate("draft", "Pick a face to define the drawing plane")+"\n") - if plane.alignToSelection(self.offset): - FreeCADGui.Selection.clearSelection() - self.display(plane.axis) - self.finish() - else: - self.call = self.view.addEventCallback("SoEvent", self.action) - - def action(self, arg): - if arg["Type"] == "SoKeyboardEvent" and arg["Key"] == "ESCAPE": - self.finish() - if arg["Type"] == "SoMouseButtonEvent": - if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): - # coin detection happens before the selection got a chance of being updated, so we must delay - DraftGui.todo.delay(self.checkSelection,None) - - def checkSelection(self): - if self.handle(): - self.finish() - - def handle(self): - sel = FreeCADGui.Selection.getSelectionEx() - if len(sel) == 1: - sel = sel[0] - self.ui = FreeCADGui.draftToolBar - if Draft.getType(sel.Object) == "Axis": - plane.alignToEdges(sel.Object.Shape.Edges) - self.display(plane.axis) - return True - elif Draft.getType(sel.Object) in ["WorkingPlaneProxy","BuildingPart"]: - plane.setFromPlacement(sel.Object.Placement,rebase=True) - plane.weak = False - if hasattr(sel.Object.ViewObject,"AutoWorkingPlane"): - if sel.Object.ViewObject.AutoWorkingPlane: - plane.weak = True - if hasattr(sel.Object.ViewObject,"CutView") and hasattr(sel.Object.ViewObject,"AutoCutView"): - if sel.Object.ViewObject.AutoCutView: - sel.Object.ViewObject.CutView = True - if hasattr(sel.Object.ViewObject,"RestoreView"): - if sel.Object.ViewObject.RestoreView: - if hasattr(sel.Object.ViewObject,"ViewData"): - if len(sel.Object.ViewObject.ViewData) >= 12: - d = sel.Object.ViewObject.ViewData - camtype = "orthographic" - if len(sel.Object.ViewObject.ViewData) == 13: - if d[12] == 1: - camtype = "perspective" - c = FreeCADGui.ActiveDocument.ActiveView.getCameraNode() - from pivy import coin - if isinstance(c,coin.SoOrthographicCamera): - if camtype == "perspective": - FreeCADGui.ActiveDocument.ActiveView.setCameraType("Perspective") - elif isinstance(c,coin.SoPerspectiveCamera): - if camtype == "orthographic": - FreeCADGui.ActiveDocument.ActiveView.setCameraType("Orthographic") - c = FreeCADGui.ActiveDocument.ActiveView.getCameraNode() - c.position.setValue([d[0],d[1],d[2]]) - c.orientation.setValue([d[3],d[4],d[5],d[6]]) - c.nearDistance.setValue(d[7]) - c.farDistance.setValue(d[8]) - c.aspectRatio.setValue(d[9]) - c.focalDistance.setValue(d[10]) - if camtype == "orthographic": - c.height.setValue(d[11]) - else: - c.heightAngle.setValue(d[11]) - if hasattr(sel.Object.ViewObject,"RestoreState"): - if sel.Object.ViewObject.RestoreState: - if hasattr(sel.Object.ViewObject,"VisibilityMap"): - if sel.Object.ViewObject.VisibilityMap: - for k,v in sel.Object.ViewObject.VisibilityMap.items(): - o = FreeCADGui.ActiveDocument.getObject(k) - if o: - if o.Visibility != (v == "True"): - FreeCADGui.doCommand("FreeCADGui.ActiveDocument.getObject(\""+k+"\").Visibility = "+v) - self.display(plane.axis) - self.ui.wplabel.setText(sel.Object.Label) - self.ui.wplabel.setToolTip(translate("draft", "Current working plane")+": "+self.ui.wplabel.text()) - return True - elif Draft.getType(sel.Object) == "SectionPlane": - plane.setFromPlacement(sel.Object.Placement,rebase=True) - plane.weak = False - self.display(plane.axis) - self.ui.wplabel.setText(sel.Object.Label) - self.ui.wplabel.setToolTip(translate("draft", "Current working plane")+": "+self.ui.wplabel.text()) - return True - elif sel.HasSubObjects: - if len(sel.SubElementNames) == 1: - if "Face" in sel.SubElementNames[0]: - plane.alignToFace(sel.SubObjects[0], self.offset) - self.display(plane.axis) - return True - elif sel.SubElementNames[0] == "Plane": - plane.setFromPlacement(sel.Object.Placement,rebase=True) - self.display(plane.axis) - return True - elif len(sel.SubElementNames) == 3: - if ("Vertex" in sel.SubElementNames[0]) \ - and ("Vertex" in sel.SubElementNames[1]) \ - and ("Vertex" in sel.SubElementNames[2]): - plane.alignTo3Points(sel.SubObjects[0].Point, - sel.SubObjects[1].Point, - sel.SubObjects[2].Point, - self.offset) - self.display(plane.axis) - return True - elif sel.Object.isDerivedFrom("Part::Feature"): - if sel.Object.Shape: - if len(sel.Object.Shape.Faces) == 1: - plane.alignToFace(sel.Object.Shape.Faces[0], self.offset) - self.display(plane.axis) - return True - elif sel: - subs = [] - import Part - for s in sel: - for so in s.SubObjects: - if isinstance(so,Part.Vertex): - subs.append(so) - if len(subs) == 3: - plane.alignTo3Points(subs[0].Point, - subs[1].Point, - subs[2].Point, - self.offset) - self.display(plane.axis) - return True - return False - - def getCenterPoint(self,x,y,z): - if not self.ui.isCenterPlane: - return "0,0,0" - v = FreeCAD.Vector(x,y,z) - cam1 = FreeCAD.Vector(FreeCADGui.ActiveDocument.ActiveView.getCameraNode().position.getValue().getValue()) - cam2 = FreeCADGui.ActiveDocument.ActiveView.getViewDirection() - vcam1 = DraftVecUtils.project(cam1,v) - a = vcam1.getAngle(cam2) - if a < 0.0001: - return "0,0,0" - d = vcam1.Length - L = d/math.cos(a) - vcam2 = DraftVecUtils.scaleTo(cam2,L) - cp = cam1.add(vcam2) - return str(cp.x)+","+str(cp.y)+","+str(cp.z) - - def selectHandler(self, arg): - try: - self.offset = float(self.ui.offset) - except: - self.offset = 0 - if arg == "XY": - FreeCADGui.doCommandGui("FreeCAD.DraftWorkingPlane.alignToPointAndAxis(FreeCAD.Vector("+self.getCenterPoint(0,0,1)+"), FreeCAD.Vector(0,0,1), "+str(self.offset)+")") - self.display('Top') - self.finish() - elif arg == "XZ": - FreeCADGui.doCommandGui("FreeCAD.DraftWorkingPlane.alignToPointAndAxis(FreeCAD.Vector("+self.getCenterPoint(0,-1,0)+"), FreeCAD.Vector(0,-1,0), "+str(self.offset)+")") - self.display('Front') - self.finish() - elif arg == "YZ": - FreeCADGui.doCommandGui("FreeCAD.DraftWorkingPlane.alignToPointAndAxis(FreeCAD.Vector("+self.getCenterPoint(1,0,0)+"), FreeCAD.Vector(1,0,0), "+str(self.offset)+")") - self.display('Side') - self.finish() - elif arg == "currentView": - d = self.view.getViewDirection().negative() - FreeCADGui.doCommandGui("FreeCAD.DraftWorkingPlane.alignToPointAndAxis(FreeCAD.Vector("+self.getCenterPoint(d.x,d.y,d.z)+"), FreeCAD.Vector("+str(d.x)+","+str(d.y)+","+str(d.z)+"), "+str(self.offset)+")") - self.display(d) - self.finish() - elif arg == "reset": - FreeCADGui.doCommandGui("FreeCAD.DraftWorkingPlane.reset()") - self.display('Auto') - self.finish() - elif arg == "alignToWP": - c = FreeCADGui.ActiveDocument.ActiveView.getCameraNode() - r = FreeCAD.DraftWorkingPlane.getRotation().Rotation.Q - c.orientation.setValue(r) - self.finish() - - def offsetHandler(self, arg): - self.offset = arg - - def display(self,arg): - if self.offset: - if self.offset > 0: suffix = ' + '+str(self.offset) - else: suffix = ' - '+str(self.offset) - else: suffix = '' - if type(arg).__name__ == 'str': - self.ui.wplabel.setText(arg+suffix) - elif type(arg).__name__ == 'Vector': - plv = 'd('+str(arg.x)+','+str(arg.y)+','+str(arg.z)+')' - self.ui.wplabel.setText(plv+suffix) - self.ui.wplabel.setToolTip(translate("draft", "Current working plane:",utf8_decode=True)+self.ui.wplabel.text()) - FreeCADGui.doCommandGui("FreeCADGui.Snapper.setGrid()") #--------------------------------------------------------------------------- # Geometry constructors @@ -5402,28 +5191,6 @@ class SetAutoGroup(): self.ui.setAutoGroup(self.groups[i]) -class SetWorkingPlaneProxy(): - """The SetWorkingPlaneProxy FreeCAD command definition""" - - def GetResources(self): - return {'Pixmap' : 'Draft_SelectPlane', - 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_SetWorkingPlaneProxy", "Create Working Plane Proxy"), - 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_SetWorkingPlaneProxy", "Creates a proxy object from the current working plane")} - - def IsActive(self): - if FreeCADGui.ActiveDocument: - return True - else: - return False - - def Activated(self): - if hasattr(FreeCAD,"DraftWorkingPlane"): - FreeCAD.ActiveDocument.openTransaction("Create WP proxy") - FreeCADGui.addModule("Draft") - FreeCADGui.doCommand("Draft.makeWorkingPlaneProxy(FreeCAD.DraftWorkingPlane.getPlacement())") - FreeCAD.ActiveDocument.recompute() - FreeCAD.ActiveDocument.commitTransaction() - class Draft_Label(Creator): """The Draft_Label command definition""" @@ -5839,7 +5606,7 @@ class Draft_Snap_WorkingPlane(): #--------------------------------------------------------------------------- # drawing commands -FreeCADGui.addCommand('Draft_SelectPlane',SelectPlane()) + FreeCADGui.addCommand('Draft_Line',Line()) FreeCADGui.addCommand('Draft_Wire',Wire()) FreeCADGui.addCommand('Draft_Circle',Circle()) @@ -5920,7 +5687,6 @@ FreeCADGui.addCommand('Draft_ShowSnapBar',ShowSnapBar()) FreeCADGui.addCommand('Draft_ToggleGrid',ToggleGrid()) FreeCADGui.addCommand('Draft_FlipDimension',Draft_FlipDimension()) FreeCADGui.addCommand('Draft_AutoGroup',SetAutoGroup()) -FreeCADGui.addCommand('Draft_SetWorkingPlaneProxy',SetWorkingPlaneProxy()) FreeCADGui.addCommand('Draft_AddConstruction',Draft_AddConstruction()) # snap commands