ifの実務例|画層があるときだけ処理する
要点
tblsearchで画層の存在を調べ、ifで処理を切り替えます。片方の条件でだけ実行したい処理も、AutoLISPのifで表せます。
始める前に
先に確認すると読み進めやすい記事:
確認の手順
- 確認したい画層名を練習図面で決めます。
- tblsearchで画層が見つかる場合と見つからない場合を確認します。
- ifでメッセージを切り替える掲載例を実行します。
- 画層を作成して再実行し、表示が変わることを確認します。
条件分岐とは?
条件分岐とは、「ある条件が真ならAを実行、偽ならBを実行」といった判断をプログラムにさせる仕組みです。AutoLISPでは主に以下の構文が使われます:
ifcond
if の基本構文
(if 条件式
真の場合の処理
偽の場合の処理)
例:数値が正かどうかを判定
(setq num 5)
(if (> num 0)
(princ "正の数です")
(princ "0以下の数です"))
cond で複数条件を分岐
condは複数の条件を順番に評価し、最初に真となった条件の処理を実行します。
(cond
((< num 0) (princ "負の数です"))
((= num 0) (princ "ゼロです"))
((> num 0) (princ "正の数です")))
これは if よりも複雑な条件分岐に向いています。
条件が成立したときだけ実行する
実行する側だけを書いたifで表せます。成立しない場合はnilを返します。複数の式をまとめて実行する場合はprognを使います。
(if (> num 0)
(princ "正の数です"))
(if (/= num 0)
(princ "ゼロではありません"))実用例:レイヤーが存在するかチェック
(defun c:CheckLayer (/ layerName)
(setq layerName "MyLayer")
(if (tblsearch "layer" layerName)
(princ (strcat layerName " は存在します"))
(princ (strcat layerName " は存在しません")))
(princ))
このコードは、指定したレイヤーが図面に存在するかどうかを判定します。
まとめ
AutoLISPの条件分岐を使えば、図面の状態に応じた処理を柔軟に記述できます。ifやcondを使いこなすことで、より賢いスクリプトが書けるようになります。
結果の確認
標準AutoLISPでは、ここに掲載するifとcondを使います。when・unlessを別途定義せずに標準関数として呼び出す例は使用しません。
参照資料
対象環境・動作確認
AutoLISP対応環境(関数・OSごとの対応は要確認)。内容更新:2026年10月5日。掲載コードのCAD実機検証は未実施です。図形を変更する例は、コピーした図面で結果を確認してください。