# Remplissage motif relief — extension Inkscape
Cinq formes (rectangle, cercle, courbe, rectangle troué, ellipse) remplies par le motif de Y en relief, le trou restant vide Extension Inkscape 1.x qui remplit l'**intérieur** des formes sélectionnées avec un motif en relief : des figures en « Y » dessinées sur une grille isométrique (arêtes verticales et à ±30°), relevé sur un motif de référence. Les traits sont coupés exactement au bord de la forme, trous compris, et le résultat tient dans un seul chemin par forme.
## Sommaire - [Fonctionnalités](#fonctionnalités) - [Installation](#installation) - [Utilisation](#utilisation) - [Paramètres](#paramètres) - [Structure du projet](#structure-du-projet) - [Développement](#développement) ## Fonctionnalités - Motif périodique (maille hexagonale de 5 arêtes) calculé, pas importé : taille, rotation et origine réglables. - Formes gérées : chemins (courbes aplaties), rectangles, cercles, ellipses, polygones, polylignes, et groupes de ces éléments (transformations prises en compte). Les chemins composés avec trous restent vides à l'intérieur des trous. - Deux modes d'origine : centre de chaque forme (motif symétrique) ou origine du document (motif continu d'une forme à l'autre). - Segments alignés fusionnés : peu de nœuds, un seul chemin par forme, pas de `transform` sur les chemins produits. - Option : tracer aussi le contour de la forme ; option : conserver ou supprimer la forme d'origine. - Garde-fou : refus au-delà de 250 000 segments, avec un message d'aide. - 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 : ```powershell .\deploy.ps1 # installe .\deploy.ps1 -Uninstall # désinstalle .\deploy.ps1 -Force # installe même si Inkscape est ouvert ``` Les fichiers sont copiés dans `%APPDATA%\inkscape\extensions\Remplissage motif relief`. ### Manuelle Copier `relief_fill.inx`, `relief_fill.py`, `relief_core.py`, `images/` et `locale/` dans un sous-dossier du dossier d'extensions utilisateur : | Système | Dossier | | ------- | ------- | | Windows | `%APPDATA%\inkscape\extensions\` | | Linux | `~/.config/inkscape/extensions/` | | macOS | `~/Library/Application Support/org.inkscape.Inkscape/config/inkscape/extensions/` | Redémarrer Inkscape après l'installation. ## Utilisation 1. Sélectionner une ou plusieurs formes. 2. Menu **Extensions > AlexDesign > Remplissage motif relief…** (*Relief Pattern Fill*). 3. Régler la longueur d'arête, la rotation et l'origine, puis **Appliquer**. Le résultat est un groupe « Remplissage relief » placé juste au-dessus de chaque forme sélectionnée. **Conseils** | Symptôme | Réglage | | -------- | ------- | | Motif trop fin ou trop dense | Augmenter la longueur d'arête | | « Trop de traits » | Augmenter la longueur d'arête ou sélectionner une forme plus petite | | « Aucun trait n'y tient » | Réduire la longueur d'arête | | Motif discontinu entre deux formes voisines | Choisir l'origine « Origine du document » | | Texte non rempli | Le convertir d'abord en chemins (Chemin > Objet en chemin) | ## Paramètres ![Schéma des paramètres](docs/parametres.png) | Paramètre | Défaut | Rôle | | --------- | ------ | ---- | | Longueur d'arête | 5 mm | Arête unitaire de la grille ; le motif se répète toutes les 5 arêtes | | Unité | mm | Unité de la longueur d'arête et de l'épaisseur des traits (mm, cm, px, pt, in) | | Rotation (degrés, sens horaire) | 0 | Fait tourner le motif autour de l'origine du motif | | Origine du motif | Centre de chaque forme | Nœud de la grille au centre de chaque forme, ou à l'origine du document | | Couleur des traits | noir | Couleur (et opacité) des traits | | Épaisseur des traits | 0,3 | Dans l'unité de l'onglet Motif | | Dessiner aussi le contour de la forme | non | Ajoute un chemin avec le contour de la forme | | Conserver la forme d'origine | oui | Sinon la forme sélectionnée est supprimée | ## Structure du projet ```text relief_fill.inx Boîte de dialogue (textes source en anglais) relief_fill.py Couche inkex : sélection, unités, aplatissement, écriture SVG relief_core.py Logique pure, sans inkex : motif, découpe i18n.py Extraction / mise à jour / compilation des traductions po/ relief_fill.pot, en.po, fr.po locale//LC_MESSAGES/relief_fill.mo (générés, déployés) images/parameters_en.png Schéma de l'onglet « Help » (déployé) docs/schema_parametres.py Générateur du schéma (fr pour le README, en pour le dialogue) docs/parametres.png Schéma des paramètres du README docs/capture-desktop.png Image de présentation du README (rendu de tests/data/shapes.svg) tests/data/ SVG d'exemple pour les tests de bout en bout test_relief_fill.py Tests pytest deploy.ps1 Déploiement / désinstallation Windows ``` API du noyau (`relief_core.py`) : | Fonction | Rôle | | -------- | ---- | | `fill_rings(rings, edge, angle=0, anchor=(0, 0))` | Segments du motif à l'intérieur d'un contour (pair-impair) | | `pattern_segments(bbox, edge)` | Segments du motif couvrant une boîte, nœud (0, 0) à l'origine | | `clip_segment(p, q, rings)` | Parties d'un segment situées dans le contour | | `point_in_rings(point, rings)` | Appartenance au contour, règle pair-impair | | `rotate_point(point, angle, center)` | Rotation (sens horaire à l'écran) | | `rings_bbox(rings)` | Boîte englobante | | `segments_to_polylines(segments)` / `polylines_to_d(polylines)` | Conversion vers les données `d` d'un chemin SVG | | `parse_color(value)` | Couleur Inkscape (entier RGBA) → `#rrggbb` + opacité | ## Développement ```powershell python -m venv .venv ; .\.venv\Scripts\Activate.ps1 pip install pytest lxml tinycss2 cssselect2 cssselect python -m pytest -q # 23 tests passés, 11 ignorés (sans inkex) $env:PYTHONPATH = 'C:\Program Files\Inkscape\share\inkscape\extensions' python -m pytest -q # 34 tests passés (avec inkex) ``` Les tests couvrent le noyau (directions, périodicité, fusion des arêtes, découpe, trous, rotation, ancrage), le bout en bout (formes, courbes, trou, groupe transformé, échelle de page non standard, options) et la cohérence des traductions et du `.inx`. ### Traductions ```powershell python i18n.py # extrait, met à jour et compile ; liste les msgstr manquants ``` Après modification d'un texte du `.inx` ou d'un `_("...")` : lancer `python i18n.py`, compléter les `msgstr` vides de `po/fr.po`, relancer. Ne jamais éditer les `.mo`. Pour ajouter une langue : l'ajouter à `LANGUAGES` dans `i18n.py`. ### Schéma des paramètres ```powershell python docs\schema_parametres.py # fr -> docs/parametres.png, en -> images/parameters_en.png ``` L'export PNG passe par `inkscape.com`. Le schéma est calculé avec les vraies fonctions de `relief_core`.