5.12.06

Afficher un rectangle depuis l'extension


Il s'agit maintenant de pouvoir afficher un rectangle de base qui représentera l'une des barres du code EAN13. Toujours dans les extensions de bases j'ai trouvé le code suivant pour tracer une ligne.

new = self.document.createElement('svg:path')
s = {'stroke-linejoin': 'miter', 'stroke-width': '1.0px',
'stroke-opacity': '1.0', 'fill-opacity': '1.0',
'stroke': '#000000', 'stroke-linecap': 'butt',
'fill': 'none'}
new.setAttribute('style', simplestyle.formatStyle(s))
new.setAttribute('d', simplepath.formatPath(a))
node.parentNode.appendChild(new)

Pour pouvoir aller plus loin je vais dans l'explorateur XML d'inkscape pour voir la différence entre une ligne et un rectangle... et je modifie donc le code en conséquence pour arriver à :

new = self.document.createElement('svg:rect') s = {'stroke': 'none', 'fill': 'black', 'fill-opacity': '1.0'} new.setAttribute('style', simplestyle.formatStyle(s)) new.setAttribute('x', str(bPosX)) new.setAttribute('y', str(bPosY)) new.setAttribute('width', str(bWidth)) new.setAttribute('height', str(bHeight)) self.current_layer.appendChild(new)

qui me déssinera un rectangle de bWidth de large sur bHeigth de haut à la position bPosX, bPosY.

2.12.06

Afficher un texte depuis l'extension


En regardant les diverses extensions livrées avec Inkscape j'ai trouvé le bout de code suivant dans l'extension dots :



new = self.document.createElement('svg:text')
s = {'font-size': self.options.fontsize, 'fill-opacity': '1.0', 'stroke': 'none',
'font-weight': 'normal', 'font-style': 'normal', 'fill': '#000000'}
new.setAttribute('style', simplestyle.formatStyle(s))
new.setAttribute('x', str(x))
new.setAttribute('y', str(y))
new.appendChild(self.document.createTextNode(str(text)))
node.appendChild(new)

Cela ressemble à ce qu'il me faut pour créer un texte sous Inkscape.
Les coordonées du texte sont x et y et le texte lui même est la chaîne str(text).
La chaîne s contient toutes les caractéristiques du texte.

18.11.06

Analyse du fichier .INX (2)




<_name>Add Nodes</_name>
Pas de difficulté pour ce premier paramètre il s'agit bien du nom de l'extension tel qu'il apparaitra dans le menu effets. Pour m'en assurer je change ce nom et redémarre Inkscape, l'entrée dans le menu à bien changé.

<id>org.ekips.filter.addnodes</id>
Peut être simplement une référence à l'auteur et au script ...? Ne semble pas indispensable au fonctionnement de l'extension.

<dependency type="executable" location="extensions">addnodes.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
Les références nécessaire pour faire fonctionner cette extension y compris la référence à elle même. A priori ces références ne semblent pas absolument indispensable au fonctionnement de l'extension. Le programme Python contiendra lui-même des références aux librairies qu'il entend utiliser.

<param name="max" type="float" min="0.0" max="10000.0" text="Maximum segment length">10.0</param>
Ici un point particulièrement intéressant. Ce paramètre permet l'entrée via une interface utilisateur de variables qui seront passés au programme Python.
Pour le type on trouve comme possibilité :
  • Boolean
  • Int
  • Float
  • String
Les trois valeurs suivantes ne semblent donner aucun résultat.
  • Description
  • Enum
  • Notebook

<effects-menu>
<submenu _name="Modify Path">
</effects-menu>
Ici se trouve le nom du Sous-menu dans lequel est rangé le nom de l'extension
Dans le cas ou le sous_Menu n'existe pas déjà, il sera automatiquement créé dans le menu Effets.

<script>
<command reldir="extensions" interpreter="python">addnodes.py</command>
</script>
Ce paramètre indique le nom du fichier qui sera exécuté par l'appel de cette fonction, ainsi que le
langage utilisé qui est ici Python.

16.11.06

Analyse du fichier .INX (1)



Voici la copie du fichier addnodes.inx.
Dans le prochain post je vais essayer de trouver la signification de la plupart des paramètres utilisés ici.
Ce fichier est au format xml on trouve donc pour chaque entrée une balise ouvrante <xxx>
et une fermante qui est la même précédée d'un /
</xxx>


<inkscape-extension>
<_name>Add Nodes</_name>
<id>org.ekips.filter.addnodes</id>
<dependency type="executable" location="extensions">addnodes.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<param name="max" type="float" min="0.0" max="10000.0" text="Maximum segment length">10.0</param>
<effect>
<object-type>path</object-type>
<effects-menu>
<submenu _name="Modify Path">
</effects-menu>
</effect>
<script>
<command reldir="extensions" interpreter="python">addnodes.py</command>
</script>
</inkscape-extension>

8.11.06

1 Extension = 2 Fichiers


Les extensions qui m'interessent (par exemple addnodes) sont composés de deux fichiers.
Le premier est un fichier de type .inx qui est un descripteur de l'extension. Le second est un fichier de type .py qui est le corp de l'extension en langage Python.
Il y a aussi des fichiers .pyc qui sont les fichiers compilés des versions .py . Je ne suis pas encore très clair sur le fait que je doivent ou non compiler ces fichiers par moi-même.

3.11.06

Trouver l'info



Pour commencer je cherche avec mon moteur préféré les infos que je peux collecter sur le sujet...
www.ekips.org/comp/inkscape/
www.colibre.com.br/bin/view/Aurium/InkscapeCalendarShellScript
wiki.inkscape.org/wiki/index.php/MakingAnExtension
Ces trois sites devrait déjà me donner quelques infos et exemples pour commencer.

16/11/2006 - j'ajoute un lien qui me parait intéressant :
blogmarks.net/marks/tag/python,svg

Et des extensions à droite à gauche...
math.univ-lille1.fr/~barraud/Inkscape/pathdeform/
julvitard.free.fr/eqtexsvg/
www.nabble.com/Color-fill-t302404.html

J'ai aussi trouvé un groupe de discussion sur Inkscape mais pratiquement inactif...
Groupe Google Inkscape Windows

Enfin un lien sur un générateur code barre qui me servira de référence.
wikipython.flibuste.net/moin.py/GenerateurCodeBarre

Ensuite je repère le répertoire des extensions dans mon installation Inkscape
...\inkscape\share\extensions
A priori tout les fichiers qui sont là sont des fichiers ASCII que je peux ouvrir avec n'importe quel éditeur de texte (Wordpad....)

Objectif


Mon objectif est d'arriver à écrire une extension pour Inkscape en langage python. J'utilise la version 0.44 pour Windows de Inkscape. Je pars de zéro et n'ai aucune expérience particulière de Python et encore moins des extensions Inkscape. Ce blog, si j'arrive au bout de mon objectif, permettra de partager mes recherches sur le sujet, et éventuellement d'aider d'autres débutants à faire leur premier pas. En effet j'ai remarqué qu'il y avait très peu d'informations sur le sujet sur le net.
L'extension en question sera un générateur de code barre au standard EAN13. En entrée on tape les douzes chiffre du code et l'extension calcule la clef et dessine le code barre correspondant avec le code en chiffre en dessous.