==================================================発行部数875======
     AutoCADカスタマイズ入門講座              No.13 1999/07/10
===================================================================
 AutoCADカスタマイズ入門講座のご購読ありがとうございます。

 7月も半ばになり、暑い日が続く様になりました。皆さんいかがお過ごし
でしょうか?。私が勤めている会社では、夜7時頃になると空調が止まって
しまうので、暑い日の残業はかなりの苦痛です。そんな日は遅くまで仕事を
しても効率が上がらないのだから、早く切り上げてビールでも飲み、次の日
気分を切り替えて仕事を始めれば良いと思うのですが...なかなかそう出
来ません。かなり意志が弱いですし(^_^;)。

--------------------------------------------------------------------
 1.エンティティの色について考える
--------------------------------------------------------------------
 今回は、まず最初にAutoCAD上に作図されたエンティティの色について考
えてみましょう。毎回直線(Line)ではつまらないので、今回はCircleコマン
ドで円をAutoCAD上に作図してください。

 次に、最近おなじみの以下の式で円の情報を取得し、内容を確認してくだ
さい。

コマンド:(setq elist (entget (car (entsel))))
コマンド:!elist

私の環境では以下の様になりました。
((-1 . <Entity name: 60000022>) (0 . "CIRCLE") (8 . "0") (10 5.6927 
4.4375 0.0) (40 . 2.95276) (210 0.0 0.0 1.0))

 上記リストの内容は大体理解して頂けると思います。グループコード"10"
のリストが円の中心点で、"40"が半径を表します。その他はLINEの場合と同
様です。
 さて、気づいた方もおられるかも知れませんが上記リストには色を示すグ
ループコードが存在しません(ちなみに、色を表すグループコードは"62"です
)。前回の講座では直線の始点座標を変更してみましたが、この時は既にリス
ト内に存在する始点座標を(subst)関数で変更する事により、始点座標の変
更を実現する事が出来ました。しかし、今回は同様の方法が使えません。

 ところで、どうして上記リストには色を示すデータが含まれていないので
しょうか?。これは、円の色が"bylayer"で作図されているためです。
"bylayer"については皆さんのほうが詳しいと思いますので説明は省きます
が、試しにcolorコマンドで色を指定してから図形を作図し、(entget)関数
で内容を調べてみてください。ちゃんとグループコード"62"が含まれている
はずです。また、この事は"bylayer"という概念が存在する線種についても
同様です(線種のグループコードは"6"です。上記リストには含まれていない
事がわかると思います)。

 さて、上で説明したように実際には色及び線種のデータがリストに含まれ
る場合と含まれていない場合がありますが、今回は色が"baylayer"の場合の
色の変更の仕方を考えてみます。また、色や線種を変更するプログラムを作
成する場合は上記データの違いを考慮する必要があります(ただし、実際に
は以降に示す色を変更するプログラム(式)をグループコード"62"が既に含ま
れるデータに適用しても問題はありません)。理由は最後に述べます。

--------------------------------------------------------------------
 2.エンティティの色を変えてみよう1
--------------------------------------------------------------------
 では実際に先ほど作図した円の色を変えてみましょう。次の式をコマンド
ラインから試してみてください。

コマンド:(setq elist (entget (car (entsel))))
コマンド:!elist
 elistの内容(特に、グループコード"62"が含まれていない事を確認してく
  ださい。
コマンド:(setq new_elist (append elist '((62 . 1))))
コマンド:!new_elist
 new_elistの内容(特に、グループコード"62"が含まれている事を確認して
  ください。
コマンド:(entmod new_elist)

 簡単ですね!。色が赤に変化したと思います。
最初と最後の式については既に理解して頂いていると思いますので、ここで
は説明を省きます。忘れてしまった方は以前の号を参照してください。中央
の式では、エンティティから取り出したリスト(elist)に色を示すドットペ
アリストを付加しています。ここで用いているのが(append)関数です。
(append)関数は引数で与えられたリストを一つにしそれを返します。
(append)関数の書式は以下の通りです。
(append list ...)

例えば、
(setq a '(a b c))
(setq b '(1 2 3))
(append a b)
この結果は、(a b c 1 2 3)となります。

また、
(setq a '((a b c)))
(setq b '((1 2 3)))
(append a b)
この結果は、((a b c)(1 2 3))となります。

--------------------------------------------------------------------
 3.エンティティの色を変えてみよう2
--------------------------------------------------------------------
 最後にちょっとした検証をしてみましょう。先ほど赤に変更した円はまだ
AutoCAD上に消さずにありますか?。消してしまった場合はもう一度上記の
手順を踏んで赤い円を作成してください。この赤い円には、色を変更したの
で既に色を示すグループコード62が含まれています。さて、この円にもう一
つグループコード"62"を含むリストを追加したらどうなるでしょうか?。早
速試してみましょう。

コマンド:(setq elist (entget (car (entsel))))
コマンド:!elist
 elistの内容、特にグループコード"62"が1つ含まれている事を確認して
  ください。
コマンド:(setq new_elist (append elist '((62 . 5))))
コマンド:!new_elist
 new_elistの内容、特にグループコード"62"が2つ含まれている事を確認
  してください。
コマンド:(entmod new_elist)

 結果はどうなりましたか?。きっと青色に変わったと思います。もう一度
この図形のデータを取り出してみましょう。
コマンド:(entget (car (entsel)))

 (entmod)関数を実行する前のnew_elistの内容と比較してみてください。
そう、グループコード"62"は一つになっています。つまり、AutoCAD及び
(entmod)関数はリストの中に同じグループコードを持つ複数のリストがあっ
てもちゃんと処理してくれます。また、複数のグループコードを持つリスト
がある場合は、最後のリストが採用されるようです。

--------------------------------------------------------------------
 4.まとめ
--------------------------------------------------------------------
 今回は、エンティティの色を変更試みてみました。いかがでしたでしょう
か?。次回はchangeコマンドライクなプログラムの作成に挑戦してみようと
思います。お楽しみに。
 また、メールでのご意見、ご感想などをお待ちしています。下記のメール
アドレスへお気軽にお寄せください。



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