⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snc_list.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
📖 第 1 页 / 共 3 页
字号:
    return f1;  }  Volume_handle new_volume(Mark m = Mark()) {    Volume_handle vh = new_volume_only();    vh->mark() = m;    return vh;  }  void delete_vertex(Vertex_handle v)    CGAL_NEF_TRACEN("~ deleting vertex "<<&*v<<" from "<<&*this);    v->clear(true);     delete_vertex_only(v);    CGAL_NEF_TRACEN("~~ vertex deleted"<<&*v);  }  void delete_halfedge_pair(Halfedge_handle e)    CGAL_NEF_TRACEN("~ deleting halfedges pair "<<&*e<<", "<<&*(e->twin())<<	   " from "<<&*this);    Halfedge_handle et = e->twin();    SM_decorator D1(&*e->center_vertex()), D2(&*et->center_vertex());    D1.delete_vertex(e);    D2.delete_vertex(et);  }  void delete_halffacet_pair(Halffacet_handle f)    CGAL_NEF_TRACEN("~ deleting halffacets pair "<<&*f<<", "<<&*(f->twin())<<	   " from "<<&*this);    reset_object_list(f->boundary_entry_objects());    reset_object_list(f->twin()->boundary_entry_objects());    delete_halffacet_only(f->twin());    delete_halffacet_only(f);  }  void delete_volume(Volume_handle c)    CGAL_NEF_TRACEN("~ deleting volume "<<&*c<<" from "<<&*this);    reset_object_list(c->shell_entry_objects());    delete_volume_only(c);  }  Vertex_handle new_vertex_only() {     vertices_.push_back(* get_vertex_node(Vertex()));    CGAL_NEF_TRACEN("  new vertex only "<<&*(--vertices_end()));    return --vertices_end();   }  Halfedge_handle new_halfedge_only(Halfedge_handle e)  {     Halfedge_handle ne = halfedges_.insert(e, * get_halfedge_node(Halfedge()));    CGAL_NEF_TRACEN("  after "<<&*e<<" new halfedge only "<<&*ne);    return ne;  }  Halfedge_handle new_halfedge_only()  {     CGAL_NEF_TRACEN("  new halfedge only "<<&*(--halfedges_end()));    halfedges_.push_back( * get_halfedge_node(Halfedge()));    return --halfedges_end();  }  Halffacet_handle new_halffacet_only()  {     halffacets_.push_back( * get_halffacet_node(Halffacet()));    CGAL_NEF_TRACEN("  new halffacet only "<<&*(--halffacets_end()));    return --halffacets_end();   }   Volume_handle new_volume_only()  {     volumes_.push_back( * get_volume_node(Volume()));    CGAL_NEF_TRACEN("  new volume only "<<&*(--volumes_end()));    return --volumes_end();   }  SHalfedge_handle new_shalfedge_only()  {    shalfedges_.push_back( * get_shalfedge_node(SHalfedge()));    CGAL_NEF_TRACEN("  new shalfedge only "<<&*(--shalfedges_end()));    return --shalfedges_end();  }  SHalfloop_handle new_shalfloop_only()  {    shalfloops_.push_back( * get_shalfloop_node(SHalfloop()));    CGAL_NEF_TRACEN("  new shalfloop only "<<&*(--shalfloops_end()));    return --shalfloops_end();   }  SFace_handle new_sface_only() {    sfaces_.push_back( * get_sface_node(SFace()));    CGAL_NEF_TRACEN("  new sface only "<<&*(--sfaces_end()));    return --sfaces_end();   }  void delete_vertex_only(Vertex_handle h) {    CGAL_NEF_TRACEN("~ deleting vertex only "<<&*h<<" from "<<&*this);    vertices_.erase(h);    put_vertex_node(&*h);  }  void delete_halfedge_only(Halfedge_handle h) {     CGAL_NEF_TRACEN("~ deleting halfedge only "<<&*h<<" from "<<&*this);    CGAL_assertion(!is_sm_boundary_object(h));    halfedges_.erase(h);    put_halfedge_node(&*h);  }  void delete_halffacet_only(Halffacet_handle h) {     CGAL_NEF_TRACEN("~ deleting halffacet only "<<&*h<<" from "<<&*this);    halffacets_.erase(h);             put_halffacet_node(&*h);  }  void delete_volume_only(Volume_handle h) {    CGAL_NEF_TRACEN("~ deleting volume only "<<&*h<<" from "<<&*this);    volumes_.erase(h);     put_volume_node(&*h);  }  void delete_shalfedge_only(SHalfedge_handle h)  {     CGAL_NEF_TRACEN("~ deleting shalfedge only "<<&*h<<" from "<<&*this);    CGAL_assertion(!is_sm_boundary_object(h));    shalfedges_.erase(h);    put_shalfedge_node(&*h);  }  void delete_shalfloop_only(SHalfloop_handle h)  {     CGAL_NEF_TRACEN("~ deleting shalfloop only "<<&*h<<" from "<<&*this);    CGAL_assertion(!is_sm_boundary_object(h));    shalfloops_.erase(h);     put_shalfloop_node(&*h);  }  void delete_sface_only(SFace_handle h)  {     CGAL_NEF_TRACEN("~ deleting sface only "<<&*h<<" from "<<&*this);    CGAL_assertion(!is_boundary_object(h));    sfaces_.erase(h);    put_sface_node(&*h);  } protected:  Generic_handle_map<Object_iterator> boundary_item_;  Vertex_list    vertices_;  Halffacet_list halffacets_;  Volume_list    volumes_;  void pointer_update(const Self& D);};template <typename Kernel, typename Items>void SNC_list<Kernel,Items>::pointer_update(const SNC_list<Kernel,Items>& D){  CGAL::Unique_hash_map<Vertex_const_handle,Vertex_handle>       VM;  CGAL::Unique_hash_map<Halfedge_const_handle,Halfedge_handle>   EM;  CGAL::Unique_hash_map<Halffacet_const_handle,Halffacet_handle> FM;  CGAL::Unique_hash_map<Volume_const_handle,Volume_handle>       CM;  CGAL::Unique_hash_map<SHalfedge_const_handle,SHalfedge_handle> SEM;  CGAL::Unique_hash_map<SHalfloop_const_handle,SHalfloop_handle> SLM;  CGAL::Unique_hash_map<SFace_const_handle,SFace_handle>         SFM;  Vertex_const_iterator vc = D.vertices_begin();  Vertex_iterator v = vertices_begin();  for ( ; vc != D.vertices_end(); ++vc,++v) VM[vc] = v;  VM[D.vertices_end()] = vertices_end();  Halfedge_const_iterator ec = D.halfedges_begin();  Halfedge_iterator e = halfedges_begin();  for ( ; ec != D.halfedges_end(); ++ec,++e) EM[ec] = e;  EM[D.halfedges_end()] = halfedges_end();  Halffacet_const_iterator fc = D.halffacets_begin();  Halffacet_iterator f = halffacets_begin();  for ( ; fc != D.halffacets_end(); ++fc,++f) FM[fc] = f;  FM[D.halffacets_end()] = halffacets_end();  Volume_const_iterator cc = D.volumes_begin();  Volume_iterator c = volumes_begin();  for ( ; cc != D.volumes_end(); ++cc,++c) CM[cc] = c;  CM[D.volumes_end()] = volumes_end();  SHalfedge_const_iterator sec = D.shalfedges_begin();  SHalfedge_iterator se = shalfedges_begin();  for ( ; sec != D.shalfedges_end(); ++sec,++se) SEM[sec] = se;  SEM[D.shalfedges_end()] = shalfedges_end();  SHalfloop_const_iterator slc = D.shalfloops_begin();  SHalfloop_iterator sl = shalfloops_begin();  for ( ; slc != D.shalfloops_end(); ++slc,++sl) SLM[slc] = sl;  SLM[D.shalfloops_end()] = shalfloops_end();  SFace_const_iterator sfc = D.sfaces_begin();  SFace_iterator sf = sfaces_begin();  for ( ; sfc != D.sfaces_end(); ++sfc,++sf) SFM[sfc] = sf;  SFM[D.sfaces_end()] = sfaces_end();  CGAL_forall_vertices(v,*this) {    // Local Graph update: (SVertices are postponed/updated as Edges)    v->sncp() = this;    v->svertices_begin() = EM[v->svertices_begin()];    v->svertices_last() = EM[v->svertices_last()];    v->shalfedges_begin() = SEM[v->shalfedges_begin()];    v->shalfedges_last() = SEM[v->shalfedges_last()];    v->sfaces_begin() = SFM[v->sfaces_begin()];    v->sfaces_last() = SFM[v->sfaces_last()];    v->shalfloop() = SLM[v->shalfloop()];  }  // Halfedge update:  CGAL_forall_halfedges(e,*this) {    e->center_vertex() = VM[e->center_vertex()];    e->twin() = EM[e->twin()];    e->out_sedge() = SEM[e->out_sedge()];    e->incident_sface() = SFM[e->incident_sface()];  }  // Halffacet update  CGAL_forall_halffacets(f,*this) {    f->twin() = FM[f->twin()];    f->volume_ = CM[f->volume_];    Halffacet_cycle_iterator ftc;    for(ftc = f->boundary_entry_objects().begin();         ftc !=  f->boundary_entry_objects().end(); ++ftc) {      if ( assign( se, ftc) )       { *ftc = Object_handle(SEM[se]); store_boundary_item(se,ftc); }      else if ( assign( sl, ftc) )       { *ftc = Object_handle(SLM[sl]); store_boundary_item(sl,ftc); }      else CGAL_assertion_msg(0,"damn wrong boundary item in facet.");    }  }  // Volume update  CGAL_forall_volumes(c,*this) {    Shell_entry_iterator sei;    CGAL_forall_shells_of(sei,c) {      sf = sei; // conversion from generic iterator to sface const handle      *sei = Object_handle(SFM[sf]);       store_boundary_item(sf,sei);     }  }  CGAL_forall_shalfedges(se,*this) {    se->source() = EM[se->source()];    se->sprev() = SEM[se->sprev()]; se->snext() = SEM[se->snext()];    se->incident_sface() = SFM[se->incident_sface()];    se->twin() = SEM[se->twin()];    se->prev() = SEM[se->prev()]; se->next() = SEM[se->next()];    se->incident_facet() = FM[se->incident_facet()];  }  CGAL_forall_shalfloops(sl,*this) {    sl->twin() = SLM[sl->twin()];    sl->incident_sface() = SFM[sl->incident_sface()];    sl->incident_facet() = FM[sl->incident_facet()];  }  for ( slc = D.shalfloops_begin(), sl = shalfloops_begin();	slc != D.shalfloops_end(); ++slc, ++sl) {    CGAL_assertion_code( if( slc->is_twin() == sl->is_twin())			 CGAL_assertion( slc->mark() == sl->mark()));    if( !sl->is_twin() && slc->is_twin()) sl->mark() = sl->twin()->mark();  }  CGAL_forall_sfaces(sf,*this) {    sf->center_vertex() = VM[sf->center_vertex()];    sf->incident_volume() = CM[sf->incident_volume()];    SFace_cycle_iterator sfc;    for(sfc = sf->sface_cycles_begin();         sfc != sf->sface_cycles_end(); ++sfc) {      SVertex_handle sv;      if ( assign(sv,sfc) )       { *sfc = Object_handle(EM[sv]); store_sm_boundary_item(sv,sfc); }      else if ( assign(se,sfc) )       { *sfc = Object_handle(SEM[se]); store_sm_boundary_item(se,sfc); }      else if ( assign(sl,sfc) )       { *sfc = Object_handle(SLM[sl]); store_sm_boundary_item(sl,sfc); }      else CGAL_assertion_msg(0,"damn wrong boundary item in sface.");    }  }}*/CGAL_END_NAMESPACE#endif // CGAL_SNC_LIST_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -