Laserengraver dev : Différence entre versions

De fablabo
Aller à : navigation, rechercher
(bidouillage python pour avoir accès aux données de manière interactive)
(Installation de l'extension)
 
(19 révisions intermédiaires par 4 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
== installation de l'extention ==
+
{{Projet
 +
|status= experimental
 +
|image=
 +
|name=LaserEngraver / smoothieboard
 +
|description=adapter l'extension inkscape laserengraver pour générer du gcode pour la smoothieboard qui pilote un découpe laser
 +
|license= GPL
 +
|inspiration = http://www.instructables.com/id/Pocket-laser-engraver/step7/
 +
|contributeurs=LaurentM,Cedric
 +
|ingrédients=code
 +
|url= https://gitlab.com/PlateformeC/laserengraver_smoothie
 +
}}
  
Ubuntu 12.04
+
==Le but du projet==
  
Télécharger l'archive http://www.slackersdelight.com/instructables/laserengraver.zip
+
Adapter l'extension inkscape [http://www.instructables.com/id/Pocket-laser-engraver/step7/ laserengraver] pour générer du gcode pour la smoothieboard qui pilote une découpe laser (dans notre atelier il s'agit de la [[Laser_Smoothignstech]] )
  
Placer les fichiers du répertoire lazerengraver dans le dossier /home/$USER/.config/inkscape/extensions
+
Cette page à pour objet de documenter le fonctionnement du plugin et certains d’éléments de fonctionnement de la smoothieboard utile à la bonne construction du fichier gcode.  
  
wget http://www.slackersdelight.com/instructables/laserengraver.zip
+
===spécifications/modifications à effectuer par rapport à l'original===
unzip laserengraver.zip -d .config/inkscape/extensions
 
rm laseringraver.zip
 
  
== modification de l'extension ==
 
  
=== copier et renommer l'extension ===
+
* GCODES spécifiques relatifs à la gconfig de la smoothie :
 +
 
 +
**Armement du laser
 +
***M10 : allume le laser
 +
***M11 : étiend le laser
 +
 
 +
** Contrôle de la puissance du laser
 +
*** c'est le paramètre S (c'est fait pour être utilisé avec les G1/G2/G3)
 +
*** Par exemple : G1 X100 F1200 S0.3 pour une découpe à 30% de la puissance avec une vitesse de 1200.
 +
 
 +
 
 +
* Possibilité d'associer des couleurs de traits à des couples vitesse/puissance
 +
 
 +
== Installation de l'extension ==
 +
 
 +
Pour l'installation du plugin, il faut se référer à la page : [[Laserengraver|LaserEngraver]]
 +
 
 +
== 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.
  
Le fichier python (.py) contient le code principal. Le fichier .inx contient les infos pour intégrer l'extension à inkscape
+
Le fichier python (<tt>.py</tt>) 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".
+
J'ai choisi de renommer l'extention modifiée en ajoutant des suffixes "_smoothie".
  
 
  cd .config/inkscape/extensions
 
  cd .config/inkscape/extensions
  cp laserengraver_laser.inx laserengraver_laser_lo.inx
+
  cp laserengraver_laser.inx laserengraver_laser_smothie.inx
  cp laserengraver.py laserengraver_lo.py
+
  cp laserengraver.py laserengraver_smoothie.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
+
Dans le fichier .inx, il faut modifier le champ "id" et le champ "_name" (remplacé "laser" par "smoothie-laser") et remplacer toutes les occurrences de laserengraver.py par laserengraver_smoothie.py
  
 
Au démarrage d'Inkscape, il y a désormais deux extensions dans le menu "Extensions > Laserengraver"
 
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. <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.
 +
 +
=== Comment ça marche ? ===
 +
 +
La fonction <tt>Laserengraver.get_info()</tt> récupère les données du svg et définis 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 couches en objets "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.
 +
 +
Par contre, 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 ===
 
=== bidouillage python pour avoir accès aux données de manière interactive ===
Ligne 38 : Ligne 93 :
 
Après cela, on peut exécuter les extensions dans un terminal python et avoir accès au données produites.
 
Après cela, on peut exécuter les extensions dans un terminal python et avoir accès au données produites.
  
=== principe ===
+
=== liens symboliques pour pouvoir travailler en dehors de .config/inkscape/extension ===
  
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
+
cd .config/inkscape/extensions
 
+
ln -s ~/Dev/laserengraver_smoothie/src/laserengraver_laser_smoothie.inx laserengraver_laser_smoothie.inx
=== ajout de paramètre dans le menu de laserengraver ===
+
ln -s ~/Dev/laserengraver_smoothie/src/laserengraver_smoothie.py laserengraver_smoothie.py
 
 
Il suffit d'ajouter une entrée "param" dans le fichier "laserengraver_laser.inx" et la ligne correspondante dans les options de OptionParser.
 

Version actuelle en date du 15 novembre 2017 à 15:08


adapter l'extension inkscape laserengraver pour générer du gcode pour la smoothieboard qui pilote un découpe laser




Le but du projet

Adapter l'extension inkscape laserengraver pour générer du gcode pour la smoothieboard qui pilote une découpe laser (dans notre atelier il s'agit de la Laser_Smoothignstech )

Cette page à pour objet de documenter le fonctionnement du plugin et certains d’éléments de fonctionnement de la smoothieboard utile à la bonne construction du fichier gcode.

spécifications/modifications à effectuer par rapport à l'original

  • GCODES spécifiques relatifs à la gconfig de la smoothie :
    • Armement du laser
      • M10 : allume le laser
      • M11 : étiend le laser
    • Contrôle de la puissance du laser
      • c'est le paramètre S (c'est fait pour être utilisé avec les G1/G2/G3)
      • Par exemple : G1 X100 F1200 S0.3 pour une découpe à 30% de la puissance avec une vitesse de 1200.


  • Possibilité d'associer des couleurs de traits à des couples vitesse/puissance

Installation de l'extension

Pour l'installation du plugin, il faut se référer à la page : LaserEngraver

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 "_smoothie".

cd .config/inkscape/extensions
cp laserengraver_laser.inx laserengraver_laser_smothie.inx
cp laserengraver.py laserengraver_smoothie.py

Dans le fichier .inx, il faut modifier le champ "id" et le champ "_name" (remplacé "laser" par "smoothie-laser") et remplacer toutes les occurrences de laserengraver.py par laserengraver_smoothie.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.

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.

Comment ça marche ?

La fonction Laserengraver.get_info() récupère les données du svg et définis 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 couches en objets "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.

Par contre, 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.

liens symboliques pour pouvoir travailler en dehors de .config/inkscape/extension

cd .config/inkscape/extensions
ln -s ~/Dev/laserengraver_smoothie/src/laserengraver_laser_smoothie.inx laserengraver_laser_smoothie.inx
ln -s ~/Dev/laserengraver_smoothie/src/laserengraver_smoothie.py laserengraver_smoothie.py