mise à jour de la doc

This commit is contained in:
Alex 2026-09-10 14:15:50 +02:00
parent 046c9839a7
commit d61686458e
2 changed files with 85 additions and 125 deletions

208
README.md
View File

@ -1,143 +1,103 @@
# Boîte à créneaux pour Inkscape
Extension Inkscape 1.x générant des pièces de boîte à découper au laser. Les parois s'assemblent par queues d'aronde droites (finger joints) à bords complémentaires, garantissant des ajustements serrés et réguliers.
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.
## Caractéristiques
## Table des matières
- **Boîte fermée ou ouverte** : 6 pièces (avant, arrière, gauche, droite, fond, couvercle) ou 5 (sans couvercle)
- **Dimensions intérieures ou extérieures** : le calcul compense automatiquement l'épaisseur
- **Créneaux paramétrables** : largeur 0 (défaut = 3 × épaisseur) ou valeur explicite, ajustée à un nombre impair par bord
- **Compensation du kerf** : défaut 0,1 mm, élargit les créneaux, rétrécit les encoches pour un assemblage serré
- **Mise en page** : espacement entre pièces configurable, centrage automatique sur la vue
- **Apparence** : couleur et épaisseur du trait réglables
- **Étiquettes optionnelles** : nom de chaque pièce en texte bleu, gravé avec les créneaux
- [Fonctionnalités](#fonctionnalités)
- [Installation](#installation)
- [Utilisation](#utilisation)
- [En ligne de commande](#en-ligne-de-commande)
- [Le kerf : compensation du trait laser](#le-kerf--compensation-du-trait-laser)
- [Le problème](#le-problème)
- [Ce que fait l'extension](#ce-que-fait-lextension)
- [Mesurer son kerf](#mesurer-son-kerf)
- [Régler l'ajustement](#régler-lajustement)
- [Structure du projet](#structure-du-projet)
## Structure des pièces
## Fonctionnalités
Chaque pièce est un chemin SVG indépendant, placé dans le calque courant :
- Sélectionnable et déplaçable individuellement
- Nommée selon sa fonction (Avant, Arrière, etc.)
- Polygone fermé à bords orthogonaux
### Convention d'emboîtement
Garantit des bords complémentaires jumeaux :
| Pièce | Haut | Droite | Bas | Gauche |
|-------|------|--------|-----|--------|
| Avant | Mâle | Mâle | Mâle | Mâle |
| Arrière | Mâle | Mâle | Mâle | Mâle |
| Gauche | Mâle\* | Femelle | Mâle | Femelle |
| Droite | Mâle\* | Femelle | Mâle | Femelle |
| Fond | Femelle | Femelle | Femelle | Femelle |
| Couvercle | Femelle | Femelle | Femelle | Femelle |
\* Haut mâle si couvercle présent, bord lisse si boîte ouverte.
- **Bord mâle** : créneaux extrêmes en saillie
- **Bord femelle** : créneaux extrêmes en creux
- **Coin plein** : si aucun bord adjacent n'est femelle
- 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](#le-kerf--compensation-du-trait-laser)
- 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)
## Installation
### Via script PowerShell (recommandé)
Copier `box_maker.inx`, `box_maker.py` et `box_core.py` dans `%APPDATA%\inkscape\extensions\boxMaker\`, puis redémarrer Inkscape.
## Utilisation
1. Menu **Extensions > AlexDesign > Boîte à créneaux…**
2. Régler les paramètres, cocher **Aperçu en direct** si besoin
3. **Appliquer**
### En ligne de commande
Avec le Python d'Inkscape (PowerShell) :
```powershell
# Fermer Inkscape au préalable
.\deploy.ps1
# ou avec options :
.\deploy.ps1 -Uninstall
.\deploy.ps1 -Force # Ignore la vérification Inkscape ouvert
.\deploy.ps1 -FolderName 'ma-boite' # Dossier personnalisé
```
Copie `box_maker.inx`, `box_maker.py`, `box_core.py` dans `%APPDATA%\inkscape\extensions\boxMaker/`.
### Installation manuelle
Copier les trois fichiers dans `%APPDATA%\inkscape\extensions\boxMaker/` (créer le dossier s'il n'existe pas). Inkscape explore récursivement ce répertoire.
## Utilisation dans Inkscape
1. Démarrer Inkscape
2. Menu **Extensions > Découpe laser > Boîte à créneaux…**
3. Configurer les paramètres (voir tableau ci-dessous)
4. Cliquer **Appliquer**
### Paramètres
| Paramètre | Défaut | Plage | Description |
|-----------|--------|-------|-------------|
| **Longueur (mm)** | 100 | 5–5000 | Dimension avant/arrière |
| **Largeur (mm)** | 80 | 5–5000 | Dimension gauche/droite |
| **Hauteur (mm)** | 50 | 5–5000 | Dimension haut/bas |
| **Les dimensions sont** | Extérieures | Extérieures / Intérieures | Mode calcul |
| **Boîte fermée** | ✓ | ✓ / ☐ | Avec couvercle |
| **Épaisseur matière (mm)** | 3 | 0,5–50 | MDF, plexiglas, etc. |
| **Largeur créneaux (mm)** | 0 | 0–500 | 0 = auto (3 × épaisseur) |
| **Kerf (mm)** | 0,1 | 0–2 | Compensation laser |
| **Espacement (mm)** | 5 | 0–100 | Entre les pièces |
| **Épaisseur trait (mm)** | 0,1 | 0,001–5 | Largeur du vecteur |
| **Couleur trait** | #FF0000 (rouge) | Couleur RGB | Pour la découpe laser |
| **Nommer les pièces** | ☐ | ✓ / ☐ | Texte gravé (bleu) |
**Notes sur les paramètres :**
- Largeur créneaux 0 calcule automatiquement la meilleure approximation pour un nombre impair de créneaux par bord
- Kerf = 0,1 mm typique pour lasers CO₂ ; ajuster selon le matériau et la machine
- Les dimensions trop petites relatif à l'épaisseur lèvent une erreur (minimum 5 × épaisseur recommandé)
- Étiquettes : texte gravé en bleu, pas de contour, à vérifier avant découpe
## Tests
```bash
python -m pytest tests/
```
Validations :
- Nombre impair de créneaux par bord
- Complémentarité des bords mâles/femelles
- Dimensions et orthogonalité des pièces
- Compensation du kerf
- Absence de chevauchements en mise en page
## Utilisation CLI
```bash
# Environnement Python d'Inkscape
$env:PYTHONPATH = "C:\Program Files\Inkscape\share\inkscape\extensions"
# Génération SVG
& "C:\Program Files\Inkscape\bin\python.exe" box_maker.py `
--length=100 `
--width=80 `
--height=50 `
--thickness=3 `
--finger=9 `
--kerf=0.1 `
--dim_type=exterior `
--lid `
--gap=5 `
--stroke_color=0xff0000ff `
--stroke_width=0.1 `
--labels `
entree.svg > sortie.svg
--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
```
Le module `box_core` est indépendant d'Inkscape (Python pur, longueurs en mm).
Les options booléennes exigent une valeur (`--lid=true` / `--lid=false`). La couleur est un entier RGBA (`4278190335` = `0xff0000ff`, rouge).
## Modules
## Le kerf : compensation du trait laser
| Fichier | Rôle |
|---------|------|
| `box_maker.inx` | Définition de l'interface Inkscape |
| `box_maker.py` | Extension Inkscape, intégration SVG |
| `box_core.py` | Géométrie pur Python, indépendant d'Inkscape |
| `deploy.ps1` | Script d'installation PowerShell |
| `tests/test_box_core.py` | Tests unitaires géométrie |
### Le problème
## Repère de coordonnées
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** :
- Origine (0, 0) : coin haut-gauche de la pièce
- **x** : vers la droite
- **y** : vers le bas (SVG)
- Tous les bords sont orthogonaux (horizontaux/verticaux uniquement)
- 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 (paramètres, menu)
├── box_maker.py # Extension inkex : conversion en SVG, placement dans le calque
├── box_core.py # Géométrie pure Python (mm) : créneaux, kerf, mise en page
├── deploy.ps1 # Installation / désinstallation dans Inkscape
└── tests/
└── test_box_core.py # Tests unitaires de la géométrie
```

View File

@ -105,4 +105,4 @@ if (Test-Path -LiteralPath $pycache) {
Write-Host ""
Write-Host "Extension déployée dans $destination" -ForegroundColor Green
Write-Host "Redémarrez Inkscape, puis : Extensions > Découpe laser > Boîte à créneaux..."
Write-Host "Redémarrez Inkscape, puis : Extensions > AlexDesign > Boîte à créneaux..."