OpenScad
OpenSCAD is een ontwerptool voor het tekenen van 3D objecten. De designs worden gemaakt door code te schrijven. De code lijkt heel erg op php en zal daarom waarschijnlijk snel vertrouwd aanvoelen. OpenSCAD wordt veel gebruikt door ontwerpers om onderdelen en prototypes te ontwerpen van modellen, om die vervolgens met een 3D-printer uit te kunnen printen. OpenSCAD is niet gericht op het maken van mooie 3D renders, daar gaan we later naar kijken, OpenSCAD is bedoeld om technische tekeningen te maken.
Meedoen
Om mee te doen met de stapjes in deze les kun je het beste OpenSCAD even op je computer installeren. Er is ook een web interface, deze kun je voor nu ook even gebruiken. Het programma werkt prettiger.
Eerste stapjes
Er zijn verschillende manieren om tot een ontwerp te komen, vandaag gaan we als een soort beeldhouder te werk door ons ontwerp op te bouwen uit kleine bouwblokjes. Maten zijn in OpenSCAD altijd in millimeters.
Primitives
Primitives zijn basis bouwblokken van waaruit meer complexe vormen gemaakt kunnen worden door samen te voegen.
Soort object | Omschrijving | Voorbeeld |
cube | Een cubus | cube([20,30,10]); // Een cubus, 20mm breed, 30mm lang, 10mm hoog |
sphere | Een bol | sphere(d = 10); // een bol met een diameter van 10mm. |
cylinder | Een cylinder of kegel | cylinder(d=100, h= 50); // een cylinder met een diameter van 100mm die 50mm hoog is. |
polyhedron | Een veelvlakkig object | Zie documentatie |
Neem de onderstaande code over en render door op F5 te drukken (of op play button als je webinterface gebruikt). Als het goed is zie je dan een kubus verschijnen, de afmetingen van de kubus zijn 20mm breed bij 30mm lang bij 10mm hoog.
1
2
//teken een cubus van 20 x 30 x 10 mm
cube([20,30,10]);
Transformaties
Transformaties doen iets met een object, bijvoorbeeld het verplaatsen or draaien of uittrekken, spiegelen etc.
Verplaatsen
Met translate
kun je een object verplaatsen.
1
2
3
4
translate([25,25,0]){
cube([50,50,40]);
}
cube([100,100,10]);

Booleaanse bewerkingen
Misschien heb je weleens gehoord van AND, NOT en OR, je hebt ze al veel gebruikt in elk geval want if then en else zijn er op gebaseerd.
Titel | In het nederlands | Operatie | Uitleg |
union | Samenvoegen | OR | Maak een samengevoegd object van 2 of meer andere objecten en laat dat object de ruimte innemen van alle objecten die je er in hebt gezet |
difference | Aftrekken / Verschil | NOT | Haal alles van object 1 weg waar het overlapt met object 2, 3 et cetera |
intersection | Waar ze overlappen | AND | Laat alleen de stukken staan waar de objecten elkaar overlappen. |
Union (samenvoegen)
Objecten samenvoegen kan met de union functie.
1
2
3
4
5
// Samenvoegen
union(){
cube([100,100,10]);
cube([50,50,40]);
}

Difference (verschil, aftrekken)
Je kan objecten ook van elkaar aftrekken, hiervoor is de difference functie
1
2
3
4
difference(){
cube([50,50,40]);
cube([100,100,10]);
}

Intersect (waar ze overlappen)
Met intersection blijft alleen het stuk van een of meerdere objecten over waar overlap is.
1
2
3
4
intersection(){
cube([50,50,40]);
cube([100,100,10]);
}

Variabelen
Wanneer tekeningen complexer worden dan is het handiger om variabelen te gaan gebruiken voor afmetingen.
1
2
3
4
5
telefoonLengte = 165.22;
telefoonBreedte = 75.73;
telefoonDikte = 9.14;
cube([telefoonLengte,telefoonBreedte,telefoonDikte]);

Modules
In OpenSCAD heb je modules en je hebt functies, modules lijken erg op functies PHP alleen return bestaat niet en
ze heten module
ipv function
. Modules kun je hergebruiken en argumenten mee geven. Voor
heel veel dingen zijn al modules beschikbaar libraries
Iterators
Ook in een ontwerp is het vaak handig om te kunnen loopen, OpenSCAD heeft daar verschillende functies voor. Loopen in OpenSCAD
Opdracht: Handvat + behuizing
Ontwerp een ergonomisch handvat waarin de electronica en eventueel de batterij kan worden verborgen.
Verborgen componenten
Component | Afmeting |
Micro controller | 91mm x 19mm x 7.2m |
LiION batterij | 34,8mm x 16,6mm |
USB-C | 8,4mm x 2,6mm |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// Beginnetje / voorbeeld
$fn = 100;
module handvat(){
// Iets tekenen
cylinder(h=110,d=22);
}
module ledssTick()
{
cylinder(h=130,d=16);
}
module assemblage(){
difference(){
handvat();
// Verplaatsen
translate([0,0,90]){
ledssTick();
}
}
}
assemblage();