přejít na obsah přejít na navigaci

Linux E X P R E S, OpenSCAD: Programujte 3D modely nejen pro 3D tisk

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

Nahoru

Příspěvky

OpenSCAD: Programujte 3D modely nejen pro 3D tisk
Marek 29. 06. 2012, 20:56:27
Odpovědět  Odkaz 
Tak to je fakt hustý
Re: OpenSCAD: Programujte 3D modely nejen pro 3D tisk
Jirka77 10. 07. 2015, 23:16:02
Odpovědět  Odkaz 
to je! :)
OpenSCAD: Programujte 3D modely nejen pro 3D tisk
Arsen 17. 11. 2017, 10:01:16
Odpovědět  Odkaz 
To je super! Kvalitní program jistě pomůže lepším výsledkům při tisku a minimalizování škod. Sice využívám poměrně levné materiály od https://www.3dfil.cz/ , ale stejně každý neúspěch leze dost do peněz. Díky za tip na super program, vyzkouším.

Přidat názor

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz

Miroslav Hrončok

Miroslav Hrončok

Linux používám od roku 2004, aktivně se o něj zajímám od roku 2007, kdy jsem napsal svůj první článek pro LinuxEXPRES. Od roku 2009 jsem pracoval pro Liberix jako redaktor LinuxEXPRESu, od roku 2011 do konce roku 2012 jako jeho šéfredaktor. Nyní pracuji v Red Hatu, kde rozšiřuji distribuci Fedora o nové balíčky. Zároveň studuji na FIT ČVUT, kde se zabývám 3D tiskem a vyučuji několik předmětů. Spoluorganizuji pražskou konferenci LinuxDays a aktivně se účastním mnoha dalších českých linuxových akcí, jako přednášející nebo jako výpomoc.


  • Distribuce: Fedora
  • Grafické prostředí: Xfce

| blog