Go to file
Alex 9b93ca627b Extension Inkscape de remplissage par hachures optimisées pour le laser
Taux de remplissage en pourcentage, trajet de la tête en serpentin
(plus proche voisin), hachures croisées, interface fr/en, tests et README.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-14 21:50:29 +02:00
docs Extension Inkscape de remplissage par hachures optimisées pour le laser 2026-10-14 21:50:29 +02:00
images Extension Inkscape de remplissage par hachures optimisées pour le laser 2026-10-14 21:50:29 +02:00
locale Extension Inkscape de remplissage par hachures optimisées pour le laser 2026-10-14 21:50:29 +02:00
po Extension Inkscape de remplissage par hachures optimisées pour le laser 2026-10-14 21:50:29 +02:00
tests/data Extension Inkscape de remplissage par hachures optimisées pour le laser 2026-10-14 21:50:29 +02:00
.gitignore Extension Inkscape de remplissage par hachures optimisées pour le laser 2026-10-14 21:50:29 +02:00
deploy.ps1 Extension Inkscape de remplissage par hachures optimisées pour le laser 2026-10-14 21:50:29 +02:00
hachures_core.py Extension Inkscape de remplissage par hachures optimisées pour le laser 2026-10-14 21:50:29 +02:00
hachures.inx Extension Inkscape de remplissage par hachures optimisées pour le laser 2026-10-14 21:50:29 +02:00
hachures.py Extension Inkscape de remplissage par hachures optimisées pour le laser 2026-10-14 21:50:29 +02:00
i18n.py Extension Inkscape de remplissage par hachures optimisées pour le laser 2026-10-14 21:50:29 +02:00
README.md Extension Inkscape de remplissage par hachures optimisées pour le laser 2026-10-14 21:50:29 +02:00
test_hachures.py Extension Inkscape de remplissage par hachures optimisées pour le laser 2026-10-14 21:50:29 +02:00

Remplissage par hachures — extension Inkscape

Cinq formes (rectangle, cercle, courbe, forme trouée, ellipse) remplies de hachures à 45° avec un taux de remplissage de 25 %

Extension Inkscape 1.x qui remplit des formes avec des hachures parallèles pour la gravure laser. Le taux de remplissage (pourcentage de noir) fixe l'espacement des traits : plus il est élevé, plus la zone est sombre.

Les traits sont classés pour la tête du laser : la fin d'un trait est toujours proche du début du suivant. La tête monte le long d'un trait, redescend le long du suivant, et ainsi de suite en serpentin, sans repartir du même côté. Tous les traits sont écrits dans cet ordre dans un seul chemin.

Table des matières

Fonctionnalités

  • Remplit n'importe quelle forme fermée : rectangles, cercles, ellipses, chemins à courbes, formes trouées (règle pair-impair : les trous restent vides) et groupes (chaque forme du groupe est traitée).
  • Taux de remplissage de 1 à 100 % : l'espacement est calculé à partir de la largeur du trait (taux = largeur / pas), donc 100 % donne des traits jointifs.
  • Trajet optimisé : serpentin sur les formes convexes, plus proche voisin sur les formes concaves ou trouées. Sur un rectangle de 100 × 60 avec un pas de 1, les déplacements à vide tombent à 59 unités, contre 5 900 pour un balayage toujours dans le même sens.
  • Angle libre, hachures croisées (seconde passe à 90°, parcourue à partir de l'endroit où la première s'arrête) et alignement des traits soit centré sur chaque forme, soit sur l'origine du document (traits continus d'une forme à l'autre).
  • Résultat propre : un groupe nommé « Hachures » contenant un seul chemin « Trajet laser », sans transform.
  • Largeur du trait en mm, cm, px, pt ou in, indépendante de l'échelle du document.
  • Interface traduite en français et en anglais, selon la langue d'Inkscape (anglais pour toute autre langue).
  • Script de déploiement Windows (deploy.ps1).

Installation

Aucune dépendance externe : l'extension utilise inkex, fourni avec Inkscape.

Windows

Fermer Inkscape, puis, dans PowerShell, depuis le dossier du projet :

.\deploy.ps1              # installe dans %APPDATA%\inkscape\extensions\Hachures
.\deploy.ps1 -Uninstall   # désinstalle
.\deploy.ps1 -Force       # installe même si Inkscape est ouvert

Manuelle

Copier hachures.inx, hachures.py, hachures_core.py, images/parameters_en.png et le dossier locale/ dans un sous-dossier du répertoire des extensions d'Inkscape, puis redémarrer Inkscape :

Système Dossier
Windows %APPDATA%\inkscape\extensions\
Linux ~/.config/inkscape/extensions/
macOS ~/Library/Application Support/org.inkscape.Inkscape/config/inkscape/extensions/

Utilisation

  1. Sélectionner une ou plusieurs formes (ou un groupe).
  2. Ouvrir Extensions › AlexDesign › Remplissage par hachures… (Hatch Fill).
  3. Régler le taux de remplissage et la largeur du trait (celle du faisceau laser), puis valider.
  4. Le résultat est placé dans un groupe juste au-dessus de la forme ; la forme d'origine est conservée sauf si l'option est décochée.

Conseils

Symptôme Réglage
Zone trop claire ou trop sombre Modifier le taux de remplissage.
Les traits se chevauchent ou laissent des vides Régler la largeur du trait sur celle du faisceau laser.
Message « Trop de traits de hachure » Augmenter la largeur du trait, baisser le taux ou sélectionner une forme plus petite (limite : 50 000 traits).
Motif discontinu entre deux formes voisines Choisir l'alignement « Origine du document ».
Le logiciel du laser réordonne les traits Désactiver l'optimisation de trajet du logiciel : l'ordre du chemin est déjà optimisé.

Paramètres

Schéma des paramètres

Paramètre Défaut Rôle
Taux de remplissage (% de noir) 30 Part de la surface noircie, de 1 à 100. Fixe l'espacement des traits.
Largeur du trait 0,2 Largeur du faisceau laser.
Unité mm Unité de la largeur du trait (mm, cm, px, pt, in).
Angle (degrés) 45 Direction des traits, sens anti-horaire : 0 = horizontal, 90 = vertical.
Hachures croisées (seconde passe à 90°) non Ajoute une passe perpendiculaire ; le pas double pour garder le même taux.
Alignement des traits Centré sur chaque forme Ou « Origine du document » : traits continus d'une forme à l'autre.
Couleur du trait noir Couleur des traits dans Inkscape.
Conserver la forme d'origine oui Sinon, la forme est supprimée.

Structure du projet

hachures.inx              Boîte de dialogue (textes source en anglais)
hachures.py               Couche inkex : sélection, unités, écriture SVG
hachures_core.py          Calcul des hachures et du trajet, sans inkex
i18n.py                   Traductions : extract / update / compile
po/                       hachures.pot, en.po, fr.po
locale/<langue>/…         Catalogues compilés (.mo)
images/parameters_en.png  Schéma de l'onglet « Aide » (déployé)
docs/schema_parametres.py Générateur du schéma des paramètres
docs/parametres.png       Schéma français (ce README)
docs/exemple.png          Exemple de rendu (ce README)
tests/data/               SVG d'exemple pour les tests de bout en bout
test_hachures.py          Tests pytest
deploy.ps1                Déploiement / désinstallation Windows

API de hachures_core :

Fonction Rôle
spacing_from_density(density, line_width, cross=False) Pas entre les traits pour un taux de remplissage donné.
hatch(rings, spacing, angle=45, cross=False, anchor="shape") Hachures d'un contour, classées dans l'ordre laser.
hatch_pass(rings, spacing, angle, anchor, start) Un seul jeu de traits parallèles, ordonné.
scan_lines(rings, spacing, phase) Intersections des traits avec le contour (pair-impair).
order_lines(lines, spacing, phase, start) Ordre et sens de parcours (plus proche voisin sur les extrémités).
travel_length(polylines) / cutting_length(polylines) Longueur des déplacements à vide / des traits.
flatten_cubic_subpaths(subpaths, tolerance) Courbes de Bézier → anneaux de points.
parse_color(value) / polylines_to_d(polylines) Couleur Inkscape → CSS ; polylignes → données d.

Développement

python -m venv .venv && .venv\Scripts\activate
pip install pytest
python -m pytest -q

Sans inkex : 40 tests passés, 12 ignorés (bout en bout). Avec inkex (PYTHONPATH vers C:\Program Files\Inkscape\share\inkscape\extensions) : 52 tests passés. Ils couvrent le taux de remplissage réel, les trous, le serpentin et la comparaison avec un balayage naïf, les formes concaves, les hachures croisées, l'alignement, l'échelle du document, les traductions et la cohérence .inx ↔ arguments.

Traductions

Les textes source (.inx et appels _()) sont en anglais. Après toute modification d'un texte :

python i18n.py        # extract + update + compile, liste les msgstr manquants

Compléter les msgstr vides de po/fr.po, puis relancer python i18n.py. Pour ajouter une langue, l'ajouter à LANGUAGES dans i18n.py.

Schéma des paramètres

python docs/schema_parametres.py        # français (docs/) et anglais (images/)

Les formes sont calculées avec hachures_core ; l'export PNG passe par inkscape.com.