Поверхность MbSurface
Класс MbSurface объявлен в файле surface.h.
Поверхность MbSurface является наследником класса MbSpaceItem, рис. 1.
Рис. 1
Поверхность является абстрактным классом. В геометрическом ядре C3D реализованы следующие поверхности, которые являются наследниками класса MbSurface:
MbPlane — плоскость,
MbCylinderSurface — цилиндрическая поверхность,
MbConeSurface — коническая поверхность,
MbSphereSurface — сферическая поверхность,
MbTorusSurface — поверхность тора,
MbExtrusionSurface — поверхность выдавливания,
MbRevolutionSurface — поверхность вращения,
MbExpansionSurface — плоскопараллельная кинематическая поверхность,
MbSpiralSurface — спиральная поверхность,
MbEvolutionSurface — кинематическая поверхность,
MbExactionSurface — кинематическая поверхность с адаптацией,
MbSectorSurface — секториальная поверхность,
MbRuledSurface — линейчатая поверхность,
MbLoftedSurface — поверхность на семействе кривых,
MbElevationSurface — поверхность на семействе кривых и направляющей,
MbCornerSurface — поверхность на трёх кривых,
MbCoverSurface — поверхность на четырёх кривых,
MbCoonsPatchSurface — бикубическая поверхность Кунса,
MbMeshSurface — поверхность на сети кривых,
MbJoinSurface — поверхность соединения,
MbSplineSurface — NURBS-поверхность (NonUniform Rational B-Spline поверхность),
MbOffsetSurface — эквидистантная поверхность,
MbChamferSurface — поверхность фаски,
MbFilletSurface — поверхность скругления,
MbChannelSurface — поверхность скругления с переменным радиусом,
MbCurveBoundedSurface — поверхность с произвольными границами.
Поверхность MbSurface представляет собой векторную функцию
двух скалярных параметров u и v, принимающих значения на двумерной связной области \(\Omega\). Поверхность представляет собой непрерывное отображение двумерной связной области \(\Omega\) в трёхмерное пространство. Область \(\Omega\) будем описывать в двумерной декартовой системе координат. В частном случае область \(\Omega\) представляет собой прямоугольник, и параметры поверхности принимают значения в пределах umin \(\leq\) u \(\leq\) umax, vmin \(\leq\) v \(\leq\) vmax. В общем случае область \(\Omega\) описывается двумерными кривыми. Координаты x(u, v), y(u, v), z(u, v) точки поверхности surface(u, v) являются однозначными непрерывными функциями параметров u и v.
Граничные значения umin, umax, vmin, vmax области определения параметров выдают методы поверхности double GetUMin(), double GetUMax(), double GetVMin(), double GetVMax() соответственно.
Поверхность будем называть периодической по первому параметру, если существует pu > 0, такое, что surface(u ± kpu, v) = surface(u, v), где k — целое число. Поверхность будем называть периодической по второму параметру, если существует pv > 0, такое, что surface(u, v ± kpv) = surface(u, v), где k — целое число. Область определения периодического параметра поверхности лежит в пределах одного периода для соответствующего параметра.
Метод bool IsUClosed() периодической по первому параметру поверхности возвращает true.
Метод bool IsVClosed() периодической по второму параметру поверхности возвращает true.
Метод double GetUPeriod() периодической по первому параметру поверхности или поверхности, которая может быть расширена до периодической, выдаёт период pu. Метод double GetVPeriod() периодической по второму параметру поверхности или поверхности, которая может быть расширена до периодической, выдаёт период pv. Область определения параметра периодической поверхности всегда лежит в пределах одного периода.
Введём обозначения
для частных производных поверхности по её параметрам.
Основным методом поверхности является метод
void PointOn( double & u, double & v, MbCartPoint3D & s ).
Он выдаёт радиус-вектор s(u, v) точки поверхности для заданных параметров u и v.
Методы
void DeriveU( double & u, double & v, MbVector3D & su ),
void DeriveV( double & u, double & v, MbVector3D & sv ),
void DeriveUU( double & u, double & v, MbVector3D & suu ),
void DeriveUV( double & u, double & v, MbVector3D & suv ),
void DeriveVV( double & u, double & v, MbVector3D & svv ),
void DeriveUUU( double & u, double & v, MbVector3D & suuu ),
void DeriveUUV( double & u, double & v, MbVector3D & suuv ),
void DeriveUVV( double & u, double & v, MbVector3D & suvv ),
void DeriveVVV( double & u, double & v, MbVector3D & svvv )
выдают соответственно производные su, sv, suu, suv, svv, suuu, suuv, suvv, svvv радиуса-вектора поверхности для заданных параметров u и v. Перечисленные методы корректируют параметры поверхности при их выходе за пределы области определения (исключение составляет плоскость MbPlane). При выходе параметра u за пределы отрезка [umin, umax] непериодические по первому параметру поверхности смещают параметр u к ближайшей границе umin или umax, а периодические по первому параметру поверхности добавляют или вычитают необходимое количество периодов. При выходе параметра v за пределы отрезка [vmin, vmax] непериодические по второму параметру поверхности смещают параметр v к ближайшей границе vmin или vmax, а периодические по второму параметру поверхности добавляют или вычитают необходимое количество периодов.
Метод
void _PointOn( double u, double v, MbCartPoint3D & s )
выдаёт радиус-вектор s(u, v) точки поверхности для заданных параметров u и v как в области определения параметров поверхности, так и за её пределами. Каждая непериодическая поверхность за пределами области определения параметров продолжается по своему закону. При отсутствии такого закона (в общем случае) непериодическая поверхность за пределами области определения параметров продолжается по касательной к соответствующей крайней точке поверхности.
Методы
void _DeriveU( double u, double v, MbVector3D & su ),
void _DeriveV( double u, double v, MbVector3D & sv ),
void _DeriveUU( double u, double v, MbVector3D & suu ),
void _DeriveUV( double u, double v, MbVector3D & suv ),
void _DeriveVV( double u, double v, MbVector3D & svv ),
void _DeriveUUU( double u, double v, MbVector3D & suuu ),
void _DeriveUUV( double u, double v, MbVector3D & suuv ),
void _DeriveUVV( double u, double v, MbVector3D & suvv ),
void _DeriveVVV( double u, double v, MbVector3D & svvv )
выдают соответственно производные su, sv, suu, suv, svv, suuu, suuv, suvv, svvv радиуса-вектора поверхности для заданных параметров u и v как в области определения поверхности, так и за её пределами.
Поверхности перегружают такие методы трёхмерного геометрического объекта как:
методы, обслуживающие преобразование геометрического объекта
void Move( const MbVector3D & v, MbRegTransform * iReg = NULL ),
void Rotate( const MbAxis3D & axis, double angle, MbRegTransform * iReg = NULL ),
void Transform( const MbMatrix3D & m, MbRegTransform * iReg = NULL ),
методы, обеспечивающие копирование, проверку на совпадение, проверку на возможность сделать совпадающими, делающие объекты совпадающими,
MbSpaceItem & Duplicate( MbRegDuplicate * iReg = NULL ),
bool IsSame( const MbSpaceItem & item ),
bool IsSimilar( const MbSpaceItem & item ),
bool SetEqual( const MbSpaceItem & item ),
методы, возвращающие тип из перечисления геометрических объектов,
MbeSpaceType IsA(),
MbeSpaceType Type(),
MbeSpaceType Family(),
методы, обеспечивающие выдачу и редактирование внутренних данных объекта,
MbProperty & CreateProperty( MbePrompt name ),
void GetProperties( MbProperties & properties ),
void SetProperties( MbProperties & properties ),
метод, наполняющий полигональную копию геометрического объекта,
void CalculateWire( double sag, MbMesh & mesh ).
Большинство поверхностей имеют прямоугольную область определения параметров. Среди всех поверхностей выделим MbCurveBoundedSurface, которая является универсальной поверхностью. MbCurveBoundedSurface имеет криволинейные края и может иметь произвольные вырезы внутри. MbCurveBoundedSurface строится на основе любой поверхности с прямоугольной областью определения параметров.