Сообщество программистов Autodesk в СНГ

ADN Club => Inventor API => Тема начата: Vladislav от 04-06-2019, 14:04:16

Название: Изоляция сборок и деталей
Отправлено: Vladislav от 04-06-2019, 14:04:16
Добрый день.
Подскажите пожалуйста, как средствами Inventor API изолировать деталь или сборку.
То есть нужно получить результат, аналогичный использованию команды "Изолировать" контекстного меню.
Спасибо за информацию.
Название: Re: Изоляция сборок и деталей
Отправлено: xzenter от 04-06-2019, 14:27:30
Правило iLogic, которое необходимо запустить в сборке:

Код - vb.net [Выбрать]
  1. Dim oAsmDoc As AssemblyDocument
  2. oAsmDoc= ThisApplication.ActiveDocument
  3.  
  4. Dim oAsmDef As AssemblyComponentDefinition
  5. oAsmDef = oAsmDoc.ComponentDefinition
  6.  
  7. Dim oLeafOccs As ComponentOccurrencesEnumerator
  8. oLeafOccs = oAsmDef.Occurrences.AllLeafOccurrences
  9.  
  10. Dim oOcc As ComponentOccurrence
  11. For Each oOcc In oLeafOccs
  12.  
  13.         If oOcc.Visible = True Then
  14.                 oOcc.Visible = False
  15.         End If
  16.  
  17. Next
Название: Re: Изоляция сборок и деталей
Отправлено: xzenter от 04-06-2019, 15:11:31
Вот решение. Необходимо выделить компонент в сборке и выполнить правило:

Код - vb.net [Выбрать]
  1. Dim oAsmDoc As AssemblyDocument
  2. oAsmDoc= ThisApplication.ActiveDocument
  3.  
  4. ' Должен быть выделен компонент или помещен в коллекцию SelectSet
  5. Dim selSet As SelectSet
  6. selSet = oAsmDoc.SelectSet
  7.  
  8. ' Получаем кнопку, которая отвечает за изоляцию компонента
  9. Dim oCtrlDef As ControlDefinition
  10. oCtrlDef = ThisApplication.CommandManager.ControlDefinitions.Item("AssemblyIsolateCmd")
  11.  
  12. ' Нажимаем кнопку
  13. oCtrlDef.Execute()
Название: Re: Изоляция сборок и деталей
Отправлено: Vladislav от 04-06-2019, 15:36:31
Благодарю
Название: Re: Изоляция сборок и деталей
Отправлено: Александр Ривилис от 04-06-2019, 17:08:04
Благодарю
Если код устраивает, то отметьте решение.
Название: Re: Изоляция сборок и деталей
Отправлено: mikazakov от 05-06-2019, 06:32:28
Vladislav,
Я думаю есть путь покороче для изоляции. Можно воспользоваться командным менеджером и вызвать команду изоляции
Да и не забудьте выделить изолируемые модели перед запуском макроса

Код - Visual Basic [Выбрать]
  1. Public Sub RunLineCommand()
  2.     ' Get the CommandManager object.
  3.    Dim oCommandMgr As CommandManager
  4.     Set oCommandMgr = ThisApplication.CommandManager
  5.  
  6.     ' Изоляция
  7.    Dim oControlDef As ControlDefinition
  8.     Set oControlDef = oCommandMgr.ControlDefinitions.Item("AssemblyIsolateCmd")
  9.     ' Execute the command.
  10.    Call oControlDef.Execute
  11.    
  12.     'Отмена изоляции
  13.    Set oControlDef = oCommandMgr.ControlDefinitions.Item("AssemblyIsolateUndoCmd")
  14.      ' Execute the command.
  15.    Call oControlDef.Execute
  16. End Sub
  17.