Sponsored links

【AutoLISP 条件式】progn で if をもっと便利に & リボンとメニューバー表示切替えコマンド

Sponsored links
基礎編
Sponsored links

リボンとメニューバー両方を表示/非表示に切り替えるコマンドを作りながら、AutoLISP関数 progn を使って、if で複数の処理をする方法を説明します。

Sponsored links

基礎知識

関数 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