Поверхность с произвольными границами MbCurveBoundedSurface
Класс MbCurveBoundedSurface объявлен в файле surf_curve_bounded_surface.h.
Поверхность MbCurveBoundedSurface описывается базовой поверхностью MbSurface basisSurface, множеством граничных кривых RPArray<MbContourOnSurface> curves (контуров на поверхности) и граничными значениями параметров umin, umax, vmin, vmax, определяющими габаритный прямоугольник области определения параметров.
Поверхность MbCurveBoundedSurface имеет криволинейные края и может иметь произвольные вырезы внутри. Границы поверхности описывают контуры на поверхности контейнера curves.
В методе PointOn( double u, double v, MbCartPoint3D & s ) радиус-вектор поверхности s описывается векторной функцией
где \(\Omega\) — область определения параметров, которая представляет собой двумерную связную область. Радиус-вектор ограниченной контурами поверхности описывается тем же законом, что и поверхность basisSurface, но имеет другую область определения параметров. Базовая поверхность и контуры на ней приведены на рис. 1:
Рис. 1
В общем случае область определения параметров \(\Omega\) ограниченной контурами поверхности может выходить за область определения параметров поверхности basisSurface. Вне области определения параметров поверхности basisSurface радиус-вектор r(u, v) вычисляется методом _PointOn(u, v, s) в соответствии с правилами продолжения поверхности basisSurface. Поверхность с произвольной границей приведена на рис. 2:
Рис. 2
Каждая кривая контейнера curves описывает одну замкнутую границу поверхности. Каждая кривая контейнера curves представляет собой контур на поверхности MbContourOnSurface. Каждый контур на поверхности описывается поверхностью surface, совпадающей с basisSurface, и двумерным контуром contour. Контур contour представляет собой составную замкнутую двумерную кривую. Сегментами контура contour могут быть любые двумерные кривые MbCurve за исключением составных кривых MbContour. В общем случае в местах стыковки сегментов производные контура терпят разрыв по длине и направлению. Двумерные контуры описывают границы области определения \(\Omega\) поверхности MbCurveBoundedSurface. Граничные контуры контейнера curves удовлетворяют следующим условиям: они не пересекают сами себя и друг друга, первый контур curves[0] контейнера описывает внешнюю границу и содержит внутри все остальные контуры, которые описывают внутренние вырезы в поверхности. Внутренние контуры не могут быть вложены друг в друга. Для быстрого определения положения некоторой двумерной точки относительно области определения параметров поверхности граничные контуры ориентированы так, что при движении вдоль границы поверхность всегда находится слева, если смотреть навстречу нормали поверхности. Таким образом, внешний контур ориентирован так, что обход по нему осуществляется против движения часовой стрелки, если смотреть на поверхность навстречу её нормали, а внутренние контуры ориентированы в противоположном направлении.
Базовой поверхностью basisSurface не может быть поверхность с произвольными границами MbCurveBoundedSurface. Если нужно построить поверхность с произвольными границами на основе другой поверхности с произвольными границами, то в качестве базовой поверхности следует использовать базовую поверхность последней.