//////////////////////////////////////////////////////////////////////////////// /** \file \brief Преобразователь сетки к форме, сохраняющей связи граней и полигонов. */ //////////////////////////////////////////////////////////////////////////////// #ifndef __CONV_TOPO_MESH_H #define __CONV_TOPO_MESH_H #include #include #include #include #include #include class MbGrid; class MbFloatGrid; class MbMesh; class MbTriangle; namespace JTC { class TopoMesh; class TopoGrid; class TopoLoop; class TopoVertex; class MeshVertex; class MeshPolygon; typedef SPtr TopoMeshPtr; typedef SPtr TopoGridPtr; typedef SPtr TopoLoopPtr; typedef SPtr TopoVertexPtr; typedef SPtr MeshVertexPtr; typedef SPtr MeshPolygonPtr; typedef std::vector RawTopoGridVector; typedef std::vector TopoGridVector; typedef std::vector TopoLoopVector; typedef std::vector TopoVertexVector; typedef std::vector MeshVertexVector; typedef std::vector MeshPolygonVector; typedef std::pair TrianglePair; //------------------------------------------------------------------------------ // Сетка с топологической информацией // --- class CONV_CLASS TopoMesh : public MbRefItem { SPtr mesh; TopoGridVector grids; MeshVertexVector ownPoints; MeshPolygonVector ownFacePolygons; std::map< size_t, std::vector > degeneratedTriangles; std::vector boundaryPoints; double const metricTolerance; public: /// Конструктор TopoMesh(); /// Деструктор virtual ~TopoMesh(); /// Инициализировать bool Init( const MbMesh& mesh, bool enableDiagnostics = false ); /// Получить сетку const MbMesh* GetMesh() const; /// Число полигонов size_t MeshPolygonsCount() const; /// Получить полигон MeshPolygonPtr Polygon( size_t index ) const; /// Число вершин size_t MeshVerticisCount() const; /// Получить вершину MeshVertexPtr Vertex( size_t index ) const; /// Добавить вершину void AddVertex( MeshVertexPtr vert ); /// Получить вырожденные треуголники std::map< size_t, std::vector > GetDegeneratedTriangles() const; /// Получить граничные точки сетки std::vector GetBoundaryPoints() const; /// Сбросить все данные void Reset(); /// Получить следующую в цепочке граничную вершину. size_t NextBoundaryVertex( size_t indexBoundaryVertex, const std::vector& allBoundary ) const; /// Сформировать внешнюю границу начиная с указанной вершины. bool InitVoidBoundFrom( std::vector& freeBoundaryVerticis ); /// Получить точность задания расстояния. double MetricTolerance() const; OBVIOUS_PRIVATE_COPY( TopoMesh ) }; }; //------------------------------------------------------------------------------ // Построить сетку по полигонам // --- CONV_FUNC( SPtr ) CreateGridByPolygonPoints( const std::vector>& polygonsAsPoints ); //------------------------------------------------------------------------------ // Создать нормали сетки по умолчанию // --- void CreateDefaultNormals( MbGrid & grid ); #endif // !__CONV_TOPO_MESH_H