C#ATIA

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

テキストコマンド2

こちらの続きです。
テキストコマンド1 - C#ATIA
殆ど進展が無く、気が重いのですが続きです。

前回はサラサラッと書きましたが、細かな話を記載しておきます。

1)コマンドID
ダイアログを表示させるためのコマンドIDはテキストコマンドで簡単に
入手出来ます。 任意のコマンドのダイアログを表示させた状態で
次のコマンドを実行します。

UI.CurrentCommandInfo

大量に文字が表示されますが、先頭付近に記載されています。
f:id:kandennti:20200602191416p:plain

2)OKボタン
途中を飛ばして、OKボタンを押す方法ですが、特に記載することなく
前回書いた通りです。(見つけるのは困難でした)

3)InputsのID
問題の一つはここです。Inputsとはコマンドのダイアログ上に配置
されている入力したり選択したりする部分の事です。
f:id:kandennti:20200602191428p:plain
前回のコードでは利用しなかった "チェーン選択" のIDは、
"SWEEP_CHAINING_OPTION" です。このIDの取得方法です。

これも、最初に示した "UI.CurrentCommandInfo" で出力されています。
テキストコマンドの画面上では見辛い状態ですが、JSONフォーマットなので
スクリプトでこんな感じにすると見やすいです。
但し、実行後GUIを操作すると高確率でFusion360がクラッシュするので
ご注意ください。

#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

        txtCmd = 'UI.CurrentCommandInfo'
        info = _app.executeTextCommand(txtCmd)

        import json
        data = json.loads(info)
        txts = json.dumps(data, indent=2).split('\n')
        for t in txts:
            print(t.encode().decode("unicode_escape"))

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

Fusion360のバージョンよってエンコードが変わっているような・・・。
文字化けする際はこの辺りを参考に修正すると良いかと思います。
https://qiita.com/inoory/items/aafe79384dbfcc0802cf

"パイプ" コマンドの場合、こんな感じです。

{
  "button": {
    "commandId": "PrimitivePipe",
    "toolbarId": "FusionAssetType",
    "panelId": "SolidCreatePanel",
    "beforeCommandId": "SeparatorAfter_PrimitivePipe",
    "asMenu": true
  },
  "commandInfo": {
    "id": "PrimitivePipe",
    "name": "パイプ",
    "resource": "C:/Users/<USERNAME>/AppData/Local/Autodesk/webdeploy/production/1f559bb8ae333199306b5c4f1fe680c6eb7ab9e0/Fusion/UI/FusionUI/Resources/solid/primitive_pipe",
    "groups": "[FusionSolidCommands]"
  },
  "tooltip": {
    "commandId": "PrimitivePipe",
    "description": "Text: , Description: 選択したパスに沿ってソリッド パイプを作成します。<br><br>パスを選択し、断面とサイズを指定します。<br>, Toolclip: C:/Users/<USERNAME>/AppData/Local/Autodesk/webdeploy/production/1f559bb8ae333199306b5c4f1fe680c6eb7ab9e0/Fusion/UI/FusionUI/Resources/ToolClip/pipe.png"
  },
  "tipsAndTricks": {
    "title": "[パイプ]に関する情報",
    "description": "",
    "moreInfo": "MODEL-PIPE-CMD"
  },
  "inputs": [
    {
      "id": "infoSweepTypeOption",
      "name": "タイプ",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::DropDownValueCommandInput"
    },
    {
      "id": "Profile",
      "name": "プロファイル",
      "tooltip": "",
      "prompt": "スイープするスケッチ プロファイルまたは平面を選択",
      "type": "Nu::Components::ChainSelectionCommandInput"
    },
    {
      "id": "Path",
      "name": "パス",
      "tooltip": "",
      "prompt": "スケッチ曲線またはエッジを選択",
      "type": "Nu::Components::ChainSelectionCommandInput"
    },
    {
      "id": "GuideSurface",
      "name": "ガイド サーフェス",
      "tooltip": "",
      "prompt": "面または作業平面を選択",
      "type": "Nu::Components::ChainSelectionCommandInput"
    },
    {
      "id": "SWEEP_CHAINING_OPTION",
      "name": "チェーン選択",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::BoolValueCommandInput"
    },
    {
      "id": "SWEEP_FULL_PATH",
      "name": "絶対パス",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::BoolValueCommandInput"
    },
    {
      "id": "SWEEP_FLIP_DIRECTION_OPTION",
      "name": "方向を反転",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::BoolValueCommandInput"
    },
    {
      "id": "infoSweepExtentOption",
      "name": "範囲",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::DropDownValueCommandInput"
    },
    {
      "id": "SWEEP_POP_ALONG",
      "name": "距離",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::Components::PointOnPathCommandInput"
    },
    {
      "id": "SWEEP_POP_AGAINST",
      "name": "距離",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::Components::PointOnPathCommandInput"
    },
    {
      "id": "SWEEP_POP_RAIL_DIST_ALONG",
      "name": "ガイド レールの距離",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::Components::PointOnPathCommandInput"
    },
    {
      "id": "SWEEP_POP_RAIL_DIST_AGAINST",
      "name": "ガイド レールの距離",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::Components::PointOnPathCommandInput"
    },
    {
      "id": "SweepTaperAngle",
      "name": "テーパ角度",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::AngleValueCommandInput"
    },
    {
      "id": "SweepTwistAngle",
      "name": "ねじり角度",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::AngleValueCommandInput"
    },
    {
      "id": "infoSweepOrientation",
      "name": "方向",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::DropDownValueCommandInput"
    },
    {
      "id": "infoSweepProfileScalingOption",
      "name": "プロファイル尺度",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::DropDownValueCommandInput"
    },
    {
      "id": "SWEEP_SOFTEN_SHAPE_OPTION",
      "name": "形状をぼかす",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::BoolValueCommandInput"
    },
    {
      "id": "INPUT_SELREORDER",
      "name": "プロファイルを選択",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::SelectionReorderCommandInput"
    },
    {
      "id": "INPUT_RAIL_SEL",
      "name": "パスを選択",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::SelectionReorderCommandInput"
    },
    {
      "id": "INPUT_CENTERLINE_SEL",
      "name": "ガイドを選択",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::SelectionReorderCommandInput"
    },
    {
      "id": "INPUT_GUIDE_SURFACE_SEL",
      "name": "ガイド サーフェスのタイプを選択",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::SelectionReorderCommandInput"
    },
    {
      "id": "infoSectionType",
      "name": "断面",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::DropDownValueCommandInput"
    },
    {
      "id": "SectionRadius",
      "name": "断面サイズ",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::RealValueCommandInput"
    },
    {
      "id": "SectionThickness",
      "name": "断面の厚さ",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::RealValueCommandInput"
    },
    {
      "id": "PIPE_HOLLOW_OPTION",
      "name": "空洞",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::BoolValueCommandInput"
    },
    {
      "id": "infoBooleanType",
      "name": "操作",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::DropDownValueCommandInput"
    },
    {
      "id": "infoCutTableGroup",
      "name": "切り取るオブジェクト",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::CommandInputGroup"
    },
    {
      "id": "infoCutParticipantTable",
      "name": "切り取りに関与するコンポーネントのテーブル",
      "tooltip": "",
      "prompt": "",
      "type": "Nu::TableCommandInput"
    }
  ]
}

パスを選択したり、何かアクションを起こさないと表示されないものも
含めて、全て出力されていると思います。
"name" が画面上に出ている文字で "id" が該当するIDのはずです。

ん~無駄に長くなったぞ。