Связь между поверхностью и создающим ее ProfilePath

Автор Тема: Связь между поверхностью и создающим ее ProfilePath  (Прочитано 2928 раз)

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

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

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 3
Добрый день. Возможно кто то уже решал следующую задачу, прошу подскажите как.
Пример. На плоской поверхности создаю эскиз с двумя замкнутыми профилями (пускай это будут профили образованные окружностью и прямоугольником, геометрия по ходу программы меняется), делаю вырез. Необходимо, для назначения атрибутов, определить поверхности созданные первым и вторым контуром соответственно.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Думаю, придется "пошерстить" построение модели через
PartComponentDefinition.PartFeatures.ExtrudeFeatures
Там должна быть коллекция выдавливаний, в каждом выдавливании есть свойство
ExtrudeFeature.Profile
Ищем выдавливание с нужным профилем.
И когда находим нужное выдавливание, то в свойстве
ExtrudeFeature.SideFaces
и будут искомые поверхности

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

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 3
Согласен, копаю в этом направлении. Напрямую через профиль получить поверхность не вижу как. Сейчас пробую связать по кривым.
Через профиль вроде добрался
Код - Visual Basic [Выбрать]
  1. Dim oProfilePath As ProfilePath
  2. Set oProfilePath = oExtrudeFeature.Profile.Item(1)
  3. Dim oProfileEntity As ProfileEntity
  4. Set oProfileEntity = oProfilePath.Item(1)
  5. Dim oObject As Object
  6. Set oObject = oProfileEntity.Curve
  7.  
Через  грань пока не вижу как
Код - Visual Basic [Выбрать]
  1. Set oFace = oExtrudeFeature.Faces.Item(1)
  2.  

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
ExtrudeFeature.SideFaces

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

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 3
Пока не вижу как привязать к профилю

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

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 3
Не пойму как добраться.


Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
дак а почему вы ищите в объекте Face, я же два раза выше писал что нужно идти через ExtrudeFeature

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

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 3
Возможно мы друг друга не поняли? В итоге мне нужны Face образованные в результате выдавливания конкретным ProfilePath.
Код - Visual Basic [Выбрать]
  1. Dim oO1 As Object
  2. Dim oO2 As Object
  3. Dim oProfilePath As ProfilePath
  4. Set oProfilePath = oExtrudeFeature.Profile.Item(1)
  5. Dim oProfileEntity As ProfileEntity
  6. For Each oProfileEntity In oProfilePath
  7. Set oO1 = oProfileEntity.Curve
  8.     For Each oFace In oExtrudeFeature.SideFaces
  9.         Set oO2 = oFace.[_CreatedFromCurve].Geometry
  10.         If oO1 Is oO2 Then
  11.             MsgBox ("ОНО")
  12.         End If
  13.     Next
  14. Next
  15.  
К сожалению не вышло. Сейчас пытаюсь сравнить координаты начала и конца полученных кривых и на основание этого найти нужные SideFaces.

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

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 3
Победил, возможно кому нибудь будет полезно или у кого появиться более простое решение.
Код - Visual Basic [Выбрать]
  1. Public Sub atr1()
  2.  
  3. Dim oPart As PartDocument
  4. Dim oCompDef As PartComponentDefinition
  5. Dim oAttribSet As AttributeSet
  6. Dim oAttr As Inventor.Attribute
  7. Dim oFace As Face
  8.  
  9. Set oPart = ThisApplication.ActiveDocument
  10.  
  11. Dim oExtrudeFeature As ExtrudeFeature
  12. Set oExtrudeFeature = oPart.AttributeManager.FindObjects("SaddleSupport", "Extrusion", "PlateHoleFastener").Item(1)
  13.  
  14. Dim oO1 As Object
  15. Dim oO2 As Object
  16. Dim i As Integer
  17. i = 0
  18. Dim oProfileEntity As ProfileEntity
  19. For Each oProfilePath In oExtrudeFeature.Profile
  20. i = i + 1
  21.     For Each oProfileEntity In oProfilePath
  22.             Set oO1 = oProfileEntity.SketchEntity
  23.             For Each oFace In oExtrudeFeature.SideFaces
  24.                 Set oO2 = oFace.[_CreatedFromCurve]
  25.                 If oO1 Is oO2 Then
  26.                  Set oAttributeSet = oFace.AttributeSets.Add("SaddleSupport")
  27.                  Set oAttr = oAttributeSet.Add("PlateHoleFastener", ValueTypeEnum.kStringType, "HoleFastener" & i)
  28.                  End If
  29.             Next
  30.     Next
  31. Next
  32. End Sub
  33.