Развернуть параметрическую деталь из сборки через iLogic

Автор Тема: Развернуть параметрическую деталь из сборки через iLogic  (Прочитано 4385 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Добрый день, подскажите, есть ли возможность развернуть деталь iPart из сборки, где она применяется?
Используем следующий код для получения разверток медных деталей, работает для всего кроме деталей с исполнениями:
Код - Visual Basic [Выбрать]
  1. sBom = ThisDoc.Document.ComponentDefinition.BOM
  2. sBom.PartsOnlyViewEnabled = True
  3. sBOMView = sBom.BOMViews.Item("Только детали")
  4. For Each sRow In sBOMView.BOMRows
  5.         sCompDef = sRow.ComponentDefinitions.Item(1)
  6.         If sCompDef.Material.Name.Contains("Медь") Then
  7.                 If sCompDef.Document.SubType <> "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" Then
  8.                         sCompDef.Document.SubType = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}"
  9.                         sCompDef.Unfold
  10.                 Else
  11.                         sCompDef.Unfold
  12.                 End If
  13.      End If
  14. Next

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
экселя дома нет, к сожалению, iPart тестовый сделать не получается.
До работы доберусь посмотрю

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Буду очень признателен, если получится посмотреть.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Сделайте сборку.
Вставьте в нею один листовой иПарт и запустите макрос
Код - Visual Basic [Выбрать]
  1. Public Sub InsertConstraint()
  2.     ' Set a reference to the assembly component definintion.
  3.    Dim oAsmCompDef As AssemblyComponentDefinition
  4.     Set oAsmCompDef = ThisApplication.ActiveDocument.ComponentDefinition
  5. Dim sm As SheetMetalComponentDefinition: Set sm = oAsmCompDef.BOM.BOMViews(1).BOMRows(1).ComponentDefinitions(1)
  6. Dim pd As PartDocument: Set pd = sm.Document
  7. pd.Views.Add
  8.    sm.Unfold
  9.    sm.FlatPattern.Edit
  10. End Sub
  11.  

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Спасибо. Работает, но почему то не со всеми деталями. Можете посмотреть сборку во вложении. Деталь2 обрабатывается корректно, а шина не обрабатывается совсем. Почему понять не могу. У обоих деталей развертки нет. Но у детали2 скрипт срабатывает и длину развертки получаем, а у шины нет. Скрипт так же в архиве.

Отмечено как Решение Elfilagas 01-03-2022, 11:00:36

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Посмотрел. Там видимо особенность, что при вставке ипарта, вставляется не изначальный ипарт, а его прокси объект (производный компонент, файлы в соседних папках)
Ну вот я просто по ссылке перешел на родительский ипарт и там произвел развертку, вроде работает
Код - Visual Basic [Выбрать]
  1. Public Sub unfold()
  2.     ' Set a reference to the assembly component definintion.
  3.    Dim oAsmCompDef As AssemblyComponentDefinition
  4.     Set oAsmCompDef = ThisApplication.ActiveDocument.ComponentDefinition
  5. Dim sm As SheetMetalComponentDefinition: Set sm = oAsmCompDef.BOM.BOMViews(1).BOMRows(1).ComponentDefinitions(1)
  6. Dim pd As PartDocument: Set pd = sm.Document
  7. Call unfold_ipart(pd)
  8. ThisApplication.ActiveDocument.Update
  9. End Sub
  10.  
  11.  
  12. Sub unfold_ipart(pd As PartDocument)
  13.  
  14. Dim scd As SheetMetalComponentDefinition: Set scd = pd.ComponentDefinition
  15. Dim parentDoc As PartDocument: Set parentDoc = scd.iPartMember.ReferencedDocumentDescriptor.ReferencedDocument
  16. Dim p_scd As SheetMetalComponentDefinition: Set p_scd = parentDoc.ComponentDefinition
  17.  
  18. p_scd.unfold
  19.  
  20. End Sub
  21.  
  22.  

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Да, теперь все получилось, большое спасибо.