00001 /*: 00002 ** surf.cpp 00003 ** 00004 ** Copyright (C) 2004 Luiz Velho, Hélio Lopes, Esdras Medeiros. 00005 */ 00006 #include "mesh.h" 00007 00008 using namespace Mesh; 00009 00013 Surf::~Surf() 00014 { 00015 for (VertexIter p = vc_.begin(); p != vc_.end(); p++) 00016 delete *p; 00017 vc_.clear(); 00018 for (EdgeIter e = ec_.begin(); e != ec_.end(); e++) 00019 delete *e; 00020 ec_.clear(); 00021 for (FaceIter f = fc_.begin(); f != fc_.end(); f++) 00022 delete *f; 00023 fc_.clear(); 00024 bc_.clear(); 00025 } 00026 00033 Hedge *Surf::add_new_edge(Vertex *v0, Vertex *v1) 00034 { 00035 Edge *e = new Edge(v0, v1); 00036 add_edge(e); 00037 return e->hedge(0); 00038 } 00039 00044 Vertex *Surf::add_new_vertex(Point *p) 00045 { 00046 Vertex *v = new Vertex(p); 00047 add_vertex(v); 00048 return v; 00049 } 00050 00057 Hedge* Surf::lookup_hedge(Point *p0, Point *p1) 00058 { 00059 for (EdgeIter e = ec_.begin(); e != ec_.end(); e++) { 00060 Hedge* h = (*e)->hedge(0); 00061 if (h->org()->p() == p0 && h->dst()->p() == p1) return h; 00062 if (h->org()->p() == p1 && h->dst()->p() == p0) return h->mate(); 00063 } 00064 return NULL; 00065 } 00066 00071 void Surf::transfer_cells(Surf *s2) 00072 { 00073 for (VertexIter p = s2->verts_begin(); p != s2->verts_end(); p++) 00074 add_vertex(*p); 00075 for (EdgeIter e = s2->edges_begin(); e != s2->edges_end(); e++) 00076 add_edge(*e); 00077 for (FaceIter f = s2->faces_begin(); f != s2->faces_end(); f++) 00078 add_face(*f); 00079 for (EdgeIter e = s2->bdries_begin(); e != s2->bdries_end(); e++) 00080 add_bdry(*e); 00081 } 00082 00083 00084 00085 00086