気になるものは右上のSearchからサイト内検索してください。
Autodesk 公式の関数一覧はこちら
情報取得
ユーザー入力
entsel
「オブジェクトを選択」とメッセージを出して、ユーザーに図形を選択するように促し、図形選択後、リストになった図形名とクリックした場所の座標を戻す。
引数:ユーザー入力待機中に表示するメッセージ(文字列)省略可。
戻り値:ユーザーが選択した図形の図形名とクリック箇所の座標のリスト。
car とセットで、図形名を取得するのに使うことが多い。
例: 変数Objに図形名を入れる。
(setq Obj (car(entsel)))
nentsel
entsel の複合化オブジェクトから情報を得るバージョン
getstring
ユーザーに文字を選択するように促し、入力された文字を戻す。
引数:空白入力をOKにするT。ユーザー入力待機中に表示するメッセージ(文字列)どちらも省略可。
戻り値:ユーザーが入力した文字(文字列)
例:変数Txにユーザー入力の文字を入れる。(スペースキーで入力終了)
(setq Tx (entsel))
例:変数Txにユーザー入力の文字を入れる。(スペースキーで空白 エンターで入力終了)
(setq Tx (entsel T))
getreal
ユーザーに実数を選択するように促し、入力された文字を戻す。
引数:ユーザー入力待機中に表示するメッセージ(文字列)省略可。
戻り値:ユーザーが入力した実数(数値)
例:変数Numにユーザー入力の実数を入れる。
(setq Num (getreal))
getint
ユーザーに整数を選択するように促し、入力された文字を戻す。
引数:ユーザー入力待機中に表示するメッセージ(文字列)省略可。
戻り値:ユーザーが入力した整数(数値)
例:変数Numにユーザー入力の整数を入れる。
(setq Num (getint))
getpoint
ユーザーに点(画面クリック)を選択するように促し、クリックした場所の座標点リストを戻す。
引数:ユーザー入力待機中に表示するメッセージ(文字列)省略可。
戻り値:ユーザーが入力した場所のXYZ座標点(リスト)
例:変数Ptにユーザー入力の整数を入れる。
(setq Pt (getpoint))
選択セット
ssget
選択した図形の選択セットを作成
引数:選択方法(省略可)
戻り値:選択セット名
引数に入れることができる選択方法
A:すべて C:交差選択 CP:ポリゴン交差選択 F:フェンス選択 I:暗黙選択 P:直前の選択セット W:窓選択 WP:ポリゴン選択
省略の場合はユーザー選択
例:変数Objsに複数の図形をユーザー選択で入れる
(setq Objs (ssget))
sslength
選択セットに含まれる図形の数を取得。
引数:選択セット名
戻り値:選択セットに含まれる図形の数(数値)
例:変数Numに変数Objsに代入した選択セットに入っている図形の数を入れる。
(setq Num (sslength Objs))
ssname
選択セットから、引数の番号の図形名を取得。
引数:選択セット名 数値(1つ目の図形は0)
戻り値:図形名
例:変数Objに変数Objsに代入した選択セットの一番目の図形名を入れる。
(setq Obj (ssname Objs 0))
例:変数Objsに代入した選択セットのすべての図形を順番に1つづつ処理する。
(setq Cnt 0 ObjNum (sslength Objs))
(while (< Cnt ObjNum)
(setq Obj (ssname Objs Cnt)
(xxxxxxxxxxx)
(setq Cnt (1+ Cnt ))
);while
AutoCAD 設定
getvar
システム変数の値を取得。
引数:システム変数名(文字列)
戻り値:システム変数の値
例:変数 CuLayに現在画層名を入れる。(CLAYER は現在画層のシステム変数)
(setq CuLay (getvar “CLAYER”)
図形情報
entget
図形のデータを取得。
引数:図形名
戻り値:DXF図形情報
例:変数Entにユーザー入力した図形のDXF図形情報を入れる
(setq Ent (entget (car (entsel))))
entlast
最後に編集/作成した図形の図形名
引数:なし
戻り値:図形名
例:変数Objに最後に作成した図形の図形名を入れる。
(setq Obj (entlast))
図形情報 (Visual LISP)
vlax-get-acad-object
今使っているAutoCADの情報を得る
引数:なし
戻り値:AutoCADのVLAオブジェクト名
vla-get-ActiveDocument
今編集している図面ファイルのVLAオブジェクト名を得る
引数: AutoCADのVLAオブジェクト情報
戻り値: 図面ファイルのVLAオブジェクト名
例:今編集している 図面ファイルのVLAオブジェクト名を得る。
(vla-get-ActiveDocument (vlax-get-Acad-Object))
vla-get-プロパティ名
プロパティの VLAオブジェクト名
引数: VLAオブジェクト名
戻り値:引数で渡したVLAオブジェクトのプロパティの VLAオブジェクト名
例:今編集しているAutoCADファイルの画層情報の VLAオブジェクト名 を得る
(vla-get-layers
(vla-get-ActiveDocument
(vlax-get-Acad-Object)
)
)
vla-item
要素のVLAオブジェクト名
引数: VLAオブジェクト名
戻り値:引数で渡したVLAオブジェクトの要素の VLAオブジェクト名
例:今編集しているAutoCADファイルの画層情報の VLAオブジェクト名 を変数Layer_VLAに代入し、vla-itemで画層”0” のVLAオブジェクト名を得る
(setq Layer_VLA
(vla-get-layers
(vla-get-ActiveDocument
(vlax-get-Acad-Object)
)
)
)
(vla-item Layer_VLA "0")
vlax-ename->vla-object
AutoLISPオブジェクト名をVLAオブジェクト名に変換
引数: AutoLISP オブジェクト名
戻り値:引数で渡したオブジェクトの VLAオブジェクト名
例: (car(entsel) で得たオブジェクト名をVLAオブジェクト名に変換して変数VlObjに入れる
(setq VlObj (vlax-ename->vla-object (car(entsel))))
vlax-dump-object
VLAオブジェクト名からプロパティを一覧を得る
引数: VLAオブジェクト名
戻り値:引数で渡した VLAオブジェクトのプロパティ一覧
例: 画層”0” のVLAオブジェクト名を得てプロパティの一覧にする。
(setq Layer_VLA
(vla-get-layers
(vla-get-ActiveDocument
(vlax-get-Acad-Object)
)
)
)
(vlax-dump-object (vla-item Layer_VLA "0"))
例:今編集しているAutoCADファイルのプロパティの一覧を得る。
(vlax-dump-object
(vla-get-ActiveDocument
(vlax-get-Acad-Object)
)
)
例:選択した図形のVLAプロパティの一覧を得る。
(setq VlObj (vlax-ename->vla-object (car(entsel))))
(vlax-dump-object VlObj)
編集
変数
setq
変数を定義する。(複数可)
引数:シンボルと代入したい値
戻り値:代入した値(複数定義した場合は最後の値のみ)
例:Xに10 Yに”Apple”を代入する。
(setq X 10 Y "Apple")
set
関数 read (シングルクォーテーションで省略可)で 取得したシンボルを使って変数を定義する。
引数:シンボルと代入したい値
戻り値:代入した値
例:Xに10を代入する。
(set (read "X") 10)
read
文字列から取得した最初のリスト、アトムを得る
引数:文字列
戻り値:リスト、アトム
例:変数a に入れたシステム変数名にを変数名にして、そのシステム変数の値を代入する。
(システム変数名をそのまま変数にしていいものなのかわからないので、念のためJaga-を頭に着けました。)
(setq a "OSMODE")
(set (read (strcat "Jaga-" a)) (getvar a))
関数の省略
read は ’ で省略できます。
例:Xに10を代入する。
(set 'x 10)
setとreadは、mapcar と併せて、まとめて変数に値を代入したいときに便利です。
quote、read、list どれも省略でき、省略形の方が使いやすいと思います。
例: 変数a b c dに、1 2 3 4をそれぞれ代入する。
(mapcar (quote set)
(list (read "a") (read "b") (read "c") (read "d"))
(list 1 2 3 4)
)
関数の省略
例: 変数a b c dに、1 2 3 4をそれぞれ代入する。
(mapcar 'set '(a b c d) '(1 2 3 4))
quote もしくは function
関数を引用関数にして、引数に関数が必要なコマンドに渡す。
‘ で省略できる。
引数:引用関数として使う関数名
既に値が入っている変数
これらは関数ではなく、すでに値が入っている変数です。
pi
円周率
T
True (条件を満たしている)
nil
False (条件を満たしていない)
文字列
princ
文字を表示する。引数が省略されている場合は何も戻さない。
引数:文字列 (省略可)
戻り値:表示させたい文字列
例:文字列 “ABC” をコマンドラインに表示する
(princ "ABC")
改行を入れる場合は \n を入れる。
例:”JagaimoLISP”を2行で表示する
(princ "\nJagaimo\nLISP\n")
以下のように2行でコマンドラインに表示されます。
前後にも改行を入れたのは前後のメッセージと同じ行にならないようにです。
Jagaimo
LISP
strcat
複数の文字列をつなげる。
引数:文字列
戻り値:引数の文字列を1つにしたもの
例:2つの文字列 “Jagaimo” “LISP”を1つの文字列”JagaimoLISP”にする。
(strcat "Jagaimo" "LISP")
itoa
整数を文字列に変換する
引数:数値(整数)
戻り値:引数の数値を文字列にしたもの
例:数値の12を文字列の”12″にする
(itoa 12)
rtos
整数、実数を文字列に変換する
引数:数値、変換モード、精度
戻り値:引数の数値を文字列にしたもの
変換モード
- 指数表記
- 十進表記
- フィートと小数インチ
- フィートと分数インチ
- 分数表記
例:数値の12.25を文字列の”12.25″にする
(rtos 12.25 2 2)
例:数値の12.25を文字列の”12 1/4″にする
(rtos 12.25 5 2)
atoi
文字列を整数に変換する
引数:文字列
戻り値:引数の文字列を数値(整数)にしたもの。
例:文字列の”12.3″を整数の12にする。(小数点以下は切り捨て。)
(atoi "12.3")
atof
文字列を実数に変換する
引数:文字列
戻り値:引数の文字列を数値にしたもの
例:文字列の”12.3″を数値の12.3にする
(atof "12.3")
計算
AutoLISPでは関数が最初に来るので注意。(普通の算数とは式の書き方が違います。)
+
引数:数値
戻り値:引数の数値の和
例:10と5を足す
(+ 10 5)
–
引数:数値
戻り値:1つ目の引数と2つ目の引数の差
例:10から5を引く
(- 10 5)
*
引数:数値
戻り値:1つ目の引数と2つ目の引数の積
例:10と5を掛ける
(* 10 5)
/
引数:数値
戻り値:1つ目の引数と2つ目の引数の商
例:10を5で割る
(/ 10 5)
1+
数値に1を足す
引数:数値
戻り値:引数の値に1を足された数
1-
引数:数値
戻り値:引数の値から1引かれた数
sin
引数:ラジアン単位の角度(数値)
戻り値:引数の角度のsin値
cos
引数:ラジアン単位の角度(数値)
戻り値:引数の角度のcos値
tan
引数:ラジアン単位の角度(数値)
戻り値:引数の角度のtan値
polar
始点から、指定した角度と距離離れた点を求める。
引数:点(リスト) ラジアン単位の角度(数値) 距離(数値)
戻り値:点(リスト)
例:点 (0, 0) から、60°(1.0472ラジアン)方向に2移動した点を求める
(polar (list 0 0) 1.0472 2)
angle
始点から終点の線分の角度を求める(ラジアン単位)
引数:始点(リスト) 終点(リスト)
戻り値:角度(ラジアン単位)
例:点 (0, 0) と点(1, 1.73205)を結ぶ線分の角度(ラジアン単位)を求める。
(angle (list 0 0) (list 1.0 1.73205))
distance
2点の距離を求める。
引数:点1(リスト) 点2(リスト)
戻り値:距離(数値)
例:点 (0, 0) と点(1, 2)の距離を求める。
(distance (list 0 0) (list 1 2))
度数⇔ラジアン
度数⇔ラジアンの変換は、計算式を自作関数にして自動読み込みにしておくと便利です。
以下は自作関数の例です。
Deg2Rad 度数⇒ラジアン値 引数:度数 戻り値:ラジアン値
(defun Deg2Rad (d) (/ (* d pi) 180.0))
例:点 (0, 0) から、60°方向に2移動した点を求める。
(polar (list 0 0) (Deg2Rad 60) 2)
Rad2Deg ラジアン値⇒度数 引数:ラジアン値 戻り値:度数
(defun Rad2Deg (r) (* 180.0 (/ r pi)))
例:点 (0, 0) と点(1, 2)を結ぶ線分の角度(度数)を求める。
(Rad2Deg (angle (list 0 0) (list 1 2)))
リスト
list
リスト(値をひとまとめにして並べたもの)の作成
引数:数値、文字列
戻り値:引数のリスト
例: “Apple” “Book” 1 2 3 をリストにして一つの値にして、変数Lstに入れる。
(setq Lst (list “Apple” “Book” 1 2 3))
関数の省略
list は ‘ で省略できる関数です。
変数や数式をリストの要素に入れる場合は省略できません。
例: “Apple” “Book” 1 2 3 をリストにして一つの値にして、変数Lstに入れる。
(setq Lst '(“Apple” “Book” 1 2 3))
car
リストから1つ目の要素を取得する。
引数:リスト
戻り値:引数のリストの1つ目の要素
例: 変数Lstに入っている (“Apple” “Book” 1 2 3) から “Apple” を取得。
(car Lst)
cdr
リストから1つ目の要素を取り除いた残りのリストを取得する。
引数:リスト
戻り値:引数のリストから1つ目の要素を削除したリスト
例: 変数Lstに入っている (“Apple” “Book” 1 2 3) から “Apple” を取り除いて、(“Book” 1 2 3)にする。
(cdr Lst)
cadr
リストの2つ目の要素を取得する。
(car (cdr …)) 1つ目の要素を取り除いた後に1つ目の要素を取得と同じ。
引数:リスト
戻り値:引数のリストの2つ目の要素
例: 変数Lstに入っている (“Apple” “Book” 1 2 3) から “Book” を取得。
(cadr Lst)
cadとcdr の他の組み合わせについてはこちらの記事を。
cons
リストの先頭に要素加える。もしくは、ドットペアを作成する。
リストの先頭に要素を加える
引数:リストに加える値とリスト
戻り値:値が加わったリスト
例: 変数Lstに入っている リスト (“Book” 1 2 3) の先頭に “Apple”を加えて リスト (“Apple” “Book” 1 2 3) にする。
(cons "Apple" Lst)
ドットペア作成
引数:ドットペアとして組み合わせたいシンボルと値。シンボルには quote 関数を付ける( ‘ を使って省略できる)
戻り値:シンボルと値のドットペア
例: シンボル A と 数値 1 をセットにして (A. 1) にする。
(cons (quote A) 1)
‘ でquote を省略した形
(cons 'A 1)
nth
リストの n 番目の要素を取得する。
順番は0から始まるので注意
引数:n 番目を示す数値とリスト
戻り値:引数のリストのn番目の要素
例: 変数Lstに入っている (“Apple” “Book” 1 2 3) から 1 を取得。
(nth 2 Lst)
last
リストの 一番最後の要素を取得する。
引数:リスト
戻り値:引数のリストの一番最後の要素
例: 変数Lstに入っている (“Apple” “Book” 1 2 3) から 3 を取得。
(last Lst)
reverse
リストの順番を逆にする。
引数:リスト
戻り値:要素の順番が逆になったリスト
例: 変数Lstに入っている (“Apple” “Book” 1 2 3) を(3 2 1 “Book” “Apple”)にする。
(reverse Lst)
mapcar
指定されたリストの各要素を引数として引用関数を実行した結果のリストを返す。
引数:引用関数 リスト
戻り値: 引用関数実行後のリスト
例: 変数Lstに入っている 数値のリスト(1 2 3) を文字列のリスト(“1” “2” “3”)にする。
(mapcar (quote itoa) (list 1 2 3 ))
例: 変数a b c dに、1 2 3 4をそれぞれ代入する。
(mapcar (quote set)
(list (read "a") (read "b") (read "c") (read "d"))
(list 1 2 3 4)
)
関数の省略
quoteは引用関数を指定する関数です。
‘ で ‘ で省略で関数名、() 省略できます。
リストも省略可能な関数です。
例: 数値のリスト(1 2 3) を文字列のリスト(“1” “2” “3”)にする。
(mapcar 'itoa '(1 2 3))
readも省略可能な関数です。
例: 変数a b c dに、1 2 3 4をそれぞれ代入する。
(mapcar 'set '(a b c d) '(1 2 3 4))
apply
リストの各要素を引数として引用関数を実行。
引数:引用関数 引用関数に渡す引数のリスト
戻り値: 実行後の結果
例: 変数Lstに入っている 数値のリスト(1 2 3) を合計する。
(apply (quote +) (list 1 2 3 ))
例: 数値の12.25を、十進表記で小数点一桁にして文字列”12.3”に変換する。
(apply (quote rtos) (list 12.25 2 1))
関数の省略
quoteは引用関数を指定する関数です。’ で省略で関数名、() 省略できます。
listも ‘ で省略できます。()は必要です。
(mapcar '+ '(1 2 3))
(apply 'rtos '(12.25 2 1))
lambda
apply や mapcar で使う引数関数を定義する。
引数:自作関数のプログラムコード
戻り値: 実行後の結果
例: 自作関数 (+ a b c)を定義して、 apply の引用関数として使い、引数のリスト(1 2 3) を渡す。
(apply (quote (lambda (a b c) (+ a b c))) (list 1 2 3))
例: 自作関数 (+ a 10)を定義して、 mapcar の引用関数として使い、数値のリスト(1 2 3) のそれぞれの値に10を足したリスト (11 12 13) にする。
(mapcar (quote (lambda (a) (+ a 10))) (list 1 2 3))
関数の省略
quoteは引用関数を指定する関数です。’ で省略で関数名、() 省略できます。
listも ‘ で省略できます。()は必要です。
(apply '(lambda (a b c) (+ a b c)) '(1 2 3))
(mapcar '(lambda (a) (+ a 10)) '(1 2 3))
実行
コマンド
command / command-s
AutoCADコマンドの実行。
引数:コマンド、コマンドオプション、”” 、pause
戻り値: –
例: コマンド”LINE”を実行、1点目は0,0を指定、2点目はユーザー入力(pause)、エンターキー(空白キー)でコマンドを終わる。
(command-s "._LINE" "0,0" pause "")
vl-cmdf
AutoCADコマンドの実行。
command/command-s と違い、コマンド実行前に引数が評価され、引数にエラーがある場合はコマンドを実行しない。
引数:コマンド、コマンドオプション、”” 、pause
戻り値: –
例: コマンド”LINE”を実行、1点目は0,0を指定、2点目はユーザー入力(pause)、エンターキー(空白キー)でコマンドを終わる。
(vl-cmdf "._LINE" "0,0" pause "")
条件式
if
条件に応じてプログラムを実行
引数:条件式、条件式がTの時にするプログラム、条件式がnilの時にするプログラム(省略可)
戻り値: 実行されたプログラムの戻り値
例: (getreal)で数値をユーザー入力。数値が10なら”10です”、それ以外なら”10以外です”とアラートボックスに表示する
(if (= (getint) 10)
(alert "10です")
(alert "10以外です")
)
progn
複数のプログラムをひとつのセットにする。
関数 if など、実行できるプログラムは一つだけれど複数実行したいとき、prognを使ってひとまとめにする。
引数:実行したいプログラム
戻り値: 最後のプログラムの戻り値
例: (getreal)で数値をユーザー入力。数値が10なら”10です”、それ以外なら”10以外です”と、コマンドラインに表示させて、アラートボックスにも表示する。
(if (= (getint) 10)
(progn
(princ "10です")
(alert "10です")
)
(progn
(princ "10以外です")
(alert "10以外です")
)
)
cond
条件に応じてプログラムを実行
引数:条件式、条件式がTの時にするプログラム
戻り値: 実行されたプログラムの戻り値
例: (getreal)で数値をユーザー入力し変数aに代入。 aに入った数値が10なら”10です”、 20なら”20です” 30なら”30です”、それ以外なら”それ以外です”とアラートボックスに表示する
(setq a (getreal))
(cond
((= a 10)(alert "10です"))
((= a 20)(alert "20です"))
((= a 30)(alert "30です"))
( t (alert "それ以外です"))
)
=
複数の引数がすべて同じならTを戻す。
引数:同じ値かどうか調べたい数値、文字列
戻り値: 同じならT、一つでも違うものは入っていればnil
例: 10と5+5が同じ値か調べる
同じ値なのでTが戻ります。
(= 10 (+ 5 5))
例: 文字列Abcとabcが同じ値か調べる
大文字小文字は違う値になるので、nilが戻ります。
(= "Abc" "abc")
/=
複数の引数に異なる値があればT、すべて同じならnilを戻す。
引数:同じ値かどうか調べたい数値、文字列
戻り値: 一つでも違うものは入っていればT
例: 10と5+5が同じ値か調べる
同じ値なのでnilが戻ります。
(/= 10 (+ 5 5))
例: 文字列Abcとabcが同じ値か調べる
大文字小文字は違う値になるので、Tが戻ります。
(/= "Abc" "abc")
>
2つの引数のうち、左の引数の値が大きければTを戻す。
引数:2つの数値
戻り値: 左の数値の方が大きければT、そうでなければnil
例:
(> 10 5)
T
(> 10 10)
nil
(> 5 10)
nil
>=
2つの引数のが同じか左の引数の値が大きければTを戻す。
引数:2つの数値
戻り値: 同じ、左の数値の方が大きければT、そうでなければnil
例:
(>= 10 5)
T
(>= 10 10)
T
(>= 5 10)
nil
<
右の引数の値が大きければTを戻す。
引数:2つの数値
戻り値: 右の数値の方が大きければT、そうでなければnil
例:
(< 10 5)
nil
(< 10 10)
nil
(< 5 10)
T
<=
2つの引数のが同じか右の引数の値が大きければTを戻す。
引数:2つの数値
戻り値: 同じ、右の数値の方が大きければT、そうでなければnil
例:
(<= 10 5)
nil
(<= 10 10)
T
(<= 5 10)
T
null/not
引数の値がnil かどうか調べる。
引数:Tかnilか調べたい変数、条件式、など。
戻り値:引数の値がnilならT Tならnil
例:(= 1 2) の値がnilかどうか調べる。1と2は違うので(= 1 2)はnilなので戻り値はT
(null (= 1 2))
T
(not (= 1 2))
T
wcmatch
文字列がパターンと合っているかどうか調べる。ワイルドカードが使用できる。大文字小文字も区別する。
引数:文字列 パターン
戻り値: 文字列がパターンに合っていればT、そうでなければnil
例:
(wcmatch "abc" "abc")
T
(wcmatch "abc" "a*")
T
(wcmatch "abc" "a@c")
T
繰り返し
repeat
指定した回数、プログラムを繰り返す。
引数:繰り返す数(数値)、繰り返したいプログラム
戻り値: 実行したプログラムの最後の戻り値
例: 変数a に0を代入後、aに1を足すのを10回繰り返す。
(setq a 0)
(repeat 10 (setq a (1+ a)))
while
引数の条件式がTの間、プログラムを繰り返す。
引数:条件式、繰り返したいプログラム
戻り値: 実行したプログラムの最後の戻り値
例: 変数a に0を代入後、aが10になるまでaに1を足すのを繰り返す。
(setq a 0)
(while (> 10 a) (setq a (1+ a)))
foreach
リストの値を順々に引数にして同じプログラムを繰り返す。
引数:変数、変数に順番に入れたい値のリスト
戻り値: 実行したプログラムの最後の戻り値
例: 変数a に0を代入後、1、2、3、4を順番に足していく
(setq a 0)
(foreach n (list 1 2 3 4)
(setq a (+ n a))
)
AutoCAD 設定変更
setvar
システム変数の値を変更
引数:システム変数名(文字列)、新しい値
戻り値: 新しく設定した値
例: 現在の画層(システム変数 CLAYER)を”0″にする
(setvar "CLAYER" "0")
画層状態
layerstate-has
特定の名前の画層状態がすでに存在するか調べる
引数:画層状態の名前(文字列)
戻り値: T か nil (存在すればT)
layerstate-delete
画層状態を消去
引数:画層状態の名前(文字列)
戻り値: T か nil (消去に成功したらT)
layerstate-save
画層状態を新規作成
引数:画層状態の名前(文字列)、復元のプロパティのビットコードの合計、VPLAYER 設定
戻り値: T か nil (保存に成功したらT)
layerstate-restore
画層状態を復元
引数:画層状態の名前(文字列)、ビューポート設定、復元設定ビットコードの合計
戻り値: 画層名のリスト (失敗したらnil)