Home

INDEXED_MESH_MANAGER Class Reference
[Faceting]

This class provides an example of a mesh manager using the indexed protocol. More...

#include <idx_mm.hxx>

Inheritance diagram for INDEXED_MESH_MANAGER:

Inheritance graph
[legend]
Collaboration diagram for INDEXED_MESH_MANAGER:

Collaboration graph
[legend]

List of all members.

Public Member Functions

virtual void AddNumSingleTris (int _NumSingleTris)
 Called by the faceter, informing the manager about the number of strips with single triangles added for each mesh encountered.
virtual void AddNumStrips (int _NumStrips)
 Called by the faceter, informing the manager about the number of strips added for each mesh encountered.
virtual void announce_coordinate_polygon_node (int ipoly, int i, const SPApar_pos &uv, const SPAposition &iX, const SPAunit_vector &N)
 Announces one node on a polygon.
virtual void announce_counts (int npoly, int nnode, int nref)
 Announces the number of polygons, nodes, and node references by polygons.
virtual void announce_edge_indices (ENTITY *coedge, void *idV0, void *idE0, void *idEN, void *idV1)
 Announces an edge with its coedge and node indices.
virtual void * announce_global_node (int inode, FACE *face, const SPAposition &iX, const SPApar_pos &uv)
 Announces a node on the interior of a model FACE with its surface parameters.
virtual void * announce_global_node (int inode, EDGE *ed, const SPAposition &iX, double tpar)
 Announces a node on the interior of a model EDGE with its curve parameter.
virtual void * announce_global_node (int inode, VERTEX *ver, const SPAposition &iX)
 Announces a node on a model VERTEX.
virtual void * announce_indexed_node (int inode, const SPApar_pos &uv, const SPAposition &iX, const SPAunit_vector &N)
 Announces an indexed node.
virtual void * announce_indexed_polyedge (int ipoly, int i, void *mate)
 Announces an indexed polyedge whose "mate" has been previously announced.
virtual void * announce_indexed_polyedge (int ipoly, int i)
 Announces an indexed polyedge whose "mate" has not previously been announced.
virtual void * announce_indexed_polyedge (int ipoly, int i, ENTITY *ce)
 Announces an indexed polyedge that lies on a model edge.
virtual void announce_indexed_polynode (ENTITY *E, int ipoly, int i, void *id, const double &tpar, const SPApar_pos &uv, const SPAposition &iX, const SPAunit_vector &N)
 Announces an indexed polynode and stores the data into the polygon.
virtual void announce_indexed_polynode (int ipoly, int i, void *id)
 Announces an indexed polynode and stores the data into the polygon.
virtual void announce_indexed_polynode (ENTITY *E, int ipoly, int i, void *id)
 Announces an indexed polynode and stores the data into the polygon.
virtual void announce_polygon_model_face (ENTITY *ent)
 Announces the FACE pointer for oncoming polygons.
virtual void begin_global_mesh_output (ENTITY *ent)
 Announces the beginning of the output of a global mesh.
virtual void begin_mesh_output (ENTITY *entity, ENTITY *app_ref, ENTITY *format)
 Announces the beginning of the output of a mesh.
virtual void check_applicable_format_entity (ENTITY *entity, ENTITY *&format)
 Before starting facet construction with refinements, the faceter offers the mesh manager the opportunity to revise the vertex template.
virtual void check_applicable_refinement (ENTITY *entity, AF_SURF_MODE mode, REFINEMENT *&R)
 Before starting facet construction with refinements, the faceter offers the mesh manager the opportunity to revise the refinement.
virtual AF_EDGE_DIRECTIVE check_edge_refinement (EDGE *E, double &dmax, double &hmax, double &dNmax, int nuse, int nf)
 Determine if the faceter should recompute the facets for an edge.
virtual void end_coordinate_polygon (int ipoly)
 Announces the completion of the output of a polygon.
virtual void end_global_mesh_output (ENTITY *ent)
 Announces the completion of the output of a global mesh.
virtual void end_indexed_polygon (int ipoly)
 Announces the completion of the output of a polygon.
virtual void end_mesh_output (ENTITY *entity, ENTITY *app_ref, ENTITY *format)
 This function is called to announce the end of mesh output for a face

.
virtual MESH_APP_ID get_app_id ()
 Returns the application identification number of the mesh.
virtual MESH_USER_ID get_user_id ()
 Returns the user identification number of the mesh.
virtual int GetNumSingleTris () const
 Returns the number of strips containing only one triangle in all meshes.
virtual int GetNumStrips () const
 Returns the total number of strips in all meshes (includes single triangle strips).
 INDEXED_MESH_MANAGER ()
 C++ constructor, creates an INDEXED_MESH_MANAGER.
INDEXED_MESHmesh () const
 Returns the current mesh being constructed.
virtual logical need_approx_counts ()
 Provides an approximate count of polygons and nodes and number of references to nodes.
virtual logical need_coedge_pointers_on_polyedges ()
 Used with the indexed protocol to flag coedge pointers are needed for nodes lying on edges.
virtual logical need_coordinate_polygons ()
 If this function returns TRUE, the data will be announced in the coordinate protocol.
virtual logical need_counts ()
 Used with the coordinate and indexed protocols to flag counts are needed before the polygon data is output.
virtual logical need_degenerate_triangles () const
 Some applications need degenerate triangles to be topologically correct.
virtual logical need_duplicate_indexed_nodes_at_singularities ()
 Make this method return TRUE if multiple nodes are desired at singularities to get multiple UVs.
virtual logical need_duplicate_indexed_nodes_on_surface_seams ()
 This method specifies if the user wants duplicate nodes where the surface uv's differ at the same position on the surface.
virtual logical need_edge_grading (double &mu)
 If this function returns TRUE, there is a second pass through the model to further subdivide edges so that consecutive faceted edge lengths have controlled size relationships.
virtual logical need_edge_grading_on_face (FACE *F, REFINEMENT *R, double &mu)
 If this function returns TRUE, edge grading is applied one face at a time during the edge grading pass.
virtual logical need_edge_indices ()
 If this function returns TRUE, then the model edges will be announced with the node indices.
virtual logical need_global_indexed_polygons ()
 If this function returns TRUE, the facets will be output with the global-indexed protocol.
virtual logical need_indexed_polyedges ()
 If this function returns TRUE, then polyedges will be announced after polynodes.
virtual logical need_indexed_polygons ()
 If this function returns TRUE, the indexed protocol is turned on.
virtual logical need_indexed_polynode_with_data ()
 Used with the indexed protocol to flag requested data.
virtual logical need_precount_of_global_indexed_polygons ()
 If this function returns TRUE, the number of polygons, nodes, and node references by polygons are announced before other output.
virtual void * null_node_id ()
 Returns the node id value that is guaranteed to be invalid.
int NumPolygon () const
 Returns the total number of polygons in the mesh.
int NumPolyNode () const
 Returns the number of polygon nodes in the mesh.
int NumVertex () const
 Returns the number of vertices in the mesh.
virtual MESH_MANAGER_SEARCH_ORDER query_search_order ()
 Returns the order of how the internal mesh of the faceter should be searched to provide output.
virtual void reannounce_counts (int npoly, int nnode, int npolynode)
 This is called to reannounce the exact number of nodes and polygons that were already announced.
virtual void save_global_mesh_output (ENTITY *ent)
 Signals the save of a global-indexed mesh.
virtual void save_mesh_output (ENTITY *entity, ENTITY *app_ref, ENTITY *format)
 This function attaches the mesh to the entity thru ATTRIB_EYE_ATTACHED_MESH attribute.
virtual void set_app_id (MESH_APP_ID appid)
 Specifies the application identification number of the mesh.
virtual void set_search_order (MESH_MANAGER_SEARCH_ORDER mmso)
 Sets the order of how the internal mesh of the faceter should be searched to provide output.
virtual void set_user_id (MESH_USER_ID userid)
 Specifies the user identification number of the mesh.
void SetTransform (const SPAtransf *trans)
 Sets the transformation to be applied to nodes.
virtual void start_coordinate_polygon (int ipoly, int nnode)
 Announces the beginning of the output of a new polygon.
virtual void start_indexed_polygon (int ipoly, int npolynode, int ishare=-2)
 A polygon starts and adds it to the mesh.
virtual void start_shareable_coordinate_polygon (int ipoly, int nnode, int i)
 Announces the beginning of the output of a new shareable polygon.
virtual void start_shareable_indexed_polygon (int ipoly, int npolynode, int ishare)
 Announces the beginning of the output of a new shareable polygon.
virtual ~INDEXED_MESH_MANAGER ()
 C++ destructor, deletes an INDEXED_MESH_MANAGER.

Protected Member Functions

void sequence_error (char *s)
 Function to print an error message.

Protected Attributes

int m_nNumPolygon
 Number of polygons in the mesh.
int m_nNumPolyNode
 Number of polygon nodes in the mesh.
int m_nNumVertex
 Number of vertices in the mesh.
INDEXED_MESHm_pMesh
 Pointer to the INDEXED_MESH.
const SPAtransfm_pTransform
 Transformation to apply to the nodes of the mesh.
MESH_MANAGER_SEARCH_ORDER mmso
 Storage for MESH_MANAGER_SEARCH_ORDER.
int NumSingleTris
 Number of Single Triangles.
int NumStrips
 Number of tri strips.
VERTEX_TEMPLATEvertex_template
 Vertex template defining data attached to node.


Detailed Description

This class provides an example of a mesh manager using the indexed protocol.



Role : INDEXED_MESH_MANAGER constructs INDEXED_MESHes from facet data that the faceter announces through MESH_MANAGER.

See also:
INDEXED_MESH

Constructor & Destructor Documentation

INDEXED_MESH_MANAGER::INDEXED_MESH_MANAGER (  ) 

C++ constructor, creates an INDEXED_MESH_MANAGER.

virtual INDEXED_MESH_MANAGER::~INDEXED_MESH_MANAGER (  )  [virtual]

C++ destructor, deletes an INDEXED_MESH_MANAGER.


Member Function Documentation

virtual void INDEXED_MESH_MANAGER::AddNumSingleTris ( int  _NumSingleTris  )  [inline, virtual]

Called by the faceter, informing the manager about the number of strips with single triangles added for each mesh encountered.

Reimplemented from MESH_MANAGER.

virtual void INDEXED_MESH_MANAGER::AddNumStrips ( int  _NumStrips  )  [inline, virtual]

Called by the faceter, informing the manager about the number of strips added for each mesh encountered.

Reimplemented from MESH_MANAGER.

virtual void MESH_MANAGER::announce_coordinate_polygon_node ( int  ipoly,
int  i,
const SPApar_pos uv,
const SPAposition iX,
const SPAunit_vector N 
) [virtual, inherited]

Announces one node on a polygon.



Role: Used with the coordinate protocol.

Parameters:
ipoly 0-based polygon index.
i 0-based node index within this polygon.
uv surface parameter.
iX point.
N normal.

Reimplemented in POLYGON_POINT_MESH_MANAGER.

virtual void INDEXED_MESH_MANAGER::announce_counts ( int  npoly,
int  nnode,
int  nref 
) [virtual]

Announces the number of polygons, nodes, and node references by polygons.



Role : Creates a mesh with the proper storage.

Parameters:
npoly polygon count.
nnode node count.
nref node reference count.

Reimplemented from MESH_MANAGER.

virtual void MESH_MANAGER::announce_edge_indices ( ENTITY coedge,
void *  idV0,
void *  idE0,
void *  idEN,
void *  idV1 
) [virtual, inherited]

Announces an edge with its coedge and node indices.



Role: The starting and ending vertex nodes define the end points of the edge. The first and last interior nodes define a sequential range of nodes in between.

This method is called if need_edge_indices returns TRUE. Used with the indexed and global-indexed protocols.

Parameters:
coedge coedge of current face.
idV0 starting vertex node.
idE0 first interior node.
idEN last interior node.
idV1 ending vertex node.

virtual void* MESH_MANAGER::announce_global_node ( int  inode,
FACE face,
const SPAposition iX,
const SPApar_pos uv 
) [virtual, inherited]

Announces a node on the interior of a model FACE with its surface parameters.



Role: Used with the global-indexed protocol.

A note on overloading this function in classes derived from MESH_MANAGER: The value returned by this function is critical. The returned value must be a unique identifier for this node. It will most likely be the memory address or index of this node in the application's data structure. This unique identifier will be passed as an input argument to announce_indexed_polynode.

Parameters:
inode 0-based node index.
face model face.
iX node coordinates.
uv surface parameters.

Reimplemented in GLOBAL_MESH_MANAGER, PE_MESH_MANAGER, and STL_MESH_MANAGER.

virtual void* MESH_MANAGER::announce_global_node ( int  inode,
EDGE ed,
const SPAposition iX,
double  tpar 
) [virtual, inherited]

Announces a node on the interior of a model EDGE with its curve parameter.



Role: Used with the global-indexed protocol.

A note on overloading this function in classes derived from MESH_MANAGER: The value returned by this function is critical. The returned value must be a unique identifier for this node. It will most likely be the memory address or index of this node in the application's data structure. This unique identifier will be passed as an input argument to announce_indexed_polynode.

Parameters:
inode 0-based node index.
ed model edge.
iX node coordinates.
tpar curve parameter value.

Reimplemented in GLOBAL_MESH_MANAGER, PE_MESH_MANAGER, and STL_MESH_MANAGER.

virtual void* MESH_MANAGER::announce_global_node ( int  inode,
VERTEX ver,
const SPAposition iX 
) [virtual, inherited]

Announces a node on a model VERTEX.



Role: Used with the global-indexed protocol.

A note on overloading this function in classes derived from MESH_MANAGER: The value returned by this function is critical. The returned value must be a unique identifier for this node. It will most likely be the memory address or index of this node in the application's data structure. This unique identifier will be passed as an input argument to announce_indexed_polynode.

Parameters:
inode 0-based node index.
ver model vertex.
iX node coordinates.

Reimplemented in GLOBAL_MESH_MANAGER, PE_MESH_MANAGER, and STL_MESH_MANAGER.

virtual void* INDEXED_MESH_MANAGER::announce_indexed_node ( int  inode,
const SPApar_pos uv,
const SPAposition iX,
const SPAunit_vector N 
) [virtual]

Announces an indexed node.



Parameters:
inode 0-based node index.
uv parametric coordinates.
iX cartesian coordinates.
N surface normal.

Reimplemented from MESH_MANAGER.

virtual void* MESH_MANAGER::announce_indexed_polyedge ( int  ipoly,
int  i,
void *  mate 
) [virtual, inherited]

Announces an indexed polyedge whose "mate" has been previously announced.



Role: If the "mate" of a polyedge has previously been announced, then this signature will be called. This signature allows an application to connect mates in its data structure. (Mates are coincident polyedges of adjacent facets.)

This method is called if need_indexed_polyedges returns TRUE. Used with the indexed protocol.

A note on overloading this function in classes derived from MESH_MANAGER: Because the mate of this polyedge has already been processed, the value returned by this signature is not critical; however, for consistency with other signatures of this method it typically returns a unique identifier for this polyedge. If the mate information is to be used, this signature must be used to connect or associate the two polyedges. The mate value will be the one returned by the mate's announce_indexed_polyedge call. It will most likely be the memory address or index of the mate in the application's data structure.

Parameters:
ipoly 0-based polygon index.
i 0-based node index within this polygon.
mate mate id is the value returned by the mate's announce_indexed_polyedge call.

virtual void* MESH_MANAGER::announce_indexed_polyedge ( int  ipoly,
int  i 
) [virtual, inherited]

Announces an indexed polyedge whose "mate" has not previously been announced.



Role: This method is called if need_indexed_polyedges returns TRUE. Used with the indexed protocol.

A note on overloading this function in classes derived from MESH_MANAGER: Because this polyedge does have a mate, the value returned by this signature is critical. If the mate information is to be used, the returned value must be a unique identifier for this polyedge. It will most likely be the memory address or index of this polyedge in the application's data structure.

Parameters:
ipoly 0-based polygon index.
i 0-based node index within the polygon.

virtual void* MESH_MANAGER::announce_indexed_polyedge ( int  ipoly,
int  i,
ENTITY ce 
) [virtual, inherited]

Announces an indexed polyedge that lies on a model edge.



Role: This signature announces that the polyedge immediately following this polynode lies along the indicated model coedge. (Therefore, it has no 'mate' polyedge.)

This method is called if need_indexed_polyedges returns TRUE. Used with the indexed protocol.

A note on overloading this function in classes derived from MESH_MANAGER: Because this polyedge does not have a mate, the value returned by this signature is not critical; however, for consistency with other signatures of this method it typically returns a unique identifier for this polyedge.

Parameters:
ipoly 0-based polygon index.
i 0-based node index within the polygon.
ce the coedge with which this polyedge coincides.

virtual void INDEXED_MESH_MANAGER::announce_indexed_polynode ( ENTITY E,
int  ipoly,
int  i,
void *  id,
const double &  tpar,
const SPApar_pos uv,
const SPAposition iX,
const SPAunit_vector N 
) [inline, virtual]

Announces an indexed polynode and stores the data into the polygon.



Role: This signature has a NULL implementation in the INDEXED_MESH_MANAGER.

Parameters:
E coedge along the edge following the polynode.
ipoly 0-based polygon index.
i 0-based node index within this polygon.
id node identifier as previously received from announce_indexed_node.
tpar if the node lies on the interior of a model edge, then returns the curve parameter value.
uv parametric coordinates.
iX cartesian coordinates.
N surface normal.

Reimplemented from MESH_MANAGER.

virtual void INDEXED_MESH_MANAGER::announce_indexed_polynode ( int  ipoly,
int  i,
void *  id 
) [virtual]

Announces an indexed polynode and stores the data into the polygon.



Parameters:
ipoly 0-based polygon index.
i 0-based node index within this polygon.
id node identifier as previously received from announce_indexed_node.

Reimplemented from MESH_MANAGER.

virtual void INDEXED_MESH_MANAGER::announce_indexed_polynode ( ENTITY E,
int  ipoly,
int  i,
void *  id 
) [inline, virtual]

Announces an indexed polynode and stores the data into the polygon.



Role: This signature has a NULL implementation in the INDEXED_MESH_MANAGER.

Parameters:
E coedge along the edge following the polynode.
ipoly 0-based polygon index.
i 0-based node index within this polygon.
id node identifier as previously received from announce_indexed_node.

Reimplemented from MESH_MANAGER.

virtual void MESH_MANAGER::announce_polygon_model_face ( ENTITY ent  )  [virtual, inherited]

Announces the FACE pointer for oncoming polygons.



Role: Used with all protocols.

Parameters:
ent model face pointer for the group of oncoming polygons.

Reimplemented in PE_MESH_MANAGER.

virtual void MESH_MANAGER::begin_global_mesh_output ( ENTITY ent  )  [virtual, inherited]

Announces the beginning of the output of a global mesh.



Role: The top level entity is the top level entity of the entire mesh, typically a BODY, but can be a LUMP, SHELL, or FACE. Used with the global-indexed protocol.

Parameters:
ent top level entity.

Reimplemented in PE_MESH_MANAGER.

virtual void INDEXED_MESH_MANAGER::begin_mesh_output ( ENTITY entity,
ENTITY app_ref,
ENTITY format 
) [virtual]

Announces the beginning of the output of a mesh.



Role : Cleans up old mesh if necessary.

Parameters:
entity faceted entity.
app_ref applicable refinement.
format output format (must be a VERTEX_TEMPLATE ).

Reimplemented from MESH_MANAGER.

virtual void MESH_MANAGER::check_applicable_format_entity ( ENTITY entity,
ENTITY *&  format 
) [virtual, inherited]

Before starting facet construction with refinements, the faceter offers the mesh manager the opportunity to revise the vertex template.



Role: While faceting a body, lump, or shell, check_applicable_format_entity is called at each member of the topological hierarchy, in top-down order.

The application can assign a different format to it. The output format entity can be a VERTEX_TEMPLATE for pre-1.7 compatibility.

Parameters:
entity entity with format.
format input/output format entity, a VERTEX_TEMPLATE.

virtual void MESH_MANAGER::check_applicable_refinement ( ENTITY entity,
AF_SURF_MODE  mode,
REFINEMENT *&  R 
) [virtual, inherited]

Before starting facet construction with refinements, the faceter offers the mesh manager the opportunity to revise the refinement.



Role: While faceting a body, lump, or shell, check_applicable_refinement is called at each member of the topological hierarchy, in top-down order, and for each possible surface type at each non-face member.

The refinement passed in is what the faceter found for the given surface type. The application can assign a different refinement to it.

Parameters:
entity entity with refinement.
mode refinement surface type.
R input/output refinement.

Reimplemented in STL_MESH_MANAGER.

virtual AF_EDGE_DIRECTIVE MESH_MANAGER::check_edge_refinement ( EDGE E,
double &  dmax,
double &  hmax,
double &  dNmax,
int  nuse,
int  nf 
) [virtual, inherited]

Determine if the faceter should recompute the facets for an edge.



Role: The parameters that control the faceting of an edge are provided. They have been determined to be the finest in the discretization controls of the incident faces. The default behavior of this function is not to change any value, and to request the faceting to be done if the number of incidents faces equals the total number of incident faces. If first number is smaller, it requests any existing faceting to be used.

Parameters:
E edge to check.
dmax chordal deviation.
hmax madimum chordal length.
dNmax maximal angle change between chords.
nuse number of incident faces being faceted.
nf total number of incident faces.

virtual void MESH_MANAGER::end_coordinate_polygon ( int  ipoly  )  [virtual, inherited]

Announces the completion of the output of a polygon.



Role: Used with the coordinate protocol.

Parameters:
ipoly 0-based polygon index.

virtual void MESH_MANAGER::end_global_mesh_output ( ENTITY ent  )  [virtual, inherited]

Announces the completion of the output of a global mesh.



Role: Used with the global-indexed protocol.

Parameters:
ent top level entity being faceted.

Reimplemented in PE_MESH_MANAGER, and STL_MESH_MANAGER.

virtual void MESH_MANAGER::end_indexed_polygon ( int  ipoly  )  [virtual, inherited]

Announces the completion of the output of a polygon.



Role: Used with the indexed and global-indexed protocols.

Parameters:
ipoly 0-based polygon index.

Reimplemented in GLOBAL_MESH_MANAGER, PE_MESH_MANAGER, and STL_MESH_MANAGER.

virtual void INDEXED_MESH_MANAGER::end_mesh_output ( ENTITY entity,
ENTITY app_ref,
ENTITY format 
) [virtual]

This function is called to announce the end of mesh output for a face

.

Parameters:
entity faceted entity.
app_ref applicable refinement.
format. output format entity.

Reimplemented from MESH_MANAGER.

virtual MESH_APP_ID MESH_MANAGER::get_app_id (  )  [inline, virtual, inherited]

Returns the application identification number of the mesh.

Reimplemented in PE_MESH_MANAGER.

virtual MESH_USER_ID MESH_MANAGER::get_user_id (  )  [inline, virtual, inherited]

Returns the user identification number of the mesh.

Reimplemented in PE_MESH_MANAGER.

virtual int INDEXED_MESH_MANAGER::GetNumSingleTris (  )  const [inline, virtual]

Returns the number of strips containing only one triangle in all meshes.

Reimplemented from MESH_MANAGER.

virtual int INDEXED_MESH_MANAGER::GetNumStrips (  )  const [inline, virtual]

Returns the total number of strips in all meshes (includes single triangle strips).

Reimplemented from MESH_MANAGER.

INDEXED_MESH* INDEXED_MESH_MANAGER::mesh (  )  const [inline]

Returns the current mesh being constructed.

virtual logical INDEXED_MESH_MANAGER::need_approx_counts (  )  [inline, virtual]

Provides an approximate count of polygons and nodes and number of references to nodes.

Reimplemented from MESH_MANAGER.

virtual logical MESH_MANAGER::need_coedge_pointers_on_polyedges (  )  [virtual, inherited]

Used with the indexed protocol to flag coedge pointers are needed for nodes lying on edges.



Role: If this function returns TRUE, each polygon node that lies on a model edge will be output together with the corresponding coedge. The default returns FALSE.

Reimplemented in PE_MESH_MANAGER.

virtual logical MESH_MANAGER::need_coordinate_polygons (  )  [virtual, inherited]

If this function returns TRUE, the data will be announced in the coordinate protocol.



Role: The default returns FALSE. Used with the coordinate protocol to flag requested data.

Reimplemented in POLYGON_POINT_MESH_MANAGER.

virtual logical MESH_MANAGER::need_counts (  )  [virtual, inherited]

Used with the coordinate and indexed protocols to flag counts are needed before the polygon data is output.



Role: If this function returns TRUE, the number of polygons, number of nodes, and number of polygon references of node are calculated and announced. If these are not needed, it should return FALSE. The default returns TRUE.

A note on efficiency: It is more efficient if the mesh manager does not pre-announce the counts. In other words, it is more efficient if this function returns a value of FALSE. This typically requires an application to use dynamically allocated arrays or linked lists to capture the announced polygons, nodes, and node references.

Reimplemented in LINKED_MESH_MANAGER.

virtual logical MESH_MANAGER::need_degenerate_triangles (  )  const [virtual, inherited]

Some applications need degenerate triangles to be topologically correct.



Role: Some applications do not need degenerate triangles and want as few triangles as possible. Default is FALSE, returning as few triangles as possible.

virtual logical INDEXED_MESH_MANAGER::need_duplicate_indexed_nodes_at_singularities (  )  [virtual]

Make this method return TRUE if multiple nodes are desired at singularities to get multiple UVs.

Reimplemented from MESH_MANAGER.

virtual logical INDEXED_MESH_MANAGER::need_duplicate_indexed_nodes_on_surface_seams (  )  [virtual]

This method specifies if the user wants duplicate nodes where the surface uv's differ at the same position on the surface.

Reimplemented from MESH_MANAGER.

virtual logical MESH_MANAGER::need_edge_grading ( double &  mu  )  [virtual, inherited]

If this function returns TRUE, there is a second pass through the model to further subdivide edges so that consecutive faceted edge lengths have controlled size relationships.



Role: The default return value is TRUE and the default value for mu is 2.0, which may be changed by the application or further modified for each individual face when the face is passed to need_edge_grading_on_face.

Parameters:
mu relative size of faceted edge lengths.

virtual logical MESH_MANAGER::need_edge_grading_on_face ( FACE F,
REFINEMENT R,
double &  mu 
) [virtual, inherited]

If this function returns TRUE, edge grading is applied one face at a time during the edge grading pass.



Role: On each pass, the faceter queries the mesh manager to determine the acceptable size ratio between the end chords of edges that share a common vertex on that face. Return FALSE to suppress grading on that face. The default implementation returns TRUE if and only if the face refinement has a grading, and it resets the aspect ratio mu to the grid_aspect_ratio setting of the refinement. If mu returned earlier by need_edge_grading is less than 1.5, it is reset to 1.5.

Parameters:
F face on which grading is to be done.
R refinement on the face.
mu aspect ratio returned by need_edge_grading.

virtual logical MESH_MANAGER::need_edge_indices (  )  [virtual, inherited]

If this function returns TRUE, then the model edges will be announced with the node indices.



Role: The default returns FALSE. Used with the indexed and global-indexed protocols to flag requested data.

virtual logical MESH_MANAGER::need_global_indexed_polygons (  )  [virtual, inherited]

If this function returns TRUE, the facets will be output with the global-indexed protocol.



Role: Used with the global-indexed protocol to flag requested data. The default returns FALSE.

Reimplemented in GLOBAL_MESH_MANAGER, PE_MESH_MANAGER, and STL_MESH_MANAGER.

virtual logical MESH_MANAGER::need_indexed_polyedges (  )  [virtual, inherited]

If this function returns TRUE, then polyedges will be announced after polynodes.



Role: Used with the indexed and global-indexed protocols. The default returns FALSE.

virtual logical INDEXED_MESH_MANAGER::need_indexed_polygons (  )  [virtual]

If this function returns TRUE, the indexed protocol is turned on.



Role : The default returns FALSE. Used with the indexed protocol to flag requested data.

Reimplemented from MESH_MANAGER.

virtual logical MESH_MANAGER::need_indexed_polynode_with_data (  )  [virtual, inherited]

Used with the indexed protocol to flag requested data.



Role: If this function returns TRUE, each polygon node will be output together with the corresponding coedge, coordinates and surface normal. The default returns FALSE.

Reimplemented in PE_MESH_MANAGER.

virtual logical MESH_MANAGER::need_precount_of_global_indexed_polygons (  )  [virtual, inherited]

If this function returns TRUE, the number of polygons, nodes, and node references by polygons are announced before other output.



Role: Used with the global-indexed protocol to flag requested data. The default returns FALSE.

Reimplemented in GLOBAL_MESH_MANAGER, PE_MESH_MANAGER, and STL_MESH_MANAGER.

virtual void* MESH_MANAGER::null_node_id (  )  [virtual, inherited]

Returns the node id value that is guaranteed to be invalid.



Role: Applications using indices will typically return -1. Applications using pointers will typically return 0. The default returns -1.

Reimplemented in GLOBAL_MESH_MANAGER, and STL_MESH_MANAGER.

int INDEXED_MESH_MANAGER::NumPolygon (  )  const [inline]

Returns the total number of polygons in the mesh.

int INDEXED_MESH_MANAGER::NumPolyNode (  )  const [inline]

Returns the number of polygon nodes in the mesh.

int INDEXED_MESH_MANAGER::NumVertex (  )  const [inline]

Returns the number of vertices in the mesh.

virtual MESH_MANAGER_SEARCH_ORDER INDEXED_MESH_MANAGER::query_search_order (  )  [virtual]

Returns the order of how the internal mesh of the faceter should be searched to provide output.



Role : The order specifies how successive polygons ought to share edges and can help the application to construct the desired data format. The default is to search triangle fans, triangle strips and quad strips.

Reimplemented from MESH_MANAGER.

virtual void MESH_MANAGER::reannounce_counts ( int  npoly,
int  nnode,
int  npolynode 
) [virtual, inherited]

This is called to reannounce the exact number of nodes and polygons that were already announced.



Role: This is useful if need_approx_counts returns TRUE.

Parameters:
npoly Number of polygons already announced.
nnode Number of nodes already announced.
npolynode Number of nodes when counted each time used by a polygon.

Reimplemented in PE_MESH_MANAGER.

virtual void MESH_MANAGER::save_global_mesh_output ( ENTITY ent  )  [virtual, inherited]

Signals the save of a global-indexed mesh.



Parameters:
ent top level entity being faceted.

Reimplemented in PE_MESH_MANAGER.

virtual void INDEXED_MESH_MANAGER::save_mesh_output ( ENTITY entity,
ENTITY app_ref,
ENTITY format 
) [virtual]

This function attaches the mesh to the entity thru ATTRIB_EYE_ATTACHED_MESH attribute.



Parameters:
entity faceted entity.
app_ref applicable refinement.
format output format entity.

Reimplemented from MESH_MANAGER.

void INDEXED_MESH_MANAGER::sequence_error ( char *  s  )  [protected]

Function to print an error message.

virtual void MESH_MANAGER::set_app_id ( MESH_APP_ID  appid  )  [inline, virtual, inherited]

Specifies the application identification number of the mesh.



Parameters:
appid id to use.

Reimplemented in PE_MESH_MANAGER.

virtual void INDEXED_MESH_MANAGER::set_search_order ( MESH_MANAGER_SEARCH_ORDER  mmso  )  [virtual]

Sets the order of how the internal mesh of the faceter should be searched to provide output.



Role : The order specifies how successive polygons ought to share edges and can help the application to construct the desired data format. The default is to search triangle fans, triangle strips and quad strips.

Reimplemented from MESH_MANAGER.

virtual void MESH_MANAGER::set_user_id ( MESH_USER_ID  userid  )  [inline, virtual, inherited]

Specifies the user identification number of the mesh.



Parameters:
userid id to use.

Reimplemented in PE_MESH_MANAGER.

void INDEXED_MESH_MANAGER::SetTransform ( const SPAtransf trans  ) 

Sets the transformation to be applied to nodes.



Parameters:
trans the transformation.

virtual void MESH_MANAGER::start_coordinate_polygon ( int  ipoly,
int  nnode 
) [virtual, inherited]

Announces the beginning of the output of a new polygon.



Role: Used with the coordinate protocol.

Parameters:
ipoly 0-based polygon index.
nnode number of nodes in this polygon.

Reimplemented in POLYGON_POINT_MESH_MANAGER.

virtual void INDEXED_MESH_MANAGER::start_indexed_polygon ( int  ipoly,
int  npolynode,
int  ishare = -2 
) [virtual]

A polygon starts and adds it to the mesh.



Parameters:
ipoly polygon index.
npolynode number of polygon node.
ishare info about which edge of previous polygon is shared with this one; -2 means not used.

Reimplemented from MESH_MANAGER.

virtual void MESH_MANAGER::start_shareable_coordinate_polygon ( int  ipoly,
int  nnode,
int  i 
) [virtual, inherited]

Announces the beginning of the output of a new shareable polygon.



Role: Used with the coordinate protocol.

Parameters:
ipoly 0-based polygon index.
nnode number of nodes in this polygon.
i shared index.

virtual void MESH_MANAGER::start_shareable_indexed_polygon ( int  ipoly,
int  npolynode,
int  ishare 
) [virtual, inherited]

Announces the beginning of the output of a new shareable polygon.



Role: Used with the indexed and global-indexed protocols.

Parameters:
ipoly 0-based polygon index.
npolynode number of nodes in this polygon.
ishare info about which edge of previous polygon is shared with this one.


Member Data Documentation

Number of polygons in the mesh.

Number of polygon nodes in the mesh.

Number of vertices in the mesh.

Pointer to the INDEXED_MESH.

Transformation to apply to the nodes of the mesh.

Storage for MESH_MANAGER_SEARCH_ORDER.

Number of Single Triangles.

Number of tri strips.

Vertex template defining data attached to node.