alpha_shapes_2_window_stream.h
来自「CGAL is a collaborative effort of severa」· C头文件 代码 · 共 161 行
H
161 行
// Copyright (c) 1997 INRIA Sophia-Antipolis (France).// All rights reserved.//// This file is part of CGAL (www.cgal.org); you may redistribute it under// the terms of the Q Public License version 1.0.// See the file LICENSE.QPL distributed with CGAL.//// Licensees holding a valid commercial license may use this file in// accordance with the commercial license agreement provided with the software.//// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.//// $Source: /CVSROOT/CGAL/Packages/Alpha_shapes_2/include/CGAL/IO/alpha_shapes_2_window_stream.h,v $// $Revision: 1.10 $ $Date: 2003/09/18 10:19:12 $// $Name: $//// Author(s) : Tran Kai Frank DA <Frank.Da@sophia.inria.fr>#ifdef CGAL_ALPHA_WINDOW_STREAM//-------------------------------------------------------------------CGAL_BEGIN_NAMESPACE//-------------------------------------------------------------------template < class Dt >Window_stream&Alpha_shape_2<Dt>::op_window(Window_stream& W) const{ typedef typename Alpha_shape_2<Dt>::Interval_edge_map Interval_edge_map; typename Interval_edge_map::const_iterator edge_alpha_it; const typename Alpha_shape_2<Dt>::Interval3* pInterval; if (get_mode() == Alpha_shape_2<Dt>::REGULARIZED) { // it is much faster looking at the sorted intervals // than looking at all sorted faces // alpha must be larger than the mid boundary // and alpha is smaller than the upper boundary for (edge_alpha_it = _interval_edge_map.begin(); edge_alpha_it != _interval_edge_map.end() && (*edge_alpha_it).first.first < get_alpha(); ++edge_alpha_it) { pInterval = &(*edge_alpha_it).first; CGAL_triangulation_assertion(pInterval->second != Infinity); // since this happens only for convex hull of dimension 1 // thus singular if(pInterval->second < get_alpha() && (pInterval->third >= get_alpha() || pInterval->third == Infinity)) { // alpha must be larger than the mid boundary // and alpha is smaller than the upper boundary // which might be infinity // visualize the boundary CGAL_triangulation_assertion((classify((*edge_alpha_it).second.first, (*edge_alpha_it).second.second) == Alpha_shape_2<Dt>::REGULAR)); // if we used Edelsbrunner and Muecke's definition // regular means incident to a higher-dimensional face // thus we would write to many vertices W << segment((*edge_alpha_it).second.first, (*edge_alpha_it).second.second); // to debug the edge descrition...// W << Segment((*edge_alpha_it).second.first->vertex(0)->point(),// (*edge_alpha_it).second.first->vertex(1)->point());// W << Segment((*edge_alpha_it).second.first->vertex(1)->point(),// (*edge_alpha_it).second.first->vertex(2)->point());// W << Segment((*edge_alpha_it).second.first->vertex(2)->point(),// (*edge_alpha_it).second.first->vertex(0)->point()); } } } else { // get_mode() == GENERAL // draw the edges for (edge_alpha_it = _interval_edge_map.begin(); edge_alpha_it != _interval_edge_map.end() && (*edge_alpha_it).first.first < get_alpha(); ++edge_alpha_it) { pInterval = &(*edge_alpha_it).first; if (pInterval->first == UNDEFINED) { CGAL_triangulation_assertion(pInterval->second != Infinity); // since this happens only for convex hull of dimension 1 // thus singular if(pInterval->second < get_alpha() && (pInterval->third >= get_alpha() || pInterval->third == Infinity)) { // alpha must be larger than the mid boundary // and alpha is smaller than the upper boundary // which might be infinity // visualize the boundary CGAL_triangulation_assertion((classify((*edge_alpha_it).second.first, (*edge_alpha_it).second.second) == Alpha_shape_2<Dt>::REGULAR)); W << segment((*edge_alpha_it).second.first, (*edge_alpha_it).second.second); } } else { if(pInterval->third >= get_alpha() || pInterval->third == Infinity) { // if alpha is smaller than the upper boundary // which might be infinity // visualize the boundary CGAL_triangulation_assertion(((classify((*edge_alpha_it).second.first, (*edge_alpha_it).second.second) == Alpha_shape_2<Dt>::REGULAR) || (classify((*edge_alpha_it).second.first, (*edge_alpha_it).second.second) == Alpha_shape_2<Dt>::SINGULAR))); W << segment((*edge_alpha_it).second.first, (*edge_alpha_it).second.second); } } } } return W;}//-------------------------------------------------------------------template < class Dt >Window_stream& operator<<(Window_stream& W, const Alpha_shape_2<Dt>& As) { return As.op_window(W);}//-------------------------------------------------------------------CGAL_END_NAMESPACE//-------------------------------------------------------------------#endif//CGAL_ALPHA_WINDOW_STREAM
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?