Factory for constructing TopologyRefiners from specific mesh classes. More...
#include <topologyRefiner.h>
Classes | |
struct | Options |
Options related to the construction of each TopologyRefiner. More... | |
Static Public Member Functions | |
static TopologyRefiner * | Create (MESH const &mesh, Options options=Options()) |
Instantiates a TopologyRefiner from client-provided topological representation. More... | |
Protected Types | |
typedef Vtr::internal::Level::TopologyError | TopologyError |
Protected Types inherited from TopologyRefinerFactoryBase | |
typedef Vtr::internal::Level::ValidationCallback | TopologyCallback |
Static Protected Member Functions | |
static bool | populateBaseLevel (TopologyRefiner &refiner, MESH const &mesh, Options options) |
Methods to be provided to complete assembly of the TopologyRefiner | |
These methods are to be specialized to implement all details specific to class MESH required to convert MESH data to TopologyRefiner. Note that some of these must be specialized in order to complete construction while some are optional. There are two minimal construction requirements (to specify the size and content of all topology relations) and three optional (to specify feature tags, face-varying data, and runtime validation and error reporting). See comments in the generic stubs, the factory for Far::TopologyDescriptor or the tutorials for more details on writing these. | |
static bool | resizeComponentTopology (TopologyRefiner &newRefiner, MESH const &mesh) |
Specify the number of vertices, faces, face-vertices, etc. More... | |
static bool | assignComponentTopology (TopologyRefiner &newRefiner, MESH const &mesh) |
Specify the relationships between vertices, faces, etc. ie the face-vertices, vertex-faces, edge-vertices, etc. More... | |
static bool | assignComponentTags (TopologyRefiner &newRefiner, MESH const &mesh) |
(Optional) Specify edge or vertex sharpness or face holes More... | |
static bool | assignFaceVaryingTopology (TopologyRefiner &newRefiner, MESH const &mesh) |
(Optional) Specify face-varying data per face More... | |
static void | reportInvalidTopology (TopologyError errCode, char const *msg, MESH const &mesh) |
(Optional) Control run-time topology validation and error reporting More... | |
Base level assembly methods to be used within resizeComponentTopology() | |
These methods specify sizes of various quantities, e.g. the number of vertices, faces, face-vertices, etc. The number of the primary components (vertices, faces and edges) should be specified prior to anything else that references them (e.g. we need to know the number of faces before specifying the vertices for that face. If a full boundary representation with all neighborhood information is not available, e.g. faces and vertices are avaible but not edges, only the face-vertices should be specified. The remaining topological relationships will be constructed later in the assembly (though at greater cost than if specified directly). The sizes for topological relationships between individual components should be specified in order, i.e. the number of face-vertices for each successive face. | |
static void | setNumBaseVertices (TopologyRefiner &newRefiner, int count) |
Specify the number of vertices to be accomodated. More... | |
static void | setNumBaseFaces (TopologyRefiner &newRefiner, int count) |
Specify the number of faces to be accomodated. More... | |
static void | setNumBaseEdges (TopologyRefiner &newRefiner, int count) |
Specify the number of edges to be accomodated. More... | |
static void | setNumBaseFaceVertices (TopologyRefiner &newRefiner, Index f, int count) |
Specify the number of vertices incident each face. More... | |
static void | setNumBaseEdgeFaces (TopologyRefiner &newRefiner, Index e, int count) |
Specify the number of faces incident each edge. More... | |
static void | setNumBaseVertexFaces (TopologyRefiner &newRefiner, Index v, int count) |
Specify the number of faces incident each vertex. More... | |
static void | setNumBaseVertexEdges (TopologyRefiner &newRefiner, Index v, int count) |
Specify the number of edges incident each vertex. More... | |
static int | getNumBaseVertices (TopologyRefiner const &newRefiner) |
static int | getNumBaseFaces (TopologyRefiner const &newRefiner) |
static int | getNumBaseEdges (TopologyRefiner const &newRefiner) |
Base level assembly methods to be used within assignComponentTopology() | |
These methods populate relationships between components – in much the same manner as they are inspected once the TopologyRefiner is completed. An array of fixed size is returned from these methods and its entries are to be populated with the appropriate indices for its neighbors. At minimum, the vertices for each face must be specified. As noted previously, the remaining relationships will be constructed as needed. The ordering of entries in these arrays is important – they are expected to be ordered counter-clockwise for a right-hand orientation. Non-manifold components must be explicitly tagged as such and they do not require the ordering expected of manifold components. Special consideration must also be given to certain non-manifold situations, e.g. the same edge cannot appear twice in a face, and a degenerate edge (same vertex at both ends) can only have one incident face. Such considerations are typically achievable by creating multiple instances of an edge. So while there will always be a one-to-one correspondence between vertices and faces, the same is not guaranteed of edges in certain non-manifold circumstances. | |
static IndexArray | getBaseFaceVertices (TopologyRefiner &newRefiner, Index f) |
Assign the vertices incident each face. More... | |
static IndexArray | getBaseFaceEdges (TopologyRefiner &newRefiner, Index f) |
Assign the edges incident each face. More... | |
static IndexArray | getBaseEdgeVertices (TopologyRefiner &newRefiner, Index e) |
Assign the vertices incident each edge. More... | |
static IndexArray | getBaseEdgeFaces (TopologyRefiner &newRefiner, Index e) |
Assign the faces incident each edge. More... | |
static IndexArray | getBaseVertexFaces (TopologyRefiner &newRefiner, Index v) |
Assign the faces incident each vertex. More... | |
static IndexArray | getBaseVertexEdges (TopologyRefiner &newRefiner, Index v) |
Assign the edges incident each vertex. More... | |
static LocalIndexArray | getBaseVertexFaceLocalIndices (TopologyRefiner &newRefiner, Index v) |
Assign the local indices of a vertex within each of its incident faces. More... | |
static LocalIndexArray | getBaseVertexEdgeLocalIndices (TopologyRefiner &newRefiner, Index v) |
Assign the local indices of a vertex within each of its incident edges. More... | |
static LocalIndexArray | getBaseEdgeFaceLocalIndices (TopologyRefiner &newRefiner, Index e) |
Assign the local indices of an edge within each of its incident faces. More... | |
static void | populateBaseLocalIndices (TopologyRefiner &newRefiner) |
Determine all local indices by inspection (only for pure manifold meshes) More... | |
static void | setBaseEdgeNonManifold (TopologyRefiner &newRefiner, Index e, bool b) |
Tag an edge as non-manifold. More... | |
static void | setBaseVertexNonManifold (TopologyRefiner &newRefiner, Index v, bool b) |
Tag a vertex as non-manifold. More... | |
Base level assembly methods to be used within assignComponentTags() | |
These methods are used to assign edge or vertex sharpness, for tagging faces as holes, etc. Unlike topological assignment, only those components that posses a feature of interest need be explicitly assigned. Since topological construction is largely complete by this point, a method is availble to identify an edge for sharpness assignment given a pair of vertices. | |
static Index | findBaseEdge (TopologyRefiner const &newRefiner, Index v0, Index v1) |
Identify an edge to be assigned a sharpness value given a vertex pair. More... | |
static void | setBaseEdgeSharpness (TopologyRefiner &newRefiner, Index e, float sharpness) |
Assign a sharpness value to a given edge. More... | |
static void | setBaseVertexSharpness (TopologyRefiner &newRefiner, Index v, float sharpness) |
Assign a sharpness value to a given vertex. More... | |
static void | setBaseFaceHole (TopologyRefiner &newRefiner, Index f, bool isHole) |
Tag a face as a hole. More... | |
Base level assembly methods to be used within assignFaceVaryingTopology() | |
Face-varying data is assigned to faces in much the same way as face-vertex topology is assigned – indices for face-varying values are assigned to the corners of each face just as indices for vertices were assigned. Independent sets of face-varying data is stored in channels. The identifier of each channel (an integer) is expected whenever referring to face-varying data in any form. | |
static int | createBaseFVarChannel (TopologyRefiner &newRefiner, int numValues) |
Create a new face-varying channel with the given number of values. More... | |
static int | createBaseFVarChannel (TopologyRefiner &newRefiner, int numValues, Sdc::Options const &fvarOptions) |
Create a new face-varying channel with the given number of values and independent interpolation options. More... | |
static IndexArray | getBaseFaceFVarValues (TopologyRefiner &newRefiner, Index face, int channel=0) |
Assign the face-varying values for the corners of each face. More... | |
Static Protected Member Functions inherited from TopologyRefinerFactoryBase | |
static bool | prepareComponentTopologySizing (TopologyRefiner &refiner) |
static bool | prepareComponentTopologyAssignment (TopologyRefiner &refiner, bool fullValidation, TopologyCallback callback, void const *callbackData) |
static bool | prepareComponentTagsAndSharpness (TopologyRefiner &refiner) |
static bool | prepareFaceVaryingChannels (TopologyRefiner &refiner) |
Factory for constructing TopologyRefiners from specific mesh classes.
TopologyRefinerFactory<MESH> is the factory class template to convert an instance of TopologyRefiner from an arbitrary mesh class. While a class template, the implementation is not (cannot) be complete, so specialization of a few methods is required (it is a stateless factory, so no instance and only static methods).
This template provides both the interface and high level assembly for the construction of the TopologyRefiner instance. The high level construction executes a specific set of operations to convert the client's MESH into TopologyRefiner. This set of operations combines methods independent of MESH from the base class with those specialized here for class MESH.
Definition at line 44 of file topologyRefiner.h.
|
protected |
Definition at line 116 of file topologyRefinerFactory.h.
|
staticprotected |
(Optional) Specify edge or vertex sharpness or face holes
Definition at line 656 of file topologyRefinerFactory.h.
|
staticprotected |
Specify the relationships between vertices, faces, etc. ie the face-vertices, vertex-faces, edge-vertices, etc.
Definition at line 588 of file topologyRefinerFactory.h.
|
staticprotected |
(Optional) Specify face-varying data per face
Definition at line 640 of file topologyRefinerFactory.h.
|
static |
Instantiates a TopologyRefiner from client-provided topological representation.
If only the face-vertices topological relationships are specified with this factory, edge relationships have to be inferred, which requires additional processing. If the client topological rep can provide this information, it is highly recommended to do so.
mesh | Client's topological representation (or a converter) |
options | Options controlling the creation of the TopologyRefiner |
Definition at line 318 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Create a new face-varying channel with the given number of values.
Definition at line 525 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Create a new face-varying channel with the given number of values and independent interpolation options.
Definition at line 530 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Identify an edge to be assigned a sharpness value given a vertex pair.
Definition at line 485 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Assign the local indices of an edge within each of its incident faces.
Definition at line 469 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Assign the faces incident each edge.
Definition at line 453 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Assign the vertices incident each edge.
Definition at line 448 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Assign the edges incident each face.
Definition at line 443 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Assign the face-varying values for the corners of each face.
Definition at line 537 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Assign the vertices incident each face.
Definition at line 438 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Assign the local indices of a vertex within each of its incident edges.
Definition at line 479 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Assign the edges incident each vertex.
Definition at line 463 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Assign the local indices of a vertex within each of its incident faces.
Definition at line 474 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Assign the faces incident each vertex.
Definition at line 458 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Definition at line 406 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Definition at line 401 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Definition at line 411 of file topologyRefinerFactory.h.
|
staticprotected |
Definition at line 336 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Determine all local indices by inspection (only for pure manifold meshes)
Definition at line 491 of file topologyRefinerFactory.h.
|
staticprotected |
(Optional) Control run-time topology validation and error reporting
Definition at line 673 of file topologyRefinerFactory.h.
|
staticprotected |
Specify the number of vertices, faces, face-vertices, etc.
Definition at line 548 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Tag an edge as non-manifold.
Definition at line 497 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Assign a sharpness value to a given edge.
Definition at line 508 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Tag a face as a hole.
Definition at line 518 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Tag a vertex as non-manifold.
Definition at line 502 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Assign a sharpness value to a given vertex.
Definition at line 513 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Specify the number of faces incident each edge.
Definition at line 422 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Specify the number of edges to be accomodated.
Definition at line 390 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Specify the number of faces to be accomodated.
Definition at line 385 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Specify the number of vertices incident each face.
Definition at line 417 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Specify the number of edges incident each vertex.
Definition at line 432 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Specify the number of faces incident each vertex.
Definition at line 427 of file topologyRefinerFactory.h.
|
inlinestaticprotected |
Specify the number of vertices to be accomodated.
Definition at line 395 of file topologyRefinerFactory.h.