OpenSCAD
Nezbytný úvod
- CSG modelování
- základní primitiva - koule, kužel/válec, kvádr…
- transformace - posun, škálování, rotace…
- booleovské operace - rozdíl, průnik, sloučení
- strom - tyto věci jsou reprezentovány ve stromu
- manuál v angličtině – velmi vyčerpávající, použijte jako referenci
CSG strom

User interface
- myší v oblasti s renderem
- F5 - rychlý náhled (nepřesný)
- F6 - plnohodnotný render – poté export do STL
- Automatic reload and compile
- možnosti zobrazení (F9, F12, osy)
Syntax
- podobné C/C++ – středníky, chlupaté závorky, komentáře
- čísla buď celá nebo desetinná –
1,0,-5,5.3,9.99998,8/5 - čísla nemají jednotky, předpokládáme milimetry
- vektory/body v hranatých závorkách –
[1,2,3]
- čísla buď celá nebo desetinná –
- stringy v dvojitých uvozovkách –
echo("Ahoj světe!"); - proměnné nejsou úplně proměnné, ale spíše konstatnty
a = 3; echo(a); a= 5;–ECHO: 5
- matematické výrazy a funkce, PI
- nejedná se o programovací ale deskriptivní jazyk!
- přehledný cheat sheet http://www.openscad.org/cheatsheet/
Primitiva
cube(size,center);– kvádr (size=[1,2,3]) nebo krychle (size=5)sphere(r);– koulecylinder(h,r1,r2,center);– (komolý) kužel (r1,r2) nebo válec (r)polyhedron(…);– mnohostěn, nešahat- parametry vhodné pojmenovávat, např
cylinder(r=5,h=2);
Příklad
cube(150,center=true);
sphere(100);
Transformace
scale()vs.resize()– poměr, absolutní hdonotarotate([deg,deg,deg])neborotate(deg,[1,1,0])translate([x,y,z])– posunmirror([1,0,0])– zracadlenímultmatrix(…)– transformační matice, nešahatcolor()– na 3D tisk nefunguje- vše kolem počátku
Příklad
color("green") rotate([0,0,60]) translate([30,0,0]) cube(5);
color("red") translate([30,0,0]) rotate([0,0,60]) cube(5);
CSG modelování
union()– sloučení: provádí se implicitně na celekdifference()– rozdíl: od prvního objektu odečte všechny dalšíintersection()– průnik: průnik všech objektů
Příklad
union() {
cube(150,center=true);
sphere(100);
}
Příklad
difference() {
cube(150,center=true);
sphere(100);
}
Příklad
intersection() {
cube(150,center=true);
sphere(100);
}
Cykly a podmínky
for (z = [-1, 1])– prozv hodnotách -1 a 1for (i = [0 : 5])– proiod 0 do 5for (i = [0 : 0.2 : 5])– proiod 0 do 5, použij krok 0.2for (xpos=[0:3], ypos = [2,4,6])– vnořený cyklus jedním zápisem- implicitní
union()na výsledku- proto existuje
intersection_for()– funguje stejně, jen sintersection()
- proto existuje
- podobně
if (a > b)nebo třebaif (center == true)
Příklad
intersection_for(n = [1 : 6]) {
rotate([0,0,n*60]) translate([5,0,0]) sphere(12);
}
Moduly
module foo(bar)– jako funkce nebo metoda- „vrací“ 3D objekt
- přijímá parametry, můžou nabývat výchozích hodnot
- může přijímat
child() - můžete je mít v jiných souborech a použít
include <f.scad>;nebouse <f.scad>;useumožňuje použít moduly, *includerovnou vykreslí, co se v souboru vykreslí
Příklad
module roundcube(size=1,center=false,corner=1) {
minkowski() {
cube(size,center);
sphere(corner);
}
}
roundcube([50,80,80],corner=5);
child();
child(0)..child($children-1)children()
Příklad
module elongate() {
for (i = [0 : $children-1])
scale([10 , 1, 1 ]) child(i);
}
elongate() {sphere(30); cube(45,center=true); cylinder(r=10,h=50);}
Debugging
%- F5 vykreslí poloprůhledně, F6 nevykreslí#- F5 vykreslí poloprůhledně, F6 normálně
Příklad
difference() {
sphere(50,$fn=5);
#cube(65,center=true);
}
Pomocníčci
minkowski()„objede“ první objekt druhým, pak případně třetím…hull()„opláští“ objekty co nejmenším pláštěm- obojí může být poměrně pomalé
Příklad
minkowski() {
hull() {
rotate([120,0,0]) cylinder(h=1,r=10);
translate([0,30,0]) rotate([-120,0,0]) cylinder(h=1,r=13);
translate([0,15,25]) cylinder(h=1,r=8);
}
sphere(3);
}
Dvourozměrný subsystém
- je možné vyvářet 2D primitivy
circle(),square(),polygon()- poté
linear_extrude()neborotate_extrude()
projection()slouží k projekci 3D objektů do 2D- více info v manuálu
- 2D objekty se tváří jako malé úzké 3D objekty, ale nejdou tak vyrendrovat
2D primitiva
square()jako alternativacube()circle()jako alternativasphere()polygon()jako alternativapolyhedron()
offset()
offset()rpro zaoblené rohydeltapro špičaté rohychamfer(bool, jen sdelta) „uřízne“ rohy
linear_extrude()
- vytáhne 2D tvar do prostoru
height– výška vytaženícenter– false jede jen nahoru, true na oba směrytwist– o kolik stupňů se 2D tvar otočí naheightslices– počet kroků utwist
Příklad
linear_extrude(height=20,twist=180,slices=100,center=true) {
square(5);
square(5,true);
}
rotate_extrude()
- rotuje 2D tvar do prostoru
- kolem osy Y, potom „vzpřímení“ na Z
- záleží na pozici
- nezáleží na rotaci
Příklad
rotate_extrude($fn=200) polygon(points=[[0,0],[2,1],[1,2],[1,3],[3,4],[0,5]]);
2D import
- můžete importovat DXF soubory
- lze převést z SVG na DXF
- zmrší to velikost, je třeba použít resize()
Příklad
rotate_extrude() resize([20,0],[true,true]) import("bottle.dxf");
projection()
- promítne 3D objekt na rovinu XY
cut– true zobrazí jen průnik s rovinou XY- výsledkem je 2D tvar
Příklad
use </usr/share/openscad/examples/example002.scad>
linear_extrude(20) projection() rotate([90,0,0]) example002();
import()
- kromě DXF lze importovat i STL soubory
- ne vždy se povedou vyrendrovat
- je třeba je opravit
- viz Práce s 3D modely ve formě meshí
Příklad
difference() {
import("kangaroo5.stl");
// http://www.thingiverse.com/thing:33273 CC BY-NC-SA
translate([0,-10,80]) cube(30,true);
}
surface()
surface(file = "smiley.png", center = true);- (obrázek z manuálu)

Rozlišení
$fn,$faa$fsnastavuje rozlišení, viz manuál- může se nastavit globálnbě
- nebo uvnitř chlupatých závorek
- může se předat jako parametr čemukoli – modulu nebo primitivě
Simple - 2-Manifold
- pro export STL je potřeba aby byl model 2-Manifold
- skoro vše řeší výsledný
union() - problém: společná hrana – nereálné
- jinak lze zanést chybu polyhedronem
Příklad
cube(20); translate([20,20,0]) cube(20);
// i=0.0001; cube(20); translate([20-i,20-i,0]) cube(20);
Knihovna MCAD
- spousta elementárních i pokročilých věcí
- nové jakože primitivy
- vhodné věci pro RepRap
- motorky
- řemeničky
- je třeba
include, neuse! - info
Příklad
include <MCAD/stepper.scad>
motor(Nema17);