reworked code - no longer depends on document selection but only on macro selection for exports
This commit is contained in:
parent
d1e0f260fc
commit
9cc8cd49c0
|
|
@ -14,7 +14,7 @@ class ObjectListItem(QWidget):
|
||||||
self.obj = obj
|
self.obj = obj
|
||||||
self.label = QLabel(obj.Label)
|
self.label = QLabel(obj.Label)
|
||||||
self.spinbox = QSpinBox()
|
self.spinbox = QSpinBox()
|
||||||
self.spinbox.setRange(0, 9999)
|
self.spinbox.setRange(1, 9999)
|
||||||
self.spinbox.setValue(1)
|
self.spinbox.setValue(1)
|
||||||
|
|
||||||
layout = QHBoxLayout()
|
layout = QHBoxLayout()
|
||||||
|
|
@ -33,34 +33,20 @@ class WindowDialog():
|
||||||
self.outputRacine = ""
|
self.outputRacine = ""
|
||||||
self.ui_file = os.path.join(FreeCAD.getUserMacroDir(True), 'MultiExport/MultiExport.ui')
|
self.ui_file = os.path.join(FreeCAD.getUserMacroDir(True), 'MultiExport/MultiExport.ui')
|
||||||
self.form = FreeCADGui.PySideUic.loadUi(self.ui_file)
|
self.form = FreeCADGui.PySideUic.loadUi(self.ui_file)
|
||||||
self._connect_widgets()
|
self.connect_widgets()
|
||||||
self._populate_selector_list()
|
self.populate_selector_list()
|
||||||
|
|
||||||
FreeCADGui.Selection.addObserver(self._on_selection_changed)
|
FreeCADGui.Selection.addObserver(self.on_selection_changed)
|
||||||
|
|
||||||
self.form.show()
|
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():
|
def connect_widgets(self):
|
||||||
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.pushButtonExport.pressed.connect(self.export)
|
||||||
self.form.pushButtonSave.pressed.connect(self.saveVarSet)
|
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):
|
|
||||||
|
def populate_selector_list(self):
|
||||||
self.form.listWidgetSelector.clear()
|
self.form.listWidgetSelector.clear()
|
||||||
FreeCADGui.Selection.clearSelection()
|
FreeCADGui.Selection.clearSelection()
|
||||||
|
|
||||||
|
|
@ -74,19 +60,9 @@ class WindowDialog():
|
||||||
self.form.listWidgetSelector.setItemWidget(item, widget)
|
self.form.listWidgetSelector.setItemWidget(item, widget)
|
||||||
|
|
||||||
item.setSelected(True)
|
item.setSelected(True)
|
||||||
FreeCADGui.Selection.addSelection(obj)
|
|
||||||
|
|
||||||
|
|
||||||
|
def on_selection_changed(self, doc, objects):
|
||||||
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):
|
|
||||||
for index in range(self.form.listWidgetSelector.count()):
|
for index in range(self.form.listWidgetSelector.count()):
|
||||||
item = self.form.listWidgetSelector.item(index)
|
item = self.form.listWidgetSelector.item(index)
|
||||||
widget = self.form.listWidgetSelector.itemWidget(item)
|
widget = self.form.listWidgetSelector.itemWidget(item)
|
||||||
|
|
@ -101,7 +77,7 @@ class WindowDialog():
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|
||||||
def _createFolder(self):
|
def createFolder(self):
|
||||||
date = datetime.today().strftime('%Y-%m-%d')
|
date = datetime.today().strftime('%Y-%m-%d')
|
||||||
time = datetime.today().strftime('%H:%M:%S')
|
time = datetime.today().strftime('%H:%M:%S')
|
||||||
|
|
||||||
|
|
@ -120,7 +96,7 @@ class WindowDialog():
|
||||||
|
|
||||||
# -------- MODIFICATION DE LA MACRO "exportSketchEnMasse-SVG" de Gauthier Brière -------- #
|
# -------- MODIFICATION DE LA MACRO "exportSketchEnMasse-SVG" de Gauthier Brière -------- #
|
||||||
|
|
||||||
def _exportSketchBasic(self, sketchList):
|
def exportSketchBasic(self, sketchList):
|
||||||
for __O__ in sketchList:
|
for __O__ in sketchList:
|
||||||
__obj__ = []
|
__obj__ = []
|
||||||
__obj__.append(__O__)
|
__obj__.append(__O__)
|
||||||
|
|
@ -133,7 +109,7 @@ class WindowDialog():
|
||||||
|
|
||||||
FreeCAD.activeDocument().recompute()
|
FreeCAD.activeDocument().recompute()
|
||||||
|
|
||||||
def _exportSketchCalepinage(self, sketchList, plateLength, plateWidth, spacing):
|
def exportSketchCalepinage(self, sketchList, plateLength, plateWidth, spacing):
|
||||||
copy_sketchList = sketchList[:]
|
copy_sketchList = sketchList[:]
|
||||||
__obj__ = []
|
__obj__ = []
|
||||||
currentX = 0.0
|
currentX = 0.0
|
||||||
|
|
@ -197,8 +173,8 @@ class WindowDialog():
|
||||||
FreeCAD.activeDocument().recompute()
|
FreeCAD.activeDocument().recompute()
|
||||||
|
|
||||||
if listSize <= 0 or isSVGFull:
|
if listSize <= 0 or isSVGFull:
|
||||||
fichierSVG = u"" + 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')
|
print('Export SVG de : ' + u"" + str(os.path.basename(self.outputRacine)) + 'CALEPINAGE-(' + str(SVGNameCounter) + ')' + '.svg')
|
||||||
importSVG.export(__obj__, fichierSVG)
|
importSVG.export(__obj__, fichierSVG)
|
||||||
for __i__ in __obj__:
|
for __i__ in __obj__:
|
||||||
FreeCAD.ActiveDocument.removeObject(__i__.Label)
|
FreeCAD.ActiveDocument.removeObject(__i__.Label)
|
||||||
|
|
@ -242,25 +218,14 @@ class WindowDialog():
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def exportSVG(self, isCalepinage):
|
def exportSVG(self, isCalepinage, svgList):
|
||||||
plateLength = self.form.doubleSpinBoxLength.value()
|
plateLength = self.form.doubleSpinBoxLength.value()
|
||||||
plateWidth = self.form.doubleSpinBoxWidth.value()
|
plateWidth = self.form.doubleSpinBoxWidth.value()
|
||||||
spacing = self.form.doubleSpinBoxSpacing.value()
|
spacing = self.form.doubleSpinBoxSpacing.value()
|
||||||
sketchList = []
|
sketchList = []
|
||||||
|
|
||||||
for obj in FreeCADGui.Selection.getSelection():
|
for _, obj, objCount in svgList:
|
||||||
if not obj.Label.endswith("-SVG"):
|
for _ in range(objCount):
|
||||||
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 _ in range(count):
|
|
||||||
if hasattr(obj, "Dir"):
|
if hasattr(obj, "Dir"):
|
||||||
vector = FreeCAD.Vector(obj.Dir.x, obj.Dir.y, obj.Dir.z)
|
vector = FreeCAD.Vector(obj.Dir.x, obj.Dir.y, obj.Dir.z)
|
||||||
else:
|
else:
|
||||||
|
|
@ -278,34 +243,19 @@ class WindowDialog():
|
||||||
FreeCAD.ActiveDocument.removeObject(sv0.Name)
|
FreeCAD.ActiveDocument.removeObject(sv0.Name)
|
||||||
|
|
||||||
if isCalepinage:
|
if isCalepinage:
|
||||||
self._exportSketchCalepinage(sketchList, plateLength, plateWidth, spacing)
|
self.exportSketchCalepinage(sketchList, plateLength, plateWidth, spacing)
|
||||||
else:
|
else:
|
||||||
self._exportSketchBasic(sketchList)
|
self.exportSketchBasic(sketchList)
|
||||||
|
|
||||||
for obj in FreeCAD.ActiveDocument.Objects:
|
|
||||||
if obj.Label.endswith("-SVG") or obj.Label.endswith("-STL"):
|
|
||||||
FreeCADGui.Selection.addSelection(obj)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def exportSTL(self, singleMode):
|
def exportSTL(self, singleMode, stlList):
|
||||||
objects_to_export = []
|
objects_to_export = []
|
||||||
|
|
||||||
for obj in FreeCADGui.Selection.getSelection():
|
for objLabel, obj, objCount in stlList:
|
||||||
if not obj.Label.endswith("-STL"):
|
for i in range(objCount):
|
||||||
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):
|
|
||||||
clone = Draft.clone(obj)
|
clone = Draft.clone(obj)
|
||||||
objects_to_export.append((clone, obj.Label, i + 1))
|
objects_to_export.append((clone, objLabel, i + 1))
|
||||||
|
|
||||||
FreeCAD.ActiveDocument.recompute()
|
FreeCAD.ActiveDocument.recompute()
|
||||||
|
|
||||||
|
|
@ -326,19 +276,38 @@ class WindowDialog():
|
||||||
FreeCAD.ActiveDocument.removeObject(obj.Name)
|
FreeCAD.ActiveDocument.removeObject(obj.Name)
|
||||||
|
|
||||||
FreeCAD.ActiveDocument.recompute()
|
FreeCAD.ActiveDocument.recompute()
|
||||||
for obj in FreeCAD.ActiveDocument.Objects:
|
|
||||||
if obj.Label.endswith("-SVG") or obj.Label.endswith("-STL"):
|
|
||||||
FreeCADGui.Selection.addSelection(obj)
|
|
||||||
|
|
||||||
|
|
||||||
def export(self):
|
def export(self):
|
||||||
isCalepinage = self.form.checkBoxCalepinage.isChecked()
|
isCalepinage = self.form.checkBoxCalepinage.isChecked()
|
||||||
isCombine = self.form.checkBoxCombine.isChecked()
|
isCombine = self.form.checkBoxCombine.isChecked()
|
||||||
|
|
||||||
self.outputRacine = self._createFolder()
|
svgList = []
|
||||||
|
stlList = []
|
||||||
|
|
||||||
self.exportSVG(isCalepinage)
|
for obj in FreeCAD.ActiveDocument.Objects:
|
||||||
self.exportSTL(isCombine)
|
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"):
|
def saveVarSet(self, varSetName = "TestVarSet"):
|
||||||
|
|
@ -362,6 +331,9 @@ class WindowDialog():
|
||||||
FreeCAD.ActiveDocument.recompute()
|
FreeCAD.ActiveDocument.recompute()
|
||||||
|
|
||||||
|
|
||||||
|
# def loadVarSet(self, varSetName = "TestVarSet", count = 1):
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
mainWindow = WindowDialog()
|
mainWindow = WindowDialog()
|
||||||
|
|
|
||||||
|
|
@ -45,21 +45,6 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="2" colspan="3">
|
|
||||||
<widget class="QPushButton" name="pushButtonRefresh">
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">🔄</string>
|
|
||||||
</property>
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<pointsize>12</pointsize>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Refresh</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0" colspan="3">
|
<item row="1" column="0" colspan="3">
|
||||||
<widget class="QListWidget" name="listWidgetSelector">
|
<widget class="QListWidget" name="listWidgetSelector">
|
||||||
<property name="selectionMode">
|
<property name="selectionMode">
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue