Foros del Web » Creando para Internet » HTML »

html5 canvas dibujar dos punto y unirlos con una linea

Estas en el tema de html5 canvas dibujar dos punto y unirlos con una linea en el foro de HTML en Foros del Web. Hola amigos, es posible realizar con html5 - canvas lo siguiente: tengo una imagen y requiero que el usuario seleccione solo dos puntos y que ...
  #1 (permalink)  
Antiguo 11/04/2014, 14:00
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
html5 canvas dibujar dos punto y unirlos con una linea

Hola amigos, es posible realizar con html5 - canvas lo siguiente:

tengo una imagen y requiero que el usuario seleccione solo dos puntos y que se dibuje una linea uniendo esos dos puntos.

la idea que tenia era colocar la imagen de fondo, colocar una transparencia y capturar los dos click y sus respectivas coordenadas, estoy bien o mal?
  #2 (permalink)  
Antiguo 11/04/2014, 17:10
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: html5 canvas dibujar dos punto y unirlos con una linea

Claro. Tomas las coordenadas del puntero del mouse por cada vez que el usuario haga un clic, las asignas a dos variables que representarán los puntos X y Y y cuando tengas los otros dos puntos, dibujas la línea. Para esto, te puede apoyar usando una variable como contador, que irá contando los clics, entonces, para los puntos iniciales, el valor del contador debe ser impar, mientras que para los finales, debe ser par. Teniendo las coordenadas iniciales y finales, dibujas la línea.

Código HTML:
Ver original
  1. <img src = "imagen.jpg" />
  2. <canvas width = 400 height = 300></canvas>

Código CSS:
Ver original
  1. img, canvas{
  2.     position: absolute;
  3. }

Código Javascript:
Ver original
  1. var canvas = document.getElementsByTagName("canvas")[0],
  2.     context = canvas.getContext("2d"),
  3.     cont = 0,
  4.     xIni, yIni,
  5.     xFin, yFin;
  6.  
  7. window.addEventListener("click", function(e){
  8.     if (++cont % 2 !== 0){      
  9.         xIni = e.clientX;
  10.         yIni = e.clientY;
  11.     }
  12.     else{
  13.         xFin = e.clientX;
  14.         yFin = e.clientY;
  15.        
  16.         context.moveTo(xIni, yIni);
  17.         context.lineTo(xFin, yFin);
  18.         context.lineWidth = 2;
  19.         context.strokeStyle = "white";
  20.         context.stroke();
  21.     }
  22. }, false);

DEMO

Es importante que tanto a la imagen como al elemento canvas les des una posición absoluta en la hoja de estilos para que las líneas que se vayan dibujando, queden sobre la imagen, además, las medidas del canvas deben corresponder con las de la imagen, por ejemplo, en el demo que adjunto, la imagen es de 400x300 píxeles, por eso le doy esa medida al canvas.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 12/04/2014, 12:39
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: html5 canvas dibujar dos punto y unirlos con una linea

@Alexis88 gracias por responder, excelente tu aporte , solo tengo una pregunta porque no es exacto la linea que se traza, me explico yo señalo dos puntos y se traza la linea pero esa linea no queda exactamente donde señale los puntos
  #4 (permalink)  
Antiguo 12/04/2014, 14:10
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: html5 canvas dibujar dos punto y unirlos con una linea

Siendo sincero, no lo sé, también había notado de los puntos de inicio y fin de las líneas, se marcan cerca a donde se dan los clics, pero no en los mismos lugares. Ojalá alguien que sepa más del tema pueda explicarnos esto.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 15/04/2014, 15:50
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: html5 canvas dibujar dos punto y unirlos con una linea

Alexis existe la manera de que se puedan borrar las lineas ?
  #6 (permalink)  
Antiguo 15/04/2014, 16:26
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: html5 canvas dibujar dos punto y unirlos con una linea

Para limpiar un área del elemento <canvas>, existen los métodos clearRect y fillRect, los cuales son explicados en este interesante artículo.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #7 (permalink)  
Antiguo 15/04/2014, 16:48
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: html5 canvas dibujar dos punto y unirlos con una linea

Hola:

Sé poco sobre canvas, pero algo más sobre svg, y como el tema era sobre canvas no he contestado...

Al respecto de obtener puntos, para no tener problemas, en mi capturador de áreas: Capturar áreas en imágenes, he optado por poner la imagen en un input y enviar el formulario a un iframe, también se puede poner la imagen en un iframe en la coordenada 0,0, y la captura es trivial.

Para dibujar puntos con svg, se usa una etiqueta line, y como etiqueta se puede borrar con removeChild, u ocultarla con estilos...

La creación de tags en svg es muy fácil también...

Aunque no esté dando respuestas, espero que sea útil mi aporte.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo

Etiquetas: html5
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:17.