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

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

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

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

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

 VISITING_CLASS (MbPolySurface)
Общие функции геометрического объекта
virtual MbeSpaceType IsA () const =0
 Получить тип объекта.
virtual MbeSpaceType Type () const
 Получить групповой тип объекта.
virtual MbSpaceItemDuplicate (MbRegDuplicate *=NULL) const =0
 Создать копию объекта.
virtual bool IsSame (const MbSpaceItem &other, double accuracy=LENGTH_EPSILON) const =0
 Определить, являются ли объекты равными.
virtual bool SetEqual (const MbSpaceItem &)=0
 Сделать объекты равным, если они подобны.
virtual void Transform (const MbMatrix3D &, MbRegTransform *=NULL)
 Преобразовать объект согласно матрице.
virtual void Move (const MbVector3D &, MbRegTransform *=NULL)
 Сдвинуть объект вдоль вектора.
virtual void Rotate (const MbAxis3D &, double angle, MbRegTransform *=NULL)
 Повернуть объект вокруг оси на заданный угол.
virtual void GetProperties (MbProperties &)=0
 Выдать свойства объекта.
virtual void SetProperties (const MbProperties &)=0
 Изменить свойства объекта.
virtual void GetBasisPoints (MbControlData3D &) const =0
 Выдать контрольные точки объекта.
virtual void SetBasisPoints (const MbControlData3D &)=0
 Изменить объект по контрольным точкам.
Функции описания области определения поверхности
virtual double GetUMin () const =0
 Вернуть минимальное значение параметра u.
virtual double GetVMin () const =0
 Вернуть минимальное значение параметра v.
virtual double GetUMax () const =0
 Вернуть максимальное значение параметра u.
virtual double GetVMax () const =0
 Вернуть максимальное значение параметра v.
virtual bool IsUClosed () const
 Определить, замкнута ли поверхность по параметру u.
virtual bool IsVClosed () const
 Определить, замкнута ли поверхность по параметру v.
Функции для работы в области определения поверхности

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

virtual void PointOn (double &u, double &v, MbCartPoint3D &) const =0
 Вычислить точку на поверхности.
virtual void DeriveU (double &u, double &v, MbVector3D &) const =0
 Вычислить первую производную по u.
virtual void DeriveV (double &u, double &v, MbVector3D &) const =0
 Вычислить первую производную по v.
virtual void DeriveUU (double &u, double &v, MbVector3D &) const =0
 Вычислить вторую производную по u.
virtual void DeriveVV (double &u, double &v, MbVector3D &) const =0
 Вычислить вторую производную по v.
virtual void DeriveUV (double &u, double &v, MbVector3D &) const =0
 Вычислить вторую производную.
virtual void DeriveUUU (double &u, double &v, MbVector3D &) const =0
 Вычислить третью производную.
virtual void DeriveUUV (double &u, double &v, MbVector3D &) const =0
 Вычислить третью производную.
virtual void DeriveUVV (double &u, double &v, MbVector3D &) const =0
 Вычислить третью производную.
virtual void DeriveVVV (double &u, double &v, MbVector3D &) const =0
 Вычислить третью производную.
Функции доступа к группе данных для работы внутри и вне области определения параметров поверхности.
virtual void Explore (double &u, double &v, bool ext, MbCartPoint3D &pnt, MbVector3D &uDer, MbVector3D &vDer, MbVector3D *uuDer, MbVector3D *vvDer, MbVector3D *uvDer, MbVector3D *nor) const =0
 Вычислить значения точки и производных для заданных параметров.
Общие функции поверхности
virtual void SetUClosed (bool cls)
 Установить признак замкнутости по U.
virtual void SetVClosed (bool cls)
 Установить признак замкнутости по V.
virtual void Rebuild ()=0
 Перестроить поверхность.
size_t GetPointsLines () const
 Вернуть количество строк в матрице точек.
size_t GetPointsColumns () const
 Вернуть количество столбцов в матрице точек.
void GetPoint (size_t i, size_t j, MbCartPoint3D &pnt) const
 Выдать точку, расположенную в i строке, j колонке.
void MovePoint (size_t i, size_t j, const MbVector3D &v)
 Сдвинуть точку, расположенную в i строке, j колонке на заданный вектор.
size_t GetPointsUCount () const
 Получить количество колонок.
size_t GetPointsVCount () const
 Получить количество строк.
bool GetPoints (Array2< MbCartPoint3D > &pnts) const
 Заполнить матрицу точек.
void GetLineSegments (RPArray< MbCurve3D > &segments) const
 Выдать массив отрезков.

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

 MbPolySurface ()
 Пустой конструктор.
 MbPolySurface (Array2< MbCartPoint3D > &vert, bool ucl, bool vcl)
 Конструктор поверхности.
 MbPolySurface (size_t nu, size_t nv, const SArray< MbCartPoint3D > &vert, bool ucl, bool vcl)
 Конструктор поверхности.
 MbPolySurface (const MbPolySurface &)
 Конструктор копирования.

Защищенные данные

Array2< MbCartPoint3Dpoints
 Матрица контрольных точек.
bool uclosed
 Признак замкнутости по первому параметру u.
bool vclosed
 Признак замкнутости по второму параметру v.
size_t ucount
 Количество колонок.
size_t vcount
 Количество строк.

Функции, предоставляющие интерфейс поверхности для сплайновой формы.

virtual void GetKnots (bool isU, SArray< double > &knots) const =0
 Получить узловой вектор по выбранному параметру.
virtual void GetWeights (Array2< double > &wts) const =0
 Получить матрицу весов вершин.
virtual void GetPointsWithVisible (Array2< MbNurbsPointInfo > &params) const =0
 Вернуть массив узловых точек и их видимость для операции редактирования как сплайна.
virtual void CalculateUVParameters (Array2< MbCartPoint > &params) const =0
 Вычисление точек на поверхности, соответствующих узлам.
virtual bool CalculateUVParameterForKnot (size_t uIndex, size_t vIndex, MbCartPoint &point) const =0
 Вычисление точки на поверхности, соответствующей контрольной точке.
virtual size_t RemoveUKnots (ptrdiff_t &rowId, ptrdiff_t num=1, double absEps=Math::lengthEpsilon)=0
 Удаление столбца контрольных точек без изменения поверхности.
virtual size_t RemoveVKnots (ptrdiff_t &rowId, ptrdiff_t num=1, double absEps=Math::lengthEpsilon)=0
 Удаление строки контрольных точек без изменения поверхности.
virtual void InsertUKnotsInRegion (ptrdiff_t idBegin, ptrdiff_t num=1)=0
 Вставка ряда после ряда с номером idBegin без изменения поверхности по u.
virtual void InsertVKnotsInRegion (ptrdiff_t idBegin, ptrdiff_t num=1)=0
 Вставка ряда после ряда с номером idBegin без изменения поверхности по v.
virtual bool ChangeUDegreeApprox (size_t newDegree)=0
 Изменить порядок nurbs путем перестроения поверхности с помощью функции NurbsSurface.
virtual bool ChangeVDegreeApprox (size_t newDegree)=0
 Изменить порядок nurbs путем перестроения поверхности с помощью функции NurbsSurface.
virtual bool ChangeParametersApprox (size_t nUDegree, size_t nVDegree, ptrdiff_t nUCount, ptrdiff_t nVCount)=0
 Изменить порядок и количество узлов nurbs путем перестроения поверхности с помощью функции NurbsSurface.
virtual bool CalculateFixedPoints (const RPArray< const MbSurfaceIntersectionCurve > &curves, Array2< bool > &fixedPoints) const =0
 Вычисление фиксированных контрольных точек.
virtual bool CalculatePartsForSpecMove (const Array2< bool > &movedPoints, size_t uIndex, size_t vIndex, const MbVector3D &moveVector, MbeDirectSmoothType smoothType, double smoothDegree, Array2< double > &partsPoints) const =0
 Вычисление доли смещения узлов при перемещении со сглаживанием.

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

Поверхность, заданная прямоугольной матрицей контрольных точек размерности vcount ucount, является родительским классом NURBS поверхности MbSplineSurface.


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

MbPolySurface::MbPolySurface ( Array2< MbCartPoint3D > &  vert,
bool  ucl,
bool  vcl 
) [protected]

Конструктор поверхности по матрице точек и замкнутости по u и v.

Аргументы:
[in]vert- Матрица точек.
[in]ucl- Замкнута ли поверхность по параметру u.
[in]vcl- Замкнута ли поверхность по параметру v.
MbPolySurface::MbPolySurface ( size_t  nu,
size_t  nv,
const SArray< MbCartPoint3D > &  vert,
bool  ucl,
bool  vcl 
) [protected]

Конструктор поверхности по массиву точек и замкнутости по u и v. Формирует матрицу точек по заданному массиву. Заполняет сначала первую колонку сверх вниз, затем вторую и т.д. В массиве должно быть nu*nv элементов.

Аргументы:
[in]nu- Число колонок в матрице точек.
[in]nv- Число колонок в матрице точек.
[in]vert- Множество точек.
[in]ucl- Замкнута ли поверхность по параметру u.
[in]vcl- Замкнута ли поверхность по параметру v.

Методы

virtual MbSpaceItem& MbPolySurface::Duplicate ( MbRegDuplicate iReg = NULL) const [pure virtual]

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

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

Замещает MbSurface.

Замещается в MbSplineSurface.

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

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

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

Замещает MbSurface.

Замещается в MbSplineSurface.

virtual bool MbPolySurface::SetEqual ( const MbSpaceItem item) [pure virtual]

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

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

Замещает MbSurface.

Замещается в MbSplineSurface.

virtual void MbPolySurface::Transform ( const MbMatrix3D matr,
MbRegTransform iReg = NULL 
) [virtual]

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

Аргументы:
[in]matr- Матрица преобразования.
[in]iReg- Регистратор.

Замещает MbSurface.

virtual void MbPolySurface::Move ( const MbVector3D to,
MbRegTransform iReg = NULL 
) [virtual]

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

Аргументы:
[in]to- Вектор сдвига.
[in]iReg- Регистратор.

Замещает MbSurface.

virtual void MbPolySurface::Rotate ( const MbAxis3D axis,
double  angle,
MbRegTransform iReg = NULL 
) [virtual]

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

Аргументы:
[in]axis- Ось поворота.
[in]angle- Угол поворота.
[in]iReg- Регистратор.

Замещает MbSurface.

virtual void MbPolySurface::GetProperties ( MbProperties properties) [pure virtual]

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

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

Замещает MbSurface.

Замещается в MbSplineSurface.

virtual void MbPolySurface::SetProperties ( const MbProperties properties) [pure virtual]

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

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

Замещает MbSurface.

Замещается в MbSplineSurface.

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

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

Замещает MbSurface.

Переопределяется в MbSplineSurface.

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

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

Замещает MbSurface.

Переопределяется в MbSplineSurface.

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

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

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

Замещает MbSurface.

Замещается в MbSplineSurface.

virtual void MbPolySurface::Explore ( double &  u,
double &  v,
bool  ext,
MbCartPoint3D pnt,
MbVector3D uDer,
MbVector3D vDer,
MbVector3D uuDer,
MbVector3D vvDer,
MbVector3D uvDer,
MbVector3D nor 
) const [pure 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, если не ноль.

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

Замещается в MbSplineSurface.

void MbPolySurface::GetPoint ( size_t  i,
size_t  j,
MbCartPoint3D pnt 
) const [inline]

Выдать точку, расположенную в i строке, j колонке.

Аргументы:
[in]i- Строка.
[in]j- Колонка.
[in,out]pnt- Запрашиваемая точка.
void MbPolySurface::MovePoint ( size_t  i,
size_t  j,
const MbVector3D v 
) [inline]

Сдвинуть точку, расположенную в i строке, j колонке на заданный вектор.

Аргументы:
[in]i- Строка.
[in]j- Колонка.
[in]v- Вектор перемещения точки.
bool MbPolySurface::GetPoints ( Array2< MbCartPoint3D > &  pnts) const [inline]

Заполнить матрицу точек.

Аргументы:
[in]pnts- Матрица точек.
void MbPolySurface::GetLineSegments ( RPArray< MbCurve3D > &  segments) const

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

Аргументы:
[in]segments- Множество для хранения отрезков.
virtual void MbPolySurface::GetKnots ( bool  isU,
SArray< double > &  knots 
) const [pure virtual]

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

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

Замещается в MbSplineSurface.

virtual void MbPolySurface::GetWeights ( Array2< double > &  wts) const [pure virtual]

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

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

Замещается в MbSplineSurface.

virtual void MbPolySurface::GetPointsWithVisible ( Array2< MbNurbsPointInfo > &  params) const [pure virtual]

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

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

Замещается в MbSplineSurface.

virtual void MbPolySurface::CalculateUVParameters ( Array2< MbCartPoint > &  params) const [pure virtual]

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

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

Замещается в MbSplineSurface.

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

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

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

Замещается в MbSplineSurface.

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

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

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

Замещается в MbSplineSurface.

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

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

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

Замещается в MbSplineSurface.

virtual void MbPolySurface::InsertUKnotsInRegion ( ptrdiff_t  idBegin,
ptrdiff_t  num = 1 
) [pure virtual]

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

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

Замещается в MbSplineSurface.

virtual void MbPolySurface::InsertVKnotsInRegion ( ptrdiff_t  idBegin,
ptrdiff_t  num = 1 
) [pure virtual]

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

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

Замещается в MbSplineSurface.

virtual bool MbPolySurface::ChangeUDegreeApprox ( size_t  newDegree) [pure virtual]

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

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

Замещается в MbSplineSurface.

virtual bool MbPolySurface::ChangeVDegreeApprox ( size_t  newDegree) [pure virtual]

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

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

Замещается в MbSplineSurface.

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

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

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

Замещается в MbSplineSurface.

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

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

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

Замещается в MbSplineSurface.

virtual bool MbPolySurface::CalculatePartsForSpecMove ( const Array2< bool > &  movedPoints,
size_t  uIndex,
size_t  vIndex,
const MbVector3D moveVector,
MbeDirectSmoothType  smoothType,
double  smoothDegree,
Array2< double > &  partsPoints 
) const [pure 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, если вычисления проведены успешно.

Замещается в MbSplineSurface.


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