37 #include "TetrahedralMeshIterators.hh" 38 #include "TetrahedralMeshTopologyKernel.hh" 39 #include "../Core/Iterators.hh" 48 TetVertexIter::TetVertexIter(
const CellHandle& _ref_h,
49 const TetrahedralMeshTopologyKernel* _mesh,
int _max_laps) :
50 BaseIter(_mesh, _ref_h, _max_laps) {
52 assert(_ref_h.is_valid());
54 TetrahedralMeshTopologyKernel::Cell cell = _mesh->cell(_ref_h);
56 assert(cell.halffaces().size() == 4);
59 HalfFaceHandle curHF = *cell.halffaces().begin();
60 assert(curHF.is_valid());
63 assert(_mesh->halfface(curHF).halfedges().size() == 3);
64 HalfEdgeHandle curHE = *_mesh->halfface(curHF).halfedges().begin();
65 assert(curHE.is_valid());
67 vertices_.push_back(_mesh->halfedge(curHE).to_vertex());
69 curHE = _mesh->next_halfedge_in_halfface(curHE, curHF);
71 vertices_.push_back(_mesh->halfedge(curHE).to_vertex());
73 curHE = _mesh->next_halfedge_in_halfface(curHE, curHF);
75 vertices_.push_back(_mesh->halfedge(curHE).to_vertex());
77 curHF = _mesh->adjacent_halfface_in_cell(curHF, curHE);
78 curHE = _mesh->opposite_halfedge_handle(curHE);
79 curHE = _mesh->next_halfedge_in_halfface(curHE, curHF);
81 vertices_.push_back(_mesh->halfedge(curHE).to_vertex());
84 BaseIter::valid(vertices_.size() > 0);
85 if(BaseIter::valid()) {
86 BaseIter::cur_handle(vertices_[cur_index_]);
91 TetVertexIter& TetVertexIter::operator--() {
93 if (cur_index_ == 0) {
94 cur_index_ = vertices_.size() - 1;
97 BaseIter::valid(
false);
102 BaseIter::cur_handle(vertices_[cur_index_]);
108 TetVertexIter& TetVertexIter::operator++() {
111 if(cur_index_ == vertices_.size()) {
114 if (lap_ >= max_laps_)
115 BaseIter::valid(
false);
118 BaseIter::cur_handle(vertices_[cur_index_]);