==================================================発行部数794======
     AutoCADカスタマイズ入門講座              No.6 1999/05/16
===================================================================
  AutoCADカスタマイズ入門講座第6号をお送りします。

--------------------------------------------------------------------
 1.まずはエディタの話から
--------------------------------------------------------------------
 みなさんはどのようなエディタをお使いですか?。メモ帳を使っている方
も多いと思いますが、正直ちょっと使いにくいと思います。ちなみに私の使
っているエディタを紹介すると秀丸エディタというものです。秀丸エディタ
はテキストエディタでは最も有名なものの一つであり、とても高機能です。
AutoCADのようにマクロを使い自分好みにカスタマイズする事も可能です。
また、AutoLISPは"("、")"が多いのでそれらの対応が解りづらいですが、秀
丸エディタでは一方の括弧にカーソルを置くと、対応する括弧が強調表示さ
れるので括弧の抜けなどを簡単に探し出す事が可能です。
 秀丸エディタはシェアウェアなので試用する事が可能です。ダウンロード
サイトからダウンロードし、一度試してみるのもよいかもしれません。

--------------------------------------------------------------------
 2.AutoCADの設定
--------------------------------------------------------------------
 No.1号でサンプルプログラムを紹介した時、一番心配したのがプログラム
をロードできないのでは?という事でした。No.1号では、「プログラムを保
存したディレクトリを環境変数に追加してください」と簡単にすましてしま
ったので大丈夫かな?と思っていたのですが、幸いロードできないというメ
ールをいただいていないので大丈夫だったのかなと思います。もし、うまく
ロードできないという方がいらしたら、AutoCADのバージョンをお書きのう
えメールを頂ければ、それぞれのバージョンに適した設定方法を折り返しお
送りします(初めから各バージョンの設定方法を書ければよいのですが、全
て調べていないので...^_^;)。
 また、apploadコマンドでロードするファイルを設定する方法もあります
。もっとも何も設定しなくとも(load...)コマンドで、ファイルの絶対パス
を指定する事でプログラムをロードする事が可能です。例えば、Eドライブの
usr\AutoLisp\testというフォルダにsample.lspというファイルが保存して
あれば、(load "E:\\usr\\AutoLisp\\test\\sample")と指定します。\記号を
2つ書かなければならない事に注意してください。ただし、長いファイル名
を入力するのは大変なので、(load "sample")と入力すれば済むようにやは
り、ちゃんと設定を行っておく事をお勧めします。お気に入りのプログラム
が出来たらメニューファイルに登録しておけばより一層便利になります。

*おすすめ1
 プログラムを開発中には何度もプログラムをロードする事が必要になりま
す。プログラムを修正するたびに、(load ".....")と入力していたのでは効
率的ではありません。そこでAutoCADを立ちあげたら、最初にプログラムを
ロードするコマンドを設定しておきましょう。コマンド名は短くするとよい
と思います。例えば、sample.lspというファイルをロードする必要がある場
合は、
(defun C:lo()
  (load "sample")
)
とコマンドラインから入力しておきます。そうすればそれ以後、
コマンドラインからloと入力すればsample.lspがロードされます。

--------------------------------------------------------------------
 3.インデントとコメント文
--------------------------------------------------------------------
 No.1号でもふれましたが、プログラムのインデントとコメント文はプログ
ラムの保守(後でプログラムに機能を追加したり、不具合を修正したりする事
)を行う上でとても重要です。コメント文の書き方は覚えていますね!。";"
を書けばその行はそれ以後コメント文となります。
次のように";"は行の先頭に書いても、文の後に書いても有効です。
  ・
  ・
;この行はコメント文
  ・
  ・
(setq a (+ c d)) ; a = c + d
  ・
  ・
 インデントについてはif文やwhile文の様に一つのまとまりごとに設定す
るのが基本です。例えば以下の様にします。
(if (< a b)
  ; ここからif内なのでインデントします
  (setq c (+ c 1))
 (while (< c d)
    ; ここからwhile内なのでインデントします
    (setq ・・・
    ・
    ・
  ) ; while文に対応する括弧
) ; if文に対応する括弧

何文字字下げするかという問題ですが、私は通常AutoLISPでは2字字下げし
ていますが、何文字が正しいという事はないので自分のフィーリングに合う
文字数を探してください。とりあえず、AutoCADをインストールすると一緒
にインストールされるサンプルプログラム等にあわせてみるのがよいと思い
ます。

--------------------------------------------------------------------
 4.関数とコマンド
--------------------------------------------------------------------
 AutoLISPに既に含まれる関数をプログラム内から呼び出す(コール)する場
合、例えば平方根を計算する関数を呼び出す場合は、
(sqrt 2)
などと書くことは既に勉強しました。さて、自分で関数を作る時はどのよう
に書くのでしょうか?。これは今まで特に説明しませんでしたがNo.1のサン
プルなどには含まれており、以下の様に記述します。

(defun 関数名(引数リスト)
   ・
   ・
)

例えば、aの2乗(axa)を求める関数は以下の様になります。
(defun fx(a)
  (* a a)
)

上記関数をプログラム内から呼び出す場合には以下の様にします。
(setq b (fx 2))
この様にすれば、bには4が格納されます。

次にコマンドの定義ですが、コマンドの定義は殆ど上記の関数の定義と一緒
です。コマンドを定義するためには以下の様に記述します。
(defun C:関数名()
  ・
  ・
)
つまり、関数名の前に"C:"を付けるとコマンドの定義となります。ただし、
コマンド定義では引数を使う事は出来ないので注意してください。
(defun C:abc( z x y) ... ) ; これはダメ

さて、コマンドとして関数を登録した場合と、コマンドとしてではなく純粋(
?)に関数として登録した場合の違いは何でしょう。コマンドとして登録した
場合は、コマンドラインから関数名のみを入力すれば実行出来るのに対して
、関数として登録した場合には(関数名)または引数がある場合は(関数名 ...
)として実行する必要があります。ただし、コマンドとして登録した関数は
他の関数から呼び出す事は出来ません。メニューからはどちらもコマンドラ
インからの実行と同様に実行する事が可能です。

*おすすめ2
ファイルは分割しよう!
 プログラムを何度も書いていると、お気に入りの便利な関数が出来たり、
毎回必ず使う関数が出来たりします。そのような関数が出来た場合には、ユ
ーティリティ関数として一つの関数にまとめておきましょう。

;-例---------------------------------------------
; util.lsp
; ユーティリティ関数
;------------------------------------------------
(defun fa(a b) .....)
(defun fb() ....)
(defun fc(x) ....)

例えば上記ファイルをutil.lspというファイル名で保存しておきます。

;-例---------------------------------------------
; test1.lsp
; fa()を使う例題
;------------------------------------------------
(defun C:test1()
  (fa 1 2)
)

;-例---------------------------------------------
; test2.lsp
; fc()を使う例題
;------------------------------------------------
(defun C:test2()
  (fc 3)
)
また、上記のファイルをtest1.lsp、test2.lspというファイル名で保存して
おきます。

この様にしておけば、test1を実行したい時にはAutoCADにutil.lspとtest1.l
spをロードする事で実行できますし、test2が実行したい場合には、util.ls
pとtest2.lspをAutoCADにロードする事で実行する事が可能になります。

--------------------------------------------------------------------
 5.グローバル変数とローカル変数
--------------------------------------------------------------------
 No.2及び3号で変数についての説明を行いましたが、変数についてもう一
つ重要な事柄があります。それは、グローバル変数及びローカル変数という
概念です。グローバル変数はプログラム全体で参照できる変数、ローカル変
数は関数内だけで参照できる変数です...と書いても解りにくいですね。
次の2つの2つのプログラムを実行してみてください。

;---- test1.lsp --------
(defun C:test1()
  (setq ax 5)
  (print "ax1 = ")
  (princ ax)
  (fa)
  (print "ax3 = ")
  (princ ax)
  (prin1)
)
(defun fa()
  (setq ax 2)
  (print "ax2 = ")
  (princ ax)
)

;---- test2.lsp --------
(defun C:test2()
  (setq ax 5)
  (print "ax1 = ")
  (princ ax)
  (fb)
  (print "ax3 = ")
  (princ ax)
  (prin1)
)
(defun fb(/ ax)
  (setq ax 2)
  (print "ax2 = ")
  (princ ax)
)

test1.lspのほうの実行結果は
"ax1 = " 5
"ax2 = " 2
"ax3 = " 2

test2.lspのほうの実行結果は
"ax1 = " 5
"ax2 = " 2
"ax3 = " 5
となります。違いが分かりますか?

関数fa、fbは殆ど同じに見えますが、fbのほうには引数リストの中に"/"及び
axがあります。このaxは関数の引数でない事に注意してください。
(defun fb(/ ax) ...)
とaxを定義すると、axは関数fbの中でローカル変数として定義されます。つ
まり、(defun C:test2()...)の中で定義されたaxと関数fbの中で定義された
axは名前こそ同じですが違う変数として定義されます。このため、上記の様
に実行結果が異なってきます。2つのプログラムそれぞれの流れを確認して
みてください。

--------------------------------------------------------------------
 6.まとめ
--------------------------------------------------------------------
 今回は、今まで学んできた事の復習及び補足をおこないました。いかがで
したでしょうか?。今回の様な補足は今後も続けていきたいと思います。
次号をお楽しみに!!。

====================================================================
●バックナンバーは下記のURLで参照する事が出来ます。
http://www2u.biglobe.ne.jp/~Saturn5/alisp.htm
また、『まぐまぐ』さんでもバックナンバーを見る事が出来るようになりま
した(パチパチ!!)。詳しくは『まぐまぐ』さんのWebをご覧ください。URLは
http://www.mag2.com/   
です。
====================================================================
■登録/解除の方法
http://www2u.biglobe.ne.jp/~Saturn5/alisp.htm
「AutoCADカスタマイズ入門講座」は、上記URLよりいつでも
登録/解除可能です。
====================================================================
●広告の問い合わせ
広告のお問い合わせは以下のメールアドレスへお願いします。
wankichi@mba.nifty.ne.jp
ただし、CAD関連に限ります。
====================================================================
■「AutoCADカスタマイズ入門講座」No.6
発行責任者 :わんきち(wankichi@mba.nifty.ne.jp)
発行システム:インターネットの本屋さん『まぐまぐ』
              http://www.mag2.com/
              マガジンID:0000011579
====================================================================
戻る