C3D Toolkit
Kernel - 117936, Vision - 2.7.0.41
|
NURBS кривая в двумерном пространстве. Подробнее...
#include <cur_nurbs.h>
Открытые члены | |
DEPRECATE_DECLARE | MbNurbs () |
Общие функции геометрического объекта. | |
MbePlaneType | IsA () const override |
Получить тип объекта. | |
MbPlaneItem & | Duplicate (MbRegDuplicate *=nullptr) const override |
Создать копию. Подробнее... | |
bool | IsSame (const MbPlaneItem &other, double accuracy=LENGTH_EPSILON) const override |
Определить, являются ли объекты равными. Подробнее... | |
bool | SetEqual (const MbPlaneItem &) override |
Сделать объекты равным. Подробнее... | |
void | Transform (const MbMatrix &matr, MbRegTransform *ireg=nullptr, const MbSurface *newSurface=nullptr) override |
Преобразовать согласно матрице. Подробнее... | |
void | Move (const MbVector &to, MbRegTransform *=nullptr, const MbSurface *newSurface=nullptr) override |
Сдвинуть вдоль вектора. Подробнее... | |
void | Rotate (const MbCartPoint &pnt, const MbDirection &angle, MbRegTransform *=nullptr, const MbSurface *newSurface=nullptr) override |
Повернуть вокруг точки. Подробнее... | |
void | GetProperties (MbProperties &) override |
Выдать свойства объекта. Подробнее... | |
void | SetProperties (const MbProperties &) override |
Изменить свойства объекта. Подробнее... | |
void | GetBasisPoints (MbControlData &) const override |
Выдать контрольные точки объекта. | |
void | SetBasisPoints (const MbControlData &) override |
Изменить объект по контрольным точкам. | |
Функции описания области определения кривой. | |
double | GetTMin () const override |
Получить минимальное значение параметра. | |
double | GetTMax () const override |
Получить максимальное значение параметра. | |
bool | IsClosed () const override |
Определить, является ли кривая замкнутой. Подробнее... | |
bool | IsDegenerate (double eps=Math::LengthEps) const override |
Определить, является ли кривая вырожденной. | |
bool | IsPeriodic () const override |
Определить, является ли замкнутая кривая периодической. | |
Функции для работы в области определения кривой. | |
Функции PointOn, FirstDer, SecondDer, ThirdDer,... корректируют параметр при выходе его за пределы области определения. | |
void | PointOn (double &t, MbCartPoint &pnt) const override |
Вычислить точку на кривой. Подробнее... | |
void | FirstDer (double &t, MbVector &fd) const override |
Вычислить первую производную. | |
void | SecondDer (double &t, MbVector &sd) const override |
Вычислить вторую производную. | |
void | ThirdDer (double &t, MbVector &td) const override |
Вычислить третью производную. | |
Функции доступа к группе данных для работы внутри и вне области определения параметра кривой. | |
void | Explore (double &t, bool ext, MbCartPoint &pnt, MbVector &fir, MbVector *sec, MbVector *thir) const override |
Вычислить значения точки и производных для заданного параметра. Подробнее... | |
void | Derivatives (double &t, bool ext, MbVector &fir, MbVector *sec, MbVector *thi) const |
void | ExtPointOn (double t, MbCartPoint &pnt) const |
Точка на продолжении кривой. | |
void | ExtFirstDer (double t, MbVector &fd) const |
Первая производная на продолжении кривой. | |
void | ExtSecondDer (double t, MbVector &sd) const |
Вторая производная на продолжении кривой. | |
void | ExtThirdDer (double t, MbVector &td) const |
Третья производная на продолжении кривой. | |
MbResultType | Extend (const MbCurveExtensionParameters ¶meters, c3d::PlaneCurveSPtr &resCurve) const override |
Продлить кривую. | |
Общие функции кривой | |
void | CalculateGabarit (MbRect &) const override |
Определить габаритный прямоугольник кривой. Подробнее... | |
bool | IsStraight (bool ignoreParams=false) const override |
Определить, является ли кривая прямолинейной. | |
double | CalculateMetricLength () const override |
Вычислить метрическую длину кривой. | |
bool | DistanceAlong (double &t, double len, int curveDir, double eps=Math::LengthEps, VERSION version=Math::DefaultMathVersion()) const override |
Сдвинуть параметр вдоль кривой. Подробнее... | |
double | CalculateLength (double t1, double t2) const override |
Вычислить метрическую длину кривой. Подробнее... | |
size_t | GetCount () const override |
Определить количество разбиений для прохода в операциях. | |
MbNurbs * | NurbsCurve (const MbCurveIntoNurbsInfo &) const override |
Построить NURBS копию кривой. Подробнее... | |
MbCurve * | NurbsCurve (const MbNurbsParameters &tParameters) const override |
Построить NURBS копию кривой. Подробнее... | |
MbContour * | NurbsContour () const override |
Аппроксимировать кривую контуром из NURBS-кривых. | |
MbCurve * | Trimmed (double t1, double t2, int sense) const override |
Построить усеченную кривую. Подробнее... | |
void | Refresh () override |
Перевести все временные (mutable) данные объекта в неопределённое (исходное) состояние. | |
void | Inverse (MbRegTransform *iReg=nullptr) override |
Изменить направления кривой на противоположное. | |
bool | IsReparamSame (const MbCurve &curve, double &factor) const override |
Определить, является ли кривая репараметризованно такой же. Подробнее... | |
double | Step (double t, double sag) const override |
Вычислить шаг параметра. Подробнее... | |
double | DeviationStep (double t, double angle) const override |
Вычислить шаг параметра. Подробнее... | |
void | CalculatePolygon (double sag, MbPolygon &) const override |
Рассчитать массив точек для отрисовки. Подробнее... | |
MbeState | DeletePart (double t1, double t2, MbCurve *&part2) override |
Удалить часть кривой. Подробнее... | |
MbeState | TrimmPart (double t1, double t2, MbCurve *&part2) override |
Оставить часть кривой. Подробнее... | |
MbeState | Deformation (const MbRect &, const MbMatrix &) override |
Деформировать кривую. Подробнее... | |
bool | GoThroughPoint (MbCartPoint &p0) override |
Провести кривую через точку. Подробнее... | |
void | TangentPoint (const MbCartPoint &pnt, SArray< double > &tFind) const override |
Найти касательные к кривой. Подробнее... | |
void | OffsetCuspPoint (SArray< double > &tCusps, double dist) const override |
Найти особые точки эквидистантной кривой. Подробнее... | |
bool | GetCentre (MbCartPoint &) const override |
Вычислить центр кривой. | |
double | GetRadius () const override |
Дать физический радиус скривой или ноль, если это невозможно. Подробнее... | |
bool | GetAxisPoint (MbCartPoint &p) const override |
Вычислить точку для построения оси. Подробнее... | |
bool | IsSimilarToCurve (const MbCurve &curve, double precision=PARAM_PRECISION) const override |
Определить, подобны ли кривые для объединения (слива). | |
void | MakeTangentLine (MbLine *line) |
Касание сплайна прямой. | |
void | ConvexHull (ptrdiff_t seg, MbCartPoint *p) const |
Определить выпуклую оболочку сегмента кривой. | |
void | GetAnalyticalFunctionsBounds (std::vector< double > ¶ms) const override |
Получить границы участков кривой, которые описываются одной аналитической функцией. | |
Общие функции полигональной кривой. | |
void | GetRuleInterval (ptrdiff_t index, double &t1, double &t2) const override |
Вернуть интервал влияния точки кривой. Подробнее... | |
void | Rebuild () override |
Перестроить кривую. | |
void | SetClosed (bool cls) override |
Установить признак замкнутости. | |
void | RemovePoint (ptrdiff_t index) override |
Удалить характерную точку с заданным индексом. | |
void | RemovePoints () override |
Удалить все точки. | |
void | AddPoint (const MbCartPoint &pnt) override |
Добавить точку в конец массива контрольных точек. | |
void | InsertPoint (ptrdiff_t index, const MbCartPoint &pnt) override |
Вставить точку в массив контрольных точек. Подробнее... | |
void | InsertPoint (double t, const MbCartPoint &pnt, double xEps, double yEps) override |
Вставить точку в массив контрольных точек. Подробнее... | |
void | ChangePoint (ptrdiff_t index, const MbCartPoint &pnt) override |
Заменить точку. Подробнее... | |
bool | ChangePointsValue (const SArray< MbCartPoint > &pntList) override |
Изменить характерные точки. Подробнее... | |
bool | CheckParam (double &t, ptrdiff_t &i0, ptrdiff_t &i1, double &t0, double &t1) const override |
Переместить параметр в область определения кривой. Подробнее... | |
double | GetParam (ptrdiff_t i) const override |
Вернуть параметр, соответствующий точке с указанным индексом. | |
size_t | GetParamsCount () const override |
Выдать количество параметров. | |
void | ResetTCalc () const override |
Сбросить текущее значение параметра. | |
double | DistanceToPoint (const MbCartPoint &to) const override |
Вычислить расстояние до точки. | |
bool | DistanceToPointIfLess (const MbCartPoint &to, double &d) const override |
Вычислить расстояние до точки. Подробнее... | |
double | PointProjection (const MbCartPoint &pnt) const override |
Найти проекцию точки на кривую. | |
bool | NearPointProjection (const MbCartPoint &pnt, double xEpsilon, double yEpsilon, double &t, bool ext, MbRect1D *tRange=nullptr) const override |
Найти проекцию точки на кривую. Подробнее... | |
bool | IsContinuousDerivative (bool &contLength, bool &contDirect, c3d::DoubleVector *params=nullptr, double epsilon=EPSILON) const override |
Выдать свойства объекта. Подробнее... | |
bool | SetContinuousDerivativeLength (VERSION version, double epsilon=EPSILON) override |
Устранить разрывы первых производных по длине. Устранить разрывы производных по длине. . Подробнее... | |
void | GetStartPoint (MbCartPoint &) const override |
Вычислить начальную точку кривой. | |
void | GetEndPoint (MbCartPoint &) const override |
Вычислить конечную точку кривой. | |
Функции B-сплайна. | |
void | AddPoint (ptrdiff_t index, const MbCartPoint &pnt, double weight) |
Добавить точку с весом. | |
void | AddPoint (const MbCartPoint &pnt, double weight) |
Добавить точку в конец массива. | |
MbContour * | CreateContour () const |
Сделать контур из NURBS-кривой. | |
MbNurbs * | Break (double t1, double t2) const |
Выделить часть. | |
MbeNurbsCurveForm | GetFormType () const |
Получить форму В-сплайна. | |
size_t | GetDegree () const |
Выдать порядок сплайна. | |
bool | IsRational () const |
Вернуть признак рациональности, но не регулярности кривой. | |
size_t | GetWeightsCount () const |
Получить размер весового вектора. | |
template<class WeightsVector > | |
void | GetWeights (WeightsVector &wts, bool justSet=true) const |
Получить весовой вектор. | |
double | GetWeight (size_t ind) const |
Получить значение элемента весового вектора по индексу. | |
double & | SetWeight (size_t ind) |
Получить значение элемента весового вектора по индексу. | |
size_t | GetKnotsCount () const |
Получить размер узлового вектора. | |
template<class KnotsVector > | |
void | GetKnots (KnotsVector &kts, bool justSet=true) const |
Получить узловой вектор. | |
double | GetKnot (size_t ind) const |
Получить значение элемента узлового вектора по индексу. | |
double & | SetKnot (size_t ind) |
Получить значение элемента узлового вектора по индексу. | |
ptrdiff_t | GetUppKnotsIndex () const |
Вернуть максимальный индекс узлового вектора. | |
void | LtAddPoint (MbCartPoint &pnt, double weight) |
Добавить точку в конец массива. | |
void | LtAddPowerPoint (MbCartPoint &pnt) |
Добавить характерную точку в степенном представлении в конец массива. | |
void | LtAddKnot (double knot) |
Добавить узел в конец узлового вектора. | |
void | LtSetDegree (size_t newDegree) |
Задать порядок сплайна. | |
void | LtSetClosed (bool cls) |
Установить признак замкнутости. | |
void | LtSetData (size_t d, bool c, MbeNurbsCurveForm f) |
Изменить степень, замкнутость и тип формы. | |
bool | LtRebuild () |
Перестроить сплайн после накачки из библиотеки. | |
void | LtInit () |
Инициализация. | |
bool | LtInitPowerArc () |
bool | LtTrimmed (double t1, double t2, int sense=1) |
void | Bezier (MbNurbs &bezierForm) const |
Создать Bezier форму Nurbs. | |
bool | Concatenate (MbNurbs &) |
Присоединить nurbs. | |
void | SetWeight (ptrdiff_t pointNumber, double newWeight) |
Задать вес для вершины. | |
size_t | KnotMultiplicity (ptrdiff_t knotIndex) const |
Получить кратность узла. | |
void | DefineKnotsVector () |
Определение базисного узлового вектора. | |
bool | OpenKnotsVector () |
Переопределение базисного узлового вектора из Close в Open. | |
bool | CloseKnotsVector () |
Переопределение базисного узлового вектора из Open в Close. | |
void | CyclicShift (ptrdiff_t interval) |
Сдвинуть параметр замкнутого сплайна. | |
void | CyclicShift (double t) |
bool | BasicFunctions (double &t, ptrdiff_t k, CcArray< double > &values, ptrdiff_t &left, double &sum) |
void | CheckForm () |
MbCurve * | ConvertToConic () |
Преобразовать кривую в коническое сечение, если это возможно. | |
bool | SetLimitParam (double newTMin, double newTMax) |
Установить область изменения параметра. | |
size_t | InsertKnots (double &newKnot, size_t multiplicity, double relEps) |
Добавление нового узла; возвращает количество узлов, которые удалось вставить. | |
ptrdiff_t | RemoveKnot (ptrdiff_t id, ptrdiff_t num, double relEps=Math::paramEpsilon, double absEps=Math::lengthEpsilon) |
Удалить кратный внутренний узел id, num раз; вернуть количество удалений, которое удалось сделать. | |
void | RemoveAllKnots (double relEps=Math::paramEpsilon, double absEps=Math::lengthEpsilon) |
Удалить все внутренние узлы, если это возможно. | |
bool | DecomposeCurve () |
Преобразовать данный nurbs в форму Безье, узловой вектор в зажатый. | |
bool | UnClamped (bool clm) |
Преобразовать узловой вектор в зажатый (если кривая замкнута и clm = false) или разжатый (если кривая не замкнута и clm = true). | |
void | AddCurve (MbNurbs &, bool bmerge=true) |
Добавить кривую в конец. | |
template<class NurbsCurves > | |
void | AddCurves (NurbsCurves &curves) |
Добавить кривые в конец. | |
bool | BreakC0NURBS4 (RPArray< MbCurve > &, bool bline=true) |
Разбить кривую. Подробнее... | |
bool | BreakC0 (c3d::PlaneCurvesSPtrVector &, double metricAcc=METRIC_EPSILON) |
Разбить NURBS-кривую в местах, где кривая не дифференцируема. Параметризация не сохраняется. | |
bool | ExtendNurbs (double, double, bool bmerge=false) |
Расширить незамкнутую NURBS-кривую по касательным. | |
void | FixClosedNurbs () |
Замкнуть кривую. Подробнее... | |
![]() | |
virtual | ~MbPolyCurve () |
Деструктор. | |
MbePlaneType | Type () const override |
Получить групповой тип объекта. | |
void | AddYourGabaritTo (MbRect &r) const override |
Расширить присланный габаритный прямоугольник так, чтобы он включал в себя данный объект. | |
void | Refresh () override |
Перевести все временные (mutable) данные объекта в неопределённое (исходное) состояние. | |
void | PrepareIntegralData (const bool forced) const override |
Рассчитать временные (mutable) данные объекта. Подробнее... | |
bool | IsClosed () const override |
Определить, является ли кривая замкнутой. Подробнее... | |
bool | IsStraight (bool ignoreParams=false) const override |
Определить, является ли кривая прямолинейной. | |
bool | HasLength (double &length) const override |
Вычислить метрическую длину кривой. Подробнее... | |
MbeState | Deformation (const MbRect &, const MbMatrix &) override |
Деформировать кривую. Подробнее... | |
bool | IsInRectForDeform (const MbRect &r) const override |
Определить видимость кривой в прямоугольнике. | |
size_t | GetCount () const override |
Определить количество разбиений для прохода в операциях. | |
double | GetMetricLength () const override |
Вычислить метрическую длину кривой. Подробнее... | |
double | GetLengthEvaluation () const override |
Вычислить метрическую длину кривой. Подробнее... | |
bool | GetSpecificPoint (const MbCartPoint &from, double &dmax, MbCartPoint &pnt) const override |
Вернуть характерную точку кривой. Подробнее... | |
void | GetBasisPoints (MbControlData &) const override |
Выдать контрольные точки объекта. | |
void | SetBasisPoints (const MbControlData &) override |
Изменить объект по контрольным точкам. | |
virtual size_t | GetPointsCount () const |
Выдать количество контрольных точек. | |
virtual void | GetPoint (ptrdiff_t index, MbCartPoint &pnt) const |
Выдать характерную точку. Подробнее... | |
virtual ptrdiff_t | GetNearPointIndex (const MbCartPoint &pnt) const |
Выдать индекс точки, ближайшей к заданной. | |
virtual void | SetBegEndDerivesEqual () |
Установить равные производные на краях. | |
virtual void | ClosedBreak () |
Сделать незамкнутой, оставив совпадающими начало и конец. | |
virtual void | AddAfter (const MbCartPoint &pnt, ptrdiff_t index) |
Вставить точку в массив контрольных точек. Подробнее... | |
virtual void | InsertPoint (double t, const MbCartPoint &pnt, const MbVector &v, double xEps, double yEps) |
Вставить точку в массив контрольных точек. Подробнее... | |
virtual void | ChangePole (ptrdiff_t index, const MbCartPoint &pnt) |
Заменить полюс. Подробнее... | |
virtual void | GetTList (SArray< double > ¶ms) const |
size_t | GetPointListCount () const |
Выдать количество характерный точек. | |
ptrdiff_t | GetPointListMaxIndex () const |
Выдать максимальный индекс массива контрольных точек. | |
template<class PointsVector > | |
void | GetPoints (PointsVector &pnts) const |
Вернуть массив контрольных точек. | |
void | GetPointList (SArray< MbCartPoint > &pnts) const |
Вернуть массив контрольных точек. | |
void | GetPointList (c3d::ParamPointsVector &pnts) const |
Вернуть массив контрольных точек. | |
bool | ReplacePoints (const SArray< MbCartPoint > &pnts) |
Заменить набор контрольных точек. | |
bool | ReplacePoints (const std::vector< MbCartPoint > &pnts) |
Заменить набор контрольных точек. | |
const MbCartPoint & | GetPointList (size_t i) const |
Вернуть характерную точку с заданным индексом. | |
MbCartPoint & | SetPointList (size_t i) |
Вернуть характерную точку с заданным индексом. | |
ptrdiff_t | GetUppIndex () const |
Вернуть максимальный индекс массива контрольных точек. | |
size_t | GetSegmentsCount () const |
Вернуть количество интервалов. | |
template<class SegmentsVector > | |
void | GetLineSegments (SegmentsVector &segments, double eps=PARAM_PRECISION) const |
Выдать массив отрезков. | |
bool | NurbsParam (double epsilon, double &pmin, double &pmax, ptrdiff_t &i1, double &t1, ptrdiff_t &i2, double &t2) const |
Дать информацию для функции NurbsCurve. Подробнее... | |
![]() | |
virtual | ~MbCurve () |
Деструктор. | |
MbePlaneType | Type () const override |
Получить групповой тип объекта. | |
MbePlaneType | Family () const override |
Получить семейство объекта. | |
void | Refresh () override |
Перевести все временные (mutable) данные объекта в неопределённое (исходное) состояние. | |
size_t | size () const |
Количество объектов при трактовке объекта как вектора объектов. | |
const MbCurve * | operator[] (size_t) const |
Оператор доступа. | |
virtual void | AddYourGabaritMtr (MbRect &rect, const MbMatrix &matr) const |
Добавить габарит в прямоугольник. Подробнее... | |
virtual void | CalculateLocalGabarit (const MbMatrix &into, MbRect &local) const |
Рассчитать габарит в локальной системы координат. Подробнее... | |
bool | IsVisibleInRect (const MbRect &rect, bool exact=false) const override |
Определить видимость объекта в прямоугольнике. Подробнее... | |
virtual bool | IsCompleteInRect (const MbRect &rect) const |
Определить, виден ли объект полностью в прямоугольнике. Подробнее... | |
double | DistanceToPoint (const MbCartPoint &toP) const override |
Вычислить расстояние до точки. | |
bool | DistanceToPointIfLess (const MbCartPoint &toP, double &d) const override |
Вычислить расстояние до точки. Подробнее... | |
virtual double | GetPeriod () const |
Вернуть период. Подробнее... | |
bool | IsTouch (double eps=Math::LengthEps) const |
Определить, замкнута ли кривая фактически независимо от гладкости замыкания. Подробнее... | |
void | Tangent (double &t, MbVector &v) const |
Вычислить касательный вектор (нормализованный). | |
void | Tangent (double &t, MbDirection &d) const |
Вычислить касательный вектор (нормализованный). | |
void | Normal (double &t, MbVector &v) const |
Вычислить вектор главной нормали (нормализованный). | |
void | Normal (double &t, MbDirection &d) const |
Вычислить вектор главной нормали (нормализованный). | |
virtual void | _PointOn (double t, MbCartPoint &p) const |
Вычислить точку на кривой и её продолжении. Подробнее... | |
virtual void | _FirstDer (double t, MbVector &v) const |
Вычислить первую производную на кривой и её продолжении. | |
virtual void | _SecondDer (double t, MbVector &v) const |
Вычислить вторую производную на кривой и её продолжении. | |
virtual void | _ThirdDer (double t, MbVector &v) const |
Вычислить третью производную на кривой и её продолжении. | |
void | _Tangent (double t, MbVector &v) const |
Вычислить касательный вектор (нормализованный). | |
void | _Tangent (double t, MbDirection &d) const |
Вычислить касательный вектор (нормализованный). | |
void | _Normal (double t, MbVector &v) const |
Вычислить вектор главной нормали (нормализованный) на кривой и её продолжении. | |
void | _Normal (double t, MbDirection &d) const |
Вычислить вектор главной нормали (нормализованный) на кривой и её продолжении. | |
virtual double | Curvature (double t) const |
Вычислить кривизну кривой. | |
double | CurvatureDerive (double t) const |
Вычислить производную кривизны по параметру. | |
double | CurvatureRadius (double t) const |
Вычислить радиус кривизны кривой со знаком. | |
virtual bool | IsBounded () const |
Определить, является ли кривая ограниченной. | |
virtual bool | IsSmoothConnected (double angleEps) const |
Определить, являются ли стыки контура/кривой гладкими. | |
double | GetParamLength () const |
Вычислить параметрическую длину кривой. | |
virtual MbCurve * | Offset (double rad) const |
Построить эквидистантную кривую, смещённую на заданное расстояние. | |
virtual bool | BeginApprox (double sag, double &tbeg, double &tend, MbCartPoint &pnt, bool &existNextPoint) const |
Начать аппроксимацию для отрисовки. Подробнее... | |
virtual bool | GetNextPoint (double sag, double tend, double &tcur, MbCartPoint &pnt) const |
Вычислить очередную точку. Подробнее... | |
MbNurbs * | NurbsCurve (const MbCurveIntoNurbsInfo *nInfo=nullptr) const |
Построить NURBS копию кривой. Подробнее... | |
virtual MbeItemLocation | PointRelative (const MbCartPoint &pnt, double eps=Math::LengthEps) const |
Определить положение точки относительно кривой. Подробнее... | |
virtual MbeLocation | PointLocation (const MbCartPoint &pnt, double eps=Math::LengthEps) const |
Положение точки относительно кривой. | |
MbeNewtonResult | PointProjectionNewton (const MbCartPoint &p, double xEpsilon, double yEpsilon, size_t iterLimit, double &t, bool ext) const |
Найти проекцию точки на кривую. Подробнее... | |
void | PointProjection (const MbCartPoint &pnt, MbCartPoint &on) const |
Вычислить проекцию точки на кривую. Подробнее... | |
void | BasePointProjection (const MbCartPoint &pnt, MbCartPoint &on) const |
Вычислить проекцию точки на кривую. Подробнее... | |
void | PointProjectionAndAngle (MbCartPoint &on, double &angle) const |
Вычислить проекцию точки на кривую. Подробнее... | |
bool | DirectPointProjection (const MbCartPoint &pnt, const MbDirection &dir, MbCartPoint &pp) const |
Вычислить проекцию точки на кривую. Подробнее... | |
virtual bool | SmallestPerpendicular (const MbCartPoint &pnt, double &tProj) const |
Найти ближайший перпендикуляр к кривой. Подробнее... | |
virtual void | PerpendicularPoint (const MbCartPoint &pnt, SArray< double > &tFind) const |
Найти перпендикуляры к кривой. Подробнее... | |
virtual void | IntersectHorizontal (double y, SArray< double > &cross) const |
Найти пересечения кривой с горизонтальной прямой. Подробнее... | |
virtual void | IntersectVertical (double x, SArray< double > &cross) const |
Найти пересечения кривой с вертикальной прямой. Подробнее... | |
virtual void | Isoclinal (const MbVector &angle, SArray< double > &tFind) const |
Построить изоклины. Подробнее... | |
void | HorzIsoclinal (SArray< double > &tFind) const |
Построить горизонтальные изоклины. Подробнее... | |
void | VertIsoclinal (SArray< double > &tFind) const |
Построить вертикальные изоклины. Подробнее... | |
void | LowestPoint (MbCartPoint &lowestPoint, double &tLowest) const |
Найти нижнюю точку кривой и соответствующий ей параметр. | |
virtual void | SelfIntersect (SArray< MbCrossPoint > &, double metricEps=Math::LengthEps) const |
Найти самопересечения кривой. Подробнее... | |
virtual bool | GetMiddlePoint (MbCartPoint &) const |
Вычислить среднюю точку кривой. | |
void | GetPointsByEvenParamDelta (size_t n, std::vector< MbCartPoint > &pnts) const |
Выдать n точек кривой с равными интервалами по параметру. | |
void | GetPointsByEvenParamDelta (size_t n, SArray< MbCartPoint > &pnts) const |
virtual void | GetPointsByEvenLengthDelta (size_t n, std::vector< MbCartPoint > &pnts) const |
Выдать n точек кривой с равными интервалами по длине дуги. | |
void | GetPointsByEvenLengthDelta (size_t n, SArray< MbCartPoint > &pnts) const |
virtual double | LengthBetween2Points (MbCartPoint &p1, MbCartPoint &p2, MbCartPoint *pc=nullptr) const |
Вычислить минимальную длину кривой между двумя точками на ней. Подробнее... | |
virtual bool | GetWeightCentre (MbCartPoint &) const |
Вычислить центр тяжести кривой. | |
bool | IsPointOn (const MbCartPoint &, double eps=Math::LengthEps) const |
Проверить лежит ли точка на кривой с точностью eps. | |
bool | IsParamOn (double t, double eps=Math::paramEpsilon) const |
Проверить лежит ли параметр в диапазоне кривой с точностью eps. | |
void | CorrectCyclicParameter (double &t, double eps=Math::paramRegion) const |
Корректировать параметр для замкнутых кривых. Подробнее... | |
void | CorrectParameter (double &t) const |
Корректировать параметр. Подробнее... | |
MbCurve * | InverseDuplicate () const |
Сделать копию с измененным направлением. | |
bool | IsInverseSame (const MbCurve &curve, double accuracy=LENGTH_EPSILON) const |
Определить, являются ли кривая инверсно такой же. | |
MbCartPoint | GetLimitPoint (ptrdiff_t number) const |
Вычислить граничную точку. Подробнее... | |
void | GetLimitPoint (ptrdiff_t number, MbCartPoint &pnt) const |
Вычислить граничную точку. Подробнее... | |
void | GetLimitTangent (ptrdiff_t number, MbVector &v) const |
Вычислить касательный вектор в граничной точке. Подробнее... | |
void | GetLimitPointAndTangent (ptrdiff_t number, MbCartPoint &pnt, MbVector &v) const |
Вычислить касательный вектор и точку на конце кривой. Подробнее... | |
bool | AreLimitPointsEqual () const |
Равны ли граничные точки? Подробнее... | |
virtual const MbCurve & | GetBasisCurve () const |
Вернуть базовую кривую, если есть, или себя. | |
virtual MbCurve & | SetBasisCurve () |
Вернуть базовую кривую, если есть, или себя. | |
virtual double | GetParamDelta () const |
Вернуть отступ по параметру кривой. | |
virtual const MbCurve & | GetSubstrate () const |
Выдать подложку или себя. | |
virtual MbCurve & | SetSubstrate () |
Выдать подложку или себя. | |
virtual int | SubstrateCurveDirection () const |
Вернуть направление подложки относительно кривой или наоборот. | |
virtual void | SubstrateToCurve (double &) const |
Преобразовать параметр подложки в параметр кривой. | |
virtual void | CurveToSubstrate (double &) const |
Преобразовать параметр кривой в параметр подложки. | |
virtual double | GetParamToUnit () const |
Вернуть приращение параметра, соответствующее единичной длине в пространстве. | |
virtual double | GetParamToUnit (double t) const |
Вернуть приращение параметра, соответствующее единичной длине в пространстве в зависимости от параметра. | |
virtual double | GetTEpsilon (double epsilon) const |
Вернуть минимально различимую величину параметра с заданной точностью. | |
virtual double | GetTEpsilon (double t, double epsilon) const |
Вернуть минимально различимую величину параметра с заданной точностью в зависимости от параметра. | |
virtual double | GetTRegion (double epsilon) const |
Вернуть минимально различимую величину параметра с заданной точностью. | |
virtual double | GetTRegion (double t, double epsilon) const |
Вернуть минимально различимую величину параметра с заданной точностью в зависимости от параметра. | |
double | GetTMid () const |
Вернуть середину параметрического диапазона кривой. | |
double | GetTRange () const |
Вернуть параметрическую длину кривой. | |
MbCartPoint | PointOn (double &t) const |
Вычислить точку на кривой. | |
MbVector | FirstDer (double &t) const |
Вычислить первую производную. | |
MbDirection | Tangent (double &t) const |
Вычислить касательный вектор (нормализованный). | |
MbDirection | Normal (double &t) const |
Вычислить нормальный вектор. | |
double | DerLength (double &t) const |
Вычислить длину вектора производной. | |
virtual void | BreakPoints (std::vector< double > &vBreaks, double precision=ANGLE_REGION) const |
\ ru Определение точек излома кривой. | |
MbProperty & | CreateProperty (MbePrompt name) const override |
Создать собственное свойство. | |
bool | IsSpaceNear (const MbCurve &curve, double eps, bool ext, double devSag=5.0 *Math::deviateSag) const |
Определить, близки ли две кривые метрически. Подробнее... | |
bool | IsSpaceNear (const MbCurve &curve, double xEps, double yEps, bool ext, double xNear, double yNear, double devSag=5.0 *Math::deviateSag) const |
Определить, близки ли две кривые метрически. Подробнее... | |
SimpleName | GetCurveName () const |
Имя кривой. | |
void | SetCurveName (SimpleName newName) |
Установить имя кривой. | |
![]() | |
virtual | ~MbPlaneItem () |
Деструктор. | |
void | PrepareWrite () const |
Регистрация объекта. Подробнее... | |
MbeRefType | RefType () const override |
Получить регистрационный тип (для копирования, дублирования). | |
virtual void | Rotate (const MbCartPoint &pnt, double angle, MbRegTransform *iReg=nullptr, const MbSurface *newSurface=nullptr) |
Повернуть вокруг точки. Подробнее... | |
virtual bool | IsSimilar (const MbPlaneItem &item) const |
Определить, являются ли объекты подобными. Подробнее... | |
![]() | |
TapeBase (RegistrableRec regs=noRegistrable) | |
Конструктор. | |
TapeBase (const TapeBase &) | |
Конструктор копирования | |
virtual | ~TapeBase () |
Деструктор. | |
RegistrableRec | GetRegistrable () const |
Является ли потоковый класс регистрируемым. | |
void | SetRegistrable (RegistrableRec regs=registrable) const |
Установить состояние регистрации потокового класса. | |
virtual ClassDescriptor | GetClassDescriptor (const VersionContainer &) const =0 |
Получить дескриптор класса | |
virtual const char * | GetPureName (const VersionContainer &) const |
Получить имя класса. | |
virtual bool | IsFamilyRegistrable () const |
Принадлежит ли объект к регистрируемому семейству. | |
![]() | |
refcount_t | GetUseCount () const |
Выдать количество ссылок (выдать количество владельцев объекта). | |
refcount_t | AddRef () const |
Увеличить количество ссылок на единицу. | |
refcount_t | DecRef () const |
Уменьшить количество ссылок на единицу. | |
refcount_t | Release () const |
Уменьшить количество ссылок на единицу и, если количество ссылок стало равным нулю, удалить себя. | |
![]() | |
void | Lock () const |
Включить блокировку (блокировка происходит только при наличии параллельности). | |
void | Unlock () const |
Снять блокировку, если она была установлена. | |
CommonRecursiveMutex * | GetLock () const |
Выдать указатель на объект мьютекса. Возращает nullptr, если параллельности нет. Для использования в ScopedLock. | |
Открытые статические члены | |
static MbNurbs * | Create (const MbNurbs &) |
Создать копию сплайна. Подробнее... | |
template<class PointsVector > | |
static MbNurbs * | Create (ptrdiff_t initDegree, const PointsVector &initPoints, bool initClosed) |
Создать сплайн. Подробнее... | |
template<class PointsVector , class DoubleVector > | |
static MbNurbs * | Create (ptrdiff_t initDegree, const PointsVector &initPoints, bool initClosed, const DoubleVector *initWeights) |
Создать сплайн. Подробнее... | |
template<class PointsVector , class DoubleVector > | |
static MbNurbs * | Create (ptrdiff_t initDegree, bool initClosed, const PointsVector &initPoints, const DoubleVector &initWeights, const DoubleVector &initKnots, MbeNurbsCurveForm initForm=ncf_Unspecified) |
Создать сплайн. Подробнее... | |
static MbNurbs * | CreateThrough (size_t degree, bool cls, const SArray< MbCartPoint > &points, const SArray< double > ¶ms, SArray< double > *aKnots=nullptr) |
Создать сплайн. Подробнее... | |
static MbNurbs * | CreateParasolid (size_t degree, bool closed, bool rational, ptrdiff_t count, const CcArray< double > &verts, ptrdiff_t vertsCount, const CcArray< ptrdiff_t > &mul, ptrdiff_t mulCount, const CcArray< double > &knots, ptrdiff_t knotsCount, double scl) |
Заполнить NURBS по данным parasolid. Подробнее... | |
static MbNurbs * | CreateCube (const MbCartPoint &p1, const MbVector &v1, const MbCartPoint &p2, const MbVector &v2) |
Создать сплайн. Подробнее... | |
static MbNurbs * | CreateArc (const SArray< MbCartPoint > &points) |
Создать сплайн. Подробнее... | |
static MbNurbs * | CreateArc (double a2, const MbCartPoint &p1, const MbCartPoint &p2) |
Создать сплайн. Подробнее... | |
static MbNurbs * | CreateWavyLine (const MbCartPoint &p1, const MbCartPoint &p2, double height, double periode) |
Создать сплайн. Подробнее... | |
Защищенные члены | |
template<class PointsVector , class DoubleVector > | |
MbNurbs (size_t degree, bool cls, const PointsVector &points, const DoubleVector *weights, const DoubleVector *knots) | |
Конструктор. Подробнее... | |
bool | CanChangeClosed () const override |
Определить, можно ли поменять признак замкнутости. | |
![]() | |
MbPolyCurve () | |
Конструктор по умолчанию. | |
MbPolyCurve (const MbPolyCurve &pCurve) | |
Конструктор копирования. | |
![]() | |
MbCurve () | |
Конструктор по умолчанию. | |
MbCurve (const MbCurve &other) | |
Конструктор копирования. | |
![]() | |
MbPlaneItem () | |
Конструктор. | |
![]() | |
MbRefItem () | |
Конструктор без параметров. | |
Функции инициализации NURBS-кривой. | |
void | Init (const MbNurbs &) |
Установить параметры сплайна по заданной NURBS-кривой. | |
template<class PointsVector > | |
bool | Init (size_t initDegree, const PointsVector &initPoints, bool initClosed) |
Инициализация. Подробнее... | |
template<class PointsVector , class DoubleVector > | |
bool | Init (size_t initDegree, const PointsVector &initPoints, bool initClosed, const DoubleVector *initWeights) |
Инициализация. Подробнее... | |
template<class PointsVector , class DoubleVector > | |
bool | Init (size_t initDegree, bool initClosed, const PointsVector &initPoints, const DoubleVector &initWeights, const DoubleVector &initKnots, MbeNurbsCurveForm initForm=ncf_Unspecified) |
Инициализация. Подробнее... | |
bool | Init (size_t degree, bool cls, const CcArray< double > &points, const CcArray< double > &knots, ptrdiff_t nPoints, ptrdiff_t nKnots) |
Инициализация. Подробнее... | |
bool | InitThrough (size_t degree, bool cls, const SArray< MbCartPoint > &points, const SArray< double > ¶ms, SArray< double > *aKnots=nullptr) |
Инициализация. Подробнее... | |
bool | InitThrough (size_t degree, bool cls, const c3d::ParamPointsVector &points, const c3d::DoubleVector ¶ms, c3d::DoubleVector *aKnots=nullptr) |
Инициализация. Подробнее... | |
bool | InitLine (double t1, const MbCartPoint &p1, double t2, const MbCartPoint &p2) |
Инициализация. Подробнее... | |
bool | InitCube (const MbCartPoint &p1, const MbVector &v1, const MbCartPoint &p2, const MbVector &v2) |
Инициализация. Подробнее... | |
bool | AttachG (c3d::PntMatingData2D &connectData, bool beg) |
Установить сопряжение на конце. | |
bool | RaiseDegree (size_t newDegree, double relEps=Math::paramEpsilon) |
Увеличить порядок кривой, не изменяя ее геометрическую форму и параметризацию. Подробнее... | |
bool | ReductionDegree (double relEps=Math::paramEpsilon) |
Уменьшить порядок кривой на 1, не изменяя ее геометрическую форму и параметризацию. Подробнее... | |
bool | SetDegree (size_t newDegree) |
Задать порядок сплайна. Подробнее... | |
void | DegreeIncrease () |
Увеличить порядок на 1. | |
void | SetFormType (MbeNurbsCurveForm f) |
Установить тип формы. | |
bool | PointOnMultipleKnot (const MbCartPoint &point) const |
Точка на кратном узле. | |
static MbNurbs * | CreateNURBS2 (const SArray< MbCartPoint > &points, const SArray< double > ¶ms, bool cls) |
Интерполяция. Подробнее... | |
static MbNurbs * | CreateNURBS4 (const SArray< MbCartPoint > &, MbeSplineParamType spType, const c3d::PntMatingData2D &begData, const c3d::PntMatingData2D &endData) |
Создать кубический NURBS по точкам, через которые он проходит, и параметрам сопряжения. | |
static MbNurbs * | CreateNURBS4 (const SArray< MbCartPoint > &, MbeSplineParamType spType, bool closed, RPArray< c3d::PntMatingData2D > &) |
Создать кубический NURBS по интерполяционным точкам и данным сопряжения в каждой точке. | |
static MbNurbs * | CreateNURBS4 (const SArray< MbCartPoint > &, const SArray< double > &, bool closed, RPArray< c3d::PntMatingData2D > &) |
Создать кубический NURBS по интерполяционным точкам, их параметрам и данным сопряжения в каждой точке. | |
static MbNurbs * | CreateNURBS4 (const SArray< MbCartPoint > &, bool cls, MbeSplineParamType spType, MbeSplineCreateType useInitThrough=sct_Version2) |
Интерполяция. Подробнее... | |
static MbNurbs * | CreateNURBS4 (const SArray< MbCartPoint > &points, const SArray< double > ¶ms, bool cls, MbeSplineCreateType useInitThrough=sct_Version2) |
Интерполяция. Подробнее... | |
static MbNurbs * | CreateNURBS4 (const SArray< double > &weights, const SArray< MbCartPoint > &points, SArray< double > ¶ms, bool cls) |
Интерполяция. Подробнее... | |
static MbNurbs * | CreateNURBS4 (const SArray< MbCartPoint > &points, const SArray< double > ¶ms, const MbVector &, const MbVector &, bool cls, bool bfstS=true, bool bfstN=true) |
Интерполяция. Подробнее... | |
static MbNurbs * | CreateNURBS4 (const SArray< MbCartPoint > &points, const SArray< MbVector > &vectors, const SArray< double > ¶ms, bool cls) |
Интерполяция. Подробнее... | |
static MbNurbs * | CreateNURBS4 (const MbBezier &) |
Интерполяция. Подробнее... | |
Дополнительные унаследованные члены | |
![]() | |
SArray< MbCartPoint > | pointList |
Множество контрольных точек. | |
ptrdiff_t | uppIndex |
Количество участков кривой (равно количество контрольных точек минус единица). | |
bool | closed |
Признак замкнутости кривой. | |
MbRect | rect |
Габаритный прямоугольник. | |
double | metricLength |
Метрическая длина сплайна. | |
![]() | |
SimpleName | name |
Имя кривой. Данные объекта являются временными и используются для внутренних целей. | |
NURBS кривая в двумерном пространстве.
NURBS кривая определяется контрольными точками pointList, весами контрольных точек weights, узловым вектором knots и порядком сплайна degree.
Аббревиатура NURBS получена из первых букв словосочетания Non-Uniform Rational B-Spline. NURBS кривая не проходит через свои контрольные точки. Узловой вектор knots должен представлять собой неубывающую последовательность действительных чисел. Множества pointList и weights должны содержать одинаковое количество элементов. Для не замкнутой кривой узловой вектор knots должен содержать количество элементов множества pointList плюс degree. Для замкнутой кривой кривой узловой вектор knots должен содержать количество элементов множества pointList плюс 2*degree-1. Минимальное значение параметра сплайна равно значению элемента узлового вектора с индексом degree-1. Максимальное значение параметра сплайна равно значению элемента узлового вектора с индексом, равным последнему элементу минус degree-1. Расчет кривой в каждой своей точке производится на основе нормированных неоднородных В-сплайнов.
Семейство В-сплайнов определяется заданной неубывающей последовательностью узловых параметров и заданным порядком B-сплайна.
DEPRECATE_DECLARE MbNurbs::MbNurbs | ( | ) |
|
protected |
Конструктор.
Конструктор по порядку, точкам, параметрам и признаку замкнутости. При недопустимых параметрах initDegree и points поведение кривой не определено.
[in] | degree | - Порядок сплайна. Должен быть больше единицы. Не должен превышать количество контрольных точек. |
[in] | cls | - Признак замкнутости. |
[in] | points | - Набор контрольных точек. Количество точек должно быть больше или равно двум. |
[in] | weights | - Набор весов для контрольных точек. Количество весов должно соответствовать количеству точек. |
[in] | knots | - Последовательность узловых параметров. |
Создать копию сплайна.
Создать копию сплайна.
|
inlinestatic |
Создать сплайн.
Создать сплайн и установить параметры сплайна.
[in] | initDegree | - Порядок сплайна. |
[in] | initPoints | - Набор контрольных точек. |
[in] | initClosed | - Признак замкнутости. |
|
inlinestatic |
Создать сплайн.
Создать сплайн и установить параметры сплайна.
[in] | initDegree | - Порядок сплайна. |
[in] | initPoints | - Набор контрольных точек. |
[in] | initClosed | - Признак замкнутости. |
[in] | initWeights | - Набор весов для контрольных точек. |
|
inlinestatic |
Создать сплайн.
Создать сплайн и установить параметры сплайна.
[in] | initDegree | - Порядок сплайна. |
[in] | initClosed | - Признак замкнутости. |
[in] | initPoints | - Набор контрольных точек. |
[in] | initWeights | - Набор весов для контрольных точек. |
[in] | initKnots | - Неубывающая последовательность весов. |
[in] | initForm | - Тип построения. |
|
static |
Создать сплайн.
Сплайн, проходящий через заданные точки при заданных параметрах.
В случае замкнутости нужно передавать массив с совпадением первой и последней точек.
[in] | degree | - Порядок сплайна. |
[in] | cls | - Признак замкнутости. |
[in] | points | - Набор точек, через которые проходит сплайн. |
[in] | params | - Последовательность узловых параметров. |
[in] | aKnots | - Неубывающая последовательность узлов. |
|
static |
Заполнить NURBS по данным parasolid.
Заполнить NURBS по данным parasolid.
[in] | degree | - Степень сплайна. |
[in] | closed | - Признак замкнутости. |
[in] | rational | - Является ли кривая рациональной. Если true - строится NURBS, false - кривая Безье. |
[in] | count | - Количество контрольных точек. |
[in] | verts | - Массив координат точек. Если сплайн рациональный, четвертая координата - вес точки. |
[in] | vertsCount | - Количество элементов в массиве verts. |
[in] | mul | - Массив с данными о кратности каждого узла. |
[in] | mulCount | - Количество элементов в массиве mul. |
[in] | knots | - Массив со значениями параметров в узлах. Каждое значение представлено один раз. Информация о кратности узла лежит в элементе массива mul с тем же номером. |
[in] | knotsCount | - Количество элементов в массиве knots. |
[in] | scl | - Коэффициент масштабирования. |
|
static |
Создать сплайн.
Создать сплайн и установить параметры сплайна.
[in] | p1 | - Начальная точка, через которую проходит сплайн. |
[in] | v1 | - Касательный вектор к кривой в начальной точке. |
[in] | p2 | - Конечная точка, через которую проходит сплайн. |
[in] | v2 | - Касательный вектор к кривой в конечной точке. |
|
static |
Создать сплайн.
Конструктор сплайна, описывающего дугу конического сечения.
[in] | points | - Набор из четырех точек, через которое проходит сечение. Первая и последняя точки определяют начало и конец дуги, соответственно. |
|
static |
Создать сплайн.
Конструктор сплайна, описывающего дугу окружности.
[in] | a2 | - Половина угла раствора. |
[in] | p1 | - Начальная точка дуги. |
[in] | p2 | - Конечная точка дуги. |
|
static |
Создать сплайн.
Конструктор сплайна, описывающего волнистую линию.
[in] | p1 | - Начальная точка кривой. |
[in] | p2 | - Конечная точка кривой. |
[in] | height | - Высота гребешка волны. |
[in] | periode | - Период волны. |
|
inline |
Инициализация.
Установить параметры сплайна.
[in] | initDegree | - Порядок сплайна. |
[in] | initPoints | - Набор контрольных точек. |
[in] | initClosed | - Признак замкнутости. |
|
inline |
Инициализация.
Установить параметры сплайна.
[in] | initDegree | - Порядок сплайна. |
[in] | initPoints | - Набор контрольных точек. |
[in] | initClosed | - Признак замкнутости. |
[in] | initWeights | - Набор весов для контрольных точек. |
|
inline |
Инициализация.
Установить параметры сплайна.
[in] | initDegree | - Порядок сплайна. |
[in] | initClosed | - Признак замкнутости. |
[in] | initPoints | - Набор контрольных точек. |
[in] | initWeights | - Набор весов для контрольных точек. |
[in] | initKnots | - Неубывающая последовательность весов. |
[in] | initForm | - Тип построения. |
bool MbNurbs::Init | ( | size_t | degree, |
bool | cls, | ||
const CcArray< double > & | points, | ||
const CcArray< double > & | knots, | ||
ptrdiff_t | nPoints, | ||
ptrdiff_t | nKnots | ||
) |
Инициализация.
Установить параметры сплайна.
[in] | degree | - Порядок сплайна. |
[in] | cls | - Признак замкнутости. |
[in] | points | - Набор контрольных точек. |
[in] | knots | - Неубывающая последовательность узлов. |
[in] | nPoints | - Количество контрольных точек. |
[in] | nKnots | - Количество узлов. |
bool MbNurbs::InitThrough | ( | size_t | degree, |
bool | cls, | ||
const SArray< MbCartPoint > & | points, | ||
const SArray< double > & | params, | ||
SArray< double > * | aKnots = nullptr |
||
) |
Инициализация.
Сплайн, проходящий через заданные точки при заданных параметрах.
В случае замкнутости нужно передавать массив с совпадением первой и последней точек.
[in] | degree | - Порядок сплайна. |
[in] | cls | - Признак замкнутости. |
[in] | points | - Набор точек, через которые проходит сплайн. |
[in] | params | - Последовательность узловых параметров. |
[in] | aKnots | - Неубывающая последовательность узлов. |
bool MbNurbs::InitThrough | ( | size_t | degree, |
bool | cls, | ||
const c3d::ParamPointsVector & | points, | ||
const c3d::DoubleVector & | params, | ||
c3d::DoubleVector * | aKnots = nullptr |
||
) |
Инициализация.
Сплайн, проходящий через заданные точки при заданных параметрах.
В случае замкнутости нужно передавать массив с совпадением первой и последней точек.
[in] | degree | - Порядок сплайна. |
[in] | cls | - Признак замкнутости. |
[in] | points | - Набор точек, через которые проходит сплайн. |
[in] | params | - Последовательность узловых параметров. |
[in] | aKnots | - Неубывающая последовательность узлов. |
bool MbNurbs::InitLine | ( | double | t1, |
const MbCartPoint & | p1, | ||
double | t2, | ||
const MbCartPoint & | p2 | ||
) |
Инициализация.
Инициализировать прямолинейный сплайн.
[in] | t1 | - Начальный узел. |
[in] | p1 | - Начальная точка, через которую проходит сплайн. |
[in] | t2 | - Конечный узел. |
[in] | p2 | - Конечная точка, через которую проходит сплайн. |
bool MbNurbs::InitCube | ( | const MbCartPoint & | p1, |
const MbVector & | v1, | ||
const MbCartPoint & | p2, | ||
const MbVector & | v2 | ||
) |
Инициализация.
Инициализировать кубическую кривую как сплайн.
[in] | p1 | - Начальная точка, через которую проходит сплайн. |
[in] | v1 | - Касательный вектор к кривой в начальной точке. |
[in] | p2 | - Конечная точка, через которую проходит сплайн. |
[in] | v2 | - Касательный вектор к кривой в конечной точке. |
|
static |
Интерполяция.
Создать плоский сплайн второго порядка по точкам, параметрам и признаку замкнутости.
|
static |
Интерполяция.
Создать плоский сплайн четвертого порядка по точкам, признаку замкнутости и типу параметризации.
Сплайн проходит через точки. Используется граничное условие отсутствия узла.
|
static |
Интерполяция.
Создать плоский сплайн четвертого порядка по точкам, параметрам и признаку замкнутости.
Используется граничное условие отсутствия узла.
|
static |
Интерполяция.
Создать плоский сплайн четвертого порядка по весам, точкам, параметрам и признаку замкнутости.
Используется граничное условие отсутствия узла.
|
static |
Интерполяция.
Создать плоский сплайн четвертого порядка по точкам, параметрам и признаку замкнутости с граничными условиями - заданными векторами первых или вторых производных.
Имеет 2 кратных внутренних узла, принадлежит классу дифференцируемых ( но не дважды дифференцируемых ) функций.
[in] | bfstS | - Если true, то начальное граничное условие - вектор первой производной, иначе - вектор второй производной. |
[in] | bfstN | - Если true, то конечное граничное условие - вектор первой производной, иначе - вектор второй производной. |
|
static |
Интерполяция.
Создать плоский сплайн четвертого порядка по точкам, производным, параметрам и признаку замкнутости.
Имеет 2 кратных внутренних узла, принадлежит классу дифференцируемых ( но не дважды дифференцируемых ) функций.
Интерполяция.
Создать плоский сплайн четвертого порядка по составному сплайну Безье четвертого порядка.
Внимание! Параметризация отлична от параметризации исходной кривой Безье.
bool MbNurbs::RaiseDegree | ( | size_t | newDegree, |
double | relEps = Math::paramEpsilon |
||
) |
Увеличить порядок кривой, не изменяя ее геометрическую форму и параметризацию.
Увеличить порядок кривой, не изменяя ее геометрическую форму и параметризацию.
[in] | newDegree | - Новый порядок сплайна. |
[in] | relEps | - Допустимая погрешность изменения формы. |
bool MbNurbs::ReductionDegree | ( | double | relEps = Math::paramEpsilon | ) |
Уменьшить порядок кривой на 1, не изменяя ее геометрическую форму и параметризацию.
Уменьшить порядок кривой на 1, не изменяя ее геометрическую форму и параметризацию.
[in] | relEps | - Допустимая погрешность изменения формы. |
bool MbNurbs::SetDegree | ( | size_t | newDegree | ) |
Задать порядок сплайна.
Задать порядок сплайна.
При изменении порядка параметризация сплайна сбрасывается на равномерную, форма сплайна меняется.
[in] | newDegree | - Новый порядок сплайна. |
|
overridevirtual |
Создать копию.
Создать копию объекта с использованием регистратора. Регистратор используется для предотвращения многократного копирования объекта. Если объект содержит ссылки на другие объекты, то вложенные объекты так же копируются. Допустимо не передавать регистратор в функцию. Тогда будет создана новая копия объекта. При копировании одиночного объекта или набора не связанных между собой объектов допустимо не использовать регистратор. Регистратор необходимо использовать, если надо последовательно копировать несколько взаимосвязанных объектов. Возможно, что связь объектов обусловлена наличием в них ссылок на общие объекты. Тогда, при копировании без использования регистратора, можно получить набор копий, содержащих ссылки на разные копии одного и того же вложенного объекта, что ведет к потере связи между копиями.
[in] | iReg | - Регистратор. |
Замещает MbPlaneItem.
|
overridevirtual |
Определить, являются ли объекты равными.
Равными считаются однотипные объекты, все данные которых одинаковы (равны).
[in] | item | - Объект для сравнения. |
[in] | accuracy | - Точность сравнения. |
Замещает MbPlaneItem.
|
overridevirtual |
Сделать объекты равным.
Равными можно сделать только подобные объекты. Подобный объект приравнивается присланному путем изменения численных данных.
[in] | item | - Объект для инициализации. |
Замещает MbPlaneItem.
|
overridevirtual |
Преобразовать согласно матрице.
Преобразовать исходный объект согласно матрице c использованием регистратора. Если объект содержит ссылки на другие геометрические объекты, то вложенные объекты так же преобразуются согласно матрице. Регистратор служит для предотвращения многократного преобразования объекта. Допустимо использовать функцию без регистратора, если надо преобразовать одиночный объект. Если надо преобразовать набор взаимосвязанных объектов, необходимо использовать регистратор для предотвращения повторного преобразования вложенных объектов, поскольку не исключена ситуация, когда несколько объектов из набора содержат ссылки на один или несколько общих объектов, подлежащих трансформации.
[in] | matr | - Матрица преобразования. |
[in] | iReg | - Регистратор. |
[in] | surface | - Новая базовая поверхность объекта при условии, что matr - матрица преобразования из старой поверхности в новую. Для трансформации проекционной кривой. Не учитывается, если поверхность плоская. |
Замещает MbPlaneItem.
|
overridevirtual |
Сдвинуть вдоль вектора.
Сдвинуть геометрический объект вдоль вектора с использованием регистратора. Если объект содержит ссылки на другие геометрические объекты, то к вложенным объектам так же применяется операция сдвига. Регистратор служит для предотвращения многократного преобразования объекта. Допустимо использовать функцию без регистратора, если надо преобразовать одиночный объект. Если надо преобразовать набор взаимосвязанных объектов, необходимо использовать регистратор для предотвращения повторного преобразования вложенных объектов, поскольку не исключена ситуация, когда несколько объектов из набора содержат ссылки на один или несколько общих объектов, подлежащих сдвигу.
[in] | to | - Вектор сдвига. |
[in] | iReg | - Регистратор. |
[in] | surface | - Новая базовая поверхность объекта при условии, что matr - матрица преобразования из старой поверхности в новую. Для трансформации проекционной кривой. Не учитывается, если поверхность плоская. |
Замещает MbPlaneItem.
|
overridevirtual |
Повернуть вокруг точки.
Повернуть объект вокруг точки на заданный угол с использованием регистратора. Если объект содержит ссылки на другие геометрические объекты, то к вложенным объектам так же применяется операция поворота. Регистратор служит для предотвращения многократного преобразования объекта. Допустимо использовать функцию без регистратора, если надо преобразовать одиночный объект. Если надо преобразовать набор взаимосвязанных объектов, необходимо использовать регистратор для предотвращения повторного преобразования вложенных объектов, поскольку не исключена ситуация, когда несколько объектов из набора содержат ссылки на один или несколько общих объектов, подлежащих повороту.
[in] | pnt | - Неподвижная точка. |
[in] | angle | - Угол поворота. |
[in] | iReg | - Регистратор. |
[in] | surface | - Новая базовая поверхность объекта при условии, что matr - матрица преобразования из старой поверхности в новую. Для трансформации проекционной кривой. Не учитывается, если поверхность плоская. |
Замещает MbPlaneItem.
|
overridevirtual |
Выдать свойства объекта.
Выдать внутренние данные (свойства) объекта для их просмотра и модификации.
[in] | properties | - Контейнер для внутренних данных объекта. |
Замещает MbPlaneItem.
|
overridevirtual |
Изменить свойства объекта.
Изменение внутренних данных (свойств) объекта выполняется копированием соответствующих значений из присланного объекта.
[in] | properties | - Контейнер для внутренних данных объекта. |
Замещает MbPlaneItem.
|
overridevirtual |
Определить, является ли кривая замкнутой.
Определить, является ли кривая замкнутой.
Замкнутой считается кривая, если она циклична:
Замещает MbCurve.
|
overridevirtual |
Вычислить точку на кривой.
Скорректировать параметры при выходе их за пределы области определения и вычислить точку на кривой.
[in] | t | - Параметр curve. |
[out] | p | - Вычисленная точка на кривой. |
Замещает MbCurve.
|
overridevirtual |
Вычислить значения точки и производных для заданного параметра.
Значения точки и производных вычисляются в пределах области определения и на расширенной кривой.
[in] | t | - Параметр. |
[in] | ext | - В пределах области определения (false), на расширенной кривой (true). |
[out] | pnt | - Точка. |
[out] | fir | - Производная. |
[out] | sec | - Вторая производная по t, если не ноль. |
[out] | thir | - Третья производная по t, если не ноль. |
Переопределяет метод предка MbCurve.
|
overridevirtual |
Определить габаритный прямоугольник кривой.
Для получения габарита объекта присланный прямоугольник делается пустым. Затем вычисляются габариты объекта и сохраняются в прямоугольнике rect.
Переопределяет метод предка MbCurve.
|
overridevirtual |
Сдвинуть параметр вдоль кривой.
Сдвинуть параметр вдоль кривой на заданное расстояние в заданном направлении. Новое значение параметра сохраняется в переменной t. Если кривая не замкнута и длина ее части от точки с параметром t до конца в заданном направлении меньше, чем нужное смещение, то вычисления происходят на продолжении кривой, если можно построить продолжение.
[in,out] | t | - На входе - исходное значение параметра. На выходе - новое значение параметра. |
[in] | len | - Величина смещения вдоль кривой. |
[in] | curveDir | - Направление смещения. Если curveDir - неотрицательно, то смещение направлено в сторону увеличения параметра. Иначе - в сторону уменьшения параметра. |
[in] | eps | - Точность вычислений. |
[in] | version | - Версия. |
Переопределяет метод предка MbCurve.
|
overridevirtual |
Вычислить метрическую длину кривой.
Вычислить метрическую длину разомкнутой кривой от параметра t1 до t2. Должно выполнятся условие t1 < t2.
[in] | t1 | - Начальный параметр отрезка кривой. |
[in] | t2 | - Конечный параметр отрезка кривой. |
Переопределяет метод предка MbCurve.
|
overridevirtual |
Построить NURBS копию кривой.
Строит NURBS кривую, аппроксимирующую заданную в диапазоне параметров [t1, t2] с заданным направлением. По возможности, строит точную кривую, возможно с кратными узлами. Количество узлов для NURBS определяется в зависимости от кривой.
[in,out] | nurbs | - Построенная NURBS кривая. |
[in] | t1 | - Параметр, соответствующий началу аппроксимируемой части кривой. |
[in] | t2 | - Параметр, соответствующий концу аппроксимируемой части кривой. |
[in] | sense | - Совпадает ли направление возрастания параметра вдоль NURBS кривой с направлением на исходной кривой. sense > 0 - направление совпадает. |
[in] | nInfo | - Параметры преобразования кривой в NURBS. |
Замещает MbCurve.
|
overridevirtual |
Построить NURBS копию кривой.
Строит NURBS кривую, аппроксимирующую исходную с заданными параметрами. В параметрах можно задать степень и количество узлов сплайна, диапазон изменения параметра кривой. Если в параметрах не задан флаг точной аппроксимации, то строит NURBS без кратных узлов.
[in] | tParameters | - Параметры построения NURBS копии кривой. |
Переопределяет метод предка MbCurve.
|
overridevirtual |
Построить усеченную кривую.
Строит усеченную кривую, начало которой соответствует точке с параметром t1 и конец - точке с параметром t2. Можно изменить направление полученной кривой относительно исходной с помощью параметра sense. Если кривая замкнута, можно получить усеченную кривую, проходящую через начало кривой.
В случае замкнутой кривой (или для дуги - исключение) три параметра sense, t1 и t2 однозначно определяют результат. В случае разомкнутой кривой параметр sense и параметрами усечения должны соответствовать друг другу:
1) если sense == 1, то t1 < t2,
2) если sense == -1, то t1 > t2.
Если есть несоответствие между sense и параметрами усечения, то приоритетным параметром считается sense. Если параметры t1 и t2 равны и кривая замкнута, в результате должны получить замкнутую кривую.
[in] | t1 | - Параметр, соответствующий началу усеченной кривой. |
[in] | t2 | - Параметр, соответствующий концу усеченной кривой. |
[in] | sense | - Направление усеченной кривой относительно исходной. sense = 1 - направление кривой сохраняется. sense = -1 - направление кривой меняется на обратное. |
Замещает MbCurve.
|
overridevirtual |
Определить, является ли кривая репараметризованно такой же.
Определить, является ли кривая репараметризованно такой же.
[in] | curve | - Кривая для сравнения. |
[out] | factor | - Коэффициент сжатия параметрической области при переходе к указанной кривой. |
Переопределяет метод предка MbCurve.
|
overridevirtual |
Вычислить шаг параметра.
Вычислить шаг параметра для аппроксимации кривой по величине прогиба кривой. Вычисление шага проходит с учетом радиуса кривизны. Шаг аппроксимации кривой выбирается таким образом, чтобы отклонение кривой от её полигона не превышало заданную величину прогиба.
[in] | t | - Параметр, определяющий точку на кривой, в которой надо вычислить шаг. |
[in] | sag | - Максимально допустимая величина прогиба. |
Переопределяет метод предка MbCurve.
|
overridevirtual |
Вычислить шаг параметра.
Вычислить шаг параметра для аппроксимации кривой по углу отклонения касательной. Шаг аппроксимации кривой выбирается таким образом, чтобы угловое отклонение касательной кривой в следующей точке не превышало заданную величину ang.
[in] | t | - Параметр, определяющий точку на кривой, в которой надо вычислить шаг. |
[in] | ang | - Максимально допустимый угол отклонения касательной. |
Переопределяет метод предка MbCurve.
|
overridevirtual |
Рассчитать массив точек для отрисовки.
Выдать массив отрисовочных точек с заданной стрелкой прогиба. Если кривая представляет собой контур, то узловые точки контура дублируются.
[in] | sag | - Максимальная величина прогиба. |
[in,out] | poligon | - Полигон рассчитанных точек на кривой. |
Переопределяет метод предка MbCurve.
Удалить часть кривой.
Удалить часть кривой между параметрами t1 и t2. Если после удаления кривая распалась на две части, то исходный объект соответствует начальной части кривой, а в параметре part2 содержится конечная часть кривой. Если осталась односвязной, то изменяется только исходный объект.
[in] | t1 | - Начальный параметр усечения. |
[in] | t2 | - Конечный параметр усечения. |
[in,out] | part2 | - Конечная часть кривой после удаления, если исходная кривая распалась на части. Может являться единственной частью кривой после удаления, \ если не смогли изменить саму кривую (например, для прямой MbLine), в этом случае возвращаемый результат dp_Degenerated. |
Замещает MbCurve.
Оставить часть кривой.
Оставить часть кривой между параметрами t1 и t2.
В случае успеха операции возвращаемое значение равно dp_Changed и кривая удовлетворяет следующим условиям:
[in] | t1 | - Начальный параметр усечения. |
[in] | t2 | - Конечный параметр усечения. |
[in,out] | part2 | - Может заполниться результатом усечения, если не смогли изменить саму кривую. В этом случае возвращаемый результат dp_Degenerated. Иначе = nullptr. |
Замещает MbCurve.
Деформировать кривую.
Если габаритный прямоугольник кривой пересекаться с заданным, то кривая трансформируется в соответствии с матрицей с помощью функции Transform.
[in] | rect | - Прямоугольник, в котором проверяется видимость кривой. |
[in] | matr | - Матрица деформации. |
Переопределяет метод предка MbCurve.
|
overridevirtual |
Провести кривую через точку.
Изменить кривую так, чтобы она проходила через заданную точку. Изменения не должны затрагивать всю кривую. Если у кривой присутствуют какие-либо базовые объекты, связь с ними не должна потеряться при модификации. Если построить искомую кривую невозможно, исходная кривая не изменяется, возвращается false.
[in] | pnt | - Заданная точка. |
Переопределяет метод предка MbCurve.
|
overridevirtual |
Найти касательные к кривой.
Найти все касательные к кривой, которые можно провести из заданной точки. Точка может лежать на кривой. В данной функции рассматривается кривая без продолжений.
[in] | pnt | - Заданная точка. |
[in,out] | tFind | - Массив параметров кривой, соответствующих точкам касания. |
Переопределяет метод предка MbCurve.
|
overridevirtual |
Найти особые точки эквидистантной кривой.
Особыми точками эквидистантной кривой будем считать точки, в которых радиус кривизны исходной кривой равен величине смещения эквидистантной кривой.
[in,out] | tCusps | - Массив параметров особых точек. |
[in] | dist | - Смещение эквидистантной кривой. |
Переопределяет метод предка MbCurve.
|
overridevirtual |
Дать физический радиус скривой или ноль, если это невозможно.
В общем случае на запрос радиуса возвращается 0. Число, отличное от 0, можно получить лишь в том случае, если кривая является дугой окружности или эквивалентна дуге окружности.
Переопределяет метод предка MbCurve.
|
overridevirtual |
Вычислить точку для построения оси.
Вычисляет точку для построения оси, если кривая может быть построена вращением точки вокруг некоторой оси.
Переопределяет метод предка MbCurve.
|
overridevirtual |
Вернуть интервал влияния точки кривой.
Определяет, на каком интервале параметра кривой скажется изменение характерной точки с индексом index.
[in] | index | - Номер характерной точки. |
[out] | t1 | - Минимальный параметр интервала влияния. |
[out] | t2 | - Максимальный параметр интервала влияния. |
Замещает MbPolyCurve.
|
overridevirtual |
Вставить точку в массив контрольных точек.
Вставить заданную точку по индексу.
[in] | pnt | - Заданная точка. |
[in] | index | - Индекс, по которому надо вставить точку. |
Замещает MbPolyCurve.
|
overridevirtual |
Вставить точку в массив контрольных точек.
Вставить точку, которая будет соответствовать параметру t кривой. Если параметр t отличается от параметра некоторой точки меньше, чем на заданную погрешность, то новая точка не вставляется, заменяется уже существующая близкая по параметру точка.
[in] | t | - Параметр новой точки. |
[in] | pnt | - Заданная точка. |
[in] | xEps | - Точность по x. |
[in] | yEps | - Точность по y. |
Замещает MbPolyCurve.
|
overridevirtual |
Заменить точку.
Заменить точку.
[in] | index | - Индекс изменяемой точки. |
[in] | pnt | - Заданная точка. |
Переопределяет метод предка MbPolyCurve.
|
overridevirtual |
Изменить характерные точки.
Если количество точек в заданном массиве совпадает с текущим количеством точев, то массив точек заменяется на новый. Если не совпадает, то характерные точки не меняются, функция возвращает false.
[in] | pntList | - Заданный массив контрольных точек. |
Переопределяет метод предка MbPolyCurve.
|
overridevirtual |
Переместить параметр в область определения кривой.
Проверить параметр. Если он выходит за диапазон изменения параметров кривой, то в случае замкнутой кривой привести его в область определения, изменяя на период. В случае незамкнутой кривой - сделать равным ближайшему граничному параметру. Определить индексы характерный точек, между которыми находится заданный параметр, и их параметрические значения.
[in,out] | t | - На входе - заданный параметр. На выходе - параметр в области определения кривой. |
[out] | i0 | - Индекс характерной точки слева от заданного параметра. |
[out] | i1 | - Индекс характерной точки справа от заданного параметра. |
[out] | t0 | - Параметр характерной точки слева от заданного параметра. |
[out] | t1 | - Параметр характерной точки справа от заданного параметра. |
Замещает MbPolyCurve.
|
overridevirtual |
Вычислить расстояние до точки.
Вычислить расстояние от объекта до заданной точки вблизи объекта. Расстояние вычисляется и записывается в переменную d, если оно меньше исходного значения d. Может быть получен выигрыш по времени выполнения по сравнению с функцией DistanceToPoint, за счет того, что сначала проверяется расстояние от точки до габаритного куба, и только если это расстояние не больше заданного, выполняются дальнейшие вычисления.
[in] | to | - Tочка. |
[in,out] | d | - На входе - заданная величина отступа от объекта. На выходе - расстояние от точки до объекта, если операция выполнена успешно. |
Замещает MbPlaneItem.
|
overridevirtual |
Найти проекцию точки на кривую.
Найти ближайшую проекцию точки на кривую или ее продолжение по заданному начальному приближению. Если задан диапазон изменения параметра tRange - то надо найти проекцию в заданном диапазоне. Диапазон параметра может выходить за область определения параметра кривой. Используется метод Ньютона.
[in] | pnt | - Заданная точка. |
[in] | xEpsilon | - Точность определения проекции по оси x. |
[in] | yEpsilon | - Точность определения проекции по оси y. |
[in,out] | t | - На входе - начальное приближение, на выходе - параметр кривой, соответствующий ближайшей проекции. |
[in] | ext | - Флаг, определяющий, искать ли проекцию на продолжении кривой (если true, то искать). |
[in] | tRange | - Диапазон изменения параметра, в котором надо найти решение. |
Переопределяет метод предка MbCurve.
|
overridevirtual |
Выдать свойства объекта.
Записать свойства объекта. Выдать базовые точки кривой.
Непрерывна ли первая производная кривой по длине и направлению? Отсутствуют ли разрывы первой производной кривой по длине и направлению?
[out] | contLength | - Непрерывность длины (да/нет). |
[out] | contDirect | - Непрерывность направления (да/нет). |
[out] | params | - Параметры точек, в которых происходит разрыв направления. |
[in] | epsilon | - Погрешность вычисления. |
Переопределяет метод предка MbCurve.
|
overridevirtual |
Устранить разрывы первых производных по длине. Устранить разрывы производных по длине.
.
[in] | epsilon | - Погрешность вычисления. |
[in] | version | - Версия математики. |
Переопределяет метод предка MbCurve.
Разбить кривую.
Разбить недифференцируемую NURBS-кривую четвертой степени в трижды кратном внутреннем узле.
Если внутренних трижды кратных узлов не существует, то в массив заносится копия кривой.
Если bline = true, то проверить вырожденность в прямую, если прямая - преобразовать в прямую.
void MbNurbs::FixClosedNurbs | ( | ) |
Замкнуть кривую.
Замкнуть фактически замкнутую кривую.
То есть если первая и последняя точки кривой совпадают, но она реализована как незамкнутая, то одна из совпадающих точек убирается и кривая делается замкнутой.