OpenSCAD – 3D-kappaleita ohjelmoimalla

OpenSCAD on tekstipohjainen ohjelmointiympäristö, jolla voidaan luoda 3D-kappaleita. Kappaleet piirretään xyz-koordinaatistoon ja niitä voi kätevästi pyörittää kolmiulotteisesti hiiren avulla. Tässä artikkelissa esittelemme esimerkkien avulla, kuinka 3D-kappaleet luodaan yksinkertaisilla komennoilla. Kappaleiden yhdistäminen ja liikuttelu mahdollistaa kuitenkin monimutkaisimmat 3D-kappaleet.

OpenSCAD-ohjelmassa (https://openscad.org) on monipuoliset tallennus ja vie eli export-komennot, joilla kuvio voidaan tallentaa niin kuvaksi (png) kuin muihinkin tavallisimpiin tiedostomuotoihin. Ohjelma on ilmainen eli open source -ohjelma, kevyt ja toimii useammassa käyttöjärjestelmässä. Ohjelmasta löytyvät niin Mac, Windows 32-bit, Windows 64-bit, kuin Linux-versiot. Linux-versio toimii esimerkiksi ChromeBookissa, joten se sopii erinomaisesti koulumaailmaan ja erilaisiin STEAM-opetuksen projekteihin. Koska ohjelma vaatii ajattelun taitoja, niin ohjelma on erinomainen työkalu ohjelmallisen ajattelun kehittämiseen. Ohjelmaa voisi myös hyödyntää avaruusgeometriassa, kun on tarve piirtää 3D-kappaleita, koska OpenSCAD-ohjelman peruskuviot ovat suorakulmainen särmiö, lieriö, kartio ja pallo. 

Ohjelma toimii erittäin yksinkertaisesti.

  1. Kirjoita koodi Editor-ikkunaan. Jokainen komento päättyy puolipisteeseen, jonka jälkeen paina rivinvaihto (Enter) ja kirjoita toinen komento.
  2. Kun haluat katsoa, miltä 3D kuvio näyttää, niin paina preview eli esikatselu-painiketta.
  3. Näet lopputuloksen esikatseluikkunassa. Huomaat, että oletuksena x-akseli kasvaa oikealle, y-akseli kasvaa taaksepäin ja z-akseli kasvaa ylöspäin. Kokeile tarttua (paina hiiren vasen painike pohjaan) kuvioon hiirellä ja liikuta hiirtä. Näet, että kuvio pyörii esikatselu ikkunassa kolmiulotteisesti. Esikatselu -ikkunan alareunassa on painikkeita, joilla voi suurentaa ja pienentää näkymää, sekä voit vaihtaa kuvakulmaa.

Katso vielä komento File | Save as, josta huomaat, että ohjelma tallentaa tiedoston OpenSCAD-ohjelman omaan muotoon. Seuraavaksi katso komento File | Export, josta näet, että siellä on paljon eri CAD-ohjelmien tallennusmuotoja, sekä muita tavallisimpia tallennusmuotoja, kuten esimerkiksi pdf js svg. Sieltä löytyy myös mahdollisuus tallentaa esikatselukuva png-kuvaksi, joka on hyödyllinen esimerkiksi oppimateriaalin tekijöille. Jos et halua kuvaan tallentaa xyz-akseleita, niin View-valikon komento Show Axes, joka ottaa akselit pois näkyvistä. Samasta komennosta akselit saa takaisin näkyviin. Ohjelmassa on myös Desing | 3D Print komento, jos sinulla on 3D-tulostin kytkettynä tietokoneeseen. Jos käytät tätä komentoa, niin valmis kuvio pitää aluksi renderöidä komennolla Desing | Render tulostettavaan muotoon. Kuten huomaat, käyttöliittymä on yksinkertainen ja helppo käyttää. Käydään seuraavaksi joitain peruskomentoja, niin pääset alkuun.

Komento: cube(pituus); piirtää kuution. Kuution piirtäminen alkaa origosta, jonka jälkeen liikutaan, jokaisella akselilla annetun pituuden verran eteenpäin. Kuvassa vasemmalla on piirretty kuutio arvolla 10. Samalla komennolla voidaan myös piirtää suorakulmainen särmiö, jolloin syötteenä on kolme arvoa, jotka pitää kirjoittaa hakasulkeiden sisään. Ensin annetaan etenemä x-akselin suunnassa, sitten etenemä y-akselin suunnassa ja lopuksi etenemä z-akselin suunnassa. Tämä on esitetty keskimmäisessä kuvassa. Huomaa, että tässä voit syöttää myös negatiivisia arvoja. Jos syötät desimaalilukuja, niin käytä pistettä. Kuvio, voidaan piirtää myös siten, että kuvion keskipiste sijoitetaan origoon, lisää tällöin lisäkomento center=true, joka keskittää kuvion origoon. Tästä esimerkki on esitetty kuvassa oikealla. 

Pallo voidaan piirtää sphere(säde); komennolla. Kun annat esimerkiksi komennon: sphere(10); niin tällöin piirretään pallo, jonka säde on 10. Tämä on esitetty vasemmanpuoleisessa kuvassa. Huomaat, että pallon pinta koostuu nelikulmioista, eikä näytä yhtään sileältä. Voinko saada sileämmän pallon? Kyllä, kun lisäät lisämääreen \$fn=tahkot. Kuvassa keskellä pallo -komentoon on lisätty arvo: \$fn=6 , joka piirtää pallon, jossa on kuusi tahkoa kiertämässä palloa, jolloin pallo on vähemmän pyöreä. Kun kasvatat arvon 1000, niin pallo näyttää jo sileältä. Tämä on esitetty kuvassa oikealla. 

Lieriön piirtäminen onnistuu komennolla cylinder(korkeus, alasäde, yläsäde); Kun alasäde ja yläsäde ovat samoja, saat aikaiseksi lieriön. Komento cylinder(20,10,10); piirtää lieriön, jonka korkeus on 20 ja pohjaympyrän säde on 10. Tämä on esitetty kuvassa vasemmalla. Kuvasta voidaan havaita, että pohjaympyrä on itseasiassa säännöllinen monikulmio. Lieriö komennossa voit myös käyttää lisämäärettä \$fn=tahkot, jolloin voit piirtää esimerkiksi särmiön (keskellä) tai paremman ympyräpohjaisen lieriön (oikealla).

Kartion piirtäminen onnistuu samalla komennolla kuin lieriönkin. Ainut muutos on se, että toinen säteen arvoista on nolla. Kun tähän vielä lisätään lisämääre \$fn=tahkot, niin komennolla voidaan piirtää ympyräpohjainen lieriö (vasemmalla) tai pyramidi (keskellä). Jos alasäde ja yläsäde ovat nollaa suuremmat, mutta erisuuret, niin aikaiseksi saadaan katkaistu kartio (oikealla).

Piirrettyä kuviota voidaan liikutella, pyörittää ja venyttää xyz-koordinaatistossa, jokaisen akselin suunnassa. Tällöin piirroskomennon eteen pitää lisätä lisäkomento translate, rotate tai resize. Lisäkomennon loppuun ei saa laittaa puolipistettä. Mikäli lisäkomento kohdistuisi useampaan piirroskuvioon, niin tarvittaessa voi käyttää kaarisulkeita { ja } piirroskomentojen ympärillä. Kuvassa vasemmalla haluamme piirtää kolme kuutiota niin, että kuutioiden särmät koskettavat toisiaan. Komento translate([-10,0,0]) cube(10); siirtää kuutiota, jonka särmä on 10, x-akselin suunnassa -10 yksikköä eli kuutio menee 10 yksikköä vasemmalle. Vastaavasti komento translate([0, 10, 0]) cube(10); siirtää toisen kuution y-akselin suunnassa 10 yksikköä eli katsojasta poispäin ja komento translate([0, 0, -10]) cube(10); siirtää kolmannen kuution z-akselilla alaspäin. Lopputulos on nähtävissä kuvassa vasemmalla. Komento rotate(kulma); pyörittää kuutiota katsojasta vastapäivään annetun kulman verran. Tämä esimerkki on esitetty kuvassa keskellä. Kuviota voidaan myös venyttää erikseen jokaisen akselin suunnassa. Tämä onnistuu komennolla resize([10, 20, 40]) sphere(10); , jolloin pallon halkaisija x-akselin suunnassa on 10, y-akselin suunnassa on 20 ja z-akselin suunnassa on 40. Tämä on esitetty kuvassa oikealla. 

OpenSCAD-ohjelmasta löytyvät vektorigrafiikkaohjelmista tutut yhdistä (union), erotus (difference) ja leikkaus (intersection) komennot, joilla voidaan kahdesta kuviosta muodostaa uusia kuvioita yhdistämällä ja leikkaamalla kuvioita. Kuvassa vasemmalla on käytetty erotus -komentoa: diffrence. Ensin mainittu kuvio eli pallo on kuvio, jota leikataan ja toisena mainittu kuvio eli kuutio on kuvio, joka leikkaa. Lopputuloksena on pallo, jossa on kuution muotoinen kolo. Keskellä olevassa kuvassa kuution ja pallon järjestys on vaihdettu, jolloin pallo leikkaa kuutioon pallon muotoisen kolon. Kun muutamme keskimmäisessä kuvassa difference komennon tilalle intersection komennon, niin lopputuloksena on kahden kuvion yhteinen kuvio. Tämä on esitetty kuvassa oikealla eli se on se pala, joka on poistettu kuutiosta edellisessä kuvassa.

On vielä yhdistä eli union-komento. Jos piirretään kaksi suorakulmaista särmiötä päällekkäin, niin saamme aikaiseksi ristin (vasemmalla). Jos lisäämme tähän union-komennon, niin kuvio näyttää ihan samanlaiselta (keskellä). Milloin siis tarvitsemme union-komentoa? Esimerkiksi silloin kun yhdistelmäkuviolla leikkaamme toista yhdistelmäkuviota eli esimerkiksi risti leikataan vähän pienemmällä ja korkeammalla ristillä. Tällöin saamme aikaiseksi ristin muotoiset seinät. Tämä on esitetty kuvassa oikealla. Kiinnitä nyt huomio kaarisulkeisiin. Difference-komennolla on uloimmat kaarisulut, vastaavasti union -komennolla on sisemmät kaarisulut.

OpenSCAD-ohjelmassa on myös mahdollista venyttää syvyyssuunnassa tai pyörittää origon ympäri tasokuvioita (teksti, ympyrä, suorakulmio, monikulmio). Kuvassa vasemmalla on tekstiä venytetty syvyyssuunnassa 10 yksikköä. Kuvassa keskellä on sivuun siirrettyä ympyrää pyöräytetty 360° rotate_extrude-komennolla, jolloin lopputuloksena on toroidi. Kuvassa oikealla on sama tehty suorakulmion avulla, mutta siinä on annettu kulman arvo 270° jolloin pyöritys on vain ¾-osa ympyrää.

Lopuksi yhdistetään eri komentoja, jotta saamme aikaiseksi puolipallon muotoisen astian. Kuvassa vasemmalla on piirretty pallo, jonka säde. Pallon yläosaan on piirretty kuutio, jonka särmän pituus on 20 eli sama kuin pallon halkaisija. Kun nämä komennot laitamme erotus eli diffrenece -komennon sisälle, niin kuutio leikkaa pallosta puolet pois ja saamme aikaiseksi puolipallon. Jos leikkaamme tätä puolipalloa toisella pallolla, joka on asemoitu hieman ylemmäs, niin saamme aikaiseksi puolipallon muotoisen astian. Tämä on esitetty kuvassa keskellä. Jos haluaisin laittaa kuusi samanlaista astiaa vierekkäin, niin silloin on hyvä käyttää for-silmukkaa. For-silmukka on muotoa for muuttuja=[alkuarvo, muutos, loppuarvo] {  }. Eli jos kirjoitamme for-silmukan muotoon for (x=[0:20:100]) { }, niin x saa tällöin arvoja 0, 20, 40, 60, 80, 100. Kun laitamme x-muuttujan translate([x,0,0]); komennon sisälle niin saamme jokaisen kuvion siirrettyä eri paikkaan. Tämä on esitetty kuvassa oikealla. For-silmukan käyttö lyhentää koodia, jos piirrettäviä kuvioita on useampia.

OpenSCAD-ohjelmassa on vielä enemmänkin komentoja ja mahdollisuuksia, mutta sen selvittäminen jätetään lukijan oman aktiivisuuden varaan. Näillä peruskomennoilla pääset jo hyvin alkuun. Erilaisten yhdistelmä kuvioiden tekeminen on luovaa ja ajattelua kehittävää. Lopuksi voit kokeilla tehdä esimerkiksi seuraavat kuviot.

Lähteenä käytetty teosta Gohde, Justin & Kintel, Marius (2021): Programming with openscad, A Beginner’s Guide to Coding 3D-Printable Objects.

Kuvat: Kuvankaappaukset OpenSCAD-ohjelmasta ottanut Tuomo Riekkinen.


Tilaa Dimension uutiskirje – saat sähköpostiisi aina kuunvaihteessa koosteen tuoreimmista artikkeleista

Kirjoittaja