こちらの続きです。
カスタムグラフィックスを削除する2 - C#ATIA
前回はすっかり忘れていて同じようなものを作ってしまいました。
今まで気が付かなかったのですが、カスタムグラフィックスはデザイン(CAD)だけ
では無く、製造(CAM)側にもありました。
前回までの物はデザイン側のみしか削除しなかったので、今回は本気で全部
削除するようにしました。
#Fusion360API Python script #Author-kantoku #Description-カスタムグラフィックス全てを削除する import adsk.core, adsk.fusion, adsk.cam, traceback _app = adsk.core.Application.cast(None) _ui = adsk.core.UserInterface.cast(None) def run(context): try: global _app, _ui _app = adsk.core.Application.get() _ui = _app.userInterface # get customGraphicsGroup cgGrpLst = getAllCgGroup() if len(cgGrpLst) < 1: msg = '現在のファイルにはカスタムグラフィックがありませんでした' _ui.messageBox(msg) return # Query msg = '現在のファイルには消去されていないカスタムグラフィックが存在します。\n' msg += '全て消去しますか?' if not userQuery(_ui, msg): return # remove customGraphicsGroup [cgGrp.deleteMe() for cgGrp in cgGrpLst] # finish _app.activeViewport.refresh() except: if _ui: _ui.messageBox('Failed:\n{}'.format(traceback.format_exc())) def getAllCgGroup() -> list: global _app prods = _app.activeDocument.products cgGrpLst = [] # Design des :adsk.fusion.Design = prods.itemByProductType('DesignProductType') cgGrps = [cmp.customGraphicsGroups for cmp in des.allComponents] cgGrpLst.extend([c for c in cgGrps if c.count > 0]) # Cam cam :adsk.cam.CAM = prods.itemByProductType('CAMProductType') if not cam: return cgGrpLst cgGrpLst.extend([c for c in cam.customGraphicsGroups if c.count > 0]) return cgGrpLst def userQuery( ui :adsk.core.UserInterface, msg :str) -> bool: btnTypes = adsk.core.MessageBoxButtonTypes icnTypes = adsk.core.MessageBoxIconTypes dlgRes = adsk.core.DialogResults res = ui.messageBox(msg, '', btnTypes.OKCancelButtonType, icnTypes.QuestionIconType) if res == dlgRes.DialogOK: return True return False