Обновление физических свойств детали средствами VBA

Автор Тема: Обновление физических свойств детали средствами VBA  (Прочитано 6489 раз)

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

Оффлайн anton.gorschnevАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 3
Добрый день подскажите как обновить физические свойства материала в детали.
Заранее благодарен.

Далее описание проблемы.
При замене материала или размера по нажатию кнопки "Обновить"(выполняется процедура по передачи значения из формы в параметры и свойства активной детали) программа заменяет материал со всеми атрибутами (плотность соответствует выбранному материалу) но далее необходимо в ручную обновлять физические свойства. Как я понял проблема возникает из за того что в процедуре на ряду с заменой материала идет замена параметров (при тесте на болванке без замены параметров данная проблема отсутствует). Если в
настройках установить обновить физические свойства при сохранении детали а в процедуре раскоментировать сохранение детали, масса обновляется. Необходимо сделать тоже самое только без сохранения детали (подозреваю что то наподобие обновления стиля на чертеже).
 






Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
К сожалению скрины сохранены не качественно.
Если это VBA, то приаnачте свой файл с макросом который у вас есть default.ivb, ну или "причесаный" пример.
Подразумеваю, что то нужно обновить.

Отмечено как Решение anton.gorschnev 21-01-2019, 15:51:13

Оффлайн anton.gorschnevАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 3
Вопрос по обновлению массы решен (масса берется через ComponentDefinition ранее я  ее пытался получить из PropertySets)

Код - Visual Basic [Выбрать]
  1. 'Обновление значения массы
  2.    Dim oDef As PartComponentDefinition
  3.     Set oDef = oPart.ComponentDefinition
  4.     Dim oMassProps As MassProperties
  5.     Set oMassProps = oDef.MassProperties
  6.  
  7.      'восстановление "честной" массы
  8.     oMassProps.MassOverridden = False
  9.  
  10.      TextBox14.Value = Round(oMassProps.Mass, 2)

Но вопрос по обновлению физических свойств интересе (нашел обновление физ. свойств в  Apprentice).
« Последнее редактирование: 26-12-2018, 13:54:48 от Александр Ривилис »

Оффлайн vahrusha

  • ADN OPEN
  • Сообщений: 7
  • Карма: 0
Здравствуйте, уважаемые форумчане! Чтобы не плодить тем прошу помощи в данной теме.
Создается деталь, назначаются необходимые текстовые атрибуты в PropertySet. Также создается новый материал. Помогите, пожалуйста, назначить детали созданный материал. Материал появляется в физических свойствах, но замена с "Типовые" не происходит. Код ниже:

Код - vb.net [Выбрать]
  1. Dim inventorApp As Inventor.Application
  2. Dim oPart As PartDocument
  3.         oPart = inventorApp.Documents.Add(DocumentTypeEnum.kPartDocumentObject, inventorApp.FileManager.GetTemplateFile(DocumentTypeEnum.kPartDocumentObject))
  4.  
  5.         Dim oDTProps1 As PropertySet
  6.         oDTProps1 = oPart.PropertySets.Item("{F29F85E0-4FF9-1068-AB91-08002B27B3D9}")
  7.         Dim oDesignerProp1 As Inventor.Property
  8.         oDesignerProp1 = oDTProps1.ItemByPropId(PropertiesForSummaryInformationEnum.kCommentsSummaryInformation)
  9.         oDesignerProp1 = oDTProps1.Item("Title")
  10.         oDesignerProp1.Value = "Швеллер горячекатанный"
  11.  
  12. oPart.Materials.Add("Ст3сп", 7.85)
  13.  
  14.         Dim oDTProps2 As PropertySet
  15.         oDTProps2 = oPart.PropertySets.Item("{32853F0F-3444-11d1-9E93-0060B03C1CA6}")
  16.         Dim oDesignerProp2 As Inventor.Property
  17.         oDesignerProp2 = oDTProps2.ItemByPropId(PropertiesForDesignTrackingPropertiesEnum.kMaterialDesignTrackingProperties)          
  18.         oDesignerProp2 = oDTProps2.Item("Stock Number")
  19.         oDesignerProp2.Value = "12П"
  20.         oDesignerProp2 = oDTProps2.Item("Material")
  21.         oDesignerProp2.Value = "Ст3сп"



Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Материал не относится к свойствам типа PropertySet. Да там есть свойство с таким названием, там сам инвентор дублирует название выбранного материала.
И пытаться править название материала там это не правильно. Это свойство нужно использовать только "для чтения" в приложениях без инвентора.
Сам материал является специальным объектом и работать нужно именно с этим специальным объектом.
Самый простой пример:
Код - Visual Basic [Выбрать]
  1. Sub TB_Position()
  2.     Dim doc As PartDocument
  3.     Set doc = ThisApplication.ActiveDocument
  4.     doc.ActiveMaterial.DisplayName = "123"
  5. End Sub
  6.  

там еще есть понятие Ассеты, можно почитать в хэлпе или здесь
https://adndevblog.typepad.com/manufacturing/2013/07/inventor-2014-api-set-part-material.html

Вообще, там достаточно запутанная объектная модель с этими Ассетами.

Оффлайн anton.gorschnevАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 3
 Вот пример кода. На форуме есть тема по созданию нового материала, я ей пользовался при написании кода.


Код - vb.net [Выбрать]
  1. Dim oApp As Inventor.Application
  2.         Dim oDoc As Inventor.Document
  3.         Dim oPartDoc As Inventor.PartDocument  '.Document
  4.         Dim oCompDef As PartComponentDefinition
  5.         Dim invVBA As InventorVBAMember
  6.         Dim oParameters As Parameters
  7.         Dim oClassMaterial As Parameter
  8.         'Dim ClassMaterial As String = ""
  9.         Dim oMaterial As Material
  10.         Dim oNewMaterial As Material
  11.         'Dim oMaterials As Materials
  12.         Dim x1 As Double = 0 'плотность
  13.         Dim x2 As Double = 0 'линейное расширение 10^-5 1/с
  14.         Dim x3 As Double = 0 'удельная теплоемкость Дж / [кг*К]
  15.         Dim x4 As Double = 0  'теплопроводность Вт/[м*K]
  16.         Dim x5 As Double = 0   'Прочность На Растяжение МРа
  17.         Dim x6 As Double = 0   'предел текучести МРа
  18.         Dim x7 As Double = 0    'Модуль Юнга ГРа
  19.         Dim x8 As Double = 0  'Модуль сдвига
  20.         Dim x9 As Double = 0  'коэфициент Пуансона (безразмерный)
  21.         ' Установка ссылки на документ детали
  22.         ' Предполагается, что документ детали активен.
  23.         oApp = GetObject(, "Inventor.Application")
  24.         oDoc = oApp.ActiveDocument
  25.         If oDoc.DocumentType = DocumentTypeEnum.kPartDocumentObject Then
  26.             oPartDoc = oApp.ActiveDocument
  27.             'MsgBox("из детали")
  28.         Else oPartDoc = oApp.ActiveEditObject
  29.             'MsgBox("из сборки")
  30.         End If
  31.         oCompDef = oPartDoc.ComponentDefinition
  32.  
  33.  
  34.         ' Получение преобразованных значений из ListBox3
  35.         For i = 0 To ListBox3.Rows.Count - 1
  36.             'MsgBox(ListBox3.Item(0, I).Value & "=" & ListBox3.Item(1, I).Value)
  37.             Try
  38.                 Select Case ListBox3.Item(4, i).Value
  39.                     Case 731
  40.                         x1 = parametr() / 1000 'плотность
  41.                     'MsgBox("плотность=" & x1)
  42.                     Case 733
  43.                         x2 = parametr()   'линейное расширение 10^-5 1/C
  44.                    ' MsgBox("линейное расширение=" & x2)
  45.                     Case 582749
  46.                         x3 = parametr()   'удельная теплоемкость Дж / [кг*К]
  47.                    ' MsgBox("удельная теплоемкость=" & x3)
  48.                     Case 582747
  49.                         x4 = parametr()   'теплопроводность Вт/[м*K]
  50.                     'MsgBox("теплопроводность=" & x4)
  51.                     Case 738
  52.                         x5 = parametr() / (10 ^ 6)  'Прочность На Растяжение МРа
  53.                     'MsgBox("Прочность На Растяжение=" & x5)
  54.                     Case 739
  55.                         x6 = parametr() / (10 ^ 6)     'предел текучести МРа
  56.                     'MsgBox("предел текучести=" & x6)
  57.                     Case 728
  58.                         x7 = parametr() / (10 ^ 9)   'Модуль Юнга ГРа
  59.                     'MsgBox("Модуль Юнга =" & x7)
  60.                     Case 730
  61.                         x8 = parametr() / (10 ^ 9)
  62.                         'MsgBox("Модуль сдвига =" & x8)
  63.  
  64.                 End Select
  65.             Catch
  66.                 MsgBox("Не читаемые свойства материала")
  67.                 Exit Sub
  68.             End Try
  69.         Next
  70.         If x7 <> 0 And x8 <> 0 Then
  71.             x9 = (x7 / (2 * x8)) - 1 'коэфициент Пуансона (безразмерный)
  72.         End If
  73.  
  74.         Try
  75.  
  76.             ' Зачистка колекции материалов перед созданием нового
  77.  
  78.  
  79.             oMaterial = oPartDoc.Materials.Item("Типовые")
  80.             oCompDef.Material = oMaterial
  81.  
  82.             For i3 = 1 To oPartDoc.MaterialAssets.Count
  83.  
  84.                 If oPartDoc.MaterialAssets.Item(i3).DisplayName = oCompDef.Material.Name Then
  85.  
  86.  
  87.                     If oPartDoc.MaterialAssets.Count = 1 Then
  88.                         Exit For
  89.                     End If
  90.                 Else
  91.                     oPartDoc.MaterialAssets.Item(i3).Delete()
  92.                     i3 = i3 - 1
  93.                 End If
  94.             Next
  95.  
  96.             ' Создание нового материала.
  97.             oNewMaterial = oPartDoc.Materials.Add(ListBox2.SelectedCells.Item(0).Value, x1)
  98.  
  99.         Catch
  100.  
  101.             MsgBox("При создании материала произошла ошибка, возможно в базе Ascon отсутствует значение плотности или деталь сохранена не в  активном проекте.")
  102.             FormAscon.ActiveForm.Close()
  103.             Exit Sub
  104.         End Try
  105.  
  106.  
  107.         ' Определите другие свойства материала
  108.         'Произвольно назначает первый стиль визуализации в коллекции стилей визуализации.
  109.         oNewMaterial.RenderStyle = oPartDoc.RenderStyles.Item("По умолчанию")
  110.         'линейное расширение 10^5м/м/с
  111.         oNewMaterial.LinearExpansion = x2
  112.         'удельная теплоемкость Дж / [кг*К]
  113.         oNewMaterial.SpecificHeat = x3
  114.         'теплопроводность Вт/[м*K]
  115.         oNewMaterial.ThermalConductivity = x4
  116.         'Прочность На Растяжение МРа
  117.         oNewMaterial.UltimateTensileStrength = x5
  118.         'предел текучести МРа
  119.         oNewMaterial.YieldStrength = x6
  120.         'Модуль Юнга ГРа
  121.         oNewMaterial.YoungsModulus = x7
  122.         'Модуль Сдвига мРа
  123.         'oNewMaterial.????? = x8
  124.         'коэфициент Пуансона (безразмерный)
  125.         oNewMaterial.PoissonsRatio = x9
  126.  
  127.         'присвоение созданного материала активной детали
  128.  
  129.         oCompDef.Material = oNewMaterial

Оффлайн vahrusha

  • ADN OPEN
  • Сообщений: 7
  • Карма: 0
anton.gorschnev, огромное человеческое спасибо! 4 дня убил...