OpenMesh
OpenMesh::Subdivider::Uniform::CompositeT< MeshType, RealType > Class Template Referenceabstract

This class provides the composite subdivision rules for the uniform case. More...

#include <OpenMesh/Tools/Subdivider/Uniform/Composite/CompositeT.hh>

Inheritance diagram for OpenMesh::Subdivider::Uniform::CompositeT< MeshType, RealType >:
Collaboration diagram for OpenMesh::Subdivider::Uniform::CompositeT< MeshType, RealType >:

Classes

struct  Coeff
 Abstract base class for coefficient functions. More...
 

Public Types

typedef RealType real_t
 
typedef MeshType mesh_t
 
typedef SubdividerT< mesh_t, real_t > parent_t
 
- Public Types inherited from OpenMesh::Subdivider::Uniform::SubdividerT< MeshType, RealType >
typedef MeshType mesh_t
 
typedef RealType real_t
 

Public Member Functions

 CompositeT (MeshType &_mesh)
 
virtual const char * name (void) const override=0
 Return name of subdivision algorithm. More...
 
- Public Member Functions inherited from OpenMesh::Subdivider::Uniform::SubdividerT< MeshType, RealType >
 SubdividerT (void)
 Constructor to be used with interface 2. More...
 
 SubdividerT (MeshType &_m)
 Constructor to be used with interface 1 (calls attach()) More...
 
virtual ~SubdividerT ()
 Destructor (calls detach())
 
bool operator() (MeshType &_m, size_t _n, const bool _update_points=true)
 Subdivide the mesh _m _n times. More...
 
bool attach (MeshType &_m)
 Attach mesh _m to self. More...
 
bool operator() (size_t _n, const bool _update_points=true)
 Subdivide the attached _n times. More...
 
void detach (void)
 Detach an eventually attached mesh. More...
 

Protected Types

typedef MeshType::Scalar scalar_t
 
typedef MeshType::VertexHandle VertexHandle
 
typedef MeshType::FaceHandle FaceHandle
 
typedef MeshType::EdgeHandle EdgeHandle
 
typedef MeshType::HalfedgeHandle HalfedgeHandle
 

Protected Member Functions

bool prepare (MeshType &_m) override
 Prepare mesh, e.g. More...
 
bool subdivide (MeshType &_m, size_t _n, const bool _update_points=true) override
 Subdivide mesh _m _n times. More...
 
bool cleanup (MeshType &_m) override
 Cleanup mesh after usage, e.g. remove added properties. More...
 
virtual void apply_rules (void)=0
 Assemble here the rule sequence, by calling the constructor of the wanted rules. More...
 
void commit (MeshType &_m)
 Move vertices to new positions after the rules have been applied to the mesh (called by subdivide()).
 
- Protected Member Functions inherited from OpenMesh::Subdivider::Uniform::SubdividerT< MeshType, RealType >

Uniform composite subdivision rules

void Tvv3 ()
 Split Face, using Vertex information (1-3 split)
 
void Tvv4 ()
 Split Face, using Vertex information (1-4 split)
 
void Tfv ()
 Split Face, using Face Information.
 
void FF ()
 Face to face averaging.
 
void FFc (Coeff &_coeff)
 Weighted face to face averaging.
 
void FFc (scalar_t _c)
 Weighted face to face averaging.
 
void FV ()
 Face to vertex averaging.
 
void FVc (Coeff &_coeff)
 Weighted face to vertex Averaging with flaps.
 
void FVc (scalar_t _c)
 Weighted face to vertex Averaging with flaps.
 
void FE ()
 Face to edge averaging.
 
void VF ()
 Vertex to Face Averaging.
 
void VFa (Coeff &_coeff)
 Vertex to Face Averaging, weighted.
 
void VFa (scalar_t _alpha)
 Vertex to Face Averaging, weighted.
 
void VV ()
 Vertex to vertex averaging.
 
void VVc (Coeff &_coeff)
 Vertex to vertex averaging, weighted.
 
void VVc (scalar_t _c)
 Vertex to vertex averaging, weighted.
 
void VE ()
 VE Step (Vertex to Edge Averaging)
 
void VdE ()
 Vertex to edge averaging, using diamond of edges.
 
void VdEc (scalar_t _c)
 Weighted vertex to edge averaging, using diamond of edges.
 
void VdEg (Coeff &_coeff)
 Weigthed vertex to edge averaging, using diamond of edges for irregular vertices.
 
void VdEg (scalar_t _gamma)
 Weigthed vertex to edge averaging, using diamond of edges for irregular vertices.
 
void EF ()
 Edge to face averaging.
 
void EV ()
 Edge to vertex averaging.
 
void EVc (Coeff &_coeff)
 Weighted edge to vertex averaging.
 
void EVc (scalar_t _c)
 Weighted edge to vertex averaging.
 
void EdE ()
 Edge to edge averaging w/ flap rule.
 
void EdEc (scalar_t _c)
 Weighted edge to edge averaging w/ flap rule.
 
void corner_cutting (HalfedgeHandle _heh)
 Corner Cutting.
 
VertexHandle split_edge (HalfedgeHandle _heh)
 Split Edge.
 

Detailed Description

template<typename MeshType, typename RealType = float>
class OpenMesh::Subdivider::Uniform::CompositeT< MeshType, RealType >

This class provides the composite subdivision rules for the uniform case.

To create a subdivider derive from this class and overload the functions name() and apply_rules(). In the latter one call the wanted rules.

For details on the composite scheme refer to

Note
Not all rules are implemented!
See also
class Adaptive::CompositeT

Member Function Documentation

◆ apply_rules()

template<typename MeshType , typename RealType = float>
virtual void OpenMesh::Subdivider::Uniform::CompositeT< MeshType, RealType >::apply_rules ( void  )
protectedpure virtual

Assemble here the rule sequence, by calling the constructor of the wanted rules.

Implemented in OpenMesh::Subdivider::Uniform::CompositeLoopT< MeshType, RealType >, and OpenMesh::Subdivider::Uniform::CompositeSqrt3T< MeshType, RealType >.

◆ cleanup()

template<typename MeshType , typename RealType = float>
bool OpenMesh::Subdivider::Uniform::CompositeT< MeshType, RealType >::cleanup ( MeshType &  _m)
inlineoverrideprotectedvirtual

Cleanup mesh after usage, e.g. remove added properties.

Implements OpenMesh::Subdivider::Uniform::SubdividerT< MeshType, RealType >.

◆ name()

template<typename MeshType , typename RealType = float>
virtual const char * OpenMesh::Subdivider::Uniform::CompositeT< MeshType, RealType >::name ( void  ) const
overridepure virtual

◆ prepare()

template<typename MeshType , typename RealType >
bool OpenMesh::Subdivider::Uniform::CompositeT< MeshType, RealType >::prepare ( MeshType &  )
overrideprotectedvirtual

Prepare mesh, e.g.

add properties

You have to reimplement this function to setup your mesh. The default implementation will always return false and therefore block your algorithm.

Reimplemented from OpenMesh::Subdivider::Uniform::SubdividerT< MeshType, RealType >.

◆ subdivide()

template<typename MeshType , typename RealType = float>
bool OpenMesh::Subdivider::Uniform::CompositeT< MeshType, RealType >::subdivide ( MeshType &  _m,
size_t  _n,
const bool  _update_points = true 
)
inlineoverrideprotectedvirtual

The documentation for this class was generated from the following files:

Project OpenMesh, ©  Visual Computing Institute, RWTH Aachen. Documentation generated using doxygen .