OpenSCAD
Nezbytný úvod
- CSG modelování
- základní primitiva - koule, jehlan/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
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
Primitiva
cube(size,center);– kvádr (size=[1,2,3]) nebo krychle (size=5)sphere(r);– koulecylinder(h,r1,r2,center);– jehlan (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);
}
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);
}
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)- tímto je možné dělat i rekurzi
children()je v plánu
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);}
Rozlišení, debugging
$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ě
%- F5 vykreslí poloprůhledně, F6 nevykreslí#- F5 vykreslí poloprůhledně, F6 normálně
Příklad
difference() {
sphere(50,$fn=5);
#cube(65,center=true);
}
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()
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 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);
}
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);
Úkoly
- zadáme úkol
- všichni ho řeší
- my konzultujeme a pomáháme
- kdo je první a neprasí, má body za aktivitu
Zadání ze cvičení a řešení
Paraboloid
Vytvořte rotační paraboloid. Měl by jít parametricky měnit (velikost a stupeň), ale netřba řešit číselný vztah mezi parametry a matematickým zápisem.
a=200;
w=3; // >=3
rotate_extrude()
difference() {
projection(true) translate([0,a/w/sqrt(3),-a/w]) rotate([-60,0,0]) cylinder(a*sqrt(3)/2,a/2,0);
translate([-a,0,0]) square(a);
}Nábytek
Představte si, že zařizujete, nebo přestavujete byt a potřebujete vyrobit miniatury nábytku.
- Vytvořte parametrický model židle. Volitelné parametry jsou: počet příček v opěradle, výška a tloušťka nožiček, rozměry sedadla.
- Vytvořte parametrický model postele. Volitelné parametry jsou: velikost matrace, výška postele.
- Vytvořte parametrický model skříně. Volitelné parametry jsou: výška, hloubka, šířka skříně.
Kostka
Vytvořte parametrický model hrací kostky. Volitelné parametry: velikost kostky, velikost „teček“.
Hyperkrychle
Vytvořte parametrický model hyperkrychle 4D. Volitelné parametry jsou: velikost vnější krychle, velikost vnitřní krychle, tloušťka „čar“.
LEGO
Vytvořte parametrický model základní kostky LEGO. Nastavitelné parametry budou: počet pinů po X a po Y, výška a šířka (průměr) pinu, prostor mezi pinem a stěnou kostky, výška kostky, tloušťka stěny.