Исходник
Пару месяцев назад мы просили помочь в сногсшибательной раскраске деталей в SolidWorks. К сожалению пока не появится программа позволяющая применить случайный цвет к детали, которую Вы вставляете в сборку, они все будут иметь, на удивление, однообразный тусклый цвет. Что ж это за диверсия со стороны мира трехмерного моделирования, в котором мы хотим жить. Почему так? Мы хотим Цвет!
Пару месяцев назад мы просили помочь в сногсшибательной раскраске деталей в 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 VariantSet swApp = Application.SldWorksSet swModel = swApp.ActiveDocvMatProp = 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 = vMatPropNextElseIf 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 = vMatPropNextElseIf swModel.GetType = swDocDRAWING ThenMsgBox ("You can only apply random colors to part bodies or assembly components.")Exit SubEnd If'Redraw to see new colorswModel.GraphicsRedraw2End Sub
Ну и если Вам больше нравится скачивать, ниже есть ссылка (ссылка на исходный сайт). Просто скачайте, распакуйте и запустите на выполнение через панель инструментов для макросов (macro toolbar) в Вашем SolidWorks, выполнять макрос нужно либо при открытой сборке либо в многотельной детали …
multi-color.zip
Еще раз спасибо всем! Если хотите что либо добавить – пишите в комментах!
Upd: скомпилированная программа, с аналогичным функционалом, и объяснением
как она создавалась: streamdown.blogspot.ru
скомпилированная программа, с аналогичным функционалом, и объяснением как она создавалась: http://streamdown.blogspot.ru/2013/03/blog-post.html
ОтветитьУдалить