ADN Open CIS
Сообщество программистов Autodesk в СНГ

22/03/2015

Определение идентификатора или геометрических ссылок вершин кривой

Вопрос: Я пытаюсь получить вершины всех граней в Revit.

Я пробовал воспользоваться методом Edge.AsCurve().GetEndPoint(0/1), который возвращает координаты начальной и конечной точки кривой.

Но мне также хотелось бы получить уникальный идентификатор каждой вершины, таким образом, чтобы я мог исключить повторяющиеся вершины.

Я пытался использовать Edge.GetHashCode(), который прекрасно работает для граней. Т.е. хэш-код для грани одной поверхности точно такой же, как и у грани, полученной с другой поверхности.

Но метод XYZ.GetHashCode() возвращает различный результат для вершины, которая является общей для различных граней.

Может быть я не корректно извлекаю конечные точки кривой?

Есть ли другой способ получить уникальный идентификатор для вершины Revit или для грани?

Ответ: В целом, определение каких-либо уникальных идентификаторов для геометрии, которая создается динамически и может быть изменена в любой момент – довольно непростая задача.

В Revit API вы можете воспользоваться так называемыми ссылками на объекты геометрии. Чтобы их получить, нужно установить свойство ComputeReferences в значение true при извлечении геометрии элемента.

Эти ссылки могут быть преобразованы в строковое представление, которое является постоянным и может быть использовано позднее для сравнения. Для этого существует метод Reference.ConvertToStableRepresentation.

Но я бы предложил более простой метод, который может вас заинтересовать. Он описан в статье Создание собственного идентификатора на основе геометрических координат (на англ.).

Очевидно, что метод также не очень надежен, но он может удовлетворить вашим потребностям.

Источник: http://thebuildingcoder.typepad.com/blog/2015/03/state-of-the-view-and-data-api-va3c-and-edge-ids.html#4

Обсуждение: http://adn-cis.org/forum/index.php?topic=2585

Опубликовано 22.03.2015