diff --git a/src/geometry.ts b/src/geometry.ts
index d59cac6..08a7dfc 100644
--- a/src/geometry.ts
+++ b/src/geometry.ts
@@ -1,5 +1,5 @@
///
-///
+///
///
function loadScript(filepath: string): string
@@ -17,6 +17,7 @@ function loadScript(filepath: string): string
class Geometry extends HTMLElement
{
+ private shapes: Shape[];
private canvas: HTMLCanvasElement;
private context: CanvasRenderingContext2D;
private sourceFile: string;
@@ -56,13 +57,29 @@ class Geometry extends HTMLElement
this.shadowRoot.append(this.canvas);
+
+ this.shapes = []
+ this.shapes.push(new Circle(this.context, new Vector2D(150, 150), 100))
+ this.shapes.push(new Line(this.context, new Vector2D(), new Vector2D(300, 300)))
+
+ this.shapes.push(new Polygon(this.context,
+ [
+ new Vector2D(150, 150),
+ new Vector2D(150, 250),
+ new Vector2D(250, 250),
+ new Vector2D(250, 150),
+ new Vector2D(300, 300),
+ new Vector2D(250, 350),
+ ]))
this.redraw();
}
private redraw()
{
- line(this.context, new Vector2D(), new Vector2D(300, 300));
- circle(this.context, new Vector2D(150, 150), 100);
+ for (let shape of this.shapes)
+ {
+ shape.draw()
+ }
}
}
diff --git a/src/gfx/polygon.ts b/src/gfx/polygon.ts
new file mode 100644
index 0000000..5ce58d4
--- /dev/null
+++ b/src/gfx/polygon.ts
@@ -0,0 +1,30 @@
+///
+
+class Polygon extends Shape
+{
+ private points: Vector2D[]
+
+
+ constructor(ctx, points) {
+ super(ctx);
+ if (points.length <3)
+ {
+ console.error("cant draw polygon, need min 3 points")
+ }
+ this.points = points
+ }
+
+ public draw()
+ {
+ let last_element = this.points[this.points.length-1]
+ this.ctx.beginPath();
+ this.ctx.moveTo(last_element.x, last_element.y);
+ for (let point of this.points)
+ {
+ this.ctx.lineTo(point.x, point.y);
+ }
+ this.ctx.lineWidth = this.style.strokeWidth;
+ this.ctx.strokeStyle = this.style.strokeColor;
+ this.ctx.stroke();
+ }
+}
\ No newline at end of file
diff --git a/src/gfx/shapes.ts b/src/gfx/shapes.ts
new file mode 100644
index 0000000..4131d79
--- /dev/null
+++ b/src/gfx/shapes.ts
@@ -0,0 +1,64 @@
+///
+///
+
+abstract class Shape
+{
+ protected ctx: CanvasRenderingContext2D
+ protected style: ShapeStyle
+
+ constructor(ctx) {
+ this.ctx = ctx
+ this.style = new ShapeStyle()
+ }
+
+ abstract draw()
+}
+
+class Line extends Shape
+{
+ private from: Vector2D
+ private to: Vector2D
+
+ constructor(ctx,from, to) {
+ super(ctx)
+ this.from = from
+ this.to = to
+ }
+
+ public draw()
+ {
+ this.ctx.beginPath();
+ this.ctx.moveTo(this.from.x, this.from.y);
+ this.ctx.lineTo(this.to.x, this.to.y);
+
+ this.ctx.lineWidth = this.style.strokeWidth;
+ this.ctx.strokeStyle = this.style.strokeColor;
+ this.ctx.stroke();
+ }
+}
+
+class Circle extends Shape
+{
+
+ private center: Vector2D
+ private radius: number
+
+ constructor(ctx,center, radius) {
+ super(ctx)
+ this.center = center
+ this.radius = radius
+ }
+
+ public draw()
+ {
+ this.ctx.beginPath();
+ this.ctx.arc(this.center.x, this.center.y, this.radius, 0, 2 * Math.PI, false);
+
+ this.ctx.fillStyle = this.style.fillColor;
+ this.ctx.fill();
+
+ this.ctx.lineWidth = this.style.strokeWidth;
+ this.ctx.strokeStyle = this.style.strokeColor;
+ this.ctx.stroke();
+ }
+}
\ No newline at end of file
diff --git a/src/shapes.ts b/src/shapes.ts
deleted file mode 100644
index 374e40f..0000000
--- a/src/shapes.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-///
-///
-
-function line(ctx: CanvasRenderingContext2D, from: Vector2D , to: Vector2D, style: ShapeStyle = new ShapeStyle())
-{
- ctx.beginPath();
- ctx.moveTo(from.x, from.y);
- ctx.lineTo(to.x, to.y);
-
- ctx.lineWidth = style.strokeWidth;
- ctx.strokeStyle = style.strokeColor;
- ctx.stroke();
-}
-
-function circle(ctx: CanvasRenderingContext2D, center: Vector2D, radius: number, style: ShapeStyle = new ShapeStyle())
-{
- ctx.beginPath();
- ctx.arc(center.x, center.y, radius, 0, 2 * Math.PI, false);
-
- ctx.fillStyle = style.fillColor;
- ctx.fill();
-
- ctx.lineWidth = style.strokeWidth;
- ctx.strokeStyle = style.strokeColor;
- ctx.stroke();
-}
\ No newline at end of file