ビューの角度とスケールを取得するマクロ|CATIAマクロの作成方法
今回の記事は「お問い合わせ」よりいただいた内容です。
送って頂いた内容は以下のようなマクロです。
マクロの機能
今回作成したマクロは選択した寸法線を有するビューの角度とスケールを取得するマクロです。
取得確認として上画像のようにメッセージでそれぞれの値を表示するようになっています。
具体的な機能は以下のとおりです。
・角度とスケールは小数点以下第3位までの値を取得
サンプルコード
マクロのコードは以下のとおりです。
マクロを実行したら寸法線をクリックするだけです。
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
Option Explicit Sub CATMain() If TypeName(CATIA.ActiveDocument) <> "DrawingDocument" Then MsgBox "CATDrawingのみ対応のマクロです。" Exit Sub End If 'アクティブドキュメント定義 Dim doc As DrawingDocument Set doc = CATIA.ActiveDocument 'ユーザー選択のDrawingDimensionを定義 Dim sel 'As Selection Set sel = doc.Selection sel.Clear Dim Filter Filter = Array("DrawingDimension") Dim msg As String msg = "寸法線を選択して下さい。" Dim Status As String Status = sel.SelectElement2(Filter, msg, False) If Status <> "Normal" Then MsgBox "キャンセルしました。" Exit Sub End If Dim Txt As DrawingDimension Set Txt = sel.Item(1).Value 'ビュー定義 Dim TxtView As DrawingView Set TxtView = Txt.Parent.Parent 'ビューの角度とスケールを取得 Dim ViewAngle As Double Dim ViewScale As Double ViewAngle = TxtView.Angle 'ラジアン取得 ViewAngle = rad2deg(ViewAngle) 'ラジアン → 度(deg)変換 ViewAngle = Format(ViewAngle, "0.000") '値を丸める ViewScale = TxtView.Scale2 'スケール取得 ViewScale = Format(ViewScale, "0.000") '値を丸める MsgBox "角度 : " & ViewAngle & " deg" & vbLf & _ "スケール : " & ViewScale End Sub '************************************************************************************ ' 関数名 :rad2deg ' 機能 :入力されたラジアンを角度(deg)に変換して返す ' 引数 :x ラジアン '************************************************************************************ Function rad2deg(ByVal x As Double) Dim pi As Double pi = 4 * Atn(1) rad2deg = x * (180 / pi) End Function |
コード解説
アクティブドキュメントの定義
1 2 3 4 5 6 7 8 |
If TypeName(CATIA.ActiveDocument) <> "DrawingDocument" Then MsgBox "CATDrawingのみ対応のマクロです。" Exit Sub End If 'アクティブドキュメント定義 Dim doc As DrawingDocument Set doc = CATIA.ActiveDocument |
まずはじめにアクティブドキュメントの定義をします。
今回のマクロはCATDrawingでのみ有効なものなので、アクティブドキュメントがCATDrawing以外の場合はTypeName関数を使った条件分岐でマクロを終了するようにしています。
条件分岐の先、つまりはアクティブドキュメントがCATDrawingの場合は変数「doc」にアクティブドキュメントを代入します。
ユーザー選択/ビュー定義
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 |
'ユーザー選択のDrawingDimensionを定義 Dim sel 'As Selection Set sel = doc.Selection sel.Clear Dim Filter Filter = Array("DrawingDimension") Dim msg As String msg = "寸法線を選択して下さい。" Dim Status As String Status = sel.SelectElement2(Filter, msg, False) If Status <> "Normal" Then MsgBox "キャンセルしました。" Exit Sub End If Dim Txt As DrawingDimension Set Txt = sel.Item(1).Value 'ビュー定義 Dim TxtView As DrawingView Set TxtView = Txt.Parent.Parent |
つぎに「SelectElement2メソッド」を使い、ユーザーに寸法線を選択させます。
フィルターには「DrawingDimensionオブジェクト」を指定し寸法線のみの選択としています。
ユーザー選択のDrawingDimensionを取得したら、その寸法線を有するビューを定義します。
「DrawingDimensionオブジェクト」の親は「DrawingDimensionsオブジェクト」、そしてそのさらに親が「DrawingViewオブジェクト」となっています。つまり取得したDrawingDimension(上記コードでいう「Txt」)の親の親のオブジェクトを取得すればビューを定義することができます。
ビューの角度とスケールを取得
1 2 3 4 5 6 7 8 9 10 11 12 13 |
'ビューの角度とスケールを取得 Dim ViewAngle As Double Dim ViewScale As Double ViewAngle = TxtView.Angle 'ラジアン取得 ViewAngle = rad2deg(ViewAngle) 'ラジアン → 度(deg)変換 ViewAngle = Format(ViewAngle, "0.000") '値を丸める ViewScale = TxtView.Scale2 'スケール取得 ViewScale = Format(ViewScale, "0.000") '値を丸める MsgBox "角度 : " & ViewAngle & " deg" & vbLf & _ "スケール : " & ViewScale |
ビュー(DrawingView)が取得できれば、あとはそのプロパティから情報を取得するだけです。
角度の場合は「Angleプロパティ」、スケールの場合は「Scale2プロパティ」で取得可能です。
ここで注意しないといけないのは角度の取得時です。
「Angleプロパティ」で取得した角度は「度(deg)」ではなく「ラジアン(rad)」です。
そこでサンプルコードでは「rad2deg」という関数を用意して、ラジアンを角度に変換しています。
※ 名前の由来は「rad to deg」(ラジアンから角度へ)です。(「to」を「2(two)」と置き換える)
Python等でよく見られる名前の付け方なので、知識としては知っておいて損はないと思います。
また、取得した角度とスケールの値はDouble型なのでかなり細かい値まで取得されてしまいます。
そこで「Format関数」を使って値を少数以下第3位までに変換しています。
(有効数字を変更したい場合「0.000」の「0」の数を変更してください)
「2」のついたプロパティ/メソッドはCATIAのバージョンアップ等の原因から、無印のプロパティ/メソッドを使ったときに何かしらの問題が発生したものに対して用意された新規のプロパティ/メソッドです。機能を一新してしまうと、これまで使われてい他ツールなどにも影響が出てしまうため、新たなプロパティ/メソッドとして搭載されているのです。
そのため基本的には「2」の付いているプロパティ/メソッドが用意されている場合はそちらを使うことが推奨されています。
※本サイトでは2はほとんど無視してやっているので、気になる方は各自で修正して下さい。
まとめ
今回はちどり溶接指示を作成するマクロについての内容でした。
今回は寸法線を有するビューとしましたが、ビューさえ取得できてしまえば、角度とスケールを取得する方法は同じです。(ビューの取得方法が違うだけ)
つまりサンプルコードの「SelectElement2メソッド」のフィルターをそもそも「DrawingView」として、直接ビューを取得して調べるということも可能になります。
またDrawingViewのその他プロパティ/メソッドを使えばそのほかの情報も取得することができるのでいろいろ試してみてください。