Джерело
Кілька місяців тому ми просили допомогти в карколомному розфарбовуванні деталей у SolidWorks. На жаль, доки не з’явиться програма, що дає змогу застосувати випадковий колір до деталі, яку Ви вставляєте в збірку, вони всі матимуть, напрочуд, одноманітний тьмяний колір. Що ж це за диверсія з боку світу тривимірного моделювання, в якому ми хочемо жити. Чом так? Ми хочемо Колірів!

Ми отримали багато чудових варіантів. Однак найкращий варіант належить Guilherme C. Webster, він надіслав варіант, у якому можна додавати кольори не тільки до компонентів збірки, а й до тіл у багатотільній деталі. Rock’n’ROLL.
Чудово Guilherme, і величезне спасибі всім, хто взяв участь в обговоренні. Якщо Ви з якоїсь причини пропустили все дійство, що розгорнулося в коментарях до першого допису, і є прикладом чудової майстерності в складанні макросів (macro hackin’ fun), не впадайте у відчай. Нижче Ви можете подивитися приклад роботи макроса і власне сам макрос, який Ви можете завантажити і програти (запустити) самостійно. Як Ви можете бачити, він працює навіть із віртуальними компонентами. каааайф. 😉

Збірка з віртуальними компонентами до застосування макросу. (Ви можете подивитися повний варіант зображення)

Збірка з віртуальними компонентами після застосування прикрашального макроса.

Багаточисельна деталь перед застосуванням макросу.

Багаточисельна деталь після застосування розфарбовувального макросу.
Нижче подано код, якщо Вам більше подобається копіпаст.
Sub main()
Dim swApp As SldWorks.SldWorksDim swModel As SldWorks.ModelDoc2Dim swElement As ObjectDim vElementArr As VariantDim vElement As VariantDim vMatProp As Variant
Set swApp = Application.SldWorksSet swModel = swApp.ActiveDoc
vMatProp = swModel.MaterialPropertyValues
'Get all elementsIf swModel.GetType = swDocPART ThenvElementArr = swModel.GetBodies2(swAllBodies, False)
For Each vElement In vElementArrSet swElement = vElementRandomizevMatProp(0) = Rnd 'RedvMatProp(1) = Rnd 'GreenvMatProp(2) = Rnd 'BluevMatProp(3) = Rnd / 2 + 0.5 'AmbientvMatProp(4) = Rnd / 2 + 0.5 'DiffusevMatProp(5) = Rnd 'SpecularvMatProp(6) = Rnd * 0.9 + 0.1 'ShininessswElement.MaterialPropertyValues2 = vMatPropNext
ElseIf swModel.GetType = swDocASSEMBLY ThenvElementArr = swModel.GetComponents(False)
For Each vElement In vElementArrSet swElement = vElementRandomizevMatProp(0) = Rnd 'RedvMatProp(1) = Rnd 'GreenvMatProp(2) = Rnd 'BluevMatProp(3) = Rnd / 2 + 0.5 'AmbientvMatProp(4) = Rnd / 2 + 0.5 'DiffusevMatProp(5) = Rnd 'SpecularvMatProp(6) = Rnd * 0.9 + 0.1 'ShininessswElement.MaterialPropertyValues = vMatPropNext
ElseIf swModel.GetType = swDocDRAWING ThenMsgBox ("You can only apply random colors to part bodies or assembly components.")Exit Sub
End If
'Redraw to see new colorswModel.GraphicsRedraw2
End Sub
Ну і якщо Вам більше подобається завантажувати, нижче є посилання (посилання на вихідний сайт). Просто скачайте, розпакуйте і запустіть на виконання через панель інструментів для макросів (macro toolbar) у Вашому SolidWorks, виконувати макрос потрібно або за відкритої збірки, або в багаточисельності деталі …
multi-color.zip
Ще раз спасибі всім! Якщо хочете щось додати – пишіть у коментах!

Одна відповідь до “Перетвори свою збірку в SolidWorks’і на веселку. Готовий макрос для розфарбовування”
скомпилированная программа, с аналогичным функционалом, и объяснением как она создавалась: http://streamdown.blogspot.ru/2013/03/blog-post.html