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
+
+
+