テキストボックスを一括で回転するマクロ|CATIAマクロの作成方法
今回の記事はマクロ案募集でいただいた内容です。
送って頂いた内容は以下のようなマクロです。
2D図面に挿入したテキストを90度回転させて、方向を垂直にするマクロ
ドラフティングワークベンチでのマクロもパートデザイン/GSDワークベンチでのマクロと作成の流れは同じです。ただ使うオブジェクトに聞きなじみのないものも出てくるかもしれないので『Infrastructure Automation Objects』を使って適宜確認しながら進めていきましょう。
作成するマクロの内容
今回作成するマクロは「ドラフティングワークベンチで選択しているテキストボックスをすべて90度回転させるマクロ」です。
マクロの完成イメージとしては以下のような感じです。
テキストボックス以外を選択しても実行可能なマクロになっているので、複数選択が非常にやりやすいマクロになっています。
※回転中心はテキストボックスのアンカーポイント
・テキストボックス以外のオブジェクトを選択していても実行可能
・(ドラフティングワークベンチ以外で実行すると注意のメッセージを表示)
・(何も選択していない状態で実行すると注意のメッセージを表示)
完成コード
マクロの完成コードは以下のとおりです。
処理の流れは「テキストボックスのプロパティを開き、角度を90°に変更するという手動でもできる操作」を繰り返し行うようにしただけの単純な内容となっています。
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 |
Sub CATMain() If TypeName(CATIA.ActiveDocument) <> "DrawingDocument" Then MsgBox "このマクロはCATDrawing専用です。" & vbLf & _ "ドラフティングワークベンチに切り替えて実行してください。" Exit Sub End If Dim DWGDOC As DrawingDocument Set DWGDOC = CATIA.ActiveDocument Dim SEL As Selection Set SEL = DWGDOC.Selection If SEL.Count = 0 Then MsgBox "回転させたいテキストボックスを選択してから実行してください。" Exit Sub End If Dim TXTCou As Integer TXTCou = 0 Dim i As Integer For i = 1 To SEL.Count Dim SELTXT Set SELTXT = SEL.Item(i).Value If TypeName(SELTXT) = "DrawingText" Then SELTXT.Angle = 90 TXTCou = TXTCou + 1 End If Next i If TXTCou = 0 Then MsgBox "テキストボックスが選択されていません。" Else MsgBox "完了しました。" & vbLf & _ TXTCou & "個のテキストボックスを回転しました。" End If End Sub |
コード解説
ここでは上記マクロコードのいくつかの部分を抜粋して解説していきます。
※マクロの処理の大まかな流れは「目次」に書かれている他のマクロ例とほとんど同じなので、それらマクロも参考にしてみてください。
ワークベンチの確認
ワークベンチ確認のためにマクロの初めに以下のようなコードを書いておきます。
このコードにより、ドラフティングワークベンチ以外でこのマクロを実行したときにエラーを発生させずに、ワークベンチ変更の旨を伝えるメッセージを表示することができます。
If TypeName(CATIA.ActiveDocument) <> “DrawingDocument” Then
MsgBox “このマクロはCATDrawing専用です。” & vbLf & _
”ドラフティングワークベンチに切り替えて実行してください。”
Exit Sub
End If
「TypeName()」というのは()内のオブジェクトのタイプ名を取得するためのコードです。
上記のコードの場合「TypeName(CATIA.ActiveDocument)」と書いているので、これはアクティブドキュメントのドキュメントのタイプを取得しています。
つまり上記のコードはアクティブドキュメントのタイプが「DrawingDocument」(ドラフティングワークベンチ)でない場合にIf文内の処理を行うという内容になっています。
テキストボックスの回転
テキストボックスの回転は「DrawingTextオブジェクト」の「Angleプロパティ」を使用します。
For i = 1 To SEL.Count
Dim SELTXT
Set SELTXT = SEL.Item(i).Value ‘ i 番目に選択したものをSELTXTに代入
If TypeName(SELTXT) = “DrawingText” Then ‘SELTXTがテキストボックスの場合
SELTXT.Angle = 90 ‘SELTXTの角度を90に変更
End If
Next i
処理の流れとしてはまず「Selectionオブジェクト」を使って選択しているオブジェクトをすべて取得します。
次に選択したものから順にオブジェクトのタイプを確認していきます。
これはさきほどやったワークベンチの確認と同じく「TypeName()」を使います。
タイプが「DrawingText」(テキストボックス)の場合に角度プロパティを「90」に変更するという操作を行い、それ以外のタイプの場合は何も処理を行いません。
まとめ
今回はテキストボックスを90°回転するマクロの紹介でした。
今回重要なのはテキストボックスの角度を変更する「SELTXT.Angle = 90」の一文です。
それ以外のコードはエラーを出ないようにしたり、利便性を上げるためのコードなので最悪なくてもいいコードもいくつか書かれています。コードを消したり追加したりして自分に合ったマクロにしてみて下さい。
DrawingTextオブジェクトでは今回のように角度を変えるだけでなく、テキスト文を変更したり、テキストボックスの位置を変更したりすることもできます。ぜひ他のプロパティやメソッドもいろいろ試してみましょう。
(時間ができ次第、DrawingTextオブジェクトの詳細ページも作成予定です)
CATIAマクロを本気で勉強するなら