C#ATIA

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

表示されているボディのみを取得

表示されているボディのみを取得する場合、ボディのisLightBulbOnプロパティを
調べるだけじゃダメで、Bodiesが表示されているか?コンポーネント
表示されているか? チマチマ調べながらやっていたのですが、ちょっと前に
手っ取り早そうなメソッド見つけました。
Fusion 360 Help

類似したfindBRepUsingRayメソッドもあるのですが、イマイチわからないので
試していないし、パラメータが少ないのでfindBRepUsingPointにしてみます。

こんな感じです。

#Fusion360API Python script
import adsk.core, adsk.fusion, traceback

_app = adsk.core.Application.cast(None)
_ui = adsk.core.UserInterface.cast(None)

def run(context):
    try:
        global _app, _ui
        _app = adsk.core.Application.get()
        _ui = _app.userInterface
        des :adsk.fusion.Design = _app.activeProduct
        root :adsk.fusion.Component = des.rootComponent

        
        showBodies = root.findBRepUsingPoint(
            _app.activeViewport.camera.target,
            adsk.fusion.BRepEntityTypes.BRepBodyEntityType,
            100000,
            True)
        
        for body in showBodies:
            print('{} - {}'.format(body.name, body.parentComponent.name))

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

3番目のパラメータがイマイチ分かっていないのですが、でっかい数値にしときゃ
みんな引っかかるだろう作戦です。