Создание топоповерхности по точкам

Автор Тема: Создание топоповерхности по точкам  (Прочитано 4552 раз)

0 Пользователей и 3 Гостей просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Starscream343Автор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
Добрый день!
Подскажите пожалуйста..
Я создаю топоповерхность по точкам с помощью класса 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>


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






« Последнее редактирование: 25-04-2020, 16:49:53 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Starscream343,
1. Обрати внимание на Правило форматирования кода на форуме (у меня в подписи).
2. Внутренние единицы измерения в Revit API - футы.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
1. Да, внутренние единицы длины в Revit - футы, как верно отметил Александр. Рекомендую использовать методы UnitUtils.ConvertToInternalUnits, UnitUtils.ConvertFromInternalUnits
2. Ты можешь использовать другой метод создания поверхности, где последним параметром можешь задать как раз триангуляцию, правда только начиная с Revit 2019.2

Оффлайн Starscream343Автор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
1. Да, внутренние единицы длины в Revit - футы, как верно отметил Александр. Рекомендую использовать методы UnitUtils.ConvertToInternalUnits, UnitUtils.ConvertFromInternalUnits
2. Ты можешь использовать другой метод создания поверхности, где последним параметром можешь задать как раз триангуляцию, правда только начиная с Revit 2019.2

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

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

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



Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Это получается, что бы мы не добавляли через API, ревит воспринимает числа по умолчанию как футы не зависимо от региональных настроек и настроек проекта?

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

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

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

Видимо, кэширует...

Отмечено как Решение Starscream343 27-04-2020, 15:20:03

Оффлайн Starscream343Автор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
Александр Игнатович,

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



Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Супер!