わかりにくいタイトルです。
要はこんなお話です。
左の様に円を2個描きます。その後、小さい円を利用して、
大きい円をトリムした際、トリム前の大きな円が
トリム後の円弧になっている事を知りたいんです。
GUIで作業している分には円(閉じている)と円弧(開いている)
がトリムによって変わったことは一目瞭然なのですが、
APIだと難しいです。(人間の目と脳は素晴らしい)
何故なら、円と円弧ではオブジェクトが異なるからです。
Fusion 360 Help
Fusion 360 Help
・・・メンドクサイ。
トリム自体をAPIで行うのであれば、見失う事は無いのですが、
GUIでトリムされたものをAPIで見つけ出すのが難しい。
とりあえずサンプルです。
# Fusion360API Python script import traceback import adsk.fusion import adsk.core def run(context): ui: adsk.core.UserInterface = None try: app: adsk.core.Application = adsk.core.Application.get() ui = app.userInterface des: adsk.fusion.Design = app.activeProduct root: adsk.fusion.Component = des.rootComponent skt: adsk.fusion.Sketch = root.sketches.add( root.xYConstructionPlane ) circles: adsk.fusion.SketchCircles = skt.sketchCurves.sketchCircles cir1: adsk.fusion.SketchCircle = circles.addByCenterRadius( adsk.core.Point3D.create(1,1,0), 2.0 ) cir2: adsk.fusion.SketchCircle = circles.addByCenterRadius( adsk.core.Point3D.create(2,2,0), 1.0 ) dumpInfo(cir1) tools: adsk.core.ObjectCollection = adsk.core.ObjectCollection.create() tools.add(cir2) res = cir1.trim( adsk.core.Point3D.create(3,3,0), ) dumpInfo(cir1) ark1 = res.item(0) dumpInfo(ark1) except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc())) def dumpInfo(sktEnt: adsk.fusion.SketchEntity) -> None: def isVisible(sktEnt: adsk.fusion.SketchEntity) -> bool: try: if not hasattr(sktEnt, 'isVisible'): return False return sktEnt.isVisible except: return False def getToken(sktEnt: adsk.fusion.SketchEntity) -> str: try: return sktEnt.entityToken except: return '' # ********* msg = '-------\n' msg += f'classType | {sktEnt.classType()}\n' msg += f'isVisible | {isVisible(sktEnt)}\n' msg += f'token | {getToken(sktEnt)}' adsk.core.Application.get().log(msg)
entityTokenは、それぞれ固有の要素を示すIDのようなもの(ハッシュ)
です。その為、実行する度に代わってしまいますがその一例の結果です。
------- classType | adsk::fusion::SketchCircle isVisible | True token | /v4BAAAARlJLZXkAH4sIAAAAAAAA/zNQsFAwAEJDBSMgBrOMLIAsQwUTkIiZwj4uq0Xvt7r6rXnWEJLRzsgNVGGkYGymYGmeZmhhYJSsa5ZqZqprYpFkpptolmiga2ppmJJmZmaRaGxgAlYLNIMBDYDtM1AAW2dqaASx1hyo1ADIBgDODUKvkgAAAA== ------- classType | adsk::fusion::SketchCircle isVisible | False token | ------- classType | adsk::fusion::SketchArc isVisible | True token | /v4BAAAARlJLZXkAH4sIAAAAAAAA/zNQsFAwAEJDBSMgBrOMLIAsQwUTkIiZwj4uq0Xvt7r6rXnWEJLRzsgNVGGkYGymYGmeZmhhYJSsa5ZqZqprYpFkpptolmiga2ppmJJmZmaRaGxgAlYLNIMBDYDtM1AAW2dqaASx1hyo1ACELQCa35eclAAAAA==
大きい円(cir1)はトリム後に見失っています。(isVisible | False)
大きい円(cri1)とトリム後の円弧(ark1)のentityTokenは似ているのですが、
ここから判断するのは無理・・・。
そもそもentityTokenの文字列に意味を求めても無駄だと、ドキュメントに
記載されていた記憶があります。
諦めようかとも思っていたのですが、書いているうちに属性は引き継いで
くれそうな予感がしてきました。
近いうちに試そう。(3度目のワクチンから回復したら・・・)