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

ADN Club => Revit API => Тема начата: user32 от 09-11-2020, 17:19:09

Название: Поворот CurveArray
Отправлено: user32 от 09-11-2020, 17:19:09
И снова здрасте. Пытаюсь получить профиль горизонтальной балки, получаю CurveArray, но профиль получаю горизонтальный, но мне нужно получить вертикальный. Пытался сделать с помощью CreateRotation, но в таком случае они сливаются в одну линию, но не поворачиваются, то есть те линии, которые должны быть вертикальные, они равны 0 и по сути это точки... Как можно получить  профиль так, как он расположен в проекте? Допустим если балка горизонтальная, то профиль должен получитсья вертикальный. Никак не могу сообразить. Заранее спасибо.
(https://i.postimg.cc/YvCL0T0T/2020-11-09-17-11-23-Autodesk-Auto-CAD-2017-1-dwg.png) (https://postimg.cc/YvCL0T0T)
Название: Re: Поворот CurveArray
Отправлено: Александр Игнатович от 09-11-2020, 17:53:27
Да вроде как просто использовать FamilyInstance.GetTotalTransform()
Название: Re: Поворот CurveArray
Отправлено: user32 от 09-11-2020, 18:11:11
Я его использую как раз как рекомендовали в прошлой теме, они располагаются корректно, но к сожалению не поворачиваются
Название: Re: Поворот CurveArray
Отправлено: Александр Игнатович от 09-11-2020, 18:18:48
Значит, оно у тебя в семействе самом так располагается
Название: Re: Поворот CurveArray
Отправлено: user32 от 09-11-2020, 18:35:05
Да, в данном случае, я получаю профиль выдавливания (SweptProfile), но он в самом семействе вертикально стоит. Или это не то?
(https://i.postimg.cc/w7qvgvqg/image.png) (https://postimg.cc/w7qvgvqg)
Название: Re: Поворот CurveArray
Отправлено: Александр Игнатович от 10-11-2020, 11:24:26
Похоже, что вне зависимости от расположения в семействе в Swept profile инстанса, профиль всегда лежит в плоскости X0Y. Но есть driving curve. Вот быстрокод на python shell-е, насколько я понял твою задачу:
Код - Python [Выбрать]
  1. beam = selection[0]
  2.  
  3. sweptProfile = beam.GetSweptProfile()
  4.  
  5. derivatives = sweptProfile.GetDrivingCurve().ComputeDerivatives(0.5, True)
  6.  
  7. plane = Plane.CreateByNormalAndOrigin(derivatives.BasisX.Normalize(), derivatives.Origin)
  8.  
  9. transform = Transform.Identity
  10. transform.Origin = plane.Origin
  11. transform.BasisX = plane.XVec
  12. transform.BasisY = plane.YVec
  13. transform.BasisZ = plane.Normal
  14.  
  15. profile = sweptProfile.GetSweptProfile()
  16.  
  17. tx = Transaction(doc, "swept profile")
  18. tx.Start()
  19.  
  20. sketchPlane = SketchPlane.Create(doc, plane)
  21.  
  22. for curve in profile.Curves:
  23.         transformedCurve = curve.CreateTransformed(transform)
  24.         doc.Create.NewModelCurve(transformedCurve, sketchPlane)
  25.  
  26. tx.Commit()


(https://i.postimg.cc/HV1gqn1B/beam.png) (https://postimg.cc/HV1gqn1B)
Название: Re: Поворот CurveArray
Отправлено: user32 от 10-11-2020, 11:40:05
Спасибо попробую