CATDrawingで”ちどり溶接記号”を作成するマクロ|CATIAマクロの作成方法
今回の記事は「お問い合わせ」よりいただいた内容です。
送って頂いた内容は以下のようなマクロです。
今回のマクロは [溶接記号]を操作するための「DrawingWeldingオブジェクト」を使います。
プロパティ/メソッドは上記リンクページで解説しているのであわせて確認してみて下さい。
マクロの機能
今回作成したマクロはちどり溶接記号を作成するマクロです。
処理内容はページ冒頭の画像の通りです。
具体的な機能は以下のとおりです。
・新規の溶接記号は選択した溶接記号と同ビュー内に作成する
処理内容を見るとわかりますが既存の溶接記号に対して、新たな溶接記号を重ねるだけの処理をしています。これは溶接記号はどのような指示をしていたとしてもです。「この溶接指示がされている場合は、このマクロをキャンセルしたい」という場合は「DrawingWeldingオブジェクト」のプロパティ/メソッドでシンボルなどを取得して条件分岐させればOKです。
サンプルコード
マクロのコードは以下のとおりです。
マクロを実行したら溶接記号をクリックするだけです。
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 |
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 |
コード解説
アクティブドキュメントの定義
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 |
'ユーザー選択の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」)の親の親のオブジェクトを取得すればビューを定義することができます。
溶接記号を作成/配置
1 2 3 4 5 6 7 8 9 10 11 |
'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を新規作成するには下記のようなコードを書きます。
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に関しては本サイトで詳細ページをいくつか作っているので、溶接記号関連のマクロを作成する場合はそれらも参考にしてみて下さい。