Solid фильтровать Face по ориентации

Автор Тема: Solid фильтровать Face по ориентации  (Прочитано 1863 раз)

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

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Солид представляет собой куб, есть ли методы апи , которые позволят быстро получить:

-  самую верхнюю и самую нижнюю горизонтальную поверхность (Face) куба
- получить все вертикальные и горизонтальные поверхности
- как узнать что Face имеет отверстия внутри?



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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Solid фильтровать Face по ориентации
« Ответ #1 : 17-02-2019, 15:31:51 »
получить плоские face-ы - solid.Faces.OfType<PlanarFace>()

-  самую верхнюю и самую нижнюю горизонтальную поверхность (Face) куба

у плоской поверхности получить нормаль, если она BasisZ - то это горизонтальная верхняя поверхность, самая верхняя или нет - смотрим свойство face.Origin.Z, горизонтальная нижняя имеет нормаль -1*BasisZ

- получить все вертикальные и горизонтальные поверхности

с горизонтальными разобрались, вертикальные опять же проверяем нормаль: normal.DotProduct(XYZ.BasisZ) ~ 0

- как узнать что Face имеет отверстия внутри?

получаем все границы face.GetEdgesAsCurveLoops, дальше каждую из них тестируем методом IsCounterclockwise, которому передаем нормаль faсe-а, если результат false - значит, это отверстие

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Solid фильтровать Face по ориентации
« Ответ #2 : 17-02-2019, 16:04:04 »
solid.Faces.OfType<PlanarFace>()
Это интересно  :) (нет такого метода , хотя может это тот же метод   .GetType()). Вообще Face может быть либо PlanarFace , либо Face ?
Если у нас к примеру шар - то для него будет solid.Faces.OfType<Face>() ?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Solid фильтровать Face по ориентации
« Ответ #3 : 17-02-2019, 16:17:07 »
Где у шара "горизонтальная поверхность"?

Face - базовый класс, какими бывают Face-ы - см. в SDK