Linux E X P R E S

Facebook

OpenSCAD: Programujte 3D modely nejen pro 3D tisk

openscad.png

Pro 3D modelovaní existuje nespočet programů. Nejznámějším open-source programem je Blender. Ve většině z nich ale uživatel modeluje v režimu WYSIWYG, tedy myší manipuluje s objekty přímo v projekci. V OpenSCADu ale modely programujete: vytváříte základní tvary a ty k sobě např. přičítáte nebo od sebe odečítáte.


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 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í 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 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.

Zobrazené osy a hrany Zobrazené osy a hrany

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.

sphere(r = 25); sphere(r = 25);

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); 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); rotate(90, [1, 0, 0]) cylinder(r = 12.5, h = 62.5, center = true);

Tyto tři válce... Tyto tři válce...

...se odečtou od koule ...se odečtou od koule

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ů:

cube([10,15,20]); cube([10,15,20]);

cylinder(r1 = 10, r2 = 0, h = 20); 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], [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ú 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 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ě.

Diskuze (3) Nahoru