Кривая MbCurve3D

Класс MbCurve3D объявлен в файле curve3d.h.

Кривая MbCurve3D является наследником классов MbSpaceItem и MbNestSyncItem:

../../../../_images/O.4.1.1.png

Кривая является абстрактным классом. В геометрическом ядре 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 представляет собой векторную функцию

\[\mathbf{\text{curve}}(t) = \begin{bmatrix} x(t) & y(t) & z(t) \end{bmatrix}\]

скалярного параметра 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:

    • MbLine3D;

    • MbLineSegment3D;

    • MbSpiral и производные классы;

    • MbBridgeCurve3D;

    • 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 представляют собой составные кривые и могут иметь изломы в точках сочленения составляющих их сегментов.