⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 geomview_stream.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
📖 第 1 页 / 共 2 页
字号:
    output_segment(gv, segment);    return gv;}#endif#if defined CGAL_SEGMENT_3_H && \   !defined CGAL_GV_OUT_SEGMENT_3_H#define CGAL_GV_OUT_SEGMENT_3_Htemplate < class R >Geomview_stream&operator<<(Geomview_stream &gv, const Segment_3<R> &segment){    output_segment(gv, segment);    return gv;}#endif// The following code is the same for Triangle_2 and Triangle_3.template < class Triangle >voidoutput_triangle(Geomview_stream &gv, const Triangle &triangle){    bool ascii_bak = gv.set_ascii_mode();    gv << "(geometry " << gv.get_new_id("Tr")       << " {appearance {+edge material {edgecolor "       << gv.ecr()  << gv.ecg()  << gv.ecb() <<  " } shading constant}{ ";    gv.set_binary_mode();    // it's a planar polygon    gv << "OFF BINARY\n"    // it has 3 vertices, 1 face and 3 edges       << 3 << 1 << 3;    bool raw_bak = gv.set_raw(true);    for(int i=0; i<3; i++)        gv << triangle[i];    gv.set_raw(raw_bak);    // the face    gv << 3 << 0 << 1 << 2 << 4 << gv.fcr() << gv.fcg() << gv.fcb() << 1.0       << "}})";    gv.set_ascii_mode(ascii_bak);}// Draws a set of triangles as OFF format (it's faster than one by one).template < class InputIterator >voidGeomview_stream::draw_triangles(InputIterator begin, InputIterator end){    typedef typename std::iterator_traits<InputIterator>::value_type  Triangle;    typedef typename Kernel_traits<Triangle>::Kernel                  Kernel;    typedef typename Kernel::Point_3                                  Point;    typedef typename Kernel::Less_xyz_3                               Comp;    // We first copy everything in a vector to only require an InputIterator.    std::vector<Triangle> triangles(begin, end);    typedef typename std::vector<Triangle>::const_iterator            Tit;    // Put the points in a map and a vector.    // The index of a point in the vector is the value associated    // to it in the map.    typedef std::map<Point, int, Comp>  Point_map;    Point_map           point_map(Kernel().less_xyz_3_object());    std::vector<Point>  points;    for (Tit i = triangles.begin(); i != triangles.end(); ++i)        for (int j = 0; j < 3; ++j)	    if (point_map.insert(typename Point_map::value_type(i->vertex(j),					        points.size())).second)                points.push_back(i->vertex(j));    bool ascii_bak = get_ascii_mode();    bool raw_bak = set_raw(true);    // Header.    set_binary_mode();    (*this) << "(geometry " << get_new_id("triangles")            << " {appearance {}{ OFF BINARY\n"            << points.size() << triangles.size() << 0;    // Points coordinates.    std::copy(points.begin(), points.end(),              Ostream_iterator<Point, Geomview_stream>(*this));    // Triangles vertices indices.    for (Tit tit = triangles.begin(); tit != triangles.end(); ++tit) {        (*this) << 3;	for (int j = 0; j < 3; ++j)	    (*this) << point_map[tit->vertex(j)];        (*this) << 0; // without color.    }    // Footer.    (*this) << "}})";    set_raw(raw_bak);    set_ascii_mode(ascii_bak);}#if defined CGAL_TRIANGLE_2_H && \   !defined CGAL_GV_OUT_TRIANGLE_2_H#define CGAL_GV_OUT_TRIANGLE_2_Htemplate < class R >Geomview_stream&operator<<(Geomview_stream &gv, const Triangle_2<R> &triangle){    output_triangle(gv, triangle);    return gv;}#endif#if defined CGAL_TRIANGLE_3_H && \   !defined CGAL_GV_OUT_TRIANGLE_3_H#define CGAL_GV_OUT_TRIANGLE_3_Htemplate < class R >Geomview_stream&operator<<(Geomview_stream &gv, const Triangle_3<R> &triangle){    output_triangle(gv, triangle);    return gv;}#endif#if defined CGAL_TETRAHEDRON_3_H && \   !defined CGAL_GV_OUT_TETRAHEDRON_3_H#define CGAL_GV_OUT_TETRAHEDRON_3_Htemplate < class R >Geomview_stream&operator<<(Geomview_stream &gv, const Tetrahedron_3<R> &t){    bool ascii_bak = gv.set_ascii_mode();    gv << "(geometry " << gv.get_new_id("Tetra")       << " {appearance {}{ ";    gv.set_binary_mode();    gv << "OFF BINARY\n"    // it has 4 vertices, 4 face and 6 edges       << 4 << 4 << 6 ;    // the vertices    bool raw_bak = gv.set_raw(true);    for(int i=0; i<4; i++)        gv << t[i];    gv.set_raw(raw_bak);    // the faces    double r = gv.fcr(),           g = gv.fcg(),           b = gv.fcb();    gv << 3 << 0 << 1 << 2 << 4 << r << g << b << 1.0       << 3 << 3 << 0 << 1 << 4 << r << g << b << 1.0       << 3 << 3 << 1 << 2 << 4 << r << g << b << 1.0       << 3 << 3 << 0 << 2 << 4 << r << g << b << 1.0       << "}})";    gv.set_ascii_mode(ascii_bak);    return gv;}#endif#if defined CGAL_SPHERE_3_H && \   !defined CGAL_GV_OUT_SPHERE_3_H#define CGAL_GV_OUT_SPHERE_3_Htemplate < class R >Geomview_stream&operator<<(Geomview_stream &gv, const Sphere_3<R> &S){    bool ascii_bak = gv.set_ascii_mode();    gv << "(geometry " << gv.get_new_id("Sph")       << " {appearance {+edge material {edgecolor "       << gv.ecr()  << gv.ecg()  << gv.ecb() <<  "} shading constant}{ "       << "SPHERE\n"       << CGAL_CLIB_STD::sqrt(CGAL::to_double(S.squared_radius())) << "\n";    bool raw_bak = gv.set_raw(true);    gv << Point_3<R>(S.center()) << "}})";    gv.set_raw(raw_bak);    gv.set_ascii_mode(ascii_bak);    return gv;}#endif#if defined CGAL_RAY_2_H && \   !defined CGAL_GV_OUT_RAY_2_H#define CGAL_GV_OUT_RAY_2_Htemplate < class R >Geomview_stream&operator<<(Geomview_stream &gv, const Ray_2<R> &r){    // Note: it won't work if double is not convertible to an RT...    const Bbox_3 & bb = gv.get_bbox();    Object result = intersection(Iso_rectangle_2<R>(		                    Point_2<R>(bb.xmin(), bb.ymin()),		                    Point_2<R>(bb.xmax(), bb.ymax())), r);    Point_2<R> ipoint;    Segment_2<R> iseg;    if (assign(ipoint, result))	gv << ipoint;    else if (assign(iseg, result))	gv << iseg;    return gv;}#endif#if defined CGAL_LINE_2_H && \   !defined CGAL_GV_OUT_LINE_2_H#define CGAL_GV_OUT_LINE_2_Htemplate < class R >Geomview_stream&operator<<(Geomview_stream &gv, const Line_2<R> &r){    // Note: it won't work if double is not convertible to an RT...    const Bbox_3 & bb = gv.get_bbox();    Object result = intersection(Iso_rectangle_2<R>(		                    Point_2<R>(bb.xmin(), bb.ymin()),		                    Point_2<R>(bb.xmax(), bb.ymax())), r);    Point_2<R> ipoint;    Segment_2<R> iseg;    if (assign(ipoint, result))	gv << ipoint;    else if (assign(iseg, result))	gv << iseg;    return gv;}#endif// Ray and Line drawing should be done by intersecting them with the BBox// of the Geomview_stream.  But for now we take the easy approach.#if defined CGAL_RAY_3_H && \   !defined CGAL_GV_OUT_RAY_3_H#define CGAL_GV_OUT_RAY_3_Htemplate < class R >Geomview_stream&operator<<(Geomview_stream &gv, const Ray_3<R> &r){    typename R::Segment_3 s(r.source(), r.point(1));    gv << s;    return gv;}#endif#if defined CGAL_LINE_3_H && \   !defined CGAL_GV_OUT_LINE_3_H#define CGAL_GV_OUT_LINE_3_Htemplate < class R >Geomview_stream&operator<<(Geomview_stream &gv, const Line_3<R> &r){    typename R::Segment_3 s(r.point(-1), r.point(1));    gv << s;    return gv;}#endifGeomview_stream&operator<<(Geomview_stream &gv, const Bbox_2 &bbox);Geomview_stream&operator<<(Geomview_stream &gv, const Bbox_3 &bbox);#if defined CGAL_POINT_3_H && !defined CGAL_GV_IN_POINT_3_H#define CGAL_GV_IN_POINT_3_Htemplate < class R >Geomview_stream&operator>>(Geomview_stream &gv, Point_3<R> &point){    const char *gclpick =	"(pick world pickplane * nil nil nil nil nil nil nil)";    bool ascii_bak = gv.set_ascii_mode();    gv << "(pickable pickplane yes) (ui-target pickplane yes)"       << "(interest " << gclpick << ")";    char sexpr[1024];    gv >> sexpr;  // this reads a gcl expression    const char* pickpoint = Geomview_stream::nth(sexpr, 3);    // this gives something as: (0.0607123 0.0607125 4.76837e-07 0.529628)    double x, y, z, w;    Geomview_stream::parse_point(pickpoint, x, y, z, w);    point = Point_3<R>(x, y, z, w);    // we echo the input    if (gv.get_echo())	gv << point;    // we are done and tell geomview to stop sending pick events    gv << "(uninterest " << gclpick << ") (pickable pickplane no)";    gv.set_ascii_mode(ascii_bak);    return gv;}#endifCGAL_END_NAMESPACE#endif // CGAL_GEOMVIEW_STREAM_H

⌨️ 快捷键说明

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