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
)
)
|