ビューの角度とスケールを取得するマクロ|CATIAマクロの作成方法

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

CATDrawingでマクロで図の“角度"と"スケール"を取得することは可能でしょうか? (クリックで画像拡大)

 

マクロの機能

今回作成したマクロは選択した寸法線を有するビューの角度とスケールを取得するマクロです。
取得確認として上画像のようにメッセージでそれぞれの値を表示するようになっています。

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

  マクロの機能まとめ ・選択した寸法線を有するビューの角度とスケールを取得する(表示する)
・角度とスケールは小数点以下第3位までの値を取得

 

サンプルコード

マクロのコードは以下のとおりです。
マクロを実行したら寸法線をクリックするだけです。

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

コード解説

アクティブドキュメントの定義

    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」にアクティブドキュメントを代入します。
  

ユーザー選択/ビュー定義

'ユーザー選択の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」)の親の親のオブジェクトを取得すればビューを定義することができます。
 

ビューの角度とスケールを取得

'ビューの角度とスケールを取得
    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」の数を変更してください)

 icon-edit 「2」と付いているプロパティ/メソッド CATIA VBAには「Scale2プロパティ」や「Count2プロパティ」「Item2メソッド」のように「2」のついたプロパティ/メソッドが用意されています。これとは別に「Scaleプロパティ」「Countプロパティ」「Itemメソッド」というような無印のものも存在しています。
  
「2」のついたプロパティ/メソッドはCATIAのバージョンアップ等の原因から、無印のプロパティ/メソッドを使ったときに何かしらの問題が発生したものに対して用意された新規のプロパティ/メソッドです。機能を一新してしまうと、これまで使われてい他ツールなどにも影響が出てしまうため、新たなプロパティ/メソッドとして搭載されているのです。
 
そのため基本的には「2」の付いているプロパティ/メソッドが用意されている場合はそちらを使うことが推奨されています
※本サイトでは2はほとんど無視してやっているので、気になる方は各自で修正して下さい。
 

まとめ

今回はちどり溶接指示を作成するマクロについての内容でした。

今回は寸法線を有するビューとしましたが、ビューさえ取得できてしまえば、角度とスケールを取得する方法は同じです。(ビューの取得方法が違うだけ)

つまりサンプルコードの「SelectElement2メソッド」のフィルターをそもそも「DrawingView」として、直接ビューを取得して調べるということも可能になります。

またDrawingViewのその他プロパティ/メソッドを使えばそのほかの情報も取得することができるのでいろいろ試してみてください。
 

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

 

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

2024年8月26日CATIA,CATIAマクロ