Découverte des opération de transformation géométrique d'OpenSCAD

De Wiki L.A.B
Aller à : navigation, rechercher
Logo union.jpg


Présentation et objectifs

Ce tutoriel a pour but de faire découvrir les primitives de transformation géométrique du langage OpenSCAD. Il vous permettra d'apprendre à utiliser les primitives suivantes :

  • difference(),
  • union(),
  • intersection(),
  • translate(),
  • rotate().

Ces primitives sont vraiment le coeur de la puissance d'OpenSCAD. Grâce à leur utilisation, il devient très facile de produire des formes non triviales.

Pré-requis

Avant de faire ce tutoriel, il faut comprendre la logique d'utilisation d'OpenSCAD et la base des la modélisation 2D et 3D. Si vous n'avez jamais ouvert ce logiciel, vous pouvez suivre le tutoriel suivant :

Découverte des opérations de transformation géométrique

Les primitives découvertes jusqu'à présent se suffise à elle-même. Elle n'ont pas connaissance des objets qui les entourent et cela ne pose pas de problème. Pour les opérations de transformation géométrique, les choses sont différentes, car elles n'ont de sens que par rapport aux objets sur lesquels elles s'appliquent.

Dans la syntaxe du langage, une opération de transformation s'appliquera à la commande qui la suit. Si jamais on a besoin de l'appliquer à un groupe d'objet, il suffira de placer les commandes entre accolades {}.

Première primitive : translate()

Cette primitive, déplace un élément ou un groupe d’éléments. Elle sert au position­nement relatif des éléments composant un objet. Elle sert aussi au positionnement d’un objet sur l’origine du système de coordonnées et à en faire coïncider la base avec le plan xOy. L’objet pourra alors être correctement imprimé, au centre du plateau d’impression.

Le seul paramètre de translate() est un triplet. Il s’applique à un seul objet, ou à un groupe d’objets avec des accolades :

translate([x,y,z])

Ci-dessous, quelques exemples d'utilisation de la cette primitive à expérimenter pour mieux comprendre ses possibilités :

cube(2,center = true); 
translate([5,0,0]) 
    sphere(1,center = true);

translate ([10,2,16]){
    cylinder (r=2, h=9);
    cube(9);
}

L'indentation (les espace en début de ligne) n'est qu'une convention pour améliorer la lisibilité. Le principe est de décaler à droite tous les éléments sur lesquels s'appliquent la transformation. Ça permet de repérer en un coup d’œil la structuration logique du modèle. Attention, à ne pas faire une confiance aveugle à l'indentation et quand vous avez des comportements inattendus, vérifiez toujours que vous n'avez pas oublié d'accolades.

Par exemple, le code ci dessous peut facilement vous induire en erreur :

translate ([10,2,16])
    cylinder (r=2, h=9);
    cube(9);

Deuxième primitive : rotate()

L'opérateur rotate() permet d'appliquer une rotation à un objet ou un groupe d'objet. Comme nous sommes dans un univers 3D, il y a 3 axes de rotation (X,Y,Z). L'angle passé en paramètre, sera donc un triplet indiquant l'angle de rotation suivant chacun des axes.

rotate([x,y,z])

Ci-dessous, quelques exemples d'utilisation de la cette primitive à expérimenter pour mieux comprendre ses possibilités :

rotate ([0,0,90]) cube([5,10,20]);
rotate ([0,90,0]) cube([5,10,20]);
rotate ([90,0,0]) cube([5,10,20]);
rotate ([30,30,30]) cube([5,10,20]);

Troisième primitive : union()

Les trois prochaines opérations, sont des opérateurs ensemblistes. Leur action permet de réaliser de nouveaux objets par des compositions particulieres. union() réalise l’assemblage de plusieurs éléments. Cela n’a généralement pas d’effet visuel mais un effet sur la logique d’assemblage des éléments d’un objet. union() ne comporte pas de paramètre et s’applique à un groupe d’objets mis entre accolades.

union();

Ci-dessous, quelques exemples d'utilisation de la cette primitive à expérimenter pour mieux comprendre ses possibilités :

union() {
        cylinder (h = 4, r=1, center = true, $fn=100);
        rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
}

Le paramètre $fn étant le même dans les deux cylindres, on aurait pu le spécifier globalement.

Quatrième primitive : difference()

difference() soustrait une ou plusieurs formes d’une autre, ou de plusieurs autres si elles sont regroupées par union(). Dans les accolades, obligatoires, toutes les formes présentes après la première sont extraites de celle-ci.

difference()

Ci-dessous, quelques exemples d'utilisation de la cette primitive à expérimenter pour mieux comprendre ses possibilités :

difference() {
        cylinder (h = 4, r=1, center = true, $fn=100);
        rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
}

Cinquième primitive : intersection()

intersection() dessine les parties communes de plusieurs éléments. L’ordre des élé­ments entre les accolades est indifférent.

intersection()

Ci-dessous, quelques exemples d'utilisation de la cette primitive à expérimenter pour mieux comprendre ses possibilités :

intersection() {
        cylinder (h = 4, r=1, center = true, $fn=100);
        rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
}

Pour aller plus loin

Plusieurs tutoriels seront proposé dans la catégorie OpenSCAD.

Bibliographie