Skip to content

FrankSAURET/OptimLaser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

⚡ OptimLaser ⚡

Version Inkscape License Python

🔥 Extension Inkscape pour l'optimisation de découpe laser
🔥 Inkscape extension for laser cutting optimization

FR EN


🇫🇷 Français

📋 Présentation

OptimLaser est une extension Inkscape qui optimise un dessin vectoriel pour la découpe laser.

🔄 Le code a été largement réécrit dans cette version 2026.1 avec une architecture modulaire complète (géométrie, optimisation, interface). L'extension dispose désormais d'une nouvelle interface graphique dynamique (Tkinter) qui remplace l'ancien panneau statique et permet un paramétrage avancé en temps réel.

✨ Fonctionnalités principales :

  • ✂️ Supprime les tracés en double (lignes superposées), sauf les courbes de Bézier ;
  • 🎨 Supprime les chemins dont la couleur n'est pas gérée par la découpeuse ;
  • 🚀 Optimise l'ordre de découpe pour réduire les déplacements à vide ;
  • 💾 Sauvegarde le fichier optimisé sous un nouveau nom (suffixe « - découpe ») ;
  • 🖥️ Interface graphique dynamique avec mémorisation des derniers réglages.
  • 🩶 Les éléments gris sont préservés pour la gravure.

📦 Installation

Copiez le dossier optimlaser dans le répertoire d'extensions d'Inkscape :

🖥️ Système 📂 Emplacement
🪟 Windows %appdata%\inkscape\extensions</b>
🐧 Linux ~/.config/inkscape/extensions/
🍎 macOS ~/Library/Application Support/org.inkscape.Inkscape/config/inkscape/extensions/
💡 Vous pouvez vérifier le chemin exact dans Inkscape : Édition > Préférences > Système (ligne « Extensions de l'utilisateur »).

🔁 Redémarrez Inkscape après la copie.


🚀 Lancement

Dans Inkscape, allez dans :

📌 Extensions > Découpe Laser > Optimisation pour découpe laser…

La fenêtre de paramétrage s'ouvre automatiquement.


⚙️ Paramètres

🔧 Onglet « Paramètres »

⚙️ Paramètre 📝 Description
📏 Tolérance de détection (mm) Distance en dessous de laquelle deux tracés sont considérés comme superposés (défaut : 0,15 mm).
🔀 Chevauchement partiel Active la détection des segments partiellement superposés.
🌐 Optimisation globale Active la réorganisation de l'ordre des chemins pour minimiser les trajets à vide.
🧠 Stratégie d'optimisation Choix entre : Plus proche voisin (rapide), Optimisation locale (2-opt amélioré), Zonage (découpage géographique en colonnes ou lignes).
🔢 Itérations max Nombre maximal d'itérations pour la stratégie d'optimisation locale.
📐 Direction / Taille du zonage Pour la stratégie Zonage : direction (colonnes ou lignes) et taille des zones en mm.

🔩 Onglet « Paramètres avancés »

⚙️ Paramètre 📝 Description
🎨 Supprimer les couleurs non gérées Supprime tous les éléments dont la couleur de trait n'est pas dans la liste des couleurs gérées.
💾 Sauvegarder sous Découpe Enregistre le fichier optimisé avec le suffixe « - découpe ».
⏱️ Vitesses (mm/s) Préréglages de vitesses de découpe par matériau (ex. : Contreplaqué, Acrylique, Carton…). Vitesse de découpe et vitesse à vide configurables. Les préréglages sont éditables et personnalisables.
🌈 Ordre des couleurs Définit l'ordre de priorité des couleurs pour la découpe. Les couleurs peuvent être réordonnées, ajoutées ou supprimées.

📄 Configuration (OptimLaser.json)

Le fichier OptimLaser.json dans le dossier de l'extension contient :

  • 🎨 colors : liste ordonnée des couleurs gérées par la découpeuse ;
  • ⏱️ speeds : préréglages de vitesses par matériau ;
  • 💾 last_used : derniers paramètres utilisés (sauvegardés automatiquement).

🌍 Traduction

L'interface d'OptimLaser est traduisible grâce au système gettext.

Un fichier modèle de traduction vierge (.pot) se trouve dans :

📂 optimlaser/locale/none/LC_MESSAGES/OptimLaser.pot

Pour créer une traduction :

1️⃣ Copiez le fichier OptimLaser.pot et renommez-le en OptimLaser.po ;

2️⃣ Traduisez les chaînes msgstr "" dans le fichier .po avec un éditeur de texte ou un outil comme Poedit ;

3️⃣ Compilez le fichier .po en .mo avec la commande :

msgfmt OptimLaser.po -o OptimLaser.mo

4️⃣ Placez les fichiers .po et .mo dans le dossier :

📂 optimlaser/locale/<code_langue>/LC_MESSAGES/

(par exemple optimlaser/locale/de/LC_MESSAGES/ pour l'allemand)

🤝 Contribuer avec une traduction : si vous réalisez une traduction, envoyez-moi le fichier .po ou faites une pull request sur le dépôt GitHub — je l'intégrerai avec plaisir !


📜 Licence

Tout le code est proposé sous licence GPLv2. ✍️ Auteur : Frank SAURET



🇬🇧 English

📋 Overview

OptimLaser is an Inkscape extension that optimizes vector drawings for laser cutting.

🔄 The code has been extensively rewritten in version 2026.1 with a full modular architecture (geometry, optimization, UI). The extension now features a new dynamic graphical interface (Tkinter) replacing the old static panel, allowing advanced real-time configuration.

✨ Key features:

  • ✂️ Removes duplicate paths (overlapping lines), except Bézier curves;
  • 🎨 Removes paths whose color is not managed by the laser cutter;
  • 🚀 Optimizes cutting order to reduce idle travel distance;
  • 💾 Saves the optimized file with a new name (suffix " - découpe");
  • 🖥️ Dynamic GUI with automatic memorization of last-used settings.

📦 Installation

Copy the optimlaser folder into Inkscape's extensions directory:

🖥️ System 📂 Location
🪟 Windows %appdata%\inkscape\extensions\
🐧 Linux ~/.config/inkscape/extensions/
🍎 macOS ~/Library/Application Support/org.inkscape.Inkscape/config/inkscape/extensions/
💡 You can check the exact path in Inkscape: Edit > Preferences > System ("User extensions" line).

🔁 Restart Inkscape after copying.


🚀 Launch

In Inkscape, go to:

📌 Extensions > Découpe Laser > Optimisation pour découpe laser…

The settings window opens automatically.


⚙️ Settings

🔧 "Paramètres" tab (Settings)

⚙️ Setting 📝 Description
📏 Detection tolerance (mm) Distance below which two paths are considered overlapping (default: 0.15 mm).
🔀 Partial overlap Enables detection of partially overlapping segments.
🌐 Global optimization Enables reordering of paths to minimize idle travel.
🧠 Optimization strategy Choose from: Nearest neighbor (fast), Local optimization (improved 2-opt), Zoning (geographic grouping by columns or rows).
🔢 Max iterations Maximum iterations for the local optimization strategy.
📐 Zoning direction / size For the Zoning strategy: direction (columns or rows) and zone size in mm.

🔩 "Paramètres avancés" tab (Advanced settings)

⚙️ Setting 📝 Description
🎨 Remove unmanaged colors Removes all elements whose stroke color is not in the managed colors list.
💾 Save as "Découpe" Saves the optimized file with the " - découpe" suffix.
⏱️ Speeds (mm/s) Cutting speed presets per material (e.g., Plywood, Acrylic, Cardboard…). Cutting speed and idle speed are configurable. Presets are editable and customizable.
🌈 Color order Defines the priority order of colors for cutting. Colors can be reordered, added, or removed.

📄 Configuration (OptimLaser.json)

The OptimLaser.json file in the extension folder contains:

  • 🎨 colors: ordered list of colors managed by the laser cutter;
  • ⏱️ speeds: cutting speed presets per material;
  • 💾 last_used: last-used parameters (saved automatically).

🌍 Translation

OptimLaser's interface is translatable using the gettext system.

A blank translation template file (.pot) is located at:

📂 optimlaser/locale/none/LC_MESSAGES/OptimLaser.pot

To create a translation:

1️⃣ Copy the file OptimLaser.pot and rename it to OptimLaser.po;

2️⃣ Translate the msgstr "" strings in the .po file using a text editor or a tool like Poedit;

3️⃣ Compile the .po file into .mo with the command:

msgfmt OptimLaser.po -o OptimLaser.mo

4️⃣ Place both .po and .mo files in:

📂 optimlaser/locale/<language_code>/LC_MESSAGES/

(e.g. optimlaser/locale/de/LC_MESSAGES/ for German)

🤝 Contribute a translation: if you create a translation, send me the .po file or submit a pull request on the GitHub repository — I'll gladly include it!


📜 License

All code is offered under GPLv2 license. ✍️ Author: Frank SAURET

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages