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

ADN Club => Inventor API => Тема начата: R.I.Chernov от 26-02-2015, 18:42:52

Название: Программное добавление "детали-подосновы"
Отправлено: R.I.Chernov от 26-02-2015, 18:42:52
Доброго времени суток, уважаемые форумчане. Снова ищу вашей помощи. Вопрос мой содержится в теме, но все же повторюсь и подробнее обрисую ситуацию. У меня есть сборка, в ней начерчен эскиз, по эскизу выполнено выдавливание, которое "прорезает" одну из подсборок. Подсборка представляет из себя массив, количество элементов которого постоянно меняется, в связи с чем мое выдавливание (после очередного изменения) не прорезает подсборку так, как мне нужно - требуется добавлять детали подосновы. Подскажите пожалуйста, какой командой это можно сделать? Можно ли добавить как "деталь-подоснову" всю подсборку, или же надо перебирать ее вхождения?
Название: Re: Программное добавление "детали-подосновы"
Отправлено: R.I.Chernov от 26-02-2015, 19:18:29
Нашел методы AliasFreeformFeature.RemoveParticipant и  ExtrudeFeature.AddParticipant но так и не заставил их работать :(
Название: Re: Программное добавление "детали-подосновы"
Отправлено: Алексей Романов от 27-02-2015, 09:48:11
Можно ли добавить как "деталь-подоснову" всю подсборку, или же надо перебирать ее вхождения?
Можно добавлять только детали, сборки тут не при делах. Вот примерный код:
Код - Visual Basic [Выбрать]
  1. Dim aDoc As AssemblyDocument
  2. Set aDoc = ThisApplication.ActiveDocument
  3. Dim eF As ExtrudeFeature
  4. Set eF = aDoc.ComponentDefinition.Features.ExtrudeFeatures(1)
  5. Dim oOc As ComponentOccurrence
  6. Set oOc = aDoc.ComponentDefinition.Occurrences.ItemByName("Ролик:2")
  7. ' add Occurrence
  8. eF.AddParticipant oOc
  9. ' remove Occurrence
  10. eF.RemoveParticipant oOc
Название: Re: Программное добавление "детали-подосновы"
Отправлено: R.I.Chernov от 27-02-2015, 14:12:24
Спасибо, Алексей. Часа три потратил чтобы понять, почему мой код не работает, хотя он полностью идентичен вашему :(. В описании метода ExtrudeFeature.AddParticipant вычитал такую вот фразу "An error occurs if the input ComponentOccurrence is not a leaf occurrence". Поправьте пожалуйста если ошибаюсь, детали подсборки не соответствуют понятию "leaf occurrence"? То есть их нельзя внести как деталь подоснову с помощью этого метода?

П.С. Ну и если это так, то можно ли что-то поделать? Ведь в пользовательском интерфейсе как деталь подоснову можно внести любой элемент (деталь любого уровня)?

П.П.С. Решил добавить сборку и код на котором экспериментировал. Если попробовать добавить "Part 2" как подоснову, то выдает ошибку
Код - Visual Basic [Выбрать]
  1. Sub podosnova_test()
  2. Dim oCompDef As AssemblyComponentDefinition
  3. Set oCompDef = ThisApplication.ActiveDocument.ComponentDefinition
  4. Dim occP1 As ComponentOccurrence: Dim occP2 As ComponentOccurrence
  5. Set occP1 = oCompDef.Occurrences.ItemByName("Part1")
  6. Set occP2 = oCompDef.Occurrences.ItemByName("Sub").Definition.Occurrences.ItemByName("Part2")
  7. Dim eF As ExtrudeFeature: Set eF = oCompDef.Features.ExtrudeFeatures(1)
  8. Call eF.AddParticipant(occP1)
  9. 'Call eF.RemoveParticipant(occP1) 'ошибка, если подосновы нет в выдавливании
  10. 'Call eF.AddParticipant(occP2) ' не работает :(
  11. End Sub
Название: Re: Программное добавление "детали-подосновы"
Отправлено: R.I.Chernov от 27-02-2015, 15:59:08
Покопался еще и методом тыка сгенерировал такой вот код:
Код - Visual Basic [Выбрать]
  1. Dim PartName As String: PartName = "Part2"
  2. Dim i As Integer
  3. Dim oCompDef As AssemblyComponentDefinition
  4. Set oCompDef = ThisApplication.ActiveDocument.ComponentDefinition
  5. Dim eF As ExtrudeFeature: Set eF = oCompDef.Features.ExtrudeFeatures(1)
  6. Dim occP2 As ComponentOccurrence
  7. For Each occP2 In oCompDef.Occurrences.AllReferencedOccurrences(oCompDef)
  8. If occP2.Name = PartName Then Call eF.AddParticipant(occP2)
  9. Next

П.С. Но в голове у меня возник следующий парадокс: Если таким методом можно обратится сразу ко всем вхождениям любой сборки, то зачем делать сложнейшие многоуровневые переборы с помощью рекурсивной процедуры, которые неоднократно встречал во многих кодах?