XYZ для CreateViaOffset

Автор Тема: XYZ для CreateViaOffset  (Прочитано 5451 раз)

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: XYZ для CreateViaOffset
« Ответ #15 : 30-10-2018, 22:38:34 »
Еще один вариант для того, чтобы точно определить какой знак для offset нужен - это получить площадь при положительном и отрицательном значении. CurveLoop с большей площадью и будет той, которая снаружи.
Площади CurveLoop, как я понял можно считать при помощи метода Autodesk.Revit.DB.IFC.ExporterIFCUtils.ComputeAreaOfCurveLoops
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: XYZ для CreateViaOffset
« Ответ #16 : 30-10-2018, 22:41:02 »
Надо ж сколько полезной информации на сегодня  :)
Спасибо Вам еще раз , особенно за ценные комментарии к ответу
Буду "переваривать", думаю, не один раз ;D

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: XYZ для CreateViaOffset
« Ответ #17 : 31-10-2018, 09:51:37 »
Кстати, если исходной фигурой является Solid, то нормали его граней всегда будут указывать наружу

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: XYZ для CreateViaOffset
« Ответ #18 : 31-10-2018, 10:25:12 »
Логично, но тоже есть нюансы, если из граней получать контуры, то внешний контур грани будет против часовой стрелки (с направления нормали), а если в грани есть дырки, то контуры дырок будут уже по часовой стрелке с направления нормали и у curveloop-ов дырок будут нормали curveloop-ов в противоположную сторону

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: XYZ для CreateViaOffset
« Ответ #19 : 31-10-2018, 10:31:42 »
Это я к тому, что нормаль можно брать у грани, из которой получается CurveLoop, а не у этого самого CurveLoop, и тогда будет совершенно фиолетово в какую сторону построен CurveLoop

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: XYZ для CreateViaOffset
« Ответ #20 : 31-10-2018, 10:36:36 »
Да ну? Работаем с контуром дырки из этой грани, берем нормаль из грани, вызываем CreateViaOffset с положительным distance, получаем смещение внутрь.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: XYZ для CreateViaOffset
« Ответ #21 : 31-10-2018, 10:46:57 »
Да ну? Работаем с контуром дырки из этой грани, берем нормаль из грани, вызываем CreateViaOffset с положительным distance, получаем смещение внутрь.
Соглашусь с Вам. Метод CreateViaOffset, на мой взгляд, сделан плохо. Логично было бы, чтобы вектор просто задавал направление смещения и не зависел от самого CurveLoop. Да, судя, по замечаниям к методу, там слишком много проблем )) Много таких методов в API Ревита  :(

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: XYZ для CreateViaOffset
« Ответ #22 : 31-10-2018, 11:07:22 »
Александр, соглашусь и не соглашусь с Вами одновременно. API так то все-таки неплох и достаточно логичен. По этому конкретно методу, вроде бы интересная возможность должна быть указать нормаль, неколлинеарную плоскости контура, но по описанию метода
Цитировать
defined by translating every point of the original curve by the vector offsetDist * (curveTan x normal) where curveTan is the curve's unit tangent vector at the given point

curveLoop окажется незамкнутым, но с учетом того, что метод пытается создать замкнутый контур, вполне логично ловим InternalException.

Скорее всего, это всё имеет смысл с неплоскими контурами, надо будет как-нибудь поэкспериментировать на досуге, тогда единственный мааааленький упрек в сторону API в данном случае, это то, что нет перегруженного метода без параметра нормали, который бы работал с плоскими контурами, и определял нормаль исходя из направления линий контура