Go to file
2026-09-30 22:23:25 +02:00
docs Version initiale 2026-09-30 22:23:25 +02:00
images Version initiale 2026-09-30 22:23:25 +02:00
locale Version initiale 2026-09-30 22:23:25 +02:00
po Version initiale 2026-09-30 22:23:25 +02:00
tests/data Version initiale 2026-09-30 22:23:25 +02:00
.gitignore Version initiale 2026-09-30 22:23:25 +02:00
deploy.ps1 Version initiale 2026-09-30 22:23:25 +02:00
i18n.py Version initiale 2026-09-30 22:23:25 +02:00
README.md Version initiale 2026-09-30 22:23:25 +02:00
test_voronoi_fill.py Version initiale 2026-09-30 22:23:25 +02:00
voronoi_core.py Version initiale 2026-09-30 22:23:25 +02:00
voronoi_fill.inx Version initiale 2026-09-30 22:23:25 +02:00
voronoi_fill.py Version initiale 2026-09-30 22:23:25 +02:00

Remplissage Voronoï — extension Inkscape

Rectangle, cercle, forme courbe, forme trouée et ellipse remplis d'un motif de Voronoï : cellules blanches séparées par un filet noir de largeur constante, cadre le long du contour

Extension Inkscape 1.x qui remplit une forme avec un motif de Voronoï : des germes sont répartis sur la forme, chaque cellule est rétrécie pour laisser entre deux cellules voisines un filet de largeur constante et paramétrable, puis découpée par le contour. Le résultat est un chemin unique — la forme percée par les cellules — prêt pour la découpe laser, le vinyle, la gravure ou l'impression, ou bien une cellule par chemin pour la mise en couleur.

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 transform sur 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

  1. Sélectionner une ou plusieurs formes fermées (ou des groupes).
  2. Menu Extensions > AlexDesign > Remplissage Voronoï… (Extensions > AlexDesign > Voronoi Fill… en anglais).
  3. 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

Schéma des 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.