inkscape.Ypatern/README.md
2026-09-24 10:39:18 +02:00

209 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Remplissage motif Y fléché — extension Inkscape
<table>
<tr>
<td width="50%" valign="top">
<img src="docs/capture-desktop.png" alt="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" width="420">
</td>
<td valign="top">
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.
</td>
</tr>
</table>
## 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/<langue>/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 `<image>` : 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.