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

Revision 1526, 3.5 KB checked in by gumbau, 18 years ago (diff)

Updated modules to the new interface and the new simplification algorithm improvements.

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                       
26                        vert_buffer vertices;
27                        edge_buffer edges;
28                        face_buffer faces;
29                        vec3_buffer normals; // SUS
30                        vec2_buffer texcoords;
31
32                private:
33
34                        void maybeFixFace(Face *);
35
36                public:
37                       
38                        Model()
39                        {
40                                validVertCount = 0;
41                                validEdgeCount = 0;
42                                validFaceCount = 0;
43                        }
44
45                        ~Model()
46                        {
47                                for (int i=0; i<vertices.length(); i++)
48                                {
49                                        delete vertices[i];
50                                }
51
52                                for (int i=0; i<edges.length(); i++)
53                                {
54                                        delete edges[i];
55                                }
56
57                                for (int i=0; i<faces.length(); i++)
58                                {
59                                        delete faces[i];
60                                }
61                        }
62
63                        Bounds bounds;
64
65                        int validVertCount;
66                        int validEdgeCount;
67                        int validFaceCount;
68
69                        //
70                        // Basic model accessor functions
71                        //
72                        simplif::Vertex *vertex(int i) { return vertices(i); }
73                        simplif::Vec3 & normal(int i){ return normals(i); }
74                        simplif::Vec2 & texcoord(int i){ return texcoords(i); }
75                        simplif::Edge *edge(int i) { return edges(i); }
76                        simplif::Face *face(int i) { return faces(i); }
77
78                        int vertCount() { return vertices.length(); }
79                        int normCount() { return normals.length();  }
80                        int texcoordCount() { return texcoords.length();  }
81                        int edgeCount() { return edges.length();    }
82                        int faceCount() { return faces.length();    }
83
84                        vert_buffer& allVertices() { return vertices; }
85                        edge_buffer& allEdges()    { return edges;    }
86                        face_buffer& allFaces()    { return faces;    }
87
88                        //
89                        // Simplification primitives
90                        //
91                        Vertex   *newVertex(real x=0.0, real y=0.0, real z=0.0);
92                        Edge     *newEdge(Vertex *,Vertex *);
93                        Face *newFace(Vertex *, Vertex *, Vertex *);
94
95                        void killVertex(Vertex *);
96                        void killEdge(Edge *);
97                        void killFace(Face *);
98
99                        void reshapeVertex(Vertex *, real, real, real);
100                        void remapVertex(Vertex *from, Vertex *to);
101
102                        void contract(Vertex *v1, Vertex *v2, const Vec3& to,
103                                        face_buffer& changed);
104
105                        void contract(Vertex *v1,
106                                        const vert_buffer& others,
107                                        const Vec3& to,
108                                        face_buffer& changed);
109
110                        //
111                        // Simplification convenience procedures
112                        //
113                        void removeDegeneracy(face_buffer& changed);
114                        void contractionRegion(Vertex *v1, Vertex *v2, face_buffer& changed);
115                        void contractionRegion(Vertex *v1,
116                                        const vert_buffer& vertices,
117                                        face_buffer& changed);
118
119                        //
120                        // SMF reader functions
121                        //
122                        int in_Vertex(const Vec3&);
123                        int in_Normal(const Vec3&);
124                        int in_TexCoord(const Vec2&);
125
126                        int in_Face(int v1, int v2, int v3,
127                                                                        int n1, int n2, int n3,
128                                                                        int t1, int t2, int t3);
129
130                        int miin_Face(int v1, int v2, int v3);
131
132                        /*      #ifdef SUPPORT_VCOLOR
133                                        int in_VColor(const Vec3&);
134#endif
135#ifdef SUPPORT_FCOLOR
136int in_FColor(const Vec3&);
137#endif
138*/
139                        //
140                        // Some random functions that are mostly temporary
141                        //
142
143                        Vec3 synthesizeNormal(Vertex *);
144        };
145}
146
147// NAUTILUS_ADJMODEL_INCLUDED
148#endif
149
Note: See TracBrowser for help on using the repository browser.