CATDrawing内の長穴に対して軸線を作成するマクロ|CATIAマクロの作成方法

今回の記事はお問い合わせよりいただいた内容です。
送って頂いた内容は以下のようなマクロです。

CATDrawing マクロで長穴に“中心線”を作図することは可能でしょうか?

本来はCATPartやCATProductから投影した長穴に対して軸線を作成したいというご要望でしたが、投影された形状はマクロでは「DrawingView」として取得されてしまうためうまくマクロが作成できません。そこでここではCATDrawing内で作成された形状である「長穴」に対して軸線を作成するマクロを紹介していきます。

軸線は中高で学習した直線や座標、2点間の距離などの公式を使い計算によって求めています。あまり覚えていないという方は、中高校生時代の数学の教科書や数学のサイトなどを見ながら本ページを見ることをオススメします。

 

マクロの機能

今回作成したマクロはCATDrawing内で作成された形状である「長穴」に対して軸線を作成するマクロです。長穴の2つの円弧部を選択することで、その長穴の軸線を作成します。

具体的な機能は以下のとおりです。

 icon-wrench マクロの機能まとめ ・長穴の2つの円弧部を選択することで、その長穴の軸線を作成する
・長穴はCATDrawing内で作成された形状に限る(投影形状は不可)
・軸線は長穴のあるビュー内に作成される

 

サンプルコード

マクロのコードは以下のとおりです。

 

コード解説

モジュールレベル変数の定義

まずはモジュールレベル変数の定義を行います。
これは今後出てくる複数の関数にまたがって変数を使用するためです。

アクティブドキュメント/Selection/VisPropertySet定義

続いてSubプロシージャのコードです。
まず初めにアクティブドキュメント / SelectionVisPropertySetの定義を行います。

VisPropertySetオブジェクトは、軸線の線種を変更するために定義しています。
 

長穴円弧部の中心座標取得

次に円弧の中心座標を取得します。
2つの円弧の中心座標が求まれば片方の軸線は作成可能になります。
(簡単にいうと円弧の中心点を結んだ線が軸線であるため)

ここでは「GetSelArcCoord関数」というオリジナル関数を作っています。
この関数では「SelectElement2メソッド」を使って”円弧の中心座標の取得” “円弧のR値の取得” “円弧のあるビューの取得”を行っています。

 
軸線延長の指定

先の2つの円弧を結んだ直線では軸線としては短いです。
そこで次に軸線を長穴からどれだけはみ出させるかの”量”を指定していきます。
ここで指定した長さだけ長穴からはみ出した軸線を作成することができます。

サンプルコードでは「r/2」つまりは円弧の半径の半分だけはみ出すようにしています。
(「r/2+r」の「+r」は不足分の長さなので延長量をしているのは「r/2」の部分です)
 

軸線1の作成

円弧の中心座標、延長量が決まったので実際に軸線を作成します。
直線の作成は「Factory2Dオブジェクト」の「CreateLineメソッド」を使います。
使い方は簡単で以下のように書けばOKです。

 icon-code CreateLineメソッドの使い方 

fac2d.CreateLine(始点のX座標, 始点のY座標, 終点のX座標, 終点のY座標)

ここでは円弧の中心座標から指定した延長量の位置の座標を取得する「ExtendLineCoord関数」を作成し、始点と終点の座標を計算しています。
引数は「x1」「y1」「x2」「y2」「L」の5つのDouble型の値です。

この関数を使うことで、(x1, y1)と(x2, y2)の2点を通る直線上にあり、(x2, y2)側に「L」の長さだけ延長した位置の座標を取得することができます。これを2つの円弧の中心座標に対して行うことで、任意の長さの軸線を作成することができます。
 

軸線2の作成

次にもう一方の軸線を作成します。
このコードは長くなるので割愛しますが、やっていることは「先程作った軸線に対して90度の直線を作成する」というだけのことです。

上記コードの場合、長穴がX平行,Y平行の場合(つまりは傾きが0の場合)にうまく計算ができないため、そこだけ条件分岐で専用の処理を書いています。
 

軸線の線種変更

最後に作成した2つの軸線の線種を変更します。
詳しくはVisPropertySetオブジェクトページで解説しているので合わせて確認してみてください。
線の太さや色を変更することもできるので、任意のものに書き換えてください。

 

まとめ

今回はCATDrawing内の長穴に対して軸線を作成するマクロについての内容でした。

マクロの内容としては一見簡単にできそうですが、実はかなり面倒な処理が必要になってきます。これはデフォルトで存在しているコマンドの内部で行われている処理を自分で書いているようなものです。

例えば座標変換(Axis to Axis)コマンドは普通に使えば、かなり簡単に使うことのできるコマンドですが、この機能をマクロで再現しようとすると座標変換の計算(行列計算)を全て書く必要が出てきます。

内部で行われている計算内容を考えなければならないためより深く”仕組み”を理解することはできますが、その分、数学知識も必要なのでそちらの勉強も行っていくことをオススメします。
 

サンプルマクロ集に戻る
目次へ戻る

 

 CATIAマクロを本気で勉強するなら

CATIA, CATIAマクロ, VBA

Posted by Lic