Le logiciel de CAO OpenSCAD

S’il y a un domaine que j’ai du mal à maitriser, c’est celui de la CAO. La plupart des logiciels sont pourtant étudiés pour être faciles à utiliser mais dans tous les cas je me trouve confronté à une pléthore de commandes clavier ou combinaisons de touches et d’action de la souris qui me rebutent et me font abandonner rapidement l’apprentissage.

Avec le monde du reprap, j’ai découvert un logiciel libre assez original et vraiment compatible avec le programmeur informatique que je suis. OpenSCAD est, comme son nom l’indique un logiciel de CAO (CAD en english) ouvert. Il a une particularité, peu commune aux logiciels grand public, il n’a pas d’interface de construction graphique mais utilise un langage de programmation.

openSCAD_scr

Ici la création de formes se fait à l’aide d’instructions de commandes telles que :

cylinder(r=10,h=50);

De même le positionnement des objets créés se fait à l’aides d’instructions telles que translate ou rotate. Les instructions consistent essentiellement en l’appel de fonctions de positionnement et de création de forme mais aussi de règles de combinaisons telles que union pour unir différents objets ou difference pour ôter la forme d’un objet ou ensemble d’objets d’un autre objet ou ensemble d’objets.

Ainsi pour positionner et orienter un cylindre, dans une instruction on va faire se succéder les commandes suivantes :

translate([10,0,0]) 
  rotate([0,90,0]) 
  cylinder(r=10, h=50, center=true);

Les variables contenues dans les crochets carrés représentent les valeurs pour les axes x,y et z. ainsi dans l’exemple qui précède on va positionner l’origine de l’objet créé à x = 10, y = 0 et z = 0. Ensuite on va le pivoter de 90 degrés autour de l’axe y puis on va le dessiner.Dans la commande cylinder on spécifie le rayon de base avec r=10 (on peut aussi spécifier un deuxième rayon et dans ce cas openSCAD dessine un tronc de cône) et la hauteur : h=50. Enfin on peut spécifier si l’origine se trouve au centre du solide ou bien au coin inférieur gauche avec le paramètre center.

Au final on obtient :

openSCAD_ex01

Dans openSCAD, une instruction est une ligne comprenant une ou plusieurs commandes se terminant par un point-virgule.

Pour dessiner un objet constitué de plusieurs éléments, on va utiliser des fonctions de combinaison :

union() {
  cylinder(r=2, h=50, center=true, $fn=180);
  difference() {
    translate([0,0,33])
      rotate([90,0,0])
       cylinder(r=10, h=4, center=true, $fn=180);
    translate([0,0,33])
      rotate([90,0,0])
      cylinder(r=8, h=, center=true, $fn=180);
  }
  translate([5,0,-20])
     cube([10,3,10], center=true);
}

Nous avons ici dessiné une clé :

openSCAD_ex02

On notera la présence du paramètre $fn dans la fonction cylinder. Il s’agit d’une variable spéciale qui permet de définir le niveau de précision dans le dessin d’un cercle. Ici on définit le nombre de segments  à dessiner : 180 ce qui permet d’avoir un cercle plus lisse.

Pour dessiner la clé nous avons combiné le dessin d’un cylindre de 5cm de long et 2mm de diamètre pour la tige. A cela nous ajoutons la différence de deux cylindres concentriques de 4mm d’épaisseur et 10 et 8 mm de rayon que nous déplaçons à l’extrémité de la tige et pivotons de 90 degrés pour faire l’anneau. Enfin nous ajoutons le panneton à l’aide d’un cube.

Comme tout langage de programmation, celui-ci est muni d’instructions de contrôle telles que les tests conditionnels, les boucles for et while. L’utilisation de variables et de constantes, la création de fonctions, l’inclusion de fichiers externes, l’import de fichiers de formats différents (STL) permettent d’aller très loin dans la création.

Voici un exemple de code pour créer une fixation de courroie crantée pour la Prusa-Mendel écrit par Josef Prusa :

// PRUSA Mendel
// Belt clamp
// GNU GPL v3
// Josef Prusa
// josefprusa@me.com
// prusadjs.cz
// http://www.reprap.org/wiki/Prusa_Mendel
// http://github.com/prusajr/PrusaMendel

#include <configuration.scad>

/**
* @id belt-clamp
* @name Belt clamp
* @category Printed
*/

module beltclamp(){
  difference(){
    union(0){
      translate(v = [0,0,3.5]) cube([18,10,7], center=true);
      translate(v = [-9, 0, 0]) cylinder(r=5,h=7);
      translate(v = [9, 0, 0]) cylinder(r=5,h=7);
    }
    translate(v = [-9, 0, -1])polyhole(m3_diameter, 12);
    translate(v = [9, 0, -1]) polyhole(m3_diameter, 12);
    translate(v = [0,0,6.5]){
    translate(v = [0,0,5])cube(size = [7, 1.8, 10], center = true);
    translate(v = [0,2.5,5])cube(size = [7, 1.8, 10], center = true);
    translate(v = [0,5,5])cube(size = [7, 1.8, 10], center = true);
    translate(v = [0,-2.5,5])cube(size = [7, 1.8, 10], center = true);
    translate(v = [0,-5,5])cube(size = [7, 1.8, 10], center = true);
  }
}

beltclamp();

Ce qui donne au final :

belt_clamp

L’avantage de cet outil pour moi est bien sûr le fait d’utiliser un langage de programmation, c’est un univers que je maîtrise de par mon métier. C’est aussi le fait de pouvoir paramétrer les éléments composant les pièces. Cela permet d’adapter facilement les cotes du dessin si les dimensions d’un élément extérieur est différente de celle pour laquelle la pièce a été conçue ou bien s’il faut prévoir plusieurs options de construction possibles.

Nous allons maintenant réécrire le code de notre clé afin de pouvoir la dessiner avec, comme paramètre, la définition du panneton.

module cle(p1, p2, p3) {
  union() {
    cylinder(r=2, h=50, center=true, $fn=180);
    difference() {
      translate([0,0,33])
        rotate([90,0,0]) 
        cylinder(r=10, h=4, center=true, $fn=180);
      translate([0,0,33])
        rotate([90,0,0])
        cylinder(r=8, h=5, center=true, $fn=180);
    }
    difference() {
      translate([5,0,-18]) cube([10,3,12], center=true);
      translate([10,0,-14]) cube([p1,6,4.1], center=true);
      translate([10,0,-18]) cube([p2,6,4.1], center=true);
      translate([10,0,-22]) cube([p3,6,4.1], center=true);
    }
  }
}

cle(2,8,4);

Ce qui donne :

openSCAD_ex03

Et voilà le début d’un code qui aurait permis aux Dalton d’économiser bien des caisses de dynamite …

Je vais bien évidemment approfondir mes connaissances avec ce logiciel et ne tarderai pas à revenir écrire à son sujet.

Le site d’OpenSCAD : http://www.openscad.org

Ce contenu a été publié dans Reprap, avec comme mot(s)-clé(s) . Vous pouvez le mettre en favoris avec ce permalien.