C3D Kernel  104598
Открытые члены | Защищенные члены
Класс MbSplineSurface

NURBS поверхность. Подробнее...

Граф наследования:MbSplineSurface:
Inheritance graph
[см. легенду]
Граф связей класса MbSplineSurface:
Collaboration graph
[см. легенду]

Полный список членов класса

Открытые члены

 MbSplineSurface ()
 Пустой конструктор.
 MbSplineSurface (size_t uDeg, size_t vDeg, bool uCls, bool vCls, const Array2< MbCartPoint3D > &initPoints, const SArray< double > &initUKnots, const SArray< double > &initVKnots)
 Конструктор NURBS поверхности.
 MbSplineSurface (size_t uDeg, size_t vDeg, bool uCls, bool vCls, const Array2< MbCartPoint3D > &initPoints, const Array2< double > &initWeights, const SArray< double > &initUKnots, const SArray< double > &initVKnots)
 Конструктор NURBS поверхности.
 MbSplineSurface (const MbCartPoint3D &p1, const MbCartPoint3D &p2, const MbCartPoint3D &p3, const MbCartPoint3D &p4, size_t iDegreeU, size_t iDegreeV, size_t iCountU, size_t iCountV)
 Конструктор NURBS поверхности по четырем углам при обходе против часовой стрелки.
 VISITING_CLASS (MbSplineSurface)
 DECLARE_RESET_FUNCS (MbSplineSurface)
void Init (const MbSplineSurface &)
 Инициализация по другой поверхности.
bool Init (const Array2< MbCartPoint3D > &cPoints, const Array2< double > &pWeights)
 Инициализация заполненной поверхности.
bool Init (size_t iDegreeU, size_t iDegreeV, bool iClosedU, bool iClosedV)
 Инициализация заполненной поверхности.
bool InitParasolid (bool uCls, bool vCls, bool brational, size_t uDgr, size_t vDgr, ptrdiff_t uCnt, ptrdiff_t vCnt, const CcArray< double > &vcs, ptrdiff_t vcsCnt, const CcArray< ptrdiff_t > &uKMul, ptrdiff_t uKMulCnt, const CcArray< ptrdiff_t > &vKMul, ptrdiff_t vKMulCnt, const CcArray< double > &uKnt, ptrdiff_t uKntCnt, const CcArray< double > &vKnt, ptrdiff_t vKntCnt, double scl)
 Заполнить сплайновую поверхность по данным parasolid.
Общие функции геометрического объекта.
virtual MbeSpaceType IsA () const
 Получить тип объекта.
virtual MbSpaceItemDuplicate (MbRegDuplicate *=NULL) const
 Создать копию объекта.
virtual bool IsSame (const MbSpaceItem &other, double accuracy=LENGTH_EPSILON) const
 Определить, являются ли объекты равными.
virtual bool SetEqual (const MbSpaceItem &)
 Сделать объекты равным, если они подобны.
virtual void GetProperties (MbProperties &)
 Выдать свойства объекта.
virtual void SetProperties (const MbProperties &)
 Изменить свойства объекта.
virtual void GetBasisItems (RPArray< MbSpaceItem > &)
 Выдать базовые объекты в присланный контейнер.
virtual void GetBasisPoints (MbControlData3D &) const
 Выдать контрольные точки объекта.
virtual void SetBasisPoints (const MbControlData3D &)
 Изменить объект по контрольным точкам.
Функции описания области определения поверхности.
virtual double GetUMin () const
 Вернуть минимальное значение параметра u.
virtual double GetVMin () const
 Вернуть минимальное значение параметра v.
virtual double GetUMax () const
 Вернуть максимальное значение параметра u.
virtual double GetVMax () const
 Вернуть максимальное значение параметра v.
virtual bool IsUClosed () const
 Определить, замкнута ли поверхность по параметру u.
virtual bool IsVClosed () const
 Определить, замкнута ли поверхность по параметру v.
virtual bool IsUTouch () const
virtual bool IsVTouch () const
virtual bool IsUPeriodic () const
 Определить, замкнута ли поверхность по параметру u.
virtual bool IsVPeriodic () const
 Определить, замкнута ли поверхность по параметру v.
virtual size_t GetUCount () const
 Количество разбиений по параметру u для проверки событий.
virtual size_t GetVCount () const
 Количество разбиений по параметру v для проверки событий.
virtual bool GetPoleUMin () const
 Существует ли полюс на границе параметрической области.
virtual bool GetPoleUMax () const
 Существует ли полюс на границе параметрической области.
virtual bool GetPoleVMin () const
 Существует ли полюс на границе параметрической области.
virtual bool GetPoleVMax () const
 Существует ли полюс на границе параметрической области.
virtual bool IsPole (double u, double v) const
 Является ли точка полюсом.
Функции для работы в области определения поверхности

Функции PointOn, Derive... поверхностей корректируют параметры при выходе их за пределы прямоугольной области определения параметров.

virtual void PointOn (double &u, double &v, MbCartPoint3D &) const
 Вычислить точку на поверхности.
virtual void DeriveU (double &u, double &v, MbVector3D &) const
 Вычислить первую производную по u.
virtual void DeriveV (double &u, double &v, MbVector3D &) const
 Вычислить первую производную по v.
virtual void DeriveUU (double &u, double &v, MbVector3D &) const
 Вычислить вторую производную по u.
virtual void DeriveVV (double &u, double &v, MbVector3D &) const
 Вычислить вторую производную по v.
virtual void DeriveUV (double &u, double &v, MbVector3D &) const
 Вычислить вторую производную.
virtual void DeriveUUU (double &u, double &v, MbVector3D &) const
 Вычислить третью производную.
virtual void DeriveUUV (double &u, double &v, MbVector3D &) const
 Вычислить третью производную.
virtual void DeriveUVV (double &u, double &v, MbVector3D &) const
 Вычислить третью производную.
virtual void DeriveVVV (double &u, double &v, MbVector3D &) const
 Вычислить третью производную.
virtual void Normal (double &u, double &v, MbVector3D &) const
 Вычислить нормаль.
Функции для работы внутри и вне области определения поверхности

функции _PointOn, _Derive... поверхностей не корректируют параметры при выходе их за пределы прямоугольной области определения параметров. За пределами параметрической области поверхность продолжается по касательной.

virtual void _PointOn (double u, double v, MbCartPoint3D &) const
 Вычислить точку на поверхности.
virtual void _DeriveU (double u, double v, MbVector3D &) const
 Вычислить первую производную по u на расширенной поверхности.
virtual void _DeriveV (double u, double v, MbVector3D &) const
 Вычислить первую производную по v на расширенной поверхности.
virtual void _DeriveUU (double u, double v, MbVector3D &) const
 Вычислить вторую производную по u на расширенной поверхности.
virtual void _DeriveVV (double u, double v, MbVector3D &) const
 Вычислить вторую производную по v на расширенной поверхности.
virtual void _DeriveUV (double u, double v, MbVector3D &) const
 Вычислить вторую производную на расширенной поверхности.
virtual void _DeriveUUU (double u, double v, MbVector3D &) const
 Вычислить третью производную на расширенной поверхности.
virtual void _DeriveUUV (double u, double v, MbVector3D &) const
 Вычислить третью производную на расширенной поверхности.
virtual void _DeriveUVV (double u, double v, MbVector3D &) const
 Вычислить третью производную на расширенной поверхности.
virtual void _DeriveVVV (double u, double v, MbVector3D &) const
 Вычислить третью производную на расширенной поверхности.
virtual void _Normal (double u, double v, MbVector3D &) const
 Вычислить нормаль на расширенной поверхности.
Функции доступа к группе данных для работы внутри и вне области определения параметров поверхности.
virtual void Explore (double &u, double &v, bool ext, MbCartPoint3D &pnt, MbVector3D &uDer, MbVector3D &vDer, MbVector3D *uuDer, MbVector3D *vvDer, MbVector3D *uvDer, MbVector3D *nor) const
 Вычислить значения точки и производных для заданных параметров.
Функции движения по поверхности.
virtual double StepU (double u, double v, double sag) const
 Вычислить шаг параметра.
virtual double StepV (double u, double v, double sag) const
 Вычислить шаг параметра.
virtual double DeviationStepU (double u, double v, double sag) const
 Вычислить шаг параметра.
virtual double DeviationStepV (double u, double v, double sag) const
 Вычислить шаг параметра.

Защищенные члены

 MbSplineSurface (const MbSplineSurface &)
 Конструктор копирования.

Общие функции поверхности.

virtual void SetUClosed (bool cls)
 Установить признак замкнутости по U.
virtual void SetVClosed (bool cls)
 Установить признак замкнутости по V.
virtual MbSplineSurfaceNurbsSurface (double umin, double umax, double vmin, double vmax, bool bmatch=false) const
 Построить NURBS копию усеченной поверхности.
virtual MbSurfaceNurbsSurface (const MbNurbsParameters &uParam, const MbNurbsParameters &vParam) const
 Построить NURBS копию поверхности.
virtual MbCurve3DCurveU (double v, MbRect1D *pRgn, bool bApprox=true) const
 Построить пространственную копию линии v = const.
virtual MbCurve3DCurveV (double u, MbRect1D *pRgn, bool bApprox=true) const
 Построить пространственную копию линии u = const.
virtual void Refresh ()
 Перевести все временные (mutable) данные объекта в неопределённое (исходное) состояние.
virtual void Rebuild ()
 Перестроить поверхность.
virtual void GetTesselation (const MbStepData &stepData, double u1, double u2, double v1, double v2, SArray< double > &uu, SArray< double > &vv) const
 Определить разбивку параметрической области поверхности вертикалями и горизонталями.
virtual void SetLimit (double u1, double v1, double u2, double v2)
 Установить пределы поверхности. Для внутреннего использования.
virtual void CheckSurfParams (double &u, double &v) const
 Проверить параметры. Аналог глобальной функции _CheckParams, оптимизированный под использование кэшей.
MbSplineSurfaceTrimmed (double uBeg, double uEnd, double vBeg, double vEnd) const
 Построить усеченную поверхность.
virtual bool IsPlanar () const
 Является ли поверхность плоской.
virtual bool NearPointProjection (const MbCartPoint3D &pnt, double &u, double &v, bool ext, MbRect2D *uvRange=NULL) const
 Найти проекцию точки на поверхность.
virtual void DirectPointProjection (const MbCartPoint3D &pnt, const MbVector3D &vect, SArray< MbCartPoint > &uv, bool ext, MbRect2D *uvRange=NULL) const
 Найти все проекции точки на поверхность вдоль вектора в любом из двух направлений.
void ChangeWeight (ptrdiff_t i, ptrdiff_t j, double w)
 Изменение веса одной вершины.
void SetDegree (bool isU, ptrdiff_t order)
 Изменение порядка поверхности.
MbMatrix SetLimitParam (double pmin, double pmax, double qmin, double qmax)
 Установить область изменения параметров.
size_t GetUDegree () const
 Получить порядок В-сплайна по u.
size_t GetVDegree () const
 Получить порядок В-сплайна по v.
size_t GetWeightsLines () const
 Получить количество строк в матрице весов.
size_t GetWeightsColumns () const
 Получить количество столбцов в матрице весов.
double GetWeight (ptrdiff_t i, ptrdiff_t j) const
 Получить вес вершины.
virtual void GetWeights (Array2< double > &wts) const
 Получить матрицу весов вершин.
size_t GetKnotsCount (bool isU) const
 Получить количество элементов в узловом векторе.
virtual void GetKnots (bool isU, SArray< double > &knots) const
 Получить узловой вектор по выбранному параметру.
double GetKnot (bool isU, size_t i) const
 Получить значение одного узла.
virtual void InsertUKnotsInRegion (ptrdiff_t idBegin, ptrdiff_t num=1)
 Вставка ряда после ряда с номером idBegin без изменения поверхности по u.
void InsertUKnots (double &newKnot, ptrdiff_t multiplicity)
 Вставка ряда со значением узла newKnot без изменения поверхности по u.
virtual void InsertVKnotsInRegion (ptrdiff_t idBegin, ptrdiff_t num=1)
 Вставка ряда после ряда с номером idBegin без изменения поверхности по v.
void InsertVKnots (double &newKnot, ptrdiff_t multiplicity)
 Вставка ряда со значением узла newKnot без изменения поверхности по v.
virtual void CalculateUVParameters (Array2< MbCartPoint > &params) const
 Вычисление точек на поверхности, соответствующих узлам.
virtual bool CalculateUVParameterForKnot (size_t uIndex, size_t vIndex, MbCartPoint &point) const
 Вычисление точки на поверхности, соответствующей контрольной точке.
virtual bool CalculatePartsForSpecMove (const Array2< bool > &movedPoints, size_t uIndex, size_t vIndex, const MbVector3D &moveVector, MbeDirectSmoothType smoothType, double smoothDegree, Array2< double > &partsPoints) const
 Вычисление доли смещения узлов при перемещении со сглаживанием.
virtual bool CalculateFixedPoints (const RPArray< const MbSurfaceIntersectionCurve > &curves, Array2< bool > &fixedPoints) const
 Вычисление фиксированных контрольных точек.
bool CalculateFixedLimits (const MbSurfaceCurve &curve, ptrdiff_t &u1, ptrdiff_t &u2, ptrdiff_t &v1, ptrdiff_t &v2) const
virtual size_t RemoveUKnots (ptrdiff_t &rowId, ptrdiff_t num=1, double absEps=Math::lengthEpsilon)
 Удаление столбца контрольных точек без изменения поверхности.
virtual size_t RemoveVKnots (ptrdiff_t &rowId, ptrdiff_t num=1, double absEps=Math::lengthEpsilon)
 Удаление строки контрольных точек без изменения поверхности.
virtual bool ChangeUDegreeApprox (size_t newDegree)
 Изменить порядок nurbs путем перестроения поверхности с помощью функции NurbsSurface.
virtual bool ChangeVDegreeApprox (size_t newDegree)
 Изменить порядок nurbs путем перестроения поверхности с помощью функции NurbsSurface.
virtual bool ChangeParametersApprox (size_t nUDegree, size_t nVDegree, ptrdiff_t nUCount, ptrdiff_t nVCount)
 Изменить порядок и количество узлов nurbs путем перестроения поверхности с помощью функции NurbsSurface.
bool ApproxSurfWithoutMultKnots ()
 Перестроить поверхность с помощью функции NurbsSurface без кратных узлов.
virtual void GetPointsWithVisible (Array2< MbNurbsPointInfo > &params) const
 Вернуть массив узловых точек и их видимость для операции редактирования как сплайна.
void ModifyPointsWithVisible (const Array2< MbCartPoint3D > &oldPoints, Array2< MbCartPoint3D > &newPoints) const
 Модифицировать массив узловых точек с учетом перемещения невидимых точек.
bool UnClampedU (bool clm)
 Зажать или разжать узловой вектор.
bool UnClampedV (bool clm)
 Зажать или разжать узловой вектор.
void SetClampedU ()
 Делаем зажатый узловой вектор.
void SetClampedV ()
 Делаем зажатый узловой вектор.
void SetBordersTypes (bool cuMin, bool cuMax, bool cvMin, bool cvMax)
 Установить типы границ поверхности.
bool CheckPolePoint (const MbCartPoint3D &pnt, double absEps, bool bSet)
 Проверить является ли точка полюсной и убрать разрыв в первой производной.
void SoftUTouch ()
 Если поверхность касается по U - убрать разрыв в первой производной.
void SoftVTouch ()
 Если поверхность касается по V - убрать разрыв в первой производной.
virtual bool IsLineU () const
 Проверить, что все производные поверхности по U выше первой равны нулю.
virtual bool IsLineV () const
 Проверить, что все производные поверхности по V выше первой равны нулю.
virtual double GetRadius () const
 Дать физический радиус объекта или ноль, если это невозможно.
virtual double GetFilletRadius (const MbCartPoint3D &p) const
 Дать радиус скругления, если поверхность является поверхностью скругления.
virtual MbeParamDir GetFilletDirection () const
 Направление поверхности скругления.
virtual bool GetCylinderAxis (MbAxis3D &) const
 Дать ось вращения для поверхности.
bool IsRational () const
 Проверить, является ли поверхность рациональной, но не регулярной.
void DeleteTesselation () const
 Удалить временную структуру данных - разбивку поверхности.
MbCurveIsSplineBorder (const MbCurve3D &curve) const
 Создать двумерную кривую, если пространственная кривая является границей поверхности.
void DirectParallelRects (const MbVector3D &direction, std::vector< MbRect > &parallelRects) const
 Области поверхности, параллельные направлению.

Подробное описание

NURBS поверхность строится по заданной матрице контрольных точек. Каждая контрольная точка имеет вес, который задан в матрице весов (по умолчанию все веса равны 1).
Аббревиатура NURBS получена из первых букв словосочетания Non-Uniform Rational B-Spline. NURBS поверхность не проходит через свои контрольные точки. Расчет поверхности в каждой точке производится на основе двух семейств нормированных неоднородных В-сплайнов.
Каждое семейство В-сплайнов определяется заданной неубывающей последовательностью узловых параметров и заданным порядком B-сплайна. Для не замкнутой по первому параметру поверхности узловой вектор uknots должен содержать количество столбцов матрицы контрольных точек плюс udegree. Для замкнутой по первому параметру поверхности узловой вектор uknots должен содержать количество столбцов матрицы контрольных точек плюс 2*udegree-1. Для не замкнутой по второму параметру поверхности узловой вектор vknots должен содержать количество строк матрицы контрольных точек плюс vdegree. Для замкнутой по второму параметру поверхности узловой вектор vknots должен содержать количество строк матрицы контрольных точек плюс 2*vdegree-1.


Конструктор(ы)

MbSplineSurface::MbSplineSurface ( size_t  uDeg,
size_t  vDeg,
bool  uCls,
bool  vCls,
const Array2< MbCartPoint3D > &  initPoints,
const SArray< double > &  initUKnots,
const SArray< double > &  initVKnots 
)

Конструктор NURBS поверхности.

Аргументы:
[in]uDeg- Порядок сплайнов по u.
[in]vDeg- Порядок сплайнов по v.
[in]uCls- Замкнутость поверхности по u.
[in]vCls- Замкнутость поверхности по v.
[in]initPoints- Матрица контрольных точек.
[in]initUKnots- Узловой вектор по u.
[in]initVKnots- Узловой вектор по v.
MbSplineSurface::MbSplineSurface ( size_t  uDeg,
size_t  vDeg,
bool  uCls,
bool  vCls,
const Array2< MbCartPoint3D > &  initPoints,
const Array2< double > &  initWeights,
const SArray< double > &  initUKnots,
const SArray< double > &  initVKnots 
)

Конструктор NURBS поверхности.

Аргументы:
[in]uDeg- Порядок сплайнов по u.
[in]vDeg- Порядок сплайнов по v.
[in]uCls- Замкнутость поверхности по u.
[in]vCls- Замкнутость поверхности по v.
[in]initPoints- Матрица контрольных точек.
[in]initWeights- Матрица весов точек.
[in]initUKnots- Узловой вектор по u.
[in]initVKnots- Узловой вектор по v.
MbSplineSurface::MbSplineSurface ( const MbCartPoint3D p1,
const MbCartPoint3D p2,
const MbCartPoint3D p3,
const MbCartPoint3D p4,
size_t  iDegreeU,
size_t  iDegreeV,
size_t  iCountU,
size_t  iCountV 
)

Заданы углы поверхности. Остальные точки равномерно распределены внутри прямоугольника, заданного угловыми точками.

Аргументы:
[in]p1- Левый нижний угол. Соответствует точке (0, 0).
[in]p2- Правый нижний угол. Соответствует точке (1, 0).
[in]p3- Правый верхний угол. Соответствует точке (1, 1).
[in]p4- Левый верхний угол. Соответствует точке (0, 1).
[in]iDegreeU- Порядок сплайнов по u.
[in]iDegreeV- Порядок сплайнов по v.
[in]iCountU- Количество точек по u (Число столбцов в матрице точек).
[in]iCountV- Количество точек по v (Число строк в матрице точек).

Методы

bool MbSplineSurface::Init ( const Array2< MbCartPoint3D > &  cPoints,
const Array2< double > &  pWeights 
)

Инициализация заполненной поверхности.

Аргументы:
[in]cPoints- Матрица контрольных точек.
[in]pWeights- Матрица весов точек.
bool MbSplineSurface::Init ( size_t  iDegreeU,
size_t  iDegreeV,
bool  iClosedU,
bool  iClosedV 
)

Инициализация заполненной поверхности.

Аргументы:
[in]iDegreeU- Новая степень сплайнов по u.
[in]iDegreeV- Новая степень сплайнов по v.
[in]iClosedU- Замкнутость поверхности по u.
[in]iClosedV- Замкнутость поверхности по v.
bool MbSplineSurface::InitParasolid ( bool  uCls,
bool  vCls,
bool  brational,
size_t  uDgr,
size_t  vDgr,
ptrdiff_t  uCnt,
ptrdiff_t  vCnt,
const CcArray< double > &  vcs,
ptrdiff_t  vcsCnt,
const CcArray< ptrdiff_t > &  uKMul,
ptrdiff_t  uKMulCnt,
const CcArray< ptrdiff_t > &  vKMul,
ptrdiff_t  vKMulCnt,
const CcArray< double > &  uKnt,
ptrdiff_t  uKntCnt,
const CcArray< double > &  vKnt,
ptrdiff_t  vKntCnt,
double  scl 
)

Заполнить сплайновую поверхность по данным parasolid.

Аргументы:
[in]uCls- Замкнутость поверхности по u.
[in]vCls- Замкнутость поверхности по v.
[in]brational- Является ли поверхность рациональной. true - строится NURBS поверхность, false - поверхность Безье.
[in]uDgr- Степень сплайнов по u.
[in]vDgr- Степень сплайнов по v.
[in]uCnt- Количество точек по u.
[in]vCnt- Количество точек по v.
[in]vcs- Множество координат точек. Если сплайн рациональный, четвертая координата - вес точки.
[in]vcsCnt- Количество элементов в массиве vcs.
[in]uKMul- Множество с данными о кратности каждого узла по u.
[in]uKMulCnt- Количество элементов в массиве uKMul.
[in]vKMul- Множество с данными о кратности каждого узла по v.
[in]vKMulCnt- Количество элементов в массиве vKMul.
[in]uKnt- Множество со значениями узлов по u. Каждое значение представлено один раз. Информация о кратности узла лежит в элементе массива uKMul с тем же номером.
[in]uKntCnt- Количество элементов в массиве uKnt.
[in]vKnt- Множество со значениями узлов по v. Каждое значение представлено один раз. Информация о кратности узла лежит в элементе массива vKMul с тем же номером.
[in]vKntCnt- Количество элементов в массиве vKnt.
[in]scl- Коэффициент масштабирования.
virtual MbSpaceItem& MbSplineSurface::Duplicate ( MbRegDuplicate iReg = NULL) const [virtual]

Создать копию объекта с использованием регистратора. Регистратор используется для предотвращения многократного копирования объекта. Если объект содержит ссылки на другие объекты, то вложенные объекты так же копируются. Допустимо не передавать регистратор в функцию. Тогда будет создана новая копия объекта. При копировании одиночного объекта или набора не связанных между собой объектов допустимо не использовать регистратор. Регистратор необходимо использовать, если надо последовательно копировать несколько взаимосвязанных объектов. Возможно, что связь объектов обусловлена наличием в них ссылок на общие объекты. Тогда, при копировании без использования регистратора, можно получить набор копий, содержащих ссылки на разные копии одного и того же вложенного объекта, что ведет к потере связи между копиями.

Аргументы:
[in]iReg- Регистратор.
Возвращает:
Копия объекта.

Замещает MbPolySurface.

virtual bool MbSplineSurface::IsSame ( const MbSpaceItem other,
double  accuracy = LENGTH_EPSILON 
) const [virtual]

Равными считаются однотипные объекты, все данные которых одинаковы (равны).

Аргументы:
[in]item- Объект для сравнения.
[in]accuracy- Точность сравнения.
Возвращает:
Равны ли объекты.

Замещает MbPolySurface.

virtual bool MbSplineSurface::SetEqual ( const MbSpaceItem item) [virtual]

Равными можно сделать только подобные объекты. Подобный объект приравнивается присланному путем изменения численных данных.

Аргументы:
[in]item- Объект для инициализации.
Возвращает:
Сделан ли объект равным присланному.

Замещает MbPolySurface.

virtual void MbSplineSurface::GetProperties ( MbProperties properties) [virtual]

Выдать внутренние данные (свойства) объекта для их просмотра и модификации.

Аргументы:
[in]properties- Контейнер для внутренних данных объекта.

Замещает MbPolySurface.

virtual void MbSplineSurface::SetProperties ( const MbProperties properties) [virtual]

Изменение внутренних данных (свойств) объекта выполняется копированием соответствующих значений из присланного объекта.

Аргументы:
[in]properties- Контейнер для внутренних данных объекта.

Замещает MbPolySurface.

virtual bool MbSplineSurface::IsUClosed ( ) const [virtual]

Определить, замкнута ли гладко поверхность по u-параметру без учета граничного контура. Всегда false для MbCurveBoundSurface. Рекомендуется использовать IsUPeriodic.

Переопределяет метод предка MbPolySurface.

virtual bool MbSplineSurface::IsVClosed ( ) const [virtual]

Определить, замкнута ли гладко поверхность по v-параметру без учета граничного контура. Всегда false для MbCurveBoundSurface. Рекомендуется использовать IsVPeriodic.

Переопределяет метод предка MbPolySurface.

virtual bool MbSplineSurface::IsUTouch ( ) const [virtual]

Определить, замкнута ли фактически поверхность по u-параметру независимо от гладкости замыкания.

Переопределяет метод предка MbSurface.

virtual bool MbSplineSurface::IsVTouch ( ) const [virtual]

Определить, замкнута ли фактически поверхность по v-параметру независимо от гладкости замыкания.

Переопределяет метод предка MbSurface.

virtual bool MbSplineSurface::IsUPeriodic ( ) const [virtual]

Определить, замкнута ли гладко поверхность по u-параметру без учета граничного контура.

Переопределяет метод предка MbSurface.

virtual bool MbSplineSurface::IsVPeriodic ( ) const [virtual]

Определить, замкнута ли гладко поверхность по v-параметру без учета граничного контура.

Переопределяет метод предка MbSurface.

virtual void MbSplineSurface::PointOn ( double &  u,
double &  v,
MbCartPoint3D p 
) const [virtual]

Скорректировать параметры при выходе их за пределы прямоугольной области определения и вычислить точку на поверхности.

Аргументы:
[in]u- Первый параметр поверхности.
[in]v- Второй параметр поверхности.
[out]p- Вычисленная точка на поверхности.

Замещает MbPolySurface.

virtual void MbSplineSurface::_PointOn ( double  u,
double  v,
MbCartPoint3D p 
) const [virtual]

Вычислить точку на поверхности в том числе и за пределами области определения параметров.

Аргументы:
[in]u- Первый параметр поверхности.
[in]v- Второй параметр поверхности.
[out]p- Вычисленная точка на поверхности.

Переопределяет метод предка MbSurface.

virtual void MbSplineSurface::Explore ( double &  u,
double &  v,
bool  ext,
MbCartPoint3D pnt,
MbVector3D uDer,
MbVector3D vDer,
MbVector3D uuDer,
MbVector3D vvDer,
MbVector3D uvDer,
MbVector3D nor 
) const [virtual]

Значения точки и производных вычисляются в пределах области определения и на расширенной поверхности.

Аргументы:
[in]u- Параметр.
[in]v- Параметр.
[in]ext- В пределах области определения (false), на расширенной поверхности (true).
[out]pnt- Точка.
[out]uDer- Производная по u.
[out]vDer- Производная по v.
[out]uuDer- Вторая производная по u, если не ноль.
[out]vvDer- Вторая производная по v, если не ноль.
[out]uvDer- Вторая производная по u и по v, если не ноль.

Замещает MbPolySurface.

virtual double MbSplineSurface::StepU ( double  u,
double  v,
double  sag 
) const [virtual]

Вычислить шаг параметра для аппроксимации поверхности по величине прогиба вдоль линии с постоянным значением v. Вычисление шага проходит с учетом радиуса кривизны. Шаг аппроксимации вдоль кривой выбирается таким образом, чтобы отклонение кривой от ее полигона не превышало заданную величину прогиба.

Аргументы:
[in]u- Параметр, определяющий точку на поверхности.
[in]v- Параметр, определяющий точку на поверхности.
[in]sag- Максимально допустимая величина прогиба.
Возвращает:
Величина шага по параметру в заданной точке.

Переопределяет метод предка MbSurface.

virtual double MbSplineSurface::StepV ( double  u,
double  v,
double  sag 
) const [virtual]

Вычислить шаг параметра для аппроксимации поверхности по величине прогиба вдоль линии с постоянным значением u. Вычисление шага проходит с учетом радиуса кривизны. Шаг аппроксимации вдоль кривой выбирается таким образом, чтобы отклонение кривой от ее полигона не превышало заданную величину прогиба.

Аргументы:
[in]u- Параметр, определяющий точку на поверхности.
[in]v- Параметр, определяющий точку на поверхности.
[in]sag- Максимально допустимая величина прогиба.
Возвращает:
Величина шага по параметру в заданной точке.

Переопределяет метод предка MbSurface.

virtual double MbSplineSurface::DeviationStepU ( double  u,
double  v,
double  angle 
) const [virtual]

Вычислить шаг параметра для аппроксимации поверхности по углу отклонения касательной вдоль линии с постоянным значением u. Шаг аппроксимации вдоль кривой выбирается таким образом, чтобы угловое отклонение касательной к кривой в следующей точке не превышало заданную величину ang.

Аргументы:
[in]u- Параметр, определяющий точку на поверхности.
[in]v- Параметр, определяющий точку на поверхности.
[in]ang- Максимально допустимый угол отклонения касательной.
Возвращает:
Величина шага по параметру в заданной точке.

Переопределяет метод предка MbSurface.

virtual double MbSplineSurface::DeviationStepV ( double  u,
double  v,
double  angle 
) const [virtual]

Вычислить шаг параметра для аппроксимации поверхности по углу отклонения касательной вдоль линии с постоянным значением v. Шаг аппроксимации вдоль кривой выбирается таким образом, чтобы угловое отклонение касательной к кривой в следующей точке не превышало заданную величину ang.

Аргументы:
[in]u- Параметр, определяющий точку на поверхности.
[in]v- Параметр, определяющий точку на поверхности.
[in]ang- Максимально допустимый угол отклонения касательной.
Возвращает:
Величина шага по параметру в заданной точке.

Переопределяет метод предка MbSurface.

virtual MbSplineSurface* MbSplineSurface::NurbsSurface ( double  u1,
double  u2,
double  v1,
double  v2,
bool  bmatch = false 
) const [virtual]

Полученная поверхность всегда не замкнута как по u, так и по v. Исключением является сама поверхность NURBS. Если поверхность не требует пересчета, то выдается ее копия Параметры u1, u2, v1, v2 - границы усечения поверхности.

Аргументы:
[in]u1- Минимальный параметр по U
[in]u2- Максимальный параметр по U
[in]v1- Минимальный параметр по V
[in]v2- Максимальный параметр по V
[in]bmatch- true, если при преобразовании нужно сохранить однозначное сответствие параметрических областей

Переопределяет метод предка MbSurface.

virtual MbSurface* MbSplineSurface::NurbsSurface ( const MbNurbsParameters uParam,
const MbNurbsParameters vParam 
) const [virtual]

Строит NURBS поверхность, аппроксимирующую исходную с заданными параметрами по каждому направлению. В параметрах можно задать степень и количество узлов сплайна, диапазон изменения параметра кривой. Если в параметрах не задан флаг точной аппроксимации, то строит NURBS без кратных узлов.

Аргументы:
[in]uParam- Параметры построения по направлению u.
[in]vParam- Параметры построения по направлению v.
Возвращает:
Построенная NURBS поверхность или NULL при неуспешном построении.

Переопределяет метод предка MbSurface.

virtual MbCurve3D* MbSplineSurface::CurveU ( double  v,
MbRect1D pRgn,
bool  bApprox = true 
) const [virtual]
Аргументы:
[in]v- Параметр по направлению V.
[in]pRgn- Диапазон параметров по U.
[in]bApprox- Если false, то вернет не ноль только в случае, если получится создать точную кривую.
Если true, то вернет не ноль, если кривая не вырождена.
Возвращает:
Построенная кривая.

Переопределяет метод предка MbSurface.

virtual MbCurve3D* MbSplineSurface::CurveV ( double  u,
MbRect1D pRgn,
bool  bApprox = true 
) const [virtual]
Аргументы:
[in]u- Параметр по направлению U.
[in]pRgn- Диапазон параметров по V.
[in]bApprox- Если false, то вернет не ноль только в случае, если получится создать точную кривую.
Если true, то вернет не ноль, если кривая не вырождена.
Возвращает:
Построенная кривая.

Переопределяет метод предка MbSurface.

virtual void MbSplineSurface::GetTesselation ( const MbStepData stepData,
double  u1,
double  u2,
double  v1,
double  v2,
SArray< double > &  uu,
SArray< double > &  vv 
) const [virtual]

Определить разбивку параметрической области поверхности вертикалями и горизонталями при триангуляции.

Аргументы:
[in]stepData- Данные для вычисления шага при триангуляции.
[in]u1- Минимальное значение параметра u в области разбиения поверхности.
[in]u2- Максимальное значение параметра u в области разбиения поверхности.
[in]v1- Минимальное значение параметра v в области разбиения поверхности.
[in]v2- Максимальное значение параметра v в области разбиения поверхности.
[out]uu- Множество параметров разбиения по u.
[out]vv- Множество параметров разбиения по v.

Переопределяет метод предка MbSurface.

virtual void MbSplineSurface::CheckSurfParams ( double &  u,
double &  v 
) const [virtual]

Проверить параметры и загнать в область определения, если параметр вышел за полюс.

Аргументы:
[in]surface- Поверхность.
[in]u- Первый параметр.
[in]v- Второй параметр.

Переопределяет метод предка MbSurface.

MbSplineSurface* MbSplineSurface::Trimmed ( double  uBeg,
double  uEnd,
double  vBeg,
double  vEnd 
) const

Построить усеченную поверхность.

Аргументы:
[in]uBeg- Параметр U, соответствующий началу усеченной поверхности.
[in]uEnd- Параметр U, соответствующий концу усеченной поверхности.
[in]vBeg- Параметр V, соответствующий началу усеченной поверхности.
[in]vEnd- Параметр V, соответствующий концу усеченной поверхности.
Возвращает:
Построенная усеченная поверхность.
virtual bool MbSplineSurface::NearPointProjection ( const MbCartPoint3D pnt,
double &  u,
double &  v,
bool  ext,
MbRect2D uvRange = NULL 
) const [virtual]

Найти ближайшую проекцию точки на поверхность или ее продолжение по заданному начальному приближению. Если задан диапазон изменения параметров uvRange, то надо найти проекцию в заданном диапазоне. Диапазон параметров может выходить за область определения параметров поверхности. Используется метод Ньютона.

Аргументы:
[in]pnt- Заданная точка.
[in,out]u- На входе - начальное приближение, на выходе - параметр, соответствующий ближайшей проекции.
[in,out]v- На входе - начальное приближение, на выходе - параметр, соответствующий ближайшей проекции.
[in]ext- Флаг, определяющий, искать ли проекцию на продолжении поверхности (если true, то искать).
[in]uvRange- Диапазон изменения параметров, в котором надо найти решение.
Возвращает:
true - если найдена проекция, удовлетворяющая всем входным условиям.

Переопределяет метод предка MbSurface.

virtual void MbSplineSurface::DirectPointProjection ( const MbCartPoint3D pnt,
const MbVector3D vect,
SArray< MbCartPoint > &  uv,
bool  ext,
MbRect2D uvRange = NULL 
) const [virtual]

Вычислить все точки пересечения поверхности с лучом, выходящим из заданной точки p по направлению vect. Если задан диапазон изменения параметров uvRange, то надо найти проекцию в заданном диапазоне. Диапазон параметров может выходить за область определения параметров поверхности.

Аргументы:
[in]pnt- Заданная точка.
[in]vect- Вектор направления.
[in,out]uv- Множество точек проекции.
[in]ext- Флаг, определяющий, искать ли проекцию на продолжении кривой (если true, то искать).
[in]uvRange- Диапазон изменения параметров, в котором надо найти решение.

Переопределяет метод предка MbSurface.

void MbSplineSurface::ChangeWeight ( ptrdiff_t  i,
ptrdiff_t  j,
double  w 
)

Изменение веса одной вершины.

Аргументы:
[in]i- Номер строки.
[in]j- Номер столбца.
[in]w- Новое значение веса.
void MbSplineSurface::SetDegree ( bool  isU,
ptrdiff_t  order 
)

Изменение порядка поверхности.

Аргументы:
[in]isU- Определяет, по какой координате надо изменить порядок: true - по u, false - по v.
[in]order- Новый порядок поверхности.
MbMatrix MbSplineSurface::SetLimitParam ( double  pmin,
double  pmax,
double  qmin,
double  qmax 
)

Установить область изменения параметров.

Аргументы:
[in]pmin- Минимальное значение по u.
[in]pmax- Максимальное значение по u.
[in]qmin- Минимальное значение по v.
[in]qmax- Максимальное значение по v.
double MbSplineSurface::GetWeight ( ptrdiff_t  i,
ptrdiff_t  j 
) const [inline]

Получить вес вершины.

Аргументы:
[in]i- Номер строки.
[in]j- Номер столбца.
Возвращает:
Значение веса.
virtual void MbSplineSurface::GetWeights ( Array2< double > &  wts) const [inline, virtual]

Получить матрицу весов вершин.

Аргументы:
[in,out]wts- Матрица для заполнения значений весов.

Замещает MbPolySurface.

size_t MbSplineSurface::GetKnotsCount ( bool  isU) const [inline]

Получить количество элементов в узловом векторе.

Аргументы:
[in]isU- Определяет, по какой координате запрашивается узловой вектор: true - по u, false - по v.
Возвращает:
Количество элементов в узловом векторе.
virtual void MbSplineSurface::GetKnots ( bool  isU,
SArray< double > &  knots 
) const [inline, virtual]

Получить узловой вектор по выбранному параметру.

Аргументы:
[in]isU- Определяет, по какой координате запрашивается узловой вектор: true - по u, false - по v.
[in,out]knots- Матрица для хранения узлового вектора.

Замещает MbPolySurface.

double MbSplineSurface::GetKnot ( bool  isU,
size_t  i 
) const

Получить значение одного узла.

Аргументы:
[in]isU- Определяет, по какой координате запрашивается узловой вектор: true - по u, false - по v.
[in]i- Номер элемента в узловом векторе.
Возвращает:
Значение узла.
virtual void MbSplineSurface::InsertUKnotsInRegion ( ptrdiff_t  idBegin,
ptrdiff_t  num = 1 
) [virtual]

Вставка ряда после ряда с номером idBegin без изменения поверхности по u.

Аргументы:
[in]idBegin- Номер ряда, после которого будет вставлен новый ряд.
[in]num- Количество вставляемых рядов.

Замещает MbPolySurface.

void MbSplineSurface::InsertUKnots ( double &  newKnot,
ptrdiff_t  multiplicity 
)

Вставка ряда со значением узла newKnot без изменения поверхности по u.

Аргументы:
[in]newKnot- Значение узла.
[in]multiplicity- Количество вставляемых рядов.
virtual void MbSplineSurface::InsertVKnotsInRegion ( ptrdiff_t  idBegin,
ptrdiff_t  num = 1 
) [virtual]

Вставка ряда после ряда с номером idBegin без изменения поверхности по v.

Аргументы:
[in]idBegin- Номер ряда, после которого будет вставлен новый ряд.
[in]num- Количество вставляемых рядов.

Замещает MbPolySurface.

void MbSplineSurface::InsertVKnots ( double &  newKnot,
ptrdiff_t  multiplicity 
)

Вставка ряда со значением узла newKnot без изменения поверхности по v.

Аргументы:
[in]newKnot- Значение узла.
[in]multiplicity- Количество вставляемых рядов.
virtual void MbSplineSurface::CalculateUVParameters ( Array2< MbCartPoint > &  params) const [virtual]

Вычисление точек на поверхности, соответствующих узлам.

Аргументы:
[in,out]params- Матрица для хранения точек на поверхности, соответствующих контрольным точкам.

Замещает MbPolySurface.

virtual bool MbSplineSurface::CalculateUVParameterForKnot ( size_t  uIndex,
size_t  vIndex,
MbCartPoint point 
) const [virtual]

Вычисление точки на поверхности, соответствующей контрольной точке.

Аргументы:
[in]uIndex- Столбец контрольной точки.
[in]vIndex- Строка контрольной точки.
[in,out]point- Точка на поверхности.
Возвращает:
true, если точка на поверхности успешно найдена.

Замещает MbPolySurface.

virtual bool MbSplineSurface::CalculatePartsForSpecMove ( const Array2< bool > &  movedPoints,
size_t  uIndex,
size_t  vIndex,
const MbVector3D moveVector,
MbeDirectSmoothType  smoothType,
double  smoothDegree,
Array2< double > &  partsPoints 
) const [virtual]

Известно перемещение одной контрольной точки. Перемещение остальных точек, помеченных как подвижные в матрице movedPoints, зависит от направления ее перемещения, расстояния точки от линии перемещения (moveVector) и функции сглаживания. Есть три режима сглаживания: выпуклый, вогнутый и плавный переход.

Аргументы:
[in]movedPoints- Матрица, содержащая данные о перемещаемых точках. Если элемент матрицы равен 1 - соответствующая ему контрольная точка может быть перемещена, иначе - неподвижна.
[in]uIndex- Столбец перемещаемой контрольной точки, относительно которой будет сглаживание.
[in]vIndex- Строка перемещаемой контрольной точки, относительно которой будет сглаживание.
[in]moveVector- Вектор, по направлению которого смещается контрольная точка.
[in]smoothType- Тип сглаживания.
dst_None - без сглаживания, dst_Convex - выпуклый, dst_Concave - вогнутый, dst_Smooth - плавный переход.
[in]smoothDegree- Степень функции сглаживания. Положительное число.
[in,out]partsPoints- Матрица с данными о долях смещения каждой точки относительно смещения перемещаемой точки.
Возвращает:
true, если вычисления проведены успешно.

Замещает MbPolySurface.

virtual bool MbSplineSurface::CalculateFixedPoints ( const RPArray< const MbSurfaceIntersectionCurve > &  curves,
Array2< bool > &  fixedPoints 
) const [virtual]

Вычисление узлов, которые должны быть неподвижны, чтобы при деформации поверхности кривые из заданного массива не деформаровались.

Аргументы:
[in]curves- Множество кривых.
[in,out]fixedPoints- Матрица, в которую заносятся данные о необходимости фиксации узлов для сохранения кривых. Если элемент матрицы равен true - соответствующая ему контрольная точка должна быть фиксирована.
Возвращает:
true, вычисления выполнены успешно.

Замещает MbPolySurface.

virtual size_t MbSplineSurface::RemoveUKnots ( ptrdiff_t &  rowId,
ptrdiff_t  num = 1,
double  absEps = Math::lengthEpsilon 
) [virtual]

Удаление столбца контрольных точек без изменения поверхности.

Аргументы:
[in]rowId- Номер первого удаляемого столбца.
[in]num- Количество удаляемых столбцов.
[in]absEps- Погрешность аппроксимации.
Возвращает:
Число столбцов, которые удалось удалить.

Замещает MbPolySurface.

virtual size_t MbSplineSurface::RemoveVKnots ( ptrdiff_t &  rowId,
ptrdiff_t  num = 1,
double  absEps = Math::lengthEpsilon 
) [virtual]

Удаление строки контрольных точек без изменения поверхности.

Аргументы:
[in]rowId- Номер первой удаляемой строки.
[in]num- Количество удаляемых строк.
[in]absEps- Погрешность аппроксимации.
Возвращает:
Число строк, которые удалось удалить.

Замещает MbPolySurface.

virtual bool MbSplineSurface::ChangeUDegreeApprox ( size_t  newDegree) [virtual]

Изменить порядок nurbs путем перестроения поверхности с помощью функции NurbsSurface.

Аргументы:
[in]newDegree- Новый порядок поверхности по u.
Возвращает:
true, если аппроксимация выполнена успешно.

Замещает MbPolySurface.

virtual bool MbSplineSurface::ChangeVDegreeApprox ( size_t  newDegree) [virtual]

Изменить порядок nurbs путем перестроения поверхности с помощью функции NurbsSurface.

Аргументы:
[in]newDegree- Новый порядок поверхности по v.
Возвращает:
true, если аппроксимация выполнена успешно.

Замещает MbPolySurface.

virtual bool MbSplineSurface::ChangeParametersApprox ( size_t  nUDegree,
size_t  nVDegree,
ptrdiff_t  nUCount,
ptrdiff_t  nVCount 
) [virtual]

Изменить порядок и количество узлов nurbs путем перестроения поверхности с помощью функции NurbsSurface.

Аргументы:
[in]nUDegree- Новый порядок поверхности по u.
[in]nVDegree- Новый порядок поверхности по v.
[in]nUCount- Количество контрольных точек по u.
[in]nVCount- Количество контрольных точек по v.
Возвращает:
true, если аппроксимация выполнена успешно.

Замещает MbPolySurface.

bool MbSplineSurface::ApproxSurfWithoutMultKnots ( )

Перестроить поверхность с помощью функции NurbsSurface без кратных узлов.

Возвращает:
true, если аппроксимация выполнена успешно.
virtual void MbSplineSurface::GetPointsWithVisible ( Array2< MbNurbsPointInfo > &  params) const [virtual]

Вернуть массив узловых точек и их видимость для операции редактирования как сплайна.

Аргументы:
[in,out]params- Матрица контрольных точек с указанием видимости каждой контрольной точки для редактирования.

Замещает MbPolySurface.

void MbSplineSurface::ModifyPointsWithVisible ( const Array2< MbCartPoint3D > &  oldPoints,
Array2< MbCartPoint3D > &  newPoints 
) const

Модифицировать массив узловых точек с учетом перемещения невидимых точек.

Аргументы:
[in]oldPoints- Матрица контрольных точек.
[in,out]newPoints- Матрица контрольных точек после корректирования положения невидимых точек.
bool MbSplineSurface::UnClampedU ( bool  clm)

Преобразовать узловой вектор по u в зажатый, если поверхность замкнута по u и clm = false. Если не замкнута и clm = true - преобразовать узловой вектор в разжатый.

Аргументы:
[in]clm- Зажать или разжать узловой вектор.
bool MbSplineSurface::UnClampedV ( bool  clm)

Преобразовать узловой вектор по v в зажатый, если поверхность замкнута по v и clm = false. Если не замкнута и clm = true - преобразовать узловой вектор в разжатый.

Аргументы:
[in]clm- Зажать или разжать узловой вектор.
void MbSplineSurface::SetBordersTypes ( bool  cuMin,
bool  cuMax,
bool  cvMin,
bool  cvMax 
)

Установить типы границ поверхности. Используется в конвертерах.

Аргументы:
[in]cuMin- Тип поверхности при u - минимальном.
[in]cuMax- Тип поверхности при u - максимальном.
[in]cvMin- Тип поверхности при v - минимальном.
[in]cvMax- Тип поверхности при v - максимальном.
bool MbSplineSurface::CheckPolePoint ( const MbCartPoint3D pnt,
double  absEps,
bool  bSet 
)

Проверить является ли точка полюсной и убрать разрыв в первой производной.

Аргументы:
[in]pnt- Точка, в которой производится проверка.
[in]absEps- Точность.
[in]bSet- Замещать ли контрольные точки, соответствующие полюсу и совпадающие с указанной точностью с точкой pnt, точкой pnt.
MbCurve* MbSplineSurface::IsSplineBorder ( const MbCurve3D curve) const

Создать двумерную кривую, если пространственная кривая является границей поверхности.

Аргументы:
[in]curve- Заданная пространственная кривая.
Возвращает:
Ссылка на двумерную кривую на поверхности или NULL, если построить ее не удалось.
void MbSplineSurface::DirectParallelRects ( const MbVector3D direction,
std::vector< MbRect > &  parallelRects 
) const

Области поверхности, наборы точек в которой параллельны заданному направлению.

Аргументы:
[in]direction- Направление.
[out]collinearRects- Найденные области внутри области определения поверхности.
Предупреждения:
В разработке.

Объявления и описания членов класса находятся в файле:
 Указатель Классы Пространства имен Файлы Функции Переменные Определения типов Перечисления Элементы перечислений Друзья Макросы