mise à jour de la doc
This commit is contained in:
parent
046c9839a7
commit
d61686458e
208
README.md
208
README.md
@ -1,143 +1,103 @@
|
|||||||
# Boîte à créneaux pour Inkscape
|
# 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)
|
- [Fonctionnalités](#fonctionnalités)
|
||||||
- **Dimensions intérieures ou extérieures** : le calcul compense automatiquement l'épaisseur
|
- [Installation](#installation)
|
||||||
- **Créneaux paramétrables** : largeur 0 (défaut = 3 × épaisseur) ou valeur explicite, ajustée à un nombre impair par bord
|
- [Utilisation](#utilisation)
|
||||||
- **Compensation du kerf** : défaut 0,1 mm, élargit les créneaux, rétrécit les encoches pour un assemblage serré
|
- [En ligne de commande](#en-ligne-de-commande)
|
||||||
- **Mise en page** : espacement entre pièces configurable, centrage automatique sur la vue
|
- [Le kerf : compensation du trait laser](#le-kerf--compensation-du-trait-laser)
|
||||||
- **Apparence** : couleur et épaisseur du trait réglables
|
- [Le problème](#le-problème)
|
||||||
- **Étiquettes optionnelles** : nom de chaque pièce en texte bleu, gravé avec les créneaux
|
- [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 :
|
- 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)
|
||||||
- Sélectionnable et déplaçable individuellement
|
- Dimensions saisies **intérieures** ou **extérieures** (l'épaisseur est ajoutée automatiquement en mode intérieur)
|
||||||
- Nommée selon sa fonction (Avant, Arrière, etc.)
|
- 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
|
||||||
- Polygone fermé à bords orthogonaux
|
- 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
|
||||||
### Convention d'emboîtement
|
- 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)
|
||||||
Garantit des bords complémentaires jumeaux :
|
- É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)
|
||||||
| 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
|
|
||||||
|
|
||||||
## Installation
|
## 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
|
```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"
|
$env:PYTHONPATH = "C:\Program Files\Inkscape\share\inkscape\extensions"
|
||||||
|
|
||||||
# Génération SVG
|
|
||||||
& "C:\Program Files\Inkscape\bin\python.exe" box_maker.py `
|
& "C:\Program Files\Inkscape\bin\python.exe" box_maker.py `
|
||||||
--length=100 `
|
--length=100 --width=80 --height=50 --thickness=3 `
|
||||||
--width=80 `
|
--kerf=0.1 --dim_type=interior --lid=false --labels=true `
|
||||||
--height=50 `
|
--stroke_color=4278190335 entree.svg > sortie.svg
|
||||||
--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
|
|
||||||
```
|
```
|
||||||
|
|
||||||
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 |
|
### Le problème
|
||||||
|---------|------|
|
|
||||||
| `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 |
|
|
||||||
|
|
||||||
## 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
|
- une pièce de 100 mm sort à 100 − kerf ;
|
||||||
- **x** : vers la droite
|
- un créneau de 9 mm sort à 9 − kerf ;
|
||||||
- **y** : vers le bas (SVG)
|
- une encoche de 9 mm sort à 9 + kerf.
|
||||||
- Tous les bords sont orthogonaux (horizontaux/verticaux uniquement)
|
|
||||||
|
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
|
||||||
|
```
|
||||||
|
|||||||
@ -105,4 +105,4 @@ if (Test-Path -LiteralPath $pycache) {
|
|||||||
|
|
||||||
Write-Host ""
|
Write-Host ""
|
||||||
Write-Host "Extension déployée dans $destination" -ForegroundColor Green
|
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..."
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user