10 KiB
Remplissage Voronoï — extension Inkscape
Sommaire
Fonctionnalités
- Formes acceptées : chemins, rectangles, cercles, ellipses, polygones et polylignes, y compris dans des groupes sélectionnés ; les trous suivent la règle pair-impair. Le texte doit d'abord être converti en chemin.
- Trois dispositions des germes : aléatoire homogène (Poisson, cellules organiques de taille voisine), aléatoire pur, grille hexagonale avec irrégularité réglable (0 % = nid d'abeille parfait). Graine aléatoire reproductible.
- Filet exact : deux cellules voisines sont séparées exactement de la largeur demandée ; option de cadre de même largeur le long du contour, y compris autour des trous et dans les creux des formes concaves.
- Cellules arrondies : rayon de coin fixe, ou arrondi proportionnel à la taille de chaque cellule, jusqu'à des cellules presque circulaires (100 %).
- Sortie : le filet (un seul chemin en remplissage pair-impair), les cellules (un chemin plein par cellule), ou les deux ; couleurs réglables.
- SVG propre : résultat dans un groupe nommé placé juste au-dessus de la forme,
sans
transformsur les chemins, transformations des groupes parents gérées. - Calcul en Python pur (index spatial) : quelques centaines de cellules en une fraction de seconde ; au-delà de 20 000 cellules, l'extension demande d'agrandir les cellules.
- Interface traduite en français et en anglais, selon la langue d'Inkscape (anglais pour toute autre langue).
- Script de déploiement Windows.
Installation
Aucune dépendance externe : l'extension utilise inkex, fourni avec Inkscape.
Windows (script)
Inkscape fermé, dans PowerShell :
.\deploy.ps1 # installe ou met à jour
.\deploy.ps1 -Uninstall # désinstalle
.\deploy.ps1 -Force # déploie même si Inkscape est ouvert
Le script copie les fichiers dans %APPDATA%\inkscape\extensions\VoronoiFill.
Manuelle
Copier dans un sous-dossier du répertoire des extensions utilisateur :
voronoi_fill.inx,voronoi_fill.py,voronoi_core.py;images/parameters_en.png;- le dossier
locale/.
| Système | Répertoire des extensions |
|---|---|
| Windows | %APPDATA%\inkscape\extensions |
| Linux | ~/.config/inkscape/extensions |
| macOS | ~/Library/Application Support/org.inkscape.Inkscape/config/inkscape/extensions |
Redémarrer Inkscape ensuite.
Utilisation
- Sélectionner une ou plusieurs formes fermées (ou des groupes).
- Menu Extensions > AlexDesign > Remplissage Voronoï… (Extensions > AlexDesign > Voronoi Fill… en anglais).
- Régler le motif et le filet, cocher Aperçu en direct si besoin, puis Appliquer.
Le résultat est placé dans un groupe « Remplissage Voronoï » juste au-dessus de chaque forme ; l'original est conservé sauf si l'option est décochée.
Conseils
| Symptôme | Réglage |
|---|---|
| Motif trop dense, calcul lent | Augmenter la taille des cellules. |
| Motif qui ne plaît pas | Changer la graine aléatoire. |
| Cellules très inégales | Choisir « Aléatoire homogène » ou la grille hexagonale. |
| Nid d'abeille trop régulier | Monter l'irrégularité (grille hexagonale). |
| Petits éclats le long du contour | Ils sont supprimés s'ils sont plus fins que la moitié du filet ; sinon réduire la taille des cellules ou changer de graine. |
| Filet trop anguleux pour la découpe | Donner un rayon aux coins des cellules. |
| Cellules plus rondes, aspect organique | Monter l'arrondi des cellules (50 à 100 %). |
Paramètres
| Paramètre | Défaut | Rôle |
|---|---|---|
| Disposition des cellules | Aléatoire homogène | Placement des germes : aléatoire homogène (Poisson), aléatoire pur, grille hexagonale. |
| Taille des cellules | 10 | Distance moyenne entre les centres de deux cellules voisines. |
| Irrégularité | 30 % | Grille hexagonale seulement : déplacement aléatoire des germes, en % d'une demi-cellule. |
| Graine aléatoire | 1 | Change le motif sans changer les réglages. |
| Unité | mm | Unité des longueurs (mm, cm, px, pt, in). |
| Largeur du filet | 1 | Écart entre deux cellules voisines ; doit rester inférieure à la taille des cellules. |
| Filet le long du contour | coché | Les cellules restent à une largeur de filet du bord : un cadre borde la forme. |
| Rayon des coins des cellules | 0 | Arrondit les coins de toutes les cellules d'une même longueur (pas ceux créés par le contour). |
| Arrondi des cellules | 0 % | Arrondit chaque cellule en proportion de sa taille (rayon inscrit) ; 100 % = presque un disque. Le plus grand de l'arrondi et du rayon des coins s'applique. |
| Résultat | Filet | Filet (un chemin), cellules (un chemin chacune), ou les deux. |
| Couleur du filet | noir | Remplissage du filet. |
| Couleur des cellules | gris | Remplissage des cellules. |
| Conserver la forme d'origine | coché | Décoché, la forme source est supprimée. |
Structure du projet
voronoi_fill.inx Boîte de dialogue (onglets Motif, Filet, Aide), textes anglais
voronoi_fill.py Couche inkex : sélection, unités, aplatissement, écriture SVG
voronoi_core.py Calcul pur (germes, Voronoï, découpe, filet), sans inkex
i18n.py Extraction / mise à jour / compilation des traductions
po/ Catalogues voronoi_fill.pot, en.po, fr.po
locale/ Catalogues compilés (.mo), déployés
images/parameters_en.png Schéma de l'onglet « Aide » (déployé)
docs/schema_parametres.py Générateur du schéma (fr pour le README, en pour la boîte)
docs/parametres.png Schéma du README
docs/exemple.png Exemple de rendu
tests/data/shapes.svg Formes d'exemple des tests de bout en bout
test_voronoi_fill.py Tests pytest
deploy.ps1 Déploiement / désinstallation Windows
API de voronoi_core (points (x, y), y vers le bas ; une région est une
liste d'anneaux lue en pair-impair) :
| Fonction | Rôle |
|---|---|
fill_shape(rings, cell_size, net_width, distribution, irregularity, seed, border, corner_radius, roundness, tolerance, max_cells, min_area, min_thickness) |
Cellules rétrécies qui remplissent la région ; liste de régions. Lève FillError. |
net_rings(shape_rings, cells) |
Filet : anneaux de la forme + anneaux des cellules (pair-impair). |
make_points(distribution, bbox, size, irregularity, seed) |
Germes random, poisson ou hexagonal. |
voronoi_cells(points, bbox, gap) |
Cellule convexe de chaque germe, rétrécie de gap/2 de chaque côté. |
round_cell(poly, corner_radius, roundness, tolerance) |
Arrondit une cellule (érosion puis dilatation), sans déborder. |
erode_convex(poly, radius), inradius(poly) |
Érosion exacte d'un convexe, rayon du disque inscrit. |
round_convex(poly, radius, tolerance) |
Dilate un convexe avec coins en arcs. |
clip_convex(region, convex, inside) |
Intersection ou différence d'une région pair-impair et d'un convexe. |
erode_near_boundary(piece, region, radius, tolerance) |
Retire d'un morceau ce qui est à moins de radius du bord de la région. |
Region(rings) |
Région indexée : edges_in(box), contains(point). |
clean_rings, ring_area, region_area, point_in_rings, bbox_of |
Utilitaires géométriques. |
rings_to_d, polylines_to_d, parse_color |
Données d SVG, couleur Inkscape → CSS. |
Développement
python -m venv .venv
.venv\Scripts\activate
pip install pytest lxml tinycss2 cssselect2 cssselect
python -m pytest -q
Sans inkex : 40 tests passés, 6 ignorés (bout en bout). Avec inkex :
$env:PYTHONPATH = 'C:\Program Files\Inkscape\share\inkscape\extensions'
python -m pytest -q # 46 tests passés
Les tests couvrent la découpe par un convexe (formes concaves, trous, contacts
dégénérés), les cellules (partition, écart exact, hexagones réguliers, arrondi), les
germes (distance de Poisson, densités comparables, graine reproductible), le
remplissage (cadre à distance du contour, filet = forme − cellules), l'extension
de bout en bout (groupes transformés, sorties, erreurs) et la complétude des
traductions et la cohérence .inx ↔ arguments.
Traductions
python i18n.py # extrait, met à jour po/*.po, compile locale/*.mo
Après modification d'un texte (.inx ou _("...") dans un .py) : lancer
python i18n.py, compléter les msgstr vides de po/fr.po, relancer.
en.po se remplit tout seul. Pour ajouter une langue, l'ajouter à
LANGUAGES dans i18n.py, relancer, traduire le nouveau .po.
Schéma des paramètres
python docs/schema_parametres.py # fr → docs/parametres.png (1400 px)
# en → images/parameters_en.png (900 px)
Le schéma est dessiné avec les fonctions de voronoi_core et exporté par
C:\Program Files\Inkscape\bin\inkscape.com. La version anglaise est affichée
aux 3/4 dans l'onglet « Aide », Inkscape ne traduisant pas le chemin d'une image.

