logiciel:openscad
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| logiciel:openscad [2017/11/10 15:18] – [Créer des volumes] ahuet | logiciel:openscad [2024/04/26 14:45] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 3: | Ligne 3: | ||
| OpenSCAD est un logiciel de modélisation 3D. Son originalité réside dans les faits que les volumes y sont décrit avec du code, ce qui est fort plaisant pour qui aime en écrire. | OpenSCAD est un logiciel de modélisation 3D. Son originalité réside dans les faits que les volumes y sont décrit avec du code, ce qui est fort plaisant pour qui aime en écrire. | ||
| + | Une archive contenant les exemples ci-dessous est disponible : {{logiciel: | ||
| ===== Liens utiles ===== | ===== Liens utiles ===== | ||
| - | [[http:// | ||
| - | [[http:// | + | *[[http:// |
| + | *[[http:// | ||
| + | *[[https:// | ||
| + | *[[https:// | ||
| + | *[[https:// | ||
| + | *[[https:// | ||
| - | [[https:// | + | ===== Concepts de bases ===== |
| - | [[https://www.thingiverse.com/thing:25036|Importer automagiquement les modèles Inkscape]] | + | * Les volumes créés doivent être Manifold : il faut donc faire attention à ne pas laisser exister de surface infiniment fines entres les volumes. |
| + | * Les volumes créés doivent être Watertigh aka étanches : cela ne posent pas de problèmes avec les primitives de bases, mais il faut bien y veiller lorsque l'on définit des ensemble de vecteurs par leurs coordonnées. | ||
| + | * Bien que le pseudo-langage soit [[https://fr.wikipedia.org/wiki/ | ||
| + | * Lorsque l'on travaille sur on modèle, on utilise le mode de prévisualisation, | ||
| + | * Certains caractères sont des modificateurs, | ||
| + | * '' | ||
| + | * '' | ||
| + | * ''#'' | ||
| + | * '' | ||
| + | * Les instructions finissent par des points virgules. Un point virgule de trop peut provoquer des bugs peut aisés à diagnostiquer pour le débutant. Lorsque l'on oublie un point virgule, le compilateur souligne la ligne suivante. | ||
| ===== Installation ===== | ===== Installation ===== | ||
| Ligne 21: | Ligne 35: | ||
| ===== Créer des volumes ====== | ===== Créer des volumes ====== | ||
| - | Comme expliqué dans le [[http:// | + | Comme expliqué dans le [[http:// |
| Bien que cela ne soit pas obligatoire, | Bien que cela ne soit pas obligatoire, | ||
| + | |||
| + | Les principales primitives sont les suivantes : | ||
| + | |||
| + | <code c> | ||
| + | |||
| + | <code c> | ||
| + | |||
| + | <code c> | ||
| + | |||
| + | Voici un exemple à copier-coller pour avoir un aperçu rapide des possibilités : | ||
| + | |||
| + | <code c> | ||
| + | /* On définit une sphère par son rayon */ | ||
| + | sphere(r = 42); | ||
| + | /* On définit une sphère par son diamètre */ | ||
| + | translate([100, | ||
| + | |||
| + | /* On définit un cube régulier de coté trente */ | ||
| + | translate([0, | ||
| + | /* On définit une cube avec des dimensions differentes suivant les axes, centrée sur l´origine */ | ||
| + | translate([100, | ||
| + | |||
| + | /* Les cylindre sont définit par leur hauteur et par leur largeur */ | ||
| + | translate([0, | ||
| + | /* Le largeur peut être différente aux deux extrémités. La hauteur peut être centrée */ | ||
| + | translate([100, | ||
| + | </ | ||
| + | |||
| + | ===== Primitives 2D ===== | ||
| + | |||
| + | Les principales primitives 2D sont les suivantes : | ||
| + | |||
| + | <code c> | ||
| + | <code c> | ||
| + | <code c> | ||
| + | | ||
| + | | ||
| + | |||
| + | Ces primitives sont couramment utilisés en association avec les fonctions d' | ||
| + | |||
| + | <code c> | ||
| + | linear_extrude(height, | ||
| + | rotate_extrude(angle, | ||
| + | </ | ||
| + | |||
| + | Voici un exemple à copier-coller pour avoir un aperçu de ce qu'il est possible d'en faire : | ||
| + | <code c> | ||
| + | // On extrude linéairement sur 25mm | ||
| + | linear_extrude(height = 25) { | ||
| + | // On définit un carré régulier de coté trente | ||
| + | translate([200, | ||
| + | // On définit un carré avec des dimensions differentes suivant les axes, centrée sur l' | ||
| + | translate([300, | ||
| + | } | ||
| + | |||
| + | // L' | ||
| + | // Attention, le paramètres ' | ||
| + | rotate_extrude(angle = 142) { | ||
| + | // On définit un cercle par son rayon | ||
| + | translate([150, | ||
| + | // On définit un cercle par son diamètre | ||
| + | translate([150, | ||
| + | } | ||
| + | |||
| + | |||
| + | translate([0, | ||
| + | linear_extrude(25) { | ||
| + | // Il est très facile d' | ||
| + | text(" | ||
| + | // Toutes les polices du systèmes sont disponibles | ||
| + | translate([0, | ||
| + | text(" | ||
| + | size = 12, | ||
| + | font = " | ||
| + | } | ||
| + | </ | ||
| + | ===== Transformations ===== | ||
| + | |||
| + | ==== Transformations de base ==== | ||
| + | |||
| + | Les transformations les plus couramment utilisées sont les suivantes : | ||
| + | |||
| + | <code c> | ||
| + | <code c> | ||
| + | <code c> | ||
| + | |||
| + | Il existe également une directive '' | ||
| + | |||
| + | Voici un exemple à copier-coller pour avoir un aperçu rapide des possibilités : | ||
| + | |||
| + | <code c> | ||
| + | // Le volume de base sans transformation | ||
| + | cube(42); | ||
| + | |||
| + | // On effectue une translation de 100mm sur l'axe des X | ||
| + | color(" | ||
| + | |||
| + | // On effectue une translation puis une rotation | ||
| + | color(" | ||
| + | |||
| + | // On remarque que le résultat d'une rotation suivie d'une translation est différent | ||
| + | color(" | ||
| + | |||
| + | // De même, lorsque l'on redimensionne, | ||
| + | color(" | ||
| + | color(" | ||
| + | </ | ||
| + | |||
| + | ==== Transformations avancées ==== | ||
| + | |||
| + | === La fonction Hull === | ||
| + | |||
| + | La fonction '' | ||
| + | |||
| + | <code c> | ||
| + | // On crée un bouclier englobant toutes les formes utilisés dans le premier exemple | ||
| + | hull() { | ||
| + | sphere(r = 42); | ||
| + | translate([100, | ||
| + | translate([0, | ||
| + | translate([100, | ||
| + | translate([0, | ||
| + | translate([100, | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Cette fonction est très pratique pour concevoir rapidement des objets de type boîtier. | ||
| + | |||
| + | === La fonction Minkowski === | ||
| + | |||
| + | Cette fonction applique une [[http:// | ||
| + | C'est très pratique pour créer des chanfreins et des angles arrondis, il faut bien penser à prendre en compte son effet sur les dimensions des volumes créés. Ainsi, la cube à bord arrondis décrit ci-après aura bien une dimension de 50mm (42 + 2*4). | ||
| + | |||
| + | <code c> | ||
| + | // $fn définit le nombre de facette qui compose une sphère | ||
| + | $fn=50; | ||
| + | |||
| + | //Un cube de 50mm aux bord arrondis sur 4mm. | ||
| + | minkowski() { | ||
| + | cube(42); | ||
| + | // coins arrondis | ||
| + | sphere(4); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | '' | ||
| ===== Opération booléennes ===== | ===== Opération booléennes ===== | ||
| + | |||
| + | '' | ||
| + | |||
| + | <code c> | ||
| + | union() | ||
| + | difference() | ||
| + | intersection() | ||
| + | </ | ||
| + | |||
| + | Elle peuvent être combinées pour créer facilement des volumes complexes. On notera ici que '' | ||
| + | |||
| + | <code c> | ||
| + | // Intersection avec un cylindre à 6 facette, pour créer une tête hexagonale. | ||
| + | intersection() { | ||
| + | // Union entre la tête et le corps | ||
| + | union() { | ||
| + | translate([0, | ||
| + | // Difference pour le trou dans le corps | ||
| + | difference() { | ||
| + | $fn = 50; | ||
| + | cylinder(d = 25, h = 100); | ||
| + | translate([0, | ||
| + | } | ||
| + | } | ||
| + | $fn = 6; | ||
| + | #cylinder(d = 45, h = 110); | ||
| + | } | ||
| + | </ | ||
| ===== Boucles ===== | ===== Boucles ===== | ||
| - | ===== Concepts importants | + | |
| + | Il est possible de définir des boucles '' | ||
| + | |||
| + | <code c> | ||
| + | // 10 cubes rouges de tailles différentes | ||
| + | color(" | ||
| + | |||
| + | // 4 sphères vertes différentes réunis par un bouclier | ||
| + | color(" | ||
| + | hull() { | ||
| + | for (ball_size | ||
| + | if (ball_size % 2) | ||
| + | translate([ball_size, | ||
| + | else | ||
| + | translate([-ball_size, | ||
| + | }; | ||
| + | } | ||
| + | |||
| + | // 20 cylindre bleu en rotation | ||
| + | color(" | ||
| + | for (angle | ||
| + | translate([0, | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Les boucles se prêtent bien aux jeux trigonométriques : | ||
| + | |||
| + | <code c> | ||
| + | $fn = 3; | ||
| + | |||
| + | // 12960 ensembles de cylindres qui changent de couleurs en parcourant une sphère | ||
| + | for (i = [0:1:360]) { | ||
| + | for (j = [0:10:359]) { | ||
| + | color([sin(i), | ||
| + | rotate([i, j, 0]) | ||
| + | translate([100, | ||
| + | union() { | ||
| + | cylinder(r | ||
| + | cylinder(r | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Export ===== | ||
| + | |||
| + | L' | ||
| + | |||
| + | Il est également possible d' | ||
| + | |||
| + | <code c> | ||
| + | projection() { | ||
| + | difference() { | ||
| + | cylinder(r = 4); | ||
| + | cylinder(r = 2); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
logiciel/openscad.1510323531.txt.gz · Dernière modification : 2024/04/26 14:45 (modification externe)
