C3D Kernel  104065
Открытые типы | Открытые члены | Защищенные данные | Друзья

Твердое тело. Подробнее...

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

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

Открытые типы

enum  MultiState { ms_Undefined = 0, ms_Single, ms_Multiple }
 Тип связности тела. Подробнее...

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

 MbSolid (MbFaceShell *shell, MbCreator *creator)
 Конструктор по оболочке и строителю.
 MbSolid (MbFaceShell &shell, MbCreator &creator)
 Конструктор по оболочке и строителю.
 MbSolid (MbFaceShell &shell, RPArray< MbCreator > &creators, bool sameCreators, MbRegDuplicate *iReg)
 Конструктор по оболочке и набору строителей, флагу копирования строителей и регистратору дублирования объектов.
 MbSolid (MbFaceShell &shell, std::vector< SPtr< MbCreator > > &creators, bool sameCreators, MbRegDuplicate *iReg)
 Конструктор по оболочке и набору строителей, флагу копирования строителей и регистратору дублирования объектов.
 MbSolid (MbFaceShell &shell, const MbSolid &solid, MbCreator &creator)
 Конструктор по оболочке, телу, у которого берутся строители, и строителю.
 MbSolid (MbFaceShell &shell, const MbSolid &solid, MbCreator *creator)
 Конструктор по оболочке, телу, у которого берутся строители, и строителю.
virtual ~MbSolid ()
 Деструктор.
 VISITING_CLASS (MbSolid)
virtual MbeSpaceType IsA () const
 Получить тип объекта.
virtual MbSpaceItemDuplicate (MbRegDuplicate *iReg=NULL) const
 Создать копию объекта.
virtual void Transform (const MbMatrix3D &, MbRegTransform *iReg=NULL)
 Преобразовать объект согласно матрице.
virtual void Move (const MbVector3D &, MbRegTransform *iReg=NULL)
 Сдвинуть объект вдоль вектора.
virtual void Rotate (const MbAxis3D &, double angle, MbRegTransform *iReg=NULL)
 Повернуть объект вокруг оси на заданный угол.
virtual bool IsSame (const MbSpaceItem &other, double accuracy=LENGTH_EPSILON) const
 Определить, являются ли объекты равными.
virtual bool IsSimilar (const MbSpaceItem &init) const
 Определить, являются ли объекты подобными.
virtual bool SetEqual (const MbSpaceItem &init)
 Сделать объекты равным, если они подобны.
virtual double DistanceToPoint (const MbCartPoint3D &) const
 Определить расстояние до точки.
virtual void AddYourGabaritTo (MbCube &) const
 Расширить присланный габаритный куб так, чтобы он включал в себя данный объект.
virtual void Refresh ()
 Перевести все временные (mutable) данные объекта в неопределённое (исходное) состояние.
virtual void CalculateWire (const MbStepData &stepData, MbMesh &mesh) const
 Создать полигональную копию.
virtual MbPropertyCreateProperty (MbePrompt n) const
 Создать собственное свойство с заданием его имени.
virtual void GetProperties (MbProperties &properties)
 Выдать свойства атрибутов.
virtual void SetProperties (const MbProperties &properties)
 Установить свойства атрибутов.
virtual void GetBasisItems (RPArray< MbSpaceItem > &s)
 Выдать базовые объекты в присланный контейнер.
virtual void GetBasisPoints (MbControlData3D &) const
 Выдать контрольные точки объекта.
virtual void SetBasisPoints (const MbControlData3D &)
 Изменить объект по контрольным точкам.
virtual bool RebuildItem (MbeCopyMode copyMode, RPArray< MbSpaceItem > *items, IProgressIndicator *progInd)
 Перестроить объект по журналу построения.
virtual bool FinishItem ()
virtual MbItemCreateMesh (const MbStepData &stepData, const MbFormNote &note, MbRegDuplicate *iReg) const
 Создать полигональный объект.
Функции тела.
virtual void CalculateGabarit (MbCube &cube) const
 Рассчитать габарит.
const MbCube GetCube () const
 Получить габарит.
virtual bool GetCreators (RPArray< MbCreator > &creators) const
 Добавить свои строители в присланный массив.
void CalculateGrid (const MbStepData &stepData, MbMesh &mesh) const
 Построить полигональную копию тела и положить её данные в присланный объект.
void SetShell (MbFaceShell *shell)
 Заменить оболочку тела на присланную.
MbFaceShellDetachShell ()
 Отцепить оболочку.
MbFaceShellGetShell () const
 Выдать оболочку.
bool IsShellBuild () const
 Имеется ли оболочка?
void MakeRight ()
 Переустановить в ребрах указатели на соединяемые ими грани.
bool IsRight () const
 Верно ли установлены в ребра указатели на соединяемые ими грани?
size_t GetFacesCount () const
 Выдать количество граней.
void GetVertices (RPArray< MbVertex > &) const
 Заполнить контейнер вершинами тела.
void GetEdges (RPArray< MbCurveEdge > &) const
 Заполнить контейнер ориентированными ребрами тела.
void GetItems (RPArray< MbVertex > &, RPArray< MbCurveEdge > &) const
 Заполнить контейнеры вершинами и ребрами тела.
template<class Faces >
void GetFaces (Faces &faces) const
 Заполнить контейнер гранями тела.
template<class Faces >
void GetFacesSet (Faces &faces) const
 Заполнить контейнер гранями тела.
void GetItems (RPArray< MbTopologyItem > &) const
 Заполнить контейнер вершинами, ребрами и гранями тела.
MbVertexGetVertex (size_t index) const
 Выдать вершину по её номеру.
MbCurveEdgeGetEdge (size_t index) const
 Выдать ребро по его номеру.
MbFaceGetFace (size_t index) const
 Выдать грань по её номеру.
size_t GetVertexIndex (const MbVertex &) const
 Выдать номер вершины.
size_t GetEdgeIndex (const MbCurveEdge &) const
 Выдать номер ребра.
size_t GetFaceIndex (const MbFace &) const
 Выдать номер грани.
size_t GetShellCount () const
 Выдать количество связных оболочек тела.
MbeItemLocation PointClassification (const MbCartPoint3D &p, double epsilon=Math::metricRegion) const
 Классифицировать точку.
MbeItemLocation SolidClassification (const MbSolid &solid, double epsilon=Math::metricRegion) const
 Классифицировать тело.
bool FindFacesIndexByFaces (RPArray< MbFace > &faces, SArray< size_t > &indices) const
 Найти номера граней.
bool FindFacesIndexByEdges (RPArray< MbCurveEdge > &edges, SArray< MbEdgeFacesIndexes > &indices) const
 Найти номера ребер и соединяемых ими граней.
MbVertexFindNearestVertex (const MbCartPoint3D &p) 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
 Найти для ребра его номер грани, номер цикла и номер ребра в цикле.
MbVertexFindVertexByName (const MbName &) const
 Найти вершину по имени.
MbCurveEdgeFindEdgeByName (const MbName &) const
 Найти ребро по имени.
MbFaceFindFaceByName (const MbName &) const
 Найти грань по имени.
MbSNameMaker GetYourName () const
 Создать именователь тела.
void SetOwnChangedThrough (MbeChangedType)
 Установить заданный флаг измененности для всех граней, рёбер и вершин.
bool IsClosed () const
 Замкнуто ли тело (не имеет края)?
bool IsMultiSolid () const
 Является ли тело многочастным?
bool SetMultiSolidState (bool ms, bool setDirectly=false) const
 Установить флаг многочастности с минимальной проверкой.
void ResetMultiSolidState () const
 Сбросить флаг многочастности в неопределённое состояние.
MultiState GetMultiSolidState () const
 Получить фактическое состояние флага многочастности.
virtual void CalculateLocalGabarit (const MbMatrix3D &into, MbCube &cube) const
 Рассчитать габарит относительно локальной системы координат, заданной матрицей преобразования в неё.
void CalculateLocalGabarit (const MbPlacement3D &localPlace, MbCube &cube) const
 Рассчитать габарит относительно локальной системы координат.
void BreakToBasisItem (size_t c, RPArray< MbSpaceItem > &s)
 Выдать базовые объекты журнала построения.
void Math3DSelectSolid () const
 Присвоить свой указатель глобальной переменной Math::selectSolid = this (для отладки).

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

MbFaceShellouter
 Оболочка тела.
MultiState multiState
 Тип связности тела.

Друзья

MbResultType MakeIngot (RPArray< MbItem > &, bool, const MbSNameMaker &, MbSolid *&)

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

Твердое тело, или тело, является объектом геометрической модели. Тело состоит из множества граней MbFaceShell.
Структура данных тела содержит указатель на набор граней outer и тип связности тела multiState. Тело может описывать одно или несколько связных множеств точек. Тип связности multiState сообщает о том, что тело описывает одно связное множество точек, или, что тело описывает несколько связных множеств точек и может быть разбито на несколько тел.
Набор граней тела outer->faceSet описывает одну или несколько однородных оболочек. В зависимости от признака outer->closed замкнутости оболочек тело может описывать два принципиально разных множества точек.
Если все оболочки тела замкнутые, то тело описывает множество точек, располагающихся с внутренней стороны одной внешней и нескольких внутренних оболочек, расположенных внутри внешней оболочки, в совокупности с точками этих оболочек.
Если оболочки тела незамкнутые, то тело описывает множество точек, принадлежащих граням этих оболочек.
В зависимости от замкнутости оболочек тело будем называть замкнутым или незамкнутым. В частном случае, когда все оболочки являются замкнутыми, получим замкнутое тело. В общем случае оболочки тела могут быть незамкнутыми, тогда получим незамкнутое тело.
Замкнутое тело и незамкнутое тело оперируют разными множествами точек и это различие влияет на булевы и другие операции с телами.
Над телами можно выполнять определённый набор действий. Эти действия записываются в журнал построения тела, элементами которого являются строители оболочек MbCreator.
Тело может иметь атрибуты MbAttribute.


Перечисления

Тело может состоять из одного или нескольких связных множеств точек.

Элементы перечислений:
ms_Undefined 

Связность тела не определена.

ms_Single 

Тело описывает одно связное множество точек.

ms_Multiple 

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


Методы

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

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

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

Замещает MbItem.

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

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

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

Замещает MbItem.

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

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

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

Замещает MbItem.

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

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

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

Замещает MbItem.

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

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

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

Замещает MbItem.

virtual bool MbSolid::IsSimilar ( const MbSpaceItem item) const [virtual]

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

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

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

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

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

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

Замещает MbItem.

virtual double MbSolid::DistanceToPoint ( const MbCartPoint3D point) const [virtual]

Определить расстояние до точки.

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

Замещает MbItem.

virtual void MbSolid::AddYourGabaritTo ( MbCube cube) const [virtual]

Расширить присланный габаритный куб так, чтобы он включал в себя данный объект.

Аргументы:
[in,out]cube- Принимающий габаритный куб с информацией по габаритам.

Замещает MbItem.

virtual void MbSolid::CalculateWire ( const MbStepData stepData,
MbMesh mesh 
) const [virtual]

Создать полигональную копию данного объекта, представленную полигонами. Полигональный объект будет содержать только полигоны MbPolygon3D.

Аргументы:
[in]sag- Максимальное отклонение полигонального объекта от оригинала по прогибу.
[in,out]mesh- Принимающий полигональный объект.

Замещает MbItem.

virtual bool MbSolid::RebuildItem ( MbeCopyMode  sameShell,
RPArray< MbSpaceItem > *  items,
IProgressIndicator progInd 
) [virtual]

Создать заново объект по журналу построения.

Аргументы:
[in]sameShell- Полнота копирования элементов.
[out]items- Контейнер для складывания элементов невыполненных построений (может быть NULL).
Возвращает:
Перестроен ли объект.

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

virtual MbItem* MbSolid::CreateMesh ( const MbStepData stepData,
const MbFormNote note,
MbRegDuplicate iReg 
) const [virtual]

Создать полигональный объект - упрощенную копию данного объекта.

Аргументы:
[in]stepData- Данные для вычисления шага при триангуляции.
[in]note- Способ построения полигонального объекта.
Возвращает:
Построенный полигональный объект.

Замещает MbItem.

virtual void MbSolid::CalculateGabarit ( MbCube cube) const [virtual]

Рассчитать габарит тела.

Аргументы:
[out]cube- Рассчитанный габарит.
const MbCube MbSolid::GetCube ( ) const

Получить габарит тела.

Возвращает:
Габарит.
virtual bool MbSolid::GetCreators ( RPArray< MbCreator > &  creators) const [virtual]

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

Аргументы:
[out]creators- Контейнер для добавления своих строителей.
Возвращает:
Добавлены ли строители.

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

void MbSolid::CalculateGrid ( const MbStepData stepData,
MbMesh mesh 
) const

Полигональная копия тела строится только путём триангуляции граней.

Аргументы:
[in]stepData- Данные для вычисления шага при триангуляции.
[out]mesh- Полигональная копия объекта.
MbeItemLocation MbSolid::PointClassification ( const MbCartPoint3D p,
double  epsilon = Math::metricRegion 
) const

Классификация заключается в определении положения точки относительно тела.

Аргументы:
[in]p- Классифицируемая точка.
[in]epsilon- Точность классификации.
Возвращает:
iloc_InItem (+1) - Точка лежит внутри тела.
iloc_OutOfItem (-1) - Точка лежит вне тела.
iloc_OnItem ( 0) - Точка лежит на поверхности тела.
MbeItemLocation MbSolid::SolidClassification ( const MbSolid solid,
double  epsilon = Math::metricRegion 
) const

Классификация заключается в определении положения присланного тела относительно данного тела.

Аргументы:
[in]solid- Классифицируемое тело.
[in]epsilon- Точность классификации.
Возвращает:
iloc_OutOfItem (-1) - Классифицируемое тело лежит вне данного тела.
iloc_OnItem ( 0) - Классифицируемое тело пересекает данного тело.
iloc_InItem (+1) - Классифицируемое тело лежит внутри данного тела.
iloc_ByItem (+2) - Данное тело лежит внутри классифицируемого тела.
iloc_Undefined (-3) - Классификация не выполнялась.
bool MbSolid::FindFacesIndexByFaces ( RPArray< MbFace > &  faces,
SArray< size_t > &  indices 
) const

Найти номера граней и заполнить второй контейнер в соответствии с первым.

Аргументы:
[in]faces- Множество граней.
[out]indices- Найденное множество номеров этих граней в теле.
Возвращает:
Найдены ли все номера?
bool MbSolid::FindFacesIndexByEdges ( RPArray< MbCurveEdge > &  edges,
SArray< MbEdgeFacesIndexes > &  indices 
) const

Найти номера ребер и заполнить второй контейнер в соответствии с первым.

Аргументы:
[in]edges- Множество ребер.
[out]indices- Найденное множество комбинированных номеров ребер и соединяемых ими граней.
Возвращает:
Найдены ли номера?
void MbSolid::FindEdgesForVertex ( const MbVertex vertex,
RPArray< MbCurveEdge > &  findEdges 
) const

Найти ребра тела, для которых данная вершина является начальной или конечной.

Аргументы:
[in]vertex- Вершина.
[out]findEdges- Стыкующиеся в вершине рёбра.
void MbSolid::FindFacesForVertex ( const MbVertex vertex,
RPArray< MbFace > &  findFaces 
) const

Найти грани тела, для ребер которых данная вершина является конечной.

Аргументы:
[in]vertex- Вершина.
[out]findFaces- Стыкующиеся в вершине грани.
bool MbSolid::FindEdgeNumbers ( const MbCurveEdge edge,
size_t &  faceN,
size_t &  loopN,
size_t &  edgeN 
) const

Для ребра найти номер грани, номер цикла и номер ребра в цикле. Если номера не найдены, то номера сохраняют исходные значения.

Аргументы:
[in]edge- Ребро.
[out]faceN- Найденный номер грани.
[out]loopN- Найденный номер цикла грани.
[out]edgeN- Найденный номер ребра в цикле.
Возвращает:
Найдены ли номера?
bool MbSolid::SetMultiSolidState ( bool  ms,
bool  setDirectly = false 
) const

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

Аргументы:
[in]ms- При ms == true полагается, что тело является многочастностным.
[in]setDirectly- Установить без каких-либо проверок.
Возвращает:
Установлен ли флаг?

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