postscript_file_stream.h

来自「CGAL is a collaborative effort of severa」· C头文件 代码 · 共 781 行 · 第 1/2 页

H
781
字号
// Copyright (c) 1999  Utrecht University (The Netherlands),// ETH Zurich (Switzerland), Freie Universitaet Berlin (Germany),// INRIA Sophia-Antipolis (France), Martin-Luther-University Halle-Wittenberg// (Germany), Max-Planck-Institute Saarbruecken (Germany), RISC Linz (Austria),// and Tel-Aviv University (Israel).  All rights reserved.//// This file is part of CGAL (www.cgal.org); you can redistribute it and/or// modify it under the terms of the GNU Lesser General Public License as// published by the Free Software Foundation; version 2.1 of the License.// See the file LICENSE.LGPL 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/window/include/CGAL/IO/Postscript_file_stream.h,v $// $Revision: 1.9 $ $Date: 2003/10/21 12:25:45 $// $Name:  $//// Author(s)     : Stefan Schirra #ifndef CGAL_POSTSCRIPT_FILE_STREAM_H#define CGAL_POSTSCRIPT_FILE_STREAM_H#include <CGAL/LEDA_basic.h>#include <CGAL/IO/Color.h>#ifdef LEDA_PS_FILE_H# error Internal CGAL error: <LEDA/ps_file.h> should not have been included yet#else# include <LEDA/basic.h># include <LEDA/list.h># include <LEDA/string.h># include <LEDA/stream.h># include <LEDA/point.h># include <LEDA/segment.h># include <LEDA/line.h># include <LEDA/circle.h># include <LEDA/polygon.h># if (__LEDA__ >= 400)#  include <LEDA/rectangle.h># endif // 400# include <LEDA/color.h># include <LEDA/window.h># if (__LEDA__ >= 400)#  include <LEDA/rat_window.h>#  include <LEDA/geo_graph.h># endif // 400# define private protected# include <LEDA/ps_file.h># undef private#endif // LEDA_PS_FILE_H#include <CGAL/IO/cgal_logo.h>CGAL_BEGIN_NAMESPACEtypedef CGAL_LEDA_SCOPE::ps_file   leda_ps_file;class Postscript_file_stream : public leda_ps_file{ public:   Postscript_file_stream(double w,double h, leda_string name="CGAL_unnamed.ps")   : leda_ps_file(w/40.0, h/40.0, name)   {}   Postscript_file_stream(leda_string name="CGAL_unnamed.ps")    : leda_ps_file( name )   { set_draw_bb(false); }   void display() {}   void display(int, int) {}   int read_mouse(double& , double& ) {return 1;}   leda_color set_fg_color(leda_color c) { return set_color(c); }   void set_font(const leda_string& ls) { set_text_font(ls); }   void change_rgb(const Color&);   bool is_in_colormode();};inlinevoidPostscript_file_stream::change_rgb(const Color& c){  file << double(c.r())/255.0 << " "       << double(c.g())/255.0 << " "       << double(c.b())/255.0 << " srgb\n";}inlineboolPostscript_file_stream::is_in_colormode(){ return (outputmode== CGAL_LEDA_SCOPE::colored_mode); }inlinePostscript_file_stream&operator<<(Postscript_file_stream& w, const Color& c){  assert( w.is_in_colormode() );  w.change_rgb(c);  return w;}inlinevoidcgalize(Postscript_file_stream& w){  w.set_line_width( 1);}inlinePostscript_file_stream*create_demo_postscript_file_stream( float w = 512.0, float h = 512.0,                                    const char* str = "CGAL_unnamed.ps",                                    double x_extension = 1.0){  Postscript_file_stream* Wptr = new Postscript_file_stream( w, h, str);  cgalize( *Wptr);  double y_extension = x_extension * h / w;  Wptr->init(-x_extension, x_extension, -y_extension);  return Wptr;}inlinePostscript_file_stream*create_and_display_demo_postscript_file_stream(float w = 512.0,                     float h = 512.0, const char* str = "CGAL_unnamed.ps",                    double x_extension = 1.0){  Postscript_file_stream* Wptr = new Postscript_file_stream( w, h, str);  cgalize( *Wptr);  double y_extension = x_extension * h / w;  Wptr->init(-x_extension, x_extension, -y_extension);  return Wptr;}#endif // CGAL_POSTSCRIPT_FILE_STREAM_H//  Each of the following operators is individually//  protected against multiple inclusion.#ifdef CGAL_POINT_2_H#ifndef CGAL_POSTSCRIPT_FILE_STREAM_POINT_2#define CGAL_POSTSCRIPT_FILE_STREAM_POINT_2template< class R >Postscript_file_stream&operator<<(Postscript_file_stream& w, const Point_2<R>& p){  double x = CGAL::to_double(p.x());  double y = CGAL::to_double(p.y());  w.draw_point(x,y);  return w;}template< class R >Postscript_file_stream&operator>>(Postscript_file_stream& w, Point_2<R>& p){  typedef typename R::RT RT;  leda_point l_p;  leda_drawing_mode save = w.set_mode(leda_xor_mode);  if (w >> l_p)  {      double x = l_p.xcoord();      double y = l_p.ycoord();      w << l_p;      w.set_mode( save);      w.draw_point(x,y);      p = Point_2<R>( RT(x), RT(y));  }  else  {      w.set_mode( save);  }  return w;}template< class R >Postscript_file_stream&read(Postscript_file_stream& w, Point_2<R>& p){  typedef typename R::RT RT;  leda_point l_p;  if (w >> l_p)  {      double x = l_p.xcoord();      double y = l_p.ycoord();      p = Point_2<R>( RT(x), RT(y));  }  return w;}template <class R>voidread_mouse_plus(Postscript_file_stream& w, Point_2<R>& p, int& button){  typedef typename R::RT RT;  double x, y;  button = w.read_mouse(x,y);  w.draw_point(x,y);  p = Point_2<R>(RT(x), RT(y));}#endif // CGAL_POSTSCRIPT_FILE_STREAM_POINT_2#endif // CGAL_POINT_2_H#ifdef CGAL_SEGMENT_2_H#ifndef CGAL_POSTSCRIPT_FILE_STREAM_SEGMENT_2#define CGAL_POSTSCRIPT_FILE_STREAM_SEGMENT_2template< class R >Postscript_file_stream&operator<<(Postscript_file_stream& w, const Segment_2<R>& s){  w.draw_segment(CGAL::to_double(s.source().x()),                 CGAL::to_double(s.source().y()),                 CGAL::to_double(s.target().x()),                 CGAL::to_double(s.target().y()));  return w;}template< class R >Postscript_file_stream&operator>>(Postscript_file_stream& w, Segment_2<R>& s){  typedef  typename R::RT  RT;  leda_segment l_s;  leda_drawing_mode save = w.set_mode(leda_xor_mode);  if ( w.read( l_s))  {      double x1 = l_s.xcoord1();      double y1 = l_s.ycoord1();      double x2 = l_s.xcoord2();      double y2 = l_s.ycoord2();      w.set_mode( save);      w.draw_segment(x1,y1, x2, y2);      s = Segment_2<R>(Point_2<R>( RT(x1), RT(y1)),                            Point_2<R>( RT(x2), RT(y2)));  }  else  {      w.set_mode( save);  }  return w;}template< class R >Postscript_file_stream&read(Postscript_file_stream& w, Segment_2<R>& s){  typedef  typename R::RT  RT;  leda_segment l_s;  if ( w.read( l_s))  {      double x1 = l_s.xcoord1();      double y1 = l_s.ycoord1();      double x2 = l_s.xcoord2();      double y2 = l_s.ycoord2();      s = Segment_2<R>(Point_2<R>( RT(x1), RT(y1)),                            Point_2<R>( RT(x2), RT(y2)));  }  return w;}#endif // CGAL_POSTSCRIPT_FILE_STREAM_SEGMENT_2#endif // CGAL_SEGMENT_2_H#ifdef CGAL_LINE_2_H#ifndef CGAL_POSTSCRIPT_FILE_STREAM_LINE_2#define CGAL_POSTSCRIPT_FILE_STREAM_LINE_2template< class R >Postscript_file_stream&operator<<(Postscript_file_stream& w, const Line_2<R>& l){  Point_2<R> p1 = l.point(),                  p2 = p1 + l.direction().vector();  w.draw_line(CGAL::to_double(p1.x()), CGAL::to_double(p1.y()),              CGAL::to_double(p2.x()), CGAL::to_double(p2.y()));  return w;}template< class R >Postscript_file_stream&operator>>(Postscript_file_stream& w, Line_2<R>& l){  typedef  typename R::RT  RT;  leda_segment l_s;  leda_drawing_mode save = w.set_mode(leda_xor_mode);  if ( w.read( l_s))  {      double x1 = l_s.xcoord1();      double y1 = l_s.ycoord1();      double x2 = l_s.xcoord2();      double y2 = l_s.ycoord2();      w.set_mode( save);      w.draw_line(x1,y1, x2, y2);      l = Line_2<R>(Point_2<R>( RT(x1), RT(y1)),                         Point_2<R>( RT(x2), RT(y2)));  }  else  {      w.set_mode( save);  }  return w;}template< class R >Postscript_file_stream&read(Postscript_file_stream& w, Line_2<R>& l){  typedef  typename R::RT  RT;  leda_segment l_s;  if ( w.read( l_s))  {      double x1 = l_s.xcoord1();      double y1 = l_s.ycoord1();      double x2 = l_s.xcoord2();      double y2 = l_s.ycoord2();      l = Line_2<R>(Point_2<R>( RT(x1), RT(y1)),                         Point_2<R>( RT(x2), RT(y2)));  }  return w;}#endif // CGAL_POSTSCRIPT_FILE_STREAM_LINE_2#endif //CGAL_LINE_2_H#ifdef CGAL_RAY_2_H#ifndef CGAL_POSTSCRIPT_FILE_STREAM_RAY_2#define CGAL_POSTSCRIPT_FILE_STREAM_RAY_2template< class R >Postscript_file_stream&operator<<(Postscript_file_stream& w, const Ray_2<R>& r){  Point_2<R> p = r.point(0);  Point_2<R> q = r.point(1);  w.draw_ray(CGAL::to_double(p.x()),             CGAL::to_double(p.y()),             CGAL::to_double(q.x()),             CGAL::to_double(q.y()));  return w;}template< class R >Postscript_file_stream&operator>>(Postscript_file_stream& w, Ray_2<R>& r){  typedef  typename R::RT  RT;  leda_segment l_s;  leda_drawing_mode save = w.set_mode(leda_xor_mode);  if ( w.read( l_s))  {      double x1 = l_s.xcoord1();      double y1 = l_s.ycoord1();      double x2 = l_s.xcoord2();      double y2 = l_s.ycoord2();      w.set_mode( save);      r = Ray_2<R>(Point_2<R>( RT(x1), RT(y1)),                        Point_2<R>( RT(x2), RT(y2)));      w << r;  }  else  {      w.set_mode( save);  }  return w;}template< class R >Postscript_file_stream&read(Postscript_file_stream& w, Ray_2<R>& r){  typedef  typename R::RT  RT;  leda_segment l_s;  if ( w.read( l_s))  {      double x1 = l_s.xcoord1();      double y1 = l_s.ycoord1();      double x2 = l_s.xcoord2();      double y2 = l_s.ycoord2();

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?