こちらの続きです。
テキストコマンド1 - C#ATIA
殆ど進展が無く、気が重いのですが続きです。
前回はサラサラッと書きましたが、細かな話を記載しておきます。
1)コマンドID
ダイアログを表示させるためのコマンドIDはテキストコマンドで簡単に
入手出来ます。 任意のコマンドのダイアログを表示させた状態で
次のコマンドを実行します。
UI.CurrentCommandInfo
大量に文字が表示されますが、先頭付近に記載されています。
2)OKボタン
途中を飛ばして、OKボタンを押す方法ですが、特に記載することなく
前回書いた通りです。(見つけるのは困難でした)
3)InputsのID
問題の一つはここです。Inputsとはコマンドのダイアログ上に配置
されている入力したり選択したりする部分の事です。
前回のコードでは利用しなかった "チェーン選択" のIDは、
"SWEEP_CHAINING_OPTION" です。このIDの取得方法です。
これも、最初に示した "UI.CurrentCommandInfo" で出力されています。
テキストコマンドの画面上では見辛い状態ですが、JSONフォーマットなので
スクリプトでこんな感じにすると見やすいです。
但し、実行後GUIを操作すると高確率でFusion360がクラッシュするので
ご注意ください。
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のはずです。
ん~無駄に長くなったぞ。