C3D Kernel  104065
Открытые члены | Защищенные данные

Множество граней или оболочка. Подробнее...

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

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

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

 MbFaceShell ()
 Конструктор без параметров.
 MbFaceShell (const RPArray< MbFace > &initFaces)
 Конструктор по набору граней.
 MbFaceShell (const c3d::FacesSPtrVector &initFaces)
 Конструктор по набору граней.
 MbFaceShell (const MbFace &face)
 Конструктор по грани.
 MbFaceShell (const MbFaceShell &init)
 Конструктор по граням другой оболочки.
virtual ~MbFaceShell ()
 Деструктор.
virtual MbeTopologyType IsA () const
 Функции оболочки.
MbFaceShellCopy (MbeCopyMode sameShell, MbShellHistory *history=NULL)
 Создать копию.
MbFaceShellDuplicate (MbRegDuplicate *iReg=NULL) const
 Создать копию.
bool IsClosed () const
 Замкнутая ли оболочка?
void SetClosed (bool c)
 Установить (не)замкнутость оболочки.
size_t GetFacesCount () const
 Выдать количество граней.
ptrdiff_t GetFacesMaxIndex () const
 Выдать максимальный индекс грани.
void AddFace (const MbFace &newFace)
 Добавить грань в оболочку.
void AddFaces (const RPArray< MbFace > &newFaces, bool isSilentAdd)
 Добавить грани в оболочку.
void InsertFace (size_t index, const MbFace &newFace)
 Вставить грань перед гранью с заданным индексом.
void ChangeFace (size_t index, const MbFace &newFace)
 Заменить грань с заданным индексом.
void DeleteFace (size_t index)
 Удалить грань с заданным индексом.
void DeleteFace (MbFace *f)
 Удалить грань.
MbFaceDetachFace (size_t index)
 Отсоединить грань от оболочки с заданным индексом.
void DetachFace (const MbFace *f)
 Отсоединить грань.
void DeleteFaces ()
 Удалить все грани оболочки.
void DetachFaces ()
 Отсоединить все грани оболочки.
void ExchangeFaces (size_t i1, size_t i2)
 Поменять местами грани оболочки.
void MakeRight (bool setBounds=false)
 Установить правильную (текущую) информацию в ребрах о соединяемых ими гранях и параметры поверхностей по данным циклов граней (setBounds = true).
bool IsRight () const
 Верно ли установлены указатели в ребрах на соединяемые ими грани.
void SetNullToFace (const MbFace *delFace)
 Обнулить указатели в ребрах на отсутствующую в оболочке грань.
void Transform (const MbMatrix3D &matr, MbRegTransform *iReg=NULL)
 Преобразовать согласно матрице.
void Move (const MbVector3D &to, MbRegTransform *iReg=NULL)
 Сдвинуть вдоль вектора.
void Rotate (const MbAxis3D &axis, double angle, MbRegTransform *iReg=NULL)
 Повернуть вокруг оси.
double DistanceToPoint (const MbCartPoint3D &to) const
 Рассчитать расстояние до точки.
void Reverse ()
 Вывернуть оболочку наизнанку - переориентация всего набора граней.
bool IsSame (const MbFaceShell &faces, double accuracy) const
 Являются ли объекты равными.
void SetLabelThrough (MbeLabelState, void *=NULL) const
 Установить метки всем объектам, имеющим таковые.
void RemovePrivateLabelThrough (void *) const
 Удалить частные метки всем объектам, имеющим таковые.
void SetOwnChangedThrough (MbeChangedType n)
 Установить флаги изменённости объектов.
void ResetFlags (void *=NULL)
 Установить флаги в начальное состояние.
bool UnionWith (MbFaceShell &faces, c3d::FacesSet *sharedSet=NULL)
 Забрать в оболочку множество граней из оболочки faces.
ptrdiff_t SetVerticesLabel (MbeLabelState label, void *=NULL) const
 Установить заданную метку всем вершинам оболочки.
ptrdiff_t SetEdgesLabel (MbeLabelState label, void *=NULL) const
 Установить заданную метку всем рёбрам оболочки.
void GetVertices (RPArray< MbVertex > &) const
 Выдать множество вершин оболочки.
void GetEdges (RPArray< MbCurveEdge > &) const
 Выдать множество ребер оболочки.
template<class Faces >
void GetFaces (Faces &faces) const
 Выдать множество граней оболочки.
template<class Faces >
void GetFacesSet (Faces &faces) const
 Выдать множество граней оболочки.
void GetItems (RPArray< MbVertex > &vertices, RPArray< MbCurveEdge > &edges) const
 Выдать множество вершин и множество ребер оболочки.
void GetItems (RPArray< MbTopologyItem > &list) const
 Выдать множество вершин, множество ребер и множество граней оболочки.
MbVertexGetVertex (size_t index) const
 Выдать вершину по индексу.
MbCurveEdgeGetEdge (size_t index) const
 Выдать ребро по индексу.
MbFaceGetFace (size_t index) const
 Выдать грань по индексу.
MbFace_GetFace (size_t index) const
 Выдать грань по индексу без проверки корректности индекса.
const MbSurfaceGetSurface (size_t index) const
 Выдать поверхность грани по индексу.
size_t GetVertexIndex (const MbVertex &vertex) const
 Выдать индекс вершины.
size_t GetEdgeIndex (const MbCurveEdge &edge) const
 Выдать индекс ребра.
size_t GetFaceIndex (const MbFace &face) const
 Выдать индекс грани.
size_t Find (const MbFace *face) const
 Найти индекс грани в оболочке.
size_t GetShellCount () const
 Определить количество связных поверхностей, описываемых оболочкой.
bool DistanceToBound (const MbCartPoint3D &pnt, double accuracy, MbPntLoc &finFaceData, MbeItemLocation &rShell) const
 Определить расстояния от точки до оболочки.
bool PointClassification (const MbCartPoint3D &pnt, double accuracy, MbCartPoint3D &shellPoint, MbVector3D &shellNormal, MbeItemLocation &rShell) const
 Определить положение точки относительно оболочки.
bool PointClassification (const MbCartPoint3D &pnt, double accuracy, MbCartPoint3D &shellPoint, MbVector3D &shellNormal, MbPntLoc &rShell) const
 Определить положение точки относительно оболочки.
void PointOn (size_t n, double &u, double &v, MbCartPoint3D &p) const
 Вычислить точку оболочки.
void Normal (size_t n, double &u, double &v, MbVector3D &p) const
 Вычислить нормаль оболочки.
void NearPointProjection (const MbCartPoint3D &p, SArray< size_t > &nums, SArray< MbCartPoint > &uv) const
 Найти все проекции точки на оболочку.
bool NearPointProjection (const MbCartPoint3D &p, size_t &faceIndex, double &u, double &v) const
 Найти ближайшую проекцию точки на оболочку.
void DirectPointProjection (const MbCartPoint3D &p, const MbVector3D &vect, SArray< size_t > &nums, SArray< MbCartPoint > &uv) const
 Найти все проекции точки на оболочку вдоль вектора в любом из двух направлений.
bool NearDirectPointProjection (const MbCartPoint3D &p, size_t &faceIndex, const MbVector3D &vect, double &u, double &v, bool onlyPositiveDirection=false) const
 Найти ближайшую проекцию точки на оболочку в направлении вектора.
bool DirectPointProjection (const MbCartPoint3D &p, const MbVector3D &vect) const
 Существует ли проекция в направлении вектора?
void CurveIntersection (const MbCurve3D &curve, SArray< size_t > &nn, SArray< MbCartPoint > &uv, SArray< double > &tt) const
 Пересечение оболочки и кривой.
void AddYourGabaritTo (MbCube &cube) const
 Добавить свой габарит в габаритный куб.
void CalculateGabarit (MbCube &cube) const
 Рассчитать габарит оболочки.
void CalculateLocalGabarit (const MbMatrix3D &matrToLocal, MbCube &cube) const
 Рассчитать габарит в локальной системы координат, заданной матрицей matrToLocal преобразования в неё
void CalculateLocalGabarit (const MbPlacement3D &localPlace, MbCube &cube) const
 Рассчитать габарит в локальной системы координат localPlace.
void CalculateMesh (const MbStepData &stepData, const MbFormNote &note, MbMesh &mesh) const
 Построить полигональную копию оболочки.
void GetProperties (MbProperties &)
 Выдать свойства объекта.
void SetProperties (const MbProperties &)
 Установить свойства объекта.
void SetMainName (SimpleName mainName, bool addOldMainName)
 Установить главное имя и вставить старое в индекс копирования.
void MakeNewNames (SimpleName mainName, SimpleName modifier)
 Установить главное имя и модифицировать имена граней, рёбер и вершин для оболочки-копии для предотвращения совпадения имен нескольких копий.
void MakeNewNames (const MbSNameMaker &, SimpleName modifier)
 Установить главное имя и модифицировать имена граней для оболочки-копии для предотвращения совпадения имен нескольких копий.
void SetShellNames (const MbSNameMaker &names)
 Проименовать грани, рёбра и вершины оболочки.
void SetNamesCopyIndex (SimpleName index)
 Заменить в имени метку копирования на index.
void SetShellNames (const MbFaceShell *s)
 Проименовать грани оболочки именами оболочки s.
void ClearShellNames ()
 Очистить все имена в оболочке.
void ClearEdgesNames (bool clearVerticesNames=true)
 Очистить имена ребер в оболочке.
MbResultType CheckTopology (MbCheckTopologyParams &checkParams)
 Проверка оболочки: вершин (удаление совпадающих и лишних), ребер (со слиянием).
void CheckClosed (bool checkChangedOnly=false)
 Определение замкнутости оболочки с модификацией флага.
bool MakeBoundaryCurve ()
 Найти граничные рёбра и сделать граничными их кривые.
bool GetBoundaryEdges (RPArray< const MbCurveEdge > &) const
 Получить краевые ребра оболочки.
bool GetBoundaryEdges (c3d::ConstEdgesVector &) const
 Получить краевые ребра оболочки.
bool FindFacesIndexByEdges (const RPArray< MbCurveEdge > &init, SArray< MbEdgeFacesIndexes > &indexes) const
 Для множества ребер найти номера ребер и номера ее граней.
bool FindFacesIndexByEdges (const SArray< MbEdgeFunction > &init, RPArray< MbFunction > &functions, SArray< MbEdgeFacesIndexes > &indexes) const
 Для множества структур (ребер и функций изменения радиусов) найти номера ребер и номера ее граней.
bool FindEdgesByFacesIndex (const SArray< MbEdgeFacesIndexes > &indexes, RPArray< MbFunction > *functions, RPArray< MbCurveEdge > &initCurves, RPArray< MbFunction > &initFunctions) const
 Для множества номеров ребер и номеров ее граней найти ребра.
bool FindFacesIndexByEdge (const MbCurveEdge &edge, size_t &ind1, size_t &ind2) const
 Найти номера граней по ребру.
bool FindFacesIndexByFaces (const RPArray< MbFace > &init, SArray< size_t > &ind0) const
 Для множества граней найти множество их номеров.
bool FindIndexByFaces (const RPArray< MbFace > &init, SArray< MbItemIndex > &ind0) const
 Для множества граней найти множество их комбинированных номеров.
bool FindFacesByIndex (const SArray< MbItemIndex > &indexes, RPArray< MbFace > &initFaces) const
 Найти множество граней по множеству комбинированных индексов.
bool FindItemIndexByIndex (const std::vector< c3d::IndicesPair > &indexes, std::vector< std::pair< MbItemIndex, MbItemIndex > > &ind0) const
bool FindIndexByVertices (const RPArray< MbVertex > &init, SArray< MbItemIndex > &indexes) const
 Для множества вершин найти множество их комбинированных номеров.
bool FindVerticesByIndex (const SArray< MbItemIndex > &indexes, RPArray< MbVertex > &init) const
 Найти множество вершин по множеству комбинированных индексов.
bool FindIndexByFace (const MbFace &face, MbItemIndex &ind) const
 Найти комбинированный индекс грани.
MbFaceFindFaceByIndex (MbItemIndex &ind) const
 Найти грань по комбинированному индексу.
void FindEdgesForVertex (const MbVertex &vertex, RPArray< MbCurveEdge > &findEdges) const
 Найти множество ребер с общей заданной вершиной.
void FindFacesForVertex (const MbVertex &vertex, RPArray< MbFace > &findFaces) const
 Найти множество граней с общей заданной вершиной.
bool FindEdgeNumbers (const MbCurveEdge &edge, size_t &faceN, size_t &loopN, size_t &edgeN) const
 Для ребра edge найти индекс грани, индекс цикла и индекс ребра в этом цикле.
MbVertexFindVertexByName (const MbName &) const
 Найти вершину по имени.
MbCurveEdgeFindEdgeByName (const MbName &) const
 Найти ребро по имени.
MbFaceFindFaceByName (const MbName &) const
 Найти грань по имени.
bool MergeSimilarFaces ()
 Объединить подобные грани.
bool IsTemporal () const
 Создан ли временный объект сопровождения?
void RemoveTemporal () const
 Удалить временный объект сопровождения.
bool CreateTemporal (bool keepExisting) const
 Создать новый временный объект сопровождения.
bool UpdateTemporal (bool changedOnly=false) const
bool IsTemporal (size_t k) const
 Создан ли временный объект сопровождения грани?
bool CreateTemporal (size_t k, bool keepExisting) const
 Получить временный объект сопровождения грани.
void RemoveParentNamesAttributes ()
 Удалить атрибуты типа имя с родительскими именами.

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

RPArray< MbFacefaceSet
 Множество граней.
bool closed
 Признак замкнутости указывает на отсутствие края.

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

Оболочка представляет собой составную поверхность, образованную конечным множеством граней MbFace, стыкующихся друг с другом по рёбрам MbCurveEdge.
В общем случае оболочка может быть многосвязной, то есть описывать несколько не связанных между собой поверхностей.
Оболочка называется замкнутой, если она не имеет края, в противном случае оболочка называется незамкнутой.
Замкнутость оболочки указывает на возможность использования множества её внутренних точек в операциях над телами MbSolid. Формально множество граней не ограничено никакими условиями, но реально грани множества удовлетворяют некоторым условиям. Чтобы подчеркнуть эту особенность оболочки, вводится понятие "Однородная оболочка". Оболочки, удовлетворяющие нижеперечисленным требованиям, называются однородными.
1. Оболочки являются конечными.
2. Оболочки не пересекают сами себя.
3. Оболочки являются двусторонними (ориентируемыми).
4. В каждом ребре оболочки стыкуются не более двух граней. Две грани оболочки стыкуются так, что внешняя сторона одной грани переходит во внешнюю сторону другой грани.
5. При любом обходе любой вершины замкнутой оболочки по её поверхности, мы обязательно посетим все примыкающие к данной вершине грани и пересечём все выходящие из неё рёбра.
Так как внешняя сторона грани переходит во внешнюю сторону соседней грани, то однородная оболочка также имеет внешнюю и внутреннюю стороны. Замкнутая однородная оболочка делит трёхмерное пространство на две части, одна из которых находится внутри оболочки. Назовем замкнутую однородную оболочку внешней, если её внешняя сторона направлена вне ограничиваемой оболочкой части пространства.
Назовем замкнутую однородную оболочку внутренней, если её внешняя сторона направлена внутрь ограничиваемой оболочкой части пространства.


Методы

MbFaceShell* MbFaceShell::Copy ( MbeCopyMode  sameShell,
MbShellHistory history = NULL 
)

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

Аргументы:
[in]sameShell- Способ передачи данных при копировании оболочки MbeCopyMode:
sameShell == cm_Same - в качестве копии возвращяетчя исходная оболока (оболочка не копируется, но выставляются правильно указатели в рёбрах на грани справа и грани слева);
sameShell == cm_KeepHistory - копируется часть данных (исходная оболочка и её копия имеют общие базовые поверхности и вершины) и заполняются множества граней объекта history;
sameShell == cm_KeepSurface - копируется часть данных (исходная оболочка и её копия имеют общие базовые поверхности);
sameShell == cm_Copy - обычное копирование (исходная оболочка и её копия не имеет общих данных).
[in]history- История копий граней используется после операции для замены неизменённых копий граней их оригиналами.
Возвращает:
Копия объекта или оригинал(в случае режима копирования cm_Same).
MbFaceShell* MbFaceShell::Duplicate ( MbRegDuplicate iReg = NULL) const

Создать копию оболочки с регистратором.

Возвращает:
Копия объекта.
void MbFaceShell::Transform ( const MbMatrix3D matr,
MbRegTransform iReg = NULL 
)

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

Аргументы:
[in]matr- Матрица преобразования.
[in]iReg- Регистратор объектов.
void MbFaceShell::Move ( const MbVector3D to,
MbRegTransform iReg = NULL 
)

Сдвиг оболочки вдоль вектора. В оболочке одни и те же геометрические объекты, например поверхности, используются как в гранях, так и в рёбрах. Для преобразования каждого геометрического объекта только один раз используется регистратор.

Аргументы:
[in]to- Вектор сдвига.
[in]iReg- Регистратор.
void MbFaceShell::Rotate ( const MbAxis3D axis,
double  angle,
MbRegTransform iReg = NULL 
)

Поворот оболочки вокруг оси. В оболочке одни и те же геометрические объекты, например поверхности, используются как в гранях, так и в рёбрах. Для преобразования каждого геометрического объекта только один раз используется регистратор.

Аргументы:
[in]axis- Ось поворота.
[in]angle- Угол поворота.
[in]iReg- Регистратор.
bool MbFaceShell::DistanceToBound ( const MbCartPoint3D pnt,
double  accuracy,
MbPntLoc finFaceData,
MbeItemLocation rShell 
) const

Определить расстояния от точки до оболочки и положение точки: снаружи оболочки, на оболочке, внутри оболочки.

Аргументы:
[in]pnt- Точка.
[in]accuracy- Заданная точность определения положения.
[out]finFaceData- Информация об окружении проекции точки pnt на ближайшую грань оболочки.
[out]rShell- Результат определения: снаружи оболочки (-1), на оболочке (0), внутри оболочки (+1).
Возвращает:
Удалось ли определить расстояния от точки до оболочки.
bool MbFaceShell::PointClassification ( const MbCartPoint3D pnt,
double  accuracy,
MbCartPoint3D shellPoint,
MbVector3D shellNormal,
MbeItemLocation rShell 
) const

Определить положение точки относительно оболочки: снаружи оболочки, на оболочке, внутри оболочки.

Аргументы:
[in]pnt- Точка.
[in]accuracy- Заданная точность определения положения.
[out]shellPoint- Ближайшая к точке pnt точка оболочки.
[out]shellNormal- Нормаль в ближайшей к точке pnt точке оболочки.
[out]rShell- Результат определения: снаружи оболочки (-1), на оболочке (0), внутри оболочки (+1).
Возвращает:
Удалось ли определить положение точки относительно оболочки.
bool MbFaceShell::PointClassification ( const MbCartPoint3D pnt,
double  accuracy,
MbCartPoint3D shellPoint,
MbVector3D shellNormal,
MbPntLoc rShell 
) const

Определить положение точки относительно оболочки: снаружи оболочки, на оболочке, внутри оболочки.

Аргументы:
[in]pnt- Точка.
[in]accuracy- Заданная точность определения положения.
[out]shellPoint- Ближайшая к точке pnt точка оболочки.
[out]shellNormal- Нормаль в ближайшей к точке pnt точке оболочки.
[out]rShell- Положение точки относительно оболочки.
Возвращает:
Удалось ли определить положение точки относительно оболочки.
void MbFaceShell::PointOn ( size_t  n,
double &  u,
double &  v,
MbCartPoint3D p 
) const

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

Аргументы:
[in]n- Индекс грани оболочки.
[in]u- Первый параметр поверхности грани.
[in]v- Второй параметр поверхности грани.
[out]p- Вычисленная точка оболочки.
void MbFaceShell::Normal ( size_t  n,
double &  u,
double &  v,
MbVector3D p 
) const

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

Аргументы:
[in]n- Индекс грани оболочки.
[in]u- Первый параметр поверхности грани.
[in]v- Второй параметр поверхности грани.
[out]p- Вычисленная нормаль оболочки.
void MbFaceShell::NearPointProjection ( const MbCartPoint3D p,
SArray< size_t > &  nums,
SArray< MbCartPoint > &  uv 
) const

Найти все проекции точки на все грани оболочки.

Аргументы:
[in]p- Проецируемая точка.
[out]nums- Массив номера граней в оболочки, синхронный с массивом параметров проекций.
[out]uv- Массив параметров проекций.
bool MbFaceShell::NearPointProjection ( const MbCartPoint3D p,
size_t &  faceIndex,
double &  u,
double &  v 
) const

Найти номер грани и параметры её поверхности для ближайшей проекции точки на оболочку.

Аргументы:
[in]p- Проецируемая точка.
[out]faceIndex- Номер грани в оболочке для ближайшей проекции.
[out]u- Первый параметр поверхности грани проекций для ближайшей проекции точки на оболочку.
[out]v- Второй параметр поверхности грани проекций для ближайшей проекции точки на оболочку.
Возвращает:
Удалось ли определить положение точки.
void MbFaceShell::DirectPointProjection ( const MbCartPoint3D p,
const MbVector3D vect,
SArray< size_t > &  nums,
SArray< MbCartPoint > &  uv 
) const

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

Аргументы:
[in]p- Проецируемая точка.
[in]vect- Вектор направления проецирования.
[out]nums- Массив номера граней в оболочки, синхронный с массивом параметров проекций.
[out]uv- Массив параметров проекций.
bool MbFaceShell::NearDirectPointProjection ( const MbCartPoint3D p,
size_t &  faceIndex,
const MbVector3D vect,
double &  u,
double &  v,
bool  onlyPositiveDirection = false 
) const

Найти номер грани и параметры её поверхности для ближайшей проекции точки на оболочку в направлении вектора.

Аргументы:
[in]p- Проецируемая точка.
[out]faceIndex- Номер грани в оболочке для ближайшей проекции.
[in]vect- Вектор направления проецирования.
[out]u- Первый параметр поверхности грани проекций для ближайшей проекции точки на оболочку в направлении вектора.
[out]v- Второй параметр поверхности грани проекций для ближайшей проекции точки на оболочку в направлении вектора.
[in]onlyPositiveDirection- Искать только в положительном направлении вектора vect от точки p.
Возвращает:
Удалось ли определить положение точки.
bool MbFaceShell::DirectPointProjection ( const MbCartPoint3D p,
const MbVector3D vect 
) const

Определить, существует ли хотя бы одна проекция точки на оболочку в направлении вектора.

Аргументы:
[in]p- Проецируемая точка.
[in]vect- Вектор, задающий направление проецирования.
Возвращает:
true, если нашлась хотя бы одна проекция.
void MbFaceShell::CalculateMesh ( const MbStepData stepData,
const MbFormNote note,
MbMesh mesh 
) const

Построить полигональную копию оболочки заполнить ею полигональный объект (сетку) mesh.

Заметки:
В многопоточном режиме m_Items выполняется параллельно.
Аргументы:
[in]stepData- Данные для вычисления шага при триангуляции.
[in]note- Способ построения полигонального объекта.
[out]mesh- Заполняемый полигональный объект.
MbResultType MbFaceShell::CheckTopology ( MbCheckTopologyParams checkParams)

Проверка оболочки: вершин (удаление совпадающих и лишних), ребер (со слиянием).

Аргументы:
[in]checkParams- Параметры функции.
bool MbFaceShell::UpdateTemporal ( bool  changedOnly = false) const

Обновить временный объект сопровождения грани. changedOnly = true использовать только при не измененной оболочке (после резки ребер), не обновляется дерево габаритов.


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