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

AltStyle によって変換されたページ (->オリジナル) /