diff --git a/src/graph/graph.cc b/src/graph/graph.cc
index 3259c44..64b09a3 100644
--- a/src/graph/graph.cc
+++ b/src/graph/graph.cc
@@ -8,6 +8,17 @@
std::string Graph::svg_demo(Analyse::track_data_t track_data) {
+ auto s = SvgGraph(1000, 1200);
+
+ auto *sl = new SvgLine({100, 200}, {500, 800});
+ sl->color = std::string("blue");
+ sl->dasharray = "10,5";
+ sl->opacity = 0.5;
+ s.insert(sl);
+
+ std::cout << s.dump() << std::endl;
+ return "";
+
// for (uint32_t i = 0; i < track_data.size(); ++i) {
//
// const auto &ly = track_data[i];
diff --git a/src/graph/svg/CMakeLists.txt b/src/graph/svg/CMakeLists.txt
index 1c8e024..6ca873c 100644
--- a/src/graph/svg/CMakeLists.txt
+++ b/src/graph/svg/CMakeLists.txt
@@ -1,3 +1 @@
-cmake_minimum_required(VERSION 3.0)
-
add_library(svg svg.cc)
diff --git a/src/graph/svg/svg.cc b/src/graph/svg/svg.cc
index 22b11e5..db05a42 100644
--- a/src/graph/svg/svg.cc
+++ b/src/graph/svg/svg.cc
@@ -1,5 +1,11 @@
#include "svg.h"
+inline std::string float_to_string(float data) {
+ auto str = std::to_string(data);
+ return str.substr(0, str.find('.') + 3); // format -> xxx.__
+}
+
+/// SvgGraph interface
void SvgGraph::insert(SvgObject *obj) {
objects.emplace_back(obj);
}
@@ -10,27 +16,40 @@ SvgGraph::~SvgGraph() {
}
}
-std::string SvgLine::dump() const {
+std::string SvgGraph::dump() const {
+ std::string xml = R"(\n";
+}
+/// SvgLine render as XML content
+std::string SvgLine::dump() const {
/// basic attributes of svg-line
-
std::string xml = "
-
-
- // TODO: svg-line css style
-
+ /// style attribute of svg-line
+ std::string style = "stroke-width:" + float_to_string(width) + ";";
+ if (!color.empty()) {
+ style += "stroke:" + color + ";";
+ }
+ if (opacity != 0) {
+ style += "stroke-opacity:" + float_to_string(opacity) + ";";
+ }
return xml + "style=\"" + style + "\" />";
-
}
+/// SvgRect render as XML content
std::string SvgRect::dump() const {
/// basic attributes of svg-rect
std::string xml = "";
}
-
-std::string SvgGraph::dump() const {
- std::string xml = R"(\n";
-}
diff --git a/src/graph/svg/svg.h b/src/graph/svg/svg.h
index 09ab76c..1540fe5 100644
--- a/src/graph/svg/svg.h
+++ b/src/graph/svg/svg.h
@@ -11,20 +11,23 @@ public:
uint64_t y;
};
-/// basic class of SVG element
+/// SVG basic element
class SvgObject {
public:
virtual ~SvgObject() = default;
virtual std::string dump() const = 0;
};
+// TODO: SVG text element
+
/// SVG line element
class SvgLine : public SvgObject {
public:
- Point start;
- Point end;
-
- // TODO: more options for svg-line
+ Point start, end;
+ std::string color;
+ float width = 1.0;
+ float opacity = 0;
+ std::string dasharray;
~SvgLine() override = default;
std::string dump() const override;