# Remplissage motif Y fléché — extension Inkscape
Une forme courbe percée d'un trou et un cercle, remplis par l'extension d'un réseau de Y fléchés découpé au contour Extension Inkscape 1.x qui remplit la surface d'une forme fermée avec un motif géométrique de « Y fléchés » : un réseau triangulaire de Y identiques (bras à 0°, 120° et 240°), chaque bras se terminant par un chevron dont les barbes sont parallèles aux deux autres bras. La pointe de chaque flèche vient se loger dans le « V » arrière du Y voisin, ce qui produit l'effet de chevrons imbriqués.
## Table des matières - [Fonctionnalités](#fonctionnalités) - [Installation](#installation) - [Utilisation](#utilisation) - [Paramètres](#paramètres) - [Structure du projet](#structure-du-projet) - [Développement](#développement) ## Fonctionnalités - Remplissage de `path`, `rect`, `circle`, `ellipse`, `polygon` (les groupes sélectionnés sont explorés ; `line` et `polyline` sont 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 `transform` sur 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 : ```powershell .\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 1. Sélectionner une ou plusieurs formes fermées. 2. **Extensions → AlexDesign → Remplissage motif Y fléché…** (*Y Arrow Pattern Fill…* avec une interface en anglais) 3. 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 ![Schéma des paramètres : période, bras, barbes, épaisseur, rotation, bord de la forme et ancrage du réseau](docs/parametres.png) | 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 ```text 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 ```powershell 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 : ```powershell 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//LC_MESSAGES/`. `i18n.py` n'a besoin que de Python (ni `xgettext` ni `msgfmt`) : ```powershell 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 `` : cet onglet montre la version anglaise quelle que soit la langue. ```powershell 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.