OpenMesh::Subdivider::Adaptive::CompositeT< M > Class Template Reference

#include <CompositeT.hh>

List of all members.

Classes

struct  DeleteRule

Public Types

typedef M::EdgeHandle EH
typedef M::FaceHandle FH
typedef M::HalfedgeHandle HH
typedef M Mesh
typedef RuleInterfaceT< M > Rule
typedef std::vector< Rule * > RuleSequence
typedef M::VertexHandle VH

Public Member Functions

void cleanup (void)
 CompositeT (Mesh &_mesh)
 Constructor.
bool initialize (void)
 Initialize faces, edges, vertices, and rules.
void refine (typename Mesh::VertexHandle &_vh)
 Raise one vertex to next final level.
void refine (typename Mesh::FaceHandle &_fh)
 Refine one face.
const Rulesubdiv_rule () const
int subdiv_type ()
 Return subdivision split type (3 for 1-to-3 split, 4 for 1-to-4 split).
virtual ~CompositeT ()
Managing composite rules

template<typename R >
RuleHandleT< R > & add (RuleHandleT< R > &_rh)
template<typename R >
RuleHandleT< R > add ()
size_t n_rules () const
 Number of rules in the rule sequence.
RuleInterfaceT< M > & rule (size_t _idx)
template<typename R >
RuleHandleT< R >::Rulerule (const RuleHandleT< R > &_rh)
std::string rules_as_string (const std::string &_sep=" * ") const
 Return the sequence as string.

Protected Member Functions

state_t generation (FH _fh)
state_t generation (EH _eh)
state_t generation (VH _vh)
state_t generation (state_t _s)
const RuleSequencerules () const
 The rule sequence.

Private Member Functions

 CompositeT (const CompositeT &)
Rulef_rule ()
Rulel_rule ()
CompositeToperator= (const CompositeT)
Rulet_rule ()

Private Attributes

Meshmesh_
RuleSequence rule_sequence_
Rulesubdiv_rule_
int subdiv_type_

Detailed Description

template<typename M>
class OpenMesh::Subdivider::Adaptive::CompositeT< M >

Adaptive Composite Subdivision framework.

The adaptive composite subdivision framework is based on the work done by P. Oswald and P. Schroeder. This framework elevates the uniform case of the composite scheme to the adaptive setting.

For details on the composite scheme refer to

For details on the transition from uniform to adaptive composite subdivision please refer to

In the composite scheme a subdivision operator is created by combining smaller "atomic" rules. Depending on the selection and ordering of the operator many known subdivision schemes can be created.

Every rule inherits from RuleInterfaceT and is represented out of the subdivider object by a RuleHandleT (as usual within OpenMesh). You can add rules using the CompositeT::add() functions. The correct order of adding the rules is very important, and furthermore not all rules get along with each other very well. (Please read the given literature, especially the paper by Oswald and Schr�der.)

To use a composite subdivider first define a rule sequence describing the order of execution of the rules. In the order the rules habe been added they will be executed. E.g. the rules given in operator notation have to added from right to left.

After the rule sequence has been defined the subdivider has to be intialized using CompositeT::initialize(). If everything went well, use CompositeT::refine() to subdivide locally a face or vertex.

Note:
Not all (topological) operators have been implemented!
Only triangle meshes are supported.
The rule sequence must begin with a topological operator.
See also:
RuleInterfaceT, RuleHandleT

Definition at line 131 of file Adaptive/Composite/CompositeT.hh.


Member Typedef Documentation

template<typename M >
typedef M::EdgeHandle OpenMesh::Subdivider::Adaptive::CompositeT< M >::EH

Definition at line 141 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
typedef M::FaceHandle OpenMesh::Subdivider::Adaptive::CompositeT< M >::FH

Definition at line 140 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
typedef M::HalfedgeHandle OpenMesh::Subdivider::Adaptive::CompositeT< M >::HH

Definition at line 142 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
typedef M OpenMesh::Subdivider::Adaptive::CompositeT< M >::Mesh

Definition at line 136 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
typedef RuleInterfaceT<M> OpenMesh::Subdivider::Adaptive::CompositeT< M >::Rule

Definition at line 135 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
typedef std::vector<Rule*> OpenMesh::Subdivider::Adaptive::CompositeT< M >::RuleSequence

Definition at line 137 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
typedef M::VertexHandle OpenMesh::Subdivider::Adaptive::CompositeT< M >::VH

Definition at line 139 of file Adaptive/Composite/CompositeT.hh.


Constructor & Destructor Documentation

template<typename M >
OpenMesh::Subdivider::Adaptive::CompositeT< M >::CompositeT ( Mesh _mesh  )  [inline]

Constructor.

Definition at line 147 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
virtual OpenMesh::Subdivider::Adaptive::CompositeT< M >::~CompositeT (  )  [inline, virtual]

Definition at line 153 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
OpenMesh::Subdivider::Adaptive::CompositeT< M >::CompositeT ( const CompositeT< M > &   )  [private]

Member Function Documentation

template<typename M >
template<typename R >
RuleHandleT<R>& OpenMesh::Subdivider::Adaptive::CompositeT< M >::add ( RuleHandleT< R > &  _rh  )  [inline]

Add new rule to rule sequence by passing an appropriate handle to the method.

Returns:
Valid handle on success. Else it is invalid.

Definition at line 211 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
template<typename R >
RuleHandleT<R> OpenMesh::Subdivider::Adaptive::CompositeT< M >::add (  )  [inline]

Add new rule to rule sequence by passing the type of the wanted rule as template argument to the method.

Returns:
Valid handle on success. Else it is invalid.

Definition at line 199 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
void OpenMesh::Subdivider::Adaptive::CompositeT< M >::cleanup ( void   )  [inline]

Reset self to state after the default constructor except of the mesh.

Definition at line 159 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
Rule* OpenMesh::Subdivider::Adaptive::CompositeT< M >::f_rule (  )  [inline, private]

Definition at line 266 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
state_t OpenMesh::Subdivider::Adaptive::CompositeT< M >::generation ( FH  _fh  )  [inline, protected]

Definition at line 260 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
state_t OpenMesh::Subdivider::Adaptive::CompositeT< M >::generation ( EH  _eh  )  [inline, protected]

Definition at line 259 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
state_t OpenMesh::Subdivider::Adaptive::CompositeT< M >::generation ( VH  _vh  )  [inline, protected]

Definition at line 258 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
state_t OpenMesh::Subdivider::Adaptive::CompositeT< M >::generation ( state_t  _s  )  [inline, protected]

Definition at line 257 of file Adaptive/Composite/CompositeT.hh.

template<class M >
bool OpenMesh::Subdivider::Adaptive::CompositeT< M >::initialize ( void   )  [inline]

Initialize faces, edges, vertices, and rules.

Definition at line 70 of file Adaptive/Composite/CompositeT.cc.

template<typename M >
Rule* OpenMesh::Subdivider::Adaptive::CompositeT< M >::l_rule (  )  [inline, private]

Definition at line 267 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
size_t OpenMesh::Subdivider::Adaptive::CompositeT< M >::n_rules (  )  const [inline]

Number of rules in the rule sequence.

Definition at line 242 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
CompositeT& OpenMesh::Subdivider::Adaptive::CompositeT< M >::operator= ( const   CompositeT  )  [private]
template<class M >
void OpenMesh::Subdivider::Adaptive::CompositeT< M >::refine ( typename Mesh::VertexHandle &  _vh  )  [inline]

Raise one vertex to next final level.

Definition at line 268 of file Adaptive/Composite/CompositeT.cc.

template<class M >
void OpenMesh::Subdivider::Adaptive::CompositeT< M >::refine ( typename Mesh::FaceHandle &  _fh  )  [inline]

Refine one face.

Definition at line 167 of file Adaptive/Composite/CompositeT.cc.

template<typename M >
RuleInterfaceT<M>& OpenMesh::Subdivider::Adaptive::CompositeT< M >::rule ( size_t  _idx  )  [inline]

Get rule (interface) by index

Returns:
The wanted rule if the handle is valid. The return value is undefined if the handle is invalid!

Definition at line 235 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
template<typename R >
RuleHandleT<R>::Rule& OpenMesh::Subdivider::Adaptive::CompositeT< M >::rule ( const RuleHandleT< R > &  _rh  )  [inline]

Get rule in the rule sequence by a handle.

Returns:
The wanted rule if the handle is valid. The return value is undefined if the handle is invalid!

Definition at line 222 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
const RuleSequence& OpenMesh::Subdivider::Adaptive::CompositeT< M >::rules (  )  const [inline, protected]

The rule sequence.

Definition at line 252 of file Adaptive/Composite/CompositeT.hh.

template<class M >
std::string OpenMesh::Subdivider::Adaptive::CompositeT< M >::rules_as_string ( const std::string &  _sep = " * "  )  const [inline]

Return the sequence as string.

Definition at line 284 of file Adaptive/Composite/CompositeT.cc.

template<typename M >
const Rule& OpenMesh::Subdivider::Adaptive::CompositeT< M >::subdiv_rule (  )  const [inline]

Definition at line 187 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
int OpenMesh::Subdivider::Adaptive::CompositeT< M >::subdiv_type (  )  [inline]

Return subdivision split type (3 for 1-to-3 split, 4 for 1-to-4 split).

Definition at line 183 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
Rule* OpenMesh::Subdivider::Adaptive::CompositeT< M >::t_rule (  )  [inline, private]

Definition at line 265 of file Adaptive/Composite/CompositeT.hh.


Member Data Documentation

template<typename M >
Mesh& OpenMesh::Subdivider::Adaptive::CompositeT< M >::mesh_ [private]

Definition at line 282 of file Adaptive/Composite/CompositeT.hh.

Definition at line 272 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
Rule* OpenMesh::Subdivider::Adaptive::CompositeT< M >::subdiv_rule_ [private]

Definition at line 277 of file Adaptive/Composite/CompositeT.hh.

template<typename M >
int OpenMesh::Subdivider::Adaptive::CompositeT< M >::subdiv_type_ [private]

Definition at line 275 of file Adaptive/Composite/CompositeT.hh.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines


openmesh
Author(s): Benjamin Pitzer
autogenerated on Fri Jan 11 12:11:19 2013