1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /** @file
3  * Satellite -- a per node holder of data.
4  *//*
5  * Authors:
6  * see git history
7  * Jabier Arraiza Cenoz<jabier.arraiza@marker.es>
8  *
9  * Copyright (C) 2017 Authors
10  * Released under GNU GPL v2+, read the file 'COPYING' for more information.
11  */
12 
13 #ifndef SEEN_SATELLITE_H
14 #define SEEN_SATELLITE_H
15 
16 #include <map>
17 #include <boost/assign.hpp>
18 #include <2geom/sbasis-geometric.h>
19 #include "util/enums.h"
20 
21 
22 enum SatelliteType {
23     FILLET = 0, //Fillet
24     INVERSE_FILLET,    //Inverse Fillet
25     CHAMFER,     //Chamfer
26     INVERSE_CHAMFER,    //Inverse Chamfer
27     INVALID_SATELLITE     // Invalid Satellite
28 };
29 /**
30  * @brief Satellite a per node holder of data.
31  */
32 
33 class Satellite {
34 public:
35 
36     Satellite();
37     Satellite(SatelliteType satellite_type);
38 
39     virtual ~Satellite();
setIsTime(bool set_is_time)40     void setIsTime(bool set_is_time)
41     {
42         is_time = set_is_time;
43     }
setSelected(bool set_selected)44     void setSelected(bool set_selected)
45     {
46         selected = set_selected;
47     }
setHasMirror(bool set_has_mirror)48     void setHasMirror(bool set_has_mirror)
49     {
50         has_mirror = set_has_mirror;
51     }
setHidden(bool set_hidden)52     void setHidden(bool set_hidden)
53     {
54         hidden = set_hidden;
55     }
setAmount(double set_amount)56     void setAmount(double set_amount)
57     {
58         amount = set_amount;
59     }
setAngle(double set_angle)60     void setAngle(double set_angle)
61     {
62         angle = set_angle;
63     }
setSteps(size_t set_steps)64     void setSteps(size_t set_steps)
65     {
66         steps = set_steps;
67     }
68     double lenToRad(double const A, Geom::Curve const &curve_in,
69                     Geom::Curve const &curve_out,
70                     Satellite const previousSatellite) const;
71     double radToLen(double const A, Geom::Curve const &curve_in,
72                     Geom::Curve const &curve_out) const;
73 
74     double time(Geom::Curve const &curve_in, bool inverse = false) const;
75     double time(double A, bool inverse, Geom::Curve const &curve_in) const;
76     double arcDistance(Geom::Curve const &curve_in) const;
77 
78     void setPosition(Geom::Point const p, Geom::Curve const &curve_in, bool inverse = false);
79     Geom::Point getPosition(Geom::Curve const &curve_in, bool inverse = false) const;
80 
81     void setSatelliteType(gchar const *A);
82     gchar const *getSatelliteTypeGchar() const;
83     SatelliteType satellite_type;
84     //The value stored could be a time value of the satellite in the curve or a length of distance to the node from the satellite
85     //"is_time" tells us if it's a time or length value
86     bool is_time;
87     bool selected;
88     bool has_mirror;
89     bool hidden;
90     //in "amount" we store the time or distance used in the satellite
91     double amount;
92     double angle;
93     size_t steps;
94 };
95 
96 double timeAtArcLength(double const A, Geom::Curve const &curve_in);
97 double arcLengthAt(double const A, Geom::Curve const &curve_in);
98 
99 #endif // SEEN_SATELLITE_H
100 
101 /*
102   Local Variables:
103   mode:c++
104   c-file-style:"stroustrup"
105   c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
106   indent-tabs-mode:nil
107   fill-column:99
108   End:
109 */
110 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
111