BIM: _Structure uses generic options task box on edit
This commit is contained in:
@@ -1685,17 +1685,30 @@ class _ViewProviderStructure(ArchComponent.ViewProviderComponent):
|
||||
return None
|
||||
|
||||
taskd = StructureTaskPanel(vobj.Object)
|
||||
taskd.obj = self.Object
|
||||
taskd.update()
|
||||
FreeCADGui.Control.showDialog(taskd)
|
||||
return True
|
||||
|
||||
|
||||
class StructureTaskPanel(ArchComponent.ComponentTaskPanel):
|
||||
class StructureTaskPanel(ArchComponent.ComponentOptionsTaskPanel):
|
||||
"""A task panel for Arch Structures that combines generic dimensions with node tools"""
|
||||
|
||||
def __init__(self, obj):
|
||||
# Define properties based on the IfcType
|
||||
if getattr(obj, "IfcType", "Beam") == "Slab":
|
||||
property_definitions = [
|
||||
{"prop": "Height", "label": translate("Arch", "Thickness")},
|
||||
]
|
||||
else:
|
||||
# For Beams and Columns
|
||||
property_definitions = [
|
||||
{"prop": "Length", "label": translate("Arch", "Length")},
|
||||
{"prop": "Width", "label": translate("Arch", "Width")},
|
||||
{"prop": "Height", "label": translate("Arch", "Height")},
|
||||
]
|
||||
|
||||
# Initialize generic parent (creates self.options_widget and self.baseform)
|
||||
super().__init__(obj, property_definitions)
|
||||
|
||||
ArchComponent.ComponentTaskPanel.__init__(self)
|
||||
self.nodes_widget = QtGui.QWidget()
|
||||
self.nodes_widget.setWindowTitle(QtGui.QApplication.translate("Arch", "Node Tools", None))
|
||||
lay = QtGui.QVBoxLayout(self.nodes_widget)
|
||||
@@ -1703,15 +1716,14 @@ class StructureTaskPanel(ArchComponent.ComponentTaskPanel):
|
||||
self.resetButton = QtGui.QPushButton(self.nodes_widget)
|
||||
self.resetButton.setIcon(QtGui.QIcon(":/icons/edit-undo.svg"))
|
||||
self.resetButton.setText(QtGui.QApplication.translate("Arch", "Reset Nodes", None))
|
||||
|
||||
lay.addWidget(self.resetButton)
|
||||
QtCore.QObject.connect(self.resetButton, QtCore.SIGNAL("clicked()"), self.resetNodes)
|
||||
self.resetButton.clicked.connect(self.resetNodes)
|
||||
|
||||
self.editButton = QtGui.QPushButton(self.nodes_widget)
|
||||
self.editButton.setIcon(QtGui.QIcon(":/icons/Draft_Edit.svg"))
|
||||
self.editButton.setText(QtGui.QApplication.translate("Arch", "Edit Nodes", None))
|
||||
lay.addWidget(self.editButton)
|
||||
QtCore.QObject.connect(self.editButton, QtCore.SIGNAL("clicked()"), self.editNodes)
|
||||
self.editButton.clicked.connect(self.editNodes)
|
||||
|
||||
self.extendButton = QtGui.QPushButton(self.nodes_widget)
|
||||
self.extendButton.setIcon(QtGui.QIcon(":/icons/Snap_Perpendicular.svg"))
|
||||
@@ -1724,7 +1736,7 @@ class StructureTaskPanel(ArchComponent.ComponentTaskPanel):
|
||||
)
|
||||
)
|
||||
lay.addWidget(self.extendButton)
|
||||
QtCore.QObject.connect(self.extendButton, QtCore.SIGNAL("clicked()"), self.extendNodes)
|
||||
self.extendButton.clicked.connect(self.extendNodes)
|
||||
|
||||
self.connectButton = QtGui.QPushButton(self.nodes_widget)
|
||||
self.connectButton.setIcon(QtGui.QIcon(":/icons/Snap_Intersection.svg"))
|
||||
@@ -1735,7 +1747,7 @@ class StructureTaskPanel(ArchComponent.ComponentTaskPanel):
|
||||
)
|
||||
)
|
||||
lay.addWidget(self.connectButton)
|
||||
QtCore.QObject.connect(self.connectButton, QtCore.SIGNAL("clicked()"), self.connectNodes)
|
||||
self.connectButton.clicked.connect(self.connectNodes)
|
||||
|
||||
self.toggleButton = QtGui.QPushButton(self.nodes_widget)
|
||||
self.toggleButton.setIcon(QtGui.QIcon(":/icons/dagViewVisible.svg"))
|
||||
@@ -1746,7 +1758,7 @@ class StructureTaskPanel(ArchComponent.ComponentTaskPanel):
|
||||
)
|
||||
)
|
||||
lay.addWidget(self.toggleButton)
|
||||
QtCore.QObject.connect(self.toggleButton, QtCore.SIGNAL("clicked()"), self.toggleNodes)
|
||||
self.toggleButton.clicked.connect(self.toggleNodes)
|
||||
|
||||
self.extrusion_widget = QtGui.QWidget()
|
||||
self.extrusion_widget.setWindowTitle(
|
||||
@@ -1763,12 +1775,11 @@ class StructureTaskPanel(ArchComponent.ComponentTaskPanel):
|
||||
)
|
||||
)
|
||||
lay.addWidget(self.selectToolButton)
|
||||
QtCore.QObject.connect(
|
||||
self.selectToolButton, QtCore.SIGNAL("clicked()"), self.setSelectionFromTool
|
||||
)
|
||||
self.selectToolButton.clicked.connect(self.setSelectionFromTool)
|
||||
|
||||
# Build the final form list: Options box, Node Tools box, Extrusion box, Components box
|
||||
self.form = [self.options_widget, self.nodes_widget, self.extrusion_widget, self.baseform]
|
||||
|
||||
self.form = [self.form, self.nodes_widget, self.extrusion_widget]
|
||||
self.Object = obj
|
||||
self.observer = None
|
||||
self.nodevis = None
|
||||
|
||||
@@ -1961,14 +1972,13 @@ class StructureTaskPanel(ArchComponent.ComponentTaskPanel):
|
||||
self.selectToolButton.setText(QtGui.QApplication.translate("Arch", "Select Tool", None))
|
||||
|
||||
def accept(self):
|
||||
|
||||
if self.observer:
|
||||
FreeCADGui.Selection.removeObserver(self.observer)
|
||||
if self.nodevis:
|
||||
self.toggleNodes()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
FreeCADGui.ActiveDocument.resetEdit()
|
||||
return True
|
||||
|
||||
# Trigger the generic property-saving logic in ComponentOptionsTaskPanel
|
||||
return super().accept()
|
||||
|
||||
|
||||
class StructSelectionObserver:
|
||||
|
||||
Reference in New Issue
Block a user