Comment puis-je « meilleur ajustement » un chemin de cairo arbitraire (pycairo)?

StackOverflow https://stackoverflow.com/questions/2292292

  •  21-09-2019
  •  | 
  •  

Question

Il semble que compte tenu des informations dans stroke_extents() et les fonctions de translate(x, y) et scale(x, y), je devrais être en mesure de prendre tout chemin cairo arbitraire (j'utilise de pycairo) et « meilleur ajustement », il. En d'autres termes, centre et l'étendre à remplir l'espace disponible.

Avant de dessiner le chemin, j'ai escaladé la toile de telle sorte que l'origine est le coin inférieur gauche, en haut est y +, droit est x +, et la hauteur et la largeur sont tous deux 1. Compte tenu de ces conditions, le code semble à l'échelle correctement le chemin:

# 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)

Je ne peux pas pour la vie de me le Translating bien. Y at-il une approche plus simple? Comment puis-je « meilleur ajustement » un chemin de cairo sur sa toile?

S'il vous plaît demander des éclaircissements si tout est clair dans cette question.

Était-ce utile?

La solution

Je l'ai trouvé une solution qui me plaît (au moins pour mes besoins). Il suffit de créer une nouvelle surface et peindre la surface ancienne à la nouvelle.

Autres conseils

En ce qui concerne l'échelle seulement, je l'ai fait une chose semblable à régler une image dans une boîte avec une approche « mieux adaptée ». Comme au sujet de l'échelle, voici le code:

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

L'image est dessiné aligné sur l'origine (en haut à gauche dans mon cas), alors peut-être devrait être fait une chose semblable à traduire le chemin.

En outre, ce meilleur ajustement est destiné à préserver le rapport d'aspect. Si vous voulez étirer la figure, utilisez chacun des rapports au lieu de la variable « échelle ».

Je l'ai aidé l'espoir

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top