Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

MeshJoin.h

Go to the documentation of this file.
00001 /*
00002     File:       MeshJoin.h
00003     
00004     Function:   Connect up adjacent triangles in a shared-vertex mesh.
00005                 Sets the 'nbFace' and 'nbEdge' fields correctly for
00006                 groups of triangles belonging to the same surface.
00007 
00008                 This representation consists of
00009                     + faces with a fixed number of edges
00010                     + neighbour edge pointers
00011                         for each edge of the face, you can find the corresponding
00012                         edge of the neighbouring face.
00013 
00014                 This is not as general as a full winged-edge structure, but
00015                 more space efficient in a mesh that will only have triangles
00016                 (or quads in our case). Drawbacks:
00017                     + can't handle input meshes with t-intersections
00018                     + can't get from vertex to neighbouring faces
00019                         can solve by keeping 1:1 vertex->face list
00020     
00021     Notes:      Requires triangles to share a single vertex array
00022                 
00023                 Calling conventions: 
00024                     Call Init() with the number of vertices in the model
00025                     Call StartGroup() for each surface group
00026                     Call AddTriangle for all faces in that group
00027                     Call EndGroup() when done.
00028                     Repeat the last 3 calls as necessary,  then call Finished().
00029 
00030     Author:     Andrew Willmott, 1997
00031 */
00032 
00033 #ifndef __MeshJoin__
00034 #define __MeshJoin__
00035 
00036 /*
00037     Data structures are face-orientated: each triangle
00038     contains three neighbour fields, which point to
00039     the neighbouring triangle along each edge, as well
00040     as an edgeIndex, which tells us which edge of the
00041     neighbour triangle abuts ours.
00042 
00043     One of these (face, edgeIndex) pairs defines
00044     an edge. As in, edge 'edgeIndex' of face 'face'.
00045 */
00046 
00047 // For HierElems ...
00048 
00049 #include "RadMesh.h"
00050 
00051 typedef IndexList           EdgeList;
00052 typedef Byte                Edge;
00053 typedef NbRadElem           Face;
00054 typedef Face                *FacePtr;
00055 
00056 // the rest of the code is more general, though EdgesMatch() will
00057 // require customisation.
00058 
00059 class MeshJoin
00060 {
00061 public:
00062     Void        Init(Int numVertices);
00063     Void        StartGroup();
00064     Void        AddTriangle(Face *addFace);
00065     Void        EndGroup();
00066     Int         Finished();
00067     
00068 protected:
00069     Bool        EdgesMatch(
00070                         FacePtr face1,
00071                         Edge    edge1,
00072                         FacePtr face2,
00073                         Edge    edge2
00074                     );
00075     Void        SetFaceChainVertices(Face *f, Int edge, Int i);
00076 
00077     FacePtr     *vertexFaces;
00078     Edge        *vertexEdges;
00079     Int         numVertices;
00080     Int         surfaceVertices;
00081     
00082     // together these define the start of a linked list of edges
00083     // for each vertex.
00084 };
00085 
00086 #endif
00087 

Generated at Sat Aug 5 00:26:52 2000 for Radiator by doxygen 1.1.0 written by Dimitri van Heesch, © 1997-2000