Browse Source

perf: enhance SvgGraph module

master
Dnomd343 2 years ago
parent
commit
2d2bb40fa8
  1. 38
      src/graph/graph.cc
  2. 66
      src/graph/svg/svg.cc
  3. 34
      src/graph/svg/svg.h

38
src/graph/graph.cc

@ -9,21 +9,21 @@
void Graph::svg_demo(Analyse::track_data_t track_data) {
auto s = SvgRect();
auto s = new SvgRect();
s.left = 50;
s.top = 80;
s->left = 50;
s->top = 80;
s.width = 100;
s.height = 200;
s->width = 100;
s->height = 200;
s.radius = 20;
s->radius = 20;
s.opacity = 0.8;
s.line_opacity = 0.5;
s->opacity = 0.8;
s->line_opacity = 0.5;
s.color = "blue";
s.line_color = "green";
s->color = "blue";
s->line_color = "green";
// printf(R"(<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="%d" height="%d">)", 1000, 1000);
// printf("\n");
@ -32,21 +32,21 @@ void Graph::svg_demo(Analyse::track_data_t track_data) {
//
// printf("</svg>\n");
auto l = SvgLine();
l.start_x = 100;
l.start_y = 200;
auto l = new SvgLine();
l->start_x = 100;
l->start_y = 200;
l.end_x = 300;
l.end_y = 400;
l->end_x = 300;
l->end_y = 400;
auto sg = SvgGraph();
auto sg = SvgGraph(1000, 2000);
// sg.insert(&s);
// sg.insert(&l);
sg.insert(std::move(s));
sg.insert(std::move(l));
sg.insert(s);
sg.insert(l);
sg.dump();
std::cout << sg.dump() << std::endl;
return;

66
src/graph/svg/svg.cc

@ -1,7 +1,27 @@
#include "svg.h"
#include <iostream>
SvgGraph::~SvgGraph() {
for (auto *object : objects) {
delete object;
}
}
void SvgGraph::insert(SvgObject *obj) {
objects.emplace_back(obj);
}
std::string SvgLine::dump() const {
/// basic attributes of svg-line
return "<line />";
}
std::string SvgRect::dump() const {
/// basic attribute of svg-rect
/// basic attributes of svg-rect
std::string xml = "<rect ";
xml += "x=\"" + std::to_string(left) + "\" ";
xml += "y=\"" + std::to_string(top) + "\" ";
@ -27,44 +47,12 @@ std::string SvgRect::dump() const {
return xml + "style=\"" + style + "\" />";
}
SvgGraph::~SvgGraph() {
for (auto &object : objects) {
delete object;
}
}
//void SvgGraph::insert(SvgObject *obj) {
// objects.emplace_back(obj);
//}
#include <iostream>
std::string SvgGraph::dump() const {
for (auto o : objects) {
std::cout << o->dump() << std::endl;
std::string xml = R"(<svg xmlns="http://www.w3.org/2000/svg" version="1.1")";
xml += " width=\"" + std::to_string(width) + "\"";
xml += " height=\"" + std::to_string(height) + "\">\n";
for (const auto *object : objects) {
xml += " " + object->dump() + "\n";
}
return "svg result";
}
void SvgGraph::insert(const SvgRect &rect) {
//void SvgGraph::insert(SvgRect rect) {
auto s = new SvgRect(rect);
objects.emplace_back(s);
}
void SvgGraph::insert(const SvgLine &line) {
auto l = new SvgLine(line);
objects.emplace_back(l);
}
std::string SvgLine::dump() const {
return "<line />";
return xml + "</svg>\n";
}

34
src/graph/svg/svg.h

@ -10,6 +10,20 @@ public:
virtual std::string dump() const = 0;
};
class SvgGraph {
public:
uint64_t width;
uint64_t height;
~SvgGraph();
std::string dump() const;
void insert(SvgObject *obj);
SvgGraph(uint64_t w, uint64_t h) : width(w), height(h) {}
private:
std::vector<SvgObject*> objects;
};
class SvgLine : public SvgObject {
public:
uint64_t start_x;
@ -42,23 +56,3 @@ public:
~SvgRect() override = default;
std::string dump() const override;
};
class SvgGraph {
public:
std::vector<SvgObject*> objects;
// void insert(SvgObject *obj);
void insert(const SvgRect &rect);
void insert(const SvgLine &line);
// void insert(SvgRect rect);
// void insert(SvgLine line);
std::string dump() const;
~SvgGraph();
};

Loading…
Cancel
Save