Fusionの11月のUpdateで、カスタムグラフィックがかなり軽くなったとの記載です。

と言っても古いバージョンに切り替える事も出来ないので比較が出来ません。
そこで以前作った際に動作が重くて使い物にならなかったものでテストしてみようと
思ったのですが、生憎コードを紛失(いつもの事です・・)したので、
”確かこんな処理をしていたような気がする”
と言った感じで再作成してみました。
スクリプト実行後ダイアログが表示されるので、選択すると面毎にバラバラにして
ふっとばします!
# Author- # Description- # Fusion360API Python script import traceback # import adsk.cam # import fusion # import core import adsk import adsk.core as core import adsk.fusion as fusion import time _app: core.Application = None _ui: core.UserInterface = None _des: fusion.Design = None _handlers = [] _selIpt: core.SelectionCommandInput = None CMD_INFO = { 'id': 'kantoku_test', 'name': 'test', 'tooltip': 'test' } class MyCommandCreatedHandler(core.CommandCreatedEventHandler): def __init__(self): super().__init__() def notify(self, args: core.CommandCreatedEventArgs): core.Application.get().log(args.firingEvent.name) try: global _handlers cmd: core.Command = core.Command.cast(args.command) cmd.isOKButtonVisible =False inputs: core.CommandInputs = cmd.commandInputs onDestroy = MyCommandDestroyHandler() cmd.destroy.add(onDestroy) _handlers.append(onDestroy) onExecute = MyExecuteHandler() cmd.execute.add(onExecute) _handlers.append(onExecute) onExecutePreview = MyExecutePreviewHandler() cmd.executePreview.add(onExecutePreview) _handlers.append(onExecutePreview) global _selIpt _selIpt = inputs.addSelectionInput( "_selIptId", "Body", "Select Body" ) _selIpt.addSelectionFilter( core.SelectionCommandInput.Bodies ) except: _ui.messageBox('Failed:\n{}'.format(traceback.format_exc())) class MyExecutePreviewHandler(core.CommandEventHandler): def __init__(self): super().__init__() def notify(self, args: core.CommandEventArgs): None global _selIpt if _selIpt.selectionCount < 1: return body: fusion.BRepBody = _selIpt.selection(0).entity body.isLightBulbOn = False _selIpt.clearSelection() cog: core.Point3D = body.getPhysicalProperties().centerOfMass tmpMgr: fusion.TemporaryBRepManager = fusion.TemporaryBRepManager.get() facesContaner: list = [] face: fusion.BRepFace = None for face in body.faces: p: core.Point3D = face.centroid vec: core.Vector3D = cog.vectorTo(p) vec.normalize facesContaner.append( { "face": tmpMgr.copy(face), "vec": vec, } ) global _des root: fusion.Component = _des.rootComponent count = 15 for idx in range(1,count): cgGroup: fusion.CustomGraphicsGroup = root.customGraphicsGroups.add() for faceDict in facesContaner: # clone: fusion.BRepBody = tmpMgr.copy(faceDict["face"]) clone: fusion.BRepBody = faceDict["face"] v: core.Vector3D = faceDict["vec"].copy() v.scaleBy(idx*0.2) mat: core.Matrix3D = core.Matrix3D.create() mat.translation = v tmpMgr.transform(clone, mat) cgBody: fusion.CustomGraphicsBRepBody = cgGroup.addBRepBody(clone) # cgFaces.append(cgGroup.addBRepBody(clone)) adsk.doEvents() _app.activeViewport.refresh() time.sleep(0.05) if idx != (count-1): cgGroup.deleteMe() class MyExecuteHandler(core.CommandEventHandler): def __init__(self): super().__init__() def notify(self, args: core.CommandEventArgs): core.Application.get().log(args.firingEvent.name) class MyCommandDestroyHandler(core.CommandEventHandler): def __init__(self): super().__init__() def notify(self, args: core.CommandEventArgs): core.Application.get().log(args.firingEvent.name) adsk.terminate() def run(context): try: global _app, _ui, _des _app = core.Application.get() _ui = _app.userInterface _des = _app.activeProduct cmdDef: core.CommandDefinition = _ui.commandDefinitions.itemById( CMD_INFO['id'] ) if not cmdDef: cmdDef = _ui.commandDefinitions.addButtonDefinition( CMD_INFO['id'], CMD_INFO['name'], CMD_INFO['tooltip'] ) global _handlers onCommandCreated = MyCommandCreatedHandler() cmdDef.commandCreated.add(onCommandCreated) _handlers.append(onCommandCreated) cmdDef.execute() adsk.autoTerminate(False) except: if _ui: _ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
動画を撮ったのですが、再生出来ず・・・・
こんな感じのデータです。

ボディを選択すると

と言った具合に、コマ送りで面をバラバラにしちゃいます。
(キャンセルボタンを押すと元に戻ります)
絶対に役に立たないからね。