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

ADN Club => Revit API => Тема начата: Starscream343 от 25-04-2020, 13:45:15

Название: Создание топоповерхности по точкам
Отправлено: Starscream343 от 25-04-2020, 13:45:15
Добрый день!
Подскажите пожалуйста..
Я создаю топоповерхность по точкам с помощью класса TopographySurface:
Код - C# [Выбрать]
  1. TopographySurface surf = TopographySurface.Create(doc, p_list);
p_list - список точек XYZ

1. Как задать единицы измерения для координат при таком способе? Необходимы метры. Единицы измерения в настройках проекта не влияют на это. Не нашёл свойства или метода у объекта поверхности. Если импортировать поверхность из файла точек, то даётся выбор единиц измерения, и поверхность строится корректно.
2. Есть ли настройки у объекта поверхности, которые влияют на её построение? Например выбор алгоритма триангуляции или ещё что то в этом роде? Иногда поверхность строится некорректно, хотя возможно это происходит так же из-за округления координат.

Изо.1 Настройки в проекте.
Изо.2 ТОпоповерхность из файла точек
Изо.3 ТОпоповерхность средствами Api по тем же точкам. Топоповерхность при этом намного меньше, чем из файла точек.

Пример из LandXML с единицами измерения и форматом координат
Код - XML [Выбрать]
  1. <Units>
  2. <Metric areaUnit="squareMeter" linearUnit="meter" volumeUnit="cubicMeter" temperatureUnit="celsius" pressureUnit="milliBars" diameterUnit="millimeter" angularUnit="decimal degrees" directionUnit="decimal degrees"></Metric>
  3. </Units>
  4. <P id="2">7527842.7900009993 464460.12000000104 50.79</P>
  5. <P id="3">7527864.1299970001 464488.42000000179 51.37</P>


П.С.: можно конечно пересчитывать координаты, но тогда в каких единицах измерения строится топоповерхность по умолчанию?

(https://i.postimg.cc/XGf00jG8/1.png) (https://postimg.cc/XGf00jG8)

(https://i.postimg.cc/2q5wD21X/2.png) (https://postimg.cc/2q5wD21X)

(https://i.postimg.cc/Q9yy1yyR/3.png) (https://postimg.cc/Q9yy1yyR)
Название: Re: Создание топоповерхности по точкам
Отправлено: Александр Ривилис от 25-04-2020, 16:53:24
Starscream343,
1. Обрати внимание на Правило форматирования кода на форуме (у меня в подписи).
2. Внутренние единицы измерения в Revit API - футы.
Название: Re: Создание топоповерхности по точкам
Отправлено: Александр Игнатович от 27-04-2020, 10:13:22
1. Да, внутренние единицы длины в Revit - футы, как верно отметил Александр. Рекомендую использовать методы UnitUtils.ConvertToInternalUnits, UnitUtils.ConvertFromInternalUnits
2. Ты можешь использовать другой метод создания поверхности, где последним параметром можешь задать как раз триангуляцию, правда только начиная с Revit 2019.2
Название: Re: Создание топоповерхности по точкам
Отправлено: Starscream343 от 27-04-2020, 12:12:44
1. Да, внутренние единицы длины в Revit - футы, как верно отметил Александр. Рекомендую использовать методы UnitUtils.ConvertToInternalUnits, UnitUtils.ConvertFromInternalUnits
2. Ты можешь использовать другой метод создания поверхности, где последним параметром можешь задать как раз триангуляцию, правда только начиная с Revit 2019.2

Это получается, что бы мы не добавляли через API, ревит воспринимает числа по умолчанию как футы не зависимо от региональных настроек и настроек проекта?

Использовал указанный Вами метод. Как будто бы работает, но теперь появилась странность:
Если я импортирую из файла точек, то поверхность строится хорошо и ровно. Если я сначала импортирую через API а потом из файла точек (для сравнения), то обе поверхности строятся одинаково криво) (см. скриншот, две поверхности разными методами). Какие то чудеса.

Может при импорте из файла точек, он сортирует точки перед построением поверхности?

(https://i.postimg.cc/jL7Hjmrv/1.png) (https://postimg.cc/jL7Hjmrv)
Название: Re: Создание топоповерхности по точкам
Отправлено: Александр Игнатович от 27-04-2020, 12:54:57
Это получается, что бы мы не добавляли через API, ревит воспринимает числа по умолчанию как футы не зависимо от региональных настроек и настроек проекта?

да, API работает со внутренними единицами.

Может при импорте из файла точек, он сортирует точки перед построением поверхности?
Не думаю, скорее фасеты неправильно определены.

Если я сначала импортирую через API а потом из файла точек (для сравнения), то обе поверхности строятся одинаково криво)

Видимо, кэширует...
Название: Re: Создание топоповерхности по точкам
Отправлено: Starscream343 от 27-04-2020, 15:18:48
Александр Игнатович,

Я нашёл проблему. Дело в том, что значения координат довольно большие и имеют много значимых знаков после запятой. Вот например 7527954.5022250563 464476.34731927584. Похоже на decimal. API ревита позволяет работать с double, при этом отсекается много знаков после запятой. + конвертация в футы. Всё это даёт большую погрешность при построении, отсюда и точки "пляшут". Видимо, при импорте из файла отрабатывается внутренний механизм конвертации строк, которой не даёт такого сильного округления. Решил смещать целую часть координат, чтобы она была ближе к 0, и у double оставалось больше знаков после запятой. Помогло.

(https://i.postimg.cc/QFBvPsgr/1.png) (https://postimg.cc/QFBvPsgr)
Название: Re: Создание топоповерхности по точкам
Отправлено: Александр Игнатович от 27-04-2020, 15:22:52
Супер!