Paver automatiquement plusieurs types de pièces rectangulaires sur un disque Ginestium™, en respectant une marge de sécurité et un espacement de coupe (kerf) — puis produire les fichiers de fabrication (SVG, DXF, Gerber), avec un numéro de série et un repère d'orientation gravés en option directement dans le motif. Ce guide explique le principe de l'algorithme de placement, ce qu'il suppose, et comment lire ses résultats sans être développeur.
On a un disque Ginestium™ de taille donnée et un ou plusieurs types de pièces rectangulaires à découper dedans (jusqu'à 200 types) — chacune avec ses dimensions W × H et une quantité voulue. L'outil calcule où poser chaque pièce pour en caser le plus possible, en respectant une marge de sécurité au bord du disque et un espacement (kerf) entre pièces voisines pour la lame ou le faisceau qui va les découper.
Le résultat s'exporte en SVG, DXF ou Gerber, prêt pour la fabrication — avec, en option, un numéro de série et un repère d'orientation gravés dans la marge, sans empiéter sur les pièces elles-mêmes.
Contrairement aux outils thermiques du portail, qui simulent une physique, celui-ci résout un problème purement géométrique : combien de rectangles W × H peut-on caser dans un cercle de rayon donné, sans qu'ils se chevauchent ni ne débordent — et où, exactement, pour que le fichier de découpe soit directement exploitable. C'est l'étape qui suit la conception d'une pièce (un serpentin dessiné dans le Générateur de méandres, par exemple, ou une géométrie simple) et précède la découpe physique : elle transforme « j'ai besoin de N pièces de telle taille » en un plan de disque prêt à graver.
Le placement lui-même — la recherche qui décide où poser chaque pièce — et la génération des fichiers finaux sont calculés et sécurisés côté serveur. Un noyau Numba JIT (compilation just-in-time) permet de résoudre un placement de plusieurs centaines de pièces en quelques dizaines à quelques centaines de millisecondes, malgré une recherche qui explore par force brute un grand nombre de positions candidates (voir §09).
Quand plusieurs types de pièces sont demandés, l'outil ne les place pas dans l'ordre où vous les avez saisis : il les trie d'abord par surface décroissante, puis les place un type à la fois, du plus grand au plus petit. Chaque pièce déjà posée devient un obstacle pour les types suivants.
Pour un type de pièce donné (W × H), l'outil ne teste pas des positions au hasard : il pose une grille régulière de pas (W + kerf) × (H + kerf) — l'espacement qui garantit un jeu de coupe kerf entre deux pièces voisines du même type — puis fait glisser cette grille (un décalage, ou offset) pour trouver la position qui fait rentrer le plus de cellules à la fois dans le disque utile et hors des pièces déjà posées. Une première recherche, grossière, balaie un quadrillage de décalages candidats ; si un type de pièce est déjà posé, ou si le mode « Évolutif » est actif, une seconde passe affine ce décalage sur une zone plus fine autour du meilleur trouvé.
Parmi les décalages qui casent le même nombre de pièces, l'outil préfère celui qui centre le mieux le motif — un simple critère de départage, pas une esthétique recherchée pour elle-même.
La rotation (0°, 45°, 90° ou un angle libre) tourne l'ensemble de la grille de placement — et donc toutes les pièces, tous types confondus — d'un seul mouvement. Elle ne s'applique jamais à un seul type isolément : pour orienter un type différemment des autres, il faut le déclarer comme un second type de pièce, avec W et H échangés.
L'algorithme ne teste jamais l'orientation W×H face à H×W d'une même pièce pour mieux remplir un vide : chaque type garde l'orientation saisie, modulo la rotation globale qui s'applique à tout le disque. Pour explorer les deux orientations d'une même pièce, il faut créer deux types avec les dimensions inversées.
Le mode « Évolutif » affine la même recherche par grille en deux passes ; il ne fait pas évoluer une population de solutions par sélection, mutation ou croisement. Détail et nuance au nota bene (§10).
L'anneau entre le bord du disque et le rayon utile (diamètre/2 − marge) sert de zone d'exclusion pour les pièces, mais aussi de zone d'accueil pour le numéro de série et le repère d'orientation, gravés en creux à l'intérieur de cet anneau — ce n'est donc pas un espace simplement perdu.
Pour deux pièces adjacentes d'un même type, l'écart centre-à-centre (W + kerf) laisse exactement kerf de jeu de coupe. Entre deux pièces de types différents qui se retrouvent voisines, l'outil vérifie seulement qu'elles ne se chevauchent pas, avec une marge d'un demi-kerf — pas un kerf plein systématique. Le détail est au §09, étape 4.
Ces valeurs sont lues une fois, au lancement d'« Optimiser & Générer » ; les modifier ensuite n'affecte pas un placement déjà calculé tant que la génération n'est pas relancée.
Une quantité ∞ n'est pas réellement sans limite : le moteur la traite comme un maximum de 9999 pièces pour ce type précis, et le nombre total de pièces placées, tous types confondus, est lui-même plafonné (voir §04).
Le numéro de série (13 caractères, en principe produit par le Générateur de numéros de série et commençant par « G ») s'inscrit le long d'un arc situé dans la marge de sécurité, à une distance du bord fixée par la hauteur de texte choisie. Il peut être répété 1, 2, 3 ou 4 fois, réparti régulièrement autour du disque, avec un décalage angulaire de départ réglable — pratique pour que le numéro reste lisible quelle que soit l'orientation dans laquelle la pièce finit sur l'établi.
Le repère d'orientation est un petit triangle plein, positionné lui aussi dans la marge, à l'une de quatre orientations prédéfinies (0°, 45°, 180°, 12,5°) — cette dernière valeur, délibérément non ronde, permet de distinguer sans ambiguïté un repère de fabrication d'un simple élément décoratif si on le retrouve isolément sur une pièce finie. Le triangle n'a aucune fonction de mesure : c'est un repère visuel pour orienter la pièce correctement au montage.
L'aperçu SVG à l'écran dessine le numéro de série avec une police système, pour une lecture confortable ; le fichier Gerber, lui, grave chaque caractère avec une police « trait » (stroke font) — un jeu de segments qu'un laser ou une pointe peut suivre directement, sans remplissage. Les deux tracent le même texte, à la même position, mais la forme exacte des caractères diffère légèrement d'un rendu à l'autre — voir §09, étape 8.
SVG (vectoriel complet) — le dessin exact affiché à l'écran, couleurs et étiquettes comprises, pour visualiser ou retoucher dans un éditeur vectoriel.
DXF (AutoCAD) — le disque et le contour de chaque pièce (un calque nommé TYPE_n par type), sans kerf, marge, S/N ni repère : un plan géométrique brut pour la CAO.
GBR (Gerber, paramétrable) — jusqu'à 5 couches sélectionnables indépendamment : disque + centre, contours pièces, trajectoires de scie, gravure S/N, repère d'orientation. Combinées dans un seul fichier, ou exportées séparément en archive zip — utile pour des passes laser à profondeur différente selon la couche.
Projet (.efb.json) — tous les réglages de l'outil (disque, pièces, S/N, repère, algorithme), pas les résultats de placement, nommé d'après le numéro de série. Se réimporte à l'identique.
Cette section est la référence technique du guide : elle décrit les calculs réellement exécutés par le noyau serveur (compilé Numba JIT). Elle n'est pas nécessaire pour se servir de l'outil.
C'est l'heuristique « largest first » classique du bin-packing par rectangles : les grandes pièces sont les plus contraignantes à caser, donc les placer en premier, sur un disque encore vide, leur donne le plus de marge de manœuvre. Les petites pièces, plus faciles à glisser dans les interstices, viennent ensuite remplir ce qui reste (§02).
La grille est construite dans un repère local aligné avec la pièce (pas avec le disque), puis tournée d'un bloc par θ à la toute fin : c'est ce qui garantit que les pièces restent orthogonales entre elles quel que soit l'angle global choisi, plutôt que de devoir recalculer une grille inclinée. Le +1 sur n_x et n_y ajoute une rangée de marge à la zone explorée, pour ne pas couper la recherche pile au bord du rayon utile.
Un rectangle tourné peut avoir un coin hors du cercle utile même si son centre est bien à l'intérieur. Tester les 4 coins est le test conservateur qui garantit qu'aucune pièce ne déborde, même légèrement — au prix d'écarter quelques positions qui, centre seul, auraient semblé valides.
Au sein d'un même type, c'est le pas de grille de l'étape 2 (step = W + kerf) qui garantit déjà un kerf plein entre deux pièces voisines — ce test-là n'a rien à vérifier de plus. Ce test-ci (4) n'intervient qu'entre pièces de types différents, qui ne partagent pas la même grille et doivent donc être comparées directement : il garantit un jeu minimal d'un demi-kerf entre elles, pas systématiquement un kerf plein. Une nuance à connaître si vous juxtaposez des types de tailles très différentes et que le jeu de coupe compte au dixième de millimètre près.
La phase grossière repère la bonne zone de décalage sans tester toute la résolution partout ; la phase fine affine ensuite localement autour du meilleur candidat trouvé. C'est une économie de calcul délibérée, pas une recherche exhaustive de tous les décalages possibles — voir le nota bene (§10) pour ce que cela change entre les modes Grid et Évolutif.
À remplissage égal, préférer les positions proches du centre laisse les positions périphériques — plus contraintes par le bord du disque — disponibles pour les types suivants, qui en ont statistiquement plus besoin.
Le triangle repère est centré sur son propre rayon (midR), alors que le texte du numéro de série est ancré à sa base (baseR) puis dessiné vers l'extérieur sur une hauteur textH — les deux éléments occupent ainsi des anneaux voisins mais distincts, sans jamais se chevaucher, quelle que soit la hauteur de texte choisie. Chaque caractère du S/N est ensuite tracé le long de l'arc par une police vectorielle « trait » dédiée à la gravure Gerber (segments purs, sans remplissage) — voir §07.
Le nom peut prêter à confusion : le mode « Évolutif » ne fait pas évoluer une population de solutions par sélection, mutation et croisement, comme le ferait un véritable algorithme évolutionniste ou génétique. C'est le même algorithme de recherche par grille que le mode « Grid » (§09, étapes 2 à 5), avec deux différences mesurables et rien de plus.
| Comportement | Grid | Évolutif |
|---|---|---|
| Phase fine (2 de l'étape 5) pour le tout premier type placé | non déclenchée | toujours déclenchée |
| Phase fine pour les types suivants | déclenchée | toujours déclenchée |
| Taille de grille p1 (phase grossière) | max(10, min(prec, 40)) | max(8, prec / 2) |
| Taille de grille p2 (phase fine) | max(15, prec) | floor(prec × 1,5) |
Concrètement, la seule vraie différence pour un disque avec un unique type de pièce est le déclenchement systématique de la phase fine en mode Évolutif : en mode Grid, cette pièce unique ne bénéficie que de la recherche grossière, faute d'obstacle à éviter qui justifierait un raffinement. Dès qu'un deuxième type de pièce entre en jeu, les deux modes exécutent tous deux les deux phases — seule la taille des grilles de recherche continue de différer.
Comme « Évolutif » affine systématiquement, il coûte davantage de temps de calcul pour un gain qui n'est significatif que sur des configurations à faible marge de manœuvre — peu de place libre restante, un seul type de pièce, un kerf important par rapport à la taille des pièces. Sur un disque très en dessous de sa capacité de remplissage, les deux modes convergent en général vers le même résultat, et le nom « Évolutif » ne doit pas laisser croire à une recherche plus intelligente ou plus exhaustive — seulement plus insistante localement.