リボンとメニューバー両方を表示/非表示に切り替えるコマンドを作りながら、AutoLISP関数 progn を使って、if で複数の処理をする方法を説明します。
基礎知識
関数 progn
progn 関数を使用すると、1 つの式しか指定できない箇所で複数の式を評価できます。
Autodesk ヘルプ
関数 if を使うとき、Tだった場合、そうでなかった場合、一つづつしか処理を入れることができません。
(if (条件式)
(条件式の戻り値が T なら、こちらを実行)
(nil なら、こちらを実行)
)
複数の処理を実行したい!
そんな時に使うのが progn です
(if (条件式)
(progn
(条件式の戻り値が T なら、こちらを実行)
(2つ目もOK)
(3つ目もいくつでもprogn 閉じカッコまではTの時の処理)
)
(progn
(nil なら、こちらを実行)
(こちらもprogn使えばいくつでも)
)
)
関数 if progn 使用例
関数 if と progn を使ったコマンド例です。
リボンとメニューバー、両方を表示/非表示するコマンドを作ります。
メニューバーとは?
リボンの上にあるメニューが並んだ部分です。
メニューバーだけの表示切替コマンド
メニューバーの表示/非表示のシステム変数は、”MENUEBAR”です。
表示なら 1 非表示なら 0 が値です。
関数if を使って、この値ををsetvarで変更すれば、表示/非表示を変更するコマンドになります。
(defun c:MBar ()
(if (= (getvar "MENUEBAR") 1)
(setvar "MENUBAR" 0)
(setvar "MENUBAR" 1)
);if
(princ))
もし
“MENUEBAR” の値が1ならば0にする。
そうでなければ(0ならば)1にする。
となっています。
これに、prognを使ってリボン表示も足していきます。
AutoLISP プログラム
暫定コマンド名はBarです。お好みに合わせて変更してください。
(defun c:Bar ()
(if (= (getvar "RIBBONSTATE") 1)
(progn
(command-s "._RIBBONCLOSE")
(setvar "MENUBAR" 0)
);progn else
(progn
(command-s "._RIBBON")
(setvar "MENUBAR" 1)
);progn
);if
(princ))
AutoLISP の説明
条件式
getvar で、”RIBBONSTATE”の値を取得して、1(リボンが表示)なら 戻り値がT になる条件式です。。
(if (= (getvar "RIBBONSTATE") 1)
条件式の戻り値がTなら
Tの場合の処理です。progn で囲まれた部分はすべてTの時に処理される式になります。
コマンドRIBBONCLOSEでリボンを閉じ、AutoLISP関数 setvar を使って、システム変数 MENUBAR の値を非表示の0に変更します。
(progn
(command-s "._RIBBONCLOSE")
(setvar "MENUBAR" 0)
);progn else
条件式の戻り値がnilなら
nil の場合の処理です。ここでも progn を使っているので、複数の処理ができます。
コマンドRIBBONでリボンを表示し、AutoLISP関数 setvar を使って、システム変数 MENUBAR の値を表示の1に変更します。
(progn
(command-s "._RIBBON")
(setvar "MENUBAR" 1)
);progn
まとめ
- 関数 progn は1つの式しか指定できない所で、複数の式をまとめて一つの式する機能がある。
- 関数 if 複数の処理をしたいときは、progn を使う。
- システム変数”MENUEBAR”はメニューバーの表示/非表示をコントロールしている。
関連記事
もしこれならこれ、そうでなければこっち。の2択ではなく、Aならこれ、Bならこっち、Cならそれ、Dならあれ、のようにいくつも複数の分岐を付けたいときは関数condを使います。
条件式 if progn を使ったコマンドサンプルです。
リボンとメニューバー両方を非表示にしても、常に表示されている画面上クイックアクセスツールバーにコマンドアイコンを入れておけば、アイコンからコマンドを実行することができ便利です。
データを読み込むサンプルです。
データを読み込めなかった場合を想定してifで開いたら処理を実行するようにしています。
Comments