R値別にフィレットに色付けするマクロ|CATIAマクロの作成方法
今回の記事は「お問い合わせ」でいただいた内容です。
送って頂いた内容は以下のようなマクロです。
R値別にフィレットに色を付けるマクロ
たとえばフィレットがR2のときは赤色、R3のときは青色、R4のときはピンク色を付ける
今回のマクロは「Selectionオブジェクト」と「VisPropertySetオブジェクト」を使用しています。
どちらも上記リンク先のページで詳しく解説しているので、あわせてご確認ください。
作成するマクロの内容
今回作成するマクロは先にも述べているとおり「R値別にフィレットに色を付けるマクロ」です。
マクロの機能としては要望どおりの「フィレットがR2のときは赤色、R3のときは青色、R4のときはピンク色を付ける」というものになっています。
※ページ後方では[R値]と[色]を変更することのできるマクロも紹介しています。
マクロの完成イメージとしては以下のような感じです。
※パートデザインワークベンチで作成されたフィレットにのみ有効
・徐変フィレット、フィレット以外で作成されたR形状には非対応
エッジフィレットにのみ対応していると思ってもらえれば大丈夫です!
完成コード
マクロの完成コードは以下のとおりです。
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 63 |
Sub CATMain() On Error Resume Next Dim SEL As Selection Set SEL = CATIA.ActiveDocument.Selection Dim VPS As VisPropertySet Set VPS = SEL.VisProperties '色を変えるのに必要なVisPropertySetを用意 SEL.Clear SEL.Search ("パート・デザイン.フィレット,all") 'パート・デザインワークベンチのフィレットをすべて検索&選択 Dim SELCount As Integer SELCount = SEL.Count 'フィレットの個数を代入 If SEL.Count = 0 Then MsgBox "現在の形状にはフィレットが使われていません。" Exit Sub End If Dim i As Integer For i = 1 To SELCount Dim SELFillet 'As Fillet Set SELFillet = SEL.Item(i).Value 'ツリーの上からi番目のフィレットをSELFilletに代入 If TypeName(SELFillet) <> "VarRadEdgeFillet" Then '徐変フィレットは無視する Dim FilletR As Single FilletR = SELFillet.Radius.Value 'SELFillet内にあるフィレットのR値を取得 If FilletR = 2 Then 'R値が「2」の場合 SEL.Clear SEL.Add SELFillet VPS.SetRealColor 255, 0, 0, 1 '赤色(RGB値を(255,0,0))に変更 SEL.Search ("パート・デザイン.フィレット,all") ElseIf FilletR = 3 Then 'R値が「3」の場合 SEL.Clear SEL.Add SELFillet VPS.SetRealColor 0, 128, 255, 1 '青色(RGB値を(0,128,255))に変更 SEL.Search ("パート・デザイン.フィレット,all") ElseIf FilletR = 4 Then 'R値が「4」の場合 SEL.Clear SEL.Add SELFillet VPS.SetRealColor 255, 0, 255, 1 'ピンク色(RGB値を(255,0,255))に変更 SEL.Search ("パート・デザイン.フィレット,all") Else End If End If Next i SEL.Clear MsgBox "完了しました" End Sub |
※CATIAの操作環境が日本語のもののみに対応しています
コード解説
上記のマクロコードでは以下のような流れで処理が行われています。
一言でまとめると「ツリーの上にあるフィレットから順にR値を確認していき、R2のときは赤色、R3のときは青色、R4のときはピンク色にそれぞれ色付けする」という処理を行っています。
以下では今回のマクロの特に重要なコードを解説していきます。
他のマクロと同じなのでそれらのページもぜひ見てみて下さいね!
ツリーの上から i 番目のフィレットとそのR値を変数にする
以下のコードをFor~Nextループ内(カウント変数 i )に入れることで、ツリーの上にあるフィレットから順にSELFilletに代入していきます。
Dim SELFillet
Set SELFillet = SEL.Item(i).Value ‘上から i 番目のフィレットをSELFilletに代入
次に以下のコードでSELFilletに入っているフィレットのR値をFilletRに代入しています。
Dim FilletR As Single
FilletR = SELFillet.Radius.Value ‘SELFilletのR値をFilletRに代入
この「SELFillet」と「FilletR」、2つの変数を使ってフィレットに色付けしていきます。
R値別にフィレットに色を付ける
任意のオブジェクトに色を付けるには「VisPropertySetオブジェクト」を利用します。
VisPropertySetオブジェクトは選択状態になっているオブジェクトの色を変更することができます。
VisPropertySetオブジェクトを使うにはまず以下のように書いて定義しておく必要があります。
(今回のマクロのコードでは初めの方で定義しています)
Dim SEL As Selection
Set SEL = CATIA.ActiveDocument.Selection
Dim VPS As VisPropertySet
Set VPS = SEL.VisProperties
ここで定義したVPSという変数を使って以下のように書くことで、選択状態のオブジェクトの色を変更することができます。(詳しくは「VisPropertySetオブジェクト」参照)
VPS.SetRealColor R, G, B, 1 ‘RGB値を入力
今回のマクロのコードでは以下のように使っています。
以下のコードをFilletRを使ってR値別に条件分岐させることで、各フィレットに色付けをしています。
If FilletR = 2 Then ‘R値が「2」の場合、以下の処理を行う
SEL.Clear ‘選択状態のものをすべて解除
SEL.Add SELFillet ‘SELFilletを選択状態にする
VPS.SetRealColor 255, 0, 0, 1 ‘選択状態のオブジェクトの色をRGB(255,0,0)に変更
SEL.Search (“パート・デザイン.フィレット,all”) ‘ドキュメント内のフィレットをすべて選択
より柔軟性のあるマクロにする
マクロの多くはユーザーが決めることのできるある程度の自由度が必要になってきます。
上記で紹介したマクロもいまのままでは、決められたR値のフィレットに決められた色を付けることしかできません。このままではマクロとしてあまり有効であるとはいえません。
というわけで上記のコードを使った、よりフレキシブルに対応できるマクロも作成しました。
上記で紹介したマクロの機能に、色とR値を任意で指定することができるような機能を追加しました。
イメージとしては以下のような操作をすることができます。
※パートデザインワークベンチで作成されたフィレットにのみ有効
・徐変フィレット、フィレット以外で作成されたR形状には非対応
・テキストボックスを空白にすることで対象のフィレットを減らすことができる
このマクロのコードは解説するとかなり長くなってしまうので割愛します。
以下でマクロファイルをダウンロードすることができるので、どのように作られているのか気になる方はダウンロードしてコードを確認してみて下さい。
マクロファイルをダウンロード
ダウンロードしたらzipを解凍し、その中にある「SetColorFillet.catvba」をCATIAに読み込みます。
[マクロライブラリー]ウィンドウの[既存ライブラリーの追加…]をクリックすることで読み込むことができます。
このファイルには「モジュール1」「Userform1」「Userform2」が入っています。
マクロを実行するには「モジュール1」を実行してください。
※実行できるようにはなっていますが、あまりスマートなコードにはなっていません。
また、ある程度のエラーへの対応はしていますが、操作の仕方によっては予期せぬ動きをする可能性があります。あくまでもマクロ勉強の参考程度にご利用ください。
まとめ
今回のマクロの処理の内容は「フィレットを選択し、色を付ける」という手作業でも行うこともできる操作をループ文を使って行っているだけです。
ただ、本文中でも説明したとおりマクロの使用用途によってはある程度の自由度が必要になってきます。はじめのうちは思った通りの単純な操作ができるマクロを作成できればいいですが、最終的にはユーザーファーストなマクロの作成を目標に勉強をしていくといいです。
CATIAマクロを本気で勉強するなら