こちらの続きです。
要素の依存関係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
まぁスタートしたばかりなので。