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.

Briques du langage OpenSCAD utiles à une pièce paramétrique, selon le manuel

ÉlémentRôlePoint à retenir
VariableStocker une dimension ou un calculFixée à la compilation ; la dernière affectation l'emporte dans toute la portée
Variable spéciale ($)Transmettre un argument par un autre canalCommence par un signe dollar ; plus dynamique qu'une variable classique
FonctionCalculer et renvoyer une valeurParamètres avec valeurs par défaut ; récursion possible avec limite intégrée
Module objetDessiner une forme réutilisableNe renvoie aucune valeur vers l'extérieur ; s'appelle avec un point-virgule
Module opérateurAgir sur des objets enfants via children()S'appelle sans point-virgule devant un bloc d'objets
Boucle forRépéter une forme selon une plageChaque passage a sa propre portée ; a = a + 1 reste invalide

Questions fréquentes

Une variable OpenSCAD change-t-elle comme un compteur pendant l’exécution ?

Non. Le manuel indique que les valeurs sont fixées à la compilation et que la dernière affectation dans une portée s’applique dans cette portée et ses sous-portées. L’écriture x = x + 1 n’est pas valide. Pensez aux variables comme à des constantes redéfinissables.

Quelle différence entre une fonction et un module ?

Une fonction calcule et renvoie une valeur, par exemple un rayon dérivé d'un diamètre de vis. Un module décrit une géométrie ou un opérateur et ne peut pas renvoyer de valeur vers l'extérieur. Les deux acceptent des paramètres avec valeurs par défaut.

L'exemple d'entretoise de cette page a-t-il été imprimé ?

Non. Il s'agit d'un exemple éditorial original écrit pour illustrer le paramétrage, avec des valeurs d'exemple. Vérifiez le résultat dans votre propre installation et dans votre slicer avant d'imprimer.

Comment changer les dimensions sans éditer le code ?

Le sommaire du manuel utilisateur comporte une section Customizer dédiée à cette question. Le manuel du langage mentionne aussi l'option -D en ligne de commande, qui affecte une variable à la fin du code source. Reportez-vous à ces sections pour la procédure exacte.

Un script qui s'affiche correctement est-il forcément imprimable ?

Pas nécessairement. Le script décrit une géométrie ; l'export, l'épaisseur des parois et la cohérence des unités doivent être contrôlés dans le slicer. Mesurez ensuite la pièce imprimée et ajustez vos variables.

OpenSCAD remplace-t-il FreeCAD ou Tinkercad ?

Il s’agit de modes de modélisation différents. OpenSCAD décrit la géométrie dans un script; FreeCAD ou Tinkercad s’utilisent selon leurs propres outils et votre manière de travailler. La question pratique est de savoir si vous souhaitez exprimer les formes et dimensions dans du code.

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.

Votre prochaine étape