# data[].attributes.body
OpenSCAD è un software di modellazione di oggetti 3D basato su un linguaggio di programmazione script tipo il C

# data[].attributes.body
Come esempio, ho preso alcune pagine da un libro recente di IOT (Internet Of Things) con la scheda Raspberry dove usano OpenScad per realizzare i contenitori delle schede elettroniche di Arduino, Raspberry, ESP8266, Sensori.

# data[].attributes.headline
Lezione 2: Trasformazioni di base con OpenSCAD

# data[].attributes.subject
Lezione 2: Trasformazioni di base con OpenSCAD

# data[].attributes.body
Una volta definita la figura 3D da disegnare, è necessario sottoporla
ad una trasformazione. Le trasformazioni possono essere:
· traslazione
· rotazione
· scalatura
· unione
· differenza
· intersezione

# data[].attributes.body
Sperimenta le tue competenze dopo le prime due lezioni in laboratorio

# data[].attributes.body
Da tenere sempre sott'occhio.
Avete anche il ciclo "for" quando dovete ripetere delle sequenze.

# data[].attributes.body
// Unità = millimetri

// CUBO
cube(5, true);
translate([5,0,0])
rotate([45,0,0])
cube([5,10,2]);

// SFERA
translate([0,15,0]) sphere(5);
translate([0,15,10]) sphere(5,$fn=5);
translate([0,15,25]) scale(2) sphere(5,$fn=50);

// CILINDRO
translate([0,-15,0]) color([1,0,0]) cylinder(h=10, r1=5, r2=10, center=true);

// POLIEDRO
translate([0,-35,0])
polyhedron(
points=[ [10,10,0],[10,-10,0],[-10,-10,0],[-10,10,0], // i quattro punti di base
[0,0,10]  ],                                 // il vertice
triangles=[ [0,1,4],[1,2,4],[2,3,4],[3,0,4],          // ciascun lato triangolare
[1,0,3],[2,1,3] ]                         // due triangoli per la base quadrata

# data[].attributes.body
// DIFFERENZA
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);
}

// INTERSEZIONE
translate([20,0,0])
intersection() {
sphere(6);
cube(10,true);
}

//UNIONE
translate([40,0,0])
union() {
sphere(6);
cube(10,true);
}

# data[].attributes.body
// Estruzione dal 2D al 3D
// Preparare con il CAD un disegno in formato .DXF e salvatelo con il nome "ohw.dxf"
// Esempio funzionante con la versione desktop scaricabile dal sito http://www.openscad.org/

// Estrusione per rotazione (rivoluzione)
rotate_extrude($fn=20) polygon( points=[ [0,0],[2,6],[0,8] ] );

// Estrusione lineare
linear_extrude(height = 2)
translate([3, 0, 0])
square(5);

// Estrusione di un disegno .DXF
linear_extrude(height = 2)
scale (0.5)
translate([20, 0, 0])
import (file = "ohw.dxf");

# data[].attributes.body
// --------- Programma principale ---------------- //
difference(){
supporto();   // richiamo il modulo supporto
fori();            // richiamo il modulo fori
}

// --------- Variabili e costanti utilizzate nel programma -- //
lunghezza = 50;
altezza = 5;
profondita = 15;
foro_rayon = 2;
foro_nb = 6;
$fn=20;

// --------- Moduli (module) del programma principale --------------------------- //
module supporto() {
union(){
cube([lunghezza,profondita,altezza]);
color ([0,1,0])
translate ([0,profondita/2,0])
cylinder(h=altezza, r=profondita/2);
}
}

module fori() {
for (i=[0:foro_nb-1]) {
translate([i*5,profondita/2,-1])
cylinder(h=altezza+2, r=foro_rayon);
}
}

# data[].attributes.body
// Esempio funzionante solo con la versione desktop scaricabile dal sito http://www.openscad.org/ ed installando le librerie indicate nell'esempio
// Importa le librerie
include <MCAD/motors.scad>
include <MCAD/gears.scad>
include <nutsnbolts/cyl_head_bolt.scad>
include <Write.scad>

// Motore a norma Nema 17
stepper_motor_mount(17);

// Ingranaggi
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);

// Bulloneeria
$fn=60;
translate([35,10,0]) screw("M5x10");
translate([35,-10,0]) nut("M4");

// Lettere
translate([0,0,35])
rotate(90,[1,0,0])
write("I.S. Marconi", h=4, t=1, center=true);

# data[].attributes.body
// Esempio funzionante solo con la versione desktop scaricabile dal sito http://www.openscad.org/
for(i=[0:36])
translate([i*10,0,0])
cylinder(r=5,h=cos(i*10)*50+60);

# data[].attributes.body
// Esempio funzionante solo con la versione desktop scaricabile dal sito http://www.openscad.org/

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);
}
}
}

# data[].attributes.body
// Esempio funzionante solo con la versione desktop scaricabile dal sito http://www.openscad.org/ ed installando le librerie indicate nell'esempio
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");

rotate_extrude(file = "example009.dxf", layer = "fan_side",
origin = fan_side_center, convexity = 10);
}

# data[].attributes.body
Logo OpenScad