128 lines
4.7 KiB
JavaScript
128 lines
4.7 KiB
JavaScript
class DebugCanvas {
|
|
constructor(ardConf){
|
|
this.conf = ardConf;
|
|
this.targetWidth = 1280;
|
|
this.targetHeight = 720;
|
|
this.targetOffsetTop = 1080;
|
|
this.targetOffsetLeft = 100;
|
|
}
|
|
|
|
init(canvasSize, canvasPosition, targetCanvasSize) {
|
|
console.log("initiating DebugCanvas")
|
|
|
|
var body = document.getElementsByTagName('body')[0];
|
|
|
|
if(!canvasPosition){
|
|
canvasPosition = {
|
|
top: 1200,
|
|
left: 800
|
|
}
|
|
}
|
|
if(!this.canvas){
|
|
this.canvas = document.createElement("canvas");
|
|
body.appendChild(this.canvas);
|
|
}
|
|
|
|
if(targetCanvasSize){
|
|
this.targetWidth = targetCanvasSize.width;
|
|
this.targetHeight = targetCanvasSize.height;
|
|
}
|
|
|
|
this.canvas.style.position = "absolute";
|
|
this.canvas.style.left = `${canvasPosition.left}px`;
|
|
this.canvas.style.top = `${canvasPosition.top}px`;
|
|
this.canvas.style.zIndex = 10002;
|
|
// this.canvas.id = "uw_debug_canvas";
|
|
|
|
this.context = this.canvas.getContext("2d");
|
|
|
|
this.canvas.width = canvasSize.width;
|
|
this.canvas.height = canvasSize.height;
|
|
|
|
this.calculateCanvasZoom();
|
|
|
|
console.log("debug canvas is:", this.canvas, "context:", this.context)
|
|
}
|
|
|
|
calculateCanvasZoom(){
|
|
var canvasZoom = this.targetWidth / this.canvas.width;
|
|
var translateX = (this.canvas.width - this.targetWidth)/2;
|
|
var translateY = (this.canvas.height - this.targetHeight)/2;
|
|
|
|
this.canvas.style.transform = `scale(${canvasZoom},${canvasZoom}) translateX(${translateX}px) translateY(${translateY}px)`;
|
|
}
|
|
|
|
destroy(){
|
|
this.canvas.remove();
|
|
}
|
|
|
|
setBuffer(buffer) {
|
|
// this.imageBuffer = buffer.splice(0);
|
|
this.imageBuffer = new Uint8ClampedArray(buffer);
|
|
}
|
|
|
|
trace(arrayIndex, colorClass) {
|
|
this.imageBuffer[arrayIndex ] = colorClass.colorRgb[0];
|
|
this.imageBuffer[arrayIndex+1] = colorClass.colorRgb[1];
|
|
this.imageBuffer[arrayIndex+2] = colorClass.colorRgb[2];
|
|
}
|
|
|
|
update() {
|
|
var start = performance.now();
|
|
try{
|
|
if(this.context && this.imageBuffer instanceof Uint8ClampedArray){
|
|
try{
|
|
var idata = new ImageData(this.imageBuffer, this.canvas.width, this.canvas.height);
|
|
} catch (ee) {
|
|
console.log("[DebugCanvas.js::update] can't create image data. Trying to correct canvas size. Error was:", ee);
|
|
this.canvas.width = this.conf.canvas.width;
|
|
this.canvas.height = this.conf.canvas.height;
|
|
|
|
this.calculateCanvasZoom();
|
|
// this.context = this.canvas.getContext("2d");
|
|
var idata = new ImageData(this.imageBuffer, this.canvas.width, this.canvas.height);
|
|
}
|
|
this.putImageData(this.context, idata, 0, 0, 0, 0, this.canvas.width, this.canvas.height);
|
|
}
|
|
} catch(e) {
|
|
console.log("[DebugCanvas.js::update] updating canvas failed.", e);
|
|
}
|
|
console.log("[DebugCanvas.js::update] update took", (performance.now() - start), "ms.");
|
|
}
|
|
|
|
|
|
putImageData(ctx, imageData, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) {
|
|
var data = imageData.data;
|
|
var height = imageData.height;
|
|
var width = imageData.width;
|
|
dirtyX = dirtyX || 0;
|
|
dirtyY = dirtyY || 0;
|
|
dirtyWidth = dirtyWidth !== undefined? dirtyWidth: width;
|
|
dirtyHeight = dirtyHeight !== undefined? dirtyHeight: height;
|
|
var limitBottom = Math.min(dirtyHeight, height);
|
|
var limitRight = Math.min(dirtyWidth, width);
|
|
for (var y = dirtyY; y < limitBottom; y++) {
|
|
for (var x = dirtyX; x < limitRight; x++) {
|
|
var pos = y * width + x;
|
|
ctx.fillStyle = 'rgba(' + data[pos*4+0]
|
|
+ ',' + data[pos*4+1]
|
|
+ ',' + data[pos*4+2]
|
|
+ ',' + (data[pos*4+3]/255) + ')';
|
|
ctx.fillRect(x + dx, y + dy, 1, 1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
DebugCanvasClasses = {
|
|
VIOLATION: {color: '#ff0000', colorRgb: [255, 00, 0], text: 'violation (general)'},
|
|
WARN: {color: '#d0d039', colorRgb: [208, 208, 57], text: 'lesser violation (general)'},
|
|
GUARDLINE_BLACKBAR: {color: '#3333FF', colorRgb: [51, 51, 255], text: 'guardline/blackbar (expected value)'},
|
|
GUARDLINE_IMAGE: {color: '#000088', colorRgb: [0, 0, 136], text: 'guardline/image (expected value)'},
|
|
|
|
EDGEDETECT_ONBLACK: {color: '#444444', colorRgb: [68, 68, 68], text: 'edge detect - perpendicular (to edge)'},
|
|
EDGEDETECT_CANDIDATE: {color: '#FFFFFF', colorRgb: [255, 255, 255], text: 'edge detect - edge candidate'},
|
|
EDGEDETECT_CANDIDATE_SECONDARY: {color: '#OOOOOO', colorRgb: [0, 0, 0], text: 'edge detect - edge candidate, but for when candidate is really bright'},
|
|
EDGEDETECT_BLACKBAR: {color: '#07ac93', colorRgb: [7, 172, 147], text: 'edge detect - parallel, black test'},
|
|
EDGEDETECT_IMAGE: {color: '#046c5c', colorRgb: [4, 108, 92], text: 'edge detect - parallel, image test'}
|
|
} |