En canvas existen diversas funciones que nos pueden servir para dibujar siluetas a nuestro antojo, que se tienen que utilizar de manera complementaria. El proceso pasa por situarse en un punto del lienzo, luego definir cada uno de los puntos por los que pasa nuestro camino y luego pintar de color dentro, o simplemente dibujar la línea que pasaría por todos esos puntos. En este artículo veremos cómo rellenar de color todo el área que queda definida por un camino.
Veamos para empezar un resumen de algunas de las funciones disponibles para hacer caminos, las que que utilizaremos durante el presente artículo.
Según las pruebas realizadas, podríamos iniciar un camino sin utilizar antes beginPath(), puesto que el efecto a primera vista es el mismo que si no lo invocamos (entiendo que el navegador lo invoca por nosotros al empezar a utilizar funciones de caminos en canvas). No obstante, debe ser recomendable hacer las cosas correctamente e invocarlo antes de comenzar un camino.
Recibe como parámetro los puntos x e y donde ha de moverse el puntero para dibujo. Para saber cuál es el punto donde deseamos movernos (x,y), Recordar que el eje de coordenadas del canvas es la esquina superior izquierda.
La posición actual del camino la podemos haber indicado previamente con un moveTo(), o donde hayamos terminado una línea dibujada anteriormente. Si no se indicó antes una posición de nuestro puntero de dibujo, lineTo() no dibuja ninguna línea, sino que se tendrá en cuenta las coordenadas enviadas como parámetro para posicionar tan solo el puntero de dibujo allí. Dicho de otra manera, si no se dijo dónde empezar el dibujo, o no se ha dibujado ningún otro segmento en el camino anteriormente, lineTo() será equivalente a moveTo().
Como decimos, si no llegamos a cerrar el camino, el método fill() lo cerrará por nosotros, pero podríamos utilizar explícitamente el método closePath() para hacerlo nosotros (closePath() lo explicaremos en futuros artículos).
ctx.beginPath();
ctx.moveTo(50,5);
ctx.lineTo(75,65);
ctx.lineTo(50,125);
ctx.lineTo(25,65);
ctx.fill();
Como se puede ver, iniciamos un camino con beginPath(). Luego hacemos un moveTo() para indicar el punto donde comenzar el camino. Posteriormente dibujamos varias líneas a diversos puntos del canvas, para acabar invocando al método fill(), con lo que rellenaremos de color el camino.
Fijarse que el camino no se había llegado a cerrar. Por lo que fill() lo cerrará por nosotros con una línea al primer punto donde comenzamos el dibujo.
<html>
<head>
<title>Canvas Caminos</title>
<script>
//La ya conocida función para cargar el contexto de un canvas
function cargaContextoCanvas(idCanvas){
var elemento = document.getElementById(idCanvas);
if(elemento && elemento.getContext){
var contexto = elemento.getContext('2d');
if(contexto){
return contexto;
}
}
return FALSE;
}
window.onload = function(){
//Recibimos el elemento canvas
var ctx = cargaContextoCanvas('micanvas');
if(ctx){
ctx.beginPath();
ctx.moveTo(50,5);
ctx.lineTo(75,65);
ctx.lineTo(50,125);
ctx.lineTo(25,65);
ctx.fill();
}
}
</script>
</head>
<body>
<canvas id="micanvas" width="150" height="150">
Accede a este script con un navegador que acepte canvas del HTML 5
</canvas>
</body>
</html>
Para acabar, podemos ver el ejemplo en marcha en una página aparte.