Catégories
Liens
Ceci est une ancienne révision du document !
<blockquote>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)</blockquote>
// 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 );
// 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); }
** difficulté pour extruder un .dxf ? > voir plugin Inkscape .scad converter
// 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");
Possible aussi en python avec Freecad et Blender. difficulté pour extruder un .dxf ? > voir plugin Inkscape .scad converter
/* * 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); } }
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 <nombibliotheque/fichier.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 <MCAD/motors.scad> include <MCAD/gears.scad> include <nutsnbolts/cyl_head_bolt.scad> include <Write.scad> // 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);
for(i=[0:36]) translate([i*10,0,0]) cylinder(r=5,h=cos(i*10)*50+60);
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); } } }
// 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); }