пятница, 13 августа 2010 г.

Преврати свою сборку в SolidWorks'е в радугу. Готовый макрос для расскраски

Исходник
Пару месяцев назад мы просили помочь в сногсшибательной раскраске деталей в SolidWorks. К сожалению пока не появится программа позволяющая применить случайный цвет к детали, которую Вы вставляете в сборку, они все будут иметь, на удивление, однообразный тусклый цвет. Что ж это за диверсия со стороны мира трехмерного моделирования, в котором мы хотим жить. Почему так? Мы хотим Цвет!
clip_image002
Мы получили много замечательных вариантов. Однако лучший вариант принадлежит Guilherme C. Webster он прислал вариант в котором можно добавлять цвета не только к компонентам сборки но и к телам в многотельной детали. Rock'n’ROLL.
Великолепно Guilherme, и огромное спасибо всем кто поучаствовал в обсуждении. Если Вы по какой-то причине пропустили все действо, что развернулось в комментах к первому сообщению, и является примером великолепного мастерства в составлении макросов (macro hackin’ fun), не отчаивайтесь. Ниже Вы можете посмотреть пример работы макроса и собственно сам макрос, который Вы можете скачать и проиграть (запустить) самостоятельно. Как Вы можете видеть, он работает даже с виртуальными компонентами. О, да. ;)
clip_image003
Сборка с виртуальными компонентами до применения макроса. (Вы можете посмотреть полный вариант изображения)
clip_image004
Сборка с виртуальными компонентами после применения разукрашивающего макроса.
clip_image005
Многотельная деталь перед применением макроса.
clip_image006
Многотельная деталь после применения раскрашивающего макроса.
Ниже представлен код, если Вам больше нравится копипаст.
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 Variant
Set 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
Next
ElseIf 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
Next
ElseIf swModel.GetType = swDocDRAWING Then
MsgBox ("You can only apply random colors to part bodies or assembly components.")
Exit Sub
End If
'Redraw to see new color
swModel.GraphicsRedraw2
End Sub
Ну и если Вам больше нравится скачивать, ниже есть ссылка (ссылка на исходный сайт). Просто скачайте, распакуйте и запустите на выполнение через панель инструментов для макросов (macro toolbar) в Вашем SolidWorks, выполнять макрос нужно либо при открытой сборке либо в многотельной детали …
clip_image008multi-color.zip
Еще раз спасибо всем! Если хотите что либо добавить – пишите в комментах! 

Upd: скомпилированная программа, с аналогичным функционалом, и объяснением как она создавалась: streamdown.blogspot.ru






1 комментарий:

  1. скомпилированная программа, с аналогичным функционалом, и объяснением как она создавалась: http://streamdown.blogspot.ru/2013/03/blog-post.html

    ОтветитьУдалить

Related Posts Plugin for WordPress, Blogger...
Rambler's Top100