diff --git a/src/interface/render_svg.cpp b/src/interface/render_svg.cpp index d0a0b804fee0613661226e92386e7bbe4d1950d1..c87cb61736e265dbbfbb6dda3c9952a3e27b0a5d 100644 --- a/src/interface/render_svg.cpp +++ b/src/interface/render_svg.cpp @@ -42,7 +42,7 @@ void Svg::init(const char *path){ << "\t\t\t}\n" << "\t\tpath\n" << "\t\t\t{\n" - << "\t\t\t\tfill:green;stroke:black;stroke-width:1\n" + << "\t\t\t\tfill:none;stroke:green;stroke-width:1\n" << "\t\t\t}\n" << "\t</style>\n" << "\t<desc>Rectangles</desc>\n"; diff --git a/src/interface/render_svg.hpp b/src/interface/render_svg.hpp index 7e0eae0395088cf8cb7dcbdd0e0f2d9298040477..1bcf635b9f13571b2173ee98db315610dcd1f977 100644 --- a/src/interface/render_svg.hpp +++ b/src/interface/render_svg.hpp @@ -11,15 +11,14 @@ #define MARGIN 10 //distance between two object #define ARROWSIZE 4 //spike size +#define WAIT_NEW_CHRONO 0 +#define INIT 1 +#define WAIT_FOR_POINT 2 #include "render.hpp" #include "resource.hpp" -/*typedef unsigned long Element_count ; -typedef double Element_pos; -typedef unsigned char Element_col; -*/ class Svg : public Render{ @@ -27,11 +26,12 @@ class Svg : public Render{ private: std::ostringstream _buffer; std::ostringstream _chronogramme; + int _chronogramme_state; std::ofstream _svg_file; inline void print(); - inline void rectangle(const char* name,unsigned long w, unsigned long h,unsigned long x1,unsigned long y1, unsigned int r, unsigned int g, unsigned int b ); - inline void line(const char* name, long unsigned int x1, long unsigned int y1, long unsigned int x2, long unsigned int y2); - inline void triangle(const char* name,unsigned long x1,unsigned long y1,unsigned long x2,unsigned long y2, unsigned long x3,unsigned long y3); + inline void rectangle(const char* name,Element_pos w, Element_pos h,Element_pos x1,Element_pos y1, unsigned int r, unsigned int g, unsigned int b ); + inline void line(const char* name, Element_pos x1, Element_pos y1, Element_pos x2, Element_pos y2); + inline void triangle(const char* name,Element_pos x1,Element_pos y1,Element_pos x2,Element_pos y2, Element_pos x3,Element_pos y3); public: /*! * \brief SVG header buiding @@ -111,6 +111,7 @@ inline void Svg::draw_container_text(const Element_pos x, const Element_pos y, c } inline void Svg::start_draw_containers(){ + } inline void Svg::end_draw_containers(){ @@ -128,12 +129,59 @@ inline void Svg::end_draw_states(){ *******************/ inline void Svg::start_draw_counter(){ + _chronogramme_state=INIT; } inline void Svg::draw_counter(const Element_pos x, const Element_pos y){ + + if (_chronogramme_state==INIT) + { + if (x==0) + { + _chronogramme << "\n<path d='M0 "<< y; + _chronogramme_state=WAIT_FOR_POINT; + } + else + std::cerr<<"draw_counter not initialised"; + + } + else if (_chronogramme_state==WAIT_FOR_POINT) + + { + + if (x==0) + { + _chronogramme << "'/>"; + _svg_file.write(_chronogramme.str().c_str(), _chronogramme.str().size()); + _chronogramme.str(""); + _chronogramme_state=WAIT_NEW_CHRONO; + } + else + { + _chronogramme << " L" << x << " " << y; + } + + } + + else if (_chronogramme_state==WAIT_NEW_CHRONO) + { + if (x==0) + { + _chronogramme << "\n<path d='M0 "<< y; + _chronogramme_state=WAIT_FOR_POINT; + } + else + std::cerr<<"draw_counter not initialised"; + + + } + + } inline void Svg::end_draw_counter(){ + if (_chronogramme_state!=WAIT_NEW_CHRONO) + std::cerr<<"draw_counter not un-initialised"; } @@ -141,13 +189,13 @@ inline void Svg::end_draw(){ Svg::end(); } -void Svg::rectangle(const char* name,unsigned long w, unsigned long h,unsigned long x1,unsigned long y1, unsigned int r, unsigned int g, unsigned int b ){ +void Svg::rectangle(const char* name,Element_pos w, Element_pos h,Element_pos x1,Element_pos y1, unsigned int r, unsigned int g, unsigned int b ){ _buffer << "\n<rect title='"<<name<<"' width='" << w <<"' height='"<< h <<"' x='" << x1 <<"' y='" << y1 <<"' fill='rgb("<<r<<","<<g<<","<<b - <<")'/>" << std::endl; + <<")'/>"; print(); } @@ -155,12 +203,12 @@ void Svg::rectangle(const char* name,unsigned long w, unsigned long h,unsigned l -void Svg::triangle(const char* name,unsigned long x1,unsigned long y1,unsigned long x2,unsigned long y2, unsigned long x3,unsigned long y3){ +void Svg::triangle(const char* name,Element_pos x1,Element_pos y1,Element_pos x2,Element_pos y2, Element_pos x3,Element_pos y3){ _buffer << "\n<polyline title='"<<name<<"' class='triangle' points='" << x1 << "," << y1 << " " << x2 << "," << y2 << " " << x3 << "," << y3 - <<"' />" << std::endl; + <<"' />"; print(); } @@ -173,7 +221,7 @@ void Svg::print(){ -inline void Svg::line(const char* name, long unsigned int x1, long unsigned int y1, long unsigned int x2, long unsigned int y2){ +inline void Svg::line(const char* name, Element_pos x1, Element_pos y1, Element_pos x2, Element_pos y2){ _buffer << "\n<line title='"<<name<<"' x1='" << x1 <<"' y1='" << y1 <<"' x2='" << x2 diff --git a/tests/interface/test_svg.cpp b/tests/interface/test_svg.cpp index c0318ff9502ff79397dbc64a53d5488769c0069c..1a354c4e4d818d07726c1247d520115d686d2717 100644 --- a/tests/interface/test_svg.cpp +++ b/tests/interface/test_svg.cpp @@ -13,9 +13,9 @@ int main() s.draw_container(0,LEVEL*2,50,100); s.draw_container(0,LEVEL*3,50,100); - s.draw_state(100, 750, 1,NULL, 0xff,0xcc,33); + s.draw_state(100, 750.87, 1,NULL, 0xff,0xcc,33); s.draw_state(400, 750, 2,NULL, 0xff,0xcc,33); - s.draw_state(70, 300, 3,NULL, 0xff,0xcc,33); + s.draw_state(70.756, 300, 3,NULL, 0xff,0xcc,33); s.draw_arrow(100,700,LEVEL*1,LEVEL*3); s.draw_arrow(200,400,LEVEL*2,LEVEL*2);