104 lines
2.8 KiB
JavaScript
104 lines
2.8 KiB
JavaScript
|
|
import {drawCircles, populateTable, Circle, Point, randomColor} from "https://cdn.jsdelivr.net/gh/didiercrunch/cours-420-301-ah@tp1.1/modules-examples/mod.js";
|
|
|
|
const circles = []
|
|
|
|
function getCircleById(circleId){
|
|
for(const circle of circles){
|
|
if(circle.getId() === circleId){
|
|
return circle;
|
|
}
|
|
}
|
|
}
|
|
|
|
function onClickUp(circleId){
|
|
const circle = getCircleById(circleId);
|
|
const center = circle.getCenter();
|
|
const newCenter = new Point(center.getX(), center.getY() - 10);
|
|
circle.setCenter(newCenter);
|
|
renderCircles();
|
|
}
|
|
|
|
function onClickDown(circleId){
|
|
const circle = getCircleById(circleId);
|
|
const center = circle.getCenter();
|
|
const newCenter = new Point(center.getX(), center.getY() + 10);
|
|
circle.setCenter(newCenter);
|
|
renderCircles();
|
|
}
|
|
|
|
function onClickLeft(circleId){
|
|
const circle = getCircleById(circleId);
|
|
const center = circle.getCenter();
|
|
const newCenter = new Point(center.getX() - 10, center.getY());
|
|
circle.setCenter(newCenter);
|
|
renderCircles();
|
|
}
|
|
|
|
function onClickRight(circleId){
|
|
const circle = getCircleById(circleId);
|
|
const center = circle.getCenter();
|
|
const newCenter = new Point(center.getX() + 10, center.getY());
|
|
circle.setCenter(newCenter);
|
|
renderCircles();
|
|
}
|
|
|
|
|
|
|
|
function onClickPaint(circleId){
|
|
const circle = getCircleById(circleId);
|
|
circle.setColor(randomColor(Date.now()))
|
|
renderCircles();
|
|
}
|
|
|
|
function pointToString(point){
|
|
return `(${point.getX()}, ${point.getY()})`;
|
|
}
|
|
|
|
function drawNewCircle(){
|
|
const x = parseInt(document.getElementById("cx").value)
|
|
const y = parseInt(document.getElementById("cy").value)
|
|
const r = parseInt(document.getElementById("cr").value)
|
|
const p = new Point(x, y);
|
|
const circle = new Circle(p, r, Date.now());
|
|
circles.push(circle);
|
|
renderCircles();
|
|
}
|
|
|
|
function inverseCircles(){
|
|
circles.reverse();
|
|
renderCircles();
|
|
}
|
|
|
|
function clearCircles(){
|
|
circles.length = 0;
|
|
renderCircles();
|
|
}
|
|
|
|
function drawSimpleCircle(){
|
|
circles.length = 0;
|
|
const circle = new Circle(new Point(250, 250), 50, Date.now());
|
|
circles.push(circle);
|
|
renderCircles();
|
|
}
|
|
|
|
function renderCircles(){
|
|
drawCircles(document.getElementById("canvas"), circles);
|
|
populateTable(document.getElementById("table-body"),
|
|
circles,
|
|
pointToString,
|
|
onClickUp,
|
|
onClickDown,
|
|
onClickLeft,
|
|
onClickRight,
|
|
onClickPaint);
|
|
}
|
|
|
|
|
|
|
|
document.getElementById("draw-circle").addEventListener("click", drawNewCircle);
|
|
document.getElementById("clear-drawing").addEventListener("click", clearCircles);
|
|
document.getElementById("inverse-drawing").addEventListener("click", inverseCircles);
|
|
document.getElementById("draw-simple-circle").addEventListener("click", drawSimpleCircle);
|
|
|