C#ATIA

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

パラメトリックとダイレクト

こちら想定していなかったです。
Solved: How to tell if a component is a parametric design, or not? - Autodesk Community
恐らくEkins氏も想定していなかったのではないかと思います。

通常、コンポーネントが存在していても、1個のドキュメントで作成されている
場合はパラメトリックかダイレクトのどちらかになります。

しかし、外部のドキュメントをコンポーネントとしている場合はどうなのか?
すら知りませんでした。
f:id:kandennti:20210520094922p:plain
試しに上記のデータを用意しました。
赤印はパラメトリックで作成し、緑印はダイレクトで作成しています。
要は混在させています。

GUIで操作する、インプレイス機能(個人ライセンス不可)でそれぞれの
ドキュメントの編集に入ると、パラメトリックパラメトリック
ダイレクトはダイレクトで操作する事になります。・・・知らなかった。


APIでも確認したいのですが、フォーラムのコードがちょっと独特なので、
この様に書き換えました。

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

def run(context):
    ui = adsk.core.UserInterface.cast(None)
    try:
        app :adsk.fusion.Application = adsk.core.Application.get()
        ui = app.userInterface
        des :adsk.fusion.Design = app.activeProduct

        for comp in des.allComponents:
            if comp.parentDesign.designType == adsk.fusion.DesignTypes.ParametricDesignType:
                desType = 'Parametric'
            else:
                desType = 'Direct'

            print(f'{comp.name}:{desType}')

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

結果はこちら

Parametric v3:Parametric
Direct v3:Direct
assy v2:Parametric

確かにそれぞれのコンポーネント毎に正しいタイプを返してきます。
(そして何故、Treeと逆の順番に出力されるのか?)

Designオブジェクトは、確かにドキュメント毎に持っているんですね。
・・・混在しているデータを使用されるとエラーになりそうなアドインを
いっぱい作っている気がするw