CATIAマクロで長さや角度を測定する[Measurableオブジェクト]|CATIAマクロの作成方法
CATIAマクロを作成していると長さや角度、面積や半径などを取得したい場合がでてきます。
こういった、いわゆる[測定]コマンドでの測定結果をマクロで取得するには『Measurableオブジェクト』を使います。今回はそんなMeasurableオブジェクトについて詳しく見ていきましょう。
今回学べる内容は以下のとおりです。
Measurableオブジェクトとは
Measurableオブジェクトのプロパティの使い方
Measurableオブジェクトのメソッドの使い方
Measurableオブジェクトとは
『Measurableオブジェクト』とは簡単にいうと[要素を測定]コマンドや[2要素間の距離]コマンドで測定した結果(寸法や角度など)を取得することのできるオブジェクトです。
Measurableオブジェクトを使用するには、先に『SPAWorkbench』(Space Analysis Workbench)というワークベンチを定義しておく必要があります。
以下の構文を書くことで、『SPA』という変数に『Space Analysis Workbench』を定義することができます。(変数名は好きに変えてもらって構いません)
Dim SPA As Workbench
Set SPA = CATIA.ActiveDocument.GetWorkbench(“SPAWorkbench”)
次にこの『SPA』を使って以下のように書いてMeasurableオブジェクトを定義します。
Dim MyMeasure As Measurable
Set MyMeasure = SPA.GetMeasurable(Ref1)
上記の構文により変数『Ref1』に入っているオブジェクトを、Measurableオブジェクト内に入れることができます。この状態でMeasurableオブジェクトのプロパティやメソッドを使うことで長さや角度などを取得することができます。
Measurableオブジェクトは以下のプロパティ/メソッドが用意されています。
※以下は代表的なものを抜粋したものであり、すべてではありません
プロパティ名 | プロパティ内容 |
Angle | 円/円弧の角度を取得 |
Area | 面積を取得 |
Length | 長さを取得 |
Radius | 円弧/シリンダ/球の半径を取得 |
Volume | ソリッドの体積を取得 |
メソッド名 | メソッド内容 |
GetAngleBetween | 2要素間の角度を取得 |
GetMinimumDistance | 2要素間の最短距離を取得 |
たとえば、表の中のLengthプロパティを使って「MyMeasure.Length」と書くと、変数『Ref1』に入っているオブジェクトの長さを取得することができます。
プロパティ
Measurableオブジェクトのプロパティは、主に[要素を測定]コマンドで測定できる値を取得することができます。コードの書き方自体はどれも同じで、以下では変数『GetValue』に取得した値が代入されるようになっています。
Angleプロパティ
Angleプロパティは「Ref1」に入っている円/円弧の角度を取得することができます。
「Ref1」の中身が正円の場合は「360」、半円の円弧の場合は「180」を取得することができます。
Angleプロパティで角度を取得するには以下のように書きます。
Dim GetValue As Double
GetValue = MyMeasure.Angle
Areaプロパティ
Areaプロパティは「Ref1」に入っているサーフェス形状/ソリッド形状の面積を取得することができます。「Ref1」の中身がソリッド形状の場合は表面積を取得することができます。
Areaプロパティで面積を取得するには以下のように書きます。
Dim GetValue As Double
GetValue = MyMeasure.Area
Lengthプロパティ
Lengthプロパティは「Ref1」に入っている曲線/直線の長さを取得することができます。
Lengthプロパティで長さを取得するには以下のように書きます。
Dim GetValue As Double
GetValue = MyMeasure.Length
Radiusプロパティ
Radiusプロパティは「Ref1」に入っている円弧/シリンダ/球の半径を取得することができます。
Radiusプロパティで半径を取得するには以下のように書きます。
Dim GetValue As Double
GetValue = MyMeasure.Radius
Volumeプロパティ
Volumeプロパティは「Ref1」に入っているソリッド形状の体積を取得することができます。
Volumeプロパティで体積を取得するには以下のように書きます。
Dim GetValue As Double
GetValue = MyMeasure.Volume
プロパティ取得確認用コード
プロパティのコードだけをみてもイメージが付きづらいので、実際に取得したことを目で確認できるようにしてみましょう。
下記のコードをコピペし、コード内の「’ここにプロパティのコードを入力」の部分に上記のプロパティのいずれかのコードを入力します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Dim DOC As Document Set DOC = CATIA.ActiveDocument Dim SPA As Workbench Set SPA = DOC.GetWorkbench("SPAWorkbench") Dim SEL As Selection Set SEL = DOC.Selection Dim Ref1 As Reference Set Ref1 = SEL.Item(1).Reference Dim MyMeasure As Measurable Set MyMeasure = SPA.GetMeasurable(Ref1) '**************************************************************** 'ここにプロパティのコードを入力 'たとえば長さを調べたい場合は「Lengthプロパティ」のコードをコピペ 'Dim GetValue As Double 'GetValue = MyMeasure.Length '**************************************************************** MsgBox GetValue '取得した値をメッセージボックスで表示 |
入力後、ツリー上のオブジェクトを1つ選択した状態でコードを実行すると、入力したプロパティのコードで取得した値をメッセージボックスで表示することができます。
エラーが発生してしまう場合は、選択しているオブジェクトに問題がある可能性があります。
「Lengthプロパティを使うのに、選択しているものがサーフェス」のようにタイプが不一致の可能性があります。選択しているオブジェクトの種類があっているか確認してみましょう。
また、オブジェクトの種類があっているのにエラーが発生する場合は、おそらくデータ上の種類が違うという可能性が考えられます。たとえばシリンダ(円柱)を選択しているつもりでも、データ上シリンダと認識されずただの曲面として認識されている場合があります。
こういったときは[要素を測定]コマンドを使ってデータ上の形状の種類が何かを調べる必要があります。詳しくは『CATIAの形状の種類と性質』ページを参照ください。
メソッド
Measurableオブジェクトのメソッドは、主に[2要素間の距離]コマンドで測定できる値を取得することができます。ここで紹介するコードの書き方はどちらも同じで、以下では変数『GetValue』に取得した値が代入されるようになっています。
メソッドは他にも方向や中心点なども取得することができますが、その場合は配列を使って取得します。詳しくは『CAA V5 Visual Basic Help』で「SpaceAnalysisInterfaces Measurable(Object)」と検索して出てくる「Measurable」ページで確認してみましょう
GetAngleBetweenメソッド
GetAngleBetweenメソッドは「Ref1」と「Ref2」に入っている2つのエレメントの角度を取得することができます。
GetAngleBetweenメソッドで角度を取得するには以下のように書きます。
Dim GetValue As Double
GetValue = MyMeasure.GetAngleBetween(Ref2)
GetMinimumDistanceメソッド
GetMinimumDistanceメソッドは「Ref1」と「Ref2」に入っている2つのエレメントの最短距離を取得することができます。
GetMinimumDistanceメソッドで最短距離を取得するには以下のように書きます。
Dim GetValue As Double
GetValue = MyMeasure.GetMinimumDistance(Ref2)
メソッド取得確認用コード
プロパティ同様、メソッドも取得した値を目で確認できるようにしてみましょう。
下記のコードをコピペし、コード内の「’ここにメソッドのコードを入力」の部分に上記のメソッドのいずれかのコードを入力します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Dim DOC As Document Set DOC = CATIA.ActiveDocument Dim SPA As Workbench Set SPA = DOC.GetWorkbench("SPAWorkbench") Dim SEL As Selection Set SEL = DOC.Selection Dim Ref1 As Reference Set Ref1 = SEL.Item(1).Reference Dim Ref2 As Reference Set Ref2 = SEL.Item(2).Reference Dim MyMeasure As Measurable Set MyMeasure = SPA.GetMeasurable(Ref1) '**************************************************************** 'ここにメソッドのコードを入力 'たとえば角度を調べたい場合は「GetAngleBetweenメソッド」のコードをコピペ 'Dim GetValue As Double 'GetValue = MyMeasure.GetAngleBetween(Ref2) '**************************************************************** MsgBox GetValue '取得した値をメッセージボックスで表示 |
入力後、ツリー上のオブジェクトを2つ選択した状態でコードを実行すると、入力したメソッドのコードで取得した値をメッセージボックスで表示することができます。
このコードでエラーする場合もプロパティ確認用コードのところで説明したものと同じ原因の可能性が高いので、エラーが発生してしまうという場合はそちらを確認ください。
まとめ
今回はMeasurableオブジェクトを使った要素の測定方法についての解説でした。
このオブジェクトで取得した数値は条件分岐させるために利用する場合が多いです。
また、このオブジェクトを使って取得する数値はどれも非常に細かくなります。
デフォルトでは最小0.001mmまでしか測定しないようになっているため、取得した数値も少数点以下第4位までの表示になるように四捨五入してあげるたほうが使い勝手はよくなります。
四捨五入の方法は「VBA 四捨五入」で検索すればたくさん情報が出てきます。
ほとんどExcelのものですがCATIAでも使えるので、それらを参照ください。