寸法線の値を取得しテキストを追記するマクロ2|CATIAマクロの作成方法

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

ワークベンチ: ドラフティング
 
マクロ案: 
CATIA Drawingで “R寸法の寸法値の横に特定の文字を『テキストエディター』で併記”、
“寸法値の下に特定の文字の『テキストエディター』の文字を併記する“ことは
マクロで行うことは可能でしょうか? 
(テキストには、寸法線に対して、位置リンクと方向リンクも付加したいです。)

マクロの内容としては前回作成した寸法線の値を取得しテキストを追記するマクロに角度機能が追加しただけの内容です。

内容としては角度機能が追加されただけですが、処理内容としては少し難しいものとなっています。
サイン、コサインなどの三角関数、度とラジアンの変換などの高校数学をある程度理解していないとついていけない内容です。

また、VBAでは位置リンクの作成は可能ですが方向リンクを作成することができないようです。
そこでここでは、現在の寸法線に対して同じ角度のテキストボックスを作成する処理を行います。
方向リンクは付けていないので、寸法線を移動しても角度は追従しないので注意して下さい。

 

マクロの機能

今回作成したマクロは上画像の通り寸法線の下にテキストボックスを作成するマクロです。
前回のマクロに角度機能を追加しただけのマクロです。

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

  マクロの機能まとめ ・選択した寸法線の下にテキストボックスを作成
・テキストボックスの値は画面に表示されている寸法線と同じ値
・テキストボックスには寸法線との位置リンクを作成する
・テキストボックスは寸法線と同じ角度にする ← NEW

前回は寸法線のシンボル(ΦやR)の代わりに「*」を付与する機能がありましたが、今回はシンボルが「R」の場合のみ付与し、それ以外の場合は無視するといった内容になっています。

 

サンプルコード

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

 

コード解説

基本的な部分は前回作成した寸法線の値を取得しテキストを追記するマクロと同じです。
そのためここでは前回はなった、「角度」と「余白(隙間)」部分のコードを解説していきます。

円周率やサイン、コサインなどの三角関数を扱うので高校数学を思い出しながら読み進めて下さい。
 

寸法線の角度取得

「DrawingDimensionオブジェクト」の「GetBoundaryBoxメソッド」から、寸法値部分の4隅の座標が求められます。(コードでいうとDimCoordsに格納されている値)

このうち寸法値の左下と右下の座標から、寸法線の角度を求めていきます。

2点の座標から角度を求めるにはアークタンジェント(逆三角関数)を使います
VBAには指定した数字のアークタンジェントを返す「Atn関数」があるのでこの関数を使って角度を求めていきます。

Atn関数で点1(x1,y1)と点2(x2,y2)の角度を求めるには以下のように書きます。

 icon-code Atn関数で角度を求める(ラジアン) 

Dim Angle As Double
Angle = Atn((y2 – y1) / (x2 – x1))

ここで注意しないといけないのでは、求めた角度が「ラジアン」であるという点です。ここでは「ラジアン」ではなく「度」として角度を取得しておきたいので、求めたラジアンに「180/円周率」をかける必要があります

そこでAtn関数を使って円周率(3.1415…)も求めておく必要があります。
以下のように書くことで円周率を求めることができます。(公式なので丸暗記でOKです)

 icon-code Atn関数で円周率を求める 

Dim pai As Double
pai = 4 * Atn(1)

 
以上の内容により寸法線の角度を求めることができます。
このとき寸法線が90度、0度の時はAtn関数でエラーが発生するので条件分岐で処理を分けておく必要があるので注意しましょう。
 

寸法値とテキストボックスの余白(隙間)指定

次に寸法線の何mm下にテキストボックスを作成するかを指定していきます。
寸法線が0度、90度の場合はX座標もしくはY座標だけを変更すればいいだけの単純なものですが、角度が加わると非常に厄介なものとなります。

下画像でいうと「margin」は寸法線の角度が変わっても毎回同じ長さになるようにする必要があり、さらにはそのときの「X」「Y」の移動量を求める必要があります。

「X」「Y」の移動量の求め方の答えは画像に書いてある通りです。
「θ」は90度から先ほど求めた角度を引いたものをラジアンに変換したものです。
(「度」から「ラジアン」に変換するには先程とは逆で「円周率/180」をかけるだけです)

また寸法線の角度によっては、以下のような場合にもなりえます。
その場合も計算方法は違いますが同じ考え方で「X」「Y」の移動量を求めることができます。

以上の内容で「X」「Y」の移動量が求まるので、正負を考えて元の座標から移動後の座標を導き出すことができます。あとはその位置に取得した角度でテキストボックスを作成すれば完成です。

 

まとめ

今回は前回作成した寸法線の値を取得しテキストを追記するマクロに角度機能を追加したマクロの紹介でした。

VBAをはじめ多くのプログラミングでは、思った以上に学校で習った数学の知識が必要になります。
とくにCATIAマクロの場合は2次元,3次元座標を扱う場合も多く、Excelマクロ以上に数学の知識が必要になってきます。

これを機に高校数学のおさらいをしてみるのも悪くはないと思います。
  

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

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

CATIA, CATIAマクロ, VBA

Posted by Lic