Tutoriel OpenSCAD 3 – Écriture et syntaxe

Page suivante : Formes 2D

Voici les principales règles d’écriture et de syntaxe. Un mémento de la syntaxe, des opérateurs et fonctions figure sur le site d’OpenSCAD : OpenSCAD CheatSheet.

Extension .scad

Les fichiers contenant les scripts OpenSCAD, c’est à dire l’ensemble des commandes de dessin d’un objet, portent l’extension .scad.

Point-virgule

Chaque commande ou ensemble de commandes se termine par un point-virgule :

  cube ([30,20,10], center=true);
  translate ([0,0,5]) cube ([30,20,10], center=true);

Les commandes de transformation peuvent se combiner. Elles ne sont pas séparées par un point-virgule de l’objet auquel elles s’appliquent. Exemple du déplacement d’un cube qu’on pivote également :

  translate ([0,0,5]) rotate ([0,0,90]) cube ([30,20,10], center=true);

Espaces

Les espaces ou tabulations n’ont pas d’importance, la commande ci-dessus peut s’écrire sur plusieurs lignes pour en faciliter la lecture :

  translate ([0,0,5])
    rotate ([0,0,90])
      cube ([30,20,10], center=true);

Dimensions, triplets, millimètres

Les dimensions ou distances tridimentionnelles, en paramètre des commandes comme cube(), translate() ou rotate(), sont des triplets ou vecteurs. Elles figurent entre crochets droits dans l’ordre X, Y, Z (largeur, profondeur, hauteur). L’unité est le millimètre. Si on a besoin d’indiquer des fractions de millimètre, le séparateur décimal est le point :

  cube ([30.4, 20.66, 10.18]);

Parenthèses, paramètres

Les parenthèses suivant le nom d’une commande doivent toujours être présentes, qu’elles contiennent ou non des paramètres. Dès qu’il y a plusieurs lignes auxquelles s’applique un commande de transformation, ces lignes doivent être entourées par deux accolades, l’une ouvrante et l’autre fermante. Exemple avec la commande difference(), qui soustrait du premier objet dessiné tous ceux qui le suivent. Ici nous dessinons un cône, en creux, dans un cube :

  difference ()
  {
    cube (10, center=true);
    cylinder (r1=0, r2=9, h=12, center=true);
  }

Commentaires

On peut introduire un commentaire sur une ligne ou en fin de ligne en le faisant précéder de deux slashes :

  // voici un commentaire

  cube (10);  // voici un cube de 10

Commentaire sur plusieurs lignes :

  /*
    voici un cube de 10
    millimètres de côté
  */

  cube (10);

Variables

On peut définir des variables, des noms associés à des valeurs. Si ces valeurs sont utilisées plusieurs fois dans le code leur modification sera simplifiée. Exemple avec deux cubes dessinés côte à côte et dont l’écartement sera de 5 mm quelle que soit leur taille :

  a = 10;  // a contient la dimension de l'arête du cube

  cube (a);
  translate ([a+5, 0, 0]) cube (a);  // on ajoute 5 à la valeur de a, pour le déplacement en X du 2e cube

Opérations

Toutes les opérations habituelles sont possibles sur les variables, elles sont recensées dans la page sur les opérateurs du manuel d’OpenSCAD. Addition, soustraction, multiplication, division et modulo, comparaisons etc.

Itérations et conditions

On peut répéter une commande plusieurs fois avec une boucle for, ou l’exécuter sous condition if / else. Voici la page du manuel. Pour dessiner six cubes de tailles et d’espacements progressifs :

  for (i = [5:10])  // pour i valant de 5 à 10
  {
    translate ([0, i*i, 0]) cube (i);  // dessin d’un cube d’arête i 
  }

Rendu d’OpenSCAD montrant 5 cubes

Pour dessiner une sphère dont la taille change selon une condition :

  x = 12;
  y = 15;

  if (x > y)  // si x est supérieur à y
  {
    sphere (x);
  }
  else  // sinon (soit x inférieur ou égal à y)
  {
    sphere (y);
  }

Modules

On peut créer un module si un élément d’objet doit être utilisé plusieurs fois dans le même dessin ou des dessins différents. Par exemple un module dessinant une rondelle et nommé rondelle(), ayant trois paramètres :

/*
  paramètres :
  di : diamètre intérieur
  de : diamètre extérieur
  e  : épaisseur
*/

module rondelle (di, de, e)
{
  $fn=100;
  difference ()
  {
    cylinder (r=de/2, h=e);
    translate ([0,0,-1]) cylinder (r=di/2, h=e+2);
  }
}

Le module rondelle() peut figurer dans le script où il est utilisé, il est appelé par la commande :

  rondelle (3, 5, 1);  // diamètre intérieur 3 mm, extérieur 5 mm, épaisseur 1 mm

Il peut aussi être utilisé depuis un autre script, après avoir été importé dans le script courant :

  use <chemin/vers/fichier.scad>  // importation du fichier contenant le module rondelle()

  rondelle (3, 5, 1);

Le module rondelle() appelé plusieurs fois avec des paramètres de taille différents :

Rendu d’OpenSCAD montrant l'utilisation du module rondelle()

Variables spéciales

$fn, $fa et $fs contrôlent le nombre, l’angle et la taille minimum des faces composant une courbe. Je n’utilise couramment que $fn (facets number) pour contrôler le nombre de faces d’un cylindre ou d’un cône, un nombre élevé donnant un dessin précis :

  translate ([-22,0,0]) cylinder (r=10, h=20, $fn=6);
  cylinder (r=10, h=20);
  translate ([22,0,0]) cylinder (r=10, h=20, $fn=100);

Rendu d’OpenSCAD montrant 3 cylindres

$fn est à 6 pour le premier cylindre, ce qui dessine un hexagone. $fn n’est pas indiqué pour le second cylindre, et mis à 100 pour le troisième.

Un $fn élevé augmente sensiblement le temps de calcul de la compilation/prévisualisation (F5), et surtout du rendu (F6). Il augmente aussi le temps de génération du Gcode à partir du fichier STL. $fn doit donc être le plus bas possible tout en donnant un rendu acceptable.

Au lieu d’être indiqué comme ci-dessus en paramètre d’une commande de dessin, $fn peut aussi l’être directement dans le code source :

  $fn=100;

Il s’applique alors à toutes les commandes de dessin suivantes comportant des courbes.

Caractères de modification

Plusieurs caractères de modification existent, pour ignorer ou colorer une partie d’un script. Le plus important à mon sens est le dièze #, lorsqu’il est utilisé pour colorer (en rose) un élément qu’on soustrait à un autre :

  $fn=100;

  difference ()
  {
    cylinder (r=10, h=5);
    translate ([0,0,-1]) #cylinder (r=8, h=7);
  }

Rendu d’OpenSCAD avec caractère de modification #

Le positionnement de l’élément soustrait est facilité. Les caractères de modification peuvent concerner une seule commande de dessin comme ci-dessus, ou une partie plus importante d’un script. Ils concernent la prévisualisation (F5) non le rendu final (F6) avant exportation en STL.

Page suivante : Formes 2D

• Publié le 19/07/2013 - modifié le 27/03/2014