PeriDyno 1.2.1
Loading...
Searching...
No Matches
Canvas.h
Go to the documentation of this file.
1#ifndef CANVAS_H
2#define CANVAS_H
3
4#include <vector>
5#include <memory>
6#include <string>
7#include "Vector/Vector2D.h"
8#include "Vector/Vector3D.h"
9
10namespace dyno {
11 class Canvas
12 {
13 public:
14
21
23 {
24 Open = 0,
25 Close = 1,
26 };
27
28 struct Coord2D
29 {
30 double x = 0;
31 double y = 0;
32
33 void set(double a, double b)
34 {
35 this->x = a;
36 this->y = b;
37 }
39 {
40 }
41 Coord2D(double a, double b)
42 {
43 double temp = a;
44 if (temp < 0) { temp = 0; }
45 else if (temp > 1) { temp = 1; }
46 this->x = temp;
47 temp = b;
48 if (temp < 0) { temp = 0; }
49 else if (temp > 1) { temp = 1; }
50 this->y = temp;
51 }
53 {
54 this->x = s[0];
55 this->y = s[1];
56 }
57 Coord2D(double a, double b, int i)
58 {
59 this->x = a;
60 this->y = b;
61 }
62
63 };
64
65 struct EndPoint
66 {
67 int first = 0;
68 int second = 0;
71 {
72 this->first = first;
73 this->second = second;
74 }
75 };
76
78 {
79 int x = 0;
80 int y = 0;
81
82 void set(int a, int b)
83 {
84 this->x = a;
85 this->y = b;
86 }
87 };
88
89 public:
90 Canvas() {}
92
93 //User Interface
94 //Edit
95 void addPoint(float x, float y);
96 void addPointAndHandlePoint(Coord2D point, Coord2D handle_1, Coord2D handle_2);
97 void addFloatItemToCoord(float x, float y, std::vector<Coord2D>& coordArray);
98 void clearMyCoord();
99
100 //Comands
101 void setCurveClose(bool s) { this->mClose = s; UpdateFieldFinalCoord(); };
102 void setInterpMode(bool useBezier);
103 void setResample(bool s) { this->mResample = s; UpdateFieldFinalCoord(); };
104 virtual bool isSquard(){ return true; };
105 void useBezier();
106 void useLinear();
107 void setSpacing(double s) { this->mSpacing = s; UpdateFieldFinalCoord(); };
108
109 //************** Widget Interface **************//
110
111 virtual void updateBezierCurve();
112 void updateBezierPointToBezierSet(Coord2D p0, Coord2D p1, Coord2D p2, Coord2D p3, std::vector<Coord2D>& bezierSet);
113
115 void resamplePointFromLine(std::vector<Coord2D> pointSet);
116
117 //get
118 std::vector<Coord2D> getPoints() { return mFinalCoord; }
119 unsigned getPointSize() { return this->mFinalCoord.size(); }
120
122
123 virtual void UpdateFieldFinalCoord() {};
124
125
126 //IO
127
128 void convertCoordToStr(std::string VarName, std::vector<Canvas::Coord2D> Array, std::string& Str)
129 {
130 Str.append(VarName + " ");
131 for (int i = 0; i < Array.size(); i++)
132 {
133 std::string tempTextX = std::to_string(Array[i].x);
134 std::string tempTextY = std::to_string(Array[i].y);
135 Str.append(tempTextX + " " + tempTextY);
136 if (i != Array.size() - 1)
137 {
138 Str.append(" ");
139 }
140 }
141 Str.append(" ");
142 }
143
144 template <typename T>
145 void convertVarToStr(std::string VarName, T value, std::string& Str)
146 {
147 Str.append(VarName + " ");
148 if constexpr (std::is_same_v<T, float> || std::is_same_v<T, double>)
149 {
150 Str.append(std::to_string(value));
151 }
152 else
153 {
154 Str.append(std::to_string(static_cast<int>(value)));
155 }
156 Str.append(" ");
157 std::cout << std::endl << Str;
158 }
159
160 void setVarByStr(std::string Str, double& value)
161 {
162 if (std::isdigit(Str[0]) | (Str[0] == '-'))
163 {
164 value = std::stod(Str);
165 }
166 return;
167 }
168 void setVarByStr(std::string Str, float& value)
169 {
170 if (std::isdigit(Str[0]) | (Str[0] == '-'))
171 {
172 value = float(std::stod(Str));
173 }
174 return;
175 }
176 void setVarByStr(std::string Str, int& value)
177 {
178 if (std::isdigit(Str[0]) | (Str[0] == '-'))
179 {
180 value = std::stoi(Str);
181 }
182 return;
183 }
184
185 void setVarByStr(std::string Str, bool& value)
186 {
187 if (std::isdigit(Str[0]))
188 {
189 value = bool(std::stoi(Str));
190 }
191 return;
192 }
193
194 void setVarByStr(std::string Str, Canvas::Interpolation& value)
195 {
196 if (std::isdigit(Str[0]))
197 {
198 value = Canvas::Interpolation(std::stoi(Str));
199 }
200 return;
201 }
202
203 std::vector<Coord2D>& getUserPoints() { return mUserCoord; }
204 std::vector<Coord2D>& getUserHandles() {return mUserHandle;}
205
206 bool& getResample() { return mResample; }
207 bool& getClose() { return mClose; }
208 float& getSpacing() { return mSpacing; }
209
210 protected:
211 void rebuildHandlePoint(std::vector<Coord2D> coordSet);
212 void buildSegMent_Length_Map(std::vector<Coord2D> BezierPtSet);
213
214
215
216
217 protected:
218
220 float mSpacing = 5;
221 bool mResample = true;
222 bool mClose = false;
223 std::vector<Coord2D> mUserCoord;
224 std::vector<Coord2D> mUserHandle;
225
226 //
227 std::vector<Coord2D> mBezierPoint;
228 std::vector<Coord2D> mFinalCoord;
229 std::vector<Coord2D> mResamplePoint;
230 std::map<float, EndPoint> mLength_EndPoint_Map;
231 std::vector<double> mLengthArray;
232 };
233
234}
235
236#endif
This class is designed to be elegant, so it can be directly passed to GPU as parameters.
Definition Array.h:27
std::vector< Coord2D > mFinalCoord
Definition Canvas.h:228
void updateResampleLinearLine()
Definition Canvas.cpp:117
std::vector< Coord2D > mResamplePoint
Definition Canvas.h:229
void useLinear()
Definition Canvas.cpp:32
void setVarByStr(std::string Str, float &value)
Definition Canvas.h:168
std::map< float, EndPoint > mLength_EndPoint_Map
Definition Canvas.h:230
void addFloatItemToCoord(float x, float y, std::vector< Coord2D > &coordArray)
Definition Canvas.cpp:20
void setInterpMode(bool useBezier)
Definition Canvas.cpp:266
Canvas::Interpolation mInterpMode
Definition Canvas.h:219
virtual bool isSquard()
Definition Canvas.h:104
bool & getClose()
Definition Canvas.h:207
unsigned getPointSize()
Definition Canvas.h:119
void rebuildHandlePoint(std::vector< Coord2D > coordSet)
Definition Canvas.cpp:192
std::vector< Coord2D > mBezierPoint
Definition Canvas.h:227
bool & getResample()
Definition Canvas.h:206
void setVarByStr(std::string Str, int &value)
Definition Canvas.h:176
std::vector< Coord2D > getPoints()
Definition Canvas.h:118
void addPoint(float x, float y)
Definition Canvas.cpp:3
void setCurveClose(bool s)
Definition Canvas.h:101
float & getSpacing()
Definition Canvas.h:208
float mSpacing
Definition Canvas.h:220
void setResample(bool s)
Definition Canvas.h:103
void convertCoordToStr(std::string VarName, std::vector< Canvas::Coord2D > Array, std::string &Str)
Definition Canvas.h:128
std::vector< Coord2D > mUserHandle
Definition Canvas.h:224
std::vector< double > mLengthArray
Definition Canvas.h:231
Canvas::Interpolation & getInterpMode()
Definition Canvas.h:121
bool mResample
Definition Canvas.h:221
std::vector< Coord2D > mUserCoord
Definition Canvas.h:223
virtual void updateBezierCurve()
Definition Canvas.cpp:38
bool mClose
Definition Canvas.h:222
void buildSegMent_Length_Map(std::vector< Coord2D > BezierPtSet)
Definition Canvas.cpp:242
void setVarByStr(std::string Str, bool &value)
Definition Canvas.h:185
void setSpacing(double s)
Definition Canvas.h:107
std::vector< Coord2D > & getUserPoints()
Definition Canvas.h:203
void setVarByStr(std::string Str, Canvas::Interpolation &value)
Definition Canvas.h:194
std::vector< Coord2D > & getUserHandles()
Definition Canvas.h:204
void resamplePointFromLine(std::vector< Coord2D > pointSet)
Definition Canvas.cpp:130
void updateBezierPointToBezierSet(Coord2D p0, Coord2D p1, Coord2D p2, Coord2D p3, std::vector< Coord2D > &bezierSet)
Definition Canvas.cpp:82
void convertVarToStr(std::string VarName, T value, std::string &Str)
Definition Canvas.h:145
@ InterpolationCount
Definition Canvas.h:19
void addPointAndHandlePoint(Coord2D point, Coord2D handle_1, Coord2D handle_2)
Definition Canvas.cpp:11
void setVarByStr(std::string Str, double &value)
Definition Canvas.h:160
virtual void UpdateFieldFinalCoord()
Definition Canvas.h:123
void clearMyCoord()
Definition Canvas.cpp:271
void useBezier()
Definition Canvas.cpp:27
#define T(t)
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
Vector< float, 2 > Vec2f
Definition Vector2D.h:81
Coord2D(double a, double b, int i)
Definition Canvas.h:57
void set(double a, double b)
Definition Canvas.h:33
Coord2D(double a, double b)
Definition Canvas.h:41
EndPoint(int first, int second)
Definition Canvas.h:70
void set(int a, int b)
Definition Canvas.h:82