2012-09-21 12 views
6

En este momento estoy impidiendo el GraphicsContext para mi nodo canvas y tratando un¿Cómo acercas un nodo JavaFX 2 Canvas?

gc.scale(2, 2); 

En mi canvas tengo unas pocas docenas de métodos disponibles. Entonces sé que tiene que haber algo para acercarse. Sin embargo, mi intento no produce "crecimiento" o "ampliación" obvios. ¿Hay algo que necesite llamar para que esto se aplique o se vuelva a dibujar?

Respuesta

5

Creo que gc.scale(2,2) escalará las siguientes cosas que dibujas en el lienzo por un factor de 2, sin material existente que ya hayas dibujado.

Si desea escalar el lienzo, puede establecer una transformación en el lienzo, no en el contexto de los gráficos.

canvas.setScaleX(2); 
canvas.setScaleY(2); 

Si desea que el lienzo de escalado que se refleja en los cálculos de diseño para los administradores de diseño a continuación, se puede envolver en un grupo y si desea utilizar el zoom efecto similar en el lienzo de escala, donde se recortan las partes de la tela , entonces puede colocar el lienzo en un ScrollPane y definir una ventana gráfica o establecer un clip en el nodo lienzo.

actualización para discutir pixelación emite

Para evitar problemas de pixelación en aumento, creo que tendrá que mantener un registro de todos los comandos gráficos que se han establecido hasta la fecha, a continuación, cuando se desea cambiar el factor de zoom, despejar el lienzo, aplicar la nueva escala al lienzo y luego reproducir todos los comandos de gráficos. Quizás algún formato como svg se pueda usar para grabar los comandos gráficos.

O simplemente podría usar el gráfico de escena y dibujar en lugar de un lienzo, entonces tampoco tendrá problemas de pixellación.

Creo que lo importante a tener en cuenta aquí es que se supone que el lienzo es una especie de modo inmediato de disparar y olvidar, en lugar de un servicio de dibujo retenido como el gráfico de escena.

+0

sí, esto funciona. Sorta. Pixela todo muy mal. Como las líneas son solo vectores, me pregunto si hay una forma de "volver a dibujar" todo en la ampliación que establezca. Sé que pude hacer esto cuando utilicé solo un objeto de grupo simple versus lienzo. Se veía así: privado void reDrawPreview() { para (Nodo n: canvsGroup.getChildren()) { Línea nd = (Línea) n; nd.setStrokeWidth (Draw2d.getStrokeWeight()); } – ril3y

+0

disculpa por el formato ... no estoy seguro de cómo formatear el código en los comentarios? – ril3y

+0

Puedes ver cómo estaba funcionando a las 3:36 en este video. http://www.youtube.com/watch?v=kdJZbVO4E4Q&feature=g-upl – ril3y

Cuestiones relacionadas