00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef FIRETREE__HEXSVG_H
00025 #define FIRETREE__HEXSVG_H 1
00026
00027
00028 #include "hex.h"
00029
00030
00031 namespace hex {
00032
00036 namespace svg {
00037
00038
00039 typedef std::map<std::string,std::string> Style;
00040
00042 std::string style_str(const Style& st);
00043
00045 Style style_dict(const std::string& s) throw(hex::invalid_argument);
00046
00047
00048
00049 inline std::ostream&
00050 operator<<(std::ostream& os, hex::Point p)
00051 {
00052 os<<p.x<<","<<p.y;
00053 return os;
00054 }
00055
00056
00057
00058
00059
00060 class Document
00061 {
00062 const Grid& _grid;
00063 public:
00064 Point p0;
00065 Point p1;
00066 std::list<std::string> stylesheets;
00067 std::list<std::string> defs;
00068
00069 Document(const Grid& grid);
00070
00072 Point T(const Point& p) const;
00073
00074 std::string header(void) const;
00075 std::string footer(void) const;
00076
00078 std::string draw_simple_area(const Area& a, float bias =0.0);
00079
00081 std::string draw_complex_area(const Area& a, float bias =0.0);
00082
00083 std::string draw_skeleton(const Area& a, bool include_boundary =true);
00084
00086 std::string draw_boundary(const Boundary& b, float bias =0.0);
00087
00089 std::string draw_path(const Path& p);
00090
00093 std::string
00094 draw_poly(
00095 std::list<Point> points,
00096 bool closed,
00097 const Identity* identity =NULL
00098 );
00099 };
00100
00101
00102 }
00103 }
00104
00105 #endif