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

26/06/2015

Отсутствие PipeScheduleType в файле шаблона rte

Я столкнулся со странной проблемой в Revit 2015. В файле проекта, созданного с помощью шаблона, присланного от клиента, полностью отсутствуют PipeScheduleType (Спецификация/Тип). Я имею ввиду, что свойство  PipeType.Class всегда равно null, даже если в документе определены сегменты труб.

 

После консультации с командой разработчиков, мы выяснили, что это произошло из-за обновления файла шаблона при использовании его в новой версии.

Единственное решение в этом случае – вручную создать сегменты. Это невозможно сделать с помощью Revit API, так как методу PipeSegment.Create необходимо передать в качестве параметра PipeScheduleId. После создания сегмента, PipeScheduleType будет создан автоматически. Ну и чтобы потом это все заработало, нужно изменить сегмент трубы для типа трубы, как это указано ниже.

 

Однако, даже после этих манипуляций, PipeType.Class так и равен null. В чем же дело??

И снова на помощь приходит команда разработчиков. Свойство PipeType.Class теперь принадлежит классу Pipe. Таким образом, нам надо работать с параметром объекта класса Pipe. Например, вот так:

Код - C#: [Выделить]
  1. [ Autodesk.Revit.DB.Plumbing.Pipe pipe = null;
  2. var pipeClass = pipe.get_Parameter(BuiltInParameter.RBS_PIPE_CLASS_PARAM);
  3. var pipeScheduleTypeId = pipeClass.AsElementId(); [$/code]]
  4. Но а как изменить сегмент типа трубы с помощью API? Пример ниже:
  5.  
  6. Код - C#: [Выделить]
  7.  ElementId theSegmentId = new ElementId(1803995);
  8. PipeType pipeType = doc.GetElement(new ElementId(1660690)) as PipeType;
  9. var rpm = pipeType.RoutingPreferenceManager;
  10. var groupType = RoutingPreferenceRuleGroupType.Segments;
  11. RoutingPreferenceRule rule = new RoutingPreferenceRule(theSegmentId,
  12.     "description");
  13. using (Transaction transaction = new Transaction(RevitDoc))
  14. {
  15.     transaction.Start("Change pipe segment");
  16.     rpm.AddRule(groupType, rule);
  17.     transaction.Commit();
  18. }

  • Первым делом, получаем объект RoutingPreferenceManager с помощью свойства PipeType.RoutingPreferenceManager
  • Затем создаем новое правило RoutingPreferenceRule
  • Наконец, добавляем правило с помощью метода AddRule

Источник: http://adndevblog.typepad.com/aec/2015/05/revitapi-pipescheduletype-is-missing-for-a-rte-file.html

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

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

Опубликовано 26.06.2015
Отредактировано 28.06.2015 в 20:29:06