Согласно документации Revit API для хранения информации об элементах во внешних хранилищах данных рекомендуется использовать UniqueId.
Это надёжно, UniqueId остаётся неизменным в пределах модели в отличие от ElementId.
Однако UniqueId всё же может меняться в процессе работы в модели при казалось бы безобидной операции - "Зеркало".
Выберите какой-нибудь элемент, запишите его UniqueId и ElementId:
Я выбрал балку, вот её свойства:
Затем примените команду "Зеркало".
UniqueId и ElementId элемента изменились после выполнения команды:
На мой взгляд это явная недоработка, я не обнаружил описания такого поведения в документации. Рекомендаций для разрешения этой проблемы я не даю, зависит от конкретной задачи. Учитывайте эту особенность при разработке плагинов, где предполагается обновление элементов в пределах модели, либо работа с внешними источниками данных.
Успехов!
Если переместить объект с галочкой "Разъединить", происходить то же самое. Причем, в UniqueId меняется только последний байт в
ОтветитьУдалитьБлагодарю за дополнение. То же самое происходит и при повороте элемента с галкой "Разъединить"
УдалитьВсё происходящее вполне естественно. Когда вы нажимаете зеркалить, это не значит что элемент каким-то магическим образом выворачивается наизнанку. Просто старый элемент убирается и создаётся его копия в которой геометрия отзеркалена. Потому и новый айдишник, это не "недороботка", а вполне штатное поведение инструментов.
ОтветитьУдалитьАлексей, как для пользователя, так и для программиста такое поведение неочевидно, по крайней мере об этом ничего не нашёл в документации или в справке.
УдалитьОсновная проблема - при выполнении казалось бы простой операции, не предполагающей копирования элемента, ломается взаимосвязь элемента модели и внешнего источника данных по UniqueId.
На мой взгляд, при нажатии на кнопку "Зеркало" должна быть применена соответствующая трансформация и обновлены взаимосвязи между элементами, а не создаваться новый элемент.
Судя по тому что при перемещении и повороте элемента при нажатой галке "Разъединить" также слетают идентификаторы, скорее всего, решили не заморачиваться с обновлением/удалением связей между элементами.