==================================================発行部数883======
AutoCADカスタマイズ入門講座 No.14 1999/07/18
===================================================================
AutoCADカスタマイズ入門講座のご購読ありがとうございます。
今回から前回予告したとおりに、AutoCADのCHANGEコマンドと同様なコマ
ンドをAutoLISPで作成してみたいと思います。ホントに出来るかどうかは私
にもまだわかりませんが(~_~)、作成を通じて今まで学んできた事の理解が
より深まると思います。また、AutoLISPの可能性も感じて頂けるのでは...
と思っています。
--------------------------------------------------------------------
1.CHANGEコマンドについて
--------------------------------------------------------------------
みなさんもCHANGEコマンドは使われた事があると思います。どんなコマン
ドだっけ?という方は一度試して、思い出してみてください。基本的にこの
コマンドはエンティティの属性(例えば、線種、色等)を変更するコマンド
です。詳しくはマニュアルやオンラインヘルプ等で確認してください。
さて、CHANGEコマンドの動作を確認してみましょう。
このコマンドを実行すると最初に次のプロンプトが表示されます。
図形を指示:
ここで、変更するエンティティを選択します。エンティティを単独で選択す
るだけではなく、各種選択オプション(W、C 等)を使用する事が出来ます。
エンティティの選択が完了すると、次のプロンプトが出力されます。
P=特性/<変更位置を指示>: (1)
ここで、"P"を入力すると次のサブオプションが表示されます。
変更する特性 (C=色/E=高度/LA=画層/LT=線種/T=厚さ) ?
ここで、各オプションを入力すると各属性を変更する事が出来ます。それぞ
れのサブオプションの意味は、次の通りです。
C 色の変更
E 高度(エンティティの高さ)の変更
LA 画層(レイヤーの変更)
LT 線種の変更
T 厚さの変更
上記、サブオプションを選択すると再度オプションが表示されますが、これ
については次回見ていきたいと思います。
次に、(1)の式でAutoCADの画面上をマウスでピック、またはコマンドライ
ンから座標値を入力すると、選択したエンティティにより、例えばLineエン
ティティでは始点、終点の変更などをおこなえます。この辺についても、詳
細はマニュアルなどで確認してください。
この辺りについては皆さんのほうが詳しいですね!!。
--------------------------------------------------------------------
2.CHANGEコマンドのUIを再現する
--------------------------------------------------------------------
さて、CHANGEコマンドのUIは1.で見てきたようになっていますが、今回
はCHANGEコマンドと同様な(ちょっとは違いますけど...)動作をするUI部の
プログラムを作ってみました。プログラムを以下に示します。
; --- ここから
; -----------------------------
; mychange コマンドメイン関数
; -----------------------------
(defun C:mychange()
(setq ss1 (getobj)) ; 変更するエンティティを選択する
(setq ret (getctype)) ; オプションを選択する
; オプションにより処理を分岐させる
(if (= (type ret) 'STR)
(propchange ret) ; 特性変更オプション
(locatechange) ; 変更位置オプション
)
)
; ----------------------------
; エンティティ選択関数
;-----------------------------
(defun getobj()
(ssget)
)
;-----------------------------
; オプション選択関数
;-----------------------------
(defun getctype( / flag ret )
(setq flag 1)
(while flag
(progn
(initget 128 "Prop") ;(getxxx)関数で任意入力を許します
(setq ret (getpoint "P=特性/<変更位置を指示>:"))
(if (and (= (type ret) 'STR)(= ret "Prop"))
(progn
(initget 1 "Color hEight LAyer LType Thick")
(setq ret (getkword "変更する特性 (C=色/E=高度/LA=画層/LT=線種/T=厚さ) ?"))
(setq flag nil)
)
)
(if (= (type ret) 'LIST) (setq flag nil))
)
)
(setq ret ret)
)
; ---------------------------
; 特性変更オプション関数
;----------------------------
(defun propchange( option )
(if (= option "Color") ;色変更
(colorchange)
)
(if (= option "hEight") ;高度変更
(heightchange)
)
(if (= option "LAyer") ;画層変更
(layerchange)
)
(if (= option "LType") ;線種変更
(ltypechange)
)
(if (= option "Thick") ;厚さ変更
(thickchange)
)
(setq a nil)
)
;----------------------------
; 変更位置オプション関数
;----------------------------
(defun locatechange()
(prompt "変更位置が選択されました")
)
;---------------------------
; 色変更関数
;---------------------------
(defun colorchange()
(prompt "色変更が選択されました")
)
;---------------------------
; 高度変更関数
;---------------------------
(defun heightchange()
(prompt "高度変更が選択されました")
)
;---------------------------
; 画層変更関数
;---------------------------
(defun layerchange()
(prompt "色変更が選択されました")
)
;---------------------------
; 線種変更関数
;---------------------------
(defun ltypechange()
(prompt "線種変更が選択されました")
)
;---------------------------
; 厚さ変更関数
;---------------------------
(defun thickchange()
(prompt "厚さ変更が選択されました")
)
; --- ここまで
--------------------------------------------------------------------
3.ちょっとだけ解説
--------------------------------------------------------------------
上記のプログラムについて、今まで触れていない部分について説明します
。
○(initget)関数
この関数は、(getxxx)関数の入力の制御をする事が可能となります。
(initget)関数の書式は(initget [bits] [string])です。bitsにはある決ま
った整数を指定する事により、例えば(getxxx)関数でリターンキーだけの入
力を禁止したり、0や負の数の入力を禁止したりする事が出来ます。また、
[string]にキーワードを指定する事で、(getxxx)関数が決まったキーワード
しか受け付けない様にする事が可能です。例えば、上記プログラムでは、
(initget 1 "Color hEight LAyer LType Thick")
という使い方をしています。ここでは、bitsに1、stringに"Color hEight
LAyer LType Thick"を指定しています。bits=1の意味は、ユーザがリターン
キーのみの入力をする事を禁止します。また、stringキーワードを指定する
事で、(getkword)関数で指定したキーワードしか受け付けなくする事が出来
ます。
(getkword)関数はキーワードの入力を受け付ける関数です。書式は
(getkword [prompt])です。詳しくは上記のプログラムとマニュアルをご覧
ください。
○(type)関数
この関数は、指定した引数のタイプ(型)を返します。書式は(type item)
です。返す値は
REAL 浮動小数点
STR 文字列
INT 整数
LIST リスト
などです。
--------------------------------------------------------------------
4.まとめ
--------------------------------------------------------------------
まず最初の段階として、AutoLISPでchangeコマンドのUI部分のプログラム
を再現してみました。解説が少なかったのですが(申し訳ございません)、プ
ログラム自体は単純なので、実際に動作させながら次回までにプログラムの
構成を確認しておいてください(特に(initget)関数と(getxxx)関数の使い方
に注意してください)。また、次回は内部のプログラムについて考えていき
ます。
●バックナンバーは下記のURLで参照する事が出来ます。
http://www2u.biglobe.ne.jp/~Saturn5/alisp.htm
====================================================================
■登録/解除の方法
http://www2u.biglobe.ne.jp/~Saturn5/alisp.htm
「AutoCADカスタマイズ入門講座」は、上記URLよりいつでも
登録/解除可能です。
====================================================================
●広告の問い合わせ
広告のお問い合わせは以下のメールアドレスへお願いします。
wankichi@mba.nifty.ne.jp
====================================================================
■「AutoCADカスタマイズ入門講座」No.14
発行責任者 :わんきち(wankichi@mba.nifty.ne.jp)
発行システム:インターネットの本屋さん『まぐまぐ』
http://www.mag2.com/
マガジンID:0000011579
====================================================================
戻る