Fusion360APIで深いコンポーネントのデータを扱ったことが
無かったため、理解するためにゴニョゴニョしてます。
例えばこんな感じの状態です。
青矢印のスケッチが影響を受けているのは
コンポーネント1:1
コンポーネント2:1
コンポーネント3:1
の3個です。これらのオカレンスを取得したいと思っているのですが、
サクッと行う方法が見つからないんです。
こちらのComponentオブジェクトのメソッド
「allOccurrencesByComponent」や「occurrencesByComponent」で
取得出来るのかな と思っていたのですが、出来ないんです。
Fusion 360 Help
allOccurrencesByComponentメソッドであれば、指定した
コンポーネントに直接関係するオカレンスは取得出来る感じです。
(occurrencesByComponentは謎のまま)
現在、目的を果せそうな唯一の方法はOccurrenceオブジェクトの
「fullPathName」で返ってくる文字列です。
Fusion 360 Help
「コンポーネント1:1」のオカレンスで試すとこんな感じです。
簡単な方法が有るのではないのかな? とは思いつつ見つからないので
fullPathNameメソッドを利用してこんな感じのものを作ってみました。
#fusion360API_python import adsk.core, adsk.fusion, traceback def run(context): ui = None try: app = adsk.core.Application.get() ui = app.userInterface des = adsk.fusion.Design.cast(app.activeProduct) tgtComp = des.allComponents.itemByName('コンポーネント1') occs = GetParentOccurrenceList(tgtComp) if occs is None: ui.messageBox('Nothing Occurrence') else: occs_name = [occ.name for occ in occs] ui.messageBox('\n'.join(occs_name)) except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc())) def GetParentOccurrenceList(comp): comp = adsk.fusion.Component.cast(comp) des = adsk.fusion.Design.cast(comp.parentDesign) root =des.rootComponent if root == comp: return None occs = root.allOccurrencesByComponent(comp) if len(occs) < 1: return None occ = occs[0] occ_names = occ.fullPathName.split('+') occs = [root.allOccurrences.itemByName(name) for name in occ_names] return occs
実行するとこんな感じです。
一応目的は果たしています・・・もっと簡単な方法あるような気がする。
質問しようかなぁ。