From 1c619eea43fadb6cec2da720080b0490ea40899f Mon Sep 17 00:00:00 2001 From: Wellington Gabriel Vicente de Souza <wellingtongabrielvs@gmail.com> Date: Sat, 14 Apr 2018 18:00:17 -0300 Subject: [PATCH] [T3] fix a constructor bug with lines attributes centerX and centerY when x0 > xf and/or y0 > yf --- T3/lines.js | 89 +++++++++++++++++++++++++++++------------------------ 1 file changed, 49 insertions(+), 40 deletions(-) diff --git a/T3/lines.js b/T3/lines.js index 315c7af..12bda3f 100644 --- a/T3/lines.js +++ b/T3/lines.js @@ -6,8 +6,14 @@ class Line { this.yf = yf; this.width = Math.abs(xf - x0); this.height = Math.abs(yf - y0); - this.centerX = x0 + this.width/2; - this.centerY = y0 + this.height/2; + if (this.x0 < this.xf) + this.centerX = x0 + this.width/2; + else + this.centerX = xf + this.width/2; + if (this.y0 < this.yf) + this.centerY = y0 + this.height/2; + else + this.centerY = yf + this.height/2; } } @@ -32,6 +38,9 @@ var draggingSecondEnd = false; canvas.width = width; canvas.height = height; +canvas.style.background = "#333"; +document.body.style.color = "#fff"; +ctx.strokeStyle = "#fff"; //event listeners window.addEventListener('resize', resizeCanvas, false); @@ -67,38 +76,35 @@ function handleMouseUp() { selectedLine = null; movingEntireLine = false; draggingFirstEnd = false; - draggingSecondEnd = false; - console.log(selectedLine); + draggingSecondEnd = false; } function dragLine() { if (selectedLine != null) { - if (movingEntireLine) { - if (mouseX >= lines[selectedLine].centerX - 40 && mouseX <= lines[selectedLine].centerX + 40 && mouseY >= lines[selectedLine].centerY - 40 && mouseY <= lines[selectedLine].centerY + 40) { - if (lines[selectedLine].x0 <= lines[selectedLine].xf) { - lines[selectedLine].x0 = mouseX-(lines[selectedLine].width/2); - lines[selectedLine].xf = mouseX+(lines[selectedLine].width/2); - } else { - lines[selectedLine].xf = mouseX-(lines[selectedLine].width/2); - lines[selectedLine].x0 = mouseX+(lines[selectedLine].width/2); - } - if (lines[selectedLine].y0 <= lines[selectedLine].yf) { - lines[selectedLine].y0 = mouseY-(lines[selectedLine].height/2); - lines[selectedLine].yf = mouseY+(lines[selectedLine].height/2); - } else { - lines[selectedLine].yf = mouseY-(lines[selectedLine].height/2); - lines[selectedLine].y0 = mouseY+(lines[selectedLine].height/2); - } - if (lines[selectedLine].x0 <= lines[selectedLine].xf) { - lines[selectedLine].centerX = lines[selectedLine].x0 + lines[selectedLine].width/2; - } else { - lines[selectedLine].centerX = lines[selectedLine].xf + lines[selectedLine].width/2; - } - if (lines[selectedLine].y0 <= lines[selectedLine].yf) { - lines[selectedLine].centerY = lines[selectedLine].y0 + lines[selectedLine].height/2; - } else { - lines[selectedLine].centerY = lines[selectedLine].yf + lines[selectedLine].height/2; - } + if (movingEntireLine) { + if (lines[selectedLine].x0 <= lines[selectedLine].xf) { + lines[selectedLine].x0 = mouseX-(lines[selectedLine].width/2); + lines[selectedLine].xf = mouseX+(lines[selectedLine].width/2); + } else { + lines[selectedLine].xf = mouseX-(lines[selectedLine].width/2); + lines[selectedLine].x0 = mouseX+(lines[selectedLine].width/2); + } + if (lines[selectedLine].y0 <= lines[selectedLine].yf) { + lines[selectedLine].y0 = mouseY-(lines[selectedLine].height/2); + lines[selectedLine].yf = mouseY+(lines[selectedLine].height/2); + } else { + lines[selectedLine].yf = mouseY-(lines[selectedLine].height/2); + lines[selectedLine].y0 = mouseY+(lines[selectedLine].height/2); + } + if (lines[selectedLine].x0 <= lines[selectedLine].xf) { + lines[selectedLine].centerX = lines[selectedLine].x0 + lines[selectedLine].width/2; + } else { + lines[selectedLine].centerX = lines[selectedLine].xf + lines[selectedLine].width/2; + } + if (lines[selectedLine].y0 <= lines[selectedLine].yf) { + lines[selectedLine].centerY = lines[selectedLine].y0 + lines[selectedLine].height/2; + } else { + lines[selectedLine].centerY = lines[selectedLine].yf + lines[selectedLine].height/2; } } else if (draggingFirstEnd) { lines[selectedLine].x0 = mouseX; @@ -135,22 +141,24 @@ function dragLine() { } function handleMouse() { - for (var i = lines.length - 1; i >= 0; i--) { - if (mouseDown && selectedLine == null) { - if (mouseX >= lines[i].centerX - 40 && mouseX <= lines[i].centerX + 40 && mouseY >= lines[i].centerY - 40 && mouseY <= lines[i].centerY + 40) { + if (mouseDown && selectedLine == null) { + for (var i = lines.length - 1; i >= 0; i--) { + if (mouseX >= lines[i].centerX - 10 && mouseX <= lines[i].centerX + 10 && mouseY >= lines[i].centerY - 10 && mouseY <= lines[i].centerY + 10) { selectedLine = i; movingEntireLine = true; break; - } else if (mouseX >= lines[i].x0 - 60 && mouseX <= lines[i].x0 + 60 && mouseY >= lines[i].y0 - 60 && mouseY <= lines[i].y0 + 60) { + } else if (mouseX >= lines[i].x0 - 20 && mouseX <= lines[i].x0 + 20 && mouseY >= lines[i].y0 - 20 && mouseY <= lines[i].y0 + 20) { selectedLine = i; draggingFirstEnd = true; break; - } else if (mouseX >= lines[i].xf - 60 && mouseX <= lines[i].xf + 60 && mouseY >= lines[i].yf - 60 && mouseY <= lines[i].yf + 60) { + } else if (mouseX >= lines[i].xf - 20 && mouseX <= lines[i].xf + 20 && mouseY >= lines[i].yf - 20 && mouseY <= lines[i].yf + 20) { selectedLine = i; draggingSecondEnd = true; break; } - } else if (rightClick) { + } + } else if (rightClick) { + for (var i = lines.length - 1; i >= 0; i--) { if ((mouseY >= lines[i].y0 && mouseY <= lines[i].yf) || (mouseY >= lines[i].yf && mouseY <= lines[i].y0)) { if (mouseX >= lines[i].x0 && mouseX <= lines[i].xf) { lines[lines.length] = new Line(mouseX,mouseY,lines[i].xf,lines[i].yf); @@ -233,7 +241,6 @@ function generatePolygon() { } drawCurrentCanvas(); } else { - console.log("Valor inválido."); alert("Valor inválido! O número de arestas deve estar no intervalo de [3..8].") } } @@ -241,7 +248,7 @@ function generatePolygon() { //function that updates screen function drawCurrentCanvas() { drawLines(); - if (mouseDown || rightClick) handleMouse(); + if ((mouseDown && selectedLine == null) || rightClick) handleMouse(); dragLine(); requestAnimationFrame(drawCurrentCanvas); } @@ -250,16 +257,18 @@ function drawCurrentCanvas() { function drawLines() { ctx.clearRect(0,0,canvas.width,canvas.height); for (var i = lines.length - 1; i >= 0; i--) { - drawLine(lines[i].x0,lines[i].y0,lines[i].xf,lines[i].yf); + drawLine(lines[i].x0,lines[i].y0,lines[i].xf,lines[i].yf, i); } } //function that draws a line -function drawLine(x0,y0,xf,yf) { +function drawLine(x0,y0,xf,yf,i) { ctx.beginPath(); ctx.lineWidth = 3; ctx.moveTo(x0,y0); ctx.lineTo(xf,yf); + if (selectedLine == i) ctx.strokeStyle = "red"; + else ctx.strokeStyle = "#fff"; ctx.stroke(); lineX0 = x0; lineY0 = y0; -- GitLab