APIのSelectionsとほぼ同等と思われるものがテキストコマンドのSelectionsと
思うのですがちょっと機能が違います。
具体的に何が違うとは表現しにくいのですが、APIの場合はオブジェクトそのものに
対しての操作なのに対して、テキストコマンドはエンティティIDでの操作の様です。
エンティティIDの取得自体がよくわからなかったのですが、選択状態からIDの取得が
出来るようです。こんな感じで
Selections.List
そこでとりあえずIDだけ列挙するために、こんな(役に立たないもの)を作りました。
#Fusion360API Python script import adsk.core, adsk.fusion, traceback _app = adsk.core.Application.cast(None) _ui = adsk.core.UserInterface.cast(None) _root = adsk.fusion.Component.cast(None) def run(context): try: global _app, _ui, _root _app = adsk.core.Application.get() _ui = _app.userInterface des :adsk.fusion.Design = _app.activeProduct _root = des.rootComponent msg :str = 'Select' selFiltter :str = 'Bodies' sel :adsk.core.Selection = selectEnt(msg ,selFiltter) if not sel: return bdy :adsk.fusion.BRepBody = sel.entity print('--Body--') dumpEntityId([bdy]) print('--faces--') dumpEntityId(bdy.faces) print('--edges--') dumpEntityId(bdy.edges) print('--vertices--') dumpEntityId(bdy.vertices) # _ui.messageBox('Done') except: if _ui: _ui.messageBox('Failed:\n{}'.format(traceback.format_exc())) def dumpEntityId(lst): cmd = u'Selections.List' actSels = _ui.activeSelections actSels.clear() [actSels.add(i) for i in lst] print(_app.executeTextCommand(cmd)) actSels.clear()
Body自体と全てのface,edge,vertexを垂れ流します。
長ったらしいので単純な形状で試した結果です。
--Body-- 57:3:7:260 --faces-- 57:3:7:260 57:3:7:260+0+64 57:3:7:260+1+64 57:3:7:260+2+64 57:3:7:260+3+64 57:3:7:260+4+64 57:3:7:260+5+64 --edges-- 57:3:7:260 57:3:7:260+6+128 57:3:7:260+8+128 57:3:7:260+13+128 57:3:7:260+9+128 57:3:7:260+7+128 57:3:7:260+11+128 57:3:7:260+17+128 57:3:7:260+12+128 57:3:7:260+10+128 57:3:7:260+14+128 57:3:7:260+16+128 57:3:7:260+15+128 --vertices-- 57:3:7:260 57:3:7:260+6+256 57:3:7:260+15+256 57:3:7:260+16+256 57:3:7:260+10+256 57:3:7:260+7+256 57:3:7:260+11+256 57:3:7:260+17+256 57:3:7:260+12+256
やっている本人が分かってないぐらいなので、他の方は謎しか残らないかと。
幾つか試した上での予測です。
ボディ以外はこんな形で出力されています。
[A:B:C:D+E+F]
恐らく
[A:B:C] が [57:3:7] で出力されるものはBRepBodyなのだろうと思います。
厳密にはABCのどれかだろうと思われます。
[D] に関しては、ボディの個別の番号だと思われます。
Helpを見ると
Fusion 360 Help
face,edge,vertex に関しては tempId プロパティを持っているのですが
ボディにはありません。これが無いと特定のボディを探す際困るのですが、
[D] が実質のtempidのようなに利用出来そうです。(=ハッシュ)
[E]に関しても face,edge,vertex それぞれの個別の番号っぽいです。
偶然なのかface,edge関しては番号の重複がありません。
[F]に関しては、
64 -> face
128 -> edge
256 -> vertex
を表現しているように感じますが、1回だけvertexで512が出たことがあったため
確信が持てません。
数値的にメモリっぽさを感じます。
face,edge,vertex の tempid は [D+E+F] だろうか?
以外に数値が大きい印象はあったけど、そこまで大きくなかったような…。
ん~何がやりたいんだろう? 自分でもわからない。