Pregunta

Parece que la información dada en stroke_extents() y las funciones translate(x, y) y scale(x, y), yo debería ser capaz de tomar cualquier Cairo arbitraria (estoy usando PyCairo) y la ruta de "mejor ajuste" la misma. En otras palabras, centrarlo y expandirla para llenar el espacio disponible.

Antes de dibujar el camino, que han escalado la tela de tal manera que el origen es la esquina inferior izquierda, arriba es y +, justo es X +, y la altura y la anchura son ambos 1. En estas condiciones, el código parece para escalar correctamente la ruta:

# cr is the canvas
extents = cr.stroke_extents()
x_size = abs(extents[0]) + abs(extents[2])
y_size = abs(extents[1]) + abs(extents[3])
cr.scale(1.0 / x_size, 1.0 / y_size)

No puedo por la vida de a averiguar la traducción embargo. ¿Hay un método más sencillo? ¿Cómo puedo "mejor ajuste" un camino Cairo en su lienzo?

Por favor, pedir aclaraciones si algo está claro en esta cuestión.

¿Fue útil?

Solución

He encontrado una solución que me gusta (al menos para mis propósitos). Basta con crear una nueva superficie y la pintura de la superficie de edad a la nueva.

Otros consejos

En cuanto a la escala única, he hecho una cosa similar a ajustar una imagen dentro de una caja con un enfoque de "mejor ajuste". Como acerca de la escala, aquí está el código:

available_width = 800
available_height = 600
path_width = 500    
figure_height = 700     

# formulas
width_ratio = float(available_width)/path_width
height_ratio = float(available_height)/figure_height
scale = min(height_ratio, width_ratio)

# result
new_path_width = path_width*scale
new_figure_height = figure_height*scale

print new_path_width, new_figure_height

La imagen se ve arrastrado alineado con el origen (arriba a la izquierda en mi caso), así que quizás una cosa similar se debe hacer para traducir el camino.

Además, este mejor ajuste está destinado a preservar la relación de aspecto. Si desea estirar la figura, utilizar cada uno de los ratios en lugar de la variable 'escala'.

Espero haber ayudado

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top