Beispiel #1
0
        /// <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));
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        /// <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);