// drawing loop
setInterval(draw, 10);
setInterval(showDimInHeader, 200);
function updateSrc() {
backImg.src = backgroundPath;
}
function getHighestId(pics) {
let highest = -1;
pics.forEach(function (item) {
if (item.id > highest) {
highest = item.id;
}
});
return highest;
}
function refreshControlls() {
pictures.forEach(function (item) {
let id = item.id;
scalePic(id, item.scale * 100);
scalePassp(id, item.passp);
scalePasspOffset(id, item.passpOffset);
if (showMeasurements) {
document.getElementById("measurementToggle" + id).checked = true;
}
});
}
function addPicture() {
imgPath = document.getElementById("addPicture").files[0].path;
let id = getHighestId(pictures) + 1;
let pic = new Picture(imgPath, id);
addPicControll(imgPath, id);
pictures[id] = pic;
focusThis(id);
refreshControlls();
}
function changeBackground() {
backImg.src = document.getElementById("changeBackground").files[0].path;
}
function scalePic(id, value) {
pictures[id].scale = value / 100;
document.getElementById("scale" + id).value = value;
document.getElementById("scaleInput" + id).value = value;
}
function scalePassp(id, value) {
pictures[id].passp = Number(value);
document.getElementById("passp" + id).value = value;
document.getElementById("passpInput" + id).value = value;
}
function scalePasspOffset(id, value) {
pictures[id].passpOffset = Number(value);
document.getElementById("passpOffset" + id).value = value;
document.getElementById("passpInputOffset" + id).value = value;
}
function focusThis(id) {
focusedID = id;
$("#controllWrapper"+id).addClass('border-light').siblings().removeClass('border-light');
}
function removeFocus(id) {
$("#controllWrapper"+id).removeClass('border-light');
}
function showDimInHeader() {
pictures.forEach(function (item) {
let id = item.id;
let std = "Picture " + id;
if (showMeasurements) {
document.getElementById("measurementToggle" + id).checked = true;
let value = "";
let width = Number(item.getWidth() / pixelPerMeter).toFixed(2);
let height = Number(item.getHeight() / pixelPerMeter).toFixed(2);
if (!pictures[id].isRotated()) {
value = ' ' + width + 'm x ' + height + 'm';
}
else {
value = ' ' + height + 'm x ' + width + 'm';
}
std += '' + value + '';
}
document.getElementById("picTitle" + id).innerHTML = std;
});
}
// adds the controll interface for pictures
function addPicControll(src, id) {
let frameListString = '';
// add the frame choices
framePaths.forEach(function (item) {
let i = item.split(".")[0];
frameListString += ``;
})
let frame = `
`
let string = `
${frame}
`;
let el = document.getElementById('wrapper');
el.innerHTML += string;
}
function removeElement(elementId) {
// Removes an element from the document
var element = document.getElementById("controllWrapper" + elementId);
element.parentNode.removeChild(element);
delete pictures[elementId];
}
// called on change, sets the frame of the calling object
function updateFrame(id, value) {
let backgroundBase = path.join(__dirname, "./frames/");
pictures[id].passpImg.src = backgroundBase + value;
pictures[id].frame = backgroundBase + value;
pictures[id].refreshSrc();
}
function rotateFrame(id) {
pictures[id].frameRotate = !pictures[id].frameRotate;
}
function rotateImg(id) {
pictures[id].imgRotate += Math.PI / 2;
}
function setZoomLevel(x) {
zoomLevel = x * scale;
//reset zoom re-center
if (x == 1) {
canMouseX = canvasWidth / 2;
canMouseY = canvasHeight / 2;
zoomLevel = 1;
}
}
window.addEventListener('setScale', function (e) {
canvas.style.cursor = "crosshair";
canvas.addEventListener('mousedown', startScale);
function startScale() {
canvas.removeEventListener('mousedown', startScale);
scaleRefPoints.push([canMouseX, canMouseY]);
isScaling = true;
canvas.addEventListener('mouseup', endScale);
};
function endScale() {
canvas.removeEventListener('mouseup', endScale);
scaleRefPoints.push([canMouseX, canMouseY]);
canvas.style.cursor = "default";
prompt({
title: 'Scale',
label: 'Distance measured in meters',
value: '1',
inputAttrs: {
type: 'number'
},
type: 'input'
})
.then((r) => {
if (r === null) {
isScaling = false;
scaleRefPoints = [];
console.log('user cancelled');
} else {
//TODO check if input number and truncate to number if not
isScaling = false;
scaleRefLenght = r;
pixelPerMeter = calcPythDist(scaleRefPoints[0], scaleRefPoints[1]) / scaleRefLenght;
console.log(pixelPerMeter);
scaleRefPoints = [];
showMeasurements = true;
showDimInHeader();
console.log('result', r);
}
})
.catch(console.error);
};
});
function calcPythDist(point1, point2) {
let a = point2[0] - point1[0];
let b = point2[1] - point1[1];
return Math.sqrt((a * a) + (b * b))
}
function resizeCanvas() {
canvas.width = window.innerWidth * 0.8;
canvas.height = window.innerHeight * 0.9;
}
window.addEventListener('saveCanvas', function (e, path) {
let canvas = document.getElementById("canvas");
// Get the DataUrl from the Canvas
const url = canvas.toDataURL('image/jpg', 0.8);
// remove Base64 stuff from the Image
const base64Data = url.replace(/^data:image\/png;base64,/, "");
fs.writeFile(path, base64Data, 'base64', function (err) {
console.log(err);
});
});
function toggleShowMeasurements() {
showMeasurements = !showMeasurements;
console.log(showMeasurements);
}