BIM: Improve grid handling for some commands (#20658)
* BIM: Improve grid handling for some commands
The updated commands did not handle the 2 grid options ("always", "only during commands") correctly. The proposed code follows the example of BimWall.py and ArchStructure.py where this issue has already been addressed.
* Rebase
This commit is contained in:
@@ -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())
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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=""):
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user