BIM: _Structure uses generic options task box on edit

This commit is contained in:
Furgo
2026-03-02 07:01:48 +01:00
parent 6a76d22d76
commit f329584eb5
+29 -19
View File
@@ -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: