AutoLISP
Autodesk AutoCADが使っているマクロ
LISPをベースとしている
ヘルプ
AutoCAD 2020の場合は、<F1>→lispでキーワード検索→概要 - AutoLISPアプリケーションから閲覧できる
webからだとここから閲覧できる
はじめに(AutoLISP)のほうが詳しいかも
構文の解説
関数の呼び出し
funcにval1とval2を入れて呼び出す
code:lisp
(func val1 val2)
(func val1 val2)の結果をfunc2に渡す
code:lisp
(func2 (func val1 val2))
変数の代入
(setq )関数を使う
変数x宣言し、"aaa"を代入する
code:lisp
(setq x "aaa")
変数xとyを同時に定義する
code:lisp
(setq x "aaa" y 56)
最後に宣言した変数の値をfuncに代入する
code:lisp
(func 23 (setq x "aaa" y 56))
演算子
すべてポーランド記法で記述する
code:lisp
(* 34 (+ 56 45))
演算子も関数の一種ということ
コメント
一行コメント:;を先頭につける
code:lisp
; this is a comment
(* 34 (+ 56 45)) ; this is also a comment
複数行コメント:;|と|;で囲む
余分な空白と改行はすべて無視されるhttps://help.autodesk.com/view/ACD/2020/JPN/?guid=GUID-2BB34AE2-0AA1-4523-913E-1438A9B7BF35
関数定義
(defun )関数を使って定義するhttps://help.autodesk.com/view/ACD/2020/JPN/?guid=GUID-9EDF48C2-1678-4DC3-BFD6-9D1DEAC525F0
code:lisp
(defun func (aaa bbb)
(strcat aaa "+" bbb)
)
(func "a" "b")
ローカル変数は引数部分で/で区切って先に宣言する
code:lisp
(defun func (aaa bbb / ccc)
(setq ccc "test")
(strcat ccc "+" aaa "+" bbb)
)
(func "a" "b")
!ccc
global変数のほうのcccはnilになる
区別しやすいよう、global変数名は*text*のようにアスタリスクで囲っておくとよい
制御構文と比較関数https://help.autodesk.com/view/ACD/2020/JPN/?guid=GUID-C6A7FC58-7A07-4650-9D59-12CAFD194FDA
すべて関数として定義されている
文字列操作https://help.autodesk.com/view/ACD/2020/JPN/?guid=GUID-417600C7-1F59-4C95-B4E8-A7996F9F994F
大文字小文字変換: (strcase )
文字列連結: (strcat )
文字列の長さ: (strlen )
検索: (vl-string-search )
置換: (vl-string-subst )
コンソール出力https://help.autodesk.com/view/ACD/2020/JPN/?guid=GUID-58AD9863-BB35-4982-9382-581FE8A5022C
(prompt )
(princ )
(prin1 )
(print )
(alert )
(terpri )
リストhttps://help.autodesk.com/view/ACD/2020/JPN/?guid=GUID-F0E08704-2854-4E05-9096-3A3ACEA007EB
リストの作成:(list )
要素の取得:(nth )
最初の要素を返す:(car )
最初の要素を削ったリストを返す:(cdr )
n個のリストを結合する:(append )
先頭に要素を追加する:(cons )
一致する要素をすべて置換する:(subst )
定義済み変数https://help.autodesk.com/view/ACD/2020/JPN/?guid=GUID-195BD573-AD4A-4A40-B385-74FB291E218C
PAUSE
PI
T
trueを示す
falseを示したいときはnilを使う
定義済み関数
AutoCADコマンドを実行する
(command )か(command-s )を使うhttps://help.autodesk.com/view/ACD/2020/JPN/?guid=GUID-75F19C76-78D0-443B-BC39-EB9FEB4650B1
code:lisp
(command "._circle" "0,0" "4,4")
ユーザーに値を指定させたい場合は、その部分にPAUSEを入れる
PAUSEを使わない場合は(command-s )を使える
こっちのほうが高速らしい
英語以外の言語で英語のコマンドを実行するときは、先頭に_をつけるhttps://help.autodesk.com/view/ACD/2020/JPN/?guid=GUID-D156B6ED-B1B4-42CB-BE1D-CA251BFC08C3
再定義されたコマンドを使わない場合は_.か._を先頭につける
noremapのような役割
#2021-12-04 11:41:31