refacto ts + ajout de dessin simple + ajout pinceau

WIP lib graphique
This commit is contained in:
Marc
2022-02-08 13:35:49 +01:00
parent a3547ac244
commit 47e764132f
13 changed files with 255 additions and 66 deletions
+101
View File
@@ -0,0 +1,101 @@
//@ts-check
/**
* DICKPICK is a image drawing library
*/
const graphics = require('../../chibrax/graphics')
/**
* @param { number } x
* @param { number } y
* @param { number } dx length on the x axis
* @param { number } dy length on the y axis
* @param { string } color
*/
function drawRect(x, y, dx, dy, color) {
const bitmap = {
data: Buffer.alloc(dx*dy*4, Buffer.from(graphics.parseHexColor(color))),
width: dx,
height: dy
}
graphics.drawBitmap(x,y, bitmap)
}
/**
*
* @param { import('@jimp/core').Bitmap } Bitmap
* @param { number[] } color
* @returns { Pencil }
*/
function pencilFromBitmap(Bitmap, color) {
return { ...Bitmap, color }
}
/**
* @param { number } width
* @param { number } height
* @returns
*/
function createBitmap(width, height) {
const data = Buffer.alloc(width * height * 4, Buffer.from([0, 0, 0, 0]));
return { width, height, data }
}
/**
* @param { Pencil } pencil
* @param { number } x
* @param { number } y
*/
function setPixel(pencil, x, y) {
pencil.data.set(pencil.color, y*pencil.width*4 + x*4)
}
/**
*
* @param { number } x
* @param { number } y
* @param { number } xc
* @param { number } yc
* @param { Pencil } pencil
*/
function symetrie8Axes(xc, yc, x, y, pencil) {
setPixel(pencil, x+xc, y+yc)
setPixel(pencil, x+xc,-y+yc)
setPixel(pencil, -x+xc,-y+yc)
setPixel(pencil, -x+xc,y+yc)
setPixel(pencil, y+xc,x+yc)
setPixel(pencil, y+xc,-x+yc)
setPixel(pencil, -y+xc,-x+yc)
setPixel(pencil, -y+xc,x+yc,)
}
/**
* BresenhamCircle
* @param { Pencil } pencil
* @param { number } xc
* @param { number } yc
* @param { number } r
*/
function drawCircle(pencil, xc, yc, r) {
let x = 0
let y = r
let d = 3 - (2 * r);
symetrie8Axes(xc, yc, x, y, pencil);
while(x <= y) {
if(d <= 0) {
d = d + (4 * x) + 6;
}
else {
d = d + (4 * x) - (4 * y) + 10;
y = y - 1;
}
x = x + 1;
symetrie8Axes(xc, yc, x, y, pencil);
}
}
module.exports = { drawRect, setPixel, pencilFromBitmap, createBitmap, drawCircle }