mesh.h
Go to the documentation of this file.00001
00006
00007
00008
#ifndef MESH_H
00009
#define MESH_H
00010
00011
namespace A48 {
00012
00021 class Surface {
00022
public:
00027
virtual void base_mesh(
int *np,
int **fcs,
int *nf) = 0;
00028
00032
virtual void sample(
int i,
Vertex* v) = 0;
00033
00037
virtual void sample(
Edge* e,
Vertex* v) = 0;
00038
00042
virtual void sample(
Face* f,
Vertex* v) = 0;
00043
00047
virtual float elenght(
Edge* e) = 0;
00048
00052
virtual float ref_rank(
Edge* e) = 0;
00053
00057
virtual float simpl_rank(
Vertex* v) = 0;
00058
00061
virtual Vertex*
new_vertex(
void) = 0;
00062
00065
virtual void del_vertex(
Vertex *v) = 0;
00066 };
00067
00068
00074 class Mesh {
00075 Surface *
surf_;
00076 FaceContainer
fc_;
00077 EdgeContainer
ec_;
00078 VertexContainer
vc_;
00079 MxHeap
sf_;
00080 MxHeap
rf_;
00081
00082
public:
00084
Mesh(
Surface *s);
00085
00087
~Mesh();
00088
00091 Surface*
surf() {
return surf_; };
00092
00095 VertexIter
verts_begin(){
return vc_.begin(); };
00096
00099 VertexIter
verts_end(){
return vc_.end(); };
00100
00103 int num_verts() {
return vc_.size(); };
00104
00107 EdgeIter
edges_begin() {
return ec_.begin(); };
00108
00111 EdgeIter
edges_end() {
return ec_.end(); };
00112
00115 int num_edges() {
return ec_.size(); };
00116
00119 FaceIter
faces_begin() {
return fc_.begin(); };
00120
00123 FaceIter
faces_end() {
return fc_.end(); };
00124
00127 int num_faces() {
return fc_.size(); };
00128
00130
void adapt_refine(
double t);
00131
00133
void adapt_simplify(
double t);
00134
00136
Vertex* refine(
Hedge* e);
00137
00139
Hedge* simplify(
Vertex* w);
00140
00142
Vertex* split(
Face* f);
00143
00145
Vertex* split(
Hedge* e);
00146
00148
Hedge* weld(
Vertex* w);
00149
00151
Hedge* flip(
Hedge *h);
00152
00153
private:
00154
00156
Vertex *
add_vertex(
void);
00157
00161 bool add_vertex(
Vertex *v)
00162 { std::pair<VertexIter, bool> r =
vc_.insert(v);
return r.second; };
00163
00166 void del_vertex(
Vertex* v) {
vc_.erase(v);
surf()->
del_vertex(v); };
00167
00169
Hedge *add_edge(
Vertex *v0,
Vertex *v1);
00170
00174 bool add_edge(
Edge *e)
00175 { std::pair<EdgeIter, bool> r =
ec_.insert(e);
return r.second;};
00176
00179 void del_edge(
Edge* e) {
ec_.erase(e);
delete(e); }
00180
00182
Face* add_face(
Hedge* e0,
Hedge* e1,
Hedge* e2);
00183
00187 bool add_face(
Face* f)
00188 { std::pair<FaceIter, bool> r =
fc_.insert(f);
return r.second;}
00189
00191 void del_face(
Face* f) {
fc_.erase(f);
delete(f); }
00192
00194
void link_mesh();
00195
00197
Vertex* bisect(
Hedge* e,
Hedge** el,
Hedge** er);
00198
00200
Hedge* bisect(
Face *f,
Hedge *e1,
Hedge *e2,
Hedge *el,
Hedge *er);
00201
00203
void new_front();
00204
00206
void update_ref_front(
Edge* e);
00207
00209
void update_ref_front(
Vertex* v);
00210
00212
void update_simpl_front(
Vertex* v);
00213
00215
void update_simpl_front(
Edge* e);
00216
00218
bool is_triquad(
void);
00219
00221
void make_triquad(
void);
00222
00224
void set_base_mesh(
int np,
int* tris,
int nf);
00225
00227
Hedge* get_hedge(
int i0,
int i1,
Vertex* verts[], HedgeMap* edges);
00228
00230
void put_face(
int i0,
int i1,
int i2,
Vertex* verts[], HedgeMap* edges);
00231 };
00232
00233
00234 }
00235
00236
#endif
Generated on Mon Oct 11 19:32:07 2004 for A48 by
1.3.7