diff --git a/src/Mod/BIM/bimcommands/BimBox.py b/src/Mod/BIM/bimcommands/BimBox.py index 3c9384b679..e8ec126598 100644 --- a/src/Mod/BIM/bimcommands/BimBox.py +++ b/src/Mod/BIM/bimcommands/BimBox.py @@ -47,8 +47,11 @@ class BIM_Box: return v def Activated(self): + import WorkingPlane import draftguitools.gui_trackers as DraftTrackers + FreeCAD.activeDraftCommand = self # register as a Draft command for auto grid on/off + self.wp = WorkingPlane.get_working_plane() # here we will store our points self.points = [] # we build a special cube tracker which is a list of 4 rectangle trackers @@ -247,19 +250,12 @@ class BIM_Box: # finally we turn all rectangles on for r in self.cubetracker: r.on() - if hasattr(FreeCAD, "DraftWorkingPlane"): - FreeCAD.DraftWorkingPlane.save() - FreeCAD.DraftWorkingPlane.position = self.cubetracker[0].p3() - FreeCAD.DraftWorkingPlane.u = ( - self.cubetracker[0].p3().sub(self.cubetracker[0].p4()) - ).normalize() - FreeCAD.DraftWorkingPlane.v = self.normal - FreeCAD.DraftWorkingPlane.axis = ( - self.cubetracker[0].p2().sub(self.cubetracker[0].p3()) - ).normalize() - FreeCADGui.Snapper.setGrid() + point = self.cubetracker[0].p3() + axis = self.cubetracker[0].p2().sub(self.cubetracker[0].p3()) + self.wp._save() + self.wp.align_to_point_and_axis(point, axis, upvec=self.normal, _hist_add=False) FreeCADGui.Snapper.getPoint( - last=self.cubetracker[0].p3(), + last=point, callback=self.PointCallback, movecallback=self.MoveCallback, extradlg=self.taskbox(), @@ -291,15 +287,11 @@ class BIM_Box: doc.recompute() def _finish(self): - FreeCADGui.Snapper.getPoint() + self.wp._restore() + FreeCAD.activeDraftCommand = None FreeCADGui.Snapper.off() for c in self.cubetracker: c.finalize() - if hasattr(FreeCADGui, "draftToolBar"): - FreeCADGui.draftToolBar.offUi() - if hasattr(FreeCAD, "DraftWorkingPlane"): - FreeCAD.DraftWorkingPlane.restore() - FreeCADGui.Snapper.setGrid() FreeCADGui.addCommand("BIM_Box", BIM_Box()) diff --git a/src/Mod/BIM/bimcommands/BimCurtainwall.py b/src/Mod/BIM/bimcommands/BimCurtainwall.py index e8964400c3..ee43ee051b 100644 --- a/src/Mod/BIM/bimcommands/BimCurtainwall.py +++ b/src/Mod/BIM/bimcommands/BimCurtainwall.py @@ -67,6 +67,7 @@ class Arch_CurtainWall: FreeCAD.ActiveDocument.recompute() else: # interactive line drawing + FreeCAD.activeDraftCommand = self # register as a Draft command for auto grid on/off self.points = [] import WorkingPlane WorkingPlane.get_working_plane() @@ -79,11 +80,15 @@ class Arch_CurtainWall: if point is None: # cancelled + FreeCAD.activeDraftCommand = None + FreeCADGui.Snapper.off() return self.points.append(point) if len(self.points) == 1: FreeCADGui.Snapper.getPoint(last=self.points[0],callback=self.getPoint) elif len(self.points) == 2: + FreeCAD.activeDraftCommand = None + FreeCADGui.Snapper.off() FreeCADGui.Control.closeDialog() FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Curtain Wall")) FreeCADGui.addModule("Draft") diff --git a/src/Mod/BIM/bimcommands/BimImagePlane.py b/src/Mod/BIM/bimcommands/BimImagePlane.py index 605e80c45a..94b4fb9a73 100644 --- a/src/Mod/BIM/bimcommands/BimImagePlane.py +++ b/src/Mod/BIM/bimcommands/BimImagePlane.py @@ -59,6 +59,7 @@ class BIM_ImagePlane: translate("BIM", "Image file (*.png *.jpg *.bmp)"), ) if filename: + FreeCAD.activeDraftCommand = self # register as a Draft command for auto grid on/off self.filename = filename im = QtGui.QImage(self.filename) self.proportion = float(im.height()) / float(im.width()) @@ -88,6 +89,8 @@ class BIM_ImagePlane: if not point: # cancelled + FreeCAD.activeDraftCommand = None + FreeCADGui.Snapper.off() self.tracker.off() return elif not self.basepoint: @@ -100,6 +103,8 @@ class BIM_ImagePlane: ) else: # this is our second point + FreeCAD.activeDraftCommand = None + FreeCADGui.Snapper.off() self.tracker.off() midpoint = self.basepoint.add( self.opposite.sub(self.basepoint).multiply(0.5) @@ -109,7 +114,7 @@ class BIM_ImagePlane: length = DraftVecUtils.project(diagonal, FreeCAD.DraftWorkingPlane.u).Length height = DraftVecUtils.project(diagonal, FreeCAD.DraftWorkingPlane.v).Length FreeCAD.ActiveDocument.openTransaction("Create image plane") - image = FreeCAD.activeDocument().addObject( + image = FreeCAD.ActiveDocument.addObject( "Image::ImagePlane", "ImagePlane" ) image.Label = os.path.splitext(os.path.basename(self.filename))[0] diff --git a/src/Mod/BIM/bimcommands/BimPanel.py b/src/Mod/BIM/bimcommands/BimPanel.py index c2d0740404..501259cef8 100644 --- a/src/Mod/BIM/bimcommands/BimPanel.py +++ b/src/Mod/BIM/bimcommands/BimPanel.py @@ -88,15 +88,15 @@ class Arch_Panel: return # interactive mode - WorkingPlane.get_working_plane() + FreeCAD.activeDraftCommand = self # register as a Draft command for auto grid on/off + WorkingPlane.get_working_plane() self.points = [] self.tracker = DraftTrackers.boxTracker() self.tracker.width(self.Width) self.tracker.height(self.Thickness) self.tracker.length(self.Length) self.tracker.on() - FreeCAD.activeDraftCommand = self FreeCADGui.Snapper.getPoint(callback=self.getPoint,movecallback=self.update,extradlg=self.taskbox()) FreeCADGui.draftToolBar.continueCmd.show() @@ -105,9 +105,11 @@ class Arch_Panel: "this function is called by the snapper when it has a 3D point" import DraftVecUtils + + FreeCAD.activeDraftCommand = None + FreeCADGui.Snapper.off() self.tracker.finalize() if point is None: - FreeCAD.activeDraftCommand = None return FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Panel")) FreeCADGui.addModule("Arch") @@ -123,7 +125,6 @@ class Arch_Panel: FreeCADGui.doCommand('s.Placement.Rotation = FreeCAD.Rotation(FreeCAD.Vector(1.00,0.00,0.00),90.00)') FreeCAD.ActiveDocument.commitTransaction() FreeCAD.ActiveDocument.recompute() - FreeCAD.activeDraftCommand = None if FreeCADGui.draftToolBar.continueCmd.isChecked(): self.Activated() diff --git a/src/Mod/BIM/bimcommands/BimProfile.py b/src/Mod/BIM/bimcommands/BimProfile.py index b7c8479c8d..b839dd98b8 100644 --- a/src/Mod/BIM/bimcommands/BimProfile.py +++ b/src/Mod/BIM/bimcommands/BimProfile.py @@ -52,6 +52,8 @@ class Arch_Profile: def Activated(self): import ArchProfile + + FreeCAD.activeDraftCommand = self # register as a Draft command for auto grid on/off self.Profile = None self.Categories = [] self.Presets = ArchProfile.readPresets() @@ -109,6 +111,8 @@ class Arch_Profile: "this function is called by the snapper when it has a 3D point" + FreeCAD.activeDraftCommand = None + FreeCADGui.Snapper.off() if not point: return if not self.Profile: diff --git a/src/Mod/BIM/bimcommands/BimTruss.py b/src/Mod/BIM/bimcommands/BimTruss.py index 2d2bd94305..c7179fadfa 100644 --- a/src/Mod/BIM/bimcommands/BimTruss.py +++ b/src/Mod/BIM/bimcommands/BimTruss.py @@ -60,8 +60,10 @@ class Arch_Truss: self.createTruss(basename) else: # interactive line drawing - self.points = [] import WorkingPlane + + FreeCAD.activeDraftCommand = self # register as a Draft command for auto grid on/off + self.points = [] WorkingPlane.get_working_plane() if hasattr(FreeCADGui,"Snapper"): FreeCADGui.Snapper.getPoint(callback=self.getPoint) @@ -72,11 +74,15 @@ class Arch_Truss: if point is None: # cancelled + FreeCAD.activeDraftCommand = None + FreeCADGui.Snapper.off() return self.points.append(point) if len(self.points) == 1: FreeCADGui.Snapper.getPoint(last=self.points[0],callback=self.getPoint) elif len(self.points) == 2: + FreeCAD.activeDraftCommand = None + FreeCADGui.Snapper.off() self.createTruss() def createTruss(self, basename=""): diff --git a/src/Mod/BIM/bimcommands/BimWindow.py b/src/Mod/BIM/bimcommands/BimWindow.py index e85c2f3de5..c079bd645c 100644 --- a/src/Mod/BIM/bimcommands/BimWindow.py +++ b/src/Mod/BIM/bimcommands/BimWindow.py @@ -127,8 +127,9 @@ class Arch_Window: return # interactive mode - self.wp = WorkingPlane.get_working_plane() + FreeCAD.activeDraftCommand = self # register as a Draft command for auto grid on/off + self.wp = WorkingPlane.get_working_plane() self.tracker = DraftTrackers.boxTracker() self.tracker.length(self.Width) self.tracker.width(self.W1) @@ -160,6 +161,9 @@ class Arch_Window: from draftutils import gui_utils from draftutils.messages import _wrn from ArchWindowPresets import WindowPresets + + FreeCAD.activeDraftCommand = None + FreeCADGui.Snapper.off() self.tracker.off() if point is None: return