49 #include "Iterators.hh" 50 #include "TopologyKernel.hh" 59 VertexOHalfEdgeIter::VertexOHalfEdgeIter(
const VertexHandle& _ref_h,
60 const TopologyKernel* _mesh,
int _max_laps) :
61 BaseIter(_mesh, _ref_h, _max_laps),
64 if(!_mesh->has_vertex_bottom_up_incidences()) {
66 std::cerr <<
"This iterator needs bottom-up incidences!" << std::endl;
68 BaseIter::valid(
false);
72 if((
unsigned int)_ref_h.idx() >= BaseIter::mesh()->outgoing_hes_per_vertex_.size()) {
73 BaseIter::valid(
false);
76 if(BaseIter::valid()) {
77 if((
unsigned int)cur_index_ >= BaseIter::mesh()->outgoing_hes_per_vertex_[_ref_h.idx()].size()) {
78 BaseIter::valid(
false);
82 if(BaseIter::valid()) {
83 BaseIter::cur_handle((
84 BaseIter::mesh()->outgoing_hes_per_vertex_[_ref_h.idx()])[cur_index_]);
89 VertexOHalfEdgeIter& VertexOHalfEdgeIter::operator--() {
91 size_t n_outgoing_halfedges = BaseIter::mesh()->outgoing_hes_per_vertex_[BaseIter::ref_handle().idx()].size();
93 if (cur_index_ == 0) {
94 cur_index_ = n_outgoing_halfedges-1;
97 BaseIter::valid(
false);
103 BaseIter::cur_handle((BaseIter::mesh()->outgoing_hes_per_vertex_[BaseIter::ref_handle().idx()])[cur_index_]);
109 VertexOHalfEdgeIter& VertexOHalfEdgeIter::operator++() {
111 size_t n_outgoing_halfedges = BaseIter::mesh()->outgoing_hes_per_vertex_[BaseIter::ref_handle().idx()].size();
115 if (cur_index_ == n_outgoing_halfedges) {
118 if (lap_ >= max_laps_)
119 BaseIter::valid(
false);
122 BaseIter::cur_handle((BaseIter::mesh()->outgoing_hes_per_vertex_[BaseIter::ref_handle().idx()])[cur_index_]);
133 VertexVertexIter::VertexVertexIter(
const VertexHandle& _ref_h,
134 const TopologyKernel* _mesh,
int _max_laps) :
135 BaseIter(_mesh, _ref_h, _max_laps),
138 if(!_mesh->has_vertex_bottom_up_incidences()) {
140 std::cerr <<
"This iterator needs bottom-up incidences!" << std::endl;
142 BaseIter::valid(
false);
146 if((
size_t)_ref_h.idx() >= BaseIter::mesh()->outgoing_hes_per_vertex_.size()) {
147 BaseIter::valid(
false);
150 if(BaseIter::valid()) {
151 if((
size_t)cur_index_ >= BaseIter::mesh()->outgoing_hes_per_vertex_[_ref_h.idx()].size()) {
152 BaseIter::valid(
false);
156 if(BaseIter::valid()) {
157 HalfEdgeHandle heh = BaseIter::mesh()->outgoing_hes_per_vertex_[_ref_h.idx()][cur_index_];
158 BaseIter::cur_handle(BaseIter::mesh()->halfedge(heh).to_vertex());
163 VertexVertexIter& VertexVertexIter::operator--() {
165 size_t n_outgoing_halfedges = BaseIter::mesh()->outgoing_hes_per_vertex_[BaseIter::ref_handle().idx()].size();
167 if (cur_index_ == 0) {
168 cur_index_ = n_outgoing_halfedges-1;
171 BaseIter::valid(
false);
177 HalfEdgeHandle heh = BaseIter::mesh()->outgoing_hes_per_vertex_[BaseIter::ref_handle().idx()][cur_index_];
178 BaseIter::cur_handle(BaseIter::mesh()->halfedge(heh).to_vertex());
184 VertexVertexIter& VertexVertexIter::operator++() {
186 size_t n_outgoing_halfedges = BaseIter::mesh()->outgoing_hes_per_vertex_[BaseIter::ref_handle().idx()].size();
190 if (cur_index_ == n_outgoing_halfedges) {
193 if (lap_ >= max_laps_)
194 BaseIter::valid(
false);
198 HalfEdgeHandle heh = BaseIter::mesh()->outgoing_hes_per_vertex_[BaseIter::ref_handle().idx()][cur_index_];
199 BaseIter::cur_handle(BaseIter::mesh()->halfedge(heh).to_vertex());
210 HalfEdgeHalfFaceIter::HalfEdgeHalfFaceIter(
const HalfEdgeHandle& _ref_h,
211 const TopologyKernel* _mesh,
int _max_laps) :
212 BaseIter(_mesh, _ref_h, _max_laps),
215 if(!_mesh->has_edge_bottom_up_incidences()) {
217 std::cerr <<
"This iterator needs bottom-up incidences!" << std::endl;
219 BaseIter::valid(
false);
223 if((
unsigned int)_ref_h.idx() >= BaseIter::mesh()->incident_hfs_per_he_.size()) {
224 BaseIter::valid(
false);
227 if(BaseIter::valid()) {
228 if((
unsigned int)cur_index_ >= BaseIter::mesh()->incident_hfs_per_he_[_ref_h.idx()].size()) {
229 BaseIter::valid(
false);
233 if(BaseIter::valid()) {
234 BaseIter::cur_handle((
235 BaseIter::mesh()->incident_hfs_per_he_[_ref_h.idx()])[cur_index_]);
240 HalfEdgeHalfFaceIter& HalfEdgeHalfFaceIter::operator--() {
242 size_t n_outgoing_halffaces = BaseIter::mesh()->incident_hfs_per_he_[BaseIter::ref_handle().idx()].size();
244 if (cur_index_ == 0) {
245 cur_index_ = n_outgoing_halffaces-1;
248 BaseIter::valid(
false);
254 BaseIter::cur_handle((BaseIter::mesh()->incident_hfs_per_he_[BaseIter::ref_handle().idx()])[cur_index_]);
260 HalfEdgeHalfFaceIter& HalfEdgeHalfFaceIter::operator++() {
263 size_t n_outgoing_halffaces = BaseIter::mesh()->incident_hfs_per_he_[BaseIter::ref_handle().idx()].size();
267 if (cur_index_ == n_outgoing_halffaces) {
270 if (lap_ >= max_laps_)
271 BaseIter::valid(
false);
274 BaseIter::cur_handle((BaseIter::mesh()->incident_hfs_per_he_[BaseIter::ref_handle().idx()])[cur_index_]);
283 VertexFaceIter::VertexFaceIter(
const VertexHandle& _ref_h,
284 const TopologyKernel* _mesh,
int _max_laps) :
285 BaseIter(_mesh, _ref_h, _max_laps) {
287 if(!_mesh->has_full_bottom_up_incidences()) {
289 std::cerr <<
"This iterator needs bottom-up incidences!" << std::endl;
291 BaseIter::valid(
false);
295 if((
unsigned int)_ref_h.idx() >= BaseIter::mesh()->outgoing_hes_per_vertex_.size()) {
296 BaseIter::valid(
false);
301 const std::vector<HalfEdgeHandle>& incidentHalfedges = BaseIter::mesh()->outgoing_hes_per_vertex_[_ref_h.idx()];
302 for(std::vector<HalfEdgeHandle>::const_iterator it = incidentHalfedges.begin(); it != incidentHalfedges.end(); ++it) {
304 if(*it < 0 || (
unsigned int)it->idx() >= BaseIter::mesh()->incident_hfs_per_he_.size())
continue;
305 const std::vector<HalfFaceHandle>& incidentHalfFaces = BaseIter::mesh()->incident_hfs_per_he_[it->idx()];
307 for (std::vector<HalfFaceHandle>::const_iterator hf_it = incidentHalfFaces.begin();
308 hf_it != incidentHalfFaces.end(); ++hf_it) {
309 faces_.push_back(BaseIter::mesh()->face_handle(*hf_it));
313 std::sort(faces_.begin(), faces_.end());
314 faces_.resize(std::unique(faces_.begin(), faces_.end()) - faces_.begin());
317 if ((faces_.size() > 0) && !faces_.front().is_valid())
318 faces_.erase(faces_.begin());
321 BaseIter::valid(faces_.size() > 0);
322 if(BaseIter::valid()) {
323 BaseIter::cur_handle(faces_[cur_index_]);
327 VertexFaceIter& VertexFaceIter::operator--() {
329 if(cur_index_ == 0) {
330 cur_index_ = faces_.size()-1;
333 BaseIter::valid(
false);
339 BaseIter::cur_handle(faces_[cur_index_]);
344 VertexFaceIter& VertexFaceIter::operator++() {
347 if(cur_index_ == faces_.size()) {
350 if (lap_ >= max_laps_) {
351 BaseIter::valid(
false);
354 BaseIter::cur_handle(faces_[cur_index_]);
362 VertexCellIter::VertexCellIter(
const VertexHandle& _ref_h,
363 const TopologyKernel* _mesh,
int _max_laps) :
364 BaseIter(_mesh, _ref_h, _max_laps) {
366 if(!_mesh->has_full_bottom_up_incidences()) {
368 std::cerr <<
"This iterator needs bottom-up incidences!" << std::endl;
370 BaseIter::valid(
false);
374 if((
unsigned int)_ref_h.idx() >= BaseIter::mesh()->outgoing_hes_per_vertex_.size()) {
375 BaseIter::valid(
false);
380 const std::vector<HalfEdgeHandle>& incidentHalfedges = BaseIter::mesh()->outgoing_hes_per_vertex_[_ref_h.idx()];
381 for(std::vector<HalfEdgeHandle>::const_iterator it = incidentHalfedges.begin(); it != incidentHalfedges.end(); ++it) {
383 if(*it < 0 || (
unsigned int)it->idx() >= BaseIter::mesh()->incident_hfs_per_he_.size())
continue;
384 const std::vector<HalfFaceHandle>& incidentHalfFaces = BaseIter::mesh()->incident_hfs_per_he_[it->idx()];
386 for(std::vector<HalfFaceHandle>::const_iterator hf_it = incidentHalfFaces.begin();
387 hf_it != incidentHalfFaces.end(); ++hf_it) {
388 if((
unsigned int)hf_it->idx() < BaseIter::mesh()->incident_cell_per_hf_.size()) {
389 CellHandle c_idx = BaseIter::mesh()->incident_cell_per_hf_[hf_it->idx()];
390 if(c_idx != TopologyKernel::InvalidCellHandle)
391 cells_.push_back(c_idx);
396 std::sort(cells_.begin(), cells_.end());
397 cells_.resize(std::unique(cells_.begin(), cells_.end()) - cells_.begin());
400 if ((cells_.size() > 0) && !cells_.front().is_valid())
401 cells_.erase(cells_.begin());
404 BaseIter::valid(cells_.size()>0);
405 if(BaseIter::valid()) {
406 BaseIter::cur_handle(cells_[cur_index_]);
410 VertexCellIter& VertexCellIter::operator--() {
412 if(cur_index_ == 0) {
413 cur_index_ = cells_.size()-1;
416 BaseIter::valid(
false);
422 BaseIter::cur_handle(cells_[cur_index_]);
427 VertexCellIter& VertexCellIter::operator++() {
430 if(cur_index_ == cells_.size()) {
433 if (lap_ >= max_laps_) {
434 BaseIter::valid(
false);
437 BaseIter::cur_handle(cells_[cur_index_]);
446 HalfEdgeCellIter::HalfEdgeCellIter(
const HalfEdgeHandle& _ref_h,
447 const TopologyKernel* _mesh,
int _max_laps) :
448 BaseIter(_mesh, _ref_h, _max_laps),
451 if(!_mesh->has_edge_bottom_up_incidences() || !_mesh->has_face_bottom_up_incidences()) {
453 std::cerr <<
"This iterator needs bottom-up incidences!" << std::endl;
455 BaseIter::valid(
false);
459 if((
unsigned int)_ref_h.idx() >= BaseIter::mesh()->incident_hfs_per_he_.size()) {
461 BaseIter::valid(
false);
464 if((
unsigned int)cur_index_ >= BaseIter::mesh()->incident_hfs_per_he_[_ref_h.idx()].size()) {
466 BaseIter::valid(
false);
469 if((
unsigned int)((BaseIter::mesh()->incident_hfs_per_he_[_ref_h.idx()])[cur_index_]).idx() >=
470 BaseIter::mesh()->incident_cell_per_hf_.size()) {
472 BaseIter::valid(
false);
477 const std::vector<HalfFaceHandle>& incidentHalffaces = BaseIter::mesh()->incident_hfs_per_he_[_ref_h.idx()];
478 std::set<CellHandle> cells;
479 for (
unsigned int i = 0; i < incidentHalffaces.size(); ++i)
481 CellHandle ch = getCellHandle(i);
483 if(cells.count(ch) == 0) {
484 cells_.push_back(ch);
490 BaseIter::valid(cells_.size() > 0);
492 if(BaseIter::valid()) {
493 BaseIter::cur_handle(cells_[cur_index_]);
498 HalfEdgeCellIter& HalfEdgeCellIter::operator--() {
500 if (cur_index_ == 0) {
501 cur_index_ = cells_.size()-1;
504 BaseIter::valid(
false);
510 BaseIter::cur_handle(cells_[cur_index_]);
515 HalfEdgeCellIter& HalfEdgeCellIter::operator++() {
519 if (cur_index_ == cells_.size()) {
522 if (lap_ >= max_laps_)
523 BaseIter::valid(
false);
526 BaseIter::cur_handle(cells_[cur_index_]);
530 CellHandle HalfEdgeCellIter::getCellHandle(
int _cur_index)
const 532 const std::vector<HalfFaceHandle>& halffacehandles = BaseIter::mesh()->incident_hfs_per_he_[BaseIter::ref_handle().idx()];
533 HalfFaceHandle currentHalfface = halffacehandles[_cur_index];
534 if(!currentHalfface.is_valid())
return CellHandle(-1);
535 CellHandle cellhandle = BaseIter::mesh()->incident_cell_per_hf_[currentHalfface.idx()];
545 CellVertexIter::CellVertexIter(
const CellHandle& _ref_h,
546 const TopologyKernel* _mesh,
int _max_laps) :
547 BaseIter(_mesh, _ref_h, _max_laps) {
549 OpenVolumeMeshCell c = BaseIter::mesh()->cell(_ref_h);
550 std::vector<HalfFaceHandle>::const_iterator hf_iter = c.halffaces().begin();
551 for(; hf_iter != c.halffaces().end(); ++hf_iter) {
552 const OpenVolumeMeshFace& halfface = BaseIter::mesh()->halfface(*hf_iter);
553 const std::vector<HalfEdgeHandle>& hes = halfface.halfedges();
554 for(std::vector<HalfEdgeHandle>::const_iterator he_iter = hes.begin(); he_iter != hes.end(); ++he_iter) {
555 incident_vertices_.push_back(BaseIter::mesh()->halfedge(*he_iter).to_vertex());
560 std::sort(incident_vertices_.begin(), incident_vertices_.end());
561 incident_vertices_.resize(std::unique(incident_vertices_.begin(), incident_vertices_.end()) - incident_vertices_.begin());
564 BaseIter::valid(incident_vertices_.size() > 0);
566 if(BaseIter::valid()) {
567 BaseIter::cur_handle(incident_vertices_[cur_index_]);
572 CellVertexIter& CellVertexIter::operator--() {
574 if (cur_index_ == 0) {
575 cur_index_ = incident_vertices_.size()-1;
578 BaseIter::valid(
false);
584 BaseIter::cur_handle(incident_vertices_[cur_index_]);
589 CellVertexIter& CellVertexIter::operator++() {
592 if (cur_index_ == incident_vertices_.size()){
595 if (lap_ >= max_laps_)
596 BaseIter::valid(
false);
599 BaseIter::cur_handle(incident_vertices_[cur_index_]);
608 CellCellIter::CellCellIter(
const CellHandle& _ref_h,
609 const TopologyKernel* _mesh,
int _max_laps) :
610 BaseIter(_mesh, _ref_h, _max_laps) {
612 if(!_mesh->has_face_bottom_up_incidences()) {
614 std::cerr <<
"This iterator needs bottom-up incidences!" << std::endl;
616 BaseIter::valid(
false);
620 std::vector<HalfFaceHandle>::const_iterator hf_iter = BaseIter::mesh()->cell(_ref_h).halffaces().begin();
621 std::vector<HalfFaceHandle>::const_iterator hf_end = BaseIter::mesh()->cell(_ref_h).halffaces().end();
622 for(; hf_iter != hf_end; ++hf_iter) {
624 HalfFaceHandle opp_hf = BaseIter::mesh()->opposite_halfface_handle(*hf_iter);
625 CellHandle ch = BaseIter::mesh()->incident_cell_per_hf_[opp_hf.idx()];
626 if(ch != TopologyKernel::InvalidCellHandle) {
627 adjacent_cells_.push_back(ch);
632 std::sort(adjacent_cells_.begin(), adjacent_cells_.end());
633 adjacent_cells_.resize(std::unique(adjacent_cells_.begin(), adjacent_cells_.end()) - adjacent_cells_.begin());
636 BaseIter::valid(adjacent_cells_.size()>0);
637 if(BaseIter::valid()) {
638 BaseIter::cur_handle(adjacent_cells_[cur_index_]);
643 CellCellIter& CellCellIter::operator--() {
645 if (cur_index_ == 0) {
646 cur_index_ = adjacent_cells_.size() - 1;
649 BaseIter::valid(
false);
655 BaseIter::cur_handle(adjacent_cells_[cur_index_]);
660 CellCellIter& CellCellIter::operator++() {
663 if (cur_index_ == adjacent_cells_.size())
667 if (lap_ >= max_laps_)
668 BaseIter::valid(
false);
670 BaseIter::cur_handle(adjacent_cells_[cur_index_]);
679 HalfFaceVertexIter::HalfFaceVertexIter(
const HalfFaceHandle& _ref_h,
680 const TopologyKernel* _mesh,
int _max_laps) :
681 BaseIter(_mesh, _ref_h, _max_laps) {
683 if(!_ref_h.is_valid())
return;
685 const OpenVolumeMeshFace& halfface = _mesh->halfface(_ref_h);
686 const std::vector<HalfEdgeHandle>& hes = halfface.halfedges();
687 for(std::vector<HalfEdgeHandle>::const_iterator he_it = hes.begin();
688 he_it != hes.end(); ++he_it) {
689 vertices_.push_back(_mesh->halfedge(*he_it).from_vertex());
694 BaseIter::valid(vertices_.size() > 0);
695 if(BaseIter::valid()) {
696 BaseIter::cur_handle(vertices_[cur_index_]);
701 HalfFaceVertexIter& HalfFaceVertexIter::operator--() {
703 if (cur_index_ == 0) {
704 cur_index_ = vertices_.size() - 1;
707 BaseIter::valid(
false);
713 BaseIter::cur_handle(vertices_[cur_index_]);
718 HalfFaceVertexIter& HalfFaceVertexIter::operator++() {
721 if (cur_index_ == vertices_.size())
725 if (lap_ >= max_laps_)
726 BaseIter::valid(
false);
728 BaseIter::cur_handle(vertices_[cur_index_]);
736 BoundaryHalfFaceHalfFaceIter::BoundaryHalfFaceHalfFaceIter(
const HalfFaceHandle& _ref_h,
737 const TopologyKernel* _mesh,
int _max_laps) :
738 BaseIter(_mesh, _ref_h, _max_laps) {
740 if(!_mesh->has_face_bottom_up_incidences()) {
742 std::cerr <<
"This iterator needs bottom-up incidences!" << std::endl;
744 BaseIter::valid(
false);
750 const OpenVolumeMeshFace& halfface = _mesh->halfface(_ref_h);
751 const std::vector<HalfEdgeHandle>& halfedges = halfface.halfedges();
752 for(std::vector<HalfEdgeHandle>::const_iterator he_it = halfedges.begin();
753 he_it != halfedges.end(); ++he_it) {
757 for(; hehf_it.valid(); ++hehf_it) {
759 if(_mesh->is_boundary(*hehf_it)) {
760 neighbor_halffaces_.push_back(*hehf_it);
761 common_edges_.push_back(_mesh->edge_handle(*he_it));
767 BaseIter::valid(neighbor_halffaces_.size() > 0);
768 if(BaseIter::valid()) {
769 BaseIter::cur_handle(neighbor_halffaces_[cur_index_]);
774 BoundaryHalfFaceHalfFaceIter& BoundaryHalfFaceHalfFaceIter::operator--() {
778 cur_index_ = neighbor_halffaces_.size() - 1;
781 BaseIter::valid(
false);
787 BaseIter::cur_handle(neighbor_halffaces_[cur_index_]);
792 BoundaryHalfFaceHalfFaceIter& BoundaryHalfFaceHalfFaceIter::operator++() {
795 if (cur_index_ == neighbor_halffaces_.size())
799 if (lap_ >= max_laps_)
800 BaseIter::valid(
false);
803 BaseIter::cur_handle(neighbor_halffaces_[cur_index_]);
812 BoundaryFaceIter::BoundaryFaceIter(
const TopologyKernel* _mesh) :
814 bf_it_(_mesh->faces_begin()) {
816 if(!_mesh->has_face_bottom_up_incidences()) {
818 std::cerr <<
"This iterator needs bottom-up incidences!" << std::endl;
820 BaseIter::valid(
false);
824 while(bf_it_ != BaseIter::mesh()->faces_end() &&
825 !BaseIter::mesh()->is_boundary(*bf_it_) &&
826 BaseIter::mesh()->is_deleted(bf_it_.cur_handle())){
829 BaseIter::valid(bf_it_ != BaseIter::mesh()->faces_end());
830 if(BaseIter::valid()) {
831 BaseIter::cur_handle(*bf_it_);
836 BoundaryFaceIter& BoundaryFaceIter::operator--() {
839 while(bf_it_ >= BaseIter::mesh()->faces_begin() &&
840 !BaseIter::mesh()->is_boundary(*bf_it_) &&
841 BaseIter::mesh()->is_deleted(bf_it_.cur_handle())){
844 if(bf_it_ >= BaseIter::mesh()->faces_begin()) {
845 BaseIter::cur_handle(*bf_it_);
847 BaseIter::valid(
false);
853 BoundaryFaceIter& BoundaryFaceIter::operator++() {
856 while(bf_it_ != BaseIter::mesh()->faces_end() &&
857 !BaseIter::mesh()->is_boundary(*bf_it_) &&
858 BaseIter::mesh()->is_deleted(bf_it_.cur_handle())){
861 if(bf_it_ != BaseIter::mesh()->faces_end()) {
862 BaseIter::cur_handle(*bf_it_);
864 BaseIter::valid(
false);
874 VertexIter::VertexIter(
const TopologyKernel* _mesh,
const VertexHandle& _vh) :
875 BaseIter(_mesh, _vh),
876 cur_index_(_vh.idx()) {
878 while ((
unsigned int)cur_index_ < BaseIter::mesh()->n_vertices() && BaseIter::mesh()->is_deleted(VertexHandle(cur_index_)))
880 if((
unsigned int)cur_index_ >= BaseIter::mesh()->n_vertices()) {
881 BaseIter::valid(
false);
883 BaseIter::cur_handle(VertexHandle(cur_index_));
887 VertexIter& VertexIter::operator--() {
890 while (cur_index_ >= 0 && BaseIter::mesh()->is_deleted(VertexHandle(cur_index_)))
893 BaseIter::valid(
false);
895 BaseIter::cur_handle(VertexHandle(cur_index_));
900 VertexIter& VertexIter::operator++() {
903 while ((
unsigned int)cur_index_ < BaseIter::mesh()->n_vertices() && BaseIter::mesh()->is_deleted(VertexHandle(cur_index_)))
905 if((
unsigned int)cur_index_ >= BaseIter::mesh()->n_vertices()) {
906 BaseIter::valid(
false);
908 BaseIter::cur_handle(VertexHandle(cur_index_));
917 EdgeIter::EdgeIter(
const TopologyKernel* _mesh,
const EdgeHandle& _eh) :
918 BaseIter(_mesh, _eh),
919 cur_index_(_eh.idx()) {
921 while ((
unsigned int)cur_index_ < BaseIter::mesh()->edges_.size() && BaseIter::mesh()->is_deleted(EdgeHandle(cur_index_)))
923 if((
unsigned int)cur_index_ >= BaseIter::mesh()->edges_.size()) {
924 BaseIter::valid(
false);
926 BaseIter::cur_handle(EdgeHandle(cur_index_));
930 EdgeIter& EdgeIter::operator--() {
933 while (cur_index_ >= 0 && BaseIter::mesh()->is_deleted(EdgeHandle(cur_index_)))
936 BaseIter::valid(
false);
938 BaseIter::cur_handle(EdgeHandle(cur_index_));
943 EdgeIter& EdgeIter::operator++() {
946 while ((
unsigned int)cur_index_ < BaseIter::mesh()->edges_.size() && BaseIter::mesh()->is_deleted(EdgeHandle(cur_index_)))
948 if((
unsigned int)cur_index_ >= BaseIter::mesh()->edges_.size()) {
949 BaseIter::valid(
false);
951 BaseIter::cur_handle(EdgeHandle(cur_index_));
960 HalfEdgeIter::HalfEdgeIter(
const TopologyKernel* _mesh,
const HalfEdgeHandle& _heh) :
961 BaseIter(_mesh, _heh),
962 cur_index_(_heh.idx()) {
964 while ((
unsigned int)cur_index_ < BaseIter::mesh()->edges_.size() * 2 && BaseIter::mesh()->is_deleted(HalfEdgeHandle(cur_index_)))
966 if((
unsigned int)cur_index_ >= BaseIter::mesh()->edges_.size() * 2) {
967 BaseIter::valid(
false);
969 BaseIter::cur_handle(HalfEdgeHandle(cur_index_));
973 HalfEdgeIter& HalfEdgeIter::operator--() {
976 while (cur_index_ >= 0 && BaseIter::mesh()->is_deleted(HalfEdgeHandle(cur_index_)))
979 BaseIter::valid(
false);
981 BaseIter::cur_handle(HalfEdgeHandle(cur_index_));
986 HalfEdgeIter& HalfEdgeIter::operator++() {
989 while ((
unsigned int)cur_index_ < BaseIter::mesh()->edges_.size() * 2 && BaseIter::mesh()->is_deleted(HalfEdgeHandle(cur_index_)))
991 if((
unsigned int)cur_index_ >= BaseIter::mesh()->edges_.size() * 2) {
992 BaseIter::valid(
false);
994 BaseIter::cur_handle(HalfEdgeHandle(cur_index_));
1003 FaceIter::FaceIter(
const TopologyKernel* _mesh,
const FaceHandle& _fh) :
1004 BaseIter(_mesh, _fh),
1005 cur_index_(_fh.idx()) {
1007 while ((
unsigned int)cur_index_ < BaseIter::mesh()->faces_.size() && BaseIter::mesh()->is_deleted(FaceHandle(cur_index_)))
1009 if((
unsigned int)cur_index_ >= BaseIter::mesh()->faces_.size()) {
1010 BaseIter::valid(
false);
1012 BaseIter::cur_handle(FaceHandle(cur_index_));
1016 FaceIter& FaceIter::operator--() {
1019 while (cur_index_ >= 0 && BaseIter::mesh()->is_deleted(FaceHandle(cur_index_)))
1021 if(cur_index_ < 0) {
1022 BaseIter::valid(
false);
1024 BaseIter::cur_handle(FaceHandle(cur_index_));
1029 FaceIter& FaceIter::operator++() {
1032 while ((
unsigned int)cur_index_ < BaseIter::mesh()->faces_.size() && BaseIter::mesh()->is_deleted(FaceHandle(cur_index_)))
1034 if((
unsigned int)cur_index_ >= BaseIter::mesh()->faces_.size()) {
1035 BaseIter::valid(
false);
1037 BaseIter::cur_handle(FaceHandle(cur_index_));
1046 HalfFaceIter::HalfFaceIter(
const TopologyKernel* _mesh,
const HalfFaceHandle& _hfh) :
1047 BaseIter(_mesh, _hfh),
1048 cur_index_(_hfh.idx()) {
1050 while ((
unsigned int)cur_index_ < BaseIter::mesh()->faces_.size() * 2 && BaseIter::mesh()->is_deleted(HalfFaceHandle(cur_index_)))
1052 if((
unsigned int)cur_index_ >= BaseIter::mesh()->faces_.size() * 2) {
1053 BaseIter::valid(
false);
1055 BaseIter::cur_handle(HalfFaceHandle(cur_index_));
1059 HalfFaceIter& HalfFaceIter::operator--() {
1062 while (cur_index_ >= 0 && BaseIter::mesh()->is_deleted(HalfFaceHandle(cur_index_)))
1064 if(cur_index_ < 0) {
1065 BaseIter::valid(
false);
1067 BaseIter::cur_handle(HalfFaceHandle(cur_index_));
1072 HalfFaceIter& HalfFaceIter::operator++() {
1075 while ((
unsigned int)cur_index_ < BaseIter::mesh()->faces_.size() * 2 && BaseIter::mesh()->is_deleted(HalfFaceHandle(cur_index_)))
1077 if((
unsigned int)cur_index_ >= BaseIter::mesh()->faces_.size() * 2) {
1078 BaseIter::valid(
false);
1080 BaseIter::cur_handle(HalfFaceHandle(cur_index_));
1089 CellIter::CellIter(
const TopologyKernel* _mesh,
const CellHandle& _ch) :
1090 BaseIter(_mesh, _ch),
1091 cur_index_(_ch.idx()) {
1093 while ((
unsigned int)cur_index_ < BaseIter::mesh()->cells_.size() && BaseIter::mesh()->is_deleted(CellHandle(cur_index_)))
1095 if((
unsigned int)cur_index_ >= BaseIter::mesh()->cells_.size()) {
1096 BaseIter::valid(
false);
1098 BaseIter::cur_handle(CellHandle(cur_index_));
1102 CellIter& CellIter::operator--() {
1105 while (cur_index_ >= 0 && BaseIter::mesh()->is_deleted(CellHandle(cur_index_)))
1107 if(cur_index_ < 0) {
1108 BaseIter::valid(
false);
1110 BaseIter::cur_handle(CellHandle(cur_index_));
1115 CellIter& CellIter::operator++() {
1118 while ((
unsigned int)cur_index_ < BaseIter::mesh()->cells_.size() && BaseIter::mesh()->is_deleted(CellHandle(cur_index_)))
1120 if((
unsigned int)cur_index_ >= BaseIter::mesh()->cells_.size()) {
1121 BaseIter::valid(
false);
1123 BaseIter::cur_handle(CellHandle(cur_index_));