Получение ComponentOccurrence для PartDocument

Автор Тема: Получение ComponentOccurrence для PartDocument  (Прочитано 3635 раз)

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

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

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Здравствуйте. Такой вопрос.
Как получить ComponentOccurence для документа типа PartDocument (файл-деталь)?
ComponentOccurrence нужен для последующего получения геометрии через SurfaceBodies.
С файлами-сборками я делал так, а вот для PartDocument.ComponentDefinition.Occurrences.Count равен нулю.
Спасибо за ответы.

Отмечено как Решение Vladislav 16-01-2020, 14:49:39

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Получение ComponentOccurrence для PartDocument
« Ответ #1 : 15-01-2020, 19:24:47 »
С файлами-сборками я делал так, а вот для PartDocument.ComponentDefinition.Occurrences.Count равен нулю.
Ну дак это просто унаследованная коллекция от базового интерфейса ComponentDefinition и смысла вхождения в самой детали не имеют.
Поэтому там доступ через сам ComponentDefinition, в нем есть искомая коллекция
Код - Visual Basic [Выбрать]
  1. Public Sub part()
  2.  Dim part As PartDocument: Set part = ThisApplication.ActiveDocument
  3.  Dim CompDef As PartComponentDefinition: Set CompDef = part.ComponentDefinition
  4.  MsgBox ("Количество тел: " & CompDef.SurfaceBodies.Count)
  5.  
  6. End Sub
  7.  

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

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Re: Получение ComponentOccurrence для PartDocument
« Ответ #2 : 17-01-2020, 12:17:49 »
В дополнение к предыдущему вопросу.
Для файлов-сборок я выполнял SetTransformWithoutConstraints(rotMat) для каждого ComponentOccurrence,
входящего в сборку, для поворота всей модели на нужный мне угол.
Как мне сделать аналогичную операцию в случае файла-детали? Ведь ComponentOccurrence нет.
Спасибо за информацию.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Получение ComponentOccurrence для PartDocument
« Ответ #3 : 17-01-2020, 18:30:59 »
Ну если сильно охота по изгаляться, то нужно двигать тела внутри детали через MoveFeatures, вот пример из хэлпа:
Код - Visual Basic [Выбрать]
  1. Public Sub MoveFeatureCreationSample()
  2.     ' Get the active part document.
  3.    Dim oDoc As PartDocument
  4.     Set oDoc = ThisApplication.ActiveDocument
  5.    
  6.     If oDoc Is Nothing Then
  7.         MsgBox "No part document!" & vbCrLf & "Please open a part with solids in it for this sample to run.", vbCritical, "Autodesk Inventor"
  8.         Exit Sub
  9.     End If
  10.    
  11.     Dim oCompDef As PartComponentDefinition
  12.     Set oCompDef = oDoc.ComponentDefinition
  13.    
  14.     If oCompDef.SurfaceBodies.Count = 0 Then
  15.         MsgBox "No solids to move!" & vbCrLf & "Please open a part with solids in it for this sample to run.", vbCritical, "Autodesk Inventor"
  16.         Exit Sub
  17.     End If
  18.    
  19.     Dim oBodies As ObjectCollection
  20.     Set oBodies = ThisApplication.TransientObjects.CreateObjectCollection
  21.    
  22.     ' Specify a body to move.
  23.    oBodies.Add oCompDef.SurfaceBodies(1)
  24.    
  25.     ' Create a MoveFeatureDefinition.
  26.    Dim oMoveDef As MoveDefinition
  27.     Set oMoveDef = oCompDef.Features.MoveFeatures.CreateMoveDefinition(oBodies)
  28.    
  29.     ' Set the move operations onto the bodies.
  30.    Dim oFreeDrag As FreeDragMoveOperation
  31.     Set oFreeDrag = oMoveDef.AddFreeDrag(1, 1, 1)
  32.    
  33.     Dim oMoveAlongRay As MoveAlongRayMoveOperation
  34.     Set oMoveAlongRay = oMoveDef.AddMoveAlongRay(oCompDef.WorkAxes(2), True, 2)
  35.    
  36.     Dim oRotateAboutAxis As RotateAboutLineMoveOperation
  37.     Set oRotateAboutAxis = oMoveDef.AddRotateAboutAxis(oCompDef.WorkAxes(3), True, 0.5)
  38.    
  39.     ' Create the move feature.
  40.    Dim oMoveFeature As MoveFeature
  41.     Set oMoveFeature = oCompDef.Features.MoveFeatures.Add(oMoveDef)
  42. End Sub
  43.