Go to file
2026-09-24 18:42:22 +02:00
__pycache__ Version initiale 2026-09-10 13:54:19 +02:00
docs i18n 2026-09-24 18:42:22 +02:00
images i18n 2026-09-24 18:42:22 +02:00
locale i18n 2026-09-24 18:42:22 +02:00
po i18n 2026-09-24 18:42:22 +02:00
tests i18n 2026-09-24 18:42:22 +02:00
.gitignore i18n 2026-09-24 18:42:22 +02:00
box_core.py i18n 2026-09-24 18:42:22 +02:00
box_maker.inx i18n 2026-09-24 18:42:22 +02:00
box_maker.py i18n 2026-09-24 18:42:22 +02:00
deploy.ps1 i18n 2026-09-24 18:42:22 +02:00
i18n.py i18n 2026-09-24 18:42:22 +02:00
README.md i18n 2026-09-24 18:42:22 +02:00

Boîte à créneaux pour Inkscape

Patron généré pour une boîte fermée de 100 × 80 × 50 mm : six pièces à créneaux rouges (avant, arrière, gauche, droite, fond, couvercle) disposées en grille

Extension Inkscape 1.x qui génère le patron d'une boîte à découper au laser. Les faces s'assemblent par queues d'aronde droites (créneaux, finger joints) dont la largeur est paramétrable. Chaque pièce est un objet indépendant, déplaçable seul pour optimiser le placement sur la plaque.

Table des matières

Fonctionnalités

  • Boîte fermée (6 pièces : avant, arrière, gauche, droite, fond, couvercle) ou ouverte (5 pièces, bord haut des côtés droit)
  • Dimensions saisies intérieures ou extérieures (l'épaisseur est ajoutée automatiquement en mode intérieur)
  • Largeur des créneaux paramétrable ; 0 = 3 × l'épaisseur (défaut). La largeur est ajustée pour obtenir un nombre impair de créneaux par bord
  • Compensation du kerf (défaut 0,1 mm), voir section dédiée
  • Chaque pièce = un chemin SVG fermé, nommé (Avant, Fond…), placé directement dans le calque courant : sélectionnable et déplaçable individuellement
  • Pièces disposées en grille, espacement réglable, centrées sur la vue
  • Couleur et épaisseur du trait réglables (défaut : rouge, 0,1 mm)
  • Étiquettes optionnelles (texte bleu). Désactivées par défaut : le laser graverait le texte
  • Message d'erreur si une dimension est trop petite (minimum 5 × l'épaisseur en dimension extérieure)
  • Interface en français et en anglais selon la langue d'Inkscape : libellés, onglet Aide, noms des pièces et messages d'erreur. Le schéma de l'onglet Schéma / Diagram est en anglais (Inkscape ne traduit pas les images)

Installation

Inkscape fermé, depuis le dossier du projet (PowerShell) :

.\deploy.ps1              # installe dans %APPDATA%\inkscape\extensions\boxMaker
.\deploy.ps1 -Uninstall   # désinstalle

Le script copie box_maker.inx, box_maker.py, box_core.py, images\parameters_en.png (schéma de la boîte de dialogue) et le dossier locale\ (traductions compilées). Options : -ExtensionsDir, -FolderName, -Force (déploie même si Inkscape est ouvert). Redémarrer ensuite Inkscape.

Installation manuelle : copier ces mêmes fichiers et dossiers, en gardant l'arborescence, dans %APPDATA%\inkscape\extensions\boxMaker\.

Utilisation

  1. Menu Extensions > AlexDesign > Boîte à créneaux… (en anglais : Finger-Joint Box…)
  2. Régler les paramètres (illustrés dans l'onglet Schéma, résumés dans l'onglet Aide), cocher Aperçu en direct si besoin
  3. Appliquer

En ligne de commande

Avec le Python d'Inkscape (PowerShell) :

$env:PYTHONPATH = "C:\Program Files\Inkscape\share\inkscape\extensions"
& "C:\Program Files\Inkscape\bin\python.exe" box_maker.py `
    --length=100 --width=80 --height=50 --thickness=3 `
    --kerf=0.1 --dim_type=interior --lid=false --labels=true `
    --stroke_color=4278190335 entree.svg > sortie.svg

Les options booléennes exigent une valeur (--lid=true / --lid=false). La couleur est un entier RGBA (4278190335 = 0xff0000ff, rouge).

Paramètres

Schéma des paramètres : dimensions de la boîte, épaisseur et dimensions intérieures ou extérieures, largeur des créneaux, compensation du kerf

Onglet Paramètre Défaut Rôle
Dimensions Longueur / Largeur / Hauteur (mm) 100 / 80 / 50 Taille de la boîte (schéma 1)
Dimensions Les dimensions sont Extérieures Intérieures : l'épaisseur est ajoutée (schéma 2)
Dimensions Boîte fermée (avec couvercle) coché Décoché : 5 pièces, bord haut des côtés droit
Matière et créneaux Épaisseur de la matière (mm) 3 Profondeur des créneaux et des encoches
Matière et créneaux Largeur des créneaux (mm, 0 = 3 × épaisseur) 0 Ajustée pour un nombre impair de créneaux par bord (schéma 3)
Matière et créneaux Compensation du trait laser, kerf (mm) 0,1 Contour élargi de kerf / 2 (schéma 4, détails)
Tracé Espacement entre les pièces (mm) 5 Écart entre les pièces de la grille
Tracé Épaisseur du trait (mm) 0,1 Largeur du trait de découpe
Tracé Couleur du trait rouge Couleur du trait de découpe
Tracé Nommer les pièces (texte gravé !) décoché Ajoute le nom de chaque pièce en texte bleu

Le kerf : compensation du trait laser

Le problème

Le faisceau laser n'a pas une largeur nulle : il vaporise une bande de matière, le kerf (typiquement 0,05 à 0,3 mm selon la machine, la lentille, la matière et son épaisseur). Cette bande est centrée sur le trait du dessin, donc chaque bord découpé recule de kerf / 2 :

  • une pièce de 100 mm sort à 100 − kerf ;
  • un créneau de 9 mm sort à 9 − kerf ;
  • une encoche de 9 mm sort à 9 + kerf.

Au montage, chaque créneau a donc un jeu d'un kerf complet dans son encoche : la boîte tient mal, voire pas du tout sans colle.

Ce que fait l'extension

Chaque contour est décalé vers l'extérieur de kerf / 2 avant d'être dessiné (offset_orthogonal dans box_core.py). Sur le dessin :

Élément Cote dessinée Cote après découpe
Pièce de 100 mm 100 + kerf 100 mm
Créneau de 9 mm 9 + kerf 9 mm
Encoche de 9 mm 9 − kerf 9 mm

Après passage du laser, les pièces retrouvent leurs cotes nominales et les créneaux remplissent exactement les encoches. Conséquence visible dans Inkscape : les pièces mesurent kerf de plus que les dimensions saisies, c'est normal.

Mesurer son kerf

  1. Dessiner un carré de 20 mm, le découper avec les réglages habituels (puissance, vitesse, matière).
  2. Mesurer le carré au pied à coulisse : kerf = 20 − cote mesurée. Pour plus de précision, découper une rangée de 10 carrés de 10 mm jointifs : kerf = (100 − longueur totale mesurée des 10 carrés) / 10.

Régler l'ajustement

  • kerf = valeur mesurée : ajustement exact, montage à frottement.
  • kerf plus grand : plus serré (montage au maillet, sans colle). Attention au bois, qui gonfle avec l'humidité.
  • kerf plus petit : du jeu (montage facile, collage).
  • kerf = 0 : pas de compensation, cotes du dessin = cotes nominales.

Le kerf dépend de la matière : refaire la mesure en changeant de matériau ou d'épaisseur.

Structure du projet

.
├── box_maker.inx          # Interface de l'extension (textes source en anglais)
├── box_maker.py           # Extension inkex : conversion en SVG, placement, textes traduits
├── box_core.py            # Géométrie pure Python (mm) : créneaux, kerf, mise en page
├── i18n.py                # Chaîne de traduction (extract / update / compile), Python pur
├── po/                    # box_maker.pot, en.po, fr.po (seul fr.po se traduit à la main)
├── locale/                # Catalogues .mo compilés (générés, déployés)
├── deploy.ps1             # Installation / désinstallation dans Inkscape
├── images/
│   └── parameters_en.png  # Schéma de l'onglet « Diagram » (déployé)
├── docs/                  # Illustrations du README (non déployées)
│   ├── apercu-boite.png   # Patron d'exemple
│   ├── parametres.png     # Schéma des paramètres en français
│   └── schema_parametres.py  # Générateur du schéma fr et en
└── tests/
    ├── test_box_core.py   # Tests unitaires de la géométrie
    └── test_extension.py  # Traductions, cohérence .inx, bout en bout avec inkex

Développement

Environnement et tests :

python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install pytest
python -m pytest -q                # 18 réussis, 3 ignorés (sans inkex)

$env:PYTHONPATH = "C:\Program Files\Inkscape\share\inkscape\extensions"
python -m pytest -q                # 21 réussis (avec inkex)

Les tests couvrent la géométrie (box_core), les catalogues de traduction (complets, .mo à jour, champs de format conservés), la cohérence .inx ↔ add_argument, la présence des images de la boîte de dialogue et l'extension de bout en bout (6 pièces nommées, message d'erreur).

Traductions

Les textes source (.inx et appels _("...") de box_maker.py) sont en anglais ; Inkscape les affiche traduits grâce à l'attribut translationdomain="box_maker" du .inx.

python i18n.py        # extract + update + compile ; liste les chaînes à traduire

Après modification d'un texte : lancer python i18n.py, compléter les msgstr vides de po/fr.po, relancer python i18n.py, puis .\deploy.ps1. po/en.po se remplit tout seul ; ne jamais modifier les .mo. Pour une nouvelle langue : l'ajouter à LANGUAGES dans i18n.py, puis même démarche avec po/<langue>.po.

Schéma des paramètres

docs/schema_parametres.py dessine le schéma avec les fonctions de box_core.py (il reste fidèle au rendu réel) et l'exporte en PNG via C:\Program Files\Inkscape\bin\inkscape.com :

python docs/schema_parametres.py      # les deux versions
python docs/schema_parametres.py fr   # docs/parametres.png, 1400 px (README)
python docs/schema_parametres.py en   # images/parameters_en.png, 900 px, textes agrandis (boîte de dialogue)

Relancer après toute modification de la géométrie ou des paramètres, puis .\deploy.ps1.

Patron d'exemple

docs/apercu-boite.png est le résultat de l'extension sur un document vierge de 300 × 300 mm (boîte fermée 100 × 80 × 50 mm, épaisseur 3 mm, étiquettes activées, trait 0,4 mm), exporté par inkscape.com --export-area-drawing --export-width=900.