From 9b93ca627bb98c64cd4dff04e39a441cd208aa85 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 14 Oct 2026 21:50:29 +0200 Subject: [PATCH] =?UTF-8?q?Extension=20Inkscape=20de=20remplissage=20par?= =?UTF-8?q?=20hachures=20optimis=C3=A9es=20pour=20le=20laser?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Taux de remplissage en pourcentage, trajet de la tête en serpentin (plus proche voisin), hachures croisées, interface fr/en, tests et README. Co-Authored-By: Claude Sonnet 5.5 --- .gitignore | 15 ++ README.md | 151 ++++++++++++++ deploy.ps1 | 107 ++++++++++ docs/exemple.png | Bin 0 -> 32647 bytes docs/parametres.png | Bin 0 -> 183008 bytes docs/schema_parametres.py | 334 ++++++++++++++++++++++++++++++ hachures.inx | 74 +++++++ hachures.py | 184 ++++++++++++++++ hachures_core.py | 325 +++++++++++++++++++++++++++++ i18n.py | 304 +++++++++++++++++++++++++++ images/parameters_en.png | Bin 0 -> 129838 bytes locale/en/LC_MESSAGES/hachures.mo | Bin 0 -> 3169 bytes locale/fr/LC_MESSAGES/hachures.mo | Bin 0 -> 3488 bytes po/en.po | 108 ++++++++++ po/fr.po | 108 ++++++++++ po/hachures.pot | 97 +++++++++ test_hachures.py | 291 ++++++++++++++++++++++++++ tests/data/scaled.svg | 6 + tests/data/shapes.svg | 13 ++ 19 files changed, 2117 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 deploy.ps1 create mode 100644 docs/exemple.png create mode 100644 docs/parametres.png create mode 100644 docs/schema_parametres.py create mode 100644 hachures.inx create mode 100644 hachures.py create mode 100644 hachures_core.py create mode 100644 i18n.py create mode 100644 images/parameters_en.png create mode 100644 locale/en/LC_MESSAGES/hachures.mo create mode 100644 locale/fr/LC_MESSAGES/hachures.mo create mode 100644 po/en.po create mode 100644 po/fr.po create mode 100644 po/hachures.pot create mode 100644 test_hachures.py create mode 100644 tests/data/scaled.svg create mode 100644 tests/data/shapes.svg diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8aa9a2d --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +# Cache Python et outils +__pycache__/ +*.pyc +.pytest_cache/ +.venv/ + +# Archives de distribution +*.zip + +# SVG intermediaires du schema (regeneres par docs/schema_parametres.py) +docs/*.svg + +# Page de presentation : hors depot (publiee sur le NAS par site/deploy.ps1 ; +# sa configuration contient hote, compte et chemin de cle SSH) +site/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..8fc778a --- /dev/null +++ b/README.md @@ -0,0 +1,151 @@ +# Remplissage par hachures — extension Inkscape + + + + + + +
+Cinq formes (rectangle, cercle, courbe, forme trouée, ellipse) remplies de hachures à 45° avec un taux de remplissage de 25 % + + +Extension Inkscape 1.x qui remplit des formes avec des hachures parallèles pour la gravure laser. Le **taux de remplissage** (pourcentage de noir) fixe l'espacement des traits : plus il est élevé, plus la zone est sombre. + +Les traits sont **classés pour la tête du laser** : la fin d'un trait est toujours proche du début du suivant. La tête monte le long d'un trait, redescend le long du suivant, et ainsi de suite en serpentin, sans repartir du même côté. Tous les traits sont écrits dans cet ordre dans un seul chemin. + +
+ +## 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 + +- Remplit n'importe quelle forme fermée : rectangles, cercles, ellipses, chemins à courbes, formes trouées (règle pair-impair : les trous restent vides) et groupes (chaque forme du groupe est traitée). +- **Taux de remplissage** de 1 à 100 % : l'espacement est calculé à partir de la largeur du trait (taux = largeur / pas), donc 100 % donne des traits jointifs. +- **Trajet optimisé** : serpentin sur les formes convexes, plus proche voisin sur les formes concaves ou trouées. Sur un rectangle de 100 × 60 avec un pas de 1, les déplacements à vide tombent à 59 unités, contre 5 900 pour un balayage toujours dans le même sens. +- Angle libre, hachures croisées (seconde passe à 90°, parcourue à partir de l'endroit où la première s'arrête) et alignement des traits soit centré sur chaque forme, soit sur l'origine du document (traits continus d'une forme à l'autre). +- Résultat propre : un groupe nommé « Hachures » contenant un seul chemin « Trajet laser », sans `transform`. +- Largeur du trait en mm, cm, px, pt ou in, indépendante de l'échelle du document. +- 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 dans %APPDATA%\inkscape\extensions\Hachures +.\deploy.ps1 -Uninstall # désinstalle +.\deploy.ps1 -Force # installe même si Inkscape est ouvert +``` + +### Manuelle + +Copier `hachures.inx`, `hachures.py`, `hachures_core.py`, `images/parameters_en.png` et le dossier `locale/` dans un sous-dossier du répertoire des extensions d'Inkscape, puis redémarrer Inkscape : + +| Système | Dossier | +| --- | --- | +| 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 (ou un groupe). +2. Ouvrir **Extensions › AlexDesign › Remplissage par hachures…** (*Hatch Fill*). +3. Régler le taux de remplissage et la largeur du trait (celle du faisceau laser), puis valider. +4. Le résultat est placé dans un groupe juste au-dessus de la forme ; la forme d'origine est conservée sauf si l'option est décochée. + +**Conseils** + +| Symptôme | Réglage | +| --- | --- | +| Zone trop claire ou trop sombre | Modifier le taux de remplissage. | +| Les traits se chevauchent ou laissent des vides | Régler la largeur du trait sur celle du faisceau laser. | +| Message « Trop de traits de hachure » | Augmenter la largeur du trait, baisser le taux ou sélectionner une forme plus petite (limite : 50 000 traits). | +| Motif discontinu entre deux formes voisines | Choisir l'alignement « Origine du document ». | +| Le logiciel du laser réordonne les traits | Désactiver l'optimisation de trajet du logiciel : l'ordre du chemin est déjà optimisé. | + +## Paramètres + +![Schéma des paramètres](docs/parametres.png) + +| Paramètre | Défaut | Rôle | +| --- | --- | --- | +| Taux de remplissage (% de noir) | 30 | Part de la surface noircie, de 1 à 100. Fixe l'espacement des traits. | +| Largeur du trait | 0,2 | Largeur du faisceau laser. | +| Unité | mm | Unité de la largeur du trait (mm, cm, px, pt, in). | +| Angle (degrés) | 45 | Direction des traits, sens anti-horaire : 0 = horizontal, 90 = vertical. | +| Hachures croisées (seconde passe à 90°) | non | Ajoute une passe perpendiculaire ; le pas double pour garder le même taux. | +| Alignement des traits | Centré sur chaque forme | Ou « Origine du document » : traits continus d'une forme à l'autre. | +| Couleur du trait | noir | Couleur des traits dans Inkscape. | +| Conserver la forme d'origine | oui | Sinon, la forme est supprimée. | + +## Structure du projet + +```text +hachures.inx Boîte de dialogue (textes source en anglais) +hachures.py Couche inkex : sélection, unités, écriture SVG +hachures_core.py Calcul des hachures et du trajet, sans inkex +i18n.py Traductions : extract / update / compile +po/ hachures.pot, en.po, fr.po +locale//… Catalogues compilés (.mo) +images/parameters_en.png Schéma de l'onglet « Aide » (déployé) +docs/schema_parametres.py Générateur du schéma des paramètres +docs/parametres.png Schéma français (ce README) +docs/exemple.png Exemple de rendu (ce README) +tests/data/ SVG d'exemple pour les tests de bout en bout +test_hachures.py Tests pytest +deploy.ps1 Déploiement / désinstallation Windows +``` + +API de `hachures_core` : + +| Fonction | Rôle | +| --- | --- | +| `spacing_from_density(density, line_width, cross=False)` | Pas entre les traits pour un taux de remplissage donné. | +| `hatch(rings, spacing, angle=45, cross=False, anchor="shape")` | Hachures d'un contour, classées dans l'ordre laser. | +| `hatch_pass(rings, spacing, angle, anchor, start)` | Un seul jeu de traits parallèles, ordonné. | +| `scan_lines(rings, spacing, phase)` | Intersections des traits avec le contour (pair-impair). | +| `order_lines(lines, spacing, phase, start)` | Ordre et sens de parcours (plus proche voisin sur les extrémités). | +| `travel_length(polylines)` / `cutting_length(polylines)` | Longueur des déplacements à vide / des traits. | +| `flatten_cubic_subpaths(subpaths, tolerance)` | Courbes de Bézier → anneaux de points. | +| `parse_color(value)` / `polylines_to_d(polylines)` | Couleur Inkscape → CSS ; polylignes → données `d`. | + +## Développement + +```bash +python -m venv .venv && .venv\Scripts\activate +pip install pytest +python -m pytest -q +``` + +Sans `inkex` : 40 tests passés, 12 ignorés (bout en bout). Avec `inkex` (`PYTHONPATH` vers `C:\Program Files\Inkscape\share\inkscape\extensions`) : 52 tests passés. Ils couvrent le taux de remplissage réel, les trous, le serpentin et la comparaison avec un balayage naïf, les formes concaves, les hachures croisées, l'alignement, l'échelle du document, les traductions et la cohérence `.inx` ↔ arguments. + +### Traductions + +Les textes source (`.inx` et appels `_()`) sont en anglais. Après toute modification d'un texte : + +```bash +python i18n.py # extract + update + compile, liste les msgstr manquants +``` + +Compléter les `msgstr` vides de `po/fr.po`, puis relancer `python i18n.py`. Pour ajouter une langue, l'ajouter à `LANGUAGES` dans `i18n.py`. + +### Schéma des paramètres + +```bash +python docs/schema_parametres.py # français (docs/) et anglais (images/) +``` + +Les formes sont calculées avec `hachures_core` ; l'export PNG passe par `inkscape.com`. diff --git a/deploy.ps1 b/deploy.ps1 new file mode 100644 index 0000000..1f913ea --- /dev/null +++ b/deploy.ps1 @@ -0,0 +1,107 @@ +<# +.SYNOPSIS + Déploie l'extension « Remplissage par hachures » dans Inkscape. + +.DESCRIPTION + Copie hachures.inx, hachures.py, hachures_core.py, le schéma de l'onglet + « Help » (images\parameters_en.png) et les traductions + compilées (locale\\LC_MESSAGES\hachures.mo) dans un + sous-dossier dédié du répertoire des extensions utilisateur d'Inkscape + (Inkscape explore récursivement ce répertoire). Refuse de s'exécuter si + Inkscape est ouvert : les extensions ne sont chargées qu'au démarrage. + +.PARAMETER ExtensionsDir + Répertoire des extensions Inkscape. Par défaut : %APPDATA%\inkscape\extensions + +.PARAMETER FolderName + Nom du sous-dossier de l'extension. Par défaut : Hachures + +.PARAMETER Uninstall + Supprime le sous-dossier de l'extension au lieu de le créer. + +.PARAMETER Force + Déploie même si Inkscape est en cours d'exécution. + +.EXAMPLE + .\deploy.ps1 + .\deploy.ps1 -Uninstall + .\deploy.ps1 -FolderName 'autre-nom' +#> + +[CmdletBinding()] +param( + [string] $ExtensionsDir = (Join-Path $env:APPDATA 'inkscape\extensions'), + [string] $FolderName = 'Hachures', + [switch] $Uninstall, + [switch] $Force +) + +$ErrorActionPreference = 'Stop' + +$files = @('hachures.inx', 'hachures.py', 'hachures_core.py', 'images\parameters_en.png') +$localeDir = 'locale' +$source = $PSScriptRoot +$destination = Join-Path $ExtensionsDir $FolderName + +# --- Inkscape doit être fermé : les extensions sont lues au démarrage --------- +$running = Get-Process -Name 'inkscape' -ErrorAction SilentlyContinue +if ($running -and -not $Force) { + Write-Error "Inkscape est ouvert. Fermez-le puis relancez le script (ou utilisez -Force)." + exit 1 +} + +# --- Désinstallation --------------------------------------------------------- +if ($Uninstall) { + if (Test-Path -LiteralPath $destination) { + Remove-Item -LiteralPath $destination -Recurse -Force + Write-Host "Supprimé : $destination" -ForegroundColor Green + } + else { + Write-Host "Rien à supprimer : $destination n'existe pas." -ForegroundColor Yellow + } + exit 0 +} + +# --- Vérification des sources ------------------------------------------------ +$missing = $files | Where-Object { -not (Test-Path -LiteralPath (Join-Path $source $_)) } +if (-not (Test-Path -LiteralPath (Join-Path $source $localeDir))) { + $missing = @($missing) + "$localeDir\ (lancer : python i18n.py)" +} +if ($missing) { + Write-Error "Fichier(s) introuvable(s) dans $source : $($missing -join ', ')" + exit 1 +} + +# --- Copie ------------------------------------------------------------------- +if (-not (Test-Path -LiteralPath $destination)) { + New-Item -ItemType Directory -Path $destination -Force | Out-Null + Write-Host "Dossier créé : $destination" +} + +foreach ($file in $files) { + $from = Join-Path $source $file + $to = Join-Path $destination $file + $action = if (Test-Path -LiteralPath $to) { 'remplacé' } else { 'copié ' } + New-Item -ItemType Directory -Path (Split-Path $to) -Force | Out-Null + Copy-Item -LiteralPath $from -Destination $to -Force + Write-Host " $action $file" +} + +# Traductions : le dossier est remplacé en entier (langue retirée => supprimée) +$localeTo = Join-Path $destination $localeDir +if (Test-Path -LiteralPath $localeTo) { + Remove-Item -LiteralPath $localeTo -Recurse -Force +} +Copy-Item -LiteralPath (Join-Path $source $localeDir) -Destination $localeTo -Recurse +$languages = Get-ChildItem -LiteralPath $localeTo -Directory | ForEach-Object Name +Write-Host " copié $localeDir\ ($($languages -join ', '))" + +# Le cache Python d'une version précédente peut masquer les fichiers copiés +$pycache = Join-Path $destination '__pycache__' +if (Test-Path -LiteralPath $pycache) { + Remove-Item -LiteralPath $pycache -Recurse -Force +} + +Write-Host "" +Write-Host "Extension déployée dans $destination" -ForegroundColor Green +Write-Host "Redémarrez Inkscape, puis : Extensions > AlexDesign > Remplissage par hachures..." diff --git a/docs/exemple.png b/docs/exemple.png new file mode 100644 index 0000000000000000000000000000000000000000..1b1aebb53d574ccd0356e1841df40e49d8e38820 GIT binary patch literal 32647 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%0Aq(q|UxN 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 U@|uWx`6BRhO#h@FMF)5DUkX8RcmMzZ literal 0 HcmV?d00001 diff --git a/docs/schema_parametres.py b/docs/schema_parametres.py new file mode 100644 index 0000000..d78c619 --- /dev/null +++ b/docs/schema_parametres.py @@ -0,0 +1,334 @@ +#!/usr/bin/env python3 +# coding=utf-8 +""" +Genere le schema explicatif des parametres de l'extension. + + python docs/schema_parametres.py # les deux versions + python docs/schema_parametres.py fr # docs/parametres.svg + .png (README) + python docs/schema_parametres.py en # docs/parameters_en.svg + # + images/parameters_en.png (onglet + # « Help » de la boite de dialogue) + +Les formes sont calculees par hachures_core (memes fonctions que l'extension), +le schema reste donc fidele au resultat reel. L'export PNG passe par +inkscape.com, qui attend la fin de l'export (contrairement au raccourci +Chocolatey « inkscape »). +""" + +import math +import os +import subprocess +import sys + +HERE = os.path.dirname(os.path.abspath(__file__)) +ROOT = os.path.dirname(HERE) +sys.path.insert(0, ROOT) + +import hachures_core # noqa: E402,F401 + +W, H = 1400, 1280 # 4 panneaux de 700 x 640 + +INK = "#343a40" # element principal +GHOST = "#dde1e5" # elements secondaires / voisins +DIM = "#d9480f" # cotes +DIM2 = "#1971c2" # cotes secondaires +EDGE = "#212529" # contour des formes +FONT = "font-family:Arial,Helvetica,sans-serif" + +INKSCAPE = [r"C:\Program Files\Inkscape\bin\inkscape.com", "/usr/bin/inkscape", + "/Applications/Inkscape.app/Contents/MacOS/inkscape"] + +# Version par langue : textes, fichiers produits, largeur du PNG et agrandissement +# des textes (la version anglaise est affichee reduite dans la boite de dialogue : +# 900 px de large, textes x 1.25 pour rester lisibles). +VERSIONS = { + "fr": { + "svg": os.path.join(HERE, "parametres.svg"), + "png": os.path.join(HERE, "parametres.png"), + "png_width": 1400, + "font_scale": 1.0, + "text": { + "title1": "1 Taux de remplissage", + "note1": ["Part de la surface qui devient noire : 100 % = traits jointifs.", + "Le pas entre les traits en est déduit."], + "title2": "2 Largeur du trait et pas", + "width": "largeur", "spacing": "pas", + "formula": "taux = largeur / pas", + "note2": ["Réglez la largeur sur celle du faisceau laser ;", + "plus le taux monte, plus le pas se resserre."], + "title3": "3 Angle des hachures", + "angle": "angle", "ref": "horizontale", + "note3": ["En degrés, sens anti-horaire (comme dans Inkscape) :", + "0 = horizontal, 90 = vertical."], + "title4": "4 Trajet optimisé de la tête laser", + "cut": "trait (laser allumé)", "travel": "déplacement à vide", + "note4": ["La fin d'un trait est proche du début du suivant :", + "la tête fait un serpentin, sans retour en arrière."], + }, + }, + "en": { + "svg": os.path.join(HERE, "parameters_en.svg"), + "png": os.path.join(ROOT, "images", "parameters_en.png"), + "png_width": 900, + "font_scale": 1.25, + "text": { + "title1": "1 Coverage", + "note1": ["Share of the area that turns black: 100 % = touching lines.", + "The spacing between lines follows from it."], + "title2": "2 Line width and spacing", + "width": "width", "spacing": "spacing", + "formula": "coverage = width / spacing", + "note2": ["Set the width to your laser beam width;", + "the higher the coverage, the tighter the spacing."], + "title3": "3 Hatch angle", + "angle": "angle", "ref": "horizontal", + "note3": ["In degrees, counter-clockwise (as in Inkscape):", + "0 = horizontal, 90 = vertical."], + "title4": "4 Optimized laser head path", + "cut": "line (laser on)", "travel": "idle move", + "note4": ["Each line ends close to where the next one starts:", + "the head zigzags, never travelling back."], + }, + }, +} + +def _unit(angle): + """Vecteur unitaire, angle en degres, sens anti-horaire a l'ecran (y vers le bas).""" + a = math.radians(angle) + return math.cos(a), -math.sin(a) + + +out = [] +T = {} +FS = 1.0 + + +def fmt(v): + return "{:.2f}".format(v).rstrip("0").rstrip(".") + + +def pts(polyline): + return " ".join("{},{}".format(fmt(x), fmt(y)) for x, y in polyline) + + +def polyline(points, color, width, extra=""): + out.append(''.format(pts(points), color, fmt(width), extra)) + + +def motif(polylines, color, width): + for pl in polylines: + polyline(pl, color, width) + + +def text(x, y, s, size=17, color=INK, anchor="start", weight="normal", halo=True): + style = "{};font-size:{}px;font-weight:{};fill:{}".format( + FONT, fmt(size * FS), weight, color) + if halo: + style += ";paint-order:stroke;stroke:#ffffff;stroke-width:5px;stroke-linejoin:round" + out.append('{}'.format( + fmt(x), fmt(y), anchor, style, s)) + + +def note(x, y, lines): + """Legende de bas de panneau, derniere ligne sur la ligne de base `y`.""" + step = 22 * FS + for k, line in enumerate(lines): + text(x, y - (len(lines) - 1 - k) * step, line, size=16, halo=False) + + +def arrow_head(tip, direction, color, size=9): + ux, uy = direction + nx, ny = -uy, ux + base = (tip[0] - size * ux, tip[1] - size * uy) + out.append(''.format(pts([ + tip, (base[0] + 0.45 * size * nx, base[1] + 0.45 * size * ny), + (base[0] - 0.45 * size * nx, base[1] - 0.45 * size * ny)]), color)) + + +def dimension(p, q, offset, label, color=DIM, label_pos=0.5, label_shift=18, size=17): + """Cote entre p et q, decalee de `offset` perpendiculairement.""" + dx, dy = q[0] - p[0], q[1] - p[1] + length = math.hypot(dx, dy) + ux, uy = dx / length, dy / length + nx, ny = -uy, ux + a = (p[0] + offset * nx, p[1] + offset * ny) + b = (q[0] + offset * nx, q[1] + offset * ny) + sign = 1 if offset >= 0 else -1 + for base, end in ((p, a), (q, b)): + polyline([(base[0] + sign * 4 * nx, base[1] + sign * 4 * ny), + (end[0] + sign * 6 * nx, end[1] + sign * 6 * ny)], color, 1, + 'stroke-dasharray="3,3"') + polyline([a, b], color, 1.6) + arrow_head(a, (-ux, -uy), color) + arrow_head(b, (ux, uy), color) + lx = a[0] + label_pos * (b[0] - a[0]) + sign * label_shift * FS * nx + ly = a[1] + label_pos * (b[1] - a[1]) + sign * label_shift * FS * ny + 6 * FS + text(lx, ly, label, size=size, color=color, anchor="middle", weight="bold") + + +def arc(center, radius, a0, a1, color, label=None, label_radius=None, size=16): + """Arc de a0 a a1 degres (sens anti-horaire a l'ecran), fleche au bout.""" + steps = 40 + points = [] + for k in range(steps + 1): + ux, uy = _unit(a0 + (a1 - a0) * k / steps) + points.append((center[0] + radius * ux, center[1] + radius * uy)) + polyline(points[:-2], color, 1.6) + last, before = points[-1], points[-3] + d = math.hypot(last[0] - before[0], last[1] - before[1]) + arrow_head(last, ((last[0] - before[0]) / d, (last[1] - before[1]) / d), color, 8) + if label: + ux, uy = _unit((a0 + a1) / 2) + r = label_radius or radius + 24 + text(center[0] + r * ux, center[1] + r * uy + 6 * FS, label, size=size, + color=color, anchor="middle", weight="bold") + + +def circle_ring(cx, cy, r, n=180): + return [(cx + r * math.cos(2 * math.pi * k / n), cy + r * math.sin(2 * math.pi * k / n)) + for k in range(n)] + + +def panel_title(x, y, _number, title): + text(x, y, title, size=22, weight="bold", halo=False) + + + +# -------------------------------------------------------------------------- +# Panneaux : un par parametre (ou groupe de parametres), numerotes 1 a 4. +# Dessiner avec les vraies fonctions de hachures_core, puis coter avec +# dimension() / arc() et legender avec note(). +# -------------------------------------------------------------------------- + +PX = 3.0 # largeur de trait dessinee (px) pour les panneaux 1 et 3 + + +def hatched(rings, density, angle, color=INK, width=PX): + spacing = hachures_core.spacing_from_density(density, width) + motif(hachures_core.hatch(rings, spacing, angle), color, width) + + +def outline(ring, color=EDGE): + polyline(ring + [ring[0]], color, 1.5) + + +def square(x, y, size): + return [(x, y), (x + size, y), (x + size, y + size), (x, y + size)] + + +def panel_1(): + panel_title(30, 50, "", T["title1"]) + for column, density in enumerate((10, 30, 60)): + x = 40 + column * 220 + box = square(x, 100, 180) + hatched([box], density, 45) + outline(box) + disc = circle_ring(x + 90, 420, 85) + hatched([disc], density, 45) + outline(disc) + text(x + 90, 548, "{} %".format(density), size=22, color=DIM, anchor="middle", + weight="bold") + note(30, 610, T["note1"]) + + +def panel_2(): + panel_title(730, 50, "", T["title2"]) + xs = [800 + 80 * i for i in range(6)] + for x in xs: + out.append(''.format(x - 8, INK)) + out.append(''.format(xs[0] - 40, xs[-1] - xs[0] + 80, EDGE)) + dimension((xs[1] - 8, 360), (xs[1] + 8, 360), 30, T["width"], DIM, label_shift=22) + dimension((xs[2], 360), (xs[3], 360), 70, T["spacing"], DIM2, label_shift=22) + text(1050, 520, T["formula"], size=24, color=INK, anchor="middle", weight="bold", halo=False) + note(730, 610, T["note2"]) + + +def panel_3(): + panel_title(30, 690, "", T["title3"]) + box = square(70, 760, 340) + hatched([box], 30, 30) + outline(box) + c = (470, 1130) + ux, uy = _unit(30) + polyline([c, (c[0] + 170, c[1])], DIM2, 1.6, 'stroke-dasharray="6,5"') + polyline([c, (c[0] + 170 * ux, c[1] + 170 * uy)], DIM, 2.5) + arc(c, 110, 0, 30, DIM, T["angle"], 140) + text(c[0] + 170, c[1] + 24, T["ref"], size=16, color=DIM2, anchor="end", halo=False) + note(30, 1250, T["note3"]) + + +def panel_4(): + panel_title(730, 690, "", T["title4"]) + ring = circle_ring(1030, 950, 150) + spacing = 25.0 + lines = hachures_core.hatch([ring], spacing, 90) + polyline(ring + [ring[0]], GHOST, 1.5) + for (a0, a1), (b0, b1) in zip(lines, lines[1:]): + polyline([a1, b0], DIM, 1.8, 'stroke-dasharray="4,3"') + for first, last in lines: + polyline([first, last], INK, 3) + for number, (first, last) in enumerate(lines[:3], 1): + arrow_head(last, _norm(last, first), INK, 11) + text(first[0], first[1] + (-12 if first[1] < last[1] else 24), + str(number), size=18, color=INK, anchor="middle", weight="bold") + polyline([(1100, 1160), (1140, 1160)], INK, 3) + text(1150, 1166, T["cut"], size=16, color=INK, halo=False) + polyline([(1100, 1190), (1140, 1190)], DIM, 1.8, 'stroke-dasharray="4,3"') + text(1150, 1196, T["travel"], size=16, color=DIM, halo=False) + note(730, 1250, T["note4"]) + + +def _norm(p, q): + """Vecteur unitaire de q vers p.""" + d = math.hypot(p[0] - q[0], p[1] - q[1]) or 1.0 + return (p[0] - q[0]) / d, (p[1] - q[1]) / d + + +def export_png(svg_path, png_path, width): + exe = next((path for path in INKSCAPE if os.path.exists(path)), None) + if exe is None: + print("Inkscape introuvable : exporter {} a la main".format(svg_path)) + return + os.makedirs(os.path.dirname(png_path), exist_ok=True) + subprocess.run([exe, svg_path, "--export-type=png", + "--export-width={}".format(width), + "--export-filename={}".format(png_path)], + check=True, stderr=subprocess.DEVNULL) + print(png_path) + + +def build(language): + global FS + version = VERSIONS[language] + out.clear() + T.clear() + T.update(version["text"]) + FS = version["font_scale"] + + out.append(''.format(W, H)) + for x1, y1, x2, y2 in ((700, 20, 700, H - 20), (20, 640, W - 20, 640)): + out.append(''.format(x1, y1, x2, y2)) + panel_1() + panel_2() + panel_3() + panel_4() + svg = ('\n' + '\n{2}\n\n').format(W, H, "\n".join(out)) + with open(version["svg"], "w", encoding="utf-8", newline="\n") as handle: + handle.write(svg) + print(version["svg"]) + export_png(version["svg"], version["png"], version["png_width"]) + + +def main(argv): + languages = argv or sorted(VERSIONS) + for language in languages: + build(language) + + +if __name__ == "__main__": + main(sys.argv[1:]) diff --git a/hachures.inx b/hachures.inx new file mode 100644 index 0000000..1012813 --- /dev/null +++ b/hachures.inx @@ -0,0 +1,74 @@ + + + + Hatch Fill + fr.alexp.hachures + + + + 30.0 + 0.2 + + + + + + + + + 45.0 + false + + + + + + + + 255 + true + + + + + images/parameters_en.png + + + + + + + + all + + + + + + + diff --git a/hachures.py b/hachures.py new file mode 100644 index 0000000..66829cf --- /dev/null +++ b/hachures.py @@ -0,0 +1,184 @@ +#!/usr/bin/env python3 +# coding=utf-8 +""" +Extension Inkscape : remplit des formes avec des hachures pour la gravure laser. + +Le taux de remplissage (pourcentage de noir) fixe le pas entre les traits, et +les traits sont classes dans l'ordre ou la tete du laser les parcourt (fin d'un +trait proche du debut du suivant) pour limiter les deplacements a vide. + +La logique vit dans `hachures_core`, sans dependance a inkex. +""" + +import os +import sys + +import inkex +from inkex.localization import localize +from inkex.units import convert_unit + +# 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 hachures_core. +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) + +from hachures_core import ( # noqa: E402 + TooManyLines, flatten_cubic_subpaths, hatch, parse_color, polylines_to_d, + spacing_from_density) + + +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 « hachures » de la langue +# de l'interface (Inkscape transmet domaine et dossier par l'environnement), +# textes anglais d'origine sinon. +use_system_language() +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) + + +class HatchFill(inkex.EffectExtension): + """Remplit chaque forme selectionnee avec des hachures ordonnees pour le laser.""" + + def add_arguments(self, pars): + # Un argument par du .inx, memes noms et memes valeurs par defaut. + pars.add_argument("--tab", default="main") + pars.add_argument("--density", type=float, default=30.0) + pars.add_argument("--line_width", type=float, default=0.2) + pars.add_argument("--unit", default="mm") + pars.add_argument("--angle", type=float, default=45.0) + pars.add_argument("--cross", type=inkex.Boolean, default=False) + pars.add_argument("--anchor", default="shape") + pars.add_argument("--stroke_color", default="255") + pars.add_argument("--keep_original", type=inkex.Boolean, default=True) + + def effect(self): + opt = self.options + + shapes = [] + for elem in self.svg.selection.values(): + shapes.extend(self.iter_shapes(elem)) + if not shapes: + inkex.errormsg(_("Select at least one shape.")) + return + + if not 0 < opt.density <= 100: + inkex.errormsg(_("The coverage must be between 1 and 100 %.")) + return + width = length_to_uu(self.svg, opt.line_width, opt.unit) + if width <= 0: + inkex.errormsg(_("The line width must be strictly positive.")) + return + spacing = spacing_from_density(opt.density, width, opt.cross) + + color, opacity = parse_color(opt.stroke_color) + style = inkex.Style({ + "fill": "none", + "stroke": color, + "stroke-opacity": str(opacity), + "stroke-width": str(width), + }) + + for elem in shapes: + if not self.process(elem, spacing, width, style): + return + + @classmethod + def iter_shapes(cls, elem): + """Formes a remplir : les groupes sont parcourus, le reste doit avoir un contour.""" + if isinstance(elem, inkex.Group): + for child in elem: + for shape in cls.iter_shapes(child): + yield shape + elif isinstance(elem, inkex.ShapeElement) and hasattr(elem, "path"): + yield elem + + def process(self, elem, spacing, width, style): + """Hachure une forme : calcul dans hachures_core, ecriture dans le SVG. + + Renvoie False si le calcul a ete refuse (message deja affiche). + """ + # Contour en coordonnees absolues du document, courbes aplaties assez + # finement pour que l'ecart reste sous le quart de la largeur du trait. + superpath = elem.path.transform(elem.composed_transform()).to_superpath() + rings = flatten_cubic_subpaths(superpath, width / 4.0) + if not rings: + return True + + try: + polylines = hatch(rings, spacing, self.options.angle, self.options.cross, + self.options.anchor) + except TooManyLines as error: + inkex.errormsg(_("Too many hatch lines (%d). Increase the line width, " + "lower the coverage, or select a smaller shape.") % error.args[0]) + return False + + parent = elem.getparent() + group = inkex.Group() + group.label = _("Hatching") + if parent is not None: + # Resultat calcule en coordonnees absolues du document : on + # neutralise la transformation heritee du parent d'accueil. + parent_transform = parent.composed_transform() + if parent_transform != inkex.Transform(): + group.transform = -parent_transform + parent.insert(parent.index(elem) + 1, group) + else: + self.svg.add(group) + + # Un seul chemin : les sous-chemins restent dans l'ordre laser. + node = inkex.PathElement() + node.set("d", polylines_to_d(polylines)) + node.style = style + node.label = _("Laser path") + group.add(node) + + if not self.options.keep_original: + elem.delete() + return True + + +if __name__ == "__main__": + HatchFill().run() diff --git a/hachures_core.py b/hachures_core.py new file mode 100644 index 0000000..313d4b9 --- /dev/null +++ b/hachures_core.py @@ -0,0 +1,325 @@ +# coding=utf-8 +""" +Noyau de calcul de l'extension « Hatch Fill », sans dependance a inkex. + +Remplit des contours avec des hachures paralleles et classe les traits dans +l'ordre ou une tete de laser les parcourt : la fin d'un trait est toujours +proche du debut du suivant (trajet en serpentin, aller-retour d'un trait au +suivant), ce qui limite les deplacements a vide. + +Testable avec pytest seul et reutilisable hors Inkscape (scripts, schema +des parametres). + +Conventions : +- un contour (`rings`) est une liste d'anneaux, chaque anneau etant une liste + de points (x, y) fermee implicitement ; les trous suivent la regle pair-impair ; +- une polyligne est une liste de points (x, y) ; +- l'axe y est oriente vers le bas (repere SVG) ; les angles sont en degres, + positifs dans le sens anti-horaire a l'ecran (comme dans Inkscape) ; +- le « repere des hachures » est le repere ou les traits sont horizontaux : + x suit le trait, y est perpendiculaire (ligne k a y = (k + phase) * pas). +""" + +import math +from bisect import bisect_left + +# Garde-fou : au-dela, le SVG produit devient inutilisable (et le calcul long). +MAX_LINES = 50000 + + +class TooManyLines(ValueError): + """Le motif demande plus de traits que MAX_LINES.""" + + +def parse_color(value, default=("#b3b3b3", 1.0)): + """Couleur Inkscape (entier RGBA decimal ou 0x..., ou #rrggbb[aa]). + + Renvoie (couleur CSS #rrggbb, opacite entre 0 et 1). Le parametre + « color » d'Inkscape arrive sous forme d'entier RGBA ; on le decode + nous-memes pour ne pas dependre de l'API couleur d'inkex, qui a change + entre les versions 1.x. + """ + text = str(value).strip() + try: + if text.startswith("#"): + digits = text[1:] + if len(digits) == 3: + digits = "".join(c * 2 for c in digits) + if len(digits) == 6: + digits += "ff" + if len(digits) != 8: + return default + number = int(digits, 16) + else: + number = int(text, 0) + except ValueError: + return default + number &= 0xFFFFFFFF + red, green, blue = (number >> 24) & 255, (number >> 16) & 255, (number >> 8) & 255 + alpha = (number & 255) / 255.0 + return "#{:02x}{:02x}{:02x}".format(red, green, blue), round(alpha, 4) + + +def polylines_to_d(polylines, precision=4): + """Donnees `d` d'un chemin SVG : une polyligne par sous-chemin.""" + fmt = "{:.%df},{:.%df}" % (precision, precision) + parts = [] + for polyline in polylines: + if len(polyline) < 2: + continue + parts.append("M " + fmt.format(*polyline[0])) + parts.extend("L " + fmt.format(*point) for point in polyline[1:]) + return " ".join(parts) + + +# -------------------------------------------------------------------------- +# Courbes -> anneaux +# -------------------------------------------------------------------------- + +def flatten_cubic_subpaths(subpaths, tolerance): + """Aplatit des sous-chemins de Beziers cubiques en anneaux de points. + + `subpaths` suit la forme du « superpath » d'inkex : un sous-chemin est une + liste de noeuds [controle_entrant, point, controle_sortant]. Les segments + droits ont leurs controles confondus avec les points. `tolerance` est + l'ecart maximal admis entre la courbe et la polyligne (meme unite que les + points). Les sous-chemins de moins de trois points sont ignores. + """ + rings = [] + for nodes in subpaths: + ring = [] + for i in range(len(nodes) - 1): + p0, p1 = nodes[i][1], nodes[i][2] + p2, p3 = nodes[i + 1][0], nodes[i + 1][1] + ring.append(tuple(p0)) + # Ecart d'une Bezier a sa corde <= 3/4 * (derivee seconde max) / n^2 + second = max(math.hypot(p0[0] - 2 * p1[0] + p2[0], p0[1] - 2 * p1[1] + p2[1]), + math.hypot(p1[0] - 2 * p2[0] + p3[0], p1[1] - 2 * p2[1] + p3[1])) + steps = min(500, max(1, int(math.ceil(math.sqrt(0.75 * second / tolerance))))) + # Controles sur la corde : segment droit, inutile de le decouper. + chord = math.hypot(p3[0] - p0[0], p3[1] - p0[1]) + if chord > 0 and max( + abs((p3[0] - p0[0]) * (q[1] - p0[1]) - (p3[1] - p0[1]) * (q[0] - p0[0])) + for q in (p1, p2)) / chord <= tolerance: + steps = 1 + for s in range(1, steps): + t = s / steps + mt = 1 - t + ring.append(( + mt ** 3 * p0[0] + 3 * mt * mt * t * p1[0] + 3 * mt * t * t * p2[0] + t ** 3 * p3[0], + mt ** 3 * p0[1] + 3 * mt * mt * t * p1[1] + 3 * mt * t * t * p2[1] + t ** 3 * p3[1])) + if nodes: + ring.append(tuple(nodes[-1][1])) + if len(ring) > 1 and ring[0] == ring[-1]: + ring.pop() + if len(ring) >= 3: + rings.append(ring) + return rings + + +# -------------------------------------------------------------------------- +# Hachures +# -------------------------------------------------------------------------- + +def spacing_from_density(density, line_width, cross=False): + """Pas entre deux traits pour que `density` % de la zone soit noircie. + + Un trait de largeur w tous les p couvre w / p de la surface : 100 % + correspond donc a des traits jointifs (p = w). En croise, il y a deux fois + plus de traits : le pas double pour garder la meme couverture. + """ + if not 0 < density <= 100: + raise ValueError("density must be in ]0, 100]") + if line_width <= 0: + raise ValueError("line_width must be positive") + return line_width * 100.0 / density * (2 if cross else 1) + + +def _frame_axes(angle): + """Vecteurs unitaires (u le long des traits, v perpendiculaire).""" + a = math.radians(angle) + return (math.cos(a), -math.sin(a)), (math.sin(a), math.cos(a)) + + +def to_frame(point, angle): + """Point du document -> repere des hachures.""" + u, v = _frame_axes(angle) + return point[0] * u[0] + point[1] * u[1], point[0] * v[0] + point[1] * v[1] + + +def from_frame(point, angle): + """Point du repere des hachures -> document.""" + u, v = _frame_axes(angle) + return point[0] * u[0] + point[1] * v[0], point[0] * u[1] + point[1] * v[1] + + +def scan_lines(rings, spacing, phase=0.0): + """Intersections des traits horizontaux avec le contour (pair-impair). + + La ligne k est a y = (k + phase) * spacing. Renvoie {k: [(x0, x1), ...]} + avec x0 < x1, les segments de chaque ligne etant tries. Une arete couvre + [ymin, ymax[ : un sommet exactement sur un trait n'est compte qu'une fois. + """ + crossings = {} + for ring in rings: + count = len(ring) + for i in range(count): + (x0, y0), (x1, y1) = ring[i], ring[(i + 1) % count] + if y0 == y1: + continue + if y0 > y1: + x0, y0, x1, y1 = x1, y1, x0, y0 + first = int(math.ceil(y0 / spacing - phase)) + last = int(math.ceil(y1 / spacing - phase)) - 1 + slope = (x1 - x0) / (y1 - y0) + for k in range(first, last + 1): + crossings.setdefault(k, []).append(x0 + ((k + phase) * spacing - y0) * slope) + lines = {} + for k, xs in crossings.items(): + xs.sort() + segments = [(xs[j], xs[j + 1]) for j in range(0, len(xs) - 1, 2) + if xs[j + 1] - xs[j] > 1e-9] + if segments: + lines[k] = segments + return lines + + +def order_lines(lines, spacing, phase=0.0, start=None): + """Ordonne et oriente les segments pour minimiser les deplacements a vide. + + Algorithme glouton du plus proche voisin sur les extremites : apres un + trait, on part de l'extremite non visitee la plus proche de l'endroit ou + la tete s'est arretee. Les extremites sont rangees par ligne et triees, + donc la recherche ne regarde que les lignes voisines (de plus en plus + loin) et s'arrete des que la ligne suivante ne peut plus faire mieux. + Sur une forme convexe, cela donne le serpentin attendu : on monte sur un + trait, on redescend sur le suivant, sans jamais revenir au point de depart. + + `start` est la position initiale de la tete (repere des hachures) ; sans + elle, on commence par la premiere extremite de la premiere ligne. + Renvoie [(k, x_debut, x_fin), ...]. + """ + segments = [] + ends = {} + for k in sorted(lines): + for x0, x1 in lines[k]: + index = len(segments) + segments.append((k, x0, x1)) + ends.setdefault(k, []).extend([(x0, index), (x1, index)]) + if not segments: + return [] + for entries in ends.values(): + entries.sort() + k_min, k_max = min(ends), max(ends) + + def nearest(x, y): + k_here = int(round(y / spacing - phase)) + span = max(abs(k_here - k_min), abs(k_here - k_max)) + best = None + for d in range(span + 1): + if best is not None and (d - 1) * spacing > best[0]: + break + for k in {k_here - d, k_here + d}: + entries = ends.get(k) + if not entries: + continue + dy = (k + phase) * spacing - y + at = bisect_left(entries, (x, -1)) + for j in (at - 1, at): + if 0 <= j < len(entries): + dist = math.hypot(entries[j][0] - x, dy) + if best is None or dist < best[0]: + best = (dist, k, entries[j][0], entries[j][1]) + return best + + if start is None: + k0 = k_min + x0 = ends[k0][0][0] + found = (0.0, k0, x0, ends[k0][0][1]) + else: + found = nearest(*start) + + ordered = [] + while found is not None: + _dist, k, x, index = found + _k, a, b = segments[index] + for end in (a, b): + entries = ends[k] + del entries[bisect_left(entries, (end, index))] + if not ends[k]: + del ends[k] + far = b if x == a else a + ordered.append((k, x, far)) + if not ends: + break + k_min, k_max = min(ends), max(ends) + found = nearest(far, (k + phase) * spacing) + return ordered + + +def _phase(ymin, ymax, spacing, anchor): + """Decalage des lignes (en fraction de pas). + + « shape » : un trait au centre de chaque tranche de la forme (marges + egales en haut et en bas) ; « origin » : les lignes sont alignees sur l'origine du + document, donc continues d'une forme a l'autre. + """ + if anchor == "origin": + return 0.0 + # Un trait au centre de chaque tranche d'un pas de haut : la couverture + # reste celle demandee et les marges haut / bas sont egales. + count = max(1, int(round((ymax - ymin) / spacing))) + first = ymin + ((ymax - ymin) - (count - 1) * spacing) / 2.0 + return (first / spacing) % 1.0 + + +def hatch_pass(rings, spacing, angle, anchor="shape", start=None): + """Un jeu de hachures parallele a `angle`, deja classe dans l'ordre laser. + + Renvoie une liste de polylignes [(p_debut, p_fin), ...]. Leve TooManyLines + si le pas est trop petit pour la forme. + """ + frame = [[to_frame(p, angle) for p in ring] for ring in rings if len(ring) >= 3] + if not frame: + return [] + ys = [p[1] for ring in frame for p in ring] + ymin, ymax = min(ys), max(ys) + if (ymax - ymin) / spacing > MAX_LINES: + raise TooManyLines(int((ymax - ymin) / spacing)) + phase = _phase(ymin, ymax, spacing, anchor) + lines = scan_lines(frame, spacing, phase) + if sum(len(segments) for segments in lines.values()) > MAX_LINES: + raise TooManyLines(sum(len(segments) for segments in lines.values())) + ordered = order_lines(lines, spacing, phase, + None if start is None else to_frame(start, angle)) + result = [] + for k, xa, xb in ordered: + y = (k + phase) * spacing + result.append([from_frame((xa, y), angle), from_frame((xb, y), angle)]) + return result + + +def hatch(rings, spacing, angle=45.0, cross=False, anchor="shape"): + """Hachures d'un contour, classees dans l'ordre de parcours du laser. + + `cross` ajoute un second jeu perpendiculaire, parcouru apres le premier en + partant de la ou la tete s'est arretee. `anchor` : « shape » ou « origin » + (voir _phase). + """ + polylines = hatch_pass(rings, spacing, angle, anchor) + if cross: + start = polylines[-1][-1] if polylines else None + polylines += hatch_pass(rings, spacing, angle + 90.0, anchor, start) + return polylines + + +def travel_length(polylines): + """Longueur des deplacements a vide : de la fin d'un trait au debut du suivant.""" + return sum(math.hypot(b[0][0] - a[-1][0], b[0][1] - a[-1][1]) + for a, b in zip(polylines, polylines[1:])) + + +def cutting_length(polylines): + """Longueur totale des traits (laser allume).""" + return sum(math.hypot(q[0] - p[0], q[1] - p[1]) + for polyline in polylines for p, q in zip(polyline, polyline[1:])) diff --git a/i18n.py b/i18n.py new file mode 100644 index 0000000..a800d7f --- /dev/null +++ b/i18n.py @@ -0,0 +1,304 @@ +#!/usr/bin/env python3 +# coding=utf-8 +""" +Chaine de traduction de l'extension, sans dependance a gettext. + + python i18n.py # extract + update + compile + python i18n.py extract # po/.pot depuis le .inx et les .py + python i18n.py update # reporte le modele dans po/.po + python i18n.py compile # po/.po -> locale//LC_MESSAGES/*.mo + +Le domaine est lu dans l'attribut translationdomain du .inx ; les sources sont +le .inx et tous les .py du dossier (hors i18n.py et tests). + +Les textes source (.inx et appels _() des .py) sont en anglais : c'est ce +qu'Inkscape affiche pour une langue sans catalogue. Le catalogue anglais est +rempli automatiquement avec les textes source ; seul fr.po se traduit a la main. + +Les chaines retenues dans le .inx suivent les regles d'Inkscape (inx.its) : +, attributs gui-text et gui-description, contenu de

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 =Lw7bcLj2VSvB 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 CR;CaD literal 0 HcmV?d00001 diff --git a/locale/en/LC_MESSAGES/hachures.mo b/locale/en/LC_MESSAGES/hachures.mo new file mode 100644 index 0000000000000000000000000000000000000000..0bca6d6f2a75638b454da45c332c98b332e6b8da GIT binary patch literal 3169 zcmeHJzmFS56kZ^Z$RH7cLZpb|CDKK3L!`fQ1R;VjwTzMVJkeeb9I=X+OPWcb{` z_d|St5n=6PUdyuUkY~UTfL{UM2fhH_2L1rt0{#l@0bc>H0k6KEWmkaLfj5CSfO0+r zz6;y|z70I+@Dz9p@)y99H?r(G@J-0S;b#E+y~9_)Ddf9vwdY?0e}w!EPUT&u@Xk<0Vjd{s9!8e*uN(-`)AYK;hYglJLCM;a#Bcyblzf$3Wrv9h8LU z_Z_|j3eSIla{l={_<3MU!_+Uh^vq!}&K|Oj?71LkiB(=vs8r3_LwC+zl~CQFsZse8 zQS~l_VWlFp`hjz23#wHJq#}K^_47}I>=TzaGZ-Z2b*U}&jkX*Jno--vHBimPNb4jF zvV&x7UmMdtYFlOpZ0hV&=9*%~oh4;DUPmghhu2tTN3c!G=+cVIaVzJ}INv?bbrGv^ z_J|GVQAiqA0o-sc1vy$C$s6Zs<~&nwTtGIGLZE)>T~mWLPR`(OuqmW0`Nk%8{4}x+ z+Sw89T_lfmfU+?#GuN>KTdyD)N~uGL6RMm+Uiy5_cIb)%_6!dwM71EE)p0TE^)4y^ zYmx{s0tt7P1UxD{ASSj&pr&q%G;TF(mBR~7InEhm+akbB!Cs$()tPrQ(ntvkn4ZPH zXn`+Mwn@R!_SP0{PzimwcTHZ2#nzHs+m=&kvsqApztlh+M)ZhdBC#@u>*-ChEdeZC zuKk|O|+tcr2lqRDm&JXK2^%qv_;+7>lwYaEr2Aq68= z(F0?aseseD*AZO+6Y!6U zB>IrRO5s8pIB8hwi@Q6k4!%Qf`XyR(Frg>X?oyE;&4XYtj8ALlF*c?2!rJ7i0tJWR z|Igp5mS@_BI7#V{;z%e`e%DN;DN$Wvk}pSG+OF#{#MqU?b7)MIYc<9nw-BD9G!CSu zxSDLVbH1ET3{+eg&Q8~@&l=3!lrOq*JGEVEuTj!m>y)K#h+gLrtyR0ABYF^;&e2TS zMLR@Y`uiKjU_^&D$2f$R(aPE;88^qWSdVp6<~(!@fx=AY5-()sjk3p9V~w16Cq)?^ z7Q@fj%WRL~Gp`zCq<5rj*fvpw3v%wn0^I6Pg{P>JZod&r))6Us5Y zf#dGu)BWMjO3y1B&e#w4Z0-t_X-qp)9eXFH!O9r!J3k9!vUL)}?)?dhAt$?iOSgAv ddobx;ZuHBIe!0;vH~RXPOMfITH~Mm;{|EKs?biSR literal 0 HcmV?d00001 diff --git a/locale/fr/LC_MESSAGES/hachures.mo b/locale/fr/LC_MESSAGES/hachures.mo new file mode 100644 index 0000000000000000000000000000000000000000..51e310b9038cab320847ebaa422430648d2c67c3 GIT binary patch literal 3488 zcmZve!EYo-6~-F~1eqX`pam3hctlz}gFF)(A+e0vNUP1Rc7-EWS%(t`%H8Fe+VpgF zs;cevB5^?CfH-i9kT~VQVI3sI0U;r7JKW&J8SzgbZaL)ls@vm9VoT$1x~uBFSMPoA zd-LCypL?(1?;4+P^7)58Z2Z-qDT)_)UV>i(e*u0Kd=LB{|9QEFYr&}yaww1UjbhLzYl8MZ-6g@ zKONA6YWJ7m|B3StpvL)o4()^QgWm)H1O5tp>C3&J-+{%gW?owvRdyb%jpJEy+cwDt zTZwPPnsOm=VOm?<_9r%&Ia{yGQEke1bZhW2P8KGyYZPtin@U;}qnIQ=*nRfraq)&P zyCnw22RC<(jB3}|DC|tG>3ql5QjPRZ;<&h%joo#1-G6n>ytrrUw)l~?t)zt=ESY+U z>%c@C@R}CI0k*}|Zr-TNS^r%6+K1u$sjJdrRy?$|Et3XWTN8qDH$s>f^JUbEo|h+X{>04JG}QOG(&Cz! zbc5zMm=jy$gA79ai}0gavY8uC!6jIL3H(!$96nD(WjK%_vIa>yH+GBdAJPC__+0fwwWszHagE#6dc2!?!U`g9=j0JeoluLN3Wvg z_uY|_lIm(C0B*YuS=u;%j8jHTzQ1z0szdZy(;B+_>BqOcRf7 znA~YfUs0x++&FS+>p|Ti8I!v{EaOa?Hb2Ij-`%Gex^i>W$m_B<-rw33^woJBORwl* zbuN)E!|l5r(uE<)V!Fp@fCMC_b}W%V8Z+puO6<>bwp6=#y%0# zF$vHES;r2qKej^`e5bXD4pXST<`=MG*(XiaJ@*P2Aq8`nNTGX~3lq0g7-Ilg!~F^AjCA$^ zO>zYb)E6nnbW&e@g*?Z!y}a8w-kdl!qAam8!>5vg$wMuN0CL$8t!i~%YRY#64K3AB z{fTr>hsjcDvN63b)+2JB+%bZkXUoP);%2y0B_n}Td24mfMakW#t@oryy>re^yheCz zTr4eB%~Z)rSUb(NDOrH*C|y68B&|M3nc4XSHy+xkr;rK_h1PM|=EyW-+l(W62K8V4 z4P{+IMY2a2v2!P;Nr({xJKH55vh14@f}usBC6S0L{egYRuG|>du0g{vtx3?|3NABw zx%z-nRIdI4pQduC#qVj5tB|im8JJ2mAo?ODZNg9@75OoH?P@M%xdgw_wsj08dG<#+ z+~_HJ_V+Oa9HK61wK+rF57_zRT>>ez{Uc2C}vA+^wDxpc1+# z7mUpF3L(p7Q5j?HD)wfQ>taq!&vF9R`K3RQu%sglLl@WYJCjDAz_LjCdd~McwN{vm zX?Ae6*Gj8RL5Z4rw}GDSJ7P~r<}lw5uAu0~!G6y5y0tOtf^RjXOt&1|kX(L@>%6 1);\n" + +#: hachures.inx +msgid "Hatch Fill" +msgstr "Remplissage par hachures" + +#: hachures.inx hachures.py +msgid "Hatching" +msgstr "Hachures" + +#: hachures.inx +msgid "Coverage (% black):" +msgstr "Taux de remplissage (% de noir) :" + +#: hachures.inx +msgid "Line width:" +msgstr "Largeur du trait :" + +#: hachures.inx +msgid "Unit:" +msgstr "Unité :" + +#: hachures.inx +msgid "Angle (degrees):" +msgstr "Angle (degrés) :" + +#: hachures.inx +msgid "Cross-hatch (second pass at 90°)" +msgstr "Hachures croisées (seconde passe à 90°)" + +#: hachures.inx +msgid "Line alignment:" +msgstr "Alignement des traits :" + +#: hachures.inx +msgid "Centered on each shape" +msgstr "Centré sur chaque forme" + +#: hachures.inx +msgid "Document origin (lines continuous across shapes)" +msgstr "Origine du document (traits continus d'une forme à l'autre)" + +#: hachures.inx +msgid "Style" +msgstr "Style" + +#: hachures.inx +msgid "Line color:" +msgstr "Couleur du trait :" + +#: hachures.inx +msgid "Keep the original shape" +msgstr "Conserver la forme d'origine" + +#: hachures.inx +msgid "Help" +msgstr "Aide" + +#: hachures.inx +msgid "" +"Select one or more closed shapes (groups are fine), then run the extension. Each shape is filled with parallel hatching; holes (even-odd rule) stay empty.\n" +"\n" +"Coverage is the share of the area that ends up black: the spacing between lines is derived from it and from the line width, so 100 % gives touching lines and 10 % widely spaced ones. Set the line width to the width of your laser beam.\n" +"\n" +"The lines are ordered for the laser head: each line ends close to where the next one starts, so the head zigzags across the shape instead of travelling back to the same side. All lines are written in that order into a single path (the \"Laser path\" object); keep it as is when exporting.\n" +"\n" +"Cross-hatch adds a second pass at 90° from the first; the spacing is doubled so the coverage stays the same.\n" +"\n" +"The result is placed in a group above the original shape." +msgstr "" +"Sélectionnez une ou plusieurs formes fermées (les groupes sont acceptés), puis lancez l'extension. Chaque forme est remplie de hachures parallèles ; les trous (règle pair-impair) restent vides.\n" +"\n" +"Le taux de remplissage est la part de la surface qui devient noire : le pas entre les traits en découle, avec la largeur du trait. 100 % donne des traits jointifs, 10 % des traits très espacés. Réglez la largeur du trait sur celle de votre faisceau laser.\n" +"\n" +"Les traits sont classés pour la tête du laser : chaque trait se termine près de l'endroit où commence le suivant, la tête fait donc un serpentin à travers la forme au lieu de revenir du même côté. Tous les traits sont écrits dans cet ordre dans un seul chemin (l'objet « Trajet laser ») ; ne le réordonnez pas à l'export.\n" +"\n" +"Les hachures croisées ajoutent une seconde passe à 90° de la première ; le pas est doublé pour que le taux de remplissage reste le même.\n" +"\n" +"Le résultat est placé dans un groupe au-dessus de la forme d'origine." + +#: hachures.py +msgid "Select at least one shape." +msgstr "Sélectionnez au moins une forme." + +#: hachures.py +msgid "The coverage must be between 1 and 100 %." +msgstr "Le taux de remplissage doit être compris entre 1 et 100 %." + +#: hachures.py +msgid "The line width must be strictly positive." +msgstr "La largeur du trait doit être strictement positive." + +#: hachures.py +msgid "Too many hatch lines (%d). Increase the line width, lower the coverage, or select a smaller shape." +msgstr "Trop de traits de hachure (%d). Augmentez la largeur du trait, baissez le taux de remplissage ou sélectionnez une forme plus petite." + +#: hachures.py +msgid "Laser path" +msgstr "Trajet laser" diff --git a/po/hachures.pot b/po/hachures.pot new file mode 100644 index 0000000..0ad76c1 --- /dev/null +++ b/po/hachures.pot @@ -0,0 +1,97 @@ +# Modele de traduction de l'extension Inkscape « Hatch Fill ». +# Genere par i18n.py ; ne modifier que les msgstr. +msgid "" +msgstr "" +"Project-Id-Version: hachures\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: hachures.inx +msgid "Hatch Fill" +msgstr "" + +#: hachures.inx hachures.py +msgid "Hatching" +msgstr "" + +#: hachures.inx +msgid "Coverage (% black):" +msgstr "" + +#: hachures.inx +msgid "Line width:" +msgstr "" + +#: hachures.inx +msgid "Unit:" +msgstr "" + +#: hachures.inx +msgid "Angle (degrees):" +msgstr "" + +#: hachures.inx +msgid "Cross-hatch (second pass at 90°)" +msgstr "" + +#: hachures.inx +msgid "Line alignment:" +msgstr "" + +#: hachures.inx +msgid "Centered on each shape" +msgstr "" + +#: hachures.inx +msgid "Document origin (lines continuous across shapes)" +msgstr "" + +#: hachures.inx +msgid "Style" +msgstr "" + +#: hachures.inx +msgid "Line color:" +msgstr "" + +#: hachures.inx +msgid "Keep the original shape" +msgstr "" + +#: hachures.inx +msgid "Help" +msgstr "" + +#: hachures.inx +msgid "" +"Select one or more closed shapes (groups are fine), then run the extension. Each shape is filled with parallel hatching; holes (even-odd rule) stay empty.\n" +"\n" +"Coverage is the share of the area that ends up black: the spacing between lines is derived from it and from the line width, so 100 % gives touching lines and 10 % widely spaced ones. Set the line width to the width of your laser beam.\n" +"\n" +"The lines are ordered for the laser head: each line ends close to where the next one starts, so the head zigzags across the shape instead of travelling back to the same side. All lines are written in that order into a single path (the \"Laser path\" object); keep it as is when exporting.\n" +"\n" +"Cross-hatch adds a second pass at 90° from the first; the spacing is doubled so the coverage stays the same.\n" +"\n" +"The result is placed in a group above the original shape." +msgstr "" + +#: hachures.py +msgid "Select at least one shape." +msgstr "" + +#: hachures.py +msgid "The coverage must be between 1 and 100 %." +msgstr "" + +#: hachures.py +msgid "The line width must be strictly positive." +msgstr "" + +#: hachures.py +msgid "Too many hatch lines (%d). Increase the line width, lower the coverage, or select a smaller shape." +msgstr "" + +#: hachures.py +msgid "Laser path" +msgstr "" diff --git a/test_hachures.py b/test_hachures.py new file mode 100644 index 0000000..dd53388 --- /dev/null +++ b/test_hachures.py @@ -0,0 +1,291 @@ +# coding=utf-8 +"""Tests de l'extension « Hatch Fill » (pytest).""" + +import math +import os +import re +import xml.etree.ElementTree as ET + +import pytest + +import hachures_core as core +from hachures_core import parse_color, polylines_to_d + +HERE = os.path.dirname(os.path.abspath(__file__)) +SHAPES = os.path.join(HERE, "tests", "data", "shapes.svg") +SCALED = os.path.join(HERE, "tests", "data", "scaled.svg") + + +# -------------------------------------------------------------------------- +# Noyau (sans inkex) +# -------------------------------------------------------------------------- + +def test_parse_color_inkscape_integer(): + assert parse_color("3014898687") == ("#b3b3b3", 1.0) + assert parse_color(str(0xFF000080)) == ("#ff0000", round(0x80 / 255, 4)) + + +def test_parse_color_hex_and_invalid(): + assert parse_color("#123456") == ("#123456", 1.0) + assert parse_color("#abc") == ("#aabbcc", 1.0) + assert parse_color("pas une couleur") == ("#b3b3b3", 1.0) + + +def test_polylines_to_d(): + d = polylines_to_d([[(0, 0), (1, 2)], [(3, 4), (5, 6)]], precision=1) + assert d == "M 0.0,0.0 L 1.0,2.0 M 3.0,4.0 L 5.0,6.0" + + +def square(x0, y0, x1, y1): + return [(x0, y0), (x1, y0), (x1, y1), (x0, y1)] + + +def test_spacing_from_density(): + assert core.spacing_from_density(100, 0.2) == pytest.approx(0.2) + assert core.spacing_from_density(25, 0.2) == pytest.approx(0.8) + assert core.spacing_from_density(25, 0.2, cross=True) == pytest.approx(1.6) + for density, width in ((0, 0.2), (101, 0.2), (50, 0)): + with pytest.raises(ValueError): + core.spacing_from_density(density, width) + + +@pytest.mark.parametrize("density", [10, 25, 50, 80]) +@pytest.mark.parametrize("angle", [0, 30, 45, 90, -60]) +def test_coverage_matches_density(density, angle): + """Longueur x largeur / surface de la forme = taux demande.""" + width = 0.2 + spacing = core.spacing_from_density(density, width) + lines = core.hatch([square(0, 0, 60, 40)], spacing, angle) + assert core.cutting_length(lines) * width / (60 * 40) == pytest.approx(density / 100.0, rel=0.06) + + +def test_lines_stay_inside_shape(): + for a, b in core.hatch([square(10, 10, 50, 30)], 1.0, 33): + for x, y in (a, b): + assert 10 - 1e-6 <= x <= 50 + 1e-6 and 10 - 1e-6 <= y <= 30 + 1e-6 + + +def test_hole_is_left_empty(): + rings = [square(0, 0, 40, 40), square(10, 10, 30, 30)] + lines = core.hatch(rings, 1.0, 0) + area = 40 * 40 - 20 * 20 + assert core.cutting_length(lines) * 1.0 / area == pytest.approx(1.0, rel=0.03) + + +def test_vertical_hatching_zigzags(): + """Traits verticaux : on monte sur le premier, on redescend sur le suivant.""" + lines = core.hatch([square(0, 0, 10, 10)], 2.0, 90) + assert len(lines) == 5 + for a, b in zip(lines, lines[1:]): + assert b[0][1] == pytest.approx(a[1][1]) # repart d'ou la tete est arrivee + assert abs(b[0][0] - a[1][0]) == pytest.approx(2.0) # un pas plus loin + assert (lines[0][1][1] - lines[0][0][1]) * (lines[1][1][1] - lines[1][0][1]) < 0 + + +def test_serpentine_beats_naive_order(): + """Le trajet optimise est tres inferieur a un balayage toujours dans le meme sens.""" + ordered = core.hatch([square(0, 0, 100, 60)], 1.0, 0) + naive = [[(0, 0.5 + k), (100, 0.5 + k)] for k in range(60)] + assert core.travel_length(ordered) < core.travel_length(naive) / 20 + assert core.travel_length(ordered) < 60 * 1.01 # un pas entre deux traits + + +def test_all_segments_visited_exactly_once(): + rings = [square(0, 0, 50, 50), square(15, 15, 35, 35)] + lines = core.scan_lines(rings, 1.0, 0.5) + ordered = core.order_lines(lines, 1.0, 0.5) + assert len(ordered) == sum(len(v) for v in lines.values()) + assert {(k, min(a, b), max(a, b)) for k, a, b in ordered} == \ + {(k, a, b) for k, v in lines.items() for a, b in v} + + +def test_concave_shape_short_travel(): + """Forme en U : les deux branches sont remplies, sans grand saut.""" + u_shape = [(0, 0), (10, 0), (10, 40), (20, 40), (20, 0), (30, 0), (30, 50), (0, 50)] + lines = core.hatch([u_shape], 1.0, 0) + area = 30 * 50 - 10 * 40 + assert core.cutting_length(lines) / area == pytest.approx(1.0, rel=0.03) + assert core.travel_length(lines) < core.cutting_length(lines) * 0.2 + + +def test_cross_hatch_has_both_directions_and_same_coverage(): + spacing = core.spacing_from_density(40, 0.25, cross=True) + lines = core.hatch([square(0, 0, 60, 60)], spacing, 0, cross=True) + horizontal = [ln for ln in lines if abs(ln[0][1] - ln[1][1]) < 1e-6] + vertical = [ln for ln in lines if abs(ln[0][0] - ln[1][0]) < 1e-6] + assert horizontal and vertical and len(horizontal) + len(vertical) == len(lines) + assert core.cutting_length(lines) * 0.25 / 3600 == pytest.approx(0.40, rel=0.08) + # la seconde passe demarre pres de la ou la premiere s'est arretee + assert math.hypot(vertical[0][0][0] - horizontal[-1][1][0], + vertical[0][0][1] - horizontal[-1][1][1]) < 2 * spacing + + +def test_anchor_origin_aligns_lines_between_shapes(): + for rings in ([square(3, 3, 40, 20)], [square(50, 7, 90, 31)]): + for line in core.hatch(rings, 2.0, 0, anchor="origin"): + assert line[0][1] / 2.0 == pytest.approx(round(line[0][1] / 2.0)) + + +def test_anchor_shape_centers_pattern(): + ys = sorted(ln[0][1] for ln in core.hatch([square(0, 0, 10, 10.6)], 2.0, 0)) + assert ys[0] == pytest.approx(10.6 - ys[-1]) + + +def test_empty_and_degenerate_input(): + assert core.hatch([], 1.0) == [] + assert core.hatch([[(0, 0), (1, 1)]], 1.0) == [] + + +def test_too_many_lines(): + with pytest.raises(core.TooManyLines): + core.hatch([square(0, 0, 100, 100)], 0.001, 0) + + +def test_flatten_cubic_subpaths(): + def corner(x, y): + return [(x, y), (x, y), (x, y)] + nodes = [corner(0, 0), corner(10, 0), corner(10, 10), corner(0, 10), corner(0, 0)] + assert core.flatten_cubic_subpaths([nodes], 0.1) == [[(0, 0), (10, 0), (10, 10), (0, 10)]] + k = 0.5522847498 * 10 + circle = [[(10, -k), (10, 0), (10, k)], [(k, 10), (0, 10), (-k, 10)], + [(-10, k), (-10, 0), (-10, -k)], [(-k, -10), (0, -10), (k, -10)], + [(10, -k), (10, 0), (10, k)]] + ring = core.flatten_cubic_subpaths([circle], 0.02)[0] + assert len(ring) > 20 + assert all(abs(math.hypot(x, y) - 10) < 0.03 for x, y in ring) + + +# -------------------------------------------------------------------------- +# Bout en bout (necessite inkex) +# -------------------------------------------------------------------------- + +def run_extension(tmp_path, *args): + pytest.importorskip("inkex") + from hachures import HatchFill + out = tmp_path / "out.svg" + HatchFill().run([*args, "--output={}".format(out), SHAPES]) + return out.read_text(encoding="utf-8") + + +def laser_segments(svg): + """Segments (x0, y0, x1, y1) du chemin « Laser path » du SVG produit.""" + node = next(n for n in ET.fromstring(svg).iter() + if n.get("{http://www.inkscape.org/namespaces/inkscape}label") == "Laser path") + numbers = [float(n) for n in re.findall(r"-?\d+(?:\.\d+)?", node.get("d"))] + return [tuple(numbers[i:i + 4]) for i in range(0, len(numbers), 4)] + + +def test_end_to_end_default(tmp_path): + svg = run_extension(tmp_path, "--id=rect1") + assert "Hatching" in svg and "Laser path" in svg + assert 'id="rect1"' in svg + assert laser_segments(svg) + + +def test_end_to_end_non_standard_document_scale(tmp_path): + """Page de 400 mm pour 538,72 unites : svg.unittouu() s'y tromperait.""" + pytest.importorskip("inkex") + from hachures import HatchFill + out = tmp_path / "out.svg" + HatchFill().run(["--id=rect1", "--output={}".format(out), SCALED]) + width = re.search(r"stroke-width:([\d.]+)", out.read_text(encoding="utf-8")) + assert float(width.group(1)) == pytest.approx(0.2 * 538.72053 / 400, abs=0.001) + + +def test_end_to_end_removes_original(tmp_path): + svg = run_extension(tmp_path, "--id=rect1", "--keep_original=false") + assert 'id="rect1"' not in svg + + +def test_end_to_end_color(tmp_path): + svg = run_extension(tmp_path, "--id=rect1", "--stroke_color={}".format(0x336699FF)) + assert re.search(r"stroke:#336699", svg) + + +def test_end_to_end_density_gives_requested_coverage(tmp_path): + """rect1 : 50 x 40 ; 40 % avec un trait de 0,25 mm.""" + svg = run_extension(tmp_path, "--id=rect1", "--density=40", "--line_width=0.25", "--angle=0") + length = sum(math.hypot(x1 - x0, y1 - y0) for x0, y0, x1, y1 in laser_segments(svg)) + assert length * 0.25 / (50 * 40) == pytest.approx(0.40, rel=0.05) + + +def test_end_to_end_path_is_optimized(tmp_path): + svg = run_extension(tmp_path, "--id=rect1", "--density=50", "--line_width=0.2", "--angle=90") + lines = laser_segments(svg) + assert len(lines) > 10 + travel = sum(math.hypot(b[0] - a[2], b[1] - a[3]) for a, b in zip(lines, lines[1:])) + assert travel < len(lines) * 0.45 # un pas (0,4) entre deux traits + + +@pytest.mark.parametrize("target", ["path2", "group1", "circle1", "path1"]) +def test_end_to_end_other_shapes(tmp_path, target): + svg = run_extension(tmp_path, "--id=" + target, "--density=20") + assert laser_segments(svg) + + +def test_end_to_end_cross_and_origin(tmp_path): + svg = run_extension(tmp_path, "--id=rect1", "--cross=true", "--anchor=origin") + assert laser_segments(svg) + + +def test_end_to_end_too_many_lines_message(tmp_path, capsys): + pytest.importorskip("inkex") + from hachures import HatchFill + HatchFill().run(["--id=rect1", "--line_width=0.0005", "--density=100", + "--output={}".format(tmp_path / "out.svg"), SHAPES]) + assert "Too many hatch lines" in capsys.readouterr().err + + +# -------------------------------------------------------------------------- +# Traductions +# -------------------------------------------------------------------------- + +def test_translations_up_to_date_and_complete(): + """Chaque texte du .inx et des .py a sa traduction dans chaque catalogue.""" + import gettext + import i18n + + msgids = [msgid for msgid, _refs in i18n.extract()] + assert "Hatch Fill" in msgids + assert "mm" not in msgids # unites marquees translatable="no" + + for language in i18n.LANGUAGES: + entries = i18n.read_po(i18n.po_path(language)) + missing = [m for m in msgids if not entries.get(m, ("", False))[0]] + assert not missing, "{}.po incomplet : {}".format(language, missing) + + catalog = gettext.translation(i18n.DOMAIN, i18n.LOCALE_DIR, [language]) + for msgid in msgids: + assert catalog.gettext(msgid) == entries[msgid][0], \ + "{} : .mo a recompiler (python i18n.py)".format(language) + + +def test_po_roundtrip(tmp_path): + import i18n + + messages = [("Simple", ["a"]), ('Quote "x" and \\ back', ["a"]), + ("Two\nlines", ["a"]), ("Tab\tend\n", ["a"])] + path = str(tmp_path / "xx.po") + i18n.write_po(path, "fr", messages, + {m: ("<" + m + ">", False) for m, _r in messages}) + entries = i18n.read_po(path) + for msgid, _refs in messages: + assert entries[msgid] == ("<" + msgid + ">", False) + + +def test_inx_matches_arguments(): + """Chaque du .inx a son add_argument, et inversement.""" + root = ET.parse(os.path.join(HERE, "hachures.inx")).getroot() + params = {elem.get("name") for elem in root.iter() + if elem.tag.rsplit("}", 1)[-1] == "param"} + with open(os.path.join(HERE, "hachures.py"), encoding="utf-8") as handle: + arguments = set(re.findall(r'add_argument\("--(\w+)"', handle.read())) + assert params == arguments + + +def test_inx_images_exist(): + """Les images de la boite de dialogue sont presentes (chemin relatif au .inx).""" + root = ET.parse(os.path.join(HERE, "hachures.inx")).getroot() + for elem in root.iter(): + if elem.tag.rsplit("}", 1)[-1] == "image": + assert os.path.isfile(os.path.join(HERE, elem.text.strip())), elem.text diff --git a/tests/data/scaled.svg b/tests/data/scaled.svg new file mode 100644 index 0000000..029deac --- /dev/null +++ b/tests/data/scaled.svg @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/tests/data/shapes.svg b/tests/data/shapes.svg new file mode 100644 index 0000000..2160d25 --- /dev/null +++ b/tests/data/shapes.svg @@ -0,0 +1,13 @@ + + + + + + + + + + +