Форум » Программирование в Autodesk Inventor|VBA, iPart, iFeature » Как назначить цвет детали? » Ответить

Как назначить цвет детали?

brigval: Как программно назначить ЦВЕТ детали в AI10?

Ответов - 8

Витек: Из Help'а Инвентора The Material object supports the RenderStyle property that allows you to define which render style is associated with a material. By default, the render style applied to a part is the render style associated with the material. The sample below gets a specific Material object and sets its render style. Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.ActiveDocument ' Get a specific material. Dim oMaterial As Material Set oMaterial = oPartDoc.Materials.Item("Aluminum-6061") ' Get a specific render style. Dim oRenderStyle As RenderStyle Set oRenderStyle = oPartDoc.RenderStyles.Item("Orange") ' Assign a render style. oMaterial.RenderStyle = oRenderStyle

Витек: Да , я бы еще добави перед Set oRenderStyle = oPartDoc.RenderStyles.Item("Orange") Dim oControlDef As ControlDefinition Set oControlDef = ThisApplication.CommandManager.ControlDefinitions.Item("AppRenderStyleComboCmd") oControlDef.Execute Что бы появился стандартный ComboBox ( если он уже есть в Tools'ах, то появиться его alias), где можно выбрать указателем цвета Инвентора ( As Material,.... и т.д).

brigval: >Витек Не получается. Когда мы назначаем цвет детали он в редакторе стилей делается активным. Я делал программно его активным в редакторе стилей, но на экране деталь не меняла свой цвет :(


Витек: Я так понимаю - нужно пробежаться по всей колекции материалов для активного документа (ipt ), найти активный в данный момент материал ( For Each oNewMaterial In oBMaterial) и для него выбрать свое рендеринг( цвет) Строчка: Set oNewMaterial = ListDoc.Materials.Add(Mater, Den) ListDoc.ComponentDefinition.Material = oNewMaterial Это для помещения в колекцию нового материала. Бывает наоборот , если поставить цвет Default , а потом менять материал , то цвет по мере изменения типа материала - Не меняется. Все остальное должно работать. Может функция UpdateFromGlobal() , если вы ее ипользуете, переобозначет ваши изменения? Мой код: Public ListDoc As PartDocument ..... Set ListDoc = ThisApplication.ActiveDocument ...... Public Sub CreateMaterial(Mater As String, Den As Double) ' имя материала, плотность ' Set a reference to the part document. ' This assumes a part document is active. ' Create a new material. Dim oNewMaterial As Material Dim oBMaterial As Materials Set oBMaterial = ListDoc.Materials For Each oNewMaterial In oBMaterial If oNewMaterial.Name Like Mater Then ' Если создаваемый материал уже есть , то только выбрать цвет мат. GoTo IsMat End If Next oNewMaterial Set oNewMaterial = ListDoc.Materials.Add(Mater, Den) ListDoc.ComponentDefinition.Material = oNewMaterial IsMat: Set oControlDef = ThisApplication.CommandManager.ControlDefinitions.Item("AppRenderStyleComboCmd") ' 'цвет oControlDef.Execute oControlDef.Enabled = True End Sub Бывает наоборот , если поставить цвет Default , а потом менять материал , то цвет по мере изменения типа материала - Не меняется. Все остальное должно работать. Может функция UpdateFromGlobal() , если вы ее ипользуете, переобозначет ваши изменения? Мой код: Public ListDoc As PartDocument ..... Set ListDoc = ThisApplication.ActiveDocument ...... Public Sub CreateMaterial(Mater As String, Den As Double) ' имя материала, плотность ' Set a reference to the part document. ' This assumes a part document is active. ' Create a new material. Dim oNewMaterial As Material Dim oBMaterial As Materials Set oBMaterial = ListDoc.Materials For Each oNewMaterial In oBMaterial If oNewMaterial.Name Like Mater Then ' Если создаваемый материал уже есть , то только выбрать цвет мат. GoTo IsMat End If Next oNewMaterial Set oNewMaterial = ListDoc.Materials.Add(Mater, Den) ListDoc.ComponentDefinition.Material = oNewMaterial IsMat: Set oControlDef = ThisApplication.CommandManager.ControlDefinitions.Item("AppRenderStyleComboCmd") ' 'цвет oControlDef.Execute oControlDef.Enabled = True End Sub

Витек: Тут я два раза части с кодом при ответе скопировал...извини.

Витек: brigval пишет: цитатаЯ делал программно его активным в редакторе стилей так я думаю нельзя , активным но не измененым ( присвоенным через Set для ListDoc.ComponentDefinition.Material )

brigval: У меня получилось. Твой самый первый пример из хелпа не включил следующие за ним несколько строк кода. Именно они и сработали. Спасибо, Витек.

exx: cсдраствуйте.Уменя трабл и я незнаю как его решить..... если взять "старый" парт участвующий в сборке то немогу изменить материал,их вообще нету(((( а если создать новый эскиз то все ОК...выбирай сколько хочеш.... помогите плз,т.к. надо нагрузки проверить а материал неназначен........



полная версия страницы