📄 snc_list.h
字号:
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 + -