Code: Select all
def boolean_cut(base_body, sub_body1, sub_body2):
partdesign_body_basename = base_body.split('__')[0]
Gui.Selection.clearSelection()
Gui.Selection.addSelection(App.ActiveDocument.Label,base_body)
Gui.ActiveDocument.ActiveView.setActiveObject('pdbody',App.ActiveDocument.getObject(base_body))
Gui.Selection.addSelection(App.ActiveDocument.Label,sub_body1)
Gui.Selection.addSelection(App.ActiveDocument.Label,sub_body2)
App.ActiveDocument.getObject(base_body).newObject('PartDesign::Boolean','Boolean')
App.ActiveDocument.getObject('Boolean').addObjects([App.ActiveDocument.getObject(sub_body1),App.ActiveDocument.getObject(sub_body2),])
App.ActiveDocument.recompute()
App.ActiveDocument.getObject('Boolean').ViewObject.ShapeColor=getattr(App.ActiveDocument.getObject(partdesign_body_basename + '__Pocket').getLinkedObject(True).ViewObject,'ShapeColor',App.ActiveDocument.getObject('Boolean').ViewObject.ShapeColor)
App.ActiveDocument.getObject('Boolean').ViewObject.LineColor=getattr(App.ActiveDocument.getObject(partdesign_body_basename + '__Pocket').getLinkedObject(True).ViewObject,'LineColor',App.ActiveDocument.getObject('Boolean').ViewObject.LineColor)
App.ActiveDocument.getObject('Boolean').ViewObject.PointColor=getattr(App.ActiveDocument.getObject(partdesign_body_basename + '__Pocket').getLinkedObject(True).ViewObject,'PointColor',App.ActiveDocument.getObject('Boolean').ViewObject.PointColor)
App.ActiveDocument.getObject('Boolean').ViewObject.Transparency=getattr(App.ActiveDocument.getObject(partdesign_body_basename + '__Pocket').getLinkedObject(True).ViewObject,'Transparency',App.ActiveDocument.getObject('Boolean').ViewObject.Transparency)
App.ActiveDocument.getObject('Boolean').ViewObject.DisplayMode=getattr(App.ActiveDocument.getObject(partdesign_body_basename + '__Pocket').getLinkedObject(True).ViewObject,'DisplayMode',App.ActiveDocument.getObject('Boolean').ViewObject.DisplayMode)
Gui.ActiveDocument.setEdit(App.ActiveDocument.getObject(base_body),0,'Boolean.')
Gui.Selection.clearSelection()
App.ActiveDocument.getObject('Boolean').setObjects( [App.ActiveDocument.getObject(sub_body1),App.ActiveDocument.getObject(sub_body2),])
App.ActiveDocument.getObject('Boolean').Type = 1
App.ActiveDocument.recompute()
Gui.activeDocument().resetEdit()
base_body
sub_body1
sub_body2
I want to cut sub_body1 and sub_body2 out of base_body.
So the above code works, but only once. I need to be able to run it multiple times, so all the object references will need to be abstracted to variables, eg the Boolean object that it creates), and also this part:
Code: Select all
... App.ActiveDocument.getObject('Boolean').ViewObject.ShapeColor=getattr(App.ActiveDocument.getObject(partdesign_body_basename + '__Pocket').getLinkedObject(True).ViewObject,'ShapeColor',App.ActiveDocument.getObject('Boolean').ViewObject.ShapeColor)
...
I tried replacing "partdesign_body_basename + '__Pocket'" with "App.ActiveDocument.getObject(base_body).Tip.Name" but that doesn't seem to work - it returns "a type of <class 'NoneType'>", although it had worked in the console when I was trying to figure out what to use.
My question is, is there a more concise way of doing this?
Code: Select all
OS: openSUSE Leap 15.2 (KDE//usr/share/xsessions/plasma5)
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.19.22670 (Git) AppImage
Build type: Release
Branch: master
Hash: 12155f4aab09047c5697db0c1b3cf93b02edda03
Python version: 3.8.6
Qt version: 5.12.9
Coin version: 4.0.0
OCC version: 7.4.0
Locale: English/United Kingdom (en_GB)