直線のベクトルを取得してリストに表示するマクロ|CATIAマクロの作成方法

今回の記事はマクロ案募集でいただいた内容です。

送って頂いた内容は以下のようなマクロです。

形状セット内の線のベクトルを測定し画面に表示orエクセルを転記するマクロ

「ベクトルを測定して画面に表示」というものがどういうものかイメージできなかった、かつそのベクトルを最終的にどのように使うのかがわからなかったため、かなり私個人の解釈で作っています。

送って頂いたマクロ内容との認識が合っているかわかりませんが、ここでは「形状セット内の直線の単位ベクトルを取得し、その成分(x,y,z)をユーザーフォームを使って画面に表示するマクロ」を紹介していきます。

もし「思ってたマクロと違うよ!」という場合は、再度ご連絡ください。
※「お問い合わせ」からご連絡頂ければメールでのやり取りができるため、認識のズレが起きることなく目的のマクロに近づけられる可能性が高いです。

認識が間違ってたらごめんなさい!

 

作成するマクロの内容

今回作成するマクロは先にも述べているとおり「形状セット内の直線の単位ベクトルを取得し、その成分(x,y,z)をユーザーフォームを使って画面に表示するマクロ」です。

マクロの完成イメージとしては以下のような感じです。
形状セットを選択するとユーザーフォームが立ち上がり、各直線の単位ベクトルを表示します。

 icon-wrench マクロの機能まとめ ・選択した形状セット内の直線を単位ベクトルで取得する
・取得したすべてのベクトルをユーザーフォームでリスト表示
・リストの項目をクリックすると、それに対応した直線がCATIA上でも選択される
・[コピー]ボタンを押すと左下のテキストボックスの内容をコピーできる

※現在ExcelとCATIAが連携できない環境にいるためExcelに書き出す方法は解説していません。
 Excelへの転記方法は「CATIAマクロでExcelを操作する方法」のサンプルマクロを参照ください。

 

マクロ実行のための事前準備

今回のマクロではユーザーフォーム(UserForm)を使っているので、事前にユーザーフォームを作っておく必要があります。

マクロライブラリー上で左クリックし[Insert]>[UserForm]をクリックします。
するとユーザーフォームが作成されるので、プロパティウィンドウから名前(Name)を「UserForm1」に変更します。(初めて作成する場合はデフォルトで「UserForm1」となっています)

次に今回のマクロで使用する「Label」「ListBox」「TextBox」「CommandButton」というコントロールも事前に作成しておきます。[ToolBox]ウィンドウの各アイコンをクリックし以下のように配置してください。(※大きさや配置はコード上で行うため、適当な位置に配置するだけでOKです)

コントロールが作成できたらユーザーフォームのときと同じように名前を変更します。
(新規作成の場合はどれもデフォルトネームとなっています)

Label                  → Label1
ListBox               → ListBox1
TextBox              → TextBox1
CommandButton → CommandButton1

以上で事前準備は完了です。上記で設定した名前のユーザーフォームとコントロールが”存在”さえしていればこのマクロの実行は可能になります。

 

完成コード

マクロの完成コードは以下のとおりです。
モジュールに入力するコードユーザーフォームに入力するコードがあります。

モジュール(Module1)コード

ユーザーフォーム(UserForm1)コード

※Project Explorerの左上にある[View Code]アイコンをクリックするとユーザーフォーム内にコードを書くことが出来ます。
上記のコードはココに書き込んでください。

上記のコードの入力ができたらユーザーフォームではなくモジュールの方を実行します。(モジュールでUserForm1を呼び出すため)

 

コードの解説

今回は非常に長いコードのため、本マクロの核となる重要部分のみを抜粋して解説してきます。
※上記のコードにコメントである程度の説明を入れているためそれらも参照ください。

直線のベクトルを取得

まず大前提として今回のマクロの肝となるのが「直線のベクトルの取得方法」です。
ヘルプで「Vector」と検索したところ「Lineオブジェクト」のメソッドに「GetDirection」というものがありました。このメソッドの説明文は以下のとおりです。

Role: Returns the unit-vector pointing in the direction of the line.
(役割:直線の方向を指す単位ベクトルを返す)

 
「GetDirectionメソッド」は以下のようにして使うことができます。

このメソッドは事前に用意しておいた配列の[0番目][1番目][2番目]のそれぞれに、取得した単位ベクトルの[X成分][Y成分][Z成分]を代入することができます

このとき取得した数値はかなり細かく表示されるため、このマクロでは「Round関数」を使って小数点第2位までを取得するようにしています。(57~59行目)

 icon-code Round関数の構文

変数 = Round(数値,桁数)

以上で本マクロの一番の重要ポイントである「直線のベクトルを取得」は終了です。
変数「x1」「y1」「z1」にそれぞれの単位ベクトル成分が代入されています。
 

取得した単位ベクトルをユーザーフォームのリストに表示

上記のメソッドで取得したベクトルを事前準備で作成した「ListBox1」に書き出していきます。
ListBox1に取得した数値を表示させるには、以下のように書きます。

今回はユーザーフォームに書き出しましたが、表示したい取得したい数値自体は変数「x1」「y1」「z1」の中にそれぞれ入っています。つまりこれら3つの変数を使えばテキストやExcelにも書き出すことが可能ということです。

はじめにも紹介した通り「CATIAマクロでExcelを操作する方法」のサンプルマクロと組み合わせればこれらの数値をExcelに書き出すことができます。
上記のページのサンプルマクロでは「GetCoordinates」という点の座標を取得するメソッドを使っており、今回の「GetDirectionメソッド」とほとんど同じ書き方なのですぐに理解できると思います。

 

まとめ

今回は「形状セット内の直線の単位ベクトルを取得し、その成分(x,y,z)をユーザーフォームを使って画面に表示するマクロ」についてでした。

特に重要なのは「Lineオブジェクト」の「GetDirectionメソッド」です。
これ以外のコードはほとんど取得した値をどのように表示するかについてのコードなので、マクロの機能的には最悪なくてもいいものが多いです。
つまり今回は表示方法がユーザーフォームであっただけで、MsgBoxでの表示にすればもっと単純なコードにすることができます。(UserForm1関連のコードは全ていらなくなります)

どのように表示するかはそのマクロの使用用途によって変わります。
今回のマクロで一番やりたいことは「直線のベクトルの取得方法」なので、表示方法は自分の使用用途に合わせて書き換えていきましょう。

 
目次へ戻る
 

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

 

2020年2月9日CATIA, CATIAマクロ

Posted by Lic