VBAで寸法線のシンボル(矢印)を変更する方法|CATIAマクロの作成方法
今回は「お問い合わせ」より頂いた内容です。
送って頂いた内容は以下のようなマクロです。
CATIA Drawingの“寸法線のシンボルを「開いた矢印」から「塗りつぶし円」、
「塗りつぶし円」から「開いた矢印」のように順次、切り替わる”ように
マクロで操作することは可能でしょうか?(どちらの矢印が変わるのか分からないため)
今回はお問い合わせ頂いた内容に合わせて寸法線のシンボルを変更しますが、本ページの内容さえ理解できれば自分の好きなシンボルに変更することも可能になります。
マクロの機能
今回作成したマクロは『選択した寸法線のシンボルを順に変換するマクロ』です。
同じ寸法線をクリックするたびに上図のようにシンボルを変更していきます。
具体的な機能は以下のとおりです。
・選択した寸法線のシンボルによって以下の変更を行う(上図の通り)
「開いた矢印」「開いた矢印」の場合は「開いた矢印」「塗りつぶし円」に変更
「開いた矢印」「塗りつぶし円」の場合は「塗りつぶし円」「開いた矢印」に変更
「塗りつぶし円」「開いた矢印」の場合は「開いた矢印」「開いた矢印」に変更
今回は選択した寸法線のみに対応させていますが、サンプルコードさえ理解できればまとめてシンボルを変更することも可能になります。
サンプルコード
サンプルコードは下記の通りです。
実行後に選択した寸法線に対して、シンボルの変更が行われます。
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 |
Sub CATMain() 'アクティブドキュメント確認 If TypeName(CATIA.ActiveDocument) <> "DrawingDocument" Then MsgBox "CATDrawingのみ対応のマクロです。" Exit Sub End If 'アクティブドキュメント定義 Dim doc As DrawingDocument Set doc = CATIA.ActiveDocument 'Selection定義 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 DrwDim As DrawingDimension Set DrwDim = sel.Item(1).Value '寸法線のシンボル(矢印)を取得 Dim DrwDimLine As DrawingDimLine Set DrwDimLine = DrwDim.GetDimLine Dim DrwDimLineSymb1 As CatDimSymbols Dim DrwDimLineSymb2 As CatDimSymbols DrwDimLineSymb1 = DrwDimLine.GetSymbType(1) DrwDimLineSymb2 = DrwDimLine.GetSymbType(2) 'シンボル変更 If DrwDimLineSymb1 = catDimSymbOpenArrow And _ DrwDimLineSymb2 = catDimSymbOpenArrow Then Call DrwDimLine.SetSymbType(1, catDimSymbOpenArrow) Call DrwDimLine.SetSymbType(2, catDimSymbFilledCircle) ElseIf DrwDimLineSymb1 = catDimSymbOpenArrow And _ DrwDimLineSymb2 = catDimSymbFilledCircle Then Call DrwDimLine.SetSymbType(1, catDimSymbFilledCircle) Call DrwDimLine.SetSymbType(2, catDimSymbOpenArrow) ElseIf DrwDimLineSymb1 = catDimSymbFilledCircle And _ DrwDimLineSymb2 = catDimSymbOpenArrow Then Call DrwDimLine.SetSymbType(1, catDimSymbOpenArrow) Call DrwDimLine.SetSymbType(2, catDimSymbOpenArrow) End If End Sub |
コード解説
アクティブドキュメント確認
1 2 3 4 5 |
'アクティブドキュメント確認 If TypeName(CATIA.ActiveDocument) <> "DrawingDocument" Then MsgBox "CATDrawingのみ対応のマクロです。" Exit Sub End If |
まず、はじめにアクティブドキュメントの定義をします。
今回のマクロはCATDrawingでのみ有効なものなので、アクティブドキュメントがCATDrawing以外の場合はTypeName関数を使った条件分岐でマクロを終了するようにしています。
アクティブドキュメント/Selectionの定義
1 2 3 4 5 6 7 8 |
'アクティブドキュメント定義 Dim doc As DrawingDocument Set doc = CATIA.ActiveDocument 'Selection定義 Dim sel 'As Selection Set sel = doc.Selection sel.Clear |
アクティブドキュメントとSelectionの定義を行います。
Selectionの定義の際は「As Selection」と定義せずに、Variant型で定義をします。
これは以降で「SelectElement2メソッド」を利用できるようにするためです。
ユーザー選択
1 2 3 4 5 6 7 8 9 10 11 12 13 |
'ユーザー選択 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 DrwDim As DrawingDimension Set DrwDim = sel.Item(1).Value |
「SelectElement2メソッド」を使ってユーザーに寸法線を選択させます。
(SelectElement2の詳しい使い方は上記リンクページを参照下さい)
このとき選択された寸法線は変数「DrwDim」に格納します。
寸法線のシンボル(矢印)を取得
1 2 3 4 5 6 7 8 |
'寸法線のシンボル(矢印)を取得 Dim DrwDimLine As DrawingDimLine Set DrwDimLine = DrwDim.GetDimLine Dim DrwDimLineSymb1 As CatDimSymbols Dim DrwDimLineSymb2 As CatDimSymbols DrwDimLineSymb1 = DrwDimLine.GetSymbType(1) DrwDimLineSymb2 = DrwDimLine.GetSymbType(2) |
「DrwDim」(選択された寸法線)のシンボルを取得します。
寸法線のシンボルを取得するにはまず「DrawingDimLineオブジェクト」を取得する必要があります。「DrawingDimLineオブジェクト」を取得するには「DrawingDimensionオブジェクト」の「GetDimLineメソッド」を使い以下のように書きます。
Dim DrwDimLine As DrawingDimLine
Set DrwDimLine = DrawingDimensionオブジェクト.GetDimLine
次に今取得した「DrawingDimLineオブジェクト」の「GetSymbTypeメソッド」を使って、以下のように書くことでシンボルを取得することができます。
Dim DrwDimLineSymb As CatDimSymbols
DrwDimLineSymb = DrawingDimLineオブジェクト.GetSymbType(Index)
1つ目のシンボルを取得したい場合は Index に「1」を、
2つ目のシンボルを取得したい場合は Index に「2」を、
引出線のシンボルを取得したい場合は Index に「3」を入力します。
「GetSymbTypeメソッド」で取得できる値は下記ページを参照下さい。
英語ですがどの文字列がどのシンボルのことを表しているかは何となくわかると思います。
r1 Enumeration CatDimSymbols – CATIADOC
シンボル変更
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
'シンボル変更 If DrwDimLineSymb1 = catDimSymbOpenArrow And _ DrwDimLineSymb2 = catDimSymbOpenArrow Then Call DrwDimLine.SetSymbType(1, catDimSymbOpenArrow) Call DrwDimLine.SetSymbType(2, catDimSymbFilledCircle) ElseIf DrwDimLineSymb1 = catDimSymbOpenArrow And _ DrwDimLineSymb2 = catDimSymbFilledCircle Then Call DrwDimLine.SetSymbType(1, catDimSymbFilledCircle) Call DrwDimLine.SetSymbType(2, catDimSymbOpenArrow) ElseIf DrwDimLineSymb1 = catDimSymbFilledCircle And _ DrwDimLineSymb2 = catDimSymbOpenArrow Then Call DrwDimLine.SetSymbType(1, catDimSymbOpenArrow) Call DrwDimLine.SetSymbType(2, catDimSymbOpenArrow) End If |
最後に、取得したシンボル別に新たなるシンボルへの変更を行います。
シンボルの変更は「DrawingDimLineオブジェクト」の「SetSymbTypeメソッド」を使って以下のように書きます。
Call DrawingDimLineオブジェクト.SetSymbType (Index , SymbolType)
Indexには「GetSymbTypeメソッド」のときと同じく、変更するシンボルが 1つ目のシンボル場合は「1」、2つ目のシンボル場合は「2」、引出線のシンボルの場合は「3」を入力します。
SymbolTypeも同様に「GetSymbTypeメソッド」で取得できる値(文字列)を入力します。
(参考:r1 Enumeration CatDimSymbols – CATIADOC)
たとえば「開いた矢印」に変更したい場合は「catDimSymbOpenArrow」を入力します。
まとめ
今回はVBAで寸法線のシンボル(矢印)を変更する方法としてサンプルコードの解説を行いました。
本マクロで重要なのは「DrawingDimLineオブジェクト」と、
同オブジェクトの「GetSymbTypeメソッド」と「SetSymbTypeメソッド」の2つだけです。
今回取得した「DrawingDimLineオブジェクト」のプロパティ/メソッドを使うことで、シンボルだけでなく寸法線の色や線幅などを変更することもできるので、是非いろいろ試してみて下さい。