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

ADN Club => Revit API => Тема начата: kuvon от 10-06-2019, 15:21:56

Название: Значение координаты Z для точки проецирования на TopographySurface
Отправлено: kuvon от 10-06-2019, 15:21:56
Добрый день!

На виде имеется несколько ModelLine и TopographySurface. Из линий получены точки начала и окончания. На ModelLine получено еще несколько точек. Необходимо полученные точки разместить на "земле" т.е. найти значения координат Z для точек.
Смотрел данную статью https://thebuildingcoder.typepad.com/blog/2014/09/planes-projections-and-picking-points.html#15 (https://thebuildingcoder.typepad.com/blog/2014/09/planes-projections-and-picking-points.html#15)  :( , но не понял, как уйти от Surface  к Plane.
Название: Re: Значение координаты Z для линии проецирования на TopographySurface
Отправлено: Александр Игнатович от 10-06-2019, 16:07:26
Добрый.

Во-первых, не стоит путать Surface (математическое описание поверхности, кстати, Plane - это класс-наследник Surface) и TopographySurface.

Сам TopographySurface не очень удобный объект для работы в данном случае, т.к. его геометрия - это Mesh. Собственно, первый вариант - это перебор его треугольников, последовательно проецируем точку на плоскость каждого треугольника и проверяем дальше, что проекция оказалась внутри треугольника. Альтернативный вариант - на 3D виде найти искомые проекции с помощью ReferenceIntersector-а.

Псевдокод:
Код - C# [Выбрать]
  1. var intersector = new ReferenceIntersector(new[] {toposurface.Id}, FindReferenceTarget.All, view);
  2. var intersection = intersector.FindNearest(point, XYZ.BasisZ) ?? intersector.FindNearest(point, -1*XYZ.BasisZ);
  3. return intersection?.GetReference().GlobalPoint;
  4.  
Название: Re: Значение координаты Z для линии проецирования на TopographySurface
Отправлено: kuvon от 11-06-2019, 09:34:56
Спасибо большое, очень помогли!