Skip to content

Commit 8f3549c

Browse files
chore: selecting element
1 parent d8df9fd commit 8f3549c

11 files changed

Lines changed: 453 additions & 91 deletions

File tree

FreeFrame/Components/Shapes/Path/DrawAttribute.cs

Lines changed: 177 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Text;
55
using System.Threading.Tasks;
66
using System.Text.RegularExpressions;
7+
using OpenTK.Mathematics;
78

89
namespace FreeFrame.Components.Shapes.Path
910
{
@@ -14,21 +15,21 @@ namespace FreeFrame.Components.Shapes.Path
1415
/// </summary>
1516
public abstract class DrawAttribute
1617
{
17-
static float _lastX = 0;
18-
static float _lastY = 0;
18+
static int _lastX = 0;
19+
static int _lastY = 0;
1920

2021
#region Bézier Curve
21-
static float _lastControlPointX = 0; // Last control point x
22-
static float _lastControlPointY = 0; // Last control point y
22+
static int _lastControlPointX = 0; // Last control point x
23+
static int _lastControlPointY = 0; // Last control point y
2324
#endregion
2425

2526
static Type _lastCommand = typeof(MoveTo);
2627

2728

28-
public static float LastX { get => _lastX; set => _lastX = value; }
29-
public static float LastY { get => _lastY; set => _lastY = value; }
30-
public static float LastControlPointX { get => _lastControlPointX; set => _lastControlPointX = value; }
31-
public static float LastControlPointY { get => _lastControlPointY; set => _lastControlPointY = value; }
29+
public static int LastX { get => _lastX; set => _lastX = value; }
30+
public static int LastY { get => _lastY; set => _lastY = value; }
31+
public static int LastControlPointX { get => _lastControlPointX; set => _lastControlPointX = value; }
32+
public static int LastControlPointY { get => _lastControlPointY; set => _lastControlPointY = value; }
3233
public static Type LastCommand { get => _lastCommand; set => _lastCommand = value; }
3334

3435
/// <summary>
@@ -38,6 +39,8 @@ public abstract class DrawAttribute
3839
public abstract float[] GetVertices();
3940
public abstract uint[] GetVerticesIndexes();
4041

42+
public abstract List<Vector2i> GetSelectablePoints();
43+
4144
public abstract override string ToString();
4245
}
4346
/// <summary>
@@ -95,6 +98,8 @@ public override uint[] GetVerticesIndexes()
9598
}
9699

97100
public override string ToString() => String.Format("{0} {1},{2}", IsRelative ? 'm' : 'M', X, Y);
101+
102+
public override List<Vector2i> GetSelectablePoints() => new List<Vector2i>();
98103
}
99104
/// <summary>
100105
/// LineTo, L or l.
@@ -153,6 +158,23 @@ public override float[] GetVertices()
153158
public override uint[] GetVerticesIndexes() => new uint[] { 0, 1 }; // TODO: Please dont hardcode this
154159

155160
public override string ToString() => String.Format("{0} {1},{2}", IsRelative ? 'l' : 'L', X, Y);
161+
162+
public override List<Vector2i> GetSelectablePoints()
163+
{
164+
List<Vector2i> points = new List<Vector2i>();
165+
166+
if (IsRelative)
167+
{
168+
points.Add(new Vector2i(LastX, LastY));
169+
points.Add(new Vector2i(LastX + X, LastY + Y));
170+
}
171+
else
172+
{
173+
points.Add(new Vector2i(LastX, LastY));
174+
points.Add(new Vector2i(X, Y));
175+
}
176+
return points;
177+
}
156178
}
157179
/// <summary>
158180
/// HorizontalLineTo, H or h.
@@ -207,6 +229,23 @@ public override float[] GetVertices()
207229
public override uint[] GetVerticesIndexes() => new uint[] { 0, 1 }; // TODO: Please dont hardcode this
208230

209231
public override string ToString() => String.Format("{0} {1}", IsRelative ? 'h' : 'H', X);
232+
233+
public override List<Vector2i> GetSelectablePoints()
234+
{
235+
List<Vector2i> points = new List<Vector2i>();
236+
237+
if (IsRelative)
238+
{
239+
points.Add(new Vector2i(LastX, LastY));
240+
points.Add(new Vector2i(LastX + X, LastY));
241+
}
242+
else
243+
{
244+
points.Add(new Vector2i(LastX, LastY));
245+
points.Add(new Vector2i(X, LastY));
246+
}
247+
return points;
248+
}
210249
}
211250
/// <summary>
212251
/// VerticalLineTo, V or v.
@@ -254,6 +293,23 @@ public override float[] GetVertices()
254293
}
255294
public override uint[] GetVerticesIndexes() => new uint[] { 0, 1 }; // TODO: Please dont hardcode this
256295

296+
public override List<Vector2i> GetSelectablePoints()
297+
{
298+
List<Vector2i> points = new List<Vector2i>();
299+
300+
if (_isRelative)
301+
{
302+
points.Add(new Vector2i(LastX, LastY));
303+
points.Add(new Vector2i(LastX, LastY + _y));
304+
}
305+
else
306+
{
307+
points.Add(new Vector2i(LastX, LastY));
308+
points.Add(new Vector2i(LastX, _y));
309+
}
310+
return points;
311+
}
312+
257313
public override string ToString() => String.Format("{0} {1}", _isRelative ? 'v' : 'V', _y);
258314
}
259315
/// <summary>
@@ -361,6 +417,27 @@ public override float[] GetVertices()
361417
}
362418
public override uint[] GetVerticesIndexes() => Enumerable.Range(0, 100).Select(i => (uint)i).ToArray(); // Magic value please dont hard code this
363419

420+
public override List<Vector2i> GetSelectablePoints()
421+
{
422+
List<Vector2i> points = new List<Vector2i>();
423+
424+
if (_isRelative)
425+
{
426+
points.Add(new Vector2i(LastX, LastY));
427+
points.Add(new Vector2i(LastX + X1, LastY + Y1));
428+
points.Add(new Vector2i(LastX + X2, LastY + X2));
429+
points.Add(new Vector2i(LastX + X, LastY + Y));
430+
}
431+
else
432+
{
433+
points.Add(new Vector2i(LastX, LastY));
434+
points.Add(new Vector2i(X1, Y1));
435+
points.Add(new Vector2i(X2, X2));
436+
points.Add(new Vector2i(X, Y));
437+
}
438+
return points;
439+
}
440+
364441
public override string ToString() => String.Format("{0} {1},{2} {3},{4} {5},{6}", _isRelative ? 'c' : 'C', X1, Y1, X2, Y2, X, Y);
365442
}
366443
/// <summary>
@@ -459,6 +536,27 @@ public override float[] GetVertices()
459536
}
460537
public override uint[] GetVerticesIndexes() => Enumerable.Range(0, 100).Select(i => (uint)i).ToArray(); // Magic value please dont hard code this
461538

539+
public override List<Vector2i> GetSelectablePoints()
540+
{
541+
List<Vector2i> points = new List<Vector2i>();
542+
543+
if (IsRelative)
544+
{
545+
points.Add(new Vector2i(LastX, LastY));
546+
points.Add(new Vector2i(LastX + LastControlPointX, LastY + LastControlPointY));
547+
points.Add(new Vector2i(LastX + X2, LastY + X2));
548+
points.Add(new Vector2i(LastX + X, LastY + Y));
549+
}
550+
else
551+
{
552+
points.Add(new Vector2i(LastX, LastY));
553+
points.Add(new Vector2i(LastControlPointX, LastControlPointY));
554+
points.Add(new Vector2i(X2, X2));
555+
points.Add(new Vector2i(X, Y));
556+
}
557+
return points;
558+
}
559+
462560
public override string ToString() => String.Format("{0} {1},{2} {3},{4}", IsRelative ? 's' : 'S', X2, Y2, X, Y);
463561

464562
}
@@ -477,6 +575,8 @@ public class QuadraticBezierCurveTo : DrawAttribute
477575
public bool IsRelative { get => _isRelative; set => _isRelative = value; }
478576
public int X1 { get => _x1; set => _x1 = value; }
479577
public int Y1 { get => _y1; set => _y1 = value; }
578+
public int X { get => _x; set => _x = value; }
579+
public int Y { get => _y; set => _y = value; }
480580

481581
/// <summary>
482582
/// Use to draw a quadratic Bézier curve.
@@ -500,8 +600,8 @@ public QuadraticBezierCurveTo(int x1, int y1, int x, int y, bool isRelative = fa
500600
{
501601
X1 = x1;
502602
Y1 = y1;
503-
_x = x;
504-
_y = y;
603+
X = x;
604+
Y = y;
505605
IsRelative = isRelative;
506606
}
507607
public override float[] GetVertices()
@@ -517,46 +617,65 @@ public override float[] GetVertices()
517617
{
518618
t = i / 100.0f;
519619

520-
x = (float)(Math.Pow((1 - t), 2) * LastX + 2 * (1 - t) * t * (LastX + X1) + Math.Pow(t, 2) * (LastX + _x));
521-
y = (float)(Math.Pow((1 - t), 2) * LastY + 2 * (1 - t) * t * (LastY + Y1) + Math.Pow(t, 2) * (LastY + _y));
620+
x = (float)(Math.Pow((1 - t), 2) * LastX + 2 * (1 - t) * t * (LastX + X1) + Math.Pow(t, 2) * (LastX + X));
621+
y = (float)(Math.Pow((1 - t), 2) * LastY + 2 * (1 - t) * t * (LastY + Y1) + Math.Pow(t, 2) * (LastY + Y));
522622

523623
vertices.AddRange(new float[] { x, y });
524624
}
525-
if (_x > X1)
526-
LastControlPointX += _x + X1;
527-
else if (_x < X1)
528-
LastControlPointX += _x - X1;
625+
if (X > X1)
626+
LastControlPointX += X + X1;
627+
else if (X < X1)
628+
LastControlPointX += X - X1;
529629
else
530-
LastControlPointX += _x;
531-
LastX += _x;
532-
LastY += _y;
630+
LastControlPointX += X;
631+
LastX += X;
632+
LastY += Y;
533633
}
534634
else
535635
{
536636
for (int i = 0; i < 100; i++) // TODO: Magic value please dont hard code this
537637
{
538638
t = i / 100.0f;
539639

540-
x = (float)(Math.Pow((1 - t), 2) * LastX + 2 * (1 - t) * t * X1 + Math.Pow(t, 2) * _x);
541-
y = (float)(Math.Pow((1 - t), 2) * LastY + 2 * (1 - t) * t * Y1 + Math.Pow(t, 2) * _y);
640+
x = (float)(Math.Pow((1 - t), 2) * LastX + 2 * (1 - t) * t * X1 + Math.Pow(t, 2) * X);
641+
y = (float)(Math.Pow((1 - t), 2) * LastY + 2 * (1 - t) * t * Y1 + Math.Pow(t, 2) * Y);
542642

543643
vertices.AddRange(new float[] { x, y });
544644
}
545-
if (_x > X1)
546-
LastControlPointX = _x + X1;
547-
else if (_x < X1)
548-
LastControlPointX = _x - X1;
645+
if (X > X1)
646+
LastControlPointX = X + X1;
647+
else if (X < X1)
648+
LastControlPointX = X - X1;
549649
else
550-
LastControlPointX = _x;
551-
LastX = _x;
552-
LastY = _y;
650+
LastControlPointX = X;
651+
LastX = X;
652+
LastY = Y;
553653
}
554654

555655
return vertices.ToArray();
556656
}
557657
public override uint[] GetVerticesIndexes() => Enumerable.Range(0, 100).Select(i => (uint)i).ToArray(); // Magic value please dont hard code this
558658

559-
public override string ToString() => String.Format("{0} {1},{2} {3},{4}", IsRelative ? 'q' : 'Q', X1, Y1, _x, _y);
659+
public override List<Vector2i> GetSelectablePoints()
660+
{
661+
List<Vector2i> points = new List<Vector2i>();
662+
663+
if (IsRelative)
664+
{
665+
points.Add(new Vector2i(LastX, LastY));
666+
points.Add(new Vector2i(LastX + X1, LastY + Y1));
667+
points.Add(new Vector2i(LastX + X, LastY + Y));
668+
}
669+
else
670+
{
671+
points.Add(new Vector2i(LastX, LastY));
672+
points.Add(new Vector2i(X1, Y1));
673+
points.Add(new Vector2i(X, Y));
674+
}
675+
return points;
676+
}
677+
678+
public override string ToString() => String.Format("{0} {1},{2} {3},{4}", IsRelative ? 'q' : 'Q', X1, Y1, X, Y);
560679

561680
}
562681
/// <summary>
@@ -642,6 +761,25 @@ public override float[] GetVertices()
642761
}
643762
public override uint[] GetVerticesIndexes() => Enumerable.Range(0, 100).Select(i => (uint)i).ToArray(); // Magic value please dont hard code this
644763

764+
public override List<Vector2i> GetSelectablePoints()
765+
{
766+
List<Vector2i> points = new List<Vector2i>();
767+
768+
if (_isRelative)
769+
{
770+
points.Add(new Vector2i(LastX, LastY));
771+
points.Add(new Vector2i(LastX + LastControlPointX, LastY + LastControlPointY));
772+
points.Add(new Vector2i(LastX + _x, LastY + _y));
773+
}
774+
else
775+
{
776+
points.Add(new Vector2i(LastX, LastY));
777+
points.Add(new Vector2i(LastControlPointX, LastControlPointY));
778+
points.Add(new Vector2i(_x, _y));
779+
}
780+
return points;
781+
}
782+
645783
public override string ToString() => String.Format("{0} {1},{2}", _isRelative ? 't' : 'T', _x, _y);
646784
}
647785

@@ -696,6 +834,11 @@ public EllipticalArc(int rx, int ry, int angle, bool largeArcFlag, bool sweepFla
696834
_isRelative = isRelative;
697835
}
698836

837+
public override List<Vector2i> GetSelectablePoints()
838+
{
839+
throw new NotImplementedException();
840+
}
841+
699842
public override float[] GetVertices()
700843
{
701844
throw new NotImplementedException();
@@ -719,6 +862,11 @@ public class ClosePath : DrawAttribute
719862
/// </summary>
720863
public ClosePath() { }
721864

865+
public override List<Vector2i> GetSelectablePoints()
866+
{
867+
throw new NotImplementedException();
868+
}
869+
722870
public override float[] GetVertices()
723871
{
724872
throw new NotImplementedException();

FreeFrame/Components/Shapes/SVGCircle.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,19 @@ public override Hitbox Hitbox()
3939
throw new NotImplementedException();
4040
}
4141

42+
public override List<Vector2i> GetSelectablePoints()
43+
{
44+
throw new NotImplementedException();
45+
}
46+
47+
public override void UpdateProperties(DefaultProperties properties)
48+
{
49+
throw new NotImplementedException();
50+
}
51+
52+
public override void ImplementObject()
53+
{
54+
throw new NotImplementedException();
55+
}
4256
}
4357
}

FreeFrame/Components/Shapes/SVGLine.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,5 +58,20 @@ public override Hitbox Hitbox()
5858

5959
return hitbox;
6060
}
61+
62+
public override List<Vector2i> GetSelectablePoints()
63+
{
64+
throw new NotImplementedException();
65+
}
66+
67+
public override void UpdateProperties(DefaultProperties properties)
68+
{
69+
throw new NotImplementedException();
70+
}
71+
72+
public override void ImplementObject()
73+
{
74+
throw new NotImplementedException();
75+
}
6176
}
6277
}

0 commit comments

Comments
 (0)