summaryrefslogtreecommitdiffstats
path: root/src/helper/geom-nodesatellite.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/helper/geom-nodesatellite.h')
-rw-r--r--src/helper/geom-nodesatellite.h109
1 files changed, 109 insertions, 0 deletions
diff --git a/src/helper/geom-nodesatellite.h b/src/helper/geom-nodesatellite.h
new file mode 100644
index 0000000..1bb6c54
--- /dev/null
+++ b/src/helper/geom-nodesatellite.h
@@ -0,0 +1,109 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/** @file
+ * NodeSatellite -- a per node holder of data.
+ *//*
+ * Authors:
+ * see git history
+ * Jabier Arraiza Cenoz<jabier.arraiza@marker.es>
+ *
+ * Copyright (C) 2017 Authors
+ * Released under GNU GPL v2+, read the file 'COPYING' for more information.
+ */
+
+#ifndef SEEN_SATELLITE_H
+#define SEEN_SATELLITE_H
+
+#include <map>
+#include <boost/assign.hpp>
+#include <2geom/sbasis-geometric.h>
+#include "util/enums.h"
+
+enum NodeSatelliteType
+{
+ FILLET = 0, // Fillet
+ INVERSE_FILLET, // Inverse Fillet
+ CHAMFER, // Chamfer
+ INVERSE_CHAMFER, // Inverse Chamfer
+ INVALID_SATELLITE // Invalid NodeSatellite
+};
+/**
+ * @brief NodeSatellite a per node holder of data.
+ */
+
+class NodeSatellite
+{
+public:
+ NodeSatellite();
+ NodeSatellite(NodeSatelliteType nodesatellite_type);
+
+ virtual ~NodeSatellite();
+ void setIsTime(bool set_is_time)
+ {
+ is_time = set_is_time;
+ }
+ void setSelected(bool set_selected)
+ {
+ selected = set_selected;
+ }
+ void setHasMirror(bool set_has_mirror)
+ {
+ has_mirror = set_has_mirror;
+ }
+ void setHidden(bool set_hidden)
+ {
+ hidden = set_hidden;
+ }
+ void setAmount(double set_amount)
+ {
+ amount = set_amount;
+ }
+ void setAngle(double set_angle)
+ {
+ angle = set_angle;
+ }
+ void setSteps(size_t set_steps)
+ {
+ steps = set_steps;
+ }
+ double lenToRad(double const A, Geom::Curve const &curve_in, Geom::Curve const &curve_out,
+ NodeSatellite const previousNodeSatellite) const;
+ double radToLen(double const A, Geom::Curve const &curve_in,
+ Geom::Curve const &curve_out) const;
+
+ double time(Geom::Curve const &curve_in, bool inverse = false) const;
+ double time(double A, bool inverse, Geom::Curve const &curve_in) const;
+ double arcDistance(Geom::Curve const &curve_in) const;
+
+ void setPosition(Geom::Point const p, Geom::Curve const &curve_in, bool inverse = false);
+ Geom::Point getPosition(Geom::Curve const &curve_in, bool inverse = false) const;
+
+ void setNodeSatellitesType(gchar const *A);
+ gchar const *getNodeSatellitesTypeGchar() const;
+ NodeSatelliteType nodesatellite_type;
+ // The value stored could be a time value of the nodesatellite in the curve or a length of distance to the node from
+ // the nodesatellite "is_time" tells us if it's a time or length value
+ bool is_time;
+ bool selected;
+ bool has_mirror;
+ bool hidden;
+ // in "amount" we store the time or distance used in the nodesatellite
+ double amount;
+ double angle;
+ size_t steps;
+};
+
+double timeAtArcLength(double const A, Geom::Curve const &curve_in);
+double arcLengthAt(double const A, Geom::Curve const &curve_in);
+
+#endif // SEEN_SATELLITE_H
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :