Compare commits

...

2 Commits

Author SHA1 Message Date
Alex
949390a221 Unité en mm 2026-10-10 10:40:00 +02:00
Alex
baf0dcbb60 Ajout de l'ignorance du répertoire 'site/' dans .gitignore 2026-10-01 09:44:28 +02:00
2 changed files with 52 additions and 1 deletions

2
.gitignore vendored
View File

@ -9,3 +9,5 @@ __pycache__/
# SVG intermediaires du schema (regeneres par docs/schema_parametres.py) # SVG intermediaires du schema (regeneres par docs/schema_parametres.py)
docs/*.svg docs/*.svg
site/*

View File

@ -18,6 +18,7 @@ import sys
import inkex import inkex
from inkex import bezier from inkex import bezier
from inkex.localization import localize from inkex.localization import localize
from inkex.units import convert_unit
# L'extension vit dans son propre sous-dossier des extensions Inkscape, qui # L'extension vit dans son propre sous-dossier des extensions Inkscape, qui
# n'est pas forcement dans sys.path : on l'y ajoute pour trouver voronoi_core. # n'est pas forcement dans sys.path : on l'y ajoute pour trouver voronoi_core.
@ -26,11 +27,59 @@ sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from voronoi_core import ( # noqa: E402 from voronoi_core import ( # noqa: E402
FillError, fill_shape, net_rings, parse_color, rings_to_d) FillError, fill_shape, net_rings, parse_color, rings_to_d)
def use_system_language():
"""Renseigne LANGUAGE avec la langue du systeme si rien ne la fixe.
Sous Windows, Inkscape regle sur « langue du systeme » ne transmet aucune
variable de langue au script : gettext retomberait sur l'anglais alors que
la boite de dialogue, traduite par Inkscape lui-meme, est dans la langue
de l'utilisateur.
"""
if any(os.environ.get(name) for name in ("LANGUAGE", "LC_ALL", "LC_MESSAGES", "LANG")):
return
try:
import ctypes
import locale
language = locale.windows_locale.get(
ctypes.windll.kernel32.GetUserDefaultUILanguage())
except Exception: # pylint: disable=broad-except
return # hors Windows : LANG est toujours defini
if language:
os.environ["LANGUAGE"] = language
# Installe _() dans les builtins : catalogue « voronoi_fill » de la langue # Installe _() dans les builtins : catalogue « voronoi_fill » de la langue
# de l'interface (Inkscape transmet domaine et dossier par l'environnement), # de l'interface (Inkscape transmet domaine et dossier par l'environnement),
# textes anglais d'origine sinon. # textes anglais d'origine sinon.
use_system_language()
localize() localize()
def uu_per_mm(svg):
"""Unites utilisateur par millimetre, comme Inkscape les affiche.
svg.unittouu() devine l'unite du document par arrondi a l'unite connue la
plus proche : il se trompe des que l'echelle n'est pas standard (page
redimensionnee). On prend le rapport reel page / viewBox ; Inkscape
applique une echelle uniforme (preserveAspectRatio « meet »), soit la
plus petite des deux.
"""
try:
vb_w, vb_h = svg.viewbox_width, svg.viewbox_height
page_w = svg.to_dimensional(svg.viewport_width, "mm")
page_h = svg.to_dimensional(svg.viewport_height, "mm")
except AttributeError: # inkex anterieur a 1.2
return svg.unittouu("1mm")
if not (vb_w and vb_h and page_w and page_h):
return svg.unittouu("1mm")
return 1 / min(page_w / vb_w, page_h / vb_h)
def length_to_uu(svg, value, unit="mm"):
"""Longueur reelle (valeur + unite) -> unites utilisateur du document."""
return convert_unit("{}{}".format(value, unit), "mm") * uu_per_mm(svg)
# Formes acceptees ; les groupes sont explores, le texte doit etre converti. # Formes acceptees ; les groupes sont explores, le texte doit etre converti.
SHAPES = (inkex.PathElement, inkex.Rectangle, inkex.Circle, inkex.Ellipse, SHAPES = (inkex.PathElement, inkex.Rectangle, inkex.Circle, inkex.Ellipse,
inkex.Polygon, inkex.Polyline) inkex.Polygon, inkex.Polyline)
@ -71,7 +120,7 @@ class VoronoiFill(inkex.EffectExtension):
return return
def length(value): def length(value):
return self.svg.unittouu("{}{}".format(value, opt.unit)) return length_to_uu(self.svg, value, opt.unit)
cell_size = length(opt.cell_size) cell_size = length(opt.cell_size)
net_width = length(opt.net_width) net_width = length(opt.net_width)