OpenSCAD : créer une pièce personnalisable par dimensions
OpenSCAD décrit une géométrie au moyen d’un script : vous écrivez les formes et leurs paramètres, puis le logiciel calcule le modèle. Cet article montre une pièce simple dont les dimensions se modifient en changeant des valeurs du script. Il s’appuie sur le manuel et l’index de documentation OpenSCAD; l’entretoise est un exemple éditorial original et n’a pas été exécutée, exportée ou imprimée dans le cadre de cet article.
La réponse courte
Pour paramétrer une pièce simple dans OpenSCAD, placez les mesures comme variables et transmettez-les aux paramètres d’un module qui décrit la géométrie. Le manuel explique que les variables sont évaluées à la compilation et que la dernière affectation dans une portée l’emporte. Les fonctions calculent des valeurs; les modules définissent des objets ou opérateurs et peuvent recevoir des paramètres par défaut. Dans cet exemple, modifier une mesure consiste à changer la valeur correspondante du script, sans redessiner la géométrie à la souris.
Ce que change un script par rapport à un dessin à la souris
Dans un modeleur visuel comme FreeCAD, vous pouvez esquisser et modifier des cotes avec des outils graphiques. OpenSCAD suit une autre logique de modélisation : le script texte décrit les formes, transformations et opérations appliquées. L’index de documentation distingue un tutoriel, un manuel utilisateur et une référence du langage; cette page se concentre sur le langage et les paramètres.
Le tutoriel listé dans la documentation prévoit des chapitres sur la mise à l’échelle et le paramétrage, les modules et les boucles. Un script permet de nommer les valeurs que vous souhaitez rendre modifiables, puis de les réutiliser dans la description géométrique. Cette méthode convient à un exemple comme l’entretoise ci-dessous; elle n’établit pas que la modélisation par script soit plus rapide ou meilleure pour tous les objets.
Le manuel décrit les variables OpenSCAD comme des valeurs fixées à la compilation plutôt que comme un état modifié étape par étape. Cette différence est importante lorsque vous choisissez quelles dimensions exposer et comment les affecter dans le script.
Variables : des constantes réglables évaluées à la compilation
Une variable OpenSCAD se crée avec un nom, un signe égal, une expression et un point-virgule. Le manuel donne des exemples simples : un nombre, un calcul avec cosinus, un booléen, une chaîne de caractères ou un vecteur entre crochets. Les vecteurs jouent le rôle des tableaux des langages impératifs, et un membre se lit avec un index entre crochets.
Le point essentiel, selon le manuel, est que si une variable reçoit plusieurs valeurs dans la même portée, seule la dernière affectation de cette portée s’applique dans cette portée et ses sous-portées. Le manuel conseille de les considérer comme des constantes redéfinissables plutôt que comme des variables ordinaires. Ce comportement permet aussi de fournir une valeur en ligne de commande avec l’option -D, placée à la fin du code source. Une bibliothèque qui définit ses valeurs par défaut à la racine peut ainsi être surchargée par une affectation dans votre propre fichier.
Elle a aussi une limite nette. Le manuel indique que l'écriture x = x + 1 n'est pas valide, puisque les valeurs ne changent pas pendant l'exécution. Une variable jamais affectée vaut undef, et cette valeur peut être testée dans une condition. Enfin, le manuel signale que les variables commençant par le signe dollar sont des variables spéciales, plus dynamiques, qui servent à transmettre des arguments aux modules et fonctions par un autre canal.
Un exemple original : l'entretoise réglable
Voici un exemple éditorial, écrit pour cette page et présenté comme une proposition de départ, pas comme un essai réalisé. Il décrit une entretoise cylindrique percée, répétée plusieurs fois sur une ligne. Toutes les mesures sont des valeurs d'exemple, à adapter à votre besoin :
$fn = 64; hauteur = 10; rayon_exterieur = 6; rayon_trou = 2; nombre = 4; espacement = 15; module entretoise(h, re, ri) { difference() { cylinder(r=re, h=h); translate([0, 0, -1]) cylinder(r=ri, h=h+2); } } for (i = [0:nombre-1]) translate([i*espacement, 0, 0]) entretoise(hauteur, rayon_exterieur, rayon_trou);
Les lignes de paramètres en tête de fichier regroupent les valeurs choisies pour cet exemple : hauteur, rayons, nombre de pièces et espacement. Le module reçoit trois paramètres et les transmet aux primitives cylinder; le manuel documente le rayon, la hauteur et la variable spéciale $fn. L’opération difference() soustrait le cylindre intérieur au cylindre extérieur. Le cylindre intérieur commence à z=-1 et dépasse la hauteur de 1 unité à chaque extrémité dans cet exemple, afin de traverser le volume modélisé.
Pour utiliser ce schéma, choisissez une hauteur positive et deux rayons tels que 0 < rayon_trou < rayon_exterieur. Le nombre doit être un entier positif; un espacement supérieur à deux fois le rayon extérieur sépare les exemplaires de cette rangée. Dans les valeurs proposées, le diamètre extérieur vaut 12, le diamètre du trou vaut 4 et la hauteur vaut 10 en unités du modèle. Ce sont des dimensions calculées du script, sans mesure d’une pièce fabriquée; adaptez-les et contrôlez le résultat dans votre installation.
Fonctions et modules pour réutiliser la pièce avec d'autres valeurs
Le manuel distingue nettement deux outils. Une fonction opère sur des valeurs et renvoie une nouvelle valeur ; elle s'écrit avec le mot-clé function, un nom, des paramètres et un signe égal suivi d'une expression. Un module définit un objet ou un opérateur ; il s'écrit avec le mot-clé module et un bloc d'actions entre accolades. Le manuel souligne qu'il n'existe aucun mécanisme permettant à un module de renvoyer une valeur vers l'extérieur. Si vous avez besoin d'un résultat numérique, c'est une fonction qu'il faut écrire.
Une fonction peut calculer le rayon d’un trou à partir d’un diamètre et d’un jeu radial, par exemple function rayon_trou(d_vis, jeu_radial=0.2) = d_vis/2 + jeu_radial;. Avec cet exemple, le jeu ajouté au diamètre est deux fois le jeu radial; la valeur 0,2 est illustrative. Elle ne constitue ni une recommandation d’assemblage ni une mesure. Choisissez vos valeurs et vérifiez les dimensions dans votre propre flux; le guide de précision dimensionnelle aide à organiser ce contrôle.
Le manuel montre aussi des modules qui acceptent des options nommées, comme sa maison dont le toit et la couleur se choisissent à l'appel. Vous pouvez suivre le même schéma pour proposer une variante chanfreinée ou un nombre de côtés différent à votre entretoise, chaque variante restant un simple appel de module.
Boucles, portée des variables et pièges du débutant
La boucle for de l'exemple répète le module le long d'un axe. Le manuel précise qu'une boucle n'échappe pas à la règle des variables : une copie du contenu est créée pour chaque passage, chaque passage ayant sa propre portée, et il reste impossible d'écrire a = a + 1. Pour produire des motifs plus complexes, les chapitres du tutoriel sur le contrôle de flux et les boucles sont le prolongement naturel.
La portée des variables réserve quelques surprises. Selon le manuel, chaque paire d'accolades crée une portée interne, et depuis la version 2015.03 on peut y affecter des variables, mais leur valeur reste confinée à ces accolades et ne remonte jamais vers l'extérieur. Un bloc d'accolades anonyme, sans opérateur devant, n'est pas considéré comme une portée. Si une valeur semble ignorée, cherchez d'abord une seconde affectation plus bas dans le fichier, puisque la dernière l'emporte.
Deux autres points méritent attention. Le manuel indique que les modules peuvent s'appeler eux-mêmes, mais sans élimination de la récursion terminale, et il recommande de garder une profondeur faible dans son exemple d'arbre, car le nombre de primitives croît exponentiellement. Pour les fonctions, une limite de récursion intégrée déclenche une erreur explicite, et seules les fonctions récursives terminales profitent d'une limite bien plus haute. Enfin, le manuel mélange des notes historiques et des références plus récentes ; ne déduisez pas de cette page la version du logiciel que vous avez installée.
Du script au fichier pour le slicer : ce qu'il reste à vérifier
Une syntaxe acceptée ne garantit ni une géométrie non vide ni une pièce imprimable. Avant d’exporter l’exemple, contrôlez les valeurs, la forme calculée et les messages de votre version. L’index officiel renvoie aux sections Import et export, Customizer et ligne de commande pour la suite du travail. Vérifiez ensuite les dimensions et la préparation dans votre slicer; aucun export n’a été réalisé pour cette page.
Si les dimensions physiques comptent pour votre assemblage, vous pouvez comparer une pièce fabriquée dans votre propre flux à la cote visée et ajuster ensuite le paramètre. Cette étape est une suggestion de validation pour votre projet, pas une mesure effectuée pour l’exemple de cette page ni un jeu universel.
OpenSCAD propose une modélisation par script; les modeleurs visuels décrivent la pièce à travers d’autres outils et interactions. Choisissez selon la manière dont vous souhaitez construire et modifier la géométrie. L’exemple de cette page montre un cas où des valeurs nommées peuvent être réutilisées dans un script.
Sources et limites
- OpenSCAD - Documentation
- The OpenSCAD Language
Nous organisons la documentation des fabricants et des communautés ; nous n’avons pas mesuré ces produits nous-mêmes. La notice de votre modèle exact prime sur ces explications générales.