C#ATIA

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

Selections.List

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を垂れ流します。

長ったらしいので単純な形状で試した結果です。
f:id:kandennti:20200520185218p:plain

--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] だろうか?
以外に数値が大きい印象はあったけど、そこまで大きくなかったような…。

ん~何がやりたいんだろう? 自分でもわからない。