diff --git a/MultiExport.FCMacro b/MultiExport.FCMacro
index 3d1387c..baa959b 100755
--- a/MultiExport.FCMacro
+++ b/MultiExport.FCMacro
@@ -14,7 +14,7 @@ class ObjectListItem(QWidget):
self.obj = obj
self.label = QLabel(obj.Label)
self.spinbox = QSpinBox()
- self.spinbox.setRange(0, 9999)
+ self.spinbox.setRange(1, 9999)
self.spinbox.setValue(1)
layout = QHBoxLayout()
@@ -33,20 +33,20 @@ class WindowDialog():
self.outputRacine = ""
self.ui_file = os.path.join(FreeCAD.getUserMacroDir(True), 'MultiExport/MultiExport.ui')
self.form = FreeCADGui.PySideUic.loadUi(self.ui_file)
- self._connect_widgets()
- self._populate_selector_list()
+ 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)
+ FreeCADGui.Selection.addObserver(self.on_selection_changed)
self.form.show()
- def _connect_widgets(self):
+ def connect_widgets(self):
self.form.pushButtonExport.pressed.connect(self.export)
- self.form.listWidgetSelector.itemClicked.connect(self._on_list_item_clicked)
+ self.form.pushButtonSave.pressed.connect(self.saveVarSet)
- def _populate_selector_list(self):
+
+ def populate_selector_list(self):
self.form.listWidgetSelector.clear()
FreeCADGui.Selection.clearSelection()
@@ -59,38 +59,25 @@ 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)
-
- def _on_list_item_clicked(self, item):
- widget = self.form.listWidgetSelector.itemWidget(item)
- obj = widget.obj
- if obj in FreeCADGui.Selection.getSelection():
- FreeCADGui.Selection.removeSelection(obj)
- else:
- FreeCADGui.Selection.addSelection(obj)
-
- def _on_selection_changed(self, doc, objects):
- # Clear current selection in the list
+ def on_selection_changed(self, doc, objects):
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
- def _createFolder(self):
+ def createFolder(self):
date = datetime.today().strftime('%Y-%m-%d')
time = datetime.today().strftime('%H:%M:%S')
@@ -109,7 +96,7 @@ class WindowDialog():
# -------- MODIFICATION DE LA MACRO "exportSketchEnMasse-SVG" de Gauthier Brière -------- #
- def _exportSketchBasic(self, sketchList):
+ def exportSketchBasic(self, sketchList):
for __O__ in sketchList:
__obj__ = []
__obj__.append(__O__)
@@ -122,7 +109,7 @@ class WindowDialog():
FreeCAD.activeDocument().recompute()
- def _exportSketchCalepinage(self, sketchList, plateLength, plateWidth, spacing):
+ def exportSketchCalepinage(self, sketchList, plateLength, plateWidth, spacing):
copy_sketchList = sketchList[:]
__obj__ = []
currentX = 0.0
@@ -186,8 +173,8 @@ class WindowDialog():
FreeCAD.activeDocument().recompute()
if listSize <= 0 or isSVGFull:
- fichierSVG = u"" + self.outputRacine + 'CALEPINAGE-' + str(SVGNameCounter) + '-' + '.svg'
- print('Export SVG de : ' + u"" + str(os.path.basename(self.outputRacine)) + 'CALEPINAGE-' + str(SVGNameCounter) + '-' + '.svg')
+ fichierSVG = u"" + self.outputRacine + 'CALEPINAGE-(' + str(SVGNameCounter) + ')' + '.svg'
+ print('Export SVG de : ' + u"" + str(os.path.basename(self.outputRacine)) + 'CALEPINAGE-(' + str(SVGNameCounter) + ')' + '.svg')
importSVG.export(__obj__, fichierSVG)
for __i__ in __obj__:
FreeCAD.ActiveDocument.removeObject(__i__.Label)
@@ -224,64 +211,26 @@ 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):
+
+ def exportSVG(self, isCalepinage, svgList):
plateLength = self.form.doubleSpinBoxLength.value()
plateWidth = self.form.doubleSpinBoxWidth.value()
spacing = self.form.doubleSpinBoxSpacing.value()
sketchList = []
- for obj in FreeCADGui.Selection.getSelection():
- 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
- 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
-
- for _ in range(count):
+ for _, obj, objCount in svgList:
+ for _ in range(objCount):
if hasattr(obj, "Dir"):
vector = FreeCAD.Vector(obj.Dir.x, obj.Dir.y, obj.Dir.z)
else:
vector = self.getLargestFaceDir(obj)
- # vector = self.searchDir(obj, 0, 0, 0)
sv0 = Draft.make_shape2dview(obj, vector)
FreeCAD.ActiveDocument.recompute()
@@ -294,32 +243,19 @@ class WindowDialog():
FreeCAD.ActiveDocument.removeObject(sv0.Name)
if isCalepinage:
- self._exportSketchCalepinage(sketchList, plateLength, plateWidth, spacing)
+ self.exportSketchCalepinage(sketchList, plateLength, plateWidth, spacing)
else:
- self._exportSketchBasic(sketchList)
-
- self._populate_selector_list()
+ self.exportSketchBasic(sketchList)
- def exportSTL(self, singleMode):
+ def exportSTL(self, singleMode, stlList):
objects_to_export = []
- for obj in FreeCADGui.Selection.getSelection():
- if not obj.Label.endswith("-STL"):
- continue
-
- 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
-
- for i in range(count):
+ for objLabel, obj, objCount in stlList:
+ for i in range(objCount):
clone = Draft.clone(obj)
- objects_to_export.append((clone, obj.Label, i + 1))
+ objects_to_export.append((clone, objLabel, i + 1))
FreeCAD.ActiveDocument.recompute()
@@ -340,17 +276,62 @@ class WindowDialog():
FreeCAD.ActiveDocument.removeObject(obj.Name)
FreeCAD.ActiveDocument.recompute()
- self._populate_selector_list()
def export(self):
isCalepinage = self.form.checkBoxCalepinage.isChecked()
isCombine = self.form.checkBoxCombine.isChecked()
- self.outputRacine = self._createFolder()
+ svgList = []
+ stlList = []
- self.exportSVG(isCalepinage)
- self.exportSTL(isCombine)
+ for obj in FreeCAD.ActiveDocument.Objects:
+ count = 1
+
+ for index in range(self.form.listWidgetSelector.count()):
+ item = self.form.listWidgetSelector.item(index)
+ widget = self.form.listWidgetSelector.itemWidget(item)
+
+ if not item.isSelected():
+ continue
+
+ if widget.obj == obj:
+ count = widget.get_value()
+ if obj.Label.endswith("-SVG"):
+ svgList.append((obj.Label, obj, count))
+ elif obj.Label.endswith("-STL"):
+ stlList.append((obj.Label, obj, count))
+ break
+
+ if not svgList == [] or not stlList == []:
+ self.outputRacine = self.createFolder()
+
+ self.exportSVG(isCalepinage, svgList)
+ self.exportSTL(isCombine, stlList)
+
+
+ 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()
+
+
+ # def loadVarSet(self, varSetName = "TestVarSet", count = 1):
if __name__ == '__main__':
diff --git a/MultiExport/MultiExport.ui b/MultiExport/MultiExport.ui
index 7cd9bef..f76e2b3 100644
--- a/MultiExport/MultiExport.ui
+++ b/MultiExport/MultiExport.ui
@@ -17,7 +17,7 @@
Multi Export
- -
+
-
❓
@@ -187,6 +187,13 @@
+ -
+
+
+ Save
+
+
+