GrabCADなどからダウンロードした3Dデータ(STEP、IGES、Parasolid等)や、人からもらったデータで、複数部品が全部同じ色になっていて見にくいという時があったりします。
1部品ずつ手動で外観の色を変更すれば良いのですが、時間もかかりますし面倒ですよね。
色々調べたところ、Solidworksのマクロ機能を使えば簡単にさくっと複数部品の色を一括で変更できるという事がわかりました。
方法を書いておこうと思います。
なお、記事中のCADはSolidworks2017ですが、他バージョンでも似たようなものかなと思います。
Solidworksでアセンブリ時に複数部品の外観色を一括で変更する方法【マクロ使用】実践編
↑例えば、こんなアセンブリデータがあったとします(ちなみにですが、これは自分がDIY用に作ったスピーカーボックスのデータです)。
部品ごとに色が分かれてないので、見にくいですね。
これを一括で部品ごとに異なる色にしてみましょう。
マクロファイルをダウンロード
1からマクロを書くのは大変です。
調べてみたら海外の記事に私の求めるマクロが見つかりましたので、こちらを使わせてもらうことにします。
参考Paint A Rainbow On Your SolidWorks Assembly. Multi-Colored Macro Follow-up. – SolidSmack
まず、上記の記事の下の方にあるリンクから「multi-color.zip」というファイルをダウンロードし、zipファイルを開きます。
multi-color.swpというファイルが入っています。
これがSolidworksで使えるマクロのファイルです。
マクロを実行し、複数部品に異なる色を一括でつける
色を変更したいモデルをSolidworksで開いておきます。
「ツール>マクロ>実行」と進み、先ほどダウンロードしたmulti-color.swpのファイルを選択します。
部品の外観色が自動で一括変更された事がわかります。
どうもランダムで塗られる様です。
より詳細を知りたい人は、あとで紹介するコードを読み込むとよいでしょう。
マクロファイルの中身のコードを見る方法・編集する方法
本文は上記の部分で終わりですが、せっかくなのでマクロファイルの中身も見てみてみましょう。
「ツール>マクロ>編集」と進み、multi-color.swpのファイルを開きます。
すると、ファイルの中身のコードが見れます。
ここで編集もできますので、マクロがいじれる方はカスタマイズも可能でしょう。
元の英語記事が削除されてしまったら困るので、一応コードも下記に引用させてもらっておきます。
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swElement As Object
Dim vElementArr As Variant
Dim vElement As Variant
Dim vMatProp As VariantSet swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
vMatProp = swModel.MaterialPropertyValues‘Get all elements
If swModel.GetType = swDocPART Then
vElementArr = swModel.GetBodies2(swAllBodies, False)For Each vElement In vElementArr
Set swElement = vElement
Randomize
vMatProp(0) = Rnd ‘Red
vMatProp(1) = Rnd ‘Green
vMatProp(2) = Rnd ‘Blue
vMatProp(3) = Rnd / 2 + 0.5 ‘Ambient
vMatProp(4) = Rnd / 2 + 0.5 ‘Diffuse
vMatProp(5) = Rnd ‘Specular
vMatProp(6) = Rnd * 0.9 + 0.1 ‘Shininess
swElement.MaterialPropertyValues2 = vMatProp
NextElseIf swModel.GetType = swDocASSEMBLY Then
vElementArr = swModel.GetComponents(False)For Each vElement In vElementArr
Set swElement = vElement
Randomize
vMatProp(0) = Rnd ‘Red
vMatProp(1) = Rnd ‘Green
vMatProp(2) = Rnd ‘Blue
vMatProp(3) = Rnd / 2 + 0.5 ‘Ambient
vMatProp(4) = Rnd / 2 + 0.5 ‘Diffuse
vMatProp(5) = Rnd ‘Specular
vMatProp(6) = Rnd * 0.9 + 0.1 ‘Shininess
swElement.MaterialPropertyValues = vMatProp
NextElseIf swModel.GetType = swDocDRAWING Then
MsgBox (“You can only apply random colors to part bodies or assembly components.”)
Exit SubEnd If
‘Redraw to see new color
swModel.GraphicsRedraw2End Sub
さいごに
マクロが使いこなせるともっと便利になりますね。
日本語記事だとあまり出て来ませんが、英語で検索すると便利そうなマクロもポツポツ見つかりますので、また良さそうなものが見つかれば紹介したいと思います。
コメント