31 #if defined(SurfaceMesh_RECURSES)
32 #error Recursive header files inclusion detected in SurfaceMesh.h
33 #else // defined(SurfaceMesh_RECURSES)
35 #define SurfaceMesh_RECURSES
37 #if !defined SurfaceMesh_h
46 #include "DGtal/base/Common.h"
47 #include "DGtal/base/IntegerSequenceIterator.h"
48 #include "DGtal/helpers/StdDefs.h"
90 template <
typename TRealPo
int,
typename TRealVector >
123 typedef typename std::map<Vertex, Value>
Type;
177 template <
typename RealPo
intIterator,
typename VerticesIterator>
179 VerticesIterator itVertices, VerticesIterator itVerticesEnd );
201 template <
typename RealPo
intIterator,
typename VerticesIterator>
202 bool init( RealPointIterator itPos, RealPointIterator itPosEnd,
203 VerticesIterator itVertices, VerticesIterator itVerticesEnd );
217 template <
typename RealVectorIterator>
222 template <
typename RealVectorIterator>
249 template <
typename AnyRing>
251 (
const std::vector<AnyRing>& vvalues )
const;
256 template <
typename AnyRing>
258 (
const std::vector<AnyRing>& fvalues )
const;
263 (
const std::vector<RealVector>& vuvectors )
const;
268 (
const std::vector<RealVector>& fuvectors )
const;
477 template <
typename OutputIterator>
502 template <
typename OutputIterator,
typename VertexPredicate>
506 const VertexPredicate & pred)
const
509 if ( pred( nv ) ) *it++ = nv;
657 std::tuple< Vertices, WeightedEdges, WeightedFaces >
775 template <
typename TRealPo
int,
typename TRealVector >
784 #include "SurfaceMesh.ih"
788 #endif // !defined SurfaceMesh_h
790 #undef SurfaceMesh_RECURSES
791 #endif // else defined(SurfaceMesh_RECURSES)
Scalars getMaxWeights(Index v) const
std::vector< RealVector > computeFaceUnitVectorsFromVertexUnitVectors(const std::vector< RealVector > &vuvectors) const
RealVector::Component Scalar
SurfaceMesh< RealPoint, RealVector > Self
RealVector & vertexNormal(Vertex v)
void writeNeighbors(OutputIterator &it, const Vertex &v, const VertexPredicate &pred) const
void clear()
Clears everything. The object is empty.
RealPoint & position(Vertex v)
void computeNeighbors()
Computes neighboring information.
std::vector< WeightedFace > WeightedFaces
const std::vector< RealVector > & faceNormals() const
Size degree(const Vertex &v) const
const std::vector< Faces > & allEdgeFaces() const
void computeFaceNormalsFromVertexNormals()
std::pair< Face, Scalar > WeightedFace
std::vector< AnyRing > computeVertexValuesFromFaceValues(const std::vector< AnyRing > &fvalues) const
SurfaceMesh(Self &&other)=default
const std::vector< Vertices > & allNeighborVertices() const
std::pair< Vertex, Vertex > VertexPair
DGtal::uint32_t Dimension
const std::vector< Faces > & allIncidentFaces() const
Aim: Represents an embedded mesh as faces and a list of vertices. Vertices may be shared among faces ...
Edges computeManifoldBoundaryEdges() const
Scalar edgeInclusionRatio(RealPoint p, Scalar r, Index e) const
Aim: It is a simple class that mimics a (non mutable) iterator over integers. You can increment it,...
std::vector< RealVector > myFaceNormals
For each face, its normal vector.
std::vector< Vertices > myNeighborVertices
For each vertex, its range of neighbor vertices (no particular order)
std::vector< VertexPair > myEdgeVertices
For each edge, its two vertices.
ConstIterator end() const
Edges computeManifoldInnerEdges() const
Scalar vertexInclusionRatio(RealPoint p, Scalar r, Index v) const
ConstIterator begin() const
const std::vector< RealPoint > & positions() const
Scalar averageEdgeLength() const
Edge makeEdge(Vertex i, Vertex j) const
TEuclideanRing Component
Type for Vector elements.
WeightedFaces computeFacesInclusionsInBall(Scalar r, Index f) const
IntegerSequenceIterator< Vertex > ConstIterator
Non mutable iterator for visiting vertices.
std::vector< Faces > myEdgeFaces
For each edge, its faces (one, two, or more if non manifold)
std::vector< Face > Faces
std::vector< Vertex > Vertices
The type that defines a list/range of vertices (e.g. to define faces)
SurfaceMesh(RealPointIterator itPos, RealPointIterator itPosEnd, VerticesIterator itVertices, VerticesIterator itVerticesEnd)
const Faces & incidentFaces(Vertex v) const
Edges computeNonManifoldEdges() const
const Faces & edgeLeftFaces(Edge e) const
RealVector & faceNormal(Face f)
void computeVertexNormalsFromFaceNormals()
std::vector< Faces > myIncidentFaces
For each vertex, its range of incident faces.
std::set< Vertex > VertexSet
~SurfaceMesh()=default
Default destructor.
bool setFaceNormals(RealVectorIterator itN, RealVectorIterator itNEnd)
const Faces & neighborFaces(Face f) const
std::vector< Vertices > myIncidentVertices
For each face, its range of incident vertices.
DGtal is the top-level namespace which contains all DGtal functions and types.
std::vector< Edge > Edges
The type that defines a list/range of faces.
void computeVertexNormalsFromFaceNormalsWithMaxWeights()
const VertexPair & edgeVertices(Edge e) const
RealPoint faceCentroid(Index f) const
Scalar faceInclusionRatio(RealPoint p, Scalar r, Index f) const
bool setVertexNormals(RealVectorIterator itN, RealVectorIterator itNEnd)
Scalar faceArea(Index f) const
std::vector< RealVector > computeVertexUnitVectorsFromFaceUnitVectors(const std::vector< RealVector > &fuvectors) const
std::tuple< Vertices, WeightedEdges, WeightedFaces > computeCellsInclusionsInBall(Scalar r, Index f) const
void perturbateWithAdaptiveUniformRandomNoise(Scalar p)
std::pair< Edge, Scalar > WeightedEdge
void writeNeighbors(OutputIterator &it, const Vertex &v) const
void computeEdges()
Computes edge information.
std::ostream & operator<<(std::ostream &out, const ClosedIntegerHalfPlane< TSpace > &object)
std::vector< Scalar > Scalars
Edges computeManifoldInnerUnconsistentEdges() const
static const Dimension dimension
Copy of the static dimension of the Point/Vector.
std::vector< RealVector > & faceNormals()
const std::vector< VertexPair > & allEdgeVertices() const
Edges computeManifoldInnerConsistentEdges() const
std::vector< AnyRing > computeFaceValuesFromVertexValues(const std::vector< AnyRing > &vvalues) const
const std::vector< Faces > & allNeighborFaces() const
void perturbateWithUniformRandomNoise(Scalar p)
static const Dimension dimension
void selfDisplay(std::ostream &out) const
Scalar localWindow(Face f) const
const Vertices & neighborVertices(Vertex v) const
void computeFaceNormalsFromPositions()
Size bestCapacity() const
const std::vector< Faces > & allEdgeLeftFaces() const
const std::vector< RealVector > & vertexNormals() const
std::map< Vertex, Value > Type
std::vector< Faces > myEdgeLeftFaces
std::size_t Size
The type for counting elements.
std::vector< RealPoint > myPositions
For each vertex, its position.
Self & operator=(const Self &other)=default
const Faces & edgeRightFaces(Edge e) const
const Faces & edgeFaces(Edge e) const
const RealPoint & position(Vertex v) const
const std::vector< Vertices > & allIncidentVertices() const
std::vector< RealVector > & vertexNormals()
const RealVector & vertexNormal(Vertex v) const
RealPoint edgeCentroid(Index e) const
std::vector< Faces > myEdgeRightFaces
const RealVector & faceNormal(Face f) const
const std::vector< Faces > & allEdgeRightFaces() const
const Vertices & incidentVertices(Face f) const
std::vector< WeightedEdge > WeightedEdges
bool init(RealPointIterator itPos, RealPointIterator itPosEnd, VerticesIterator itVertices, VerticesIterator itVerticesEnd)
std::vector< RealVector > myVertexNormals
For each vertex, its normal vector.
SurfaceMesh(const Self &other)=default
BOOST_STATIC_ASSERT((dimension==3))
std::vector< Faces > myNeighborFaces
For each face, its range of neighbor faces (no particular order)
std::size_t Index
The type used for numbering vertices and faces.