CATDrawingでコーナー部に仮想線を作成するマクロ|CATIAマクロの作成方法

今回は「マクロ案」より頂いた内容です。
送って頂いた内容は以下の通りです。

ワークベンチ: 
ドラフティング(メカニカル・デザイン)

マクロ案: 
丸みのある形状には、丸みを施す以前の形状を仮想線(実線細線)を作成して、寸法を記入します。
仮想線をマクロで作図することは可能でしょうか?

 
まとめると下図のようにコーナーをつける前の”角の状態”を仮想線で作成したいということですね。
※“丸み”の定義が曖昧のため、ここでは「円弧」ということで進めていきます。

 

マクロの機能

今回作成したマクロは上図のとおり、「選択したビュー内のすべてのコーナー(円弧)に仮想線を作成する」というものです。

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

 icon-wrench マクロの機能まとめ ・選択したビュー内のコーナーすべてに仮想線を付与する(円弧のみに対応)
・選択したビューに鍵がかかっている場合、鍵を外して処理を続けるか確認する

※注意※
本マクロではコーナーに仮想線を作成するといっていますが、
処理の内容としては「選択したビュー内のすべての円弧に接線となる2つの直線を作成する」というものになっています。

つまり、コーナーではない部分に円弧があったとしても、その円弧に対して仮想線が作成されてしまいます。(形状の角部分を認識しているわけではないということ)
要は「円弧があれば、その円弧に対して仮想線を作るマクロ」だと思ってもらえれば大丈夫です。

仮想線を作成するプログラムの考え方は問題ないはずなので、使用環境に合わせて条件などを追加すればもう少し使い勝手の良いマクロになると思います。

 

サンプルコード

マクロのコードは以下のとおりです。
マクロ実行後、ビューを選択するとそのビュー内のコーナーに仮想線が作成されます。


 

コード解説

非常に長いコードなので重要部分を抜粋して解説していきます。

コード内に簡単な説明も記しているのでコード内コメントも確認ください。
 

TempViewの作成

この部分では仮想線を作成するための作業場所となる「TempView」を作成しています。
「ユーザーが選択したビュー内ですべての処理をすればいいのでは?」とも思いますが、本マクロではビュー内の「円」を取得して処理を行っていくためビューの分離が必要です。(以下の[Tips]参照)

しかし、ユーザーが選択したビューを分離してしまうと3D形状とのリンクが切れてしまうため図面データとして問題があります。というわけで、ここではユーザーが選択したビューを複製し、それを分離することでこれらの問題を解決させています。

最終的にはTempView内で作った仮想線をユーザーが選択したビューにコピペします。
全ての処理が終わったらTempViewは削除するといった流れになります。
 

 [Tips] 投影ビューの分離  

CATDrawingのマクロを作成するときに一番厄介なのが、3D形状から投影された2D形状です。
投影された2D形状はどんな形をしていようが「DrawingView」として取得されてしまいます。
 

 

この投影された2D形状を通常の円弧や直線のように扱うには、そのビューを分離する必要があります。ビューを分離すると以下のようにそれぞれの線を「円」や「直線」のようにタイプ別で取得することができます。
 

 

 

直線方程式を使って仮想線を作成

本コードのメイン部分です。(関数部分は省略)
細かい内容は割愛して何を行っているかを簡単に説明していきます。

まず、上図のうち「Point1(円弧の始点)」「Point2(円弧の中心)」「Point3(円弧の終点)」の3点の座標は「StartPoint」「EndPoint」などの既存のプロパティ/メソッドですべて求めることができます。

今回のマクロで欲しい値は「Point4」の座標です。
「Point4」の座標がわかれば、あとは「Point4とPoint1を結ぶ直線」と「Point4とPoint3を結ぶ直線」の2つの直線を作成すればそれが今回作りたい仮想線となります。

「Point4」の座標は既存のプロパティ/メソッドだけでは取得できないので計算で求めていきます。
「Point1」「Point2」「Point3」の座標を使って「Point4」の座標を求める方法は以下のとおりです。上記コードでは以下の内容をプログラム上で行っているだけです。

① 「Point1」と「Point2」を通る「LineA」の直線方程式を求める
② 「Point3」と「Point2」を通る「LineB」の直線方程式を求める
③ 「Point1」を通り「LineA」と垂直な「LineC」の直線方程式を求める
④ 「Point3」を通り「LineB」と垂直な「LineD」の直線方程式を求める

⑤ 「LineC」と「LineD」の交点座標を求める

※①,②  二点を通る直線の方程式 (外部サイト)
 ③,④  垂直な直線の方程式の求め方 (外部サイト)
 ⑤   2直線の交点を求める公式 (外部サイト)

 
上記の内容で1つの円弧に対して仮想線を作成することができます。
あとはTempView内のすべての円弧に対してループで仮想線を作成していくだけです。

 

まとめ

今回はCATDrawingのコーナー部に仮想線を作成するマクロについての内容でした。

マクロ自体は実行可能ですが、複雑なビューになるほど動作が重くなります。
あくまでもマクロ作成の考え方の1つとして参考程度に見て頂ければ幸いです。

※より詳細なコード解説が必要な方は「お問い合わせ」よりご連絡下さい。
 

目次へ戻る
 

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

 

CATIA, CATIAマクロ

Posted by Lic