J'utilise python désencombrer 1.0Zooming dans une image de fond CairoTexture tout en redessinant
Ma question sous la forme d'un défi
code d'écriture pour permettre de zoomer jusqu'à un acteur CairoTexture, en appuyant sur une clé, dans des étapes telles qu'à chaque l'acteur peut être redessiné (par le caire) de sorte que l'image reste en haute résolution mais continue à évoluer comme prévu, sans en redimensionnant l'acteur. Pensez à quelque chose comme Inkscape et comment vous pouvez zoomer sur les vecteurs; comment les vecteurs restent propres à tout grossissement. Mettez un chemin (tas de commandes de cairo line_to
, disons) sur un acteur de CairoTexture et laissez le même tour se produire.
Plus de détails
Je visais un petit éditeur de SVG qui utilise des groupes d'acteurs. Chaque acteur est consacré à un seul chemin. Je 'zoome' en utilisant SomeGroup.set_depth(z)
et ensuite z plus grand/plus petit. Tout va bien jusqu'à présent. Cependant, plus le (s) acteur (s) s'approche de la caméra, plus la texture est étirée pour s'adapter à leur nouvelle taille apparente.
Je ne peux pas sembler trouver un moyen d'obtenir l'image de fond de faire les deux: (.-À-dire ce qu'il a commencé comme)
- Laisser la taille réelle de l'acteur statique
- sa surface sous-jacente de swap pour les plus grands (sur zoom) que je peux ensuite redessiner le chemin sur (et utiliser une matrice caire pour effectuer la mise à l'échelle du contexte.)
Si je set_size
ou set_surface_size
, l'acteur obtient plus ce qui n'est pas prévu. Je veux seulement que ce soit surface (données sous-jacentes) pour être plus grand.
(je ne suis pas sûr de la terminologie pour cela, mipmapping peut-être?)
Mettez une autre manière: un polygone devient plus grande, augmenter la taille de son tableau de textures afin de pouvoir la carte sur le polygone plus .
J'ai même essayé une fin courir autour de l'encombrement en gardant une seconde surface (à l'aide pycairo) que je Recréer la taille apparente de l'acteur (get_transformed_size
), puis-je utiliser set_from_rgb_data
de l'encombrement et la pointe vers mon deuxième surface, forçant une redimensionnement de la surface mais pas des dimensions de l'acteur. Le problème avec ceci est que a) le désordre ignore la nouvelle taille et dessine seulement dans l'ancienne largeur/hauteur et b) le genre RGBA vs ARGB32 provoque une fusion de couleur.
Je suis ouvert à toutes les idées alternatives, j'espère que je suis debout dans les bois manquant tous les arbres!
\ d