Sponsored links

【AutoLISP 条件式】関数 cond 複数の分岐

Sponsored links
AutoLISP
Sponsored links

関数 if ではもし〇〇なら、それ以外なら、と2つしか選択肢ができません。
関数 cond を使うと、〇〇の場合、××の場合、△△の場合…、と、複数の条件式を設定できます。

Sponsored links

関数 cond

cond は、多分岐条件関数と呼ばれる関数で、条件に合わせていくつもの選択肢を設定することができます。

関数を入れる( ) は、基本的には1つの関数につき1ペアですが、cond は、条件ごとに、さらに( ) が必要なので、注意してください。

(cond
((ここがTなら1) (これをする1))
((ここがTなら2) (これをする2))
((ここがTなら3) (これをする3))
((ここがTなら4) (これをする4))
( T (どの条件にも合わなければこれをする))
)

こんなイメージです。

もし、いくつもの条件が合う時は、先に条件が合った方が適用されます。
一番最後の条件にTを入れると、上から順番に条件をみて、すべて外れてきた要素が最後にきたとき、条件関係無くT なので、適用されるという仕組みです。

ifと違って、
((ここがTなら1) (これをする1) (これをする1) (これをする1))
のように、複数の処理を設定できます。

使用例) 外部参照の明るさ切替え

コマンドの内容

外部参照ファイルの表示の明るさは、システム変数 XDWGFADECTL でコントロールされています。0だと明るく表示され、90だと暗くなります。

関数 cond を使って、XDWGFADECTL の値が、

  • 30未満なら 30
  • 30以上60未満なら 60
  • 60以上90未満なら 90
  • それ以外なら 0

にするコマンドです。
実行する度に明るさが変わっていきます。一度コマンドを実行したら、エンターかスペースキーでコマンドが繰り返されるので、繰り返してみると、明るさが変わっていくのがわかると思います。

コマンド名は test です。

AutoLISP プログラム

(defun c:test ( / a )

    (setq a (getvar "XDWGFADECTL"))
    
     (cond 
         ((< a 30) (setvar "XDWGFADECTL" 30))
         ((and (<= a 30)(< a 60)) (setvar "XDWGFADECTL" 60))
         ((and (<= a 60)(< a 90)) (setvar "XDWGFADECTL" 90))	
         ( T (setvar "XDWGFADECTL" 0))
    );cond

(princ))

AutoLISP の説明

(setq a (getvar “XDWGFADECTL”))

getvar で、システム変数 XDWGFADECTLの値を取得して、変数 a に入れています。

(cond
((< a 30) (setvar “XDWGFADECTL” 30))
((and (<= a 30)(< a 60)) (setvar “XDWGFADECTL” 60))
((and (<= a 60)(< a 90)) (setvar “XDWGFADECTL” 90))
(T (setvar “XDWGFADECTL” 0))
);cond

cond を使って、XDWGFADECTL を条件に合わせて変えていきます。

30未満なら 30の場合、

((< a 30) (setvar “XDWGFADECTL” 30))

条件式は (< a 30) です。< は2つの値で右側の方が大きければTを戻す関数です。AutoLISPでは関数は( の次に来るので注意してください。

30未満だとTが戻り、そのすぐ横の(setvar “XDWGFADECTL” 30)が実行されます。
システム変数を変更する関数setvarでシステム変数XDWGFADECTLの値を30に変更です。

((and (<= a 30)(< a 60)) (setvar “XDWGFADECTL” 60)

30以上、かつ60未満、2つの条件を、関数andでまとめています。
and は引数の条件がすべてTならTが戻り値になります。

(T (setvar “XDWGFADECTL” 0))

30未満、30から60、60から90、どれにも当てはまらない場合は XDWGFADECTL 0にします。
0になった後は、最初の30未満の条件に当てはまるので、コマンドを実行する度に数値が順番に変わっていきます。

まとめ

  • cond は、複数の条件式を設定できる。
  • 関数だけでなく、条件の数だけ( ) がある。
  • 上から順番に条件が合ったら、その処理が実行される。
  • 最後にTを入れておくと、どの条件からも外れたときに実行する処理を設定できる。

関連記事

if条件式について

条件が合う=T の意味がよくわからない。という場合はコチラを。

cond を使ったサンプル記事です。