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

29/07/2015

Чтение доступных методов определения потерь

Недавно мы рассматривали, как можно получить данные таблицы ASHRE. Эта информация хранится в Расширяемой области хранения и связана с элементом параметром  RBS_DUCT_FITTING_LOSS_METHOD_SERVER_PARAM в виде GUID значения.

А как мы можем получить список всех доступных методов определения потерь?

 

В следующем примере мы рассмотрим метод getLossMethods, в котором происходит чтение информации из объекта ExternalServer, где хранится нужная нам информации и создается список названий и идентификаторов каждого из доступных методов определения потерь. Наиболее важная информация – это GUID каждого метода, так как именно он является значением параметра.

Для реализации примера создадим простой список объектов класса LossCoef, который содержит пары значений. Также обратите внимание, что в этом примере мы рассматриваем воздуховоды (в прошлом примере - Трубы)

Код - C#: [Выделить]
  1. // временная структура для хранения данных
  2. struct LossCoef{public Guid id; public string name;}
  3.  
  4. private List<LossCoef> getLossMethods(ExternalServiceId serviceId)
  5. {
  6.   MultiServerService service = ExternalServiceRegistry.
  7.     GetService(serviceId) as MultiServerService;
  8.   IList<Guid> serverIds = service.GetRegisteredServerIds();
  9.   List<LossCoef> list = new List<LossCoef>();     
  10.   foreach (Guid serverId in serverIds)
  11.   {
  12.     IExternalServer server = getServerById(serverId, serviceId);
  13.     IDuctFittingAndAccessoryPressureDropServer ductServer =
  14.       server as IDuctFittingAndAccessoryPressureDropServer;
  15.  
  16.     LossCoef lc = new LossCoef();
  17.     lc.id = serverId;
  18.     lc.name = ductServer.GetName();
  19.  
  20.     list.Add(lc);
  21.   }
  22.   return list;
  23. }
  24.  
  25. private IExternalServer getServerById(Guid serverGUID,
  26.   ExternalServiceId serviceId)
  27. {
  28.  // Сначала получаем службу, а затем переходим к серверу.
  29.   MultiServerService service = ExternalServiceRegistry.
  30.     GetService(serviceId) as MultiServerService;
  31.   if (service != null && serverGUID != null)
  32.   {
  33.     IExternalServer server = service.GetServer(serverGUID);
  34.     if (server != null)
  35.       return server;
  36.   }
  37.   return null;
  38. }

И, метод Execute, для демонстрации использования. В данном случае меняется значение параметра ‘Метод определения потерь’

Код - C#: [Выделить]
  1. public Result Execute(
  2.   ExternalCommandData commandData,
  3.   ref string message,
  4.   ElementSet elements)
  5. {
  6.   UIApplication uiapp = commandData.Application;
  7.   UIDocument uidoc = uiapp.ActiveUIDocument;
  8.   Application app = uiapp.Application;
  9.   Document doc = uidoc.Document;
  10.  
  11.   foreach (ElementId eleId in uidoc.Selection.GetElementIds())
  12.   {
  13.     FamilyInstance fitting = doc.GetElement(eleId) as FamilyInstance;
  14.     if (fitting == null) continue;
  15.     Parameter param = fitting.get_Parameter(
  16.       BuiltInParameter.RBS_DUCT_FITTING_LOSS_METHOD_SERVER_PARAM);
  17.     if (param == null) continue;
  18.  
  19.  
  20.     List<LossCoef> lc = getLossMethods(
  21.       ExternalServices.BuiltInExternalServices.
  22.       DuctFittingAndAccessoryPressureDropService);
  23.  
  24.    // Четвертым методом должен быть ‘Определенный коэффициент’
  25.     // Но, нужно проверить
  26.     param.Set(lc[3].id.ToString());
  27.   }
  28.  
  29.   return Result.Succeeded;
  30. }

Источник: http://adndevblog.typepad.com/aec/2015/06/reading-loss-methods-available-on-revit-mep.html

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

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

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