====== OpenSCAD ====== {{:logiciels:openscad:window.small.png|}}
OpenSCAD est un logiciel de modélisation tridimensionnelle rudimentaire. C'est un logiciel libre qui fonctionne à la fois sous Linux, Mac OS et Microsoft Windows. Le projet a débuté en Février 2010. OpenSCAD a pour particularité de fonctionner de façon entièrement paramétrique, c'est-à-dire que la conception passe par la rédaction d'un script dans une sous-fenêtre située à gauche, tandis qu'une sous-fenêtre à droite permet de visualiser l'objet en 3D, mais pas de l'éditer. (wikipedia)
* Fichiers : {{:logiciels:openscad:openscad_init.zip|tous les codes de cette page}} * Lien : http://www.openscad.org ===== Ressources===== * [[https://en.wikibooks.org/wiki/OpenSCAD_User_Manual|manuel complet]] * [[http://reprapide.fr/tutoriel-openscad-introduction|tutoriels en français]] * [[http://fablab-lannion.org/wp-content/tutos/openscad/#/pageDeGarde|tutoriels en français - fablab Lannion]] * [[http://edutechwiki.unige.ch/en/OpenScad_beginners_tutorial|tutoriels en anglais]] * [[http://www.thingiverse.com/tag:openscadtutorial|tutoriels thingiverse]] * [[http://fablabamersfoort.nl/book/openscad|tutoriels fablabamersfoort]] * [[http://www.openscad.org/cheatsheet/|cheatsheet]] * [[https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_User_Interface|user interface]] * [[http://openjscad.org/|éditeur en ligne]] ===== Installation===== * [[http://www.openscad.org/downloads.html|Téléchargement]] * Bibliothèques à télécharger : * [[https://github.com/elmom/MCAD|MCAD]] très pratique pour les pièces mécaniques (engrenages, moteurs, formes, etc.) * [[http://www.thingiverse.com/thing:16193|Write.scad]] pour l'écriture de texte. * [[https://github.com/JohK/nutsnbolts|nutsnbolts]] pour écrous et boulons. * Plugins Inkscape * [[http://libregraphicsworld.org/blog/entry/inkscape-gets-openscad-converter|Convertertisseur .dxf pour Inkscape]] * [[http://www.thingiverse.com/thing:25036|Inkscape to OpenSCAD converter]] ===== Exemples===== ==== Primitives 3D et transformations==== {{:logiciels:openscad:exemple_1.png|}} ++++ exemple_1.scad | // Unité = millimètre // Vecteur = point en 3D = [x,y,z] // CUBE // Arguments : dimensions (un nombre ou un vecteur), center (booléen) cube(5, true); translate([5,0,0]) rotate([45,0,0]) cube([5,10,2]); // SPHERE // Arguments : rayon, résolution ($fn), fragment angle ($fa), fragment size ($fs) translate([0,15,0]) sphere(5); translate([0,15,10]) sphere(5,$fn=5); translate([0,15,25]) scale(2) sphere(5,$fn=50); // CYLINDRE // Arguments : hauteur, rayon, rayon1, rayon2, center, $fa, $fs, $fn translate([0,-15,0]) color([1,0,0]) cylinder(h=10, r1=5, r2=10, center=true); // POLYHEDRE translate([0,-35,0]) polyhedron( points=[ [10,10,0],[10,-10,0],[-10,-10,0],[-10,10,0], // the four points at base [0,0,10] ], // the apex point triangles=[ [0,1,4],[1,2,4],[2,3,4],[3,0,4], // each triangle side [1,0,3],[2,1,3] ] // two triangles for square base ); ++++ ==== Modélisation simple avec opérations booléennes==== {{:logiciels:openscad:exemple_2.png|}} ++++ exemple_2.scad | // DIFFERENCE difference(){ cube(10, true); cylinder(h=15, r=2,$fn=20,center=true); rotate([90,0,0]) cylinder(h=15, r=2,$fn=20,center=true); rotate([0,90,0]) cylinder(h=15, r=2,$fn=20,center=true); } // INTERSECTION translate([20,0,0]) intersection() { sphere(6); cube(10,true); } //UNION translate([40,0,0]) union() { sphere(6); cube(10,true); } ++++ ==== Extrusion d'une forme 2D en 3D==== {{:logiciels:openscad:exemple_3.png|}} ** difficulté pour extruder un .dxf ? > voir [[http://libregraphicsworld.org/blog/entry/inkscape-gets-openscad-converter|plugin Inkscape .scad converter]] ++++ exemple_3.scad | // Rotation = révolution rotate_extrude($fn=20) polygon( points=[ [0,0],[2,6],[0,8] ] ); // Linéaire linear_extrude(height = 2) translate([3, 0, 0]) square(5); // Extrusion d'un fichier DXF linear_extrude(height = 2) scale (0.5) translate([20, 0, 0]) import (file = "ohw.dxf"); ++++ ==== Avantages du paramétrique ==== Possible aussi en python avec Freecad et Blender. {{:logiciels:openscad:exemple_4.png|}} difficulté pour extruder un .dxf ? > voir [[http://libregraphicsworld.org/blog/entry/inkscape-gets-openscad-converter|plugin Inkscape .scad converter]] ++++ exemple_4.scad | /* * EXEMPLE 4 : avantages d'un logiciel paramétrique * Accès aux principes de bases de la programmation : * Structures et fonctions */ // --------- Programme principal ---------------- // // Appel des modules, etc. difference(){ support(); trous(); } // --------- Variables (ou plutôt constantes) -- // longueur = 50; hauteur = 5; profondeur = 15; trou_rayon = 2; trou_nb = 6; $fn=20; // --------- Modules --------------------------- // module support() { union(){ cube([longueur,profondeur,hauteur]); color ([0,1,0]) translate ([0,profondeur/2,0]) cylinder(h=hauteur, r=profondeur/2); } } module trous() { for (i=[0:trou_nb-1]) { translate([i*5,profondeur/2,-1]) cylinder(h=hauteur+2, r=trou_rayon); } } ++++ ==== Utilisation des bibliothèques ==== [[https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Libraries|References]] Il suffit de décompresser le dossier et de le mettre dans le dossier de travail, puis d'importer le fichier voulu dans le document openscad avec include {{:logiciels:openscad:exemple_5.png|}} ++++ exemple_5.scad | /* * Utilisation des bibliothèques * - MCAD pour les engrenages et bien d'autres choses : https://github.com/elmom/MCAD * - nutsnbolts pour les écrous et boulons : https://github.com/JohK/nutsnbolts * - Write.scad pour le texte : http://www.thingiverse.com/thing:16193. * -- Attention, il faut placer les fichiers Letters.dxf et Write.scad dans le répertoire de travail */ // Importer les bibliothèques include include include include // Moteur pas à pas Nema 17 stepper_motor_mount(17); // Engrenages translate([0,0,15]) gear(number_of_teeth=51,circular_pitch=200); translate([0,0,15]) linear_extrude(height = 10, center = true, convexity = 10, twist = -45) gear(number_of_teeth=17,diametral_pitch=1); // Écrous et boulons $fn=60; translate([35,10,0]) screw("M5x10"); translate([35,-10,0]) nut("M4"); // Lettres translate([0,0,35]) rotate(90,[1,0,0]) write("Lieu de Fabrication Ouvert", h=4, t=1, center=true); ++++ ==== Autres exemples ==== {{:logiciels:openscad:exemple_6.png|}} ++++ exemple_6.scad | for(i=[0:36]) translate([i*10,0,0]) cylinder(r=5,h=cos(i*10)*50+60); ++++ {{:logiciels:openscad:exemple_7.png|}} [[http://golancourses.net/2014/category/13-parametric-object/|computational design]] ++++ exemple_7.scad | seashell(5,2); module seashell(turns, spine) { for ( i = [0 : 0.2 : turns] ) { rotate( i * 360/6, [100 * i, i, 0]) difference () { cylinder(h=i, r=i*spine/10, center = true); cylinder(h=i/2, r=i*2, center = true); } } } ++++ ==== Extrusion complexe ==== {{:logiciels:openscad:exemple_8.png|}} ++++ exemple_8.scad | // Example009.scad from OpenSCAD examples bodywidth = dxf_dim(file = "example009.dxf", name = "bodywidth"); fanwidth = dxf_dim(file = "example009.dxf", name = "fanwidth"); platewidth = dxf_dim(file = "example009.dxf", name = "platewidth"); fan_side_center = dxf_cross(file = "example009.dxf", layer = "fan_side_center"); fanrot = dxf_dim(file = "example009.dxf", name = "fanrot"); % linear_extrude(height = bodywidth, center = true, convexity = 10) import(file = "example009.dxf", layer = "body"); % for (z = [+(bodywidth/2 + platewidth/2), -(bodywidth/2 + platewidth/2)]) { translate([0, 0, z]) linear_extrude(height = platewidth, center = true, convexity = 10) import(file = "example009.dxf", layer = "plate"); } intersection() { linear_extrude(height = fanwidth, center = true, convexity = 10, twist = -fanrot) import(file = "example009.dxf", layer = "fan_top"); // NB! We have to use the deprecated module here since the "fan_side" // layer contains an open polyline, which is not yet supported // by the import() module. rotate_extrude(file = "example009.dxf", layer = "fan_side", origin = fan_side_center, convexity = 10); } ++++ * [[https://www.thingiverse.com/thing:34348|ex.1 fractal]] * [[http://www.thingiverse.com/thing:156984|ex.2 fractal]] * [[http://www.thingiverse.com/thing:19304|ex. gyroCube]] * [[https://gist.github.com/t-paul/7171783|ex. parametrique]] {{:logiciels:openscad:loft.png|}} {{:logiciels:openscad:loft1.png|}}