From d1e0f260fc46ebb82d98ad0cf955236696925f7a Mon Sep 17 00:00:00 2001 From: Thomas-Alexandre Moreau Date: Wed, 11 Jun 2025 16:37:10 +0200 Subject: [PATCH] added refresh button (temp fix) --- MultiExport.FCMacro | 83 +++++++++++++++++++++----------------- MultiExport/MultiExport.ui | 24 ++++++++++- 2 files changed, 69 insertions(+), 38 deletions(-) diff --git a/MultiExport.FCMacro b/MultiExport.FCMacro index 3d1387c..6996f19 100755 --- a/MultiExport.FCMacro +++ b/MultiExport.FCMacro @@ -36,14 +36,28 @@ class WindowDialog(): self._connect_widgets() self._populate_selector_list() - # Connect the selection change signal to keep the list in sync FreeCADGui.Selection.addObserver(self._on_selection_changed) self.form.show() + def refresh(self): + for index in range(self.form.listWidgetSelector.count()): + item = self.form.listWidgetSelector.item(index) + widget = self.form.listWidgetSelector.itemWidget(item) + item.setSelected(False) + + for obj in FreeCADGui.Selection.getSelection(): + for index in range(self.form.listWidgetSelector.count()): + item = self.form.listWidgetSelector.item(index) + widget = self.form.listWidgetSelector.itemWidget(item) + if widget.obj == obj: + item.setSelected(True) + break def _connect_widgets(self): self.form.pushButtonExport.pressed.connect(self.export) + self.form.pushButtonSave.pressed.connect(self.saveVarSet) + self.form.pushButtonRefresh.pressed.connect(self.refresh) self.form.listWidgetSelector.itemClicked.connect(self._on_list_item_clicked) def _populate_selector_list(self): @@ -59,7 +73,6 @@ class WindowDialog(): self.form.listWidgetSelector.addItem(item) self.form.listWidgetSelector.setItemWidget(item, widget) - # Sync selection: add the object to the selection and select the item in the list item.setSelected(True) FreeCADGui.Selection.addSelection(obj) @@ -74,19 +87,17 @@ class WindowDialog(): FreeCADGui.Selection.addSelection(obj) def _on_selection_changed(self, doc, objects): - # Clear current selection in the list for index in range(self.form.listWidgetSelector.count()): item = self.form.listWidgetSelector.item(index) widget = self.form.listWidgetSelector.itemWidget(item) - item.setSelected(False) # Deselect in the list + item.setSelected(False) - # Sync the list selection with FreeCAD's current selection for obj in FreeCADGui.Selection.getSelection(): for index in range(self.form.listWidgetSelector.count()): item = self.form.listWidgetSelector.item(index) widget = self.form.listWidgetSelector.itemWidget(item) if widget.obj == obj: - item.setSelected(True) # Select the corresponding item in the list + item.setSelected(True) break @@ -224,38 +235,13 @@ class WindowDialog(): largestFace = face if largestFace: - # Get normal at center of face (parametric center) u, v = largestFace.Surface.parameter(largestFace.CenterOfMass) normal = largestFace.normalAt(u, v) return normal.normalize() return None - # def searchDir(self, obj, xres, yres, zres): - # x, y, z = xres, yres, zres - - # if hasattr(obj, "Dir"): - # if obj.Dir.x != 0.0: - # x = obj.Dir.x - # if obj.Dir.y != 0.0: - # y = obj.Dir.y - # if obj.Dir.z != 0.0: - # z = obj.Dir.z - - # if not hasattr(obj, "Objects"): - # return FreeCAD.Vector(x, y, z) - # else: - # res = FreeCAD.Vector(x, y, z) - # for i in obj.Objects: - # res = self.searchDir(i, x, y, z) - # return res - - # elif hasattr(obj, "Objects"): - # res = FreeCAD.Vector(x, y, z) - # for i in obj.Objects: - # res = self.searchDir(i, x, y, z) - # return res - + def exportSVG(self, isCalepinage): plateLength = self.form.doubleSpinBoxLength.value() plateWidth = self.form.doubleSpinBoxWidth.value() @@ -266,8 +252,7 @@ class WindowDialog(): if not obj.Label.endswith("-SVG"): continue - count = 1 # default if not using spinboxes (or fetch from list if desired) - # Optional: match count from list + count = 1 for index in range(self.form.listWidgetSelector.count()): item = self.form.listWidgetSelector.item(index) widget = self.form.listWidgetSelector.itemWidget(item) @@ -281,7 +266,6 @@ class WindowDialog(): else: vector = self.getLargestFaceDir(obj) - # vector = self.searchDir(obj, 0, 0, 0) sv0 = Draft.make_shape2dview(obj, vector) FreeCAD.ActiveDocument.recompute() @@ -298,7 +282,9 @@ class WindowDialog(): else: self._exportSketchBasic(sketchList) - self._populate_selector_list() + for obj in FreeCAD.ActiveDocument.Objects: + if obj.Label.endswith("-SVG") or obj.Label.endswith("-STL"): + FreeCADGui.Selection.addSelection(obj) @@ -340,7 +326,9 @@ class WindowDialog(): FreeCAD.ActiveDocument.removeObject(obj.Name) FreeCAD.ActiveDocument.recompute() - self._populate_selector_list() + for obj in FreeCAD.ActiveDocument.Objects: + if obj.Label.endswith("-SVG") or obj.Label.endswith("-STL"): + FreeCADGui.Selection.addSelection(obj) def export(self): @@ -351,6 +339,27 @@ class WindowDialog(): self.exportSVG(isCalepinage) self.exportSTL(isCombine) + + + def saveVarSet(self, varSetName = "TestVarSet"): + varSet = FreeCAD.ActiveDocument.addObject("App::VarSet", varSetName) + + for obj in FreeCADGui.Selection.getSelection(): + count = 1 + for index in range(self.form.listWidgetSelector.count()): + item = self.form.listWidgetSelector.item(index) + widget = self.form.listWidgetSelector.itemWidget(item) + if widget.obj == obj: + count = widget.get_value() + break + + varSet.addProperty("App::PropertyStringList", obj.Name) + if obj.Label.endswith("-SVG"): + setattr(varSet, obj.Name, ("SVG", str(count))) + else: + setattr(varSet, obj.Name, ("STL", str(count))) + + FreeCAD.ActiveDocument.recompute() if __name__ == '__main__': diff --git a/MultiExport/MultiExport.ui b/MultiExport/MultiExport.ui index 7cd9bef..1773030 100644 --- a/MultiExport/MultiExport.ui +++ b/MultiExport/MultiExport.ui @@ -17,7 +17,7 @@ Multi Export - + @@ -45,6 +45,21 @@ + + + + 🔄 + + + + 12 + + + + Refresh + + + @@ -187,6 +202,13 @@ + + + + Save + + +