Home

LINKED_MESH_MANAGER Class Reference
[Faceting]

This class provides an example of a mesh manager using linked data. More...

#include <LinkedMeshManager.hxx>

Inheritance diagram for LINKED_MESH_MANAGER:

Inheritance graph
[legend]
Collaboration diagram for LINKED_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 npolynode)
 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 with its surface parameters, position, and normal.
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)
 The mesh is complete and updates polygon counts and fixes up parameters.
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).
 LINKED_MESH_MANAGER ()
 C++ constructor, creates an LINKED_MESH_MANAGER.
LINKED_MESHmesh () const
 Returns the current mesh be 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.
logical need_counts ()
 A callback that tells the faceter we need a count of polygons, polynodes, and nodes.
virtual logical need_degenerate_triangles () const
 Some applications need degenerate triangles to be topologically correct.
virtual logical need_duplicate_indexed_nodes_at_singularities ()
 This method is called if the user wants duplicate nodes where singularities have different normals for different facets, such as at the apex of a cone.
virtual logical need_duplicate_indexed_nodes_on_surface_seams ()
 This method is called 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 all meshes.
int NumPolyNode () const
 Returns the total number of polynodes in all meshes.
int NumVertex () const
 Returns the total number of polygons in all meshes.
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 is called to announce the end of mesh output for a face.
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)
 Announces the start of a polygon 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 ~LINKED_MESH_MANAGER ()
 C++ destructor, deletes an LINKED_MESH_MANAGER.

Protected Member Functions

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

Protected Attributes

int m_currFaceNodeCount
 Number of nodes in current face's meshes.
int m_currFacePolygonCount
 Number of polygons in current face's meshes.
int m_currFacePolyNodeCount
 Number of polygon nodes in current face's meshes.
LINKED_MESHm_pMesh
 Pointer to mesh.
const SPAtransfm_pTransform
 Transformation to apply to the nodes of the mesh.
int m_totalNodeCount
 Number of nodes in all meshes.
int m_totalPolygonCount
 Number of polygons in all meshes.
int m_totalPolyNodeCount
 Number of polygon nodes in all meshes.
MESH_MANAGER_SEARCH_ORDER mmso
 MESH_MANAGER_SEARCH_ORDER dictates order of polygons (for strips, fans, etc)
int NumSingleTris
 Number of Single Triangles.
int NumStrips
 Number of tri strips.


Detailed Description

This class provides an example of a mesh manager using linked data.

Role: The LINKED_MESH_MANAGER constructs a LINKED_MESH from facet data.

See also:
LINKED_MESH

Constructor & Destructor Documentation

LINKED_MESH_MANAGER::LINKED_MESH_MANAGER (  ) 

C++ constructor, creates an LINKED_MESH_MANAGER.

virtual LINKED_MESH_MANAGER::~LINKED_MESH_MANAGER (  )  [virtual]

C++ destructor, deletes an LINKED_MESH_MANAGER.


Member Function Documentation

virtual void LINKED_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 LINKED_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 MESH_MANAGER::announce_counts ( int  npoly,
int  nnode,
int  npolynode 
) [virtual, inherited]

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



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

Parameters:
npoly number of polygons.
nnode number of nodes.
npolynode number of node references.

Reimplemented in GLOBAL_MESH_MANAGER, SIMPLE_INDEXED_MESH_MANAGER, INDEXED_MESH_MANAGER, PE_MESH_MANAGER, and STL_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* LINKED_MESH_MANAGER::announce_indexed_node ( int  inode,
const SPApar_pos uv,
const SPAposition iX,
const SPAunit_vector N 
) [virtual]

Announces an indexed node with its surface parameters, position, and normal.

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 LINKED_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 LINKED_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 LINKED_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 LINKED_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 LINKED_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 LINKED_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 entity

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 LINKED_MESH_MANAGER::end_mesh_output ( ENTITY entity,
ENTITY app_ref,
ENTITY format 
) [virtual]

The mesh is complete and updates polygon counts and fixes up parameters.

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 LINKED_MESH_MANAGER::GetNumSingleTris (  )  const [inline, virtual]

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

Reimplemented from MESH_MANAGER.

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

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

Reimplemented from MESH_MANAGER.

LINKED_MESH* LINKED_MESH_MANAGER::mesh (  )  const [inline]

Returns the current mesh be constructed.

virtual logical LINKED_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.

logical LINKED_MESH_MANAGER::need_counts (  )  [inline, virtual]

A callback that tells the faceter we need a count of polygons, polynodes, and nodes.



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.

Reimplemented from 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 LINKED_MESH_MANAGER::need_duplicate_indexed_nodes_at_singularities (  )  [inline, virtual]

This method is called if the user wants duplicate nodes where singularities have different normals for different facets, such as at the apex of a cone.

Reimplemented from MESH_MANAGER.

virtual logical LINKED_MESH_MANAGER::need_duplicate_indexed_nodes_on_surface_seams (  )  [inline, virtual]

This method is called 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 LINKED_MESH_MANAGER::need_indexed_polygons (  )  [inline, 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 LINKED_MESH_MANAGER::NumPolygon (  )  const [inline]

Returns the total number of polygons in all meshes.

int LINKED_MESH_MANAGER::NumPolyNode (  )  const [inline]

Returns the total number of polynodes in all meshes.

Each vertex may be shared by n polygons, so there would be n polynodes for that vertex, one for each polygon.

int LINKED_MESH_MANAGER::NumVertex (  )  const [inline]

Returns the total number of polygons in all meshes.

virtual MESH_MANAGER_SEARCH_ORDER LINKED_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 LINKED_MESH_MANAGER::save_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.

void LINKED_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 LINKED_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 LINKED_MESH_MANAGER::SetTransform ( const SPAtransf trans  ) 

Sets the transformation to be applied to nodes.

Parameters:
trans 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 LINKED_MESH_MANAGER::start_indexed_polygon ( int  ipoly,
int  npolynode,
int  ishare = -2 
) [virtual]

Announces the start of a polygon 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 nodes in current face's meshes.

Number of polygons in current face's meshes.

Number of polygon nodes in current face's meshes.

Pointer to mesh.

Transformation to apply to the nodes of the mesh.

Number of nodes in all meshes.

Number of polygons in all meshes.

Number of polygon nodes in all meshes.

MESH_MANAGER_SEARCH_ORDER dictates order of polygons (for strips, fans, etc)

Number of Single Triangles.

Number of tri strips.