ArrayFilter: Explode: automatically group resulting objects
This commit is contained in:
parent
2633d6aeae
commit
507e7aeace
|
@ -305,6 +305,53 @@ class GroupCommandLatticeArrayFilter:
|
||||||
FreeCADGui.addCommand('Lattice2_ArrayFilter_GroupCommand',GroupCommandLatticeArrayFilter())
|
FreeCADGui.addCommand('Lattice2_ArrayFilter_GroupCommand',GroupCommandLatticeArrayFilter())
|
||||||
|
|
||||||
|
|
||||||
|
def ExplodeArray(feature):
|
||||||
|
plms = lattice2BaseFeature.getPlacementsList(feature)
|
||||||
|
features_created = []
|
||||||
|
for i in range(len(plms)):
|
||||||
|
af = makeArrayFilter(name = 'Placment')
|
||||||
|
af.Label = u'Placement' + unicode(i)
|
||||||
|
af.Base = feature
|
||||||
|
af.FilterType = 'specific items'
|
||||||
|
af.items = str(i)
|
||||||
|
af.ExposePlacement = True
|
||||||
|
af.ViewObject.DontUnhideOnDelete = True
|
||||||
|
features_created.append(af)
|
||||||
|
return features_created
|
||||||
|
|
||||||
|
def cmdExplodeArray():
|
||||||
|
App.ActiveDocument.openTransaction("Explode array")
|
||||||
|
try:
|
||||||
|
sel = FreeCADGui.Selection.getSelectionEx()
|
||||||
|
if len(sel) != 1:
|
||||||
|
raise SelectionError("Bad selection","One array to be exploded must be selected. You have selected {num} objects.".format(num= len(sel)))
|
||||||
|
obj = sel[0].Object
|
||||||
|
FreeCADGui.addModule("lattice2ArrayFilter")
|
||||||
|
FreeCADGui.addModule("lattice2Executer")
|
||||||
|
FreeCADGui.doCommand("input_obj = App.ActiveDocument."+obj.Name)
|
||||||
|
old_state = lattice2Executer.globalIsCreatingLatticeFeature
|
||||||
|
lattice2Executer.globalIsCreatingLatticeFeature = True #for warnings to pop up
|
||||||
|
FreeCADGui.doCommand("output_objs = lattice2ArrayFilter.ExplodeArray(input_obj)")
|
||||||
|
lattice2Executer.globalIsCreatingLatticeFeature = old_state
|
||||||
|
FreeCADGui.doCommand("\n".join([
|
||||||
|
"if len(output_objs) > 1:",
|
||||||
|
" group = App.ActiveDocument.addObject('App::DocumentObjectGroup','GrExplode_'+input_obj.Name)",
|
||||||
|
" group.Group = output_objs",
|
||||||
|
" group.Label = 'Placements of '+input_obj.Label",
|
||||||
|
" App.ActiveDocument.recompute()",
|
||||||
|
"else:",
|
||||||
|
" lattice2Executer.executeFeature(output_objs[0])",
|
||||||
|
"",
|
||||||
|
]) )
|
||||||
|
FreeCADGui.doCommand("input_obj.ViewObject.hide()")
|
||||||
|
except Exception:
|
||||||
|
App.ActiveDocument.abortTransaction()
|
||||||
|
lattice2Executer.globalIsCreatingLatticeFeature = False
|
||||||
|
raise
|
||||||
|
|
||||||
|
App.ActiveDocument.commitTransaction()
|
||||||
|
|
||||||
|
|
||||||
class _CommandExplodeArray:
|
class _CommandExplodeArray:
|
||||||
"Command to explode array with parametric links to its elements"
|
"Command to explode array with parametric links to its elements"
|
||||||
def GetResources(self):
|
def GetResources(self):
|
||||||
|
@ -314,39 +361,15 @@ class _CommandExplodeArray:
|
||||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Lattice2_ArrayFilter","Explode array: get each element of array as a separate object")}
|
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Lattice2_ArrayFilter","Explode array: get each element of array as a separate object")}
|
||||||
|
|
||||||
def Activated(self):
|
def Activated(self):
|
||||||
if len(FreeCADGui.Selection.getSelection()) == 1 :
|
|
||||||
FreeCAD.ActiveDocument.openTransaction("Explode Array")
|
|
||||||
lattice2Executer.globalIsCreatingLatticeFeature = True
|
|
||||||
try:
|
try:
|
||||||
obj = FreeCADGui.Selection.getSelection()[0]
|
if len(FreeCADGui.Selection.getSelection()) > 0 :
|
||||||
if not lattice2BaseFeature.isObjectLattice(obj):
|
cmdExplodeArray()
|
||||||
lattice2Executer.warning(None,"ExplodeArray expects a lattice object; a generic shape was provided instead. Results may be unexpected.")
|
|
||||||
sh = obj.Shape
|
|
||||||
n_elem = len(LCE.AllLeaves(sh))
|
|
||||||
lattice2Executer.globalIsCreatingLatticeFeature = False
|
|
||||||
for i in range(0, n_elem):
|
|
||||||
af = makeArrayFilter(name = 'Element')
|
|
||||||
af.Label = u'Element' + unicode(i)
|
|
||||||
af.Base = obj
|
|
||||||
af.FilterType = 'specific items'
|
|
||||||
af.items = str(i)
|
|
||||||
af.ExposePlacement = True
|
|
||||||
af.ViewObject.DontUnhideOnDelete = True
|
|
||||||
FreeCAD.ActiveDocument.recompute()
|
|
||||||
obj.ViewObject.hide()
|
|
||||||
except Exception:
|
|
||||||
FreeCAD.ActiveDocument.abortTransaction()
|
|
||||||
raise
|
|
||||||
finally:
|
|
||||||
lattice2Executer.globalIsCreatingLatticeFeature = False
|
|
||||||
FreeCAD.ActiveDocument.commitTransaction()
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
mb = QtGui.QMessageBox()
|
infoMessage("Explode array",
|
||||||
mb.setIcon(mb.Icon.Warning)
|
"'Explode Array' command. Makes placements of array available as separate document objects.\n\n"+
|
||||||
mb.setText(translate("Lattice2_ArrayFilter", "Select a lattice object, first!", None))
|
"Select an object that is a Lattice array of placements, then invoke this command.")
|
||||||
mb.setWindowTitle(translate("Lattice2_ArrayFilter","Bad selection", None))
|
except Exception as err:
|
||||||
mb.exec_()
|
msgError(err)
|
||||||
|
|
||||||
def IsActive(self):
|
def IsActive(self):
|
||||||
if FreeCAD.ActiveDocument:
|
if FreeCAD.ActiveDocument:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user