mev.cpp

Go to the documentation of this file.
00001 /**
00002  *\file         mev.cpp
00003  *
00004  *\brief        subdivide edge cycle at a vertex.
00005  *
00006  *              make edge and vertex: subdivision the cycle of half edges emanating from a vertex; return the new half edge tailed at new vertex.
00007  *              the pair of half edges is either inserted as 2 consecutive half edges in a loop, or inserted separately into two loops of two faces.
00008  *
00009  *\image        html mev.jpg
00010  *
00011  *\author       Xianming Chen\n
00012  *              Computer Science Department\n
00013  *              University of Utah
00014  *
00015  *\date          16 Aug 2006\n
00016  *              Copyright (c) 2006, University of Utah
00017  */
00018 
00019 
00020 #include "euler.h"
00021 #include <cassert>
00022 #include <utility>
00023 using namespace std;
00024 
00025 
00026 namespace euler
00027 {
00028   /**
00029    * subdivide edge cycle (at p0=p1==p2) into 
00030    *   p0p+[e2, e1) at p0 (change in plance), and 
00031    *   pp0+[e1, e2) at p (as new edge cycle of new vertex).
00032    */
00033   edge_t* solid_t :: mev(edge_t* e1, edge_t* e2, point_t const& p)
00034   { 
00035     assert(e1->v == e2->v); 
00036     return mev(e1, e2, e1->l->f->s->new_vertex(p)); 
00037   }
00038 
00039 
00040   edge_t* solid_t :: mev(edge_t* e1, edge_t* e2, vertex_t* v)
00041   {
00042     pair<edge_t*, edge_t*> pr = 
00043       add_edge_pair(e1->v, e1,  
00044                     v, e2);
00045 
00046     // subdivide edge cycle by setting vertex of [e1, e2) to p.
00047     for(edge_t *&ne2 = pr.second, *e = pr.first->nxt; e != ne2; e = e->o->nxt)
00048     {
00049       e->v = ne2->v;
00050     }
00051     solid_t::assert_consistent_B_rep();
00052     return pr.second;
00053   }
00054 
00055   edge_t* loop_t :: mev(edge_t* e, point_t const& p)
00056   { 
00057     return f->s->mev(e, e, p);
00058   }  
00059 
00060   edge_t* loop_t :: mev(edge_t* e, vertex_t* v)              
00061   { 
00062     return f->s->mev(e, e, v);
00063   }  
00064 
00065 
00066 
00067 }//end namespace euler

Generated on Wed Aug 30 16:27:58 2006 for euler by  doxygen 1.4.6