Files
Extern/C3d/Include/conv_topo_mesh.h
T
SaraP d6eac07eea Extern :
- C3d aggiornamento librerie ( 118019).
2024-12-12 08:37:52 +01:00

125 lines
3.9 KiB
C++

////////////////////////////////////////////////////////////////////////////////
/**
\file
\brief Преобразователь сетки к форме, сохраняющей связи граней и полигонов.
*/
////////////////////////////////////////////////////////////////////////////////
#ifndef __CONV_TOPO_MESH_H
#define __CONV_TOPO_MESH_H
#include <mb_cart_point3d.h>
#include <reference_item.h>
#include <templ_sptr.h>
#include <vector>
#include <list>
#include <map>
class MbGrid;
class MbFloatGrid;
class MbItem;
namespace JTC {
class TopoMesh;
class TopoGrid;
class TopoLoop;
class TopoVertex;
class MeshVertex;
class MeshPolygon;
typedef SPtr<TopoMesh> TopoMeshPtr;
typedef SPtr<TopoGrid> TopoGridPtr;
typedef SPtr<TopoLoop> TopoLoopPtr;
typedef SPtr<TopoVertex> TopoVertexPtr;
typedef SPtr<MeshVertex> MeshVertexPtr;
typedef SPtr<MeshPolygon> MeshPolygonPtr;
typedef std::vector<TopoGrid*> RawTopoGridVector;
typedef std::vector<TopoGridPtr> TopoGridVector;
typedef std::vector<TopoLoopPtr> TopoLoopVector;
typedef std::vector<TopoVertexPtr> TopoVertexVector;
typedef std::vector<MeshVertexPtr> MeshVertexVector;
typedef std::vector<MeshPolygonPtr> MeshPolygonVector;
//------------------------------------------------------------------------------
// Сетка с топологической информацией
// ---
class CONV_CLASS TopoMesh : public MbRefItem {
protected:
SPtr<const MbItem> item;
TopoGridVector grids;
MeshVertexVector ownPoints;
MeshPolygonVector ownFacePolygons;
std::map< size_t, std::vector<size_t> > degeneratedTriangles;
std::vector<MbCartPoint3D> boundaryPoints;
double const metricTolerance;
public:
/// Конструктор
TopoMesh();
/// Деструктор
virtual ~TopoMesh();
/// Инициализировать
bool Init( const MbItem& mesh, bool enableDiagnostics = false );
/// Получить сетку
SPtr<const MbItem> 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<size_t> > GetDegeneratedTriangles() const;
/// Получить граничные точки сетки
std::vector<MbCartPoint3D> GetBoundaryPoints() const;
/// Сбросить все данные
void Reset();
/// Получить следующую в цепочке граничную вершину.
//unused:size_t NextBoundaryVertex( size_t indexBoundaryVertex, const std::vector<size_t>& allBoundary ) const;
/// Сформировать внешнюю границу начиная с указанной вершины.
bool InitVoidBoundFrom( std::vector<size_t>& freeBoundaryVerticis );
/// Получить точность задания расстояния.
double MetricTolerance() const;
/// Получить нормаль на сетке
void GetNormal( size_t indexGrid, size_t indexNormal, MbFloatVector3D& vNormal ) const;
OBVIOUS_PRIVATE_COPY( TopoMesh )
};
};
//------------------------------------------------------------------------------
// Построить сетку по полигонам
// ---
CONV_FUNC( SPtr<MbGrid> ) CreateGridByPolygonPoints( const std::vector<std::vector<MbCartPoint3D>>& polygonsAsPoints );
//------------------------------------------------------------------------------
// Создать нормали сетки по умолчанию
// ---
void CreateDefaultNormals( MbGrid & grid );
#endif // !__CONV_TOPO_MESH_H