Установка цвета для ComponentOccurrence

Автор Тема: Установка цвета для ComponentOccurrence  (Прочитано 3764 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн VladislavАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Приветствую! Уже писал о похожей проблеме, но сейчас
подход немного изменился.
Импортирую SAT-файл в Инвентор. Получаю ComponentOccurrence(или набор ComponentOccurrence).
Далее пытаюсь назначить им цвет. Но ничего не выходит.
Использую такой код
Код - C# [Выбрать]
  1. private void SetColorToOccurence(ComponentOccurrence occ) {
  2.             var subOccs = occ.SubOccurrences;
  3.             if (subOccs.Count == 0) {
  4.                 var SBs = occ.SurfaceBodies;
  5.                 for (int k = 1; k <= SBs.Count; k++)
  6.                 {                    
  7.                     var faceColors = SBs[k].GetFaceColors();
  8.                     for (int l = 1; l <= faceColors.Count; l++)
  9.                     {
  10.                         Color color = faceColors[l] as Color;
  11.                         color.Red = 0;
  12.                         color.Green = 255;
  13.                         color.Blue = 0;
  14.                     }
  15.                 }
  16.                 return;
  17.             }
  18.            
  19.             for (int i = 1; i < subOccs.Count; i++) {
  20.                 SetColorToOccurence(subOccs[i]);
  21.             }
  22. }

Что я делаю не так? Спасибо.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Установка цвета для ComponentOccurrence
« Ответ #1 : 12-08-2020, 08:30:37 »
Далее пытаюсь назначить им цвет. Но ничего не выходит.
Ну видимо потому что цвета граней по одиночке у детали в сборке нельзя перекрасить пользовательским инструментом. По всей видимости это не поддерживается.
По одиночки грани можно перекрашивать в самой детали.
Ну а если проблема просто перекрасить деталь целиком то можно это делать и в самой детали или только в сборке
Вот материал на эту тему:
https://modthemachine.typepad.com/my_weblog/2009/02/controlling-part-colors.html

Оффлайн VladislavАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Re: Установка цвета для ComponentOccurrence
« Ответ #2 : 12-08-2020, 17:25:15 »
Тогда два вопроса:
1) Сохранится ли новый цвет детали?
2) Могу ли я использовать свой цвет (задавая комбинацию Red, Green, Blue) или только предустановленные?
Спасибо.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Установка цвета для ComponentOccurrence
« Ответ #3 : 12-08-2020, 18:19:31 »
1) Сохранится ли новый цвет детали?
А почему нет.

2) Могу ли я использовать свой цвет (задавая комбинацию Red, Green, Blue)
Я повнимательнее посмотрел, похоже статья старая
вот пара рабочих кодов

Код - Visual Basic [Выбрать]
  1. Public Sub CreateSimpleColorAppearance()
  2.     Dim doc As PartDocument
  3.     Set doc = ThisApplication.ActiveDocument
  4.    
  5.      
  6.     ' Only document appearances can be edited, so that's what's created.
  7.    ' This assumes a part or assembly document is active.
  8.    Dim docAssets As Assets
  9.     Set docAssets = doc.Assets
  10.    
  11.     ' Create a new appearance asset.
  12.    Dim appearance As Asset
  13.     Set appearance = docAssets.Add(kAssetTypeAppearance, "Generic", _
  14.                                     "MyShinyRed", "My Shiny Red Color")
  15.    
  16.     Dim tobjs As TransientObjects
  17.     Set tobjs = ThisApplication.TransientObjects
  18.  
  19.  
  20.     Dim color As ColorAssetValue
  21.     Set color = appearance.Item("generic_diffuse")
  22.     color.Value = tobjs.CreateColor(255, 15, 15)
  23.    
  24.     Dim floatValue As FloatAssetValue
  25.     Set floatValue = appearance.Item("generic_reflectivity_at_0deg")
  26.     floatValue.Value = 0.5
  27.    
  28.     Set floatValue = appearance.Item("generic_reflectivity_at_90deg")
  29.     floatValue.Value = 0.5
  30.  
  31.    
  32.       Dim oAsset As Asset
  33.      Set oAsset = doc.AppearanceAssets("My Shiny Red Color")
  34.    doc.ActiveAppearance = oAsset
  35.    
  36.    
  37. End Sub
  38.  


Код - Visual Basic [Выбрать]
  1. Sub PartColor()
  2.     Dim oAsset As Asset
  3.     Dim oLib As AssetLibrary: Set oLib = ThisApplication.AssetLibraries("Autodesk Appearance Library")
  4.     Set oAsset = oLib.AppearanceAssets("Gold")
  5.     If ThisApplication.ActiveDocumentType = kPartDocumentObject Then
  6.         Dim oPart As PartDocument: Set oPart = ThisApplication.ActiveDocument
  7.         oPart.ActiveAppearance = oAsset
  8.     ElseIf ThisApplication.ActiveDocumentType = kAssemblyDocumentObject Then
  9.         Dim oAsm As AssemblyDocument: Set oAsm = ThisApplication.ActiveDocument
  10.         Set oAsset = oAsset.CopyTo(oAsm)
  11.         Dim oOcc As ComponentOccurrence
  12.         Set oOcc = oAsm.ComponentDefinition.Occurrences(1)
  13.         oOcc.appearance = oAsset
  14.     End If
  15. End Sub

Оффлайн VladislavАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Re: Установка цвета для ComponentOccurrence
« Ответ #4 : 13-08-2020, 13:55:48 »
О, большое спасибо! Попробую.