2Dリージョンのマスプロパティを取得するマクロ|AutoCAD VBAマクロの作成方法

AutoCADでは[MASSPROP]コマンドを実行することで、リージョンのマスプロパティ(面積、慣性モーメント、図心、回転半径など)を取得することができますが、これらの情報はVBAでも取得可能です。

VBAを使用してマスプロパティの情報を取得することで、その情報を処理の一連の流れに組み込むことができます。これにより、たとえば、取得したマスプロパティの情報を表として出力したり、複数のリージョンからマスプロパティを一括で取得したりすることが可能になります。
 

マクロ機能

 icon-wrench マクロの機能まとめ  ・モデル空間に存在するユーザーが選択したリージョンのマスプロパティ※1を取得する
   (※1 面積, 周囲, 境界ボックス, 図心座標, 慣性モーメント, 慣性乗積, 回転半径, 主慣性モーメント)
・取得したマスプロパティ情報はイミディエイトウィンドウに出力する
・取得したマスプロパティ情報から主軸を作図する

イミディエイトウィンドウへの出力は[MASSPROP]コマンドの出力結果に合わせていますが、取得できる値は各項目の値です。VBAではかなり細かい値まで取得することができるため、小数点以下第何位で丸めたいという場合はFormat関数Round関数などを使う必要があります。
 

サンプルコード

マクロのサンプルコードは下記のとおりです。事前にアクティブドキュメントのモデル空間にリージョンを作成しておく必要があります。マクロ実行後、ユーザーの選択待ち状態となるので対象のリージョンを選択することでマスプロパティを取得することができます。

 

コード解説 

ユーザー選択でリージョン取得

マスプロパティを取得する対象のリージョンをユーザー選択で取得するためには、UtilityオブジェクトのGetEntityメソッドを利用します。GetEntityメソッドは実行されるとユーザーの選択待ち状態となり対話的にユーザーが選択したオブジェクトを取得することができます。

ユーザーが選択されたオブジェクトは第1引数の変数に、選択された座標は第2引数の変数にそれぞれ格納されます。第3引数はユーザー選択時に表示するメッセージで省略も可能です。GetEntityメソッドはユーザーが選択キャンセル([Esc]キーの押下)した場合にエラーが発生してしまうため、「On Error Resume Next」でエラーを無視する等の何らかの対策が必要になります。

サンプルコードでは変数「oEntity」にユーザーが選択されたオブジェクトが入るため、そのオブジェクトがリージョンであるかをTypeName関数を使って判定し、リージョンでなかったり選択されなかった場合(Nothingの場合)は処理を終了するようにしています。
 

マスプロパティの取得

[MASSPROP]コマンドで取得可能なマスプロパティはRegionオブジェクトのプロパティ/メソッドとしてすべて用意されています。それぞれ下記の通り取得が可能です。

図心、慣性モーメント、慣性累積、回転半径、主慣性モーメントとその方向はすべて配列として複数値が返されるため、受け取る変数はVariant型で宣言しておく必要があります。

リージョンの境界ボックスの範囲はGetBoundingBoxメソッドを使うことで取得可能です。取得できる値はXY方向でリージョンを囲む最小の長方形を作成したときの最小(左下点)のXY座標と最大(右上点)のXY座標で、これらの数値だけあれば境界ボックスの高さや幅なども計算で求めることが可能です。
   

 主軸作成

RegionオブジェクトのPrincipalDirectionsメソッドにより取得できた情報はリージョンの主方向を表しています。サンプルコードでは図心からこの主方向に線分を作成しています。線分はModelSpaceオブジェクトのAddLineメソッドに始終点座標を入力することで作成が可能です。

このとき線分の長さは定数値とし、始終点の座標は計算により求めています。

作成した線分の色の変更はAcCmColorオブジェクトにより設定することが可能です。
詳しくは「オブジェクトの色の取得と編集」を参照ください。
 

まとめ

マスプロパティの情報はRegionオブジェクトからすべて簡単に取得できるため、[MASSPROP]コマンドと同等の処理をVBAで再現するだけであればRegionオブジェクトさえ取得できればすぐに実装することが可能です。[MASSPROP]コマンドは取得した情報をファイル出力することは可能ですが、細かな設定はできません。VBAであれば、たとえばExcelの指定のセルに出力したり、表として出力したりなどの細かい処理を行うことも可能です。
  

メインページへ戻る
 

 関連書籍

2024年8月30日AutoCAD, VBA

Posted by Lic