Laserengraver dev : Différence entre versions
Ligne 1 : | Ligne 1 : | ||
− | == | + | == Installation de l'extension == |
Ubuntu 12.04 | Ubuntu 12.04 | ||
Ligne 11 : | Ligne 11 : | ||
rm laseringraver.zip | rm laseringraver.zip | ||
− | == | + | == Modification de l'extension == |
− | === | + | === Copier et renommer l'extension === |
On souhaite faire une copie de l'extension pour pouvoir garder la version originale accessible. | On souhaite faire une copie de l'extension pour pouvoir garder la version originale accessible. | ||
Ligne 29 : | Ligne 29 : | ||
− | === | + | === Principe === |
− | D'après de que j'ai compris, une extension inkscape est une classe python qui hérite de la classe "inkex.Effect". Son constructeur (i.e. <tt>def __init__(self)</tt>) permet d'avoir accès aux paramètres définis dans le menu de l'interface graphique par l'intermédiaire du fichier .inx | + | D'après de que j'ai compris, une extension inkscape est une classe python qui hérite de la classe "inkex.Effect". Son constructeur (i.e. <tt>def __init__(self)</tt>) permet d'avoir accès aux paramètres définis dans le menu de l'interface graphique par l'intermédiaire du fichier .inx. |
− | === | + | === Ajout de paramètres dans le menu de laserengraver === |
Il suffit d'ajouter une entrée "param" dans le fichier "laserengraver_laser.inx" et la ligne correspondante dans les options de OptionParser. | Il suffit d'ajouter une entrée "param" dans le fichier "laserengraver_laser.inx" et la ligne correspondante dans les options de OptionParser. | ||
− | === | + | === Comment ça marche ? === |
La fonction <tt>Laserengraver.get_info()</tt> récupère les données du svg et défini la liste des couches (<tt>Laserengraver.layers</tt>) et un dictionnaire contenant des chemins (<tt>Laserengraver.paths</tt>) avec les couches comme clés. | La fonction <tt>Laserengraver.get_info()</tt> récupère les données du svg et défini la liste des couches (<tt>Laserengraver.layers</tt>) et un dictionnaire contenant des chemins (<tt>Laserengraver.paths</tt>) avec les couches comme clés. | ||
+ | |||
+ | Le reste du process se déroule dans la fonction <tt>Laserengraver.laser()</tt> qui converti les chemins en "curve" puis génère le gcode avec la fonction <tt>Laserengraver.generate_gcode()</tt>. Cette fonction est appelée au niveau des couches, c'est donc plus facile de définir le changement d'outil au niveau des couches. Sinon il faut modifier les données dans l'objet "curve" et ça paraît un petit peu plus délicat. | ||
+ | |||
Les styles sont définis au niveau des chemins | Les styles sont définis au niveau des chemins | ||
Ligne 51 : | Ligne 54 : | ||
stl2dic(path.get('style'))['stroke'] | stl2dic(path.get('style'))['stroke'] | ||
+ | |||
== Astuces == | == Astuces == |
Version du 30 novembre 2013 à 16:48
Sommaire
Installation de l'extension
Ubuntu 12.04
Télécharger l'archive http://www.slackersdelight.com/instructables/laserengraver.zip
Placer les fichiers du répertoire lazerengraver dans le dossier /home/$USER/.config/inkscape/extensions
wget http://www.slackersdelight.com/instructables/laserengraver.zip unzip laserengraver.zip -d .config/inkscape/extensions rm laseringraver.zip
Modification de l'extension
Copier et renommer l'extension
On souhaite faire une copie de l'extension pour pouvoir garder la version originale accessible.
Le fichier python (.py) contient le code principal. Le fichier .inx contient les infos pour intégrer l'extension à inkscape J'ai choisi de renommer l'extention modifiée en ajoutant des suffixes "lo".
cd .config/inkscape/extensions cp laserengraver_laser.inx laserengraver_laser_lo.inx cp laserengraver.py laserengraver_lo.py
dans le fichier .inx, il faut modifier le champ "id" et le champ "_name" (remplacé "laser" par "lazer_lo") et remplacer toutes les occurrences de laserengraver.py par laserengraver_lo.py
Au démarrage d'Inkscape, il y a désormais deux extensions dans le menu "Extensions > Laserengraver"
Principe
D'après de que j'ai compris, une extension inkscape est une classe python qui hérite de la classe "inkex.Effect". Son constructeur (i.e. def __init__(self)) permet d'avoir accès aux paramètres définis dans le menu de l'interface graphique par l'intermédiaire du fichier .inx.
Il suffit d'ajouter une entrée "param" dans le fichier "laserengraver_laser.inx" et la ligne correspondante dans les options de OptionParser.
Comment ça marche ?
La fonction Laserengraver.get_info() récupère les données du svg et défini la liste des couches (Laserengraver.layers) et un dictionnaire contenant des chemins (Laserengraver.paths) avec les couches comme clés.
Le reste du process se déroule dans la fonction Laserengraver.laser() qui converti les chemins en "curve" puis génère le gcode avec la fonction Laserengraver.generate_gcode(). Cette fonction est appelée au niveau des couches, c'est donc plus facile de définir le changement d'outil au niveau des couches. Sinon il faut modifier les données dans l'objet "curve" et ça paraît un petit peu plus délicat.
Les styles sont définis au niveau des chemins
for layer in layers: if layer in paths: for path in paths[layer]: path
pour récupérer le style on utilise path.get('style') qui renvoi une chaîne de caractère qu'on peut parser avec stl2dic pour le mettre dans un dictionnaire. On a alors accès à la couleur de la ligne :
stl2dic(path.get('style'))['stroke']
Astuces
bidouillage python pour avoir accès aux données de manière interactive
Pour avoir accès à une partie des données produites par l'extension (notamment trouver à quel moment on peut faire intervenir la couleur) on peut ajouter les librairies python de Inkscape à l'environnement python. Pour cela, il suffit d'ajouter /usr/include/inkscape/extensions à la variable d'environnement $PYTHONPATH
export PYTHONPATH=$PYTHONPATH:/usr/include/inkscape/extensions
(à ajouter dans .bashrc)
Après cela, on peut exécuter les extensions dans un terminal python et avoir accès au données produites.