==================================================発行部数808======
     AutoCADカスタマイズ入門講座              No.8 1999/05/29
===================================================================
  先日、会社にAutoCAD2000が届きました。まだ、箱も開けてませんが 
^^;)、来週には早速インストールしてためしてみたいと思います。

さて、今週は先週の続きです。
--------------------------------------------------------------------
 1.実現方法を考える
--------------------------------------------------------------------
 まず、前回考えた今回作るプログラムの仕様を再度以下に示します。

--- 6面体を作るプログラムの仕様 -----------------------------------
 1.6面体を作る(ワイヤーフレームでなく、3Dサーフェイスで面を作る)
 2.ユーザは底辺の対角線上の2点をマウスで指定する事により、底辺を定義
 する。2点はXY平面と平行な同一平面上なあるものとする。2点は同一の
 X座標、Y座標を取る事は無い。上記条件が満たされない場合は、エラーメ
 ッセージを出力しプログラムを終了する。
 3.ユーザは6面体の高さをコマンドラインから指定する
 4.入力タイプと異なる入力が合った場合(数値入力なのに文字入力をされた
 等)は、コマンドラインへのプロンプトを繰り返す。
 5.コマンドラインへのプロンプト出力は以下の通りとする。
 
 始点:
 もう一方の点:
 高さ:

 6.ESC,Ctrl+C(CtrlキーとCキーを同時に)キーなどでプログラムを中断でき
 るようにする。
--- 6面体を作るプログラムの仕様 -----------------------------------

 さて、この仕様を満たす実現方法を考えてみます。まず、上から順番に考
えてみましょう。

(1)6面体を作る(ワイヤーフレームでなく、3Dサーフェイスで面を作る)
 3Dモデルをコンピュータ上に作る場合にはいくつかの方法があります。そ
の中で今回用いるのはサーフェイスを用いる方法です(サーフェイスモデル
等と呼ばれます)。例えば、等しい正方形の紙を6枚用意し、それらの紙をそ
れぞれ糊で貼りつければ、6面体が出来る事は容易に想像できると思います
。また、紙で作ったので6面体の中はスカスカ、つまり中身は空です。これ
と同様なものをコンピュータ上に仮想的に作ります。これがサーフェイスモ
デルです。もう一つの方法はワイヤーフレームモデルとして6面体(とは言え
ませんが)を作る方法です。これは立方体を針金で作る事を考えて頂ければ
良いと思います。もう一つは、ソリッドモデルと呼ばれるもので、簡単に言
えばサーフェイスモデルの中に、中身を詰めたものです。3Dのモデルについ
てはこれ以上深くは触れませんが、世の中は3D(3次元)CAD全盛です。今まで
2D CADしか扱ってこられなかった方はぜひ一度、AutoCADの3次元機能を試し
てみてください。AutoCADの3次元機能は決して高度なものではありませんが
、3D CAD入門には十分でしょう。ちょっと話がずれてしまいましたが、
3Dサーフェイスは3dfaceコマンドで作る事ができます。では、3dfaceコマン
ドを試してみましょう。コマンドラインから以下の操作を実行してみてくだ
さい。

コマンド:3dface
一点目:0,0,0
二点目:0,1,0
三点目:1,1,0
四点目:1,0,0
三点目:(リターンキーのみ)

コマンド:vpoint
R=回転/<始点を指示><0.0,0.0,0.0>:1,1,1

コマンド:zoom
A=全図面/C=中心/.../<尺度(X/XP)>:a

コマンド:shade

どの様になりましたか?。きっと白い正方形が作図されたと思います。これ
がサーフェイス(面)です。シェードを行うまではただの四角形(直線で四角
形を書いたのと一緒)ですが、シェードを行う事で面が作成されている事が
解ると思います。つまり、ここがワイヤーフレームと異なるところです。同
様にして6面体の6面それぞれの座標を考えて6面体を完成させてください(ち
ょっと大変ですが...)。これらの処理をプログラムにする事で6面体が作
れそうです。

(2)ユーザは底辺の対角線上の2点をマウスで指定する事により、底辺を定義
 する。2点はXY平面と平行な同一平面上なあるものとする。2点は同一の
 X座標、Y座標を取る事は無い。上記条件が満たされない場合は、エラーメ
 ッセージを出力しプログラムを終了する。

上記の仕様で最も問題となりそうなところはマウスで底面を定義するという
ところです。マウスで座標を指示するにはどの様にすれば良いでしょうか。
それには以下の関数を使用します。

(getpoint [点] [プロンプト])
(getcorner pt [プロンプト]) []内は省略可

(getpoint [点] [プロンプト]) 関数だけ使用する事も出来ますが、今回は
矩形形状を入力する事から上記2関数を使用する事にします。  

それではこの関数をコマンドラインから入力して試してみましょう。
コマンド:(getcorner '(0 0 0)) 
と入力し、AutoCADの画面内の適当な位置をクリックすると座標が返される
事が解ります。この時、点(0,0,0)からマウス位置までラバーバンドが引か
れる事を確認してください。また、(getcorner)関数に対しコマンドライン
から座標を指示する事も出来ます。つまり、
コマンド:(getcorner '(0 0 0))
1,1,1
とすると(getcorner)関数が入力した座標を返す事が解ると思います。
同様なテストを(getpoint)関数でも試して頂き、(getcorner)関数との違い
を確かめてください(違いはマニュアル等で確認してみてください)。

(3)ユーザは6面体の高さをコマンドラインから指定する
 これは簡単です。コマンドラインから数値入力を受け付ける関数を使用し
ます。数値には以前説明した様に整数と実数がありますが、今回は実数型を
使用します。この為、以下の関数を使用します。

(getreal [プロンプト]) []内は省略可)
この関数も(getcorner)関数と同様にコマンドラインから試してみてくださ
い。関数が入力した実数を返す事を確認したください。また整数を入力して
も、関数は実数を返す事を確認してください。つまり、
コマンド:(getreal)
1
1.0 となります。

(4)入力タイプと異なる入力が合った場合(数値入力なのに文字入力をされた
 等)は、コマンドラインへのプロンプトを繰り返す。
 この仕様についても簡単です。(getcorner)や(getreal)等を使う限りこれ
らのチェックは自動的に行ってくれます。試しにコマンドラインから上記関
数を入力し、座標値または数値の代わりに文字または文字列を入力して見て
ください。どの様になりましたか?。

(5)コマンドラインへのプロンプト出力は以下の通りとする。
 
 始点:
 もう一方の点:
 高さ:

 この仕様についてはどの様にすれば実現できるかもう既にお分かりだと思
います。つまり、(getpoint)、(getcorner)、(getreal)関数のオプション引
数である[オプション]に上記プロンプト出力を指定する事で実現できます。

(6)ESC,Ctrl+C(CtrlキーとCキーを同時に)キーなどでプログラムを中断でき
 るようにする。
 
 この仕様についても、(getpoint)、(getcorner)、(getreal)関数は自動的
に処理してくれます。試しにコマンドラインから上記関数のどれかを入力し
、ESCキー(R13以降)、Ctrl+Cキー(R12)を入力してみてください。入力が
キャンセルされる事が解ります。

--------------------------------------------------------------------
 2.まとめ
====================================================================
 今回は前回考えた仕様に対して実現方法を考えてみました。仕様を考える
場合にはとりあえず実現できるかどうかは考えずに仕様を考える事が重要で
す。但し、実際にプログラムを作る前には本当に使用通りのプログラムが実
現できるかをある程度検証する必要があります。実現できそうならばそのま
まプログラム作成へ進めば良いのですが、実現できそうになければ、仕様の
スペックを下げるなど、仕様と実現性の調整をする必要があります。次回は
実際にプログラムを作成してみます。お楽しみに。

●バックナンバーは下記の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.8
発行責任者 :わんきち(wankichi@mba.nifty.ne.jp)
発行システム:インターネットの本屋さん『まぐまぐ』
              http://www.mag2.com/
              マガジンID:0000011579
====================================================================

戻る