==================================================発行部数691======
AutoCADカスタマイズ入門講座 No.1 1999/04/03
===================================================================
AutoCADカスタマイズ入門講座第一号をお送りします。
さて、AutoCADの新いバージョンであるAutoCAD2000の発売が正式にオートデ
スクからアナウンスされました。オートデスクのWebサイトを見るとかなり
の改善がなされているようです。早く使ってみたいですネ...といっても
私はカスタマイズ環境の方に興味があるのですが(~_~;)。皆さんは、どのよ
うに感じられましたか。ところで、AutoCAD2000には正式にVisualLISPが搭
載されました(米オートデスクのWebサイトからはR14用のVisualLISPが有償
でダウンロードできました)。VisualLISPはAutoLISPとほぼ100%上位互換(既
存のAutoLISPのプログラムがほぼ変更せずに動くということです)を持つ、
より高機能なAutoCADカスタマイズ言語です。今後、ユーザレベルのカスタ
マイズはVisualLISPの使用が一般的になると思われますが、たとえそうなっ
たとしてもAutoLISPの知識が無駄になることはありませんので安心して受講
してください。VisualLISPについてはまた詳しく書きたいと思います。
--------------------------------------------------------------------
1.はじまりはじまり
--------------------------------------------------------------------
今回は初回なので、細かいことは抜きにしてとりあえずプログラムを書い
てみましょう。今は内容が分からなくても全く問題ありません。AutoLISPの
プログラムの感じをつかんでいただければOKです。以下に今回のサンプルを
示します。サンプルの内容は点の座標及び点からの距離、角度を入力し変換
後の点の座標を求めるというものです。今回の例題にはダイアログボックス
があるため、sample1.lspの他にsample1.dclが必要です。
;--------- ここから sample1.lsp ------------------------------------
;---------------------------------
; sample1.lsp
;---------------------------------
(defun C:sample1()
; 初期設定
(setq pai 3.141592) ; πの設定
(setq ret 100) ; ダイアログ終了コードの初期化
(setq dist 0.0)
(setq ang 0.0)
(setq sp (list 0.0 0.0))
; ダイアログボックスのロード
(setq dcl_id (load_dialog "sample1.dcl"))
; ダイアログボックス処理ループ
(while (< 2 ret)
(if (= (new_dialog "dlgbox" dcl_id) nil)
(progn
(alert "ダイアログボックスを開けません\n")
(exit)
)
)
; タイルへの値の設定
(set_tile "spx" (rtos (car sp)))
(set_tile "spy" (rtos (last sp)))
(set_tile "dist" (rtos dist))
(set_tile "angle" (rtos ang))
; コールバック関数の定義
(action_tile "trans" "(trans)") ; 変換ボタンを押下
(setq ret (start_dialog))
) ; ダイアログボックス処理ループ終了
; ダイアログボックスのアンロード
(unload_dialog dcl_id)
(princ)
)
; 座標変換
(defun trans()
(setq sp (list (atof (get_tile "spx")) (atof (get_tile "spy"))))
(setq dist (atof (get_tile "dist")))
(setq ang (atof (get_tile "angle")))
(setq ep (polar sp (* (/ ang 180.0) PI) dist))
(set_tile "epx" (rtos (car ep)))
(set_tile "epy" (rtos (last ep)))
)
;-------- ここまで sample1.lsp --------------------------------------
//-------- ここから sample1.dcl -------------------------------------
// ---------------------------------------------------------------
// sample1.dcl
// ---------------------------------------------------------------
dlgbox : dialog {
label = "Sample1";
: row {
: column {
: edit_box {
label = "SP(X):";
key = spx;
}
: edit_box {
label = "SP(Y):";
key = spy;
}
: edit_box {
label = "距離:";
key = dist;
}
: edit_box {
label = "角度:";
key = angle;
}
}
: column {
spacer;
: button {
label = " 変換 ";
key = "trans";
}
}
: column {
fixed_height=true;
: edit_box {
label = "EP(X):";
key = epx;
is_enabled = false;
}
: edit_box {
label = "EP(Y):";
key = epy;
is_enabled = false;
}
: spacer {
height = 3;
}
}
}
ok_only;
}
//------------ ここまで sample1.dcl ----------------------------------
上に示したプログラムをそれぞれ、sample1.lsp、sample1.dclという名前で
適当なフォルダに保存してください。プログラムをこのメールから、テキス
トエディタへコピーしてもかまいませんが、出来れば自分で1文字、1文字テ
キストエディタへプログラムを打つことをお勧めします。
--------------------------------------------------------------------
2.ちょっと詳しく見てみよう
--------------------------------------------------------------------
sample1.lspを見てください。これがAutoLISPのプログラムの一例です。
AutoLISPのプログラムのファイル名は通常*.lspとします。
どうですか?。"("、")"、が非常に多いことに気づかれたと思います。少し
複雑に見えますが、基本的には"("から")"の間がひとつの(プログラム的な)
意味を成していると考えて問題ありません。AutoLISPでは、これら"("")"で
括られた文を連ねる事によりプログラムを構成します。また、所々に";"が
あるのがわかると思いますが、これは注釈(コメント)文を書くために用いま
す。ある行で";"を書くと、その行ではそれ以降の文が注釈として解釈され
ます(つまり、何を書いてもプログラムには影響を与えません)。
また、各行が段々(?)になっているのがわかると思います。これは、字下げ
とかインデントとかと呼ばれています。(ワープロでの意味と同じです)、
インデントをつけなくても、プログラムの動作がおかしくなる事はありませ
んがわかりやすいプログラムを組む上で非常に重要です。
次に、sample1.dclを見てください。これはAutoLISPでダイアログボックス
を使用するときに必要になるダイアログ定義ファイルです。通常ファイル名
は*.dclとします。このファイル内にダイアログの外見などの定義を行いま
す。今は、AutoLISPでダイアログボックスを使用するにはこんなファイルも
必要なんだ...と頭の隅に留めて頂ければ結構です。
--------------------------------------------------------------------
3.実行してみよう
--------------------------------------------------------------------
早速実行してみましょう。まずAutoCADの設定を行います。
AutoCADの環境変数の設定を行います。環境変数の中にサポート・ディレクト
リという設定項目があるのですが、その設定項目の変数に先ほどプログラム
を保存したフォルダのパスを追加します。例えば、C:\alispというフォルダ
にプログラムを保存し、変更前の環境変数の末尾が...\sampleとなっていれ
ば...\sample;C:\alispとします。なお、環境変数の設定方法はAutoCADの
各バージョンにより異なるので、詳しくはそれぞれのマニュアルをご覧下さ
い。
次にAutoCADのコマンドプロンプトから、
(load "sample1")
と入力し、リターンキーを入力します。
次にAutoCADのコマンドプロンプトから、
sample1
と入力し、リターンキーを入力します。
ダイアログボックスが表示されましたか?。
表示されたら、各入力項目に値を入力し変換キーを押してください。
EP(X)、EP(Y)に変換後の座標が表示されるはずです。
確認したらOKキーを押してダイアログボックスを終了してください。
今度は、AutoCADのコマンドプロンプトから、
!spと入力しリターンキーを入力してください。
先ほど入力した変換前の点の座標が
(SP(X) EP(X))として表示されているはずです。
次に!epと入力してリターンキーを入力してください。今度は、変換後の値
が表示されているはずです。
lineコマンドの応答で次のようにすれば始点がsp、終点がepの直線が作図
されます。
コマンド:line
どこから:!sp
どこへ:!ep
どこへ:リターンキーのみ
ダイアログイメージ *バージョンにより多少外見は異なります
--------------------------------------------------------------------
4.次回は
--------------------------------------------------------------------
今回は、AutoLISPの雰囲気をつかんでもらうため簡単な例を見てもらいま
した。全然何がなんだかわからない方もいると思いますが、先ほどのべた
ように全く心配は要りません。次回からは詳しくAutoLISPの文法を見ていき
ます。ご意見、ご感想などございましたら下記のメールアドレスへお願いし
ます。また、メールでプログラムを送付するとインデントがずれると思われ
ますので、ダイアログの実行イメージと共に下記のURLのバックナンバーで
ご確認ください。
====================================================================
■登録/解除の方法
http://www2u.biglobe.ne.jp/~Saturn5/alisp.htm
「AutoCADカスタマイズ入門講座」は、上記URLよりいつでも
登録/解除可能です。
====================================================================
●「AutoCADカスタマイズ入門講座」No.1
発行責任者 :わんきち(wankichi@mba.nifty.ne.jp)
発行システム:インターネットの本屋さん『まぐまぐ』
http://www.mag2.com/
マガジンID:0000011579
====================================================================
戻る