| docs | ||
| images | ||
| locale | ||
| po | ||
| tests/data | ||
| .gitignore | ||
| deploy.ps1 | ||
| i18n.py | ||
| pattern_core.py | ||
| README.md | ||
| test_pattern.py | ||
| y_pattern.inx | ||
| y_pattern.py | ||
Remplissage motif Y fléché — extension Inkscape
Table des matières
Fonctionnalités
- Remplissage de
path,rect,circle,ellipse,polygon(les groupes sélectionnés sont explorés ;lineetpolylinesont ignorées) - Deux modes au bord de la forme : découpe géométrique des traits sur le contour, ou motifs entiers uniquement avec marge réglable
- Gestion des trous : les sous-chemins internes sont exclus (règle pair-impair)
- Proportions réglables : période, longueur des bras et des barbes (en % de la période), rotation, épaisseur et couleur du trait
- Ancrage du réseau sur l'origine du document (motif continu d'une forme à l'autre) ou au centre de chaque forme
- Un chemin par motif, sans attribut
transformsur les chemins : SVG directement exploitable par les logiciels de découpe laser - Motifs ordonnés en serpentin, ligne par ligne, pour limiter les déplacements à vide
- Index spatial des arêtes du contour : plusieurs milliers de motifs en une fraction de seconde
- Interface traduite en français et en anglais, selon la langue d'Inkscape (anglais pour toute autre langue)
- Script de déploiement PowerShell (installation, mise à jour, désinstallation)
Installation
Aucune dépendance externe : l'extension utilise inkex, fourni avec Inkscape.
Windows — script de déploiement
Inkscape fermé, depuis le dossier du projet :
.\deploy.ps1 # copie vers %APPDATA%\inkscape\extensions\yArrowPattern
.\deploy.ps1 -Uninstall # retire le sous-dossier de l'extension
.\deploy.ps1 -Force # passe outre le contrôle « Inkscape ouvert »
Installation manuelle
Copier y_pattern.inx, y_pattern.py, pattern_core.py et les dossiers locale/
et images/ dans un sous-dossier (par exemple yArrowPattern) du dossier des extensions
utilisateur, puis redémarrer Inkscape :
- 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 fermées.
- Extensions → AlexDesign → Remplissage motif Y fléché… (Y Arrow Pattern Fill… avec une interface en anglais)
- Régler les paramètres, puis Appliquer. L'onglet Schéma illustre chaque paramètre.
Le résultat est placé dans un groupe « Motif Y fléché » juste au-dessus de la forme.
Conseils :
- motif trop serré ou trop lâche → ajuster la période ; les proportions restent identiques
- traits qui se touchent → réduire l'épaisseur ou la longueur des bras (l'écart
entre une pointe et le Y suivant vaut
100 % − bras) - en mode « motifs entiers », la demi-épaisseur du trait est ajoutée à la marge pour que rien ne déborde du contour
- en mode découpe, les extrémités coupées en biais peuvent dépasser du contour d'au plus une demi-épaisseur de trait
Paramètres
| Paramètre | Défaut | Rôle |
|---|---|---|
| Période | 10.0 | Distance entre les centres de deux Y voisins |
| Longueur des bras | 83 % | En pourcentage de la période |
| Longueur des barbes | 33 % | En pourcentage de la période ; 0 donne des Y simples |
| Rotation du motif | 0° | Sens anti-horaire |
| Épaisseur du trait | 0.5 | Largeur du trait |
| Unité | mm | Unité de la période, de l'épaisseur et de la marge |
| Couleur du trait | #b3b3b3 | Couleur et opacité |
| Bord de la forme | Découpe | Découpe au contour, ou motifs entiers uniquement |
| Marge au contour | 0.0 | Mode « motifs entiers » seulement |
| Ancrage du réseau | Document | Origine du document, ou centre de chaque forme |
| Finesse d'échantillonnage | 0.2 | Précision de l'aplatissement des courbes de Bézier |
| Conserver la forme d'origine | oui | Sinon la forme source est supprimée |
Les valeurs par défaut (83 % / 33 %) reproduisent les proportions du motif d'origine.
Structure du projet
y_pattern.inx Description de la boîte de dialogue Inkscape
y_pattern.py Extension : lecture de la sélection, aplatissement des
chemins, écriture des motifs dans le SVG
pattern_core.py Noyau géométrique sans dépendance à inkex
deploy.ps1 Déploiement / désinstallation sous Windows
test_pattern.py Tests pytest
i18n.py Chaîne de traduction : extraction, mise à jour, compilation
po/ Catalogues source : modèle .pot, en.po, fr.po
locale/ Catalogues compilés (.mo) chargés par Inkscape
images/ Schéma anglais de l'onglet « Diagram » (déployé)
tests/data/shapes.svg Formes d'exemple (rectangle, cercle, courbe, forme trouée)
docs/ Images du README, SVG des schémas et leur générateur
(non déployés)
API de pattern_core.py (utilisable seule, hors Inkscape) :
| Fonction | Rôle |
|---|---|
motif_polylines(cx, cy, arm, barb, angle) |
Polylignes d'un Y fléché |
lattice_centers(bbox, period, angle, reach) |
Centres du réseau triangulaire, en ordre serpentin |
EdgeIndex(rings) |
Index spatial du contour : appartenance, intersections |
clip_polyline(polyline, index) |
Morceaux d'une polyligne intérieurs au contour |
motif_fits(polylines, index, clearance) |
Motif entier intérieur, à distance minimale du bord |
fill_pattern(rings, period, …) |
Remplissage complet, renvoie une liste de motifs |
polylines_to_d(polylines) |
Données d d'un chemin SVG |
parse_color(value) |
Décode la couleur RGBA transmise par Inkscape |
Développement
python -m venv .venv
.venv\Scripts\activate # Linux/macOS : source .venv/bin/activate
pip install pytest
python -m pytest test_pattern.py -q
Résultat attendu : 23 passés, 3 ignorés (tests de bout en bout sautés quand
inkex n'est pas importable). Pour les exécuter :
pip install lxml tinycss2 cssselect2 cssselect
$env:PYTHONPATH = 'C:\Program Files\Inkscape\share\inkscape\extensions'
python -m pytest test_pattern.py -q # 26 passés
Les tests couvrent la géométrie du motif (barbes parallèles aux bras, voisins à une période), la couverture du réseau, l'absence de croisement entre motifs voisins aux proportions par défaut, la découpe (y compris à travers un trou), la marge du mode « motifs entiers » et la continuité du motif entre deux formes adjacentes.
Traductions
Les textes source du .inx et des appels _() de y_pattern.py sont en anglais ;
Inkscape les traduit avec le catalogue yarrowpattern (attribut
translationdomain du .inx) trouvé dans locale/<langue>/LC_MESSAGES/.
i18n.py n'a besoin que de Python (ni xgettext ni msgfmt) :
python i18n.py # tout : extract + update + compile
python i18n.py extract # po/yarrowpattern.pot depuis le .inx et le .py
python i18n.py update # reporte les nouveaux textes dans po/en.po et po/fr.po
python i18n.py compile # po/*.po -> locale/*/LC_MESSAGES/yarrowpattern.mo
Après modification d'un texte d'interface : lancer python i18n.py, compléter les
msgstr vides de po/fr.po (liste affichée par la commande), relancer
python i18n.py, puis redéployer. po/en.po est rempli automatiquement avec les
textes source. Ajouter une langue : l'ajouter à LANGUAGES dans i18n.py.
Le test test_translations_up_to_date_and_complete échoue si un catalogue est
incomplet ou si un .mo n'a pas été recompilé.
Schéma des paramètres
Le schéma existe en deux versions, produites à partir de pattern_core (même
géométrie que l'extension) :
docs/parametres.png: version française du README (1400 px) ;images/parameters_en.png: version anglaise, textes agrandis, affichée à 900 × 694 px dans l'onglet Schéma / Diagram de la boîte de dialogue. Inkscape ne traduit pas le chemin d'une<image>: cet onglet montre la version anglaise quelle que soit la langue.
python docs/schema_parametres.py # les deux versions (ou : fr, en)
Le script écrit les SVG dans docs/ puis les exporte en PNG avec
C:\Program Files\Inkscape\bin\inkscape.com. Il faut passer par inkscape.com : la
commande inkscape installée par Chocolatey rend la main avant la fin de l'export.

