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

05/06/2015

Ошибка при создании сплайна

Я работаю над надстройкой для Revit, где в частности есть перенос кривых из Rhino в Revit для создания балок.

Код работает замечательно, когда количество контрольных точек кривой больше или равно 4. Но если их три, то возникает ошибка.

Как можно нарисовать сплайн с тремя контрольными точками с помощью Revit API?

Мой код:

Код - C#: [Выделить]
  1.   List<XYZ> ctrPoints = new List<XYZ>();
  2.  
  3.   ctrPoints.Add( new XYZ( Utils.mmToFeet( 72500.017337 ),
  4.     Utils.mmToFeet( -5072.522765 ), Utils.mmToFeet( 0 ) ) );
  5.   ctrPoints.Add( new XYZ( Utils.mmToFeet( 105082.371745 ),
  6.     Utils.mmToFeet( -748.798009 ), tils.mmToFeet( 0 ) ) );
  7.   ctrPoints.Add( new XYZ( Utils.mmToFeet( 117899.12727 ),
  8.     Utils.mmToFeet( -15572.997171 ), Utils.mmToFeet( 0 ) ) );
  9.  
  10.   List<double> weights = new List<double>();
  11.   weights.Add( 1 );
  12.   weights.Add( 1 );
  13.   weights.Add( 1 );
  14.  
  15.   List<double> knots = new List<double>();
  16.   knots.Add( 0 );
  17.   knots.Add( 0 );
  18.   knots.Add( 0 );
  19.   knots.Add( 52464.568605 );
  20.   knots.Add( 52464.568605 );
  21.   knots.Add( 52464.568605 );
  22.  
  23.   NurbSpline detailNurbSpline = NurbSpline.Create(
  24.     ctrPoints, weights, knots, 3, false, true );

И пример сплайна:

 

Ответ: В возникающем исключении говорится, что количество контрольных точек должно быть не меньше чем значение параметра degree + 1.

Так как в приведенном выше коде значение параметра равно 3, то это условие нарушается.

Я бы порекомендовал использовать метод NurbSpline.Create([control points], [weights]). В нем автоматически вычисляется значение degree, в зависимости от количества точек.

Во внутреннем комментарии к коду написано следующее:

Код - XML: [Выделить]
  1. // Используйте degree 1 для 2 точек, degree 2 для 3
  2. // и degree 3 для четырех и более

Источник: http://thebuildingcoder.typepad.com/blog/2015/05/geometry-creation-and-line-intersection-exceptions.html#2

Автор перевода: Виктор Чекалин

Обсуждение: http://adn-cis.org/forum/index.php?topic=2771

Опубликовано 05.06.2015