Кривая MbCurve3D
Класс MbCurve3D объявлен в файле curve3d.h.
Кривая MbCurve3D является наследником классов MbSpaceItem и MbNestSyncItem:
Кривая является абстрактным классом. В геометрическом ядре C3D реализованы следующие кривые, которые являются наследниками класса MbCurve3D:
MbLine3D – прямая линия;
MbLineSegment3D – отрезок прямой;
MbArc3D – дуга эллипса;
MbPolyline3D – ломаная линия;
MbNurbs3D – B-кривая (NonUniform Rational B-Spline);
MbBezier3D – составная кривая Безье;
MbHermit3D – кривая Эрмита;
MbCubicSpline3D – кубический сплайн;
MbOffsetCurve3D – эквидистантная кривая;
MbTrimmedCurve3D – усеченная кривая;
MbReparamCurve3D – репараметризованная кривая;
MbConeSpiral – коническая спираль;
MbCurveSpiral – спираль с прямолинейной осью и переменным радиусом;
MbCrookedSpiral – спираль с осью в виде плоской кривой;
MbBridgeCurve3D – сплайн Эрмита, соединяющий две кривые;
MbContour3D – контур (составная кривая);
MbPlaneCurve – плоская кривая в пространстве;
MbSurfaceCurve – кривая на поверхности;
MbSilhouetteCurve – силуэтная кривая поверхности;
MbContourOnSurface – контур на поверхности;
MbContourOnPlane – контур на плоскости;
MbSurfaceIntersectionCurve – кривая пересечения поверхностей.
Кривая MbCurve3D представляет собой векторную функцию
скалярного параметра t, принимающего значения на отрезке [tmin, tmax]. Кривая представляет собой непрерывное отображение некоторого участка числовой оси в трёхмерное пространство. Область изменения параметра кривой есть отрезок [tmin, tmax] в одномерном пространстве. Координаты x(t), y(t), z(t) точки кривой curve(t) являются однозначными непрерывными функциями параметра t.
Граничные значения tmin и tmax области определения параметра выдают методы кривой double GetTMin() и double GetTMax(), соответственно.
Кривую будем называть периодической, если существует p > 0, такое, что curve(t ± kp) = curve(t), где k — целое число.
Методы
bool IsPeriodic()
и
bool IsClosed()
периодической кривой возвращают true.
Метод
double GetPeriod()
периодической кривой или кривой, которая может быть расширена до периодической, выдает период p. Область определения параметра периодической кривой всегда лежит в пределах одного периода.
Кривая считается периодической, если:
Начальная и конечная точки кривой совпадают. 3D кривые следующих типов не считаются периодическими при совпадении начальной и конечной точки, например в случае вырожденной кривой; для них методы IsClosed(), IsPeriodic() всегда возвращают false:
MbSpiral и производные классы;
MbContour3D, в случае если он содержит только один сегмент одного из указанных выше типов.
Производные в начальной и конечной точках совпадают. Если по своей природе кривая допускает изломы (контур, ломаная), то допускается несовпадение производных. У кривой Безье производные должны совпадать по направлению, но могут не совпадать по модулю.
Для проверки совпадения начальной и конечной точек кривой с заданной точностью необходимо использовать метод IsTouch(), который определяет совпадение независимо от гладкости замыкания.
Основным методом кривой является метод
void PointOn( double & t,
MbCartPoint3D & r );
Он выдаёт радиус-вектор r точки кривой для заданного параметра t.
Методы
void FirstDer( double & t,
MbVector3D & rt );
void SecondDer( double & t,
MbVector3D & rtt );
void ThirdDer( double & t,
MbVector3D & rttt );
выдают соответственно первую r t, вторую r tt и третью r ttt производные радиуса-вектора кривой для заданного параметра t. Перечисленные методы корректируют параметр кривой при его выходе за пределы области определения (исключение составляет прямая MbLine3D). При выходе параметра t кривой за пределы отрезка [tmin, tmax] непериодические кривые смещают параметр t к ближайшей границе tmin или tmax, а периодические кривые добавляют или вычитают необходимое количество периодов.
Метод
void _PointOn( double t,
MbCartPoint3D & r );
выдаёт радиус-вектор r точки кривой для заданного параметра t как в области определения параметра кривой, так и за её пределами. В общем случае непериодическая кривая за пределами области определения параметра продолжается по касательной в крайней точке. Исключение составляют периодические кривые, дуга MbArc3D, спирали MbSpiral, символьная кривая MbCharacterCurve3D и усечённая кривая MbTrimmedCurve3D в пределах базовой кривой. Периодические кривые за пределами области определения параметра продолжаются циклически. Методы
void _FirstDer( double t,
MbVector3D & rt );
void _SecondDer( double t,
MbVector3D & rtt );
void _ThirdDer( double t,
MbVector3D & rttt );
выдают соответственно первую r t, вторую r tt и третью r ttt производные радиуса-вектора кривой для заданного параметра t как в области определения кривой, так и за её пределами.
Кривые перегружают такие методы трёхмерного геометрического объекта, как:
методы, обслуживающие преобразование геометрического объекта,
void Move( const MbVector3D & to,
MbRegTransform * iReg = nullptr );
void Rotate( const MbAxis3D & axis,
double angle,
MbRegTransform * iReg = nullptr );
void Transform( const MbMatrix3D & matr,
MbRegTransform * iReg = nullptr );
методы, обеспечивающие копирование, проверку на совпадение, проверку на возможность сделать совпадающими, делающие объекты совпадающими:
MbSpaceItem & Duplicate( MbRegDuplicate * iReg = nullptr );
bool IsSame( const MbSpaceItem & other,
double accuracy = LENGTH_EPSILON );
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 CalculateMesh( const MbStepData & stepData,
const MbFormNote & note,
MbMesh & mesh ) const;
Все кривые, кроме MbContour3D, MbContourOnSurface, MbContourOnPlane, как правило, не имеют изломов. MbContour3D, MbContourOnSurface, MbContourOnPlane представляют собой составные кривые и могут иметь изломы в точках сочленения составляющих их сегментов.