aboutsummaryrefslogtreecommitdiff
path: root/svg-flatten/src/vec_core.h
diff options
context:
space:
mode:
Diffstat (limited to 'svg-flatten/src/vec_core.h')
-rw-r--r--svg-flatten/src/vec_core.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/svg-flatten/src/vec_core.h b/svg-flatten/src/vec_core.h
new file mode 100644
index 0000000..8267fd1
--- /dev/null
+++ b/svg-flatten/src/vec_core.h
@@ -0,0 +1,58 @@
+/*
+ * This file is part of gerbolyze, a vector image preprocessing toolchain
+ * Copyright (C) 2021 Jan Sebastian Götte <gerbolyze@jaseg.de>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include <cairo.h>
+#include <pugixml.hpp>
+#include <clipper.hpp>
+#include <gerbolyze.hpp>
+#include "vec_grid.h"
+
+namespace gerbolyze {
+
+ class VoronoiVectorizer : public ImageVectorizer {
+ public:
+ VoronoiVectorizer(grid_type grid, bool relax=true) : m_relax(relax), m_grid_type(grid) {}
+
+ virtual void vectorize_image(cairo_t *cr, const pugi::xml_node &node, ClipperLib::Paths &clip_path, cairo_matrix_t &viewport_matrix, PolygonSink &sink, double min_feature_size_px);
+ private:
+ double m_relax;
+ grid_type m_grid_type;
+ };
+
+ class OpenCVContoursVectorizer : public ImageVectorizer {
+ public:
+ OpenCVContoursVectorizer() {}
+
+ virtual void vectorize_image(cairo_t *cr, const pugi::xml_node &node, ClipperLib::Paths &clip_path, cairo_matrix_t &viewport_matrix, PolygonSink &sink, double min_feature_size_px);
+ };
+
+ class DevNullVectorizer : public ImageVectorizer {
+ public:
+ DevNullVectorizer() {}
+
+ virtual void vectorize_image(cairo_t *, const pugi::xml_node &, ClipperLib::Paths &, cairo_matrix_t &, PolygonSink &, double) {}
+ };
+
+ void parse_img_meta(const pugi::xml_node &node, double &x, double &y, double &width, double &height);
+ std::string read_img_data(const pugi::xml_node &node);
+ void draw_bg_rect(cairo_t *cr, double width, double height, ClipperLib::Paths &clip_path, PolygonSink &sink, cairo_matrix_t &viewport_matrix);
+ void handle_aspect_ratio(std::string spec, double &scale_x, double &scale_y, double &off_x, double &off_y, double cols, double rows);
+}
+