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

Грань. Подробнее...

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

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

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

 MbFace (const MbSurface &, bool sense)
 Конструктор по поверхности и ориентации нормали грани относительно нормали поверхности.
 MbFace (MbLoop &bnd, const MbSurface &surf, bool sense)
 Конструктор по циклу, поверхности и ориентации нормали грани относительно нормали поверхности.
 MbFace (MbLoop &bnd0, MbLoop &bnd1, const MbSurface &surf, bool sense)
 Конструктор по циклам, поверхности и ориентации нормали грани относительно нормали поверхности.
 MbFace (RPArray< MbLoop > &bnds, const MbSurface &surf, bool sense)
 Конструктор по циклам, поверхности и ориентации нормали грани относительно нормали поверхности.
 MbFace (const MbFace &other, const MbSurface &newSurface, bool surfaceSense)
 Конструктор по другой грани, новой поверхности и ориентации нормали грани относительно нормали этой поверхности.
virtual ~MbFace ()
 Деструктор.
 VISITING_CLASS (MbFace)
virtual MbeTopologyType IsA () const
 Тип элемента.
virtual MbFaceDataDuplicate (MbRegDuplicate *=NULL) const
 Создать новую грань копированием всех данных исходной грани.
virtual void Transform (const MbMatrix3D &, MbRegTransform *=NULL)
 Преобразовать согласно матрице.
virtual void Move (const MbVector3D &, MbRegTransform *=NULL)
 Сдвинуть вдоль вектора.
virtual void Rotate (const MbAxis3D &, double angle, MbRegTransform *=NULL)
 Повернуть вокруг оси.
virtual double DistanceToPoint (const MbCartPoint3D &) const
 Вычислить расстояние до точки.
virtual void AddYourGabaritTo (MbCube &) const
 Добавить свой габарит в присланный габарит.
virtual void CalculateLocalGabarit (const MbMatrix3D &into, MbCube &cube) const
 Рассчитать габарит в локальной системы координат, заданной матрицей преобразования в эту систему.
virtual const MbSurfaceGetSurface () const
 Выдать поверхность грани.
virtual MbSurfaceSetSurface ()
 Выдать поверхность грани для модификации.
virtual bool IsPlanar () const
 Является ли грань плоской?
virtual bool GetPlacement (MbPlacement3D *) const
 Дать плоскость (или только возможность ее выдачи).
bool IsSameSense () const
 Выдать направление нормали грани по отношению к нормали поверхности.
void SetSameSense (bool s)
 Установить направление нормали грани по отношению к нормали поверхности.
bool GetCylinderAxis (MbAxis3D &axis) const
 Дать ось вращения для поверхности, если это возможно.
bool GetPlanePlacement (MbPlacement3D &) const
 Дать локальную систему координат плоскости грани, если это возможно.
bool GetSurfacePlacement (MbPlacement3D &) const
 Дать локальную систему координат плоскости поверхности, если это возможно.
bool GetControlPlacement (MbPlacement3D &place) const
 Дать локальную систему координат грани в средней точке, если это возможно.
bool OrientPlacement (MbPlacement3D &) const
 Соирентировать ось Х плейсмента вдоль линии его пересечения с поверхностью грани, ось Y - с нормалью.
void Normal (double u, double v, MbVector3D &p) const
 Дать нормаль грани.
bool IsColinear (const MbCurveEdge &edge) const
 Параллельно ли ребро грани?
size_t GetLoopsCount () const
 Выдать количество циклов (границ) грани .
void SetLabelThrough (MbeLabelState l, void *key=NULL) const
 Установить метку грани, циклам, рёбрам и вершинам.
void RemovePrivateLabelThrough (void *key) const
 Удалить частную метку грани, циклам, рёбрам и вершинам.
bool IsOwnChangedItem (bool checkVertices=false) const
 Модифицирована ли грань или ее ребро?
void GetVertices (RPArray< MbVertex > &) const
 Выдать множество вершин грани.
void GetVertices (RPArray< const MbVertex > &) const
 Выдать множество вершин грани.
void GetEdges (RPArray< MbCurveEdge > &) const
 Выдать множество ребер грани.
void GetEdges (RPArray< const MbCurveEdge > &) const
 Выдать множество ребер грани.
void GetNeighborFaces (RPArray< const MbFace > &) const
 Выдать множество смежных граней.
void GetNeighborFaces (RPArray< MbFace > &) const
 Выдать множество смежных граней.
bool HasNeighborFace () const
 Есть ли смежные грани?
MbLoopGetLoop (size_t index) const
 Выдать границу (цикл) с проверкой корректности индекса.
MbLoop_GetLoop (size_t index) const
 Выдать границу (цикл) без проверки корректности индекса.
void SetNullLoop (size_t index)
 Обнулить количество ребер в цикле с указанным индексом.
void ExchangeLoops (size_t i1, size_t i2)
 Поменять местами циклы.
void AddLoop (MbLoop &l)
 Добавить новый цикл грани.
void InsertLoop (size_t index, MbLoop &l)
 Вставить цикл по индексу.
void ChangeLoop (MbLoop &oldLoop, MbLoop &newLoop)
 Заменить цикл другим.
MbLoopDetachLoop (size_t index)
 Отцепить цикл с указанным индексом.
void DeleteLoop (size_t index)
 Удалить цикл с указанным индексом.
void DeleteLoops ()
 Удалить все циклы грани.
void AdjustContours ()
 Скопировать границы поверхности с циклов грани.
void SetFaceToLoopEdges (MbLoop &loop)
 Установить указатели ребер цикла на грань.
void SetNullToLoopEdges (MbLoop &loop)
 Установить указатели на грань слева или грань справа в ребрах цикла на NULL.
void SetNullToLoopsEdges ()
 Установить указатели на грань слева или грань справа в ребрах циклов на NULL.
void SetNullToFace (const MbFace *delFace)
 Обнулить указатели на грань слева или грань справа, указывающие на смежную грань delFace, в ребрах циклов.
void MakeRight (bool setBounds=false)
 Установить указатели на грань слева или грань справа в ребрах циклов на данную грань и параметры поверхности по данным циклов грани (setBounds = true).
bool IsVertexOn (const MbVertex *vertex, size_t *indLoop=NULL, size_t *indEdge=NULL) const
 Принадлежит ли вершина грани?
void PartialReverse ()
 Изменить ориентацию грани.
void TotalReverse ()
 Изменить ориентацию грани.
void PartialReverseLoopWithNeighbours (size_t index)
 Изменить ориентацию цикла с указанным индексом.
bool IsSame (const MbFace &face, double accuracy) const
 Совпадает ли грань с заданной гранью?
void CalculateWire (const MbStepData &stepData, MbMesh &mesh) const
 Построить полигональную копию грани и заполнить ею упрощённый объект (сетку) mesh.
bool IsConnectedWith (const MbFace *face, RPArray< const MbCurveEdge > *commonEdges=NULL) const
 Связаны ли грани?
bool IsSimilarToFace (const MbFace &face, bool &normal, bool &planeType) const
 Подобны ли поверхности для объединения трансформацией по матрице (первичная проверка)?
bool IsSpecialSimilarToFace (const MbFace &face, bool &normal, bool &swap, VERSION version) const
 Подобны ли поверхности для объединения путем замены (первичная проверка)?
bool ChangeCarrier (MbSurface &item, MbSurface &init)
 Заменить поверхность item на подобную поверхность init в грани и во всех её рёбрах.
bool ChangeCarrierBorne (MbSurface &item, MbSurface &init, const MbMatrix &matr)
 Заменить поверхность item на подобную поверхность init в грани и во всех её рёбрах и преобразовать по матрице все двумерные кривые из области определения item.
bool ChangeCarrierBorneSpecial (const MbFace &face)
 Заменить поверхность грани поверхностью присланной грани.
bool IsSimilarExactly (const MbFace &face, MbMatrix &matr) const
 Подобны ли поверхности для замены с преобразованием по матрице двумерных кривых?
bool IsSpecialSimilarExactly (const MbFace &face, bool doSwap) const
 Подобны ли поверхности граней для замены с преобразованием двумерных кривых?
bool FindNeighbourEdge (const MbCurveEdge &edge, bool orient, bool next, MbCurveEdge *&findEdge, bool &findOrient) const
 Найти следующее ребро за данным (next == true) или перед данным (next == false).
bool FindEdgeIndex (const MbCurveEdge &edge, bool orient, size_t &loopIndex, size_t &edgeIndex) const
 Найти индекс цикла в грани и индекс ребра в найденном цикле.
MbCurveEdgeGetEdgeByIndex (size_t loopIndex, size_t edgeIndex) const
 Дать ребро по индексам цикла грани и ребра в цикле.
MbOrientedEdgeGetOrientedEdge (const MbCurveEdge &curveEdge) const
 Найти ориентированное ребро по ребру грани.
bool FindIndexByEdges (const RPArray< MbCurveEdge > &initEdges, SArray< MbItemIndex > &indexes) const
 Найти номера для рёбер.
bool FindEdgesByIndex (SArray< MbItemIndex > &indexes, RPArray< MbCurveEdge > &initEdges) const
 Найти рёбра по номерам.
MbVertexFindVertexByName (const MbName &) const
 Найти вершину по имени.
MbCurveEdgeFindEdgeByName (const MbName &) const
 Найти ребро по имени.
void SetOrientedLabel (const MbCurveEdge &edge, MbeLabelState n, void *key=NULL)
 Установить метку ориентированного ребра.
double DistanceToEdge (const MbCurveEdge &edge, MbCartPoint3D &p, MbCartPoint3D &edgeP) const
 Вычислить ближайшее расстояние до ребра и ближайшие точки грани и ребра.
double DistanceToFace (const MbFace &face, MbCartPoint3D &p, MbCartPoint3D &faceP) const
 Вычислить ближайшее расстояние до грани и ближайшие точки граней.
bool AngleWithEdge (const MbEdge &, double &angle) const
 Найти угол между прямым ребром и плоской гранью.
bool AngleWithFace (const MbFace &, double &angle) const
 Найти угол между плоскими гранями.
bool GetNearestEdge (const MbCartPoint &pOnFace, c3d::IndicesPair &edgeLoc, double &tEdgeCurve, bool &orientation, double &distance) const
 Найти проекцию точки на ближайшее ребро грани.
bool GetRectIntersectingEdges (const MbRect &rect, std::vector< c3d::IndicesPair > &edgeLocs, double eps) const
 Найти ребра, пересекающиеся с габаритом своим габаритами.
double DistanceToBorder (const MbCartPoint &point, double &precision) const
 Найти параметрическое расстояние до ближайшей границы.
double DistanceToBorder (const MbCartPoint &point, MbVector &normal, double &precision) const
 Найти параметрическое расстояние до ближайшей границы.
double DistanceToBorder (const MbCartPoint &point, size_t &loopNumber, size_t &edgeNumber, double &precision) const
 Найти параметрическое расстояние до ближайшей границы.
double DistanceToBorder (const MbCartPoint &point, MbVector &normal, size_t &loopNumber, size_t &edgeNumber, ptrdiff_t &corner, double &tEdgeCurve, double &precision) const
 Найти параметрическое расстояние до ближайшей границы.
MbeItemLocation NearPointProjection (const MbCartPoint3D &point, double &u, double &v, MbVector3D &normal, c3d::IndicesPair &edgeLoc, ptrdiff_t &corner) const
 Найти ближайшую проекцию точки на грань.
bool CuttingEdges (const MbCartPoint &p, double xEpsilon, double yEpsilon, double paramPrecision)
 Разбить рёбра грани точкой на поверхности.
bool LoopSelfIntersection (std::vector< LoopCrossParam > &siParams1, std::vector< LoopCrossParam > &siParams2, std::vector< bool > *crossCrossings, bool checkInsideEdges, double metricNear, VERSION version) const
 Найти самопересечения циклов.
bool CreateNormalPlacements (const MbVector3D &axisZ, double angle, SArray< MbPlacement3D > &places) const
 Построить нормальные ЛСК конструктивных плоскостей.
bool CreateTangentPlacements (const MbVector3D &axisZ, SArray< MbPlacement3D > &places) const
 Построить касательные ЛСК конструктивных плоскостей.
bool GetAnyPointOn (MbCartPoint3D &pnt, MbVector3D &nor) const
 Дать некоторую точку и нормаль на грани.
void GetProperties (MbProperties &)
 Выдать свойства объекта.
void SetProperties (const MbProperties &)
 Установить свойства объекта.
void ChangeSurface (MbSurface &newSurf)
 Заменить поверхность на заданную.
void GetFaceParam (const double surfaceU, const double surfaceV, double &faceU, double &faceV) const
 Дать параметры грани (0 <= faceU <= 1, 0 <= faceV <= 1) для параметров поверхности surfaceU и surfaceV.
void GetSurfaceParam (const double faceU, const double faceV, double &surfaceU, double &surfaceV) const
 Дать параметры поверхности surfaceU и surfaceV по параметрам грани (0 <= faceU <= 1, 0 <= faceV <= 1).
void Point (double faceU, double faceV, MbCartPoint3D &point) const
 Дать точку point грани по абстрактным параметрам (0 <= faceU <= 1, 0 <= faceV <= 1).
void PointOn (double surfaceU, double surfaceV, MbCartPoint3D &point) const
 Дать точку point грани по параметрам её поверхности.
bool IsBoundaryFace (double mEps=Math::metricEpsilon) const
 Является ли грань граничной (имеет ли ребра, которые не стыкуются с другими гранями)?
template<class ConstEdges >
void GetBoundaryEdges (ConstEdges &) const
 Выдать множество граничных ребер грани.
bool GetTopologyState (ptrdiff_t &cntAdjacentFaces, RPArray< MbFace > *&adjacentFaces, bool &boundaryFace, ptrdiff_t &cntLoops) const
 Дать топологическое состояние.
void LoopsReserve (size_t additionalSpace)
 Зарезервировать место под циклы.
void LoopsAdjust ()
 Удалить лишнюю память.
void SurfaceSection (const MbPlacement3D &place, PArray< MbCurve > &pCurve)
 Пересечение поверхности грани с плоскостью, результат - множество кривых на поверхности и двумерных кривых на плоскости .
MbSurfaceGetSurfaceCurvesData (RPArray< MbContour > &contours) const
 Построить копию поверхности и двумерные контуры по циклам для операций выдавливания и вращения кривых.
MbSurfaceGetSurfaceCurvesData (std::vector< SPtr< MbContour > > &contours) const
 Построить копию поверхности и двумерные контуры по циклам для операций выдавливания и вращения кривых.
bool UpdateSurfaceBounds ()
 Обновить границы поверхности, ограниченной кривыми, по циклам грани.
MbCube GetCube () const
 Выдать габарит грани.
MbRect GetRect () const
 Выдать габарит области параметров.
bool IsTemporal () const
 Создан ли временный объект сопровождения грани?
void RemoveTemporal () const
 Удалить временный объект сопровождения.
const MbFaceTemp * CreateTemporal (bool keepExisting) const
 Создать новый временный объект сопровождения.
bool UpdateTemporal () const
 Обновить временный объект сопровождения, если он уже создан.

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

MbSurfacesurface
 Поверхность грани (всегда не NULL).
bool sameSense
 Признак совпадения направления нормали грани с нормалью поверхности.
RPArray< MbLooploops
 Границы грани (первая граница должна быть внешней).

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

Грань представляет собой связный конечный кусок поверхности, которому приписано направление нормали.
Сторону грани, при взгляде на которую мы смотрим навстречу нормали, будем называть внешней, другую сторону грани будем называть внутренней.
Стороны поверхности MbSurface не обладают равноправием относительно нормали, так как у поверхности одна сторона всегда внешняя, а другая сторона всегда внутренняя. В отличие от поверхности для грани мы имеем возможность назначить направление нормали и тем самым назначить внешнюю и внутреннюю стороны.
Границы грани описываются циклами MbLoop. Количество циклов грани равно количеству границ грани. Один из циклов грани будем называть внешним, а остальные - внутренними. Внутренние циклы целиком лежат внутри внешнего цикла. Внешний цикл грани ориентирован против часовой стрелки, а внутренние циклы ориентированы по часовой стрелке, если смотреть навстречу выбранной нормали грани.
Циклы грани не могут пересекать друг друга и сами себя.

Если два цикла грани имеют общую точку, то эта точка в обоих циклах должна быть вершиной ребра.


Методы

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

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

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

Замещает MbTopologyItem.

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

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

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

Замещает MbTopologyItem.

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

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

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

Замещает MbTopologyItem.

void MbFace::PartialReverse ( )

Инвертировать ориентацию ребер в цикле и инвертировать флаг ориентации грани.

void MbFace::TotalReverse ( )

Инвертировать ориентацию ребер в цикле, поменять местами указатели на грани справа и слева в ребрах циклов, инвертировать флаг ориентации грани.

void MbFace::PartialReverseLoopWithNeighbours ( size_t  index)

Инвертировать ориентацию ребер в цикле с указанным индексом, инвертировать ориентацию соответствующих ребер в циклах соседних граней, установить указатели ребер цикла на нужные грани.


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