Чтение доступных методов определения потерь
Недавно мы рассматривали, как можно получить данные таблицы ASHRE. Эта информация хранится в Расширяемой области хранения и связана с элементом параметром RBS_DUCT_FITTING_LOSS_METHOD_SERVER_PARAM в виде GUID значения.
А как мы можем получить список всех доступных методов определения потерь?
В следующем примере мы рассмотрим метод getLossMethods, в котором происходит чтение информации из объекта ExternalServer, где хранится нужная нам информации и создается список названий и идентификаторов каждого из доступных методов определения потерь. Наиболее важная информация – это GUID каждого метода, так как именно он является значением параметра.
Для реализации примера создадим простой список объектов класса LossCoef, который содержит пары значений. Также обратите внимание, что в этом примере мы рассматриваем воздуховоды (в прошлом примере - Трубы)
- // временная структура для хранения данных
- struct LossCoef{public Guid id; public string name;}
- private List<LossCoef> getLossMethods(ExternalServiceId serviceId)
- {
- MultiServerService service = ExternalServiceRegistry.
- GetService(serviceId) as MultiServerService;
- IList<Guid> serverIds = service.GetRegisteredServerIds();
- List<LossCoef> list = new List<LossCoef>();
- foreach (Guid serverId in serverIds)
- {
- IExternalServer server = getServerById(serverId, serviceId);
- IDuctFittingAndAccessoryPressureDropServer ductServer =
- server as IDuctFittingAndAccessoryPressureDropServer;
- LossCoef lc = new LossCoef();
- lc.id = serverId;
- lc.name = ductServer.GetName();
- list.Add(lc);
- }
- return list;
- }
- private IExternalServer getServerById(Guid serverGUID,
- ExternalServiceId serviceId)
- {
- // Сначала получаем службу, а затем переходим к серверу.
- MultiServerService service = ExternalServiceRegistry.
- GetService(serviceId) as MultiServerService;
- if (service != null && serverGUID != null)
- {
- IExternalServer server = service.GetServer(serverGUID);
- if (server != null)
- return server;
- }
- return null;
- }
И, метод Execute, для демонстрации использования. В данном случае меняется значение параметра ‘Метод определения потерь’
- public Result Execute(
- ExternalCommandData commandData,
- ref string message,
- ElementSet elements)
- {
- UIApplication uiapp = commandData.Application;
- UIDocument uidoc = uiapp.ActiveUIDocument;
- Application app = uiapp.Application;
- Document doc = uidoc.Document;
- foreach (ElementId eleId in uidoc.Selection.GetElementIds())
- {
- FamilyInstance fitting = doc.GetElement(eleId) as FamilyInstance;
- if (fitting == null) continue;
- Parameter param = fitting.get_Parameter(
- BuiltInParameter.RBS_DUCT_FITTING_LOSS_METHOD_SERVER_PARAM);
- if (param == null) continue;
- List<LossCoef> lc = getLossMethods(
- ExternalServices.BuiltInExternalServices.
- DuctFittingAndAccessoryPressureDropService);
- // Четвертым методом должен быть ‘Определенный коэффициент’
- // Но, нужно проверить
- param.Set(lc[3].id.ToString());
- }
- return Result.Succeeded;
- }
Источник: 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