Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Esquadro vazado!

Olá pessoal,

Não tinha entendido direito como o Path agia. Ai fui testar um pouco a funcionalidade do .beginPath, .moveTo e .lineTo fazendo um esquadro vazado, em algum momento, sem querer eu desliguei a linha //.beginPath();, mas o código rodou da mesma forma. Como funciona esse cara, .beginPath(); ?

Outra questão é que tentei torna o gráfico meio ajustável , mas tive que usar algumas operações de proporção para conseguir isso. gostaria de saber se desta forma é legal de fazer ?

<meta charset="utf-8">
<canvas width="600" height="400"></canvas>

<script>
function desenhaRetangulo(x, y, largura, altura, cor) {
    var tela = document.querySelector('canvas');
    var pincel = tela.getContext('2d');

    pincel.fillStyle=cor;
    pincel.fillRect(x,y, largura, altura);
    pincel.strokeStyle ='black';

}

desenhaRetangulo(0, 0, 600, 400, 'gray');
desenhaRetangulo(50, 125, 500, 150, '#949494');

function desenhaEsquadro(x, y, d, cor) {

    var tela = document.querySelector('canvas');
    var pincel = tela.getContext('2d');

    pincel.fillStyle = cor;
    //pincel.beginPath();
    pincel.moveTo(x + 0, y + 0);
    pincel.lineTo(x + 0, y + (d/100)*100); 
    pincel.lineTo(x + (d/100)*100, y + (d/100)*100);
    pincel.lineTo(x + (d/100)*64.285, y + (d/100)*85.714); 
    pincel.lineTo(x + (d/100)*14.285, y + (d/100)*85.714); 
    pincel.lineTo(x + (d/100)*14.285, y + (d/100)*35.714); 
    pincel.lineTo(x + (d/100)*64.285, y + (d/100)*85.714); 
    pincel.lineTo(x + (d/100)*100, y + (d/100)*100);
    pincel.fill();

}

desenhaEsquadro(100, 25, 350, "black"); // pode mudar posição e dimensão do esquadro.

</script>
6 respostas

O método beginPath() inicia um path ou reconfigura o caminho atual. Ou seja, esse método basicamente limpa o objeto, que vão acumulando operações, como linha, ret, arc, arcTo e assim por diante.

Oi Davilson tudo bem?

A variável pincel da função do Retangulo é diferente da pincel do Esquadro porque você declarou ela dentro da função. E o escopo dela está amarrado a aquela função.

Se você colocar um

desenhaEsquadro(200, 25, 350, "red"); 

no seu código verá que ficará com dois esquadros vermelhos porque você mudou a cor do pincel.

O metodo beginPath começa um novo caminho ou reseta o caminho anterior.

Quanto a matemática das proporções não se preocupe o canvas é meio que separado do restante da página então pra mim tudo bem como você fez. Nem é o objetivo do curso se preocupar com isso, o objetivo é aprender mais sobre lógica de programação.

Espero ter ajudado!!!

Oi André Victor Ruiz Pedroso,

Legal, fiz um teste e realmente o segundo esquadro anulou a cor do primeiro, ficando tudo red, ai soltei linha do .beginPath deletando as //. desta forma cada um respeitou a cor dada pela função.

Se entendi bem, complementado com a ajuda do Otávio Felipe do Prado, o .beginPath no caso do meu código só não fez falta porque não tinha outras repetições do esquadro e também não tinha outros métodos ret, arc, arcTo no mesmo escopo.

Obrigado!

solução!

Disponha e bons estudos!!!

Putz... só pode ser um bot, rs ! tenho uns horários e dias bem maluco de estudos, vc tá sempre ai!

Obrigado pelo suporte aos alunos!

Hahaha não sou um bot. Embora já pensei em fazer um bot para responder as dúvidas. Meus horários podem ser visto no meu perfil.