CATDrawingで”ちどり溶接記号”を作成するマクロ|CATIAマクロの作成方法

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

CATDrawingでマクロで“ちどり溶接記号”を作図することは可能でしょうか? (クリックで画像拡大)


今回のマクロは  [溶接記号]を操作するためのDrawingWeldingオブジェクトを使います。
プロパティ/メソッドは上記リンクページで解説しているのであわせて確認してみて下さい。

 

マクロの機能

今回作成したマクロはちどり溶接記号を作成するマクロです。
処理内容はページ冒頭の画像の通りです。

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

  マクロの機能まとめ ・選択した溶接記号に新規の溶接記号を重ね"ちどち溶接記号"を作成する
・新規の溶接記号は選択した溶接記号と同ビュー内に作成する

処理内容を見るとわかりますが既存の溶接記号に対して、新たな溶接記号を重ねるだけの処理をしています。これは溶接記号はどのような指示をしていたとしてもです。「この溶接指示がされている場合は、このマクロをキャンセルしたい」という場合はDrawingWeldingオブジェクトのプロパティ/メソッドでシンボルなどを取得して条件分岐させればOKです。

 

サンプルコード

マクロのコードは以下のとおりです。
マクロを実行したら溶接記号をクリックするだけです。

Option Explicit
Sub CATMain()

    If TypeName(CATIA.ActiveDocument) <> "DrawingDocument" Then
        MsgBox "CATDrawingのみ対応のマクロです。"
        Exit Sub
    End If
    
'アクティブドキュメント定義
    Dim doc As DrawingDocument
    Set doc = CATIA.ActiveDocument
    
    
'ユーザー選択のDrawingWeldingを定義
    Dim sel 'As Selection
    Set sel = doc.Selection

    Dim Filter
    Filter = Array("DrawingWelding")
    
    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 Weld1 As DrawingWelding
    Set Weld1 = sel.Item(1).Value
 

'ビュー定義
    Dim ActView As DrawingView
    Set ActView = Weld1.Parent.Parent
    
     
'DrawingWelding定義
    Dim Weld2 As DrawingWelding
    Set Weld2 = ActView.Weldings.Add(catNoneMainWelding, Weld1.x + 21.5, Weld1.Y)   '21.5は環境に合わせて微調整

    Weld2.Angle = 180
    
    On Error Resume Next
    Weld2.Leaders.Remove (Weld2.Leaders.Count)
    On Error GoTo 0

    Call Weld2.SetSymbol(catFilletWelding, catFirstWelding)

End Sub

コード解説

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

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

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

'ユーザー選択のDrawingWeldingを定義
    Dim sel 'As Selection
    Set sel = doc.Selection

    Dim Filter
    Filter = Array("DrawingWelding")
    
    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 Weld1 As DrawingWelding
    Set Weld1 = sel.Item(1).Value
 

'ビュー定義
    Dim ActView As DrawingView
    Set ActView = Weld1.Parent.Parent

つぎに"ちどり溶接"にするための既存の溶接記号をユーザーに選択させます。
ユーザー選択にはSelectElement2メソッドを使います。
フィルターにはDrawingWeldingオブジェクトを指定し溶接記号のみの選択としています。

ユーザー選択のDrawingWeldingを取得したら、その溶接記号のあるビューを定義します。
「DrawingWeldingオブジェクト」の親は「DrawingWeldingsオブジェクト」、そしてそのさらに親が「DrawingViewオブジェクト」となっています。つまり取得したDrawingWelding(上記コードでいう「Weld1」)の親の親のオブジェクトを取得すればビューを定義することができます。
 

溶接記号を作成/配置

'DrawingWelding定義
    Dim Weld2 As DrawingWelding
    Set Weld2 = ActView.Weldings.Add(catNoneMainWelding, Weld1.x + 21.5, Weld1.Y)   '21.5は環境に合わせて微調整

    Weld2.Angle = 180
    
    On Error Resume Next
    Weld2.Leaders.Remove (Weld2.Leaders.Count)
    On Error GoTo 0

    Call Weld2.SetSymbol(catFilletWelding, catFirstWelding)

最後に新規のDrwaingWeldingを作成し、引出線の削除、180°回転してユーザーが選択したDrawingWelding(Weld1)に重ねる用配置します。

DrawingWeldingを新規作成するには下記のようなコードを書きます。

 icon-code DrawingWelding追加 

Dim Weld2 As DrawingWelding
Set Weld2 = ActView.Weldings.Add(溶接シンボル, X座標, Y座標

溶接シンボルには作成する際の溶接記号を指示します。
シンボルに入力できる変数はDrawingWeldingオブジェクトでの列挙型変数を参照下さい。
ここではあとでシンボルを設定するため「catNoneMainWelding」(シンボル無し)としています。

X座標, Y座標には作成する座標を設定します。
ここではユーザーが選択した溶接指示のX、Y座標からX座標を少しずらした位置に指定しています。
(コード内の「21.5」を変更することで配置を微調整することができます)

作成したらあとは180°回転、引出線の削除、シンボル追加を行うだけです。
これらの処理はDrawingWeldingオブジェクトを解説しているのでそちらを参照下さい。

引出線の削除においてはエラーを無視する「On Error Resume Next」が必要になります。
これはCATIAのバグで引出線の削除時にエラーが発生するためです。(テキストの引出線も同じ)
エラーが発生しても引出線の削除自体は可能なので、一時的にエラーを無視させているだけです。

 

まとめ

今回はちどり溶接指示を作成するマクロについての内容でした。
基本的にはDrawingWeldingオブジェクトのプロパティ/メソッドで操作するだけの単純なマクロです。使いやすくするために元の溶接指示と位置リンクで紐づけたかったのですが、位置リンクに関してはテキスト「DrawingText」しか対応していなさそう(対応しているのかもしれませんが)なので諦めました。

DrawingWeldingに関しては本サイトで詳細ページをいくつか作っているので、溶接記号関連のマクロを作成する場合はそれらも参考にしてみて下さい。
 

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

 

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

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