図形の面積を知るいくつかの方法があります。

プロパティパレット

図形をクリックすると、プロパティパレットの領域に面積値が、長さに周囲の長さが表示されます。

AREAコマンドとシステム変数AREA

AREA コマンドの E 図形オプションで、図形の面積と周囲の長さを求めます

: AREA
オプション: 追加(A), エンティティを指定(E), 減算(S) または
1つ目の点を指定» _Entity
エンティティを指定»
1 個検出
面積 = 6054.355、周囲長 = 319.134

AREAコマンドで求めた面積と周囲の長さはシステム変数 AREAと PERIMETERに保存されているので、

: (getvar "AREA")
6054.35534951

: (getvar "PERIMETER") 319.13372093

とすると取得できます。

(getvar) システム変数を取得します。

オートメーションを使用

図形オブジェクトの面積は Area プロパティで取得できます。

: (vla-get-Area (vlax-ename->vla-object (car (entsel)))) 
エンティティを指定» 1 個検出 6054.35534951

図形オブジェクトに .Net では Area プロパティ、 CFx では getArea() 関数があります。

(entsel) 図形を1つ選択します。図形名とクリックした座標をリストにして返します。

(vlax-ename->vla-object) 図形名を指定してVLAオブジェクトを取得します。

(vla-get-プロパティ名) VLAオブジェクトのプロパティを取得します。

複数の図形の合計の面積を求める

AREA コマンドで A 加算オプションを使うと、図形を一つずつ選択して、最後にその合計を求めることができます。

プログラムを作る場合は複数の図形を選択し、図形の面積を求めて、その合計を求めるということをします。

(defun GETAREA ( / ss i n sum obj)
(setq sum 0.0)
(if (setq ss (ssget))
(progn
(setq i 0 n (sslength ss))
(while (< i n)
(setq obj (vlax-ename->vla-object (ssname ss i)))
(if (vlax-property-available-p obj 'Area)
(setq sum (+ sum (vla-get-Area obj)))
)
(setq i (1+ i))
)
(setq ss nil)
)
) sum )

(ssget) 複数の図形を選択し、選択セットを返します。

(sslength) 選択セットに含まれる図形の数を返します。

(ssname) 選択セットに含まれる図形を番号指定(0始まり)で返します。

選択セットは使い終わったら nil を設定して解放します。

(vlax-ename->vla-object) 図形名を指定してVLAオブジェクトを取得します。

(vlax-property-available-p) VLAオブジェクトにそのプロパティが存在するかどうか調べます。

(vla-get-プロパティ名) VLAオブジェクトのプロパティを取得します。

この例では変数 sum (面積の合計)が関数の戻り値になります。

点や線分など面積プロパティを持たない図形オブジェクトがあり、そうした図形オブジェクトに Areaプロパティを取得しようとすると、実行時エラーになるので、vlax-property-available-p で Area プロパティを持つオブジェクトかどうか確認しています。

回答が見つかりましたか?