write_arr.h
来自「CGAL is a collaborative effort of severa」· C头文件 代码 · 共 246 行
H
246 行
// Copyright (c) 2001 Tel-Aviv University (Israel).// 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/Arrangement/include/CGAL/IO/write_arr.h,v $// $Revision: 1.13 $ $Date: 2003/09/18 10:19:49 $// $Name: $//// Author(s) : Eti Ezra <estere@post.tau.ac.il>#ifndef CGAL_IO_WRITE_ARR_H#define CGAL_IO_WRITE_ARR_H #ifndef CGAL_BASIC_H#include <CGAL/basic.h>#endif#include <CGAL/Inverse_index.h>#include <CGAL/IO/write_pm.h>#include <iostream>#include <vector>CGAL_BEGIN_NAMESPACEtemplate <class Arr, class Writer>void write_arr(const Arr & arr, Writer & writer, std::ostream & o) { typedef typename Arr::Planar_map PM; typedef typename Arr::Vertex Vertex; typedef typename Arr::Face Face; typedef typename Arr::Halfedge Halfedge; typedef typename Arr::Curve_iterator Curve_iterator; typedef typename Arr::Subcurve_iterator Subcurve_iterator; typedef typename Arr::Edge_iterator Edge_iterator; typedef typename Arr::Curve_const_iterator Curve_const_iterator; typedef typename Arr::Subcurve_const_iterator Subcurve_const_iterator; typedef typename Arr::Edge_const_iterator Edge_const_iterator; typedef typename Arr::Vertex_handle Vertex_handle; typedef typename Arr::Halfedge_handle Halfedge_handle; typedef typename Arr::Face_handle Face_handle; typedef typename Arr::Vertex_const_handle Vertex_const_handle; typedef typename Arr::Halfedge_const_handle Halfedge_const_handle; typedef typename Arr::Face_const_handle Face_const_handle; typedef typename Arr::Vertex_iterator Vertex_iterator; typedef typename Arr::Vertex_const_iterator Vertex_const_iterator; typedef typename Arr::Halfedge_iterator Halfedge_iterator; typedef typename Arr::Halfedge_const_iterator Halfedge_const_iterator; typedef typename Arr::Face_iterator Face_iterator; typedef typename Arr::Face_const_iterator Face_const_iterator; typedef typename Arr::Ccb_halfedge_circulator Ccb_halfedge_circulator; typedef typename Arr::Ccb_halfedge_const_circulator Ccb_halfedge_const_circulator; typedef typename Arr::Holes_iterator Holes_iterator; typedef typename Arr::Holes_const_iterator Holes_const_iterator; typedef typename Arr::Overlap_circulator Overlap_circulator; typedef typename Arr::Overlap_const_circulator Overlap_const_circulator; typedef typename Arr::Locate_type Locate_type; typedef Inverse_index<Halfedge_const_iterator> H_index; typedef Inverse_index<Curve_const_iterator> Cn_index; typedef Inverse_index<Subcurve_const_iterator> Scv_index; typedef Inverse_index<Edge_const_iterator> En_index; H_index h_index(arr.halfedges_begin(), arr.halfedges_end()); writer.write_title("Printing Arrangement"); write_pm(arr.get_planar_map(), writer, o); writer.write_comment("Printing curve hierachy"); std::vector<En_index> en_index_table; // creating curve indices. Cn_index cn_index(arr.curve_node_begin(), arr.curve_node_end()); // creating the edge node indices table. Curve_const_iterator cv_iter; for (cv_iter = arr.curve_node_begin(); cv_iter != arr.curve_node_end(); cv_iter++){ En_index en_index(cv_iter->edges_begin(), cv_iter->edges_end()); en_index_table.push_back(en_index); } int number_of_curves = 0; for (cv_iter = arr.curve_node_begin(); cv_iter != arr.curve_node_end(); cv_iter++, number_of_curves++); writer.write_comment("number of curves"); writer.write_value(number_of_curves); unsigned int curve_index = 0; for (cv_iter = arr.curve_node_begin(); cv_iter != arr.curve_node_end(); cv_iter++, curve_index++){ unsigned int number_of_edge_nodes = 0; writer.write_comment("'th curve", curve_index+1); //cout<<cv_iter->curve()<<std::endl; writer.write_curve(cv_iter); writer.write_comment("number of levels"); writer.write_value(cv_iter->number_of_sc_levels()); // making a table of indices for all scv levels. std::vector<Scv_index> scv_index; unsigned int i; for (i = 0; i < cv_iter->number_of_sc_levels(); i++){ //Subcurve_const_iterator tmp_begin, tmp_end; // for debug. //tmp_begin = cv_iter->level_begin(i); //tmp_end = cv_iter->level_end(i); Scv_index one_scv_index(cv_iter->level_begin(i), cv_iter->level_end(i)); scv_index.push_back(one_scv_index); } En_index en_index(cv_iter->edges_begin(), cv_iter->edges_end()); for (i = 0; i < cv_iter->number_of_sc_levels(); i++){ writer.write_comment("'th level", i+1); unsigned int number_of_subcurves = 0; Subcurve_const_iterator sc_iter; for (sc_iter = cv_iter->level_begin(i); sc_iter != cv_iter->level_end(i); sc_iter++, number_of_subcurves++); writer.write_value(number_of_subcurves); for (sc_iter = cv_iter->level_begin(i); sc_iter != cv_iter->level_end(i); sc_iter++){ if (i+1 < cv_iter->number_of_sc_levels()){ if (!writer.verbose()){ writer.write_comment( "begin and past end indices of children subcurve nodes"); Subcurve_const_iterator last_child = sc_iter->children_end(); writer.write_value((scv_index[i+1])[sc_iter->children_begin()], ' '); writer.write_value((scv_index[i+1])[--last_child] + 1); } else { writer.write_comment("All children subcurve nodes"); Subcurve_const_iterator child_iter; for (child_iter = sc_iter->children_begin(); child_iter != sc_iter->children_end(); child_iter++) writer.write_subcurve (child_iter); } } else{ // getting to the edge nodes. if (!writer.verbose()){ writer.write_comment ("begin and past end indices of children edge nodes"); Edge_const_iterator last_child = sc_iter->edges_end(); writer.write_value(en_index[sc_iter->edges_begin()], ' '); writer.write_value(en_index[--last_child] + 1); } else{ writer.write_comment("All children edge nodes"); for (Edge_const_iterator child_iter = sc_iter->edges_begin(); child_iter != sc_iter->edges_end(); child_iter++) writer.write_edge(child_iter); } } //writer.skip_line(); writer.write_comment("subcurve of current level"); writer.write_subcurve(sc_iter); } } writer.write_comment("number of edge nodes"); for (Edge_const_iterator edge_count_iter = cv_iter->edges_begin(); edge_count_iter != cv_iter->edges_end(); edge_count_iter++, number_of_edge_nodes++); writer.write_value(number_of_edge_nodes); writer.write_comment("----------------------- Edge nodes childrens:"); for (Edge_const_iterator edge_iter = cv_iter->edges_begin(); edge_iter != cv_iter->edges_end(); edge_iter++){ if (!writer.verbose()){ // printing next overlapping edge node. writer.write_comment("pair indices (curve node and its edge node) " "for next overlapping edge node :"); //cout<<"edge_iter->curve()"<<edge_iter->curve()<<endl; Edge_const_iterator edge_past_end_child = Edge_const_iterator(edge_iter->children_end()); std::size_t j = cn_index[edge_past_end_child->curve_node()]; std::size_t k = (en_index_table[j])[edge_past_end_child]; writer.write_value(j, ' '); writer.write_value(k); //cout<<edge_iter->children_begin()->curve(); //writer.write_index(en_index[edge_iter->children_begin()]); //writer.write_index(en_index[edge_iter->children_end()]); writer.write_comment("Halfedge indices associated with edge nodes"); writer.write_value (h_index[Halfedge_const_iterator(edge_iter->halfedge())]); } else{ writer.write_comment("Halfedge associated with edge nodes"); writer.write_halfedge_verbose(edge_iter->halfedge()); } //writer.skip_line(); writer.write_comment("Edge node curve"); writer.write_edge(edge_iter); } writer.write_comment("finished current level"); //writer.write_edge_nodes_end(); } writer.write_title("End of Arrangement");}CGAL_END_NAMESPACE#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?