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> |
||
|---|---|---|
| docs | ||
| images | ||
| locale | ||
| po | ||
| tests/data | ||
| .gitignore | ||
| deploy.ps1 | ||
| hachures_core.py | ||
| hachures.inx | ||
| hachures.py | ||
| i18n.py | ||
| README.md | ||
| test_hachures.py | ||
Remplissage par hachures — extension Inkscape
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
- Sélectionner une ou plusieurs formes (ou un groupe).
- Ouvrir Extensions › AlexDesign › Remplissage par hachures… (Hatch Fill).
- Régler le taux de remplissage et la largeur du trait (celle du faisceau laser), puis valider.
- 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
| 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.

