====== 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
/*
* 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|}}