Определение идентификатора или геометрических ссылок вершин кривой
Вопрос: Я пытаюсь получить вершины всех граней в Revit.
Я пробовал воспользоваться методом Edge.AsCurve().GetEndPoint(0/1), который возвращает координаты начальной и конечной точки кривой.
Но мне также хотелось бы получить уникальный идентификатор каждой вершины, таким образом, чтобы я мог исключить повторяющиеся вершины.
Я пытался использовать Edge.GetHashCode(), который прекрасно работает для граней. Т.е. хэш-код для грани одной поверхности точно такой же, как и у грани, полученной с другой поверхности.
Но метод XYZ.GetHashCode() возвращает различный результат для вершины, которая является общей для различных граней.
Может быть я не корректно извлекаю конечные точки кривой?
Есть ли другой способ получить уникальный идентификатор для вершины Revit или для грани?
Ответ: В целом, определение каких-либо уникальных идентификаторов для геометрии, которая создается динамически и может быть изменена в любой момент – довольно непростая задача.
В Revit API вы можете воспользоваться так называемыми ссылками на объекты геометрии. Чтобы их получить, нужно установить свойство ComputeReferences в значение true при извлечении геометрии элемента.
Эти ссылки могут быть преобразованы в строковое представление, которое является постоянным и может быть использовано позднее для сравнения. Для этого существует метод Reference.ConvertToStableRepresentation.
Но я бы предложил более простой метод, который может вас заинтересовать. Он описан в статье Создание собственного идентификатора на основе геометрических координат (на англ.).
Очевидно, что метод также не очень надежен, но он может удовлетворить вашим потребностям.
Обсуждение: http://adn-cis.org/forum/index.php?topic=2585
Опубликовано 22.03.2015