// 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 = `
Scale:
${frame}
Passpatous:
Passpatous Offset:
`; 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); }