==================================================発行部数837======
     AutoCADカスタマイズ入門講座              No.10 1999/06/21
===================================================================
 AutoCADカスタマイズ入門講座のご購読ありがとうございます。
今週も発行が遅くなってしまった事をお詫びします。
 さて、私が住んでいる関東地方もやっと梅雨らしくなってきました。とは
言っても待ち望んでいたわけではないのですが、この時期雨が降らないと色
々と大変な事になるのでしょうがないですね。

--------------------------------------------------------------------
 1.肉付けしよう????
--------------------------------------------------------------------
 今回は、前回作成したプログラムの骨格に実際にプログラムを付け加えて
いきます。まず、ユーザーの入力を受け付ける関数を見ていきます。前回以
下の様なプログラムの骨格を作成しました。

(List 1)
;------------------------------------------------
; ユーザ入力を受け付ける関数 ui
;------------------------------------------------
(defun ui()
  ;ユーザにboxの底面を指示させる(1点目)

  ;ユーザにboxの底面を指示させる(2点目)
  
  ;ユーザにboxの高さを指示させる
)

 No.8では実現方法を考えるという事で幾つかの検証を行いましたが、今回
のプログラムでのユーザ入力仕様を実現するには、以下の関数を使用する事
で実現できる事を示しました。

(getpoint)    '座標の入力を受け付ける
(getcorner)   '座標の入力を受け付ける
(getreal)     '実数の入力を受け付ける

では、実際に上記List1にプログラムを付け加えてみましょう。以下のよう
になります。

(List 1a)
;------------------------------------------------
; ユーザ入力を受け付ける関数 ui
;------------------------------------------------
(defun ui()
  ;ユーザにboxの底面を指示させる(1点目)
  (setq p1 (getpoint "始点:"))
 
  ;ユーザにboxの底面を指示させる(2点目)
  (setq p3 (getcorner p1 "もう一方の点:"))

  ;ユーザにboxの高さを指示させる
  (setq hight (getreal "高さ:"))
)

簡単ですね。p1、p3に始点、もう一方の点の座標、hightに高さの値が代入
されます。

 次に作図部分の関数dbox()について見ていきます。
この関数についても前回以下の様な骨格を作成しました。

;------------------------------------------------
; 立方体を作図する関数 dbox
;------------------------------------------------
(defun dbox()
  ;ユーザの入力値から底面の4点の座標を求める

  ;底面の4点の座標及びユーザの入力した高さから上面の4点を求める
  
  ;立方体を作図する
)

 まず、立方体を作図するため立方体を構成する8点の座標を、関数uiで得
た値p1、p3、hightから求めます。最初に立方体の底面を表す4点を求めます
。点p1、p3以外の点をp2、p4とすると、

(setq p2 (list (car p3) (cadr p1)))
(setq p4 (list (car p1) (cadr p3)))
となります。また、上面を表すための4点をp11、p12、p13、p14とすれば、
底面はxy平面上にある事から、

(setq p11 (list (car p1) (cadr p1) hight))
(setq p12 (list (car p2) (cadr p2) hight))
(setq p13 (list (car p3) (cadr p3) hight))
(setq p14 (list (car p4) (cadr p4) hight))
となります。

 次にサーフェイスを作図しますが、サーフェイスを作図する方法として今
回は(command)関数を使用します。
まず、底面を作図します。底面は点p1、p2、p3、p4から構成されているので
、式は以下の様になります。

(command "3dface" p1 p2 p3 p4 p1 "")

最後の""はコマンドライン上ではリターンキーを押した事と同じ意味となり
ます。同様に他の面も考えてみましょう。

(command "3dface" p11 p12 p13 p14 p11 "")
(command "3dface" p1 p2 p12 p11 p1 "")
(command "3dface" p2 p3 p13 p12 p2 "")
(command "3dface" p3 p4 p14 p13 p3 "")
(command "3dface" p4 p1 p11 p14 p4 "")

結局(dbox)関数は以下の様になります。

;------------------------------------------------
; 立方体を作図する関数 dbox
;------------------------------------------------
(defun dbox()
  ;ユーザの入力値から底面の4点の座標を求める
  (setq p2 (list (car p3) (cadr p1)))
  (setq p4 (list (car p1) (cadr p3)))
  
  ;底面の4点の座標及びユーザの入力した高さから上面の4点を求める
  (setq p11 (list (car p1) (cadr p1) hight))
  (setq p12 (list (car p2) (cadr p2) hight))
  (setq p13 (list (car p3) (cadr p3) hight))
  (setq p14 (list (car p4) (cadr p4) hight))

  ;立方体を作図する
  (command "3dface" p11 p12 p13 p14 "")
  (command "3dface" p1 p2 p12 p11 "")
  (command "3dface" p2 p3 p13 p12 "")
  (command "3dface" p3 p4 p14 p13 "")
  (command "3dface" p4 p1 p11 p14 "")
)

最後に完全なプログラムのリストを示します。
;--- ここから ---
;------------------------------------------------
; 3dfaceで立方体を作図するプログラム box
;------------------------------------------------
(defun C:box()
  ; ユーザからの入力を受け付ける
  (ui)

  ; 立方体作図する
  (dbox)
)
;------------------------------------------------
; ユーザ入力を受け付ける関数 ui
;------------------------------------------------
(defun ui()
  ;ユーザにboxの底面を指示させる(1点目)
  (setq p1 (getpoint "始点:"))
  (terpri)
 
  ;ユーザにboxの底面を指示させる(2点目)
  (setq p3 (getcorner p1 "もう一方の点:"))
  (terpri)

  ;ユーザにboxの高さを指示させる
  (setq hight (getreal "高さ:"))
  (terpri)
)
;------------------------------------------------
; 立方体を作図する関数 dbox
;------------------------------------------------
(defun dbox()
  ;ユーザの入力値から底面の4点の座標を求める
  (setq p2 (list (car p3) (cadr p1)))
  (setq p4 (list (car p1) (cadr p3)))
  
  ;底面の4点の座標及びユーザの入力した高さから上面の4点を求める
  (setq p11 (list (car p1) (cadr p1) hight))
  (setq p12 (list (car p2) (cadr p2) hight))
  (setq p13 (list (car p3) (cadr p3) hight))
  (setq p14 (list (car p4) (cadr p4) hight))

  ;立方体を作図する
  (command "3dface" p11 p12 p13 p14 "")
  (command "3dface" p1 p2 p12 p11 "")
  (command "3dface" p2 p3 p13 p12 "")
  (command "3dface" p3 p4 p14 p13 "")
  (command "3dface" p4 p1 p11 p14 "")
)
---;------------------------------------------------
; 立方体を作図する関数 dbox
;------------------------------------------------
(defun dbox()
  ;ユーザの入力値から底面の4点の座標を求める
  (setq p2 (list (car p3) (cadr p1)))
  (setq p4 (list (car p1) (cadr p3)))
  
  ;底面の4点の座標及びユーザの入力した高さから上面の4点を求める
  (setq p11 (list (car p1) (cadr p1) hight))
  (setq p12 (list (car p2) (cadr p2) hight))
  (setq p13 (list (car p3) (cadr p3) hight))
  (setq p14 (list (car p4) (cadr p4) hight))

  ;立方体を作図する
  (command "3dface" p11 p12 p13 p14 "")
  (command "3dface" p1 p2 p12 p11 "")
  (command "3dface" p2 p3 p13 p12 "")
  (command "3dface" p3 p4 p14 p13 "")
  (command "3dface" p4 p1 p11 p14 "")
)
;--- ここまで ---

--------------------------------------------------------------------
 2.試してみよう
--------------------------------------------------------------------
 早速プログラムを試してみましょう。上記のプログラムリストをファイル
に保存し、AutoCADへロードし実行してみてください。コマンドラインにbox
と入力するとプログラムが実行されるはずです。プログラムの指示通りに2
点の選択と、高さの入力を行ってください。どうですか?、ちゃんと作図さ
れましたか?。でも今のままでは見にくいですね。vpointコマンドで少し斜
めから見てみましょう。以下のようにコマンドラインへ入力してください。
コマンド:vpoint
コマンド:1,1,1
コマンド:

次に図形を画面一杯に表示させます。
コマンド:z
コマンド:a
コマンド:

次に図形の形状をhideコマンドで確認します
コマンド:hide
コマンド:

--------------------------------------------------------------------
 3.まとめ
--------------------------------------------------------------------
 今回でやっと立方体を作図するプログラムが完成しました。今回のプログ
ラムでは解りやすくするために、リストを使用したり制御文を使いませんで
したが、これらを使用するとプログラムがもっと短くエレガントになります
ので、皆さんも挑戦してみてください。
 また、座標の計算部分が解らない方がおられるかもしれませんが、頭の中
で考えるのではなく、紙などに書いてみると案外すぐ理解できるものです。
 なお、今回のプログラムでは時間の都合上、エラー処理を付け加えません
でしたが、この部分についても仕様を考えながら皆さん考えてみてください
。この部分については後日詳しく説明します。

 次回は一度作図した図形の色や線種を変更するなど、AutoCADのデータベ
ースへのアクセス方法を紹介します。お楽しみに!!。

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

戻る