こちらの続きです。
全ての原点を表示/非表示する(失敗) - C#ATIA
リンク付きコンポーネントにも対応したいので、機能を探しまくり。
テキストコマンドで選択する方法がもう一つあったことを思い出し、
単体でテストしたところ上手く行きました。
onkのフォーマットを調べた事が無かったのですがこんな感じです。
ObjectPaths.Onk ONK::CmpInst=Assy%20v9/Cmp=Assy%20v9/CmpInsts/CmpInst=SubAssy_NonPosition%20v3%3A1/Cmp=SubAssy_NonPosition%20v3/CmpInsts/CmpInst=A%20v1%3A1/Cmp=A%20v1/OriginWorkGeometry
良く調べると、URLエンコード絡みだと分かり解読出来ました。
この様なテストコードで試すと、リンク付きコンポーネントも含め
全ての原点フォルダの表示/非表示について切り替えが可能に
なりました。
# Fusion360API Python script import traceback import adsk.fusion import adsk.core import urllib 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 # axis select ok dict = {} for occ in root.allOccurrences: comp: adsk.fusion.Component = occ.component dict[occ.name] = comp.name root_onk = f'ONK::CmpInst={urllib.parse.quote(root.name)}/Cmp={urllib.parse.quote(root.name)}' for o in root.allOccurrences: o: adsk.fusion.Occurrence fullpath = o.fullPathName app.log(fullpath) onks = [root_onk] paths = fullpath.split('+') for path in paths: onks.append(f'/CmpInsts/CmpInst={urllib.parse.quote(path)}/Cmp={urllib.parse.quote(dict[path])}') onks.append('/OriginWorkGeometry') onk = ''.join(onks) app.log(onk) app.executeTextCommand(u'Commands.Select {}'.format(onk)) app.executeTextCommand(u'Commands.Start VisibilityToggleCmd') except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
出来るのは良いのですが、あくまで表示/非表示を切り替えるだけで
現状が表示・非表示どちらかなのかを判断する方法が見つからず
悩んでます。
テキストコマンドの
VO.List
表示されている原点フォルダの情報っぽいものは出力される所
までは見付けたのですが・・・。先が長い。