OpenMesh.Tools.Subdivider.Adaptive.Composite.CompositeT



$(DDOC_MODULE_MEMBERS
class CompositeT (M);
$(DDOC_DECL_DD $(DDOC_SECTIONS Adaptive Composite Subdivision framework.

$(DDOC_DESCRIPTION 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 - P. Oswald, P. Schroeder "Composite primal/dual sqrt(3)-subdivision schemes", CAGD 20, 3, 2003, 135--164

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! \note Only triangle meshes are supported. \note The rule sequence must begin with a topological operator. ) See Also:
RuleInterfaceT, RuleHandleT



)
this(Mesh _mesh);
Constructor

void cleanup ();
Reset \c self to state after the default constructor except of

the mesh.

bool initialize ();
Initialize faces, edges, vertices, and rules

void refine (Mesh.FaceHandle _fh);
Refine one face.

void refine (Mesh.VertexHandle _vh);
Raise one vertex to next final level.

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

template addT (R)
\name Managing composite rules

Add new rule to rule sequence by passing the type of the wanted rule as template argument to the method. \return Valid handle on success. Else it is invalid.

RuleHandleT!(R) addT ();
\name Managing composite rules

Add new rule to rule sequence by passing the type of the wanted rule as template argument to the method. \return Valid handle on success. Else it is invalid.

template add (R)
Add new rule to rule sequence by passing an appropriate handle to the method. \return Valid handle on success. Else it is invalid.

RuleHandleT!(R) add (ref RuleHandleT!(R) _rh);
Add new rule to rule sequence by passing an appropriate handle to the method. \return Valid handle on success. Else it is invalid.

template rule (R)
Get rule in the rule sequence by a handle.

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

RuleHandleT!(R).Rule rule (RuleHandleT!(R) _rh);
Get rule in the rule sequence by a handle.

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

template rule (dummy = void)
Get rule (interface) by index

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

RuleInterfaceT!(M) rule (size_t _idx);
Get rule (interface) by index

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

size_t n_rules ();
Number of rules in the rule sequence

string rules_as_string (string _sep = " * ");
Return the sequence as string

RuleSequence rules ();
The rule sequence

) )
Page was generated with CanDyDOC on Fri Oct 12 16:12:18 2007