Draft/BIM: Change Continue behavior and caching among commands (#20748)
* Draft: Cache ContinueMode setting for every tool separately Currently ContinueMode is done to be held globally, so this patch changes this to cache it inside `user.cfg` for every cmd separately. * Draft: Add Chained Mode option for Dimension Added new option under Dimension, although this is simply porting the existing logic of "Continue" under "Chained Mode", whereas allowing existing "Continue" mode to retrigger the command instead of placing Dimensions in a chain.
This commit is contained in:
@@ -295,7 +295,6 @@ class _CommandStructure:
|
||||
self.Length = params.get_param_arch("StructureLength")
|
||||
self.Height = params.get_param_arch("StructureHeight")
|
||||
self.Profile = None
|
||||
self.continueCmd = False
|
||||
self.bpoint = None
|
||||
self.bmode = False
|
||||
self.precastvalues = None
|
||||
@@ -338,6 +337,7 @@ class _CommandStructure:
|
||||
title=translate("Arch","Base point of column")+":"
|
||||
FreeCAD.activeDraftCommand = self # register as a Draft command for auto grid on/off
|
||||
FreeCADGui.Snapper.getPoint(callback=self.getPoint,movecallback=self.update,extradlg=[self.taskbox(),self.precast.form,self.dents.form],title=title)
|
||||
FreeCADGui.draftToolBar.continueCmd.show()
|
||||
|
||||
def getPoint(self,point=None,obj=None):
|
||||
|
||||
@@ -423,7 +423,7 @@ class _CommandStructure:
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
# gui_utils.end_all_events() # Causes a crash on Linux.
|
||||
self.tracker.finalize()
|
||||
if self.continueCmd:
|
||||
if FreeCADGui.draftToolBar.continueCmd.isChecked():
|
||||
self.Activated()
|
||||
|
||||
def _createItemlist(self, baselist):
|
||||
@@ -505,21 +505,10 @@ class _CommandStructure:
|
||||
grid.addWidget(self.vHeight,6,1,1,1)
|
||||
|
||||
# horizontal button
|
||||
value5 = QtGui.QPushButton(translate("Arch","Switch Length/Height"))
|
||||
grid.addWidget(value5,7,0,1,1)
|
||||
value6 = QtGui.QPushButton(translate("Arch","Switch Length/Width"))
|
||||
grid.addWidget(value6,7,1,1,1)
|
||||
|
||||
# continue button
|
||||
label4 = QtGui.QLabel(translate("Arch","Con&tinue"))
|
||||
value4 = QtGui.QCheckBox()
|
||||
value4.setObjectName("ContinueCmd")
|
||||
value4.setLayoutDirection(QtCore.Qt.RightToLeft)
|
||||
label4.setBuddy(value4)
|
||||
self.continueCmd = params.get_param("ContinueMode")
|
||||
value4.setChecked(self.continueCmd)
|
||||
grid.addWidget(label4,8,0,1,1)
|
||||
grid.addWidget(value4,8,1,1,1)
|
||||
value4 = QtGui.QPushButton(translate("Arch","Switch Length/Height"))
|
||||
grid.addWidget(value4,7,0,1,1)
|
||||
value5 = QtGui.QPushButton(translate("Arch","Switch Length/Width"))
|
||||
grid.addWidget(value5,7,1,1,1)
|
||||
|
||||
# connect slots
|
||||
QtCore.QObject.connect(self.valuec,QtCore.SIGNAL("currentIndexChanged(int)"),self.setCategory)
|
||||
@@ -527,9 +516,8 @@ class _CommandStructure:
|
||||
QtCore.QObject.connect(self.vLength,QtCore.SIGNAL("valueChanged(double)"),self.setLength)
|
||||
QtCore.QObject.connect(self.vWidth,QtCore.SIGNAL("valueChanged(double)"),self.setWidth)
|
||||
QtCore.QObject.connect(self.vHeight,QtCore.SIGNAL("valueChanged(double)"),self.setHeight)
|
||||
QtCore.QObject.connect(value4,QtCore.SIGNAL("stateChanged(int)"),self.setContinue)
|
||||
QtCore.QObject.connect(value5,QtCore.SIGNAL("pressed()"),self.rotateLH)
|
||||
QtCore.QObject.connect(value6,QtCore.SIGNAL("pressed()"),self.rotateLW)
|
||||
QtCore.QObject.connect(value4,QtCore.SIGNAL("pressed()"),self.rotateLH)
|
||||
QtCore.QObject.connect(value5,QtCore.SIGNAL("pressed()"),self.rotateLW)
|
||||
QtCore.QObject.connect(self.modeb,QtCore.SIGNAL("toggled(bool)"),self.switchLH)
|
||||
|
||||
# restore preset
|
||||
@@ -602,11 +590,6 @@ class _CommandStructure:
|
||||
else:
|
||||
params.set_param_arch("StructureLength",d)
|
||||
|
||||
def setContinue(self,i):
|
||||
|
||||
self.continueCmd = bool(i)
|
||||
params.set_param("ContinueMode", bool(i))
|
||||
|
||||
def setCategory(self,i):
|
||||
|
||||
self.vPresets.clear()
|
||||
|
||||
@@ -38,6 +38,7 @@ class BIM_Beam(ArchStructure._CommandStructure):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.beammode = True
|
||||
self.featureName = "Beam"
|
||||
|
||||
def IsActive(self):
|
||||
v = hasattr(FreeCADGui.getMainWindow().getActiveWindow(), "getSceneGraph")
|
||||
|
||||
@@ -38,6 +38,7 @@ class BIM_Column(ArchStructure._CommandStructure):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.beammode = False
|
||||
self.featureName = "Column"
|
||||
|
||||
def IsActive(self):
|
||||
v = hasattr(FreeCADGui.getMainWindow().getActiveWindow(), "getSceneGraph")
|
||||
|
||||
@@ -70,7 +70,7 @@ class Arch_Panel:
|
||||
self.Width = params.get_param_arch("PanelWidth")
|
||||
self.Thickness = params.get_param_arch("PanelThickness")
|
||||
self.Profile = None
|
||||
self.continueCmd = False
|
||||
self.featureName = "Panel"
|
||||
self.rotated = False
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
if sel:
|
||||
@@ -96,7 +96,9 @@ class Arch_Panel:
|
||||
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()
|
||||
|
||||
def getPoint(self,point=None,obj=None):
|
||||
|
||||
@@ -105,6 +107,7 @@ class Arch_Panel:
|
||||
import DraftVecUtils
|
||||
self.tracker.finalize()
|
||||
if point is None:
|
||||
FreeCAD.activeDraftCommand = None
|
||||
return
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Panel"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
@@ -120,7 +123,8 @@ 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()
|
||||
if self.continueCmd:
|
||||
FreeCAD.activeDraftCommand = None
|
||||
if FreeCADGui.draftToolBar.continueCmd.isChecked():
|
||||
self.Activated()
|
||||
|
||||
def taskbox(self):
|
||||
@@ -166,26 +170,14 @@ class Arch_Panel:
|
||||
grid.addWidget(self.vHeight,3,1,1,1)
|
||||
|
||||
# horizontal button
|
||||
value5 = QtGui.QPushButton(translate("Arch","Rotate"))
|
||||
grid.addWidget(value5,4,0,1,2)
|
||||
|
||||
# continue button
|
||||
label4 = QtGui.QLabel(translate("Arch","Con&tinue"))
|
||||
value4 = QtGui.QCheckBox()
|
||||
value4.setObjectName("ContinueCmd")
|
||||
value4.setLayoutDirection(QtCore.Qt.RightToLeft)
|
||||
label4.setBuddy(value4)
|
||||
self.continueCmd = params.get_param("ContinueMode")
|
||||
value4.setChecked(self.continueCmd)
|
||||
grid.addWidget(label4,5,0,1,1)
|
||||
grid.addWidget(value4,5,1,1,1)
|
||||
value4= QtGui.QPushButton(translate("Arch","Rotate"))
|
||||
grid.addWidget(value4,4,0,1,2)
|
||||
|
||||
valuep.currentIndexChanged.connect(self.setPreset)
|
||||
self.vLength.valueChanged.connect(self.setLength)
|
||||
self.vWidth.valueChanged.connect(self.setWidth)
|
||||
self.vHeight.valueChanged.connect(self.setThickness)
|
||||
value4.stateChanged.connect(self.setContinue)
|
||||
value5.pressed.connect(self.rotate)
|
||||
value4.pressed.connect(self.rotate)
|
||||
return w
|
||||
|
||||
def update(self,point,info):
|
||||
@@ -221,12 +213,6 @@ class Arch_Panel:
|
||||
self.Length = d.Value
|
||||
params.set_param_arch("PanelLength",d)
|
||||
|
||||
def setContinue(self,i):
|
||||
|
||||
from draftutils import params
|
||||
self.continueCmd = bool(i)
|
||||
params.set_param("ContinueMode", bool(i))
|
||||
|
||||
def setPreset(self,i):
|
||||
|
||||
if i > 0:
|
||||
|
||||
@@ -75,7 +75,7 @@ class Arch_Wall:
|
||||
self.MultiMat = None
|
||||
self.Length = None
|
||||
self.lengthValue = 0
|
||||
self.continueCmd = False
|
||||
self.featureName = "Wall"
|
||||
self.Width = params.get_param_arch("WallWidth")
|
||||
self.Height = params.get_param_arch("WallHeight")
|
||||
self.JOIN_WALLS_SKETCHES = params.get_param_arch("joinWallSketches")
|
||||
@@ -118,6 +118,7 @@ class Arch_Wall:
|
||||
FreeCADGui.Snapper.getPoint(callback=self.getPoint,
|
||||
extradlg=self.taskbox(),
|
||||
title=translate("Arch","First point of wall")+":")
|
||||
FreeCADGui.draftToolBar.continueCmd.show()
|
||||
|
||||
def getPoint(self,point=None,obj=None):
|
||||
"""Callback for clicks during interactive mode.
|
||||
@@ -194,7 +195,7 @@ class Arch_Wall:
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
# gui_utils.end_all_events() # Causes a crash on Linux.
|
||||
self.tracker.finalize()
|
||||
if self.continueCmd:
|
||||
if FreeCADGui.draftToolBar.continueCmd.isChecked():
|
||||
self.Activated()
|
||||
|
||||
def addDefault(self):
|
||||
@@ -319,31 +320,20 @@ class Arch_Wall:
|
||||
grid.addWidget(label3,4,0,1,1)
|
||||
grid.addWidget(value3,4,1,1,1)
|
||||
|
||||
label4 = QtGui.QLabel(translate("Arch","Con&tinue"))
|
||||
label4 = QtGui.QLabel(translate("Arch","Use sketches"))
|
||||
value4 = QtGui.QCheckBox()
|
||||
value4.setObjectName("ContinueCmd")
|
||||
value4.setObjectName("UseSketches")
|
||||
value4.setLayoutDirection(QtCore.Qt.RightToLeft)
|
||||
label4.setBuddy(value4)
|
||||
self.continueCmd = params.get_param("ContinueMode")
|
||||
value4.setChecked(self.continueCmd)
|
||||
value4.setChecked(params.get_param_arch("WallSketches"))
|
||||
grid.addWidget(label4,5,0,1,1)
|
||||
grid.addWidget(value4,5,1,1,1)
|
||||
|
||||
label5 = QtGui.QLabel(translate("Arch","Use sketches"))
|
||||
value5 = QtGui.QCheckBox()
|
||||
value5.setObjectName("UseSketches")
|
||||
value5.setLayoutDirection(QtCore.Qt.RightToLeft)
|
||||
label5.setBuddy(value5)
|
||||
value5.setChecked(params.get_param_arch("WallSketches"))
|
||||
grid.addWidget(label5,6,0,1,1)
|
||||
grid.addWidget(value5,6,1,1,1)
|
||||
|
||||
self.Length.valueChanged.connect(self.setLength)
|
||||
value1.valueChanged.connect(self.setWidth)
|
||||
value2.valueChanged.connect(self.setHeight)
|
||||
value3.currentIndexChanged.connect(self.setAlign)
|
||||
value4.stateChanged.connect(self.setContinue)
|
||||
value5.stateChanged.connect(self.setUseSketch)
|
||||
value4.stateChanged.connect(self.setUseSketch)
|
||||
self.Length.returnPressed.connect(value1.setFocus)
|
||||
self.Length.returnPressed.connect(value1.selectAll)
|
||||
value1.returnPressed.connect(value2.setFocus)
|
||||
@@ -397,16 +387,6 @@ class Arch_Wall:
|
||||
self.Align = ["Center","Left","Right"][i]
|
||||
params.set_param_arch("WallAlignment",i)
|
||||
|
||||
def setContinue(self,i):
|
||||
"""Simple callback to set if the interactive mode will restart when finished.
|
||||
|
||||
This allows for several walls to be placed one after another.
|
||||
"""
|
||||
|
||||
from draftutils import params
|
||||
self.continueCmd = bool(i)
|
||||
params.set_param("ContinueMode", bool(i))
|
||||
|
||||
def setUseSketch(self,i):
|
||||
"""Simple callback to set if walls should based on sketches."""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user