Сообщество программистов Autodesk в СНГ
ADN Club => Revit API => Тема начата: enot от 17-02-2019, 15:11:52
-
Солид представляет собой куб, есть ли методы апи , которые позволят быстро получить:
- самую верхнюю и самую нижнюю горизонтальную поверхность (Face) куба
- получить все вертикальные и горизонтальные поверхности
- как узнать что Face имеет отверстия внутри?
-
получить плоские face-ы - solid.Faces.OfType<PlanarFace>()
- самую верхнюю и самую нижнюю горизонтальную поверхность (Face) куба
у плоской поверхности получить нормаль, если она BasisZ - то это горизонтальная верхняя поверхность, самая верхняя или нет - смотрим свойство face.Origin.Z, горизонтальная нижняя имеет нормаль -1*BasisZ
- получить все вертикальные и горизонтальные поверхности
с горизонтальными разобрались, вертикальные опять же проверяем нормаль: normal.DotProduct(XYZ.BasisZ) ~ 0
- как узнать что Face имеет отверстия внутри?
получаем все границы face.GetEdgesAsCurveLoops, дальше каждую из них тестируем методом IsCounterclockwise, которому передаем нормаль faсe-а, если результат false - значит, это отверстие
-
solid.Faces.OfType<PlanarFace>()
Это интересно :) (нет такого метода , хотя может это тот же метод .GetType()). Вообще Face может быть либо PlanarFace , либо Face ?
Если у нас к примеру шар - то для него будет solid.Faces.OfType<Face>() ?
-
Где у шара "горизонтальная поверхность"?
Face - базовый класс, какими бывают Face-ы - см. в SDK