Découverte des primitives de dessin 2D d'OpenSCAD
OpenSCAD est un logiciel libre de dessin 3D paramétrique, c’est à dire que les objets sont dessinés par les commandes d’un langage de programmation. C’est un logiciel de dessin très populaire dans la communauté des utilisateurs d'imprimante 3D.
Sommaire
Présentation et objectifs
Ce tutoriel a pour but de faire découvrir les primitives de dessin 2D du langage OpenSCAD. Il vous permettra d'apprendre à utiliser les primitives suivantes :
- square()
- circle()
- polygon()
Même si ça peut paraitre surprenant de faire du dessin 2D avec un logiciel de modélisation 3D, la découvertes de ces premières primitives permettra de se familiariser avec le logiciel et le langage. Utilisé avec les primitives d'extrusion, les formes 2D permettent de réaliser rapidement un grand nombre de formes.
Pré-requis
Avant de faire ce tutoriel, il faut comprendre la logique d'utilisation d'OpenSCAD. Si vous n'avez jamais ouvert ce logiciel, vous pouvez suivre le tutoriel suivant :
Découverte des primitives de dessin 2D
Toutes les primitives 2D crée des formes d’épaisseur nulle même si elles sont rendu dans la zone de visualisation par des objets 3D d'épaisseur 1. Vos programmes devront être enregistrés dans un fichier d'extension .scad.
Pour faciliter la relecture de vos programmes plusieurs mois après, ou par quelqu'un d'autre, vous pouvez rajouter des commentaires explicitant ce que fait votre code. C'est une bonne habitude à prendre d'expliquer clairement ce que l'on fait. Attention ça peut être une arme à double tranchant lorsqu'ils ne sont pas maintenus à jour.
La syntaxe à utilisée pour qu'OpenSCAD reconnaisse un commentaire (et n'interprète pas les lignes associées) est la suivante :
- Un commentaire sur une seule ligne doit être précédé par deux "slashes",
- Un commentaire sur plusieurs lignes doit être entouré par "/*" et "*/".
Par exemple :
cube(size=20); // Ceci est un commentaire inutile mais sur une seule ligne
translate([40,0,0]) cube(size=30);
/*
Ceci est un commentaire
M
u
l
t
i
l
i
g
n
e
*/
Classiquement, il est recommandé de mettre au début de votre fichier un commentaire en entête pour être capable de comprendre rapidement l'objectif d'un fichier. Par exemple :
/*
Fichier : ceciEstLeNomDeMonFichier.scad
Description:
Décrivez ici votre objet.
Auteur : Prénom NOM
Licence : CC-By-SA
*/
Première primitive : square()
Le première primitive est comme son nom l'indique destinée à dessiner des carrés. Le carré est crée à l'origine du repère dans le plan xOy. Cette primitive a le profil suivant :
square(size=1, center=false)
Ce profil nous indique que cette primitive admet deux paramètres. Le premier est la taille (size) et a pour valeur par défaut 1 mm. Le second permet de dessiner le carré avec son centre concordant avec l'origine du repère. Par défaut ce n'est pas le cas, c'est l'un des coins qui sera situé à l'origine.
Par exemple pour créer un carré de coté 30mm dont l'un des coins est situé à l'origine du repère, il faut écrire le code suivant :
square(30); // ou square(size=30);
Ce code une fois compilé (F5) produira le modèle suivant :
Pour créer un carré de coté 30mm dont le centre est situé à l'origine du repère, il faut écrire le code suivant :
square(30,true);//ou square(size=30, center=true);
Ce code une fois compilé (F5) produira le modèle suivant :
Dans la philosophie d'OpenSCAD, le nombre de primitive doit être autant minimal que possible. Aussi cette primitive permet aussi dessiner un rectangle en précisant la longueur et la largeur dans le paramètre size.
Pour créer un rectangle de coté 30x50mm dont le centre est situé à l'origine du repère, il faut écrire le code suivant :
square(size=[30,50], center = true);
Ce code une fois compilé (F5) produira le modèle suivant :
Deuxième primitive : circle()
La seconde primitive est celle que permet de dessiner des cercles situé à l'origine du repère.
Cette primitive a le profil suivant :
circle(r=radius | d=diameter)
Si l'on ne précise pas le nom du paramètre, c'est l'argument est interprété comme le rayon du cercle. Si l'on utilise les paramètres nommés, dans ce cas là on peut précise si l'on veut utiliser le rayon ou le diamètre.
Par exemple, pour tracer un cercle centré sur l'origine du repère de diamètre 20mm, il faut écrire le code suivant :
//circle(10);
//circle(r = 10);
circle(d = 20);
Ce code une fois compilé (F5) produira le modèle suivant :
Sur le rendu, on voit que le cercle n'est pas parfaitement lisse. Il est composé de plusieurs petits segments. Une variable spéciale permet de spécifier le nombre de segments. Cette variable, nommée $fn vaut par défaut 30.
Si l'on veut lisser le cercle on peut mettre cette variable à une valeur de 100 ou plus. Le défaut, c'est que plus on améliore le rendu final, plus le temps pour l'obtenir sera long.
À l'inverse, on peut aussi exploiter cette primitive pour faire des polygones en spécifiant un nombre de segment faible. Par exemple, pour dessiner un hexagone il suffit d'écrire le code suivant :
circle(d = 20, $fn=6);
Ce code une fois compilé (F5) produira le modèle suivant :
Troisième primitive : polygon()
La troisième primitive est la plus puissante mais aussi la plus complexe des 3. Elle permet de tracer des polygones à partir d'une liste de points. Ces polygone peuvent être convexe ou non et ils peuvent aussi comporter des trous.
polygon([points],[paths])
Le paramètre points est une liste de coordonnées de points ([X,Y]) qui seront utilisé pour dessiner le polygone. Par défaut les points sont considérés par rapport à leur position dans la liste. Pour changer ce comportement, on utilise le paramètre path. Il définit pour chaque point le rang dans lequel il sera considéré pendant le dessin.
Par exemple, pour tracer un triangle rectangle isocèle dont l'angle droit est situé sur l'origine du repère dont les côtés font 100mm, il faut écrire le code suivant :
polygon(points=[[0,0],[100,0],[0,100]]);
Ce code une fois compilé (F5) produira le modèle suivant :
Pour faire des trous dans un polygone, il faut utiliser le paramètre paths en lui spécifiant plusieurs chemins. Le premier est le polygone externe et les suivants sont les trous. Par exemple pour transformer l'exemple ci-dessus en une belle équerre d'écolier, il faut écrire le code suivant :
polygon(points=[[0,0],[100,0],[0,100],[10,10],[80,10],[10,80]], paths=[[0,1,2],[3,4,5]]);
Ce code une fois compilé (F5) produira le modèle suivant :
Après, il est certain que le dessin à partir des coordonnées demande un effort d'abstraction certain nécessitant généralement de prendre un papier et un stylo.
Conseils
Ce tutoriel est assez simple à réaliser mais il pourra vous servir de référence par la suite pour la réalisation de modèle complexe.
Pour aller plus loin
Dans OpenScad, les formes 2D sont principalement utilisées en conjonction avec les opérateurs d'extrusions.