Canvas Shapes ============== 1. Basic shapes ---------------- Define the shapes #circle = [ shape: "circle" parameters: [ center-x: 250.0 center-y: 250.0 radius: 35.0 fill: 0xFF0000 line-width: 5.0 ] ] #ellipse = [ shape: "ellipse" parameters: [ center-x: 250.0 center-y: 250.0 major-axis: 30.0 minor-axis: 50.0 radius: 35.0 fill: 0xFF0000 line-width: 5.0 ] ] #arc = [ shape: "arc" parameters: [ center-x: 250.0 center-y: 250.0 starting-angle: 30.0 ending-angle: 250.0 radius: 35.0 fill: 0xFF0000 line-width: 5.0 ] ] #rectangle = [ shape: "rectangle" parameters: [ x: 250.0 y: 250.0 width: 200.0 height: 150.0 fill: 0xFF0000 line-width: 5.0 ] ] #text = [ shape: "text" parameters: [ x: 150.0 y: 250.0 text: "Hello World!" fill: 0xFF0000 font: [size: 50.0 face: "Arial"] ] ] #image = [ shape: "image" parameters: [ x: 200.0 y: 100.0 source: "https://mech-lang.org/img/logo.png" scale: [x: 0.10 y: 0.10] rotate: 15 ] ] 2. Path Elements ----------------- Line x = 250.0 y = 250.0 path = [100.0 100.0 20.0 20.0] shapes = [|shape parameters| "line" [|x y| path]] #line = [ shape: "path" parameters: [ start-point: [x: 0.0 y: 0.0] contains: [|shape parameters| shapes] stroke: 0xFF0000 line-width: 3.0 translate: [x: x y: y] rotate: 0.0 ] ] Quadratic control-point = [x: 20.0 y: 100.0] end-point = [x: 200.0 y: 20.0] shapes = [|shape parameters| "quadratic" [|control-point end-point| [|x y| control-point] [|x y| end-point]]] #quadratic = [ shape: "path" parameters: [ start-point: [x: 0.0 y: 0.0] contains: [|shape parameters| shapes] stroke: 0xFF0000 line-width: 3.0 translate: [x: x y: y] rotate: 0.0 ] ] Bezier control-points = [|x y| 20.0 100.0; 200.0 100.0] shapes = [|shape parameters| "bezier" [|control-points end-point| [|x y| control-points] [|x y| end-point]]] #bezier = [ shape: "path" parameters: [ start-point: [x: 0.0 y: 0.0] contains: [|shape parameters| shapes] stroke: 0xFF0000 line-width: 3.0 translate: [x: x y: y] rotate: 0.0 ] ] Arc shapes = [|shape parameters| "arc" [center-x: 0.0 center-y: 0.0 starting-angle: 30.0 ending-angle: -30.0 radius: 35.0] "line" [x: 0.0 y: 0.0]] #arc = [ shape: "path" parameters: [ start-point: [x: 0.0 y: 0.0] contains: [|shape parameters| shapes] stroke: 0x000000 fill: 0xFFFF00 line-width: 3 translate: [x: x y: y] rotate: 0.0 ] ] Draw a shape to the canvas shape = #circle canvas = [ kind: "canvas" contains: [|shape parameters| shape] parameters: [width: 500.0 height: 500.0] ] #html/app = [ root: "mech-root" contains: [|kind contains parameters| canvas] ]