Question

Je découvre l'API GIMP depuis quelques jours maintenant (en utilisant Python-Fu) et j'apprécie vraiment ça. Cependant, il y a quelque chose que je ne peux pas faire: joindre un texte sur un chemin.

L'utilisation de l'interface utilisateur pour le faire est assez facile (créer un chemin> Créer un texte> Cliquez sur le texte le long du chemin dans la boîte à outils) ... mais, comme vous pouvez vous y attendre, je n'aime pas quand les choses sont faciles. C'est pourquoi j'essaie de le faire en utilisant Python.

Voici ce que j'ai déjà réussi à faire:

  • créer une couche
  • Ajoutez un chemin dessus
  • Créer un nouveau texte
  • Afficher le tout

Tout ce que j'ai à faire maintenant, c'est d'apprendre à faire en sorte que mon texte suive le chemin.

L'aide serait chaleureusement appréciée.

Merci

Était-ce utile?

La solution

Après des heures et des heures de recherche sur le côté droit d'Internet (celui sans personnes nues), je n'ai pas trouvé autant de ma question. C'est pourquoi j'ai décidé de regarder le code source GIMP afin de savoir comment fonctionne le "texte le long du chemin" ... et il semble que rien n'a été fait pour rendre cette action disponible via PDB.

Après cela, pour être sûr, j'ai demandé sur la liste de diffusion des développeurs GIMP et quelqu'un (je ne sais pas si je suis autorisé à le dire ici) m'a répondu:

La fonction "texte le long du chemin" est essentiellement un hack et n'a jamais été destiné à être un produit final. Une fonction de texte de texte approprié permettrait de modifier le chemin et de modifier le texte en conséquence. La façon dont le texte déformé est rendu est également loin d'être idéal. Parce que le plan a toujours été que la fonctionnalité changerait, aucun crochet PDB n'a jamais été créé pour cela.

Un autre m'a dit comment créer mon propre plugin "Text Along Path":

Cependant, pour autant que je sache, les traits de Bezier dans un chemin ont la propriété suivante, l'application d'une transformation affine à leurs points de contrôle et aux poignées équivaut à appliquer la même transformation à chaque point de la courbe. Vous pouvez donc faire quelque chose comme ceci:

  • Déterminez un "chemin de référence", c'est-à-dire un chemin droit le long du texte (ou en cours d'exécution au milieu)
  • Pour chaque trait, itérez les points de contrôle et sur chaque point ("C"):
    • Déterminez la projection sur le chemin de référence (distance entre l'origine du chemin de référence) (l'appelez l'ELT "R") et la distance à elle
    • Trouvez le point correspondant sur le chemin cible (pdb.gimp_path_get_point_at_dist ()), "r '"
    • Trouvez la position du nouveau point de contrôle C ': même distance vers le chemin cible, sur perpendiculaire
    • Calculez la position des poignées:
      • calculer dx / dy entre h et c
      • calculer la position équivalente h 'du nouveau point de contrôle C'
      • Appliquer la rotation, centrée sur C 'avec un angle qui est la direction du chemin cible dans R' (comme renvoyé par GIMP_PATH_GET_POINT_AT_ADIST () pour produire une nouvelle position de poignée (h ")
      • répéter pour la 2e poignée
      • Ajouter le triplet c ', h "1, h" 2 au nouveau coup

Puis il m'a encouragé à regarder deux plugins faisant des choses similaires avec des vecteurs, nommé Ribbon Path et Slinky, et disponible sur http://gimp-path-tools.sourceforge.net/

J'espère (grâce à ces deux gars), ce post vous aidera.

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