Создание массивов в эскизах средствами API .

Автор Тема: Создание массивов в эскизах средствами API .  (Прочитано 2877 раз)

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

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

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 3
   Добрый день. Перетряхнув объектную модель пришел к выводу что создание массивов в эскизе средствами API невозможно.
   В частности пытался создать круговой массив "SketchLine".
   Нашел что возможно управлять уже созданным массивом через PatternConstraint.
"Зависимость PatternConstraint – определяет взаимосвязь между объектами
которые являются результатом выполнения команд на создание массива
объектов. Как и в предыдущем случае, коллекция
Sketch.GeometricConstraints лишь обеспечивает доступ к уже созданным
элементам этого типа. "
   Сейчас пытаюсь создать аналог команды "Кругового массива" поместив "oSketch.RotateSketchObjects" в цикл.
Возможно есть другие решения или мой вывод по созданию массивов невере?
Прошу помощи у профессионалов !

Отмечено как Решение anton.gorschnev 11-07-2019, 16:11:46

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
или мой вывод по созданию массивов невере?
Вывод то как раз верен
коллекция PlanarSketch.GeometricConstraints не содержит метода добавления зависимостей массива.
Не предоставили видимо доступ к данному функционалу через АПИ.
Может быть массивить уже 3Д объекты получится?

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

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 3
К сожалению мне нужен именно 2D массив (3D объект на основание эскиза не создается).
Возможно есть примеры кода аналога кругового массива? Что то  моя задумка с поворотом через
Код - Visual Basic [Выбрать]
  1. oSketch.RotateSketchObjects(oSketchLine, oCircle1.CenterSketchPoint, 2 * pi / (k + 1))
пока не работает.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
пока не работает.
Вот это работает:

Код - Visual Basic [Выбрать]
  1. Sub RotateWithCopy()
  2. Dim pd As PartDocument: Set pd = ThisApplication.ActiveDocument
  3.  
  4. Dim obj As ObjectCollection: Set obj = ThisApplication.TransientObjects.CreateObjectCollection
  5. Call obj.Add(pd.ComponentDefinition.Sketches(1).SketchLines(1))
  6.  
  7. Call pd.ComponentDefinition.Sketches(1).RotateSketchObjects(obj, ThisApplication.TransientGeometry.CreatePoint2d(0, 0), True, True)
  8.  
  9. End Sub

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

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 3
Спасибо заработало. Как я понял процедуру надо кормить только коллекцией.
Вот моя замена кругового массива.
Код - Visual Basic [Выбрать]
  1.         Dim k As Integer
  2.         k = 5
  3.         For i = 1 To k
  4.         Set oSketchLine = oSketch.SketchLines.AddByTwoPoints(oTransGeom.CreatePoint2d(0, oDvn.Value / 3), oTransGeom.CreatePoint2d(0, Rd))
  5.         Dim obj As ObjectCollection: Set obj = ThisApplication.TransientObjects.CreateObjectCollection
  6.         Call obj.Add(oSketchLine)
  7.         Call oSketch.GeometricConstraints.AddCoincident(oSketchLine.StartSketchPoint, oCircle1)
  8.         Call oSketch.GeometricConstraints.AddCoincident(oSketchLine.EndSketchPoint, oSketch.SketchCircles.Item(1))
  9.         Call oSketch.GeometricConstraints.AddCoincident(oSketchLine, oSketch.SketchCircles.Item(1).CenterSketchPoint)
  10.         Call oSketch.RotateSketchObjects(obj, oTransGeom.CreatePoint2d(0, 0), i * 2 * pi / (k + 1), False, False)
  11.         Set oTwoLineAngleDimConstraint = oSketch.DimensionConstraints.AddTwoLineAngle(oSketch.SketchLines.Item(2), oSketch.SketchLines.Item(i + 2), oTransGeom.CreatePoint2d(0, Rd / 2))
  12.        
  13.         Next i

P.S. Подскажите как сделать вытяжку не замкнутого контура, вопрос через какое свойство PartFeatures (не хочу по этому вопросу открывать новую тему, решение наверное простое но я его еще не нашел).

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
как сделать вытяжку не замкнутого контура

Код - Visual Basic [Выбрать]
  1. Sub tt()
  2. Dim doc As PartDocument: Set doc = ThisApplication.ActiveDocument
  3.  
  4.  Dim s As PlanarSketch: Set s = doc.ComponentDefinition.Sketches(1)
  5.  
  6. Call s.Profiles.AddForSurface
  7.  
  8. Dim extDef As ExtrudeDefinition
  9. Set extDef = doc.ComponentDefinition.Features.ExtrudeFeatures.CreateExtrudeDefinition(s.Profiles(1), kSurfaceOperation)
  10. Call doc.ComponentDefinition.Features.ExtrudeFeatures.Add(extDef)
  11.  
  12. End Sub