/// <summary> /// Получить значение атрибута через его ID номер /// </summary> public static string GetAttributeById(Element element, ElementMicrostationAttributes attributeId) { var attributeValue = String.Empty; var dataBlocks = element?.GetUserAttributeData((int)ElementMicrostationAttributes.AttributesArray). Cast <DataBlock>(). ToList(); //поиск с обратного конца из-за возможных накоплений атрибутов if (dataBlocks == null) { return(GetAttributeNameInCorrectCase(attributeValue)); } for (int i = dataBlocks.Count - 1; i >= 0; i--) { var attributeValueFromDataBlock = String.Empty; short attributeIdFromDataBlock = 0; DataBlockReadWriteOperation(dataBlocks[i], ref attributeValueFromDataBlock, ref attributeIdFromDataBlock, DataBlockOperationType.Read); if (attributeIdFromDataBlock == (int)attributeId) { attributeValue = attributeValueFromDataBlock; break; } } return(GetAttributeNameInCorrectCase(attributeValue)); }
/// <summary> /// Проверить блок и записать атрибут при наличии /// </summary> private static bool DataBlockCheckAttributeAndWriteIfExist(Element element, ElementMicrostationAttributes attributeId, string attributeValue) { if (element == null) { return(false); } var dataBlocks = element.GetUserAttributeData((int)ElementMicrostationAttributes.AttributesArray). Cast <DataBlock>(). ToList(); bool isAttributeFound = false; for (int i = dataBlocks.Count - 1; i >= 0; i--) { var attributeValueFromDataBlock = String.Empty; short attributeIdFromDataBlock = 0; DataBlockReadWriteOperation(dataBlocks[i], ref attributeValueFromDataBlock, ref attributeIdFromDataBlock, DataBlockOperationType.Read); if (attributeIdFromDataBlock == (short)attributeId && attributeValueFromDataBlock != attributeValue) { //атрибуты не удаляются, а копятся. Не самое лучшее решение. Избегать установки атрибутов element.DeleteUserAttributeData(attributeIdFromDataBlock, (short)i); DataBlockAddNewAttribute(element, attributeId, attributeValue); isAttributeFound = true; } } return(isAttributeFound); }
private static void DataBlockAddNewAttribute(Element element, ElementMicrostationAttributes attributeId, string attributeValue) { var dataBlock = new DataBlock(); var attributeIdToDataBlock = (short)attributeId; DataBlockReadWriteOperation(dataBlock, ref attributeValue, ref attributeIdToDataBlock, DataBlockOperationType.Write); element?.AddUserAttributeData((int)ElementMicrostationAttributes.AttributesArray, dataBlock); }
/// <summary> /// Записать значение атрибута через его ID номер /// </summary> public static void SetAttributeById(Element element, ElementMicrostationAttributes attributeId, string attributeValue) { if (String.IsNullOrEmpty(attributeValue)) { return; } attributeValue = GetAttributeNameInCorrectCase(attributeValue); bool isAttributeFound = DataBlockCheckAttributeAndWriteIfExist(element, attributeId, attributeValue); if (!isAttributeFound) { DataBlockAddNewAttribute(element, attributeId, attributeValue); } }
/// <summary> /// Записать значение атрибута по его PersonId номеру /// </summary> public static void SetAttributeById(this Element element, ElementMicrostationAttributes elementAttribute, string attributeValue) => AttributesElementsMicrostation.SetAttributeById(element, elementAttribute, attributeValue);
/// <summary> /// Получить значение атрибута по его PersonId номеру /// </summary> public static string GetAttributeById(this Element element, ElementMicrostationAttributes elementAttribute) => AttributesElementsMicrostation.GetAttributeById(element, elementAttribute);