Чтение таблицы ASHRE
В Revit MEP мы можем получить Настройки метода определения потерь в виде ASHRE таблицы. Но, проблема в том, что эта таблица не доступна напрямую, так как она не прикреплена к элементу. Вопрос в том, как получить доступ к информации, предоставленной ниже на скриншоте:
На самом деле, фактически, эта информация хранится в Расширяемой области хранения и связана с элементом параметром RBS_DUCT_FITTING_LOSS_METHOD_SERVER_PARAM в виде GUID значения.
Собственно, чтобы получить требуемую информацию с помощью API, нужно добраться до это связи.
Для заданного элемента, первым делом нужно получить значение этого параметра:
- 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;
- string strValGUID = param.AsString();
- string strValTemp = getTableNameByServerId(fitting,
- strValGUID,
- ExternalServices.BuiltInExternalServices.
- DuctFittingAndAccessoryPressureDropService);
Самая интересная часть находится в метода getTableNameByServerId, которого нет в API. Ниже показаны все шаги реализации метода.
- // Имя поля с таблицей для воздуховодов
- public static readonly string fieldDuctTableName = "ASHRAETableName";
- // Имя поля с таблицей для труб.
- public static readonly string fieldPipeTableName = "PipeFittingKFactorTableName";
- // Получаем сервер, затем получаем сущность с сервера
- // И получаем имя таблицы из сущности.
- private string getTableNameByServerId(
- FamilyInstance fitting,
- string strGUID,
- ExternalServiceId serviceId)
- {
- if (fitting == null || strGUID == null || serviceId == null)
- return null;
- Guid serverGUID;
- if (!Guid.TryParse(strGUID, out serverGUID))
- return null;
- // For Pipe, the loss method might be defined on type
- // Для труб метод определения потерь может хранится в типе
- if (serverGUID == MEPCalculationServerInfo.PipeUseDefinitionOnTypeGUID)
- {
- //check if the loss method of type is "table"
- // Проверяем, является ли метод определения потерь таблицей
- int eLossMethod = fitting.Symbol.get_Parameter(
- BuiltInParameter.RBS_PIPE_TYPE_FITTING_LOSS_METHOD_PARAM).
- AsInteger();
- if (eLossMethod == (int)PipeLossMethodType.Table)
- return fitting.Symbol.get_Parameter(
- BuiltInParameter.RBS_PIPE_TYPE_FITTING_LOSS_TABLE_PARAM).
- AsString();
- else
- return null;
- }
- IExternalServer server = getServerById(strGUID, serviceId);
- if (server != null)
- {
- Schema schema = null;
- string fieldTableName = "";
- if (serviceId == ExternalServices.BuiltInExternalServices.
- DuctFittingAndAccessoryPressureDropService)
- {
- IDuctFittingAndAccessoryPressureDropServer ductServer =
- server as IDuctFittingAndAccessoryPressureDropServer;
- if (ductServer != null)
- {
- schema = ductServer.GetDataSchema();
- fieldTableName = fieldDuctTableName;
- }
- }
- else if (serviceId == ExternalServices.
- BuiltInExternalServices.
- PipeFittingAndAccessoryPressureDropService)
- {
- IPipeFittingAndAccessoryPressureDropServer pipeServer =
- server as IPipeFittingAndAccessoryPressureDropServer;
- if (pipeServer != null)
- {
- schema = pipeServer.GetDataSchema();
- fieldTableName = fieldPipeTableName;
- }
- }
- if (schema != null)
- {
- Field field = schema.GetField(fieldTableName);
- if (field != null)
- {
- Entity entity = fitting.GetEntity(schema);
- if (entity != null && entity.IsValid())
- return entity.Get<string>(field);
- }
- }
- }
- return null;
- }
- private IExternalServer getServerById(
- string strGUID, ExternalServiceId serviceId)
- {
- if (strGUID == null || serviceId == null)
- return null;
- Guid serverGUID;
- if (!Guid.TryParse(strGUID, out serverGUID))
- return null;
- // Сначала получаем сервис, затем сервер
- MultiServerService service =
- ExternalServiceRegistry.GetService(serviceId)
- as MultiServerService;
- if (service != null && serverGUID != null)
- {
- IExternalServer server = service.GetServer(serverGUID);
- if (server != null)
- return server;
- }
- return null;
- }
Источник: http://adndevblog.typepad.com/aec/2015/05/reading-ashrae-table-information-from-elements.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=2824
Опубликовано 27.06.2015