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

27/05/2015

Клонирование твердотельного объекта

Вопрос: Для клонирования твердотельных объектов мы использовали вот такой трюк:

Код - C#: [Выделить]
  1.   static public Solid Clone( this Solid solid )
  2.   {
  3.     if( solid == null )
  4.     {
  5.       return null;
  6.     }
  7.     return BooleanOperationsUtils
  8.       .ExecuteBooleanOperation( solid, solid,
  9.         BooleanOperationsType.Union );
  10.   }

С помощью этого метода мы копировали твердотельный объект и в дальнейшем использовали его для создания или редактирования объекта DirectShape. Этот способ работает замечательно в большинстве случаев. Однако на некоторых объектах DirectShape возникает исключение:

  • Исключение: "Failed to perform the Boolean operation for the two solids. Error: Autodesk.Revit.Exceptions.InvalidOperationException: Failed to perform the Boolean operation for the two solids". НЕ удается выполнить булевую операцию для двух твердотельных объектов.

Буду очень признателен, если вы подскажете как это можно исправить.

Ответ: Вы заметили, что в Revit 2016 появился новый метод SolidsUtils.Clone()?

Думаю, это должно решить вашу проблему.

Ответ: Спасибо. Метод действительно работает без проблем. Но он работает в 2016 версии. А как быть с 2015?

Ответ: Рад слышать, что это нововведение в API решает проблему.

Для Revit 2015 и более ранних версий я бы рекомендовал вместо того чтобы объединять исходный твердотельный объект с самим собой, может быть объединить его с небольшим кубом (1 х 1 должно сработать для многих фигур), который находится внутри исходного твердотельного объекта.

Ответ: Спасибо!

Могу подтвердить, что этот способ действительно работает в Revit API 2015.

Источник: http://thebuildingcoder.typepad.com/blog/2015/05/cloning-a-solid-angelhack-3d-web-fest-and-dubai.html#6

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

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

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