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

ADN Club => Revit API => Тема начата: trir от 25-02-2021, 13:40:18

Название: Как создать спиральный RebarShape с помощью метода RebarShapeDefinitionByArc?
Отправлено: trir от 25-02-2021, 13:40:18
Метод:
public RebarShapeDefinitionByArc(
   Document doc,
   double height,
   double pitch,
   int baseFinishingTurns,
   int topFinishingTurns
)

Полученный RebarShape я пытаюсь использовать в методе CreateFromRebarShape, но получаю ошибку
С существующим RebarShape всё получается
Название: Re: Как создать спиральный RebarShape с помощью метода RebarShapeDefinitionByArc?
Отправлено: Александр Игнатович от 25-02-2021, 14:02:25
Какую конкретно ошибку? Пробовал параметры метода взять из существующего? Пробовал перед CreateFromRebarShape doc.Regenerate() выполнить? В отдельных транзакциях?
Название: Re: Как создать спиральный RebarShape с помощью метода RebarShapeDefinitionByArc?
Отправлено: trir от 25-02-2021, 19:52:33
ошибка

Код - Visual Basic [Выбрать]
  1.     Private Function CreateRebarShape(document As Document)
  2.         Dim sp1 = New RebarShapeDefinitionByArc(document, 5, 0.5, 1, 1)
  3.         Return RebarShape.Create(document, sp1, Nothing, RebarStyle.Standard, StirrupTieAttachmentType.ExteriorFace,
  4.                                  0, RebarHookOrientation.Left, 0, RebarHookOrientation.Left, 0)
  5.     End Function
  6.  
  7.     Private Function CreateRebar5(document As Document, host As FamilyInstance, barType As RebarBarType, rShape As RebarShape)
  8.         Dim origin As New XYZ(0, 0, -5) ''
  9.        Return Rebar.CreateFromRebarShape(document, rShape, barType, host, origin, XYZ.BasisX, XYZ.BasisY)
  10.     End Function

Вот тоже самое спрашивали (https://forums.autodesk.com/t5/revit-api-forum/spiral-stirrup-rebar/td-p/7049210?profile.language=ru)
Название: Re: Как создать спиральный RebarShape с помощью метода RebarShapeDefinitionByArc?
Отправлено: Александр Игнатович от 25-02-2021, 23:29:27
В общем, разобрался. Нужно доопределить constraint-ы формы. Для этого добавляем параметр и назначаем constraint. Т.е.
Код - C# [Выбрать]
  1. sp1.AddParameter(prmId, defaultDiameter);
  2. sp1.AddConstraintDiameter(prmId, RebarShapeArcReferenceType.External)

prmId нужно взять из существующего общего параметра, который есть в модели, что-то вроде SharedParameterElement.Lookup(doc, new Guid("451baa80-7503-48d3-8c39-ff293fe0bad9")).Id
Название: Re: Как создать спиральный RebarShape с помощью метода RebarShapeDefinitionByArc?
Отправлено: trir от 26-02-2021, 20:30:31
класс, а я пытался создать новый
спираль появилась, но при попытке её редактирования (как семейства)  - выскакивает ошибка
Название: Re: Как создать спиральный RebarShape с помощью метода RebarShapeDefinitionByArc?
Отправлено: Александр Игнатович от 28-02-2021, 14:10:40
Вообще, странно, но мне помогло накинуть еще один констрэйнт на радиус, так же добавил второй параметр и вызвал AddConstraintRadius