source: GTP/trunk/Lib/Geom/shared/GTGeometry/src/libs/AdjModel.h @ 1025

Revision 1025, 3.3 KB checked in by gumbau, 18 years ago (diff)

namespace simplif

Line 
1#ifndef NAUTILUS_ADJMODEL_INCLUDED // -*- C++ -*-
2#define NAUTILUS_ADJMODEL_INCLUDED
3
4/************************************************************************
5
6  Adjacency model representation.
7  $Id: AdjModel.h,v 1.7 1997/07/18 15:27:38 garland Exp $
8
9  Adapted from:
10     mlab: (Id: polymodel.h,v 1.13 1997/02/06 16:30:11 garland Exp)
11  via
12     simplif: (Id: polymodel.h,v 1.1 1997/02/11 15:21:29 garland Exp)
13
14 ************************************************************************/
15
16#include "AdjPrims.h"
17#include <gfx/SMF/smf.h>
18#include <vector>
19
20namespace simplif
21{
22        class Model : public SMF_Model
23        {
24        protected:
25                vert_buffer vertices;
26                edge_buffer edges;
27                face_buffer faces;
28                vec3_buffer normals; // SUS
29                vec2_buffer texcoords;
30
31        private:
32
33                void maybeFixFace(Face *);
34
35        public:
36                Model() {
37                        validVertCount = 0;
38                        validEdgeCount = 0;
39                        validFaceCount = 0;
40                }
41
42                ~Model(){
43                        for (int i=0; i<vertices.length(); i++)
44                                delete vertices[i];
45                        for (int i=0; i<edges.length(); i++)
46                                delete edges[i];
47                        for (int i=0; i<faces.length(); i++)
48                                delete faces[i];
49                }
50
51                Bounds bounds;
52
53                int validVertCount;
54                int validEdgeCount;
55                int validFaceCount;
56
57                //
58                // Basic model accessor functions
59                //
60                simplif::Vertex *vertex(int i) { return vertices(i); }
61                simplif::Vec3 & normal(int i){ return normals(i); }
62                simplif::Vec2 & texcoord(int i){ return texcoords(i); }
63                simplif::Edge *edge(int i) { return edges(i); }
64                simplif::Face *face(int i) { return faces(i); }
65
66                int vertCount() { return vertices.length(); }
67                int normCount() { return normals.length();  }
68                int texcoordCount() { return texcoords.length();  }
69                int edgeCount() { return edges.length();    }
70                int faceCount() { return faces.length();    }
71
72                vert_buffer& allVertices() { return vertices; }
73                edge_buffer& allEdges()    { return edges;    }
74                face_buffer& allFaces()    { return faces;    }
75
76                //
77                // Simplification primitives
78                //
79                Vertex   *newVertex(real x=0.0, real y=0.0, real z=0.0);
80                Edge     *newEdge(Vertex *,Vertex *);
81                Face *newFace(Vertex *, Vertex *, Vertex *);
82
83                void killVertex(Vertex *);
84                void killEdge(Edge *);
85                void killFace(Face *);
86
87                void reshapeVertex(Vertex *, real, real, real);
88                void remapVertex(Vertex *from, Vertex *to);
89
90                void contract(Vertex *v1, Vertex *v2, const Vec3& to,
91                          face_buffer& changed);
92
93                void contract(Vertex *v1,
94                          const vert_buffer& others,
95                          const Vec3& to,
96                          face_buffer& changed);
97
98
99                //
100                // Simplification convenience procedures
101                //
102                void removeDegeneracy(face_buffer& changed);
103                void contractionRegion(Vertex *v1, Vertex *v2, face_buffer& changed);
104                void contractionRegion(Vertex *v1,
105                                   const vert_buffer& vertices,
106                                   face_buffer& changed);
107
108                //
109                // SMF reader functions
110                //
111                int in_Vertex(const Vec3&);
112                int in_Normal(const Vec3&);
113                int in_TexCoord(const Vec2&);
114                int in_Face(int v1, int v2, int v3, int n1, int n2, int n3, int t1, int t2, int t3);
115                int miin_Face(int v1, int v2, int v3);
116
117/*      #ifdef SUPPORT_VCOLOR
118                int in_VColor(const Vec3&);
119        #endif
120        #ifdef SUPPORT_FCOLOR
121                int in_FColor(const Vec3&);
122        #endif
123*/
124                //
125                // Some random functions that are mostly temporary
126                //
127
128                Vec3 synthesizeNormal(Vertex *);
129        };
130}
131
132
133// NAUTILUS_ADJMODEL_INCLUDED
134#endif
Note: See TracBrowser for help on using the repository browser.