C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

要素の依存関係2

こちらの続きです。
要素の依存関係1 - C#ATIA

ドキュメントでチラッと確認した際、"あぁ、あのプロパティチェック
すれば親子関係は取得出来るな" と思っていたものが違ったので
チマチマやるしかないと分かりました。しんどい。

ある程度ボリュームのあるサンプルデータとして、こちらを
使う事にします。

何から何まで取得するには無理があるので、とりあえず
プロファイルを利用しているものだけを出力します。

# Fusion360API Python script

import traceback
import adsk.fusion
import adsk.core


def run(context):
    ui = adsk.core.UserInterface.cast(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

        tl: adsk.fusion.Timeline = des.timeline
        lst = [t for t in tl]
        ents = [t.entity for t in tl]

        for e in ents:
            print(e.name)
            lst = getProfileReferences(e)
            [print(f' -- {p.name}') for p in lst]

    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))

def getProfileReferences(self):

    def getParentEntity(prof):
        if hasattr(prof, 'parentSketch'):
            return prof.parentSketch
        elif hasattr(prof, 'body'):
            return prof.body
        else:
            return

    try:
        prof = self.profile
        if hasattr(prof, '__iter__'):
            profs = [getParentEntity(p) for p in self.profile]
            profsDict = {}
            [profsDict.setdefault(p.entityToken, p) for p in profs]
            return list(profsDict.values())
        else:
            return [getParentEntity(prof)]
    except:
        return []

取りあえず、タイムラインの要素名を先頭から出力しつつ、
プロファイルを持っているものは、プロファイルの要素名を
"--"付きで出力します。 恐らく他人にはよくわからない事を
やっている事は自負しています。
サンプルデータだとこんな出力。

スケッチ1
Extrude1
 -- スケッチ1
スケッチ2
Extrude2
 -- スケッチ1
Draft1
スケッチ3
Extrude3
 -- スケッチ3
Fillet1
Hole1
スケッチ4
スケッチ5
Sweep1
 -- スケッチ4
スケッチ6
Extrude4
Draft2
平面1
スケッチ7
Extrude5
 -- スケッチ7
スケッチ8
Extrude6
 -- スケッチ8
Extrude7
 -- スケッチ8
スケッチ9
Extrude8
 -- スケッチ9
Mirror1
スケッチ10
Fillet2
Fillet3
Chamfer1
Web1
Mirror2

まぁスタートしたばかりなので。