OpenSCAD nepracuje na rozdíl od většiny modelovacích nástrojů a CADů v režimu WYSIWYG (What You See Is What You Get, česky co vidíš, to dostaneš), ale v režimu WYSIWYM (What You See Is What You Meant, česky vidíš, cos měl na mysli). Každý uživatel preferuje jinou metodu tvorby obsahu, někteří mají raději první metodu a text sázejí třeba ve Scribusu, jiní mají raději druhý přístup a texty sázejí v TeXu.
Typický WYSIWYG 3D modelovací nástroj Blender
Kromě rozdílu v preferencích uživatelů je tu také druhý aspekt, totiž účel. Pokud budete vyrábět film nebo hru, asi budete chtít pracovat spíše s vizuální stránkou věci; oproti tomu, pokud budete modelovat součástku do stroje, bude vás spíš zajímat absolutní kontrola nad tvarem objektu. V tom případě by vás mohl OpenSCAD zaujmout.
Instalace OpenSCADu
Přestože se jedná o svobodný software, OpenSCAD pravděpodobně nenajdete v repozitářích své distribuce. Na domovské stránce programu najdete repozitáře pro Ubuntu a openSUSE, ale i binární archiv pro libovolný Linux (32 i 64 bitů).
Stažený archiv stačí rozbalit a v terminálu s právy roota spustit instalační skript. Poté si ještě můžete stáhnout ikonku a spouštěč a umístit je do složek /usr/local/share/pixmaps
respektive /usr/local/share/applications
.
Program OpenSCAD pak najdete v nabídce aplikací v kategorii Grafika.
Uživatelské rozhraní
Po spuštění OpenSCADu uvidíte relativně prázdné okno rozdělené na tři části. V levé polovině je prostor na zdrojový kód modelu, v pravé části pak nahoře prostor pro vykreslený model a dole zprávy programu.
Prázdné okno OpenSCADu při spuštění
Více pochopíte, pokud si otevřete nějaký příklad. Součástí instalace OpenSCADu je dvaadvacet příkladů, které lze otevřít z nabídky File | Examples. Po otevření příkladu jej můžete zkompilovat (a vykreslit) z nabídky Design | Compile, nebo klávesovou zkratkou [F5].
Zkompilovaný příklad číslo jedna
S náhledem na objekt můžete manipulovat myší. Tažením objektu levým tlačítkem jím otáčíte, tažením pravým nebo prostředním tlačítkem jej posouváte a pomocí kolečka na myši jej přibližujete a oddalujete.
Z nabídky View můžete měnit způsob zobrazení náhledu, zapnout nebo vypnout zobrazování hran, os apod.
Rozbor příkladu
Abyste pochopili způsob programování objektů, rozeberu teď první příklad.
module example001() { function r_from_dia(d) = d / 2; module rotcy(rot, r, h) { rotate(90, rot) cylinder(r = r, h = h, center = true); } difference() { sphere(r = r_from_dia(size)); rotcy([0, 0, 0], cy_r, cy_h); rotcy([1, 0, 0], cy_r, cy_h); rotcy([0, 1, 0], cy_r, cy_h); } size = 50; hole = 25; cy_r = r_from_dia(hole); cy_h = r_from_dia(size * 2.5); } example001();
Jak si můžete všimnout, celý zdrojový kód je zabalen v bloku module, který je pak následně zavolán. Můžete to chápat jako proceduru nebo funkci.
Na prvním řádku modulu je definice velmi jednoduché funkce r_from_dia()
, která počítá poloměr z průměru dělením dvěma. Ve spodní části kódu jsou definovány konstanty. Můžete vidět, že nemusí být definovány v kódu nad místem, kde jsou použity, ale kdekoli. Bude použita poslední uložená hodnota. Pokud konstanty spočítáte ručně, dostanete se k následujícímu kódu:
module rotcy(rot, r, h) { rotate(90, rot) cylinder(r = r, h = h, center = true); } difference() { sphere(r = 25); rotcy([0, 0, 0], 12.5, 62.5); rotcy([1, 0, 0], 12.5, 62.5); rotcy([0, 1, 0], 12.5, 62.5); }
Na začátku je definován modul (funkce) rotcy()
, po dosazení dostáváme:
difference() { sphere(r = 25); rotate(90, [0, 0, 0]) cylinder(r = 12.5, h = 62.5, center = true); rotate(90, [1, 0, 0]) cylinder(r = 12.5, h = 62.5, center = true); rotate(90, [0, 1, 0]) cylinder(r = 12.5, h = 62.5, center = true); }
Blok difference()
od prvního objektu v něm odečte všechny ostatní. Pojďme se tedy podívat na jednotlivé objekty. Jako první je zde koule, tedy sphere. Pomocí parametru r
se určuje její poloměr, pomocí dalších (zde nepoužitých) se dá změnit rozlišení (počet použitých plošek).
Všimněte si, že u všech parametrů je uveden i jejich název. Nezáleží tedy na jejich pořadí, ale na názvu. Pokud názvy neuvedete, bude se postupovat podle výchozího pořadí, sphere(25);
tedy bude také fungovat.
Dalším použitým objektem je válec, zastoupený zde objektem cylinder, který ale může představovat i komolý kužel. Parametr r
opět udává poloměr, při použití parametrů r1
a r2
můžete definovat poloměr na začátku a na konci. Dalším parametrem je h
, tedy výška. Jen doplním, že všechny uvedené rozměry jsou zadávané v milimetrech.
Posledním parametrem je center
, který definuje, jestli se má objekt vycentrovat na počátek souřadnicového systému.
cylinder(r = 12.5, h = 62.5, center = true);
Před jednotlivými válci je transformační funkce rotate()
, která otočí objekt o zadaný úhel podle zadaných os. Existují dvě možnosti, jak otáčecí funkci volat, prvním je zadat tři úhly, o které se má objekt otočit po jednotlivých osách v pořadí x, y, z. Následující příklad otočí objekt vzhůru nohama:
rotate([0, 180, 0]) ...
Druhou možností je zadat jeden úhel a poté říct, podle kterých os se má otáčet:
rotate(180, [0, 1, 0]) ...
V našem příkladě se setkáváte s druhou možností:
-
rotate(90, [0, 0, 0])
nemá žádný efekt -
rotate(90, [1, 0, 0])
otočí válec o 90° podle osy x -
rotate(90, [0, 1, 0])
otočí válec o 90° podle osy y
rotate(90, [1, 0, 0]) cylinder(r = 12.5, h = 62.5, center = true);
Další objekty a transformace
Kromě již zmíněných objektů je ještě možné vytvářet hranoly (cube) či mnohostěny (polyhedron). Všechny objekty jsou podrobně popsány v odkazované dokumentaci, zde jen pro představu několik jednoduchých příkladů:
cylinder(r1 = 10, r2 = 0, h = 20);
polyhedron(points = [[0,0,0],[100,0,0],[0,100,0],[0,100,100]], triangles = [[0,1,2], [1,0,3], [0,2,3], [2,1,3]]);
polyhedron(points = [[0,0,0],[100,0,0],[0,100,0],[0,100,100]], triangles = [[0,1,2], [1,0,3], [0,2,3]]);
(Odebrán poslední trojúhelník)
Kromě otáčení existují samozřejmě i další transformace, mezi ně patří škálování (scale), posunutí (translate), překlopení (mirror) a další. Mezi zajímavou transformaci patří obarvení:
color([ R/255, G/255, B/255 ]) ... color("green") ...
OpenSCAD bohužel obarvení neukáže v náhledu.
Více funkcí a informací
Kromě základních objektů a transformací toho umí OpenSCAD daleko více, namátkou forcykly, podmínky... Vše důležité najdete v obsáhlé dokumentaci. Vzhledem k tomu, že se jedná v podstatě o programování, je přirozené, že vznikají knihovny složitějších tvarů. Mezi nejzajímavější patří knihovna součástek, která dokáže generovat ozubená kola apod.
Příklad vygenerovaných ozubených kol
Rendering a export
Finální objekt je nejprve třeba vyrendrovat (Design | Compile and Render (CGAL) nebo [F6]) a poté jej můžete exportovat mj. do formátu STL k následnému použití, například k vytištění na 3D tiskárně. Formát STL lze také importovat, pomocí klauzule import()
.
Alternativní cesta
Pokud hledáte způsob, jak modelovat součástky precizně, bez nutnosti pokročilejších znalostí klasických modelovacích nástrojů a CADů, nebo pokud je vám programovací způsob modelování prostě bližší, je pro vás OpenSCAD řešením. Pomocí OpenSCADu a dalších knihoven můžete naprogramovat model mnohem rychleji a efektivněji, než kdybyste jej modelovali ručně.