PeriDyno 1.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
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
16 {
17 x = 0,
18 y = 1,
19 count = 2,
20 };
21
28
30 {
31 Open = 0,
32 Close = 1,
33 };
34
35 struct Coord2D
36 {
37 double x = 0;
38 double y = 0;
39
40 void set(double a, double b)
41 {
42 this->x = a;
43 this->y = b;
44 }
46 {
47 }
48 Coord2D(double a, double b)
49 {
50 double temp = a;
51 if (temp < 0) { temp = 0; }
52 else if (temp > 1) { temp = 1; }
53 this->x = temp;
54 temp = b;
55 if (temp < 0) { temp = 0; }
56 else if (temp > 1) { temp = 1; }
57 this->y = temp;
58 }
60 {
61 this->x = s[0];
62 this->y = s[1];
63 }
64 Coord2D(double a, double b, int i)
65 {
66 this->x = a;
67 this->y = b;
68 }
69
70 };
71
72 struct EndPoint
73 {
74 int first = 0;
75 int second = 0;
78 {
79 this->first = first;
80 this->second = second;
81 }
82 };
83
85 {
86 int x = 0;
87 int y = 0;
88
89 void set(int a, int b)
90 {
91 this->x = a;
92 this->y = b;
93 }
94 };
95
96 public:
97 Canvas() {}
99
100 //User Interface
101 //Edit
102 void addPoint(float x, float y);
103 void addPointAndHandlePoint(Coord2D point, Coord2D handle_1, Coord2D handle_2);
104 void addFloatItemToCoord(float x, float y, std::vector<Coord2D>& coordArray);
105 void clearMyCoord();
106
107 //Comands
108 void setCurveClose(bool s) { this->curveClose = s; UpdateFieldFinalCoord(); };
109 void setInterpMode(bool useBezier);
110 void setResample(bool s) { this->resample = s; UpdateFieldFinalCoord(); };
111 void setUseSquard(bool s) { useSquard = s; };
112 void useBezier();
113 void useLinear();
114 void setSpacing(double s) { this->Spacing = s; UpdateFieldFinalCoord(); };
115
116 //
117 void remapX(double minX, double maxX) { NminX = minX; NmaxX = maxX; UpdateFieldFinalCoord(); }
118 void remapY(double minY, double maxY) { mNewMinY = minY; NmaxY = maxY; UpdateFieldFinalCoord(); }
119 void remapXY(double minX, double maxX, double minY, double maxY) { NminX = minX; NmaxX = maxX; mNewMinY = minY; NmaxY = maxY; UpdateFieldFinalCoord(); }
120
121 void setRange_MinX(float min, float max) { remapRange[0] = min; remapRange[1] = max; }// "MinX", "MinY", "MaxX", "MaxY"
122 void setRange_MaxX(float min, float max) { remapRange[4] = min; remapRange[5] = max; }
123 void setRange_MinY(float min, float max) { remapRange[2] = min; remapRange[3] = max; }
124 void setRange_MaxY(float min, float max) { remapRange[6] = min; remapRange[7] = max; }
125 void setRange(float min, float max) { setRange_MinX(min, max); setRange_MaxX(min, max); setRange_MinY(min, max); setRange_MaxY(min, max); };
126
127
128
129 //************** Widget Interface **************//
130 void addItemOriginalCoord(int x, int y);
131 void addItemHandlePoint(int x, int y);
132 virtual void updateBezierCurve();
133 void updateBezierPointToBezierSet(Coord2D p0, Coord2D p1, Coord2D p2, Coord2D p3, std::vector<Coord2D>& bezierSet);
134
136 void resamplePointFromLine(std::vector<Coord2D> pointSet);
137
138 //get
139 std::vector<Coord2D> getPoints() { return mFinalCoord; }
140 unsigned getPointSize() { return this->mFinalCoord.size(); }
141
142
143 virtual void UpdateFieldFinalCoord() {};
144
145
146 //IO
147
148 void convertCoordToStr(std::string VarName, std::vector<Canvas::Coord2D> Array, std::string& Str)
149 {
150 Str.append(VarName + " ");
151 for (int i = 0; i < Array.size(); i++)
152 {
153 std::string tempTextX = std::to_string(Array[i].x);
154 std::string tempTextY = std::to_string(Array[i].y);
155 Str.append(tempTextX + " " + tempTextY);
156 if (i != Array.size() - 1)
157 {
158 Str.append(" ");
159 }
160 }
161 Str.append(" ");
162 }
163
164 template <typename T>
165 void convertVarToStr(std::string VarName, T value, std::string& Str)
166 {
167 Str.append(VarName + " ");
168 if constexpr (std::is_same_v<T, float> || std::is_same_v<T, double>)
169 {
170 Str.append(std::to_string(value));
171 }
172 else
173 {
174 Str.append(std::to_string(static_cast<int>(value)));
175 }
176 Str.append(" ");
177 std::cout << std::endl << Str;
178 }
179
180 void setVarByStr(std::string Str, double& value)
181 {
182 if (std::isdigit(Str[0]) | (Str[0] == '-'))
183 {
184 value = std::stod(Str);
185 }
186 return;
187 }
188 void setVarByStr(std::string Str, float& value)
189 {
190 if (std::isdigit(Str[0]) | (Str[0] == '-'))
191 {
192 value = float(std::stod(Str));
193 }
194 return;
195 }
196 void setVarByStr(std::string Str, int& value)
197 {
198 if (std::isdigit(Str[0]) | (Str[0] == '-'))
199 {
200 value = std::stoi(Str);
201 }
202 return;
203 }
204
205 void setVarByStr(std::string Str, bool& value)
206 {
207 if (std::isdigit(Str[0]))
208 {
209 value = bool(std::stoi(Str));
210 }
211 return;
212 }
213
214 void setVarByStr(std::string Str, Canvas::Interpolation& value)
215 {
216 if (std::isdigit(Str[0]))
217 {
218 value = Canvas::Interpolation(std::stoi(Str));
219 }
220 return;
221 }
222
223
224 void setVarByStr(std::string Str, Direction& value)
225 {
226 if (std::isdigit(Str[0]))
227 {
228 value = Direction(std::stoi(Str));
229 }
230 return;
231 }
232
233 protected:
234 void rebuildHandlePoint(std::vector<Coord2D> coordSet);
235 void buildSegMent_Length_Map(std::vector<Coord2D> BezierPtSet);
236
237 //IO
238
239
240
241 public:
243 std::vector<Coord2D> mCoord;
244 std::vector<Coord2D> mBezierPoint;
245 std::vector<Coord2D> mFinalCoord;
246 std::vector<Coord2D> mResamplePoint;
247 std::vector<double> mLengthArray;
248 std::vector<Coord2D> myHandlePoint;
249 std::string InterpStrings[2] = { "Linear","Bezier" };
250 std::vector<OriginalCoord> Originalcoord;//qt Point Coord
251 std::vector<OriginalCoord> OriginalHandlePoint;//qt HandlePoint Coord
252
253 float remapRange[8] = { -3,3,-3,3,-3,3,-3,3 };// "MinX","MinY","MaxX","MaxY"
254
255 double NminX = 0;
256 double NmaxX = 1;
257 double mNewMinY = 0;
258 double NmaxY = 1;
259
260 bool lockSize = false;
262 bool resample = true;
263 bool curveClose = false;
264 bool useColseButton = true;
265 bool useSquard = true;
266 bool useSquardButton = true;
267 float Spacing = 5;
268 float segment = 10;
270
271 std::map<float, EndPoint> length_EndPoint_Map;
272
273
274
275 protected:
276
277
278 };
279
280}
281
282#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:245
void updateResampleLinearLine()
Definition Canvas.cpp:130
std::vector< Coord2D > mResamplePoint
Definition Canvas.h:246
void useLinear()
Definition Canvas.cpp:32
void setVarByStr(std::string Str, float &value)
Definition Canvas.h:188
void addFloatItemToCoord(float x, float y, std::vector< Coord2D > &coordArray)
Definition Canvas.cpp:20
void remapXY(double minX, double maxX, double minY, double maxY)
Definition Canvas.h:119
void setInterpMode(bool useBezier)
Definition Canvas.cpp:279
Canvas::Interpolation mInterpMode
Definition Canvas.h:242
std::map< float, EndPoint > length_EndPoint_Map
Definition Canvas.h:271
bool lockSize
Definition Canvas.h:260
void setUseSquard(bool s)
Definition Canvas.h:111
unsigned getPointSize()
Definition Canvas.h:140
bool resample
Definition Canvas.h:262
void rebuildHandlePoint(std::vector< Coord2D > coordSet)
Definition Canvas.cpp:205
std::vector< Coord2D > mBezierPoint
Definition Canvas.h:244
void addItemHandlePoint(int x, int y)
Definition Canvas.cpp:44
bool useBezierInterpolation
Definition Canvas.h:261
void setVarByStr(std::string Str, int &value)
Definition Canvas.h:196
void setRange_MaxX(float min, float max)
Definition Canvas.h:122
std::vector< Coord2D > getPoints()
Definition Canvas.h:139
void addPoint(float x, float y)
Definition Canvas.cpp:3
std::vector< OriginalCoord > OriginalHandlePoint
Definition Canvas.h:251
void setCurveClose(bool s)
Definition Canvas.h:108
double NmaxX
Definition Canvas.h:256
double NmaxY
Definition Canvas.h:258
void remapX(double minX, double maxX)
Definition Canvas.h:117
void addItemOriginalCoord(int x, int y)
Definition Canvas.cpp:37
void setResample(bool s)
Definition Canvas.h:110
std::vector< Coord2D > mCoord
Definition Canvas.h:243
void convertCoordToStr(std::string VarName, std::vector< Canvas::Coord2D > Array, std::string &Str)
Definition Canvas.h:148
bool curveClose
Definition Canvas.h:263
float resampleResolution
Definition Canvas.h:269
void setVarByStr(std::string Str, Direction &value)
Definition Canvas.h:224
void setRange_MaxY(float min, float max)
Definition Canvas.h:124
void remapY(double minY, double maxY)
Definition Canvas.h:118
bool useSquardButton
Definition Canvas.h:266
std::vector< double > mLengthArray
Definition Canvas.h:247
float segment
Definition Canvas.h:268
float remapRange[8]
Definition Canvas.h:253
double mNewMinY
Definition Canvas.h:257
bool useSquard
Definition Canvas.h:265
virtual void updateBezierCurve()
Definition Canvas.cpp:51
void setRange(float min, float max)
Definition Canvas.h:125
double NminX
Definition Canvas.h:255
void buildSegMent_Length_Map(std::vector< Coord2D > BezierPtSet)
Definition Canvas.cpp:255
void setVarByStr(std::string Str, bool &value)
Definition Canvas.h:205
void setRange_MinX(float min, float max)
Definition Canvas.h:121
void setSpacing(double s)
Definition Canvas.h:114
bool useColseButton
Definition Canvas.h:264
void setRange_MinY(float min, float max)
Definition Canvas.h:123
void setVarByStr(std::string Str, Canvas::Interpolation &value)
Definition Canvas.h:214
void resamplePointFromLine(std::vector< Coord2D > pointSet)
Definition Canvas.cpp:143
void updateBezierPointToBezierSet(Coord2D p0, Coord2D p1, Coord2D p2, Coord2D p3, std::vector< Coord2D > &bezierSet)
Definition Canvas.cpp:95
float Spacing
Definition Canvas.h:267
void convertVarToStr(std::string VarName, T value, std::string &Str)
Definition Canvas.h:165
@ InterpolationCount
Definition Canvas.h:26
void addPointAndHandlePoint(Coord2D point, Coord2D handle_1, Coord2D handle_2)
Definition Canvas.cpp:11
void setVarByStr(std::string Str, double &value)
Definition Canvas.h:180
virtual void UpdateFieldFinalCoord()
Definition Canvas.h:143
std::string InterpStrings[2]
Definition Canvas.h:249
std::vector< Coord2D > myHandlePoint
Definition Canvas.h:248
void clearMyCoord()
Definition Canvas.cpp:292
void useBezier()
Definition Canvas.cpp:27
std::vector< OriginalCoord > Originalcoord
Definition Canvas.h:250
#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:64
void set(double a, double b)
Definition Canvas.h:40
Coord2D(double a, double b)
Definition Canvas.h:48
EndPoint(int first, int second)
Definition Canvas.h:77
void set(int a, int b)
Definition Canvas.h:89
#define max(x, y)
Definition svd3_cuda.h:41