AutoLISP入門講座

【準備編-6】AutoLISPを作る、読ませる、直す、の手順

私がやっている、AutoLISPを作る、読ませる、直す、の手順です。

一つ一つのコマンドの解説よりも、こういう実際的な話の方が、初学者には大事だったりします。

■AutoLISPを作る

  • (defun は関数定義のコマンドで、とにかく下のように式を好きなだけ書く。
  • 最後に、定義した関数を呼び出すことで、読み込むと同時に実行されるようになる。こうしておいた方が、AutoLISP作成に、コマンドラインに関数名を打ち込む必要が無いので楽。
(defun test_1 ()		;test_1というオリジナル関数を定義

	(プログラム)
	(プログラム)
	(プログラム)
	(プログラム)
	(プログラム)

)
(test_1)			;test_1というオリジナル関数を呼び出して実行

■AutoLISPを読ませる


“秀”ちゃんマークをドラッグ。

■エラーの場合はこうなる

  1. 「XXXという関数は定義されていませんです。」使った関数が、AutoCADには読まれていない、ということです。
  2. 「形がおかしいです。」 カッコの対応がおかしいことがほとんど。
  3. 文法がおかしいです。(setq のあとに変数を3つ書いちゃったとか、そういう類の間違いです。

■どこで引っかかっているのかわからないとき。

こういうときは、とにかく(princ “/n 行番号) をプログラム中のあちこちに書き込んでから走らせ、どこまで実行されているかを突き止めます。

すごく原始的ですが、なれちゃうとなんとも無い。

秀丸をカスタマイズした人なら、[F-2] を押すだけで(princ “/n )まで書いてくれるので、行番号を書き込むだけでOK。

(defun test_1 ()
	(princ "n 2")			;[f-2]を押して挿入
	(ここにプログラムを書く)
	(princ "n 4")			;[f-2]を押して挿入
	(ここにプログラムを書く)
	(princ "n 6")			;[f-2]を押して挿入
	(ここにプログラムを書く)
	(princ "n 8")			;[f-2]を押して挿入
	(ここにプログラムを書く)
	(princ "n 10")			;[f-2]を押して挿入
	(ここにプログラムを書く)
)
(test_1)

■実行途中での変数の値を確かめたいとき

実行中に、変数の値を確かめたいときがけっこうあります。これもすごく原始的です。

(defun test_1 ()

	(setq aaa 100)
	(princ "n aaa :  ")(princ aaa)	;aaaを反転コピー後、[F-3]で挿入

)
(test_1)

秀丸をカスタマイズした人なら、変数をダブルクリックしCtrl-Cでクリップボードにコピーした後、[F-3] を押すだけで(princ “n AAA : “)(princ AAA)と書いてくれるので、2秒くらいで挿入できます。

実行途中で、点の位置を画面上で確かめたいとき

これはかな~り必須です。

  • 「与えられた点を中心に、ある半径の円を書く関数」を共通ファイルにあらかじめ用意しておきます。(共通ファイルについては、次で書きます。)
  • 位置を知りたい変数を、ダブルクリックし、Ctrl-Cでクリップボードにコピーした後、[F-5] を押すだけで(checkcircle Pt 1.0 “0″) と書いてくれるので、2秒くらいで挿入できます。
  • あとはプログラムを実行させれば、そこに円がかかれます。
(defun test_1 ()

	(setq aaa '(1000 1000))	;(1000,1000)という座標をaaaにセット
	(checkcircle aaa 1.0 "0")	;aaaの位置に半径1の円をレイヤー0で描く
							;aaaを反転コピー後、[F-5]で挿入
)
(test_1)

以上の方法で、デバッグ作業はかなり高速になると思います。