Petri Eskelinen, Lasse Laukkanen, Kaisa Kokko ja Mikko Ketola
EXODUS
		              Sovellussuunnitelma
Tietotekniikan cum laude -työprojekti
24.10.2001

Tekijä: Petri Eskelinen, Lasse Laukkanen, Kaisa Kokko ja Mikko Ketola	
Yhteystiedot: Agc233.3, http://kotka.it.jyu.fi/exodus, puh: 014-2604966
Työn nimi: EXODUS
Title in English: EXODUS
Työ: Cum laude -työprojekti
Sivumäärä: 37
Teettäjä: Numerola Oy
Avainsanat: Blokki, kontrollipiste, tahko, särmä
Tiivistelmä: Projektin tarkoituksena on toteuttaa Numerola Oy:lle ohjelma, jonka avulla voidaan luoda kolmiulotteisia laskenta-alueita. Alueet muodostuvat perusblokeista tai niiden yhdistelmistä. Blokkeja on neljänlaisia: kuutio, prisma, pyramidi ja tetraedri. Ohjelma tehdään Linux –käyttöjärjestelmälle. Työkaluina ovat OpenGL, TCL/Tk, Glut ja C++.

Termiluettelo
Alla lueteltu hieman projektin aikana ilmenneitä uusia termejä:

TCL/Tk	Tool Command Language/Toolkit. Ohjelmistopaketit Tcl ja Tk yhdessä tarjoavat ohjelmointiympäristön graafisten sovelluksien kehittämiseen /käyttämiseen. TCL on tulkattava komentorivipohjainen kieli.[2]		
GLUT	OpenGL Utility Toolkit. Itsenäinen laajennuskirjasto OpenGL-ohjelmien kirjoittamiseen. GLUT käsittää yksinkertaisen ohjelmointirajapinnan OpenGL:lle. GLUTia on mahdollista käyttää sekä Windows että X-Windows järjestelmissä.  
OpenGL	Grafiikkakirjasto 3D-gafiikkaan ja mallinnukseen.
Blokki	Kuutio, pyramidi, tetraedri tai prisma: tahot muodostuvat splineistä.
Nurbs	Non-uniform rational B-spline. Matemaattisesti tehokas tapa käsitellä monen muotoisia pintoja.

Sisältö
1	Johdanto
2	Projektin taustat ja tavoitteet
2.1	Projektin taustat
2.2	Projektin tavoitteet
2.2.1	ensisijaiset toiminnalliset vaatimukset
2.2.2	Toissijaiset toiminnalliset vaatimukset
2.2.3	Ei-toiminnalliset vaatimukset
3	Kommentointi- ja nimeämiskäytäntö
4	Sovelluksen rakenne
5	Luokkajako
5.1	cManager
5.2	caGraphicalElement3d
5.3	caBlock
5.4	cHexaedron
5.5	cTetraedron
5.6	cPyramid
5.7	cPrism
5.8	cSurface
5.9	cEdge
5.10	cControlPoint
6	Muita mahdollisia luokkia
6.1	OpenGL ja Glut
6.2	TCL/C++ -muunnos
6.3	Bezier-pinta
7	Käyttöliittymän kuvaus
8	Lähteet
9	Liitteet
Liite 1.1: Käyttötapaus - Blokin luominen
Liite 1.2 Käyttötapaus - Ohjelman sulkeminen
Liite 1.3 Käyttötapaus - Pinnanmuotojen näyttäminen
Liite 1.4 Käyttötapaus - Tahojen visualisointiverkkojen näyttäminen
Liite 1.5: Käyttötapaus -  Attribuuttien muokkaaminen
Liite 1.6: Käyttötapaus -  Uuden piirtoavaruuden luominen
Liite 1.7: Käyttötapaus - Tallennetun piirtoavaruuden avaaminen näytölle
Liite 1.8: Käyttötapaus -  Piirtoavaruuden tallentaminen
Liite 1.9: Käyttötapaus  -   Valitseminen
Liite 1.10: Käyttötapaus  -   Siirtäminen
Liite 1.11: Käyttötapaus - Blokin pyörittäminen valitun rotaatiopisteen ympäri.
Liite 1.12: Käyttötapaus - Katselupisteen muuttaminen
Liite 1.13: Käyttötapaus - Poistaminen
Liite 1.14: Käyttötapaus - Yhdistäminen
Liite 1.15: Käyttötapaus - Erottaminen
Liite 1.16: Käyttötapaus - Leikepöydälle kopiointi ja leikepöydältä liittäminen
Liite 1.17: Käyttötapaus - Toiminnon kumoaminen ja tekeminen uudelleen

1	Johdanto

Exodus-nimisessä tietotekniikan cum Laude -työprojektissa toteutetaan 3D-geometrian piirtämiseen ja havainnollistamiseen tarkoitettu sovellus, jolla kootaan laskenta-alueita yksinkertaisista kappaleista eli blokeista. Kyseisiä alueita käytetään muissa sovelluksissa fysikaalisten ilmiöiden mallintamiseen.
Toisessa luvussa kerrotaan projektin taustasta sovelluksen annetuista tavoitteista, jotka on jaettu ensisijaisiin ja toissijaisiin sekä ei-toiminnallisiin. Kolmas luku, nimeämiskäytäntö, kertoo miten nimeäminen on standardoitu. Neljännessä luvussa kerrotaan ohjelman rakenteesta ja viidennessä luvussa on luokkajaot metodeineen ja atribuutteineen. Muita mahdollisia luokkia on kuudennessa luvussa. Käyttöliittymää on kuvattu seitsemännessä luvussa  ja kahdeksannessa luvussa on käytetyt lähteet. Lopussa vielä liitteinä käyttötapaukset.
2	Projektin taustat ja tavoitteet
Tässä luvussa kerrotaan projektin taustoista sekä Exodus -projektin tavoitteista.
2.1	Projektin taustat

Numerola Oy on jyväskyläläinen, vuonna 1998 perustettu yritys, joka kehittää ohjelmistoja teollisuusprosessien laskennalliseen simulointiin. Simuloinneissa sovelletaan pääosin niin sanottua äärellisten elementtien menetelmää (FEM). Simulointiohjelmistoon kuuluu FEM-ratkaisijan lisäksi syöttötietoa ja laskennallisia tuloksia käsitteleviä ohjelmia. [1]  Näissä ohjelmistoissa kappaleitten geometria kuvataan elementtiverkolla ja sen  avulla lasketaan esimerkiksi lämpötiloja. Teollisuusprosessien mallinnuksessa käytetään yleensä yksinkertaisista elementeistä koostuvia laskenta-alueita. Elementit voivat olla esim. eri materiaaleista koostuvia kappaleita tai osa-alueita, joissa neste tai ilma virtaa.
Exodus-projekti liittyy Numerola Oy:n laajempaan Numerrin-tuotekehityshankkeeseen, jonka tavoitteena on monipuolinen ohjelmistopaketti laskennalliseen simulointiin ja optimointiin. Aikaisemmin keväällä 2001 on ko. yritykselle toteutettu työprojektin puitteissa Exoduksen 2D -versio: Genesis. [2]
2.2	Projektin tavoitteet
Exodus-projektin tavoitteena on suunitella ja toteuttaa Linux-käyttöjärjestelmässä toimiva graafinen työkalun rankenteellisten verkkoelementtien luontiin. Tavoitteet on jaettu ensisijaisiin ja toissijaisiin tavoitteisiin.

2.2.1	ensisijaiset toiminnalliset vaatimukset
•	Ohjelmalla tulee pystyä kuvaamaan erillistä verkkogeneraattoriohjelmaa varten kolmiulotteisia alueita. Sovelluksella tulee pystyä luomaan neljän tyyppisiä perusblokkeja: heksaedri, tetraedri, pyramidi ja prisma, kappaleiden pinnat ovat joko neliökulmion- tai kolmionmuotoisia. Kappaleiden pintoja voidaan tarpeen mukaan muokata pinnoilla sijaitsevien kontrollipisteiden  (nelikulmio 16 ja kolmio ? kappaletta ) avulla. Kontrollipisteiden määrittämää pintaa interpoloidaan NURB- (Non-Uniform Rational B-spline) tai Bezier-pinnalla. Kaikki koordinaatit on ilmoitettu fysikaalisissa koordinaateissa.
•	Blokeille voidaan suorittaa seuraavia operaatiota: lisääminen (create), poistaminen (delete), muokkaaminen (edit), lisäksi luotua blokkia tai yhteenliitettyjä blokkeja voidaan siirtää (move) ja pyörittää (rotate) erikseen määrättävän piisteen (rotation point) ympäri. 
•	Blokkeja voi myös liittää (combine) toisiinsa tai liitetyt blokit voidaan eroittaa (separate), kuitenkin niin, että vain kolmion muotoisen pinnan voi liittää kolmioon ja nelikulmion muotoisen nelikulmioon.
•	Sovelluksessa on piirtoalue omana erillisenä ikkunanaan, jossa visualisoidaan suunniteltu kappale. Piirtoalueaalla  (OpenGL+GLUT) olevien kappaleiden valinta ja niiden ominaisuuksien muokkaus tapahtuu pääsääntöisesti erillisiltä lomakkeilta (Tcl/Tk), mutta piirtoalueen kameran paikkaa voidaan liikuttaa näppäintenavulla. Luotuja kappaleita voidaan haluttaessa edelleen visualisoida joko verkolla(wireframe) tai kiinteällä pinnalla (solid).
2.2.2	Toissijaiset toiminnalliset vaatimukset
•	Piirtoikkunassa tapahtuvien blokeille suoritettavien hiiritoimintojen lisääminen esimerkiksi valinta tai pyöritys.
•	Apuruukon (grid) ja snap-toiminnon lisääminen piirtoikkunaan.
•	Valon lisääminen.
•	Luotujen blokkien tai niiden pintojen visualisointi erikseen määritettävällä tekstuurilla , joka määräytyy esim. blokin materiaaliparametrin mukaan.
•	Tietorakenteen tallentaminen tiedostoon OpenDWG-formaatissa.
2.2.3	Ei-toiminnalliset vaatimukset
•	Ohjelman tulee toimia Linux-käyttöjärjestelmässä.
•	Tietorakenteen sisältö voidaan tallentaa tiedostoon, josta se voidaan jälleen lukea. Tiedostoon tallennetaan blokkikohtaisten tietojen lisäksi blokkien liitossuhteet ja kamerakulma tallennus hetkellä.

3	Kommentointi- ja nimeämiskäytäntö

Sovellusta ohjelmoitaessa noudatetaan tässä luvussa esitettäviä nimeämis- ja kommentointikäytäntöjä.
Kaikki nimeämiset ja kommentoinnit tehdään englanniksi. Ohjelmalistauksen alussa on tekijän nimi, käyttötarkoitus ja lyhyt kuvaus sen toiminnasta. Kaikki ei-triviaalit muuttujat ja tietorakenteet kommentoidaan niiden esittelyn yhteydessä. Kaikkien aliohjelmien implementaationosan alkuun on laitettu kommenttirivi, jolla kuvataan ko. aliohjelman toimintaa sekä sille välitettävien parametrien sekä mahdollisten paluuarvojen merkitystä. 
Muutamia esimerkkejä nimeämiskäytännöstä:
struct     sTyypinNimi
class      cLuokanNimi
aliohjelma aliohjelmanNimi
muuttuja   muuttujannimi

Kaikki tiedostot nimetään niiden sisällön mukaan. Esim. C++-kielen luokan cLuokka -luokan implementaation sisältävät tiedostot nimettäisiin luokka.cpp ja luokka.hpp. Vastaavasti Tcl/Tk -tiedostot nimetään samalla tavoin kuvaamaan sisältöä.

4	Sovelluksen rakenne

5	Luokkajako
Saantimetodeita ei ole lueteltu.
5.1	cManager
Vastaa tietorakenteen ylläpidosta ja sen operaatioista sekä ohjelman osioiden välisestä kommunikoinnista.
5.1.1.1	Attribuutit
*blocks	piirtoavaruuden kaikki blokit
*points	piirtoavaruuden kaikki kontrollipisteet
*edges	piirtoavaruuden kaikki särmät
*surfaces	piirtoavaruuden kaikki pinnat
*selected	piirtoavaruuden valitut kohteet
*combined	kaikki valittuihin blokkeihin yhdistetyt blokit
5.1.1.2	Metodit
cManager()	luokan muodostin
~cManager()	luokan hajotin
move(x,y,z)	siirtää valittuja kohteita sekä valittuihin blokkeihin yhdistettyjä blokkeja vektorin x,y,z verran
rotate(x,y,z, anglexy, angleyz, anglexz)	kiertää valittuja kohteita rotaatiopisteen x,y,z ympäri kulmien anglexy, angleyz, anglex7z verran
save()	tallentaa piirtoavaruuden kohteet sekä kameran tiedot
open(file)	avaa tiedoston file sisältämän piirtoavaruuden
undo()	peruu viimeisimmän toimenpiteen
redo()	tekee uudelleen viimeisimmän toimenpiteen
select(id)	valitsee kohteen id
deselect(id)	poistaa valinnat kohteesta id
isSelected(element[])	Tarkistaa onko valittuna graafiset elementit, jota valittu komento edellyttää.
createHexaedron([kulmapisteiden koordinaatit], material, optional, [tihennystiedot], combine)	luo uuden heksaedrin pisteiden koordinaattien mukaan, määrittää sen materiaaliparametrin sekä valinnaisen parametrin sekä täydentää sen tihennystiedot. Jos combine arvo on asetettu, niin luotu blokki yhdistetään ennalta valittuun tahkoon. 
createTetraedron (...)	vertaa edellä
createPrism (...)	vertaa edellä
createPyramid (...)	vertaa edellä
delete()	poistaa valitut blokit
combineWithMove(surface, point1, point2)	siirtää ja yhdistää ennalta valitun tahkon ja siihen liittyvän blokin tahkoon surface pisteiden point1 ja point2 mukaisesti
combineWithStretch(surface, point1, point2)	venyttää ja yhdistää ennalta valitun tahkon tahkoon surface pisteiden point1 ja point2 mukaisesti
separate()	erottaa ennalta valitun yhteisen tahkon blokit toisistaan
showMesh()	näyttää tai piilottaa ennalta valittujen kohteiden visualisointiverkon
close()	sulkee ohjelman
viewMode()	muuttaa ennalta valittujen kohteiden esitysmuodon joko rautalankamalliksi tai kiinteäksi
viewPoint(kameran tiedot)	muuttaa
refresh()	päivittää piirtoavaruuden näytön

5.2	caGraphicalElement3d
Abstrakti pääluokka kaikille piirtoavaruuden elementeille
5.2.1.1	Attribuutit
id	elementin tunnus
processed	käsitelty-lippu
activation	aktivointi-lippu

5.2.1.2	Metodit
setProcessed()	asettaa kohteen käsitellyksi
resetProcessed()	poistaa kohteen käsitelty-merkinnän
setActivation()	asettaa kohteen aktivoinnin
resetActivation()	poistaa kohteen aktivoinnin

5.3	caBlock
Abstrakti luokka kaikille blokeille, peritään cGraphicElement3d:stä
5.3.1.1	Attribuutit
material
optional
5.3.1.2	Metodit
findCombined(*combined)	Lisää combined-listaan tähän blokkiin yhdistetyt blokit
setMaterial()	asettaa blokin materiaaliparametrin
setOptional()	asettaa blokin valinnaisen parametrin
5.4	cHexaedron
Vastaa heksaedrista, peritään cBlockista.
5.4.1.1	Attribuutit
*surfaces 	osoittimet blokin tahkoihin
5.4.1.2	Metodit
-
5.5	cTetraedron
Vastaa tetraedrista, peritään cBlockista.
5.5.1.1	Attribuutit
*surfaces	osoittimet blokin tahkoihin
5.5.1.2	Metodit
-
5.6	cPyramid
Vastaa pyramidista, peritään cBlockista.
5.6.1.1	Attribuutit
*surfaces 	osoittimet blokin tahkoihin
5.6.1.2	Metodit
-
5.7	cPrism
Vastaa prismasta, peritään cBlockista.
5.7.1.1	Attribuutit
*surfaces 	osoittimet blokin tahkoihin
5.7.1.2	Metodit
-
5.8	cSurface
Vastaa blokin tahkosta, peritään cGraphicElement3d:stä
5.8.1.1	Attribuutit
*edges	osoittimet tahkon särmiin
*controlpoints	osoittimet tahkon kontrollipisteisiin
*block	osoittimet blokkeihin, joihin tahko kuuluu
meshvisible	kontrolloi visualisointiverkon näkyvyyttä
5.8.1.2	Metodit
setMeshvisible()	vaihtaa visualisointiverkon näkyvyyden tilaa
Bezier???	kuuluuko bezier-pinnan pisteiden laskenta tahkon vastuulle?

5.9	cEdge
Vastaa blokin särmästä, peritään cGraphicElement3d:stä
5.9.1.1	Attribuutit
*controlpoints	osoittimet särmän kontrollipisteisiin
divdata???	tihennystiedot samat kuin Genesiksessä?
5.9.1.2	Metodit
setDivdata()???	tihennysmetodit samat kuin Genesiksessä?

5.10	cControlPoint
Vastaa kontrollipisteestä, peritään cGraphicElement3d:stä
5.10.1.1	Attribuutit
coordinates	pisteen koordinaatit globaalissa koordinaatistossa
5.10.1.2	Metodit
move(x,y,z)	siirtää pistettä vektorin x,y,z verran
rotate(x,y,z, anglex, angley, anglez)	kiertää pistettä rotaatiopisteen x,y,z ympäri kulmien anglex, angley, anglez verran
setCoordinates(x,y,z)	asettaa pisteen koordinaateiksi x,y ja z

6	Muita mahdollisia luokkia
Seuraavat ohjelma-osiot ovat selvityksen alla toteutetaanko ne luokkina vai aliohjelmakirjastoina.
6.1	OpenGL ja Glut
Vastaa avaruuden piirtotoimenpiteistä näyttöön
6.2	TCL/C++ -muunnos
Vastaa TCL-komentojen muuntamisesta C++-kielelle ja päin vastoin, jotta käyttöliittymän ja toiminnallisen osan rajapinta säilyy puhtaasti C++-kielisenä -> parantaa uudelleenkäyttöä.
6.3	Bezier-pinta
Vastaa blokin tahkon pinnasta, joka määrätään kontrollipisteiden avulla.

7	Käyttöliittymän kuvaus
Käyttöliittymä koostuu kahdesta pääikkunasta: käyttöliittymä ja piirtoalue. Alla olevassa kuvassa on näkyvillä Exoduksen pääikkuna, joka ohjelman käynnistyessä luodaan näytölle yhdessä piirtoikkunan kanssa. 

Käyttöliittymään tulee useita erilaisia dialogeja, jotka avautuvat käyttäjälle esim. tietoja kysyessä. Näistä ei kuitenkaan vielä tässä vaiheessa ole mallikuvaa. Ja myöskään piirtoikkunasta ei ole kuvaa.
8	Lähteet
[1] Hakala Jussi, Laitinen Mika, Numerrin1.0-käsikirja Numerola Oy, Jyväskylä, 2001
[2] Genesis-kansio, kevät 2001, Tietotekniikan laitos

9	Liitteet
Käyttötapaukset 18.10.2001

Liite 1.1: Käyttötapaus - Blokin luominen
Nimi:	Create block

Esiehdot:	-

Kuvaus:	1. Käyttäjä valitsee luontikomennon ja sen jälkeen haluamansa blokkityypin (Tetrahedron, Pyramid, Hexaedron tai Prism). Käyttäjä voi määrittää nopeasti blokin korkeus-, leveys- ja syvyysparametrien avulla. Muut blokkiin liittyvät tarkat arvot voidaan määrittää editoimalla blokkia nopean luonnin jälkeen. 2. Jos ennen luontikomennon suorittamista valittuna on tahko, yhdistetään luotava blokki suoraan ennalta valittuun tahkoon. Tässä tapauksessa käyttäjä antaa puuttuvat blokin tiedot, ja  yhdistämiseen liittyvät rajoitukset pätevät.

Poikkeukset: 	Jos käyttäjä antaa virheellisiä arvoja, näyttöön tulee virheilmoitus.

Jälkitilanne: 	Blokki on luotu.
Liite 1.2 Käyttötapaus - Ohjelman sulkeminen
Nimi:	Exit

Esiehdot:	-

Kuvaus:	Käyttäjä valitsee sulkemiskomennon. Jos käyttäjä on tehnyt jotain piirtotoimenpiteitä ja niitä ei ole tallennettu, niin ohjelma kysyy käyttäjältä halutaanko tehdyt muutokset tallentaa.

Poikkeukset: 	Kun ohjelma kysyy tallennetaanko tehdyt muutokset, voi käyttäjä peruuttaa sulkemisen, jolloin ohjelma palaa komentoa edeltävään tilaan.

Jälkitilanne: 	Ohjelma on  suljettu ja mahdolliset muutokset tallennettu tai tallentamatta valinnan mukaan. 
Liite 1.3 Käyttötapaus - Pinnanmuotojen näyttäminen 
Nimi: 	View wireframe/solid

Esiehdot:	-

Kuvaus:	Käyttäjä valitsee joko ennalta valittujen blokkien tai kaikkien blokkien esitysmuodoksi rautalankamalliesityksen tai kiinteän esityksen.

Poikkeukset: 	- 

Jälkitilanne: 	Valitut tai kaikki blokit näkyvät valinnan mukaan joko rautalankamallina tai kiinteänä. Rautalankamallissa näkyvissä ovat myös tahkojen visualisointiverkot.
Liite 1.4 Käyttötapaus - Tahojen visualisointiverkkojen näyttäminen 
Nimi:	Show/hide mesh

Esiehdot:	Tahkoja ja vain tahkoja on oltava valittuna ainakin yksi.

Kuvaus:	Käyttäjä asettaa ennalta valittujen tahkojen visualisointiverkot näkyviksi tai piilottaa ne.

Poikkeukset: 	-

Jälkitilanne: 	Tahkojen visualisointiverkot ovat näkyvissä tai piilotettu valinnan mukaan.

Liite 1.5: Käyttötapaus -  Attribuuttien muokkaaminen

Nimi:	Edit attributes

Esiehdot:	Ainakin yksi kohde on oltava valittuna.

Kuvaus:	Käyttäjä valitsee muokkaustoiminnon ja muuttaa attribuuttien arvoa. 

Poikkeukset: 	Jos syöte ei ole sallittu, hylätään käyttäjän syöttämä arvo ja säilytetään kentässä entinen arvo.

Jälkitilanne: 	Kohteen attribuutti on muuttunut.
Liite 1.6: Käyttötapaus -  Uuden piirtoavaruuden luominen 
Nimi:	New

Esiehdot:	-

Kuvaus:	Käyttäjä luo uuden piirtoavaruuden. Jos nykyinen piirtoavaruus ei ole tyhjä, ohjelma kysyy tallennetaanko nykyinen tilanne.

Poikkeukset: 	Kun ohjelma kysyy tallennetaanko tehdyt muutokset, voi käyttäjä peruuttaa uuden piirtoavaruuden luomisen, jolloin ohjelma palaa komentoa edeltävään tilaan.

Jälkitilanne: 	Piirtoavaruus on tyhjä ja vanha tilanne tallennettu tai tallentamaton valinnan mukaan.
Liite 1.7: Käyttötapaus - Tallennetun piirtoavaruuden avaaminen näytölle

Nimi:	Open

Esiehdot:	Piirtoavaruus täytyy olla tallennettuna tiedostossa.

Kuvaus:	Käyttäjä antaa tiedostonavauskomennon ja ohjelma tuo näyttöön luettelon asianmukaisista tiedostoista. Käyttäjä valitsee haluamansa tiedoston ja tiedoston sisältämä piirtoavaruus avautuu näyttöön. Jos piirtoavaruus ei ole tyhjä ennen toiminnon aloitusta, ohjelma kysyy tallennetaanko nykyinen tilanne ennen toisen avaamista.

Poikkeukset:	Avaaminen ei onnistu, jos ohjelma ei osaa lukea tiedostoa tai sitä ei löydy, jolloin ohjelma palaa komentoa edeltävään tilaan. Kun ohjelma kysyy tallennetaanko tehdyt muutokset, voi käyttäjä peruuttaa toisen piirtoavaruuden avaamisen, jolloin ohjelma palaa komentoa edeltävään tilaan.

Jälkitilanne:	Näyttöön on avattu piirtoavaruus blokkeineen valitusta tiedostosta ja mahdollinen komentoa edeltävä piirtoavaruus tallennettu tai tallentamaton valinnan mukaan.
Liite 1.8: Käyttötapaus -  Piirtoavaruuden tallentaminen

Nimi:	Save tai Save as

Esiehdot:	-

Kuvaus:	Käyttäjä antaa tallennuskomennon ja järjestelmä kysyy minkä nimiseksi tiedostoksi piirtoavaruus tallennetaan. Käyttäjä määrittää tiedostonimen ja hyväksyy sen. Jos piirtoavaruus on tallennettu jo aiemmin, käyttäjä voi tallentaa piirtoavaruuden nopeasti samalla tiedostonimellä kuin ennenkin. Käyttäjä voi peruuttaa tallennuksen ennen tiedostonimen hyväksymistä, jolloin ohjelma palaa komentoa edeltävään tilaan.

Poikkeukset: 	Jos tiedostoon ei voi tallentaa näyttöön tulee virheilmoitus.

Jälkitilanne:	Piirtoavaruus on tallennettu määritettyyn tiedostoon. Myös katselupiste on tallennettuna.
Liite 1.9: Käyttötapaus  -   Valitseminen
Nimi:	Select

Esiehdot: 	Vähintään yksi blokki tulee olla luotuna.

Kuvaus: 	Käyttäjä valitsee haluamansa kohteet (piste, särmä, tahko  tai blokki).

Poikkeukset: 	-

Jälkitilannne: 	Valittujen kohteiden ulkoasu muuttuu kertoen siitä, että kyseiset kohteet ovat tulleet valituksi.
Liite 1.10: Käyttötapaus  -   Siirtäminen
Nimi:		Move

Esiehdot:	Siirrettävä kohde (piste, särmä, tahko tai blokki) on valittu.

Kuvaus:	Käyttäjä siirtää valitun kohteen paikasta toiseen määrittämällä sille uuden paikan globaalissa koordinaatistossa siirtovektorin avulla. 

Poikkeukset:	-

Jälkitilanne:	Kohde on siirtynyt uuteen paikkaan.
Liite 1.11: Käyttötapaus - Blokin pyörittäminen valitun rotaatiopisteen ympäri.
Nimi:		Rotate block

Esiehdot:	Pyöritettävä blokki on oltava valittuna.

Kuvaus:	Käyttäjä määrittää valitulle blokille uuden paikan rotaatiopisteen suhteen. Rotaatio määritetään kahden tai kolmen asteluvun avulla.

Poikkeukset:	-

Jälkitilanne:	Blokki on uudessa asennossa.
Liite 1.12: Käyttötapaus - Katselupisteen muuttaminen
Nimi:		Rotate ja Zoom

Esiehdot:	-

Kuvaus: 	Käyttäjä pyörittää katselupistettä annetun pisteen ympäri tai muuttaa katselupisteen etäisyyttä annetusta pisteestä.

Poikkeukset:	-

Jälkitilanne: 	Katselupisteen sijainti on muuttunut.
Liite 1.13: Käyttötapaus - Poistaminen
Nimi:	Delete

Esiehdot:	On oltava yksi tai useampi blokki valittuna.

Kuvaus:	Käyttäjä poistaa valitut kohteet.

Poikkeukset: 	Jos valittuna on kontrollipiste, särmä tai tahko toiminto peruutetaan ja palataan sitä edeltävään tilaan.

Jälkitilanne: 	Ennalta valitut blokit on poistettu.
Liite 1.14: Käyttötapaus - Yhdistäminen
Nimi:	Combine

Esiehdot:	On oltava valittuna blokin tahko sekä kaksi siihen kuuluvaa kulmapistettä. 

Kuvaus:	a) Käyttäjä valitsee ensin yhdistämisen siirron kanssa ja sitten kohdeblokin tahkon sekä kaksi siihen kuuluvaa kulmapistettä. Tämän jälkeen ennalta valittu blokki siirtyy ensin kohdeblokkiin kiinni ja ennalta valittu tahko mukautuu sitten kohdeblokin tahkoon. b) Käyttäjä valitsee yhdistämisen ilman siirtoa, jolloin ennalta valittu tahko venyy kiinni kohdeblokin tahkoon

Poikkeukset: 	1. Jos käyttäjä valitsee yhdistämistoiminnossa kaksi erimuotoista tahkoa ts. kolmion ja suorakaiteen, näyttöön tulee virheilmoitus ja palataan yhdistämistä edeltävään tilaan. 
2. Ns. itsensä yhdistäminen estettävä, eli käyttäjä ei voi valita kahta saman blokin tahkoa.
3. Jos valitaan yhdistäminen joka vaatii kappaleen kiertoa, yhdistäminen ei onnistu.

Jälkitilanne: 	Yhdistämiskomennon jälkeen valittu tahko on venynyt/siirtynyt kiinni ennalta valittuun tahkoon.
Liite 1.15: Käyttötapaus - Erottaminen
Nimi: 	Separate

Esiehdot:	Kaksi blokkia on oltava yhdistettynä ja niiden yhteinen tahko valittuna.

Kuvaus:	Käyttäjä valitsee erottamiskomennon, jonka jälkeen blokit eivät ole enää yhdistettyinä.

Poikkeukset: 	-
Jälkitilanne: 	Yhdistetyt blokit on erotettu.
Liite 1.16: Käyttötapaus - Leikepöydälle kopiointi ja leikepöydältä liittäminen
Nimi:	Copy ja Paste

Esiehdot:	On oltava vähinään yksi blokki valittuna.

Kuvaus:	Käyttäjä valitsee ensin kopiointikomennon ja sitten liittämiskomennon.

Poikkeukset: 	Jos valittuna on tahko, kontrollipiste tai särmä, näyttöön tulee virheilmoitus ja palataan komentoa edeltävään tilaan.

Jälkitilanne: 	Ennalta valitut blokit ovat monistuneet.

Liite 1.17: Käyttötapaus - Toiminnon kumoaminen ja tekeminen uudelleen
Nimi:	Undo ja Redo

Esiehdot:	On oltava suoritettuna toiminto, joka on muuttanut piirtoavaruuden rakennetta.

Kuvaus:	Kun käyttäjä valitsee kumoamistoiminnon ja piirtoavaruus palaa toiminnon suoritusta edeltävään tilaan. Kun käyttäjä valitsee uudelleensuoritustoiminnon suoritetaan edellinen kumottu toiminto uudelleen.

Poikkeukset: 	-

Jälkitilanne: 	Ennalta suoritettu toiminto on kumottu ja/tai kumottu toiminto on tehty uudelleen.