VSˇB - Technicka´ univerzita Ostrava Fakulta elektrotechniky a informatiky Katedra informatiky
Vizualizace podnikovy´ch procesu˚
2006
Jan Dajcˇ
Prohlasˇuji, zˇe jsem tuto diplomovou pra´ci vypracoval samostatneˇ. Uvedl jsem vsˇechny litera´rnı´ prameny a publikace, ze ktery´ch jsem cˇerpal.
V Ostraveˇ 16. kveˇtna 2006
.............................
Ra´d bych na tomto mı´steˇ podeˇkoval vsˇem, kterˇ´ı mi s pracı´ pomohli, protozˇe bez nich by tato pra´ce nevznikla.
Abstrakt Bakala´rˇska´ pra´ce se zaby´va´ mozˇnostı´ vizualizace podnikovy´ch procesu˚ v 3D prostoru, v ktere´m bude vy´sledny´ graf automaticky usporˇa´da´n na za´kladeˇ fyzika´lnı´ch sil. Pra´ce se take´ snazˇ´ı porovnat prˇehlednost grafu˚ v 2D a 3D prostoru. K implementaci byl pouzˇit programovacı´ jazyk Java resp. Java 3D. Klı´cˇova´ slova: Podnikovy´ proces, Java, Java 3D, XML, Koordinacˇnı´ diagram
Abstract Thesis presents posibility of business processes visualization in 3D area, in which the graph will be automatically organized in terms of physical forces. Thesis also tries to compare the transparency of the graphs in 2D and 3D area. The Java and Java3D technology was used for the implementation. Keywords: Business proces, Java, Java 3D, XML, Coordinating diagram
OBSAH
1
Obsah 1
´ vod U
3
2
Podnikovy´ proces 2.1 Metoda BPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Analy´za syste´mu na zobrazenı´ . . . . . . . . . . . . . . . . . . . . . . . . .
4 4 5
3
Na´vrh syste´mu na vizualizaci procesu˚ 3.1 Automaticke´ rozlozˇenı´ prvku˚ v grafu 3.2 Pruzˇinkovy´ graf . . . . . . . . . . . . . 3.3 Popis vstupnı´ch parametru˚ . . . . . . 3.4 Na´vrh za´kladnı´ch trˇ´ıd . . . . . . . . . 3.5 Popis du˚lezˇity´ch funkcı´ . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
8 8 8 10 12 13
Implementace syste´mu na vizualizaci grafu 4.1 Java . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Java3D . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Popis balı´ku˚ aplikace . . . . . . . . . . . . . . . . 4.4 Popis jednotlivy´ch trˇ´ıd a jejich vybrany´ch metod
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
17 17 17 19 19
5
Uzˇivatelska´ prˇı´rucˇka 5.1 Instalace a spusˇteˇnı´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Ovla´da´nı´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Demonstracˇnı´ prˇ´ıklad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23 23 23 23
6
Za´veˇr
29
7
Literatura
30
4
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
Prˇı´lohy
30
A Podrobny´ popis trˇ´ıd
31
B Obsah prˇilozˇene´ho CD
32
˚ SEZNAM OBRA´ZKU
2
Seznam obra´zku˚ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Prvky koordinacˇnı´ho modelu metody BPM . . . . . . . . . . . . Uka´zka koordinacˇnı´ho modelu metody BPM . . . . . . . . . . . Prˇ´ıklad nahrazenı´ hran pruzˇinkami . . . . . . . . . . . . . . . . . Trˇ´ıdnı´ diagram za´kladnı´ch prvku˚ . . . . . . . . . . . . . . . . . . Sekvencˇnı´ diagram importu souboru . . . . . . . . . . . . . . . . Sekvencˇnı´ diagram spusˇteˇnı´ transformace . . . . . . . . . . . . . Prvky grafu sce´ny v Javeˇ 3D . . . . . . . . . . . . . . . . . . . . . Jednoduchy´ graf sce´ny v Javeˇ 3D . . . . . . . . . . . . . . . . . . Graf sce´ny aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . Graf sce´ny aktivnı´ho objektu . . . . . . . . . . . . . . . . . . . . Diagram koordinacˇnı´ho modelu v aplikaci BPStudio . . . . . . . Aplikace GraphVisualization po spusˇteˇnı´ . . . . . . . . . . . . . Zvolenı´ souboru pro import dat . . . . . . . . . . . . . . . . . . . Aplikace teˇsneˇ po importu souboru˚ . . . . . . . . . . . . . . . . . Graf po transformaci . . . . . . . . . . . . . . . . . . . . . . . . . Graf po prˇenastavenı´ vlastnostı´ vlcholu˚ . . . . . . . . . . . . . . Prˇehledny´ graf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Uka´zka vygenerovane´ho koordinacˇnı´ho diagramu prodeje auta Podrobny´ popis trˇ´ıd . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
4 5 8 13 14 15 18 18 20 20 24 24 25 25 26 26 27 28 31
1
´ VOD U
3
´ vod 1 U Podnikovy´ proces se nejle´pe pochopı´ z prˇehledne´ho diagramu, ktery´ tento proces prˇedstavuje. Tento diagram tvorˇ´ı cˇloveˇk, ktery´ prvky rozmı´stı´ a pospojuje. BPStudio je na´stroj pro jejich modelova´nı´ a usnadnˇuje tak pra´ci prˇi tvorˇenı´ diagramu˚ procesu. Vzˇdy ale musı´ cˇloveˇk tyto prvky rozmı´stit. Cı´lem te´to pra´ce by meˇla by´t aplikace schopna´ usnadnit lidem pra´ci prˇi vytva´rˇenı´ modelu˚ podnikovy´ch procesu˚. Meˇla by by´t schopna´ automaticky vytvorˇit diagram podnikove´ho procesu jen na za´kladeˇ znalosti propojenı´ jednotlivy´ch objektu˚. Tento diagram by meˇl by´t dostatecˇneˇ prˇehledny´ a take´ u´hledny´. Proto nejprve analyzuji diagramy vytvorˇene´ lidmi, abych zjistil, jestli je neˇjake´ pravidlo, ktere´ by se dalo pouzˇ´ıt prˇi automaticke´m usporˇa´da´nı´ prvku˚. Pote´ navrhnu aplikaci, ktera´ by zjisˇteˇne´ poznatky odzkousˇela na jizˇ vytvorˇeny´ch modelech v programu BPStudio. Za´veˇrem ji naimplementuji a otestuji, zda obstojı´ konkurenci lidmi vytva´rˇeny´ch grafu˚.
2
PODNIKOVY´ PROCES
4
2 Podnikovy´ proces Chceme-li vytvorˇit informacˇnı´ syste´m, ktery´ ma´ by´t nasazen ve sluzˇba´ch, bankovnictvı´, nebo ve vy´robeˇ, musı´me nejdrˇ´ıve popsat procesy, ktere´ v danne´m odveˇtvı´ probı´hajı´ a podle ktery´ch urcˇ´ıme chova´nı´ cele´ho informacˇnı´ho syste´mu. Tyto procesy, ktere´ popisujeme, nazy´va´me tzv. podnikovy´mi procesy, neboli business processes. Abychom je mohli le´pe prezentovat a snadneˇji jim porozumeˇt, byla vyvinuta u´cˇinna´ metoda pro jejich modelova´nı´, kterou nazy´va´me BPM (Business Process Modeling).
2.1
Metoda BPM
BPM je formalizovany´ na´stroj vizua´lnı´ho modelova´nı´, ktery´ umozˇnˇuje struktura´lnı´ analy´zu nutnou pro definova´nı´ organzacˇnı´ struktury a analy´zu prostrˇednictvı´m simulace nutnou ke kvantifikaci procesu (doba trva´nı´, na´klady, atd.). Modely lze pote´ vyuzˇ´ıt i k pocˇ´ıtacˇem podporovane´mu rˇ´ızenı´ a monitorova´nı´ procesu˚. Model specifikuje podnikovy´ proces ze trˇ´ı relativneˇ neza´visly´ch pohledu˚, funkcˇnı´ho, objektove´ho a koordinacˇnı´ho. 2.1.1
Funkcˇnı´ model
Funkcˇnı´ model specifikuje architekturu procesu, vcˇetneˇ urcˇenı´ jeho uzˇivatelu˚ a produktu˚ ´ kolem modelu je zjistit, jake´ a definuje vazby mezi podprocesy (spolupra´ci a obsazˇenı´). U funkce jsou pozˇadovane´, jake´ procesy je realizujı´ a jaka´ je jejich struktura. 2.1.2
Objektovy´ model
Zna´zornu˚je statickou strukturu obsahujı´cı´ vsˇechny objekty, ktere´ v procesu vystupujı´. Objekty rozlisˇujeme na aktivnı´ a pasivnı´ podle jejich aktivnı´ u´cˇasti. Aktivnı´ objekty jsou realita´zorˇi procesu a pasivnı´ objekty jsou procesem manipulova´ny, vytva´rˇeny cˇi spotrˇebova´va´ny. Model je sestavova´n pro kazˇdy´ proces definovany´ ve funkcˇnı´m modelu zvla´sˇt’. 2.1.3
Koordinacˇnı´ model
Vycha´zı´ z prˇedchozı´ch dvou modelu˚ a definuje, jak ve skutecˇnosti bude proces probı´hat. K simulaci i rˇ´ızenı´ procesu pouzˇ´ıva´ koordinacˇnı´ model principu˚ Petriho sı´tı´. Za´kladnı´mi prvky josu aktivnı´ objekt, pasivnı´ objekt a aktivita.
Obra´zek 1: Prvky koordinacˇnı´ho modelu metody BPM
2
PODNIKOVY´ PROCES
5
Aktivnı´ objekt reprezentuje uzˇivatele, osoby zodpoveˇdne´ za proces cˇi aktivitu. Pasivnı´ objekt reprezentuje materia´ly, produkty, nebo data v podnikove´m procesu a je charakterizova´n svy´mi atributy. Prˇ´ıklad koordinacˇnı´ho modelu je na obra´zku 2.
Obra´zek 2: Uka´zka koordinacˇnı´ho modelu metody BPM
2.2
Analy´za syste´mu na zobrazenı´
Koordinacˇnı´ model je pro popis procesu nejvy´stizˇneˇjsˇ´ı a proto se jı´m budu da´le zaby´vat v ra´mci me´ vizualizace podnikove´ho procesu. Jak je vidno z obra´zku 2, je graf celkem prˇehledny´ a usporˇa´dany´. Do tohoto sta´dia prˇehlednosti se vsˇak dostal tak, zˇe ho musel cˇloveˇk, ktery´ jej vytva´rˇel, takto usporˇa´dat. Existujı´ samozrˇejmeˇ metody, ktere´ na´m automaticky graf sestavı´, ale je zde mnoho neprˇ´ıjemnostı´ se ktery´mi se musı´ dany´ algoritmus
2
PODNIKOVY´ PROCES
6
vyporˇa´dat. Naprˇ´ıklad si mu˚zˇeme vzı´t krˇ´ızˇenı´ hran. Chceme li ve slozˇite´m grafu zajistit nezkrˇ´ızˇenı´ hran, nemusı´ to vzˇdy jı´t a existujı´ prˇ´ıpady, ve ktery´ch se jednodusˇe bez krˇ´ızˇenı´ neobejdeme. Dalsˇ´ı na´strahou pak mohou by´t prˇekry´vajı´cı´ se vrcholy, ktere´ se prˇekry´vajı´ bud’ z cˇa´sti, nebo dokonce cele´ tak, zˇe jeden vrchol mu˚zˇe by´t skryt za druhy´m. Tyto situace se ale dajı´ lehce algoritmem na usporˇa´da´nı´ uhlı´dat, ale nezajistı´ na´m peˇkneˇ vypadajı´cı´ a esteticky´ graf. Tyto poznatky platı´ pro grafy v 2D prostoru. Cı´lem te´to pra´ce je prˇidat jesˇteˇ jednu dimenzi navı´c. Prˇida´nı´m te´to dimenze vznikne zcela novy´ manipulacˇnı´ prostor, ktery´ na´m umozˇnı´ trochu jiny´ pohled na vytva´rˇenı´ grafu. Jak uzˇ jsem drˇ´ıve zmı´nil, tak pro 2D existujı´ jizˇ postupy pro vytvorˇenı´ grafu a ty budou samozrˇejmeˇ fungovat i v 3D prostoru, ale je zde ota´zkou, podle cˇeho prˇida´vat do grafu jesˇteˇ jednu sourˇadnici. Vezmeˇme si naprˇ´ıklad jednoduchy´ algoritmus pro graf v rovineˇ, ktery´ vrcholy grafu rozmı´stı´ po obvodu kruzˇnice a pospojuje je tak, jak mu bylo zada´no. Takto vznikly´ graf nebude moc peˇkny´ a navı´c, bude-li trochu slozˇiteˇjsˇ´ı, budou se hrany krˇ´ızit. Jestlizˇe ale tento graf prˇevedeme do 3D a u´plneˇ jednodusˇe da´me kazˇde´mu vrcholu jinou sourˇadnici z, ktera´ bude vyjadrˇovat naprˇ. vy´sˇku, tak na´m vznikne, z urcˇite´ho pohledu, v podstateˇ totozˇny´ graf. Kouzlo 3D prostoru je, zˇe si tento graf mu˚zˇeme otocˇit a tak se ra´zem zobrazı´ rozdı´ly vy´sˇky vrcholu˚ a bude videˇt, zˇe se hrany nekrˇ´ızˇ´ı. U tohoto jednoduche´ho algoritmu nebude vy´sledek oslnivy´, chceme totizˇ, aby graf pu˚sobil sporˇa´daneˇ podle dany´ch pravidel a ne jako kruzˇnice. Koordinacˇnı´ diagram na obra´zku 2 by nejspı´sˇe nevypadal moc peˇkneˇ, kdybychom jeho vrcholy rozmı´stili po obvodu kruzˇnice. Podı´va´me li se na tento diagram blı´zˇe, tak z neˇj vycˇteme neˇktere´ vlastnosti, ktere´ budeme moci pouzˇ´ıt u automaticke´ho tvorˇenı´ grafu pra´veˇ pro koordinacˇnı´ model. 2.2.1
Charakteristiky koordinacˇnı´ho diagramu
Na obra´zku 2 vidı´me, zˇe vrcholy (aktivnı´ objekty, pasivnı´ objekty a aktivity) ktere´ majı´ mezi sebou hranu, jsou si nejblı´zˇe. Bude tedy trˇeba navrhnout syse´m, ktery´ by tyto vrcholy udrzˇoval co nejblı´zˇe, ale aby byly za´rovenˇ cˇitelne´ a nebyly tak blı´zko, aby se prˇekry´valy. Ostatnı´ vrcholy, ktere´ mezi sebou hranu nemajı´, jsou od sebe na prvnı´ pohled vzda´leny libovolneˇ. Podı´va´me li se na graf porˇa´dneˇ, zjistı´me, zˇe dva vrcholy, ktere´ mezi sebou hranu nemajı´ jsou od sebe vzda´leny v za´vislosti na pocˇtu vrcholu˚, prˇes ktere´ jsou tyto dva vrcholy na sebe napojeny. Bude-li naprˇ´ıklad z vrcholu A do vrcholu B cesta rovna 3 bude jejich vzda´lenost mensˇ´ı, nezˇ mezi vrcholy A a C, mezi ktery´mi je cesta rovna 6. Samozrˇejmeˇ toto pravidlo nemusı´ platit vzˇdy. Da´me-li dvoum lidem stejny´ u´kol, aby sestavili graf, u ktere´ho budou pouze veˇdeˇt, ktere´ vrcholy jsou mezi sebou spojeny, tak ´ kolem te´to pra´ce je vsˇak tento kazˇdy´ z nich sestavı´ graf tak, aby byl pro neˇj prˇehledny´. U postup automatizovat a vyzkousˇet, jestli se alesponˇ prˇiblı´zˇ´ı vy´sledku˚m, ktere´ by byly pro cˇloveˇka prˇehledne´, takzˇe budu vycha´zet z poznatku˚ o vzda´lenostech, ktere´ jsem zmı´nil vy´sˇe. Vzhledem k vlastnostem koordinacˇnı´ho diagramu se tedy v te´to pra´ci pokusı´m navrhnout syste´m vizualizace, ktery´ by se dal vyuzˇ´ıt pro zobrazenı´ pracovnı´ho procesu a ktery´ by byl stejneˇ, nebo dokonce i le´pe prˇehledny´, prˇicˇemzˇ jej vytvorˇ´ı sa´m stroj a ne cˇloveˇk. Podle dvou hlavnı´ch vlastnostı´, ktere´ jsou zmı´neˇny vy´sˇe bych chteˇl rozvinout
2
PODNIKOVY´ PROCES
7
mysˇlenku, ktera´ se pouzˇ´ıva´ u 2D grafu˚. Je to tzv. ”pruzˇinkovy´ graf” ktery´ nahrazuje hrany pruzˇinkami. Tato za´meˇna zajistı´, aby vrcholy spolu spojene´ zu˚sta´valy mezi sebou v urcˇity´ch vzda´lenostech. Toto resˇenı´ se pouzˇ´ıva´ v 2D a bude tak dobre´ sledovat, jak bude vypadat po prˇevodu do 3D. Druha´ vlastnost diagramu je vzda´lenost mezi nespojeny´mi vrcholy. Toto se pokusı´m nasimulovat pomocı´ odpudive´ elektrostaticke´ sı´ly, ktera´ bude pu˚sobit mezi vsˇemi vrcholy grafu.
3
˚ NA´VRH SYSTE´MU NA VIZUALIZACI PROCESU
8
3 Na´vrh syste´mu na vizualizaci procesu˚ 3.1
Automaticke´ rozlozˇenı´ prvku˚ v grafu
Jak uzˇ bylo rˇecˇeno v prˇedchozı´ kapitole, bude se graf usporˇa´da´vat automaticky, bez pomoci lidske´ho za´sahu. Umozˇnı´ na´m to tak naprˇ. generovat diagramy jizˇ existujicı´ho podnikove´ho procesu z komponent. Postup je veˇtsˇinou opacˇny´, tedy zˇe jsou drˇ´ıve vytvorˇeny diagramy pro popis procesu a pak azˇ se zacˇ´ına programovat, ale navrzˇeny´ syste´m by se meˇl da´t pouzˇ´ıt i prˇi opacˇne´m postupu, cozˇ je jeho vy´hoda. Cı´lem je hlavneˇ dosa´hnout takove´ho vy´sledku, aby byl graf prˇehledny´ a byl podobny´ rozmı´steˇnı´ prvku˚ v grafu tak, jako by je rozmı´stil cˇloveˇk. Proto jsem podle dvou hlavnı´ch vlastnostı´ koordinacˇnı´ho modelu zvolil tzv. ”pruzˇinkovy´ graf”.
3.2
Pruzˇinkovy´ graf
Tato metoda se pouzˇ´ıva ve 2D grafech na usporˇa´da´nı´ prvku˚. Funguje na principu nahrazenı´ hran grafu pruzˇinami, ktere´ k sobeˇ prˇitahujı´ dva vrcholy, mezi nimizˇ je hrana. Tento algoritmus je celkem efektivnı´ a veˇtsˇinou se podarˇ´ı nepeˇkne´ grafy prˇeve´st na grafy mnohem prˇehledneˇjsˇ´ı a kompaktneˇjsˇ´ı. Toho se dosa´hne tak, zˇe vsˇechny pruzˇiny majı´ tendenci se dostat do vyva´zˇene´ho stavu, prˇicˇemzˇ zmeˇna jedne´ ovlivnˇuje ostatnı´. U tohoto algoritmu je peˇkne´ sledovat krok po kroku, co se s cely´m grafem deˇje, protozˇe je to zajı´mava´ podı´vana´, jak pouhe´ zavedenı´ jedne´ sı´ly do grafu, doka´zˇe s cely´m grafem hy´bat a usporˇa´da´vat jej. Nicme´neˇ v 2D prostoru na´m tento mechanismus nevyrˇesˇ´ı krˇ´ızˇenı´ hran, jednodusˇe se mu˚zˇe sta´t, zˇe se hrany prˇekrˇ´ızˇ´ı, protozˇe tento model samotny´ krˇ´ızˇenı´ neˇjak nerˇesˇ´ı. V 3D se tento model pruzˇinkove´ho grafu vyuzˇ´ıva´ jen zrˇ´ıdka a proto se v te´to pra´ci zameˇrˇ´ım na jeho prˇevod do 3D. Tento prˇevod sa´m o sobeˇ nenı´ neˇjak slozˇity´, pouzˇijı´ se principy nahrazenı´ hran stejneˇ tak, jako v 2D. Vznika´ na´m vsˇak veˇtsˇ´ı prostor pro manipulaci s vrcholy. Proto bude trˇeba jesˇteˇ zajistit, aby byly vu˚cˇi sobeˇ usporˇa´da´ny i vrcholy, ktere´ mezi sebou hranu nemajı´.
Obra´zek 3: Prˇ´ıklad nahrazenı´ hran pruzˇinkami Prˇi nahrazova´nı´ hran pruzˇinami, na´m postacˇ´ı jednoduchy´ fyzika´lnı´ vzorec pro pruzˇinovy´ oscila´tor, ktery´ ma´ harmonicke´ kmity a za´visı´ pouze na tuhosti pruzˇiny k a vzda´le-
3
˚ NA´VRH SYSTE´MU NA VIZUALIZACI PROCESU
9
nosti vrcholu˚ d. Vzorec prˇitazˇlive´ sı´ly Fp proto bude: Fp = k ∗ d
(1)
Tuhost pruzˇiny k pak bude urcˇovat, jak daleko od sebe vrcholy budou ve vy´sledne´m grafu. 3.2.1
Vylepsˇeny´ pruzˇinkovy´ graf
Samotne´ nahrazenı´ hran pruzˇinami nerˇesˇ´ı proble´m prˇekrˇ´ızˇenı´ hran a vzda´lenostı´ vrcholu˚, mezi ktery´mi hrana nenı´. Proto budu muset zave´st do cele´ho syste´mu jesˇteˇ sı´lu, ktera´ bude pu˚sobit mezi u´plneˇ vsˇemi vrcholy, nehledeˇ na to, zda-li mezi sebou hranu majı´, cˇi nikoliv. Na vy´beˇr bylo z vı´ce mozˇnostı´, at’ uzˇ gravitacˇnı´, cˇi magneticka´ sı´la. Vybral jsem ale sı´lu elektrostatickou, konkre´tneˇ sı´lu, mezi dveˇmi bodovy´mi na´boji. Budu ji pouzˇ´ıvat v tom smyslu, zˇe tyto bodove´ na´boje budou prˇedstavovat vrcholy grafu a neza´lezˇ´ı, jestli jsou spojeny hranou. Tuto elektrickou odpudivou sı´lu oznacˇ´ım jako Fo , ktera´ se vypocˇ´ıta´ takto: Fo = k ∗
Q1 ∗ Q2 r2
(2)
Kde k oznacˇuje konstantu u´meˇrnosti, ktera´ za´visı´ na prostrˇedı´, v ktere´m se na´boje vyskytujı´, Q1 a Q2 jsou velikosti bodovy´ch na´boju˚ a r je jejich vzda´lenost. V praxi toto funguje tak, zˇe jsou-li oba na´boje nabity souhlasneˇ, pak se se odpuzujı´, jsou li nabity opacˇneˇ, pak se prˇitahujı´. Tohoto vyuzˇijeme pro nasˇe vrcholy tak, zˇe vsˇechny budou nabity souhlasneˇ a tı´m pa´dem se budou vsˇechny od sebe odpuzovat. Tı´m pa´dem, jestlizˇe by v cele´m grafu nebyla jedina´ hrana, ”rozleteˇly” by se vrcholy do vsˇech stran. Budou-li v grafu hrany, ktere´ nahradı´me pruzˇinkami, zacˇne na kazˇdy´ vrchol pu˚sobit vı´ce sil, ktere´ se cˇasem dostanou do rovnova´hy a vytvorˇ´ı tak na´mi pozˇadovany´ graf. Dı´ky te´to vlastnosti se na´m vyrˇesˇ´ı hned neˇkolik proble´mu. Nebude docha´zet k prˇekry´va´nı´ vrcholu˚. V prˇ´ıpadeˇ, zˇe by ve grafu byly pouze 2 vrcholy a byla by mezi nimi hrana, pak by na kazˇdy´ vrchol pu˚sobila vy´sledna´ sı´la Fv , ktera´ je da´na rozdı´lem sı´ly prˇitazˇlive´ Fp a sı´ly odpudive´ Fo : Fv = Fp − Fo
(3)
Ze vzorecˇku˚, ktere´ jsem pouzˇil je zrˇejme´, zˇe bude za´lezˇet hlu˚avneˇ na vzda´lenosti mezi dany´mi vrcholy. Pokud bude mezi vrcholy hrana a budou hodneˇ vzda´leny, pak prˇitazˇliva´ sı´la, kterou obstara´va´ pruzˇina, bude velka´. Naopak odpudiva´ sı´la bude mala´. Jestlizˇe se ale vrcholy k sobeˇ zacˇnou prˇiblizˇovat dı´ky prˇevaze prˇitazˇlive´ sı´ly, pak zacˇne naru˚stat sı´la odpudiva´ a sı´la prˇitazˇliva´ se bude zmensˇovat. Z toho je jasne´, zˇe se tyto sı´ly po urcˇite´ chvı´li vyrovnajı´, vy´sledna´ sı´la Fv bude rovna nule a graf bude stabilnı´. 3.2.2
Vy´sledne´ sı´ly v pruzˇinkove´m grafu
Prˇi veˇtsˇ´ım pocˇtu vrcholu˚ nezˇ dva budou vzorce sil trochu pozmeˇneˇny, protozˇe vrcholy mohou mı´t hranu s vı´ce nezˇ jednı´m vrcholem a bude-li v grafu vı´ce vrcholu˚, tak na sebe
3
˚ NA´VRH SYSTE´MU NA VIZUALIZACI PROCESU
10
budou vsˇechny pu˚sobit onou odpudivou silou. Tı´m pa´dem bude vzorec pro prˇitazˇlivou (pruzˇinkovou) sı´lu Fp roven: Fp =
n
(k ∗ di )
(4)
i=1
Kde n je pocˇet vrcholu˚, s ktery´mi ma´ vrchol hranu, k je tuhost pruzˇiny a di je vzda´lenost mezi i-ty´m vrcholem a vrcholem, pro ktery´ danou prˇitazˇlivou sı´lu meˇrˇ´ıme. Obdobneˇ bude vypadat vzorec pro vy´pocˇet odpudive´ sı´ly Fo : Fo =
m
(k ∗
j=1
Q ∗ Qj ) rj2
(5)
Kde m je pocˇet vrcholu˚ v grafu, k je konstanta u´meˇrnosti, Q je na´boj vrcholu, pro ktery´ sı´lu zjisˇt’ujeme, Qj je na´boj j-te´ho vrcholu a rj je vzda´lenost mezi j-ty´m vrcholem a vrcholem, pro ktery´ danou odpudivou sı´lu meˇrˇ´ıme. Vzorec pro vy´slednou sı´lu Fv proto bude vypadat:
Fv =
n
(k ∗ di ) −
i=1
m
(k ∗
j=1
Q ∗ Qj ) rj2
(6)
Samozrˇejmeˇ chceme li pracovat se silami ve 2D, nebo 3D prostoru musı´me s nimi pracovat jako s vektory. Tudı´zˇ se prˇi scˇ´ıta´nı´ jednotlivy´ch sil bude postupovat, jako prˇi klasicke´m skla´da´nı´ vektoru˚.
3.3
Popis vstupnı´ch parametru˚
Vy´sledna´ aplikace bude graf tvorˇit automaticky a je tedy rozumne´ navrhnout neˇjaky´ vhodny´ forma´t vstupnı´ch dat. Mozˇnostı´ je cela´ rˇada, at’uzˇ si vezmeme obycˇejne´ nacˇtenı´ parametru˚ z jednoduche´ho textove´ho souboru se seznamem sousedu˚, nebo naprˇ´ıklad matici sousednosti. K dispozici je ale aplikace BPStudio, ktera´ slouzˇ´ı k modelova´nı´ podnikovy´ch procesu˚ a obsahuje na´stroj pro export vytvorˇeny´ch procesu˚ do forma´tu XML. Forma´t XML je nejlepsˇ´ı volba, nebot’se v dnesˇnı´ dobeˇ hojneˇ vyuzˇ´ıva´ k reprezentaci dat a ke komunikaci mezi aplikacemi ru˚zne´ho druhu. Prˇi importu dat z XML souboru, ktery´ je vyexportova´n z BPStudia se budu zaby´vat jen objekty, ktere´ jsou pro tuto pra´ci du˚lezˇite´. V exportovane´m souboru totizˇ nalezneme vsˇechny trˇi modely podnikovy´ch procesu a dalsˇ´ı ru˚zna´ nastavenı´, ktere´ nebudeme potrˇebovat. Struktura souboru je prˇesneˇ stanovena v souboru bpmodel.dtd, ktery´ slouzˇ´ı k popisu vy´stupnı´ho souboru BPStudia. V souboru je slovnı´k vsˇech pouzˇity´ch objektu˚, ktere´ se vyskutujı´ ve vsˇech modelech. Prˇ´ıklad ulozˇene´ho aktivnı´ho objektu:
Grafik
3
˚ NA´VRH SYSTE´MU NA VIZUALIZACI PROCESU
11
<Services>
Vy´pis 1: Aktivnı´ objekt v XML souboru Pasivnı´ objekt: <Passive id=” 4” class=”bpm.method.Passive”>
Produkt
Vy´pis 2: Pasivnı´ objekt v XML souboru Aktivita:
korektura <Scenarios> <Scenario> default <Time>00:00:00 0 <Spec/> <Scenario> <Time>00:00:00 <Spec/> <Scenario> <Time>00:00:00 <Spec/>
Vy´pis 3: Aktivita v XML souboru Podproces: Prodej auta <Spec>Hlavnı´ proces prodeje auta
Vy´pis 4: Podpu˚rny´ proces v XML souboru Da´le pak na´sledujı´ jednotlive´ definice funkcˇnı´ho, objektove´ho a koordinacˇnı´ho modelu. Princip sestavenı´ vsˇech modelu˚ je shodny´, takzˇe uka´zˇi, jak je graf v XML souboru
3
˚ NA´VRH SYSTE´MU NA VIZUALIZACI PROCESU
12
reprezentova´n. Prˇi vy´pisu objektu˚, ktere´ se v modelech vyskytujı´ jste si mohli povsˇimnout, zˇe kazˇdy´ objekt ma´ atribut id. Podle tohoto id se objekty do modelu˚ prˇirˇazujı´. V kazˇde´m modelu se mu˚zˇe jaky´koliv objekt libovolneˇ opakovat, proto se musı´ urcˇit nove´ identifika´tory pro jednotlive´ modely:
Vy´pis 5: Objekty v dane´m modelu v XML souboru Jedine´ co zby´va´ je urcˇit hrany mezi jednotlivy´mi vrcholy: <Edge class=”bpm.drawing.Responsibility” from=” 12” to=” 13”>
Vy´pis 6: Prˇ´ıklad hrany grafu v XML souboru Lze videˇt, zˇe vsˇechny parametru jednotlivy´ch objektu˚ potrˇebovat nebudeme, naprˇ´ıklad pozice vrcholu˚ a hran, ale tento seznam objektu˚ na´m trochu napovı´da´, jake´ trˇ´ıdy budou nutne´ pro nasˇi aplikaci.
3.4
Na´vrh za´kladnı´ch trˇ´ıd
Na obra´zku 4 je zobrazen diagram za´kladnı´ch trˇ´ıd syste´mu. Trˇ´ıda MainFrame je potomkem trˇ´ıdy JFrame a bude prˇedstavovat hlavnı´ okno aplikace, ktere´ bude uzˇivateli zobrazovat cely´ graf a umozˇnı´ nastavova´nı´ ru˚zny´ch vlastnostı´ za´kladnı´mi ovla´dacı´mi prvky, jako jsou naprˇ´ıklad tlacˇ´ıtka. Da´le pak bude odkazovat na trˇ´ıdu Scene a trˇ´ıdu Timer zdeˇdeˇnou ze trˇ´ıdy Thread. Ta se bude starat o cˇasova´nı´ a o pru˚beˇh animace a dı´ky tomu, zˇe je potomkem trˇ´ıdy Thread, na´m umozˇnı´ manipulaci s grafem beˇhem transformace grafu, protozˇe bude spusˇteˇna jako samostatne´ vla´kno. Bude volat metodu trˇ´ıdy Scene, ktera´ bude cely´ Graf transformovat. Trˇ´ıda Scene bude vlastneˇ cely´ graf, bude jej tvorˇit a upravovat. Proto take´ bude muset shromazˇd’ovat prvky, ktere´ jsou v grafu obsazˇeny, tedy vrcholy hrany. Vrcholy budou potomky abstraktnı´ trˇ´ıdy Apex a mohou by´t ru˚zne´ho typu (ActiveApex, PassiveApex, ActivityApex, ProcessApex, EmptyApex). Vrcholy budou deˇdeny z trˇ´ıdy Apex proto, protozˇe v te´to trˇ´ıdeˇ budou vesˇkere´ na´stroje na pra´ci s vrcholem a v jednotlivy´ch potomcı´ch bude jen specifikova´no, jak budou ve grafu vypadat. Trˇ´ıda Edge bude velice jednoducha´, protozˇe bude reprezentovat hranu a to znamena´, zˇe si bude udrzˇovat referenci na dveˇ instance objektu typu Apex a bude take´ tvorˇit vy´slednou vizualizaci hrany. Zby´va´ trˇ´ıda XmlParser, ktera´ bude importovat XML soubor, ktery´ chceme
3
˚ NA´VRH SYSTE´MU NA VIZUALIZACI PROCESU
13
JFrame
MainFrame Thread
Timer
Scene
XmlParser
*
*
Apex
ActiveApex
ActivityApex
Edge
PassiveApex
ProcessApex
EmptyApex
Obra´zek 4: Trˇ´ıdnı´ diagram za´kladnı´ch prvku˚
zobrazit jako graf procesu. Tato trˇ´ıda postupneˇ rozebere vstupnı´ soubor a to tak, zˇe si zjistı´ vsˇechny vrcholy a pak pouzˇije jen ty, ktere´ budou zobrazeny v koordinacˇnı´m diagramu, pak uzˇ jen doplnı´ a zinicializuje hrany a to vsˇe prˇeda´ zpeˇt do sce´ny, tedy do instance trˇ´ıdy Scene, ktera´ je prˇida´ do sce´ny a zobrazı´.
3.5 3.5.1
Popis du˚lezˇity´ch funkcı´ Import XML souboru
Tato funkce je jednou z nejdu˚lezˇiteˇjsˇ´ıch, nebot’bychom bez nı´ nemeˇli co zobrazovat. Vsˇe zacˇ´ına´ ve trˇ´ıdeˇ MainFrame, ktera´ je vpodstateˇ uzˇivatelske´ okno, v ktere´m uzˇivatel klikne neˇkde na import souboru. Trˇ´ıda zareaguje otevrˇenı´m dialogu pro nahra´nı´ souboru a pote´ co uzˇivatel vybere soubor, vola´ metodu trˇ´ıdy Scene initializeGraph(file), kde file je na´zev souboru. Trˇ´ıda Scene na toto bude reagovat vytvorˇenı´m nove´ho prostrˇedı´ pro graf do ktere´ho bude vkla´dat noveˇ importovane´ objekty. Ty zı´ska´ spusˇteˇnı´m metody parseApexes(file) na trˇ´ıdeˇ XmlParser. Ta nahraje vstupnı´ soubor a pokusı´ se ho projı´t
3
˚ NA´VRH SYSTE´MU NA VIZUALIZACI PROCESU
14
a zı´skat z neˇj potrˇebne´ informace pro sestavenı´ vrcholu˚ a hran, ktere´ budou do grafu patrˇit. Pote´ bude ve smycˇka´ch vytva´rˇet uzˇ konkre´tnı´ vrcholy a hrany, ktere´ potom v prˇ´ıslusˇny´ch kolekcı´ch vra´tı´ zpeˇt do trˇ´ıdy Scene. Ta prˇida´ objekty do sce´ny a celou sce´nu prˇeda´ hlavnı´mu oknu, ktere´ je zobrazı´. Celou tuto funkci zobrazuje sekvencˇnı´ diagram na obra´zku 5.
aMainFrame:MainFrame
aScene:Scene
:XmlParser
aApex:Apex
aEdge:Edge
1) .initializeGraph(file):canvas3D 2) .parseApexes(file,tg,edges):apexes loop(apexes) []
3) .Apex(name,tg,type):apex << create >> 3) Apex
loop(edges) []
4) .Edge(apex1,apex2):edge << create >> 4) Edge
2) parseApexes 1) initializeGraph
Obra´zek 5: Sekvencˇnı´ diagram importu souboru
Import souboru: • 1. Vola´nı´ metody na nastavenı´ nove´ sce´ny • 2. Pozˇa´da´nı´ o analy´zu vstupnı´ho souboru • 3. Vytvorˇenı´ vsˇech vrcholu˚ • 4. Vytvorˇenı´ vsˇech hran V sekvencˇnı´m diagramu na obra´zku 5 je zobrazena abstraktnı´ trˇ´ıda Apex. Ta se ale nevytva´rˇ´ı, nebot’z abstraktnı´ch trˇ´ıd nelze instance vytva´rˇet. Je zde ale z du˚vodu na´zorne´ uka´zky, zˇe se vytva´rˇ´ı instance podtrˇ´ıd te´to trˇ´ıdy podle typu, ktery´ je v importovane´m souboru uveden. Apex je zde prˇedevsˇ´ım z du˚vodu ma´lo sˇiroke´ stra´nky pro rozsa´hlejsˇ´ı sekvencˇnı´ diagram.
3
˚ NA´VRH SYSTE´MU NA VIZUALIZACI PROCESU
3.5.2
15
Spusˇteˇnı´ transformace grafu
Funkce transformace grafu je funkcˇnı´m ja´drem vy´sˇe popsane´ metody pro u´pravu grafu. Je to vlastneˇ du˚vod, procˇ tato pra´ce vznikla. Prˇi pru˚beˇhu te´to funkce se totizˇ graf bude automaticky usporˇa´da´vat a po urcˇite´m cˇase dosa´hneme ocˇeka´vane´ho vy´sledku, kdy bude graf ve vy´sledne´m stavu. Opeˇt zacˇneme v hlavnı´m oknu, ktere´ prˇedstavuje trˇ´ıda
aMainFrame:MainFrame
aTimer:Timer
aScene:Scene
aApex:Apex
aEdge:Edge
.setStoped(false)
loop(!stoped) []
1) .move()
loop(apexes) []
2) .calculatePower(apexes)
2) calculatePower 3) .move()
3) move
loop(edges) []
4) .move()
4) move
1) move
Obra´zek 6: Sekvencˇnı´ diagram spusˇteˇnı´ transformace MainFrame. V tomto okneˇ klikne uzˇivatel na tlacˇ´ıtko Play a spustı´ tak transformaci.
3
˚ NA´VRH SYSTE´MU NA VIZUALIZACI PROCESU
16
Instance trˇ´ıdy MainFrame nastavı´ vlastnost cˇasovacˇe, aby zacˇal v nekonecˇne´m cyklu volat metodu move() trˇ´ıdy Scene, ktera´ bude danou transformaci plnit. Projde vsˇechny vrcholy a opeˇt na kazˇde´m z nich zavola´ metodu move(), ktera´ se postara´ o vypocˇ´ıta´nı´ vsˇech pu˚sobicı´ch sil na vrchol a posunutı´ tohoto vrcholu na sve´ nove´ mı´sto. Jakmile budou vsˇechny vrcholy na novy´ch pozicı´ch, zacˇne procha´zet vsˇechny hrany a ty se automaticky prˇekreslı´ na novou pozici, aby ukazovaly spraveˇ. Spusˇteˇnı´ transformace: • Nastavenı´ vlastnosti cˇasovacˇe stoped na false a by se rozbeˇhl a dostal do nekonecˇne´ smycˇky • 1. vola´nı´ metody move() na instanci trˇ´ıdy Scene pro provedenı´ transformace • 2. vypocˇ´ıta´nı´ celkove´ sı´ly, ktera´ na kazˇdy´ vrchol pu˚sobı´ • 3. posunutı´ kazˇde´ho vrcholu na svou pozici • 3. prˇenastavenı´ pozice kazˇde z hran
4
IMPLEMENTACE SYSTE´MU NA VIZUALIZACI GRAFU
17
4 Implementace syste´mu na vizualizaci grafu Rozhodl jsem se implementovat aplikaci v programovacı´m jazyku Java, resp. v jejı´ na´dstavbeˇ Java3D, takzˇe jen neˇco ma´lo o te´to technologii.
4.1
Java
Java je vvysˇsˇ´ı objektoveˇ orientovany´ programovacı´ jazyk neza´visly´ na platformeˇ. Vyvı´jı´ ho prˇedevsˇ´ım spolecˇnost SUN Microsystems a je zdarma dostupny´ pro ru˚zne´ operacˇnı´ syste´my (Linux, Windows, Solaris). Tuto neza´vislost na platformeˇ zajisˇt’uje zpu˚sob kompilace. Zdrojove´ ko´dy jsou prˇekla´da´ny do tzv. byte-ko´du, ktery´ je pro cˇloveˇka necˇitelny´ a prˇi spousˇteˇnı´ java programu se tento byte-ko´d prˇeva´dı´ na strojovy´ ko´d prˇ´ıslusˇne´ho procesoru s ohledem na pouzˇity´ operacˇnı´ syste´m. Tento prˇevod prova´dı´ tzv. Java Virtual Machine (JVM), cozˇ je runtime, ktery´ musı´ by´t nainstalova´n tam, kde chceme program napsany´ v javeˇ spustit.
4.2
Java3D
Programovacı´ jazyk Java standardneˇ ale nezahrnuje pra´ci s 3D grafikou.Bylo ale vyvinuto API, ktere´ je distribuova´no jako volitelny´ balı´cˇek. Jmenuje se Java 3D API a po nahra´nı´ balı´cˇku do JVM na´m umozˇnˇuje v Javeˇ pracovat s 3D sce´nou, texturami, sveˇtly a ru˚zny´mi objekty. Poskytuje elegantnı´ mechanismy pro animova´nı´ sce´n a pro definova´nı´ chova´nı´ objektu˚. Jako samotna´ Java je i Java3D platformeˇ neza´visla´, avsˇak pro ru˚zne´ platformy jsou k dispozici prˇ´ıslusˇne´ balı´cˇky, nebot’firma SUN implementovala toto prostrˇedı´ pouze pro Windows a Solaris, nicme´neˇ ostatnı´ si pomohli sami a portovali API jak na Linux, tak HP-UX, nebo take´ Irix. K dispozici jsou dveˇ verze a to jak pro podporu OpenGL, tak DirectX. 4.2.1
Sce´na v Java 3D
Za´kladem sce´ny je objekt VirtualUniverse, ktery´ bud’ prˇ´ımo, nebo neprˇ´ımo odkazuje na vsˇechny ostatnı´ objekty, ktere´ celou sce´nu tvorˇ´ı. Trˇ´ıda VirtualUniverse se vsˇak prˇ´ımo nepouzˇ´ıva´, protozˇe pro mnohe´ u´cˇely je dostacˇujicı´ jejı´ podtrˇ´ıda SimpleUniverse, ktera´ se pouzˇ´ıva´ mı´sto nı´ a jejı´zˇ vyuzˇitı´ je mnohem snazˇsˇ´ı. Vsˇechny objekty ve sce´neˇ vytva´rˇejı´ stromovou strukturu, jejı´mzˇ korˇenem je pra´veˇ VirtualUniverse, ktery´ odkazuje na objekt Locale, cozˇ je ”pocˇa´tek sourˇadne´ soustavy sce´ny”. Objekt Locale pak odkazuje na objekty BranchGroup, ktere´ jsou korˇeny jednotlivy´ch cˇa´stı´ sce´ny. Slovy se cela´ sce´na jen teˇzˇko popisuje a tak byly urcˇeny jednoduche´ znacˇky pro zakreslenı´ cele´ sce´ny do grafu. 4.2.2
Graf sce´ny v Java 3D
Jak jde videˇt z obra´zku 7, jsou symboly pro zakreslenı´ grafu velice jednoduche´. VirtualUniverse a Locale, jsem popisoval v sekci Sce´na v Java 3D. Objekty Group jsou instance trˇ´ıd odvozeny´ch od trˇ´ıdy Group. V grafu plnı´ funkci uzlu˚, tzn. zˇe mohou mı´t pouze jednoho rodicˇe a neomezeneˇ mnoho potomku˚. Trˇ´ıda Leaf je nadtrˇ´ıdou pro trˇ´ıdy, jejichzˇ
4
IMPLEMENTACE SYSTE´MU NA VIZUALIZACI GRAFU
18
Obra´zek 7: Prvky grafu sce´ny v Javeˇ 3D
instance jsou v dane´m stromu listy, cozˇ znamena´, zˇe nemajı´ zˇa´dne´ potomky. NodeComponent je nadtrˇ´ıdou naprˇ´ıklad trˇ´ıdy Appearance, ktera´ urcˇuje neˇktere´ vlastnosti objektu˚ Leaf ve sce´neˇ. Tyto podtrˇ´ıdy nejsou forma´lneˇ soucˇa´stı´ stromu, nebot’na neˇ odkazujı´ objekty Leaf. Nejedna´ se proto forma´lneˇ o vztah potomek-rodicˇ. Obdelnı´k zna´zornˇujı´cı´ jine´ objekty se pouzˇ´ıva´ z toho du˚vodu, zˇe troju´helnı´k pro objekty typu Leaf se neda´ dost dobrˇe pouzˇ´ıt pro dlouhe´ na´zvy objektu˚ a proto se listy veˇtsˇinou znacˇ´ı obde´lnı´kem. Obra´zek 8
Obra´zek 8: Jednoduchy´ graf sce´ny v Javeˇ 3D ukazuje prˇ´ıklad jednoduche´ho grafu sce´ny, ktery´ popisuje 3 krychle ve sce´neˇ, z toho dveˇ jsou transformova´ny jednı´m spolecˇny´m objektem TransformGroup, prˇitom jedna je transformova´na jesˇteˇ dalsˇ´ım objektem TransformGroup a trˇetı´ krychle je neza´visle na dvou prˇedchozı´ch krychlı´ch transformova´na dveˇma objekty typu TransformGroup. Z prˇed-
IMPLEMENTACE SYSTE´MU NA VIZUALIZACI GRAFU
4
19
chozı´ veˇty je patrne´, zˇe graficke´ zna´zorneˇnı´ je mnohem vy´stizˇnejsˇ´ı a lepsˇ´ı na pochopenı´, nezˇ slovnı´ vyja´drˇenı´.
4.3
Popis balı´ku˚ aplikace
Program je kvu˚li prˇehlednosti jednotlivy´ch trˇ´ıd hierarchicky rozdeˇlen do neˇkolika balı´ku. • graph - hlavnı´ trˇ´ıdy aplikace (gui) • graph.scene - trˇ´ıda sce´ny, ktera´ tvorˇ´ı graf • graph.objects - trˇ´ıdy prˇedstavujı´cı´ prvky ve sce´neˇ (vrcholy a hrany) • graph.objects.apexes - trˇ´ıdy reprezentujicı´ vrcholy (aktivnı´, pasivnı´, atd.) • graph.utils - trˇ´ıdy pro nastavenı´ syste´mu, import dat a cˇasovacˇe
4.4 4.4.1
Popis jednotlivy´ch trˇ´ıd a jejich vybrany´ch metod Balı´cˇek graph
4.4.1.1 Trˇ´ıda Main Trˇ´ıda Main je hlavnı´ spousˇteˇcı´ trˇ´ıda, obsahuje pouze metodu main(String[] args), ktera´ zajistı´ spusˇtenı´ cele´ aplikace. Vytvorˇ´ı instanci trˇ´ıdy MainFrame a nastavı´ ji viditelnou 4.4.1.2 Trˇ´ıda MainFrame Tato trˇ´ıda je hlavnı´ GUI cele´ aplikace, je podtrˇ´ıdou trˇ´ıdy JFrame. Obsahuje ovla´dacı´ prvky (menu, text inputy, talcˇ´ıtka) skrz ktere´ umozˇnuje nastavovat sce´nu. Veˇtsˇinu okna vsˇak tvorˇ´ı prostor pro zobrazenı´ plochy, ten zabra´n instancı´ trˇ´ıdy Canvas3D umozˇnujı´cı´ vytvorˇenı´ 3D sce´ny pro graf. Implemetuje za´kladnı´ funkce pro obsluhu tlacˇ´ıtek a stisku kla´vesy enter v poli s nastavenı´m. Metoda loadFile() slouzˇ´ı k zobrazenı´ dialogu pro otevrˇenı´ souboru, ktery´ je urcˇen k importu. Metoda initSettings() nastavı´ pocˇa´tecˇnı´ hodnoty pro ovla´dacı´ prvky podle vrcholu˚ ve sce´neˇ. Metoda setMassAndStiffnes() nastavuje hodnoty vrcholu˚ z ovla´dacı´ch prvku˚. Metoda animate() spousˇtı´, cˇi zastavuje transformaci grafu. Metoda captureJpeg() ulozˇ´ı aktua´lnı´ snı´mek sce´ny do jpg obra´zku. 4.4.2
Balı´cˇek graph.scene
4.4.2.1 Trˇ´ıda Scene Tato trˇ´ıda je jediny´m za´stupcem toho balı´cˇku, ale je pro celou aplikaci steˇzˇejnı´. Tvorˇ´ı totizˇ celou sce´nu, do ktere´ se vkla´dajı´ vrcholy, hrany, popisky a sveˇtla. Nejle´pe je cela´ sce´na popsatelna´ grafem sce´ny, ten je nekompletnı´ na obra´zku 9, ale to jen z du˚vodu prˇehlednosti a mı´sta na stra´nce. Z tohoto grafu mu˚zˇeme vycˇ´ıst, zˇe bude ve sce´neˇ 5 zdroju˚ sveˇtla a to cˇtyrˇikra´t sveˇtlo smeˇrove´ - DL (Directional Light) a jedno sveˇtlo okolnı´ - AL (Ambient Light). Da´le pak je ve sce´neˇ transformacˇnı´ skupina apexesTG.
4
IMPLEMENTACE SYSTE´MU NA VIZUALIZACI GRAFU
20
SimpleUniverse
BG apexesTG
DL AL
DL
DL
DL
Obra´zek 9: Graf sce´ny aplikace
Ta bude slouzˇit k prˇipojova´nı´ vrcholu˚ do sce´ny. Jestlizˇe budeme s touto transformacˇnı´ skupinou rotovat, budou se na´m ota´cˇet vsˇechny vrcholy a tı´m pa´dem bude zajisˇteˇna dobra´ ovladatelnost cele´ho syste´mu. Prˇ´ıklad prˇipojenı´ aktivnı´ho objektu je na obra´zku 10. Hlavnı´ metodou trˇ´ıdy Scene je metoda initializeGraph(String file), ktera´ celou sce´nu apexesTG
Sphere
billboard TG
head TG
body TG
label TG
Sphere
body
Text2D
Obra´zek 10: Graf sce´ny aktivnı´ho objektu vytvorˇ´ı dokonce s importem souboru˚, protozˇe uvnirˇ te´to metody je vola´nı´ parseru xml. Vytvorˇenou sce´nu vra´tı´ jako instanci trˇ´ıdy Canvas3D. Metoda move() zpu˚sobuje prˇepocˇ´ıta´nı´ pozic vsˇech vrcholu˚ a hran. Tı´m pa´dem se cela´ sce´na mu˚zˇe meˇnit.
4
IMPLEMENTACE SYSTE´MU NA VIZUALIZACI GRAFU
21
Metoda getApexes() vracı´ kolekci vsˇech vrcholu˚. Tato metoda se pouzˇ´ıva´ chceme-li nastavit vlastnosti vrcholu˚. 4.4.3
Balı´cˇek graph.objects
4.4.3.1 Trˇ´ıda Apex Trˇ´ıda Apex je abstraktnı´ a to z toho du˚vodu, aby bylo mozˇne´ prˇida´vat do aplikace nove´ typy vrcholu˚. Implementuje metody, ktere´ jsou pro vsˇechny vrcholy spolecˇne´ a v potomcı´ch je pak uzˇ jen trˇeba nastavit vzhled vrcholu. Trˇ´ıda implementuje mnoho metod typu get, set, ktere´ zde popisovat nebudu, jsou vsˇak popsa´ny v JavaDocu. Metoda setModel() je metodou abstraktnı´, tudı´zˇ ji musı´ implementovat kazˇdy´ potomek a tı´m nastavı´ svu˚j vzhled ve sce´neˇ. Metoda changePower(Vector3D vector) slouzˇ´ı k zmeˇneˇ vy´sledne´ sı´ly, ktera´ na vrchol pu˚sobı´. Metoda calculatePower(ArrayList apexes) vypocˇ´ıta´ vy´slednou sı´lu, ktera´ na vrchol pu˚sobı´. Metoda move() posune vrchol na novou pozici podle spocˇ´ıtane´ vy´sledne´ sı´ly. 4.4.3.2 Trˇ´ıda Edge Tato trˇ´ıda reprezentuje hranu grafu mezi dveˇma vrcholy. Udrzˇuje si reference na dva vrcholy, aby se dalo urcˇit, kde hranu zobrazit a take´ jaky´ smeˇr ma´ mı´t. Obsahuje jedinou du˚lezˇitou metodu kromeˇ metod get a set. Metoda move() nastavı´ spra´vnou pozici a smeˇr hrany ve sce´neˇ 4.4.4
Balı´cˇek graph.objects.apexes
Tento balı´cˇek obsahuje vsˇechny potomky trˇ´ıdy Apex. Jsou zde tedy pouze reprezentace vrcholu˚. Tito potomci implementujı´ metodu setModel() a tı´m urcˇ´ı vzhled vrcholu ve sce´neˇ. Prˇ´ıklad jak vypada´ graf sce´ny aktivnı´ho objektu je na obra´zku 10. Objekty mohou vyuzˇ´ıt trˇ´ıd Java3D k tomu, aby naprˇ´ıklad importovaly konkre´tnı´ 3D objekt z externı´ho souboru. K tomu slouzˇ´ı trˇ´ıda ObjectFile, ktera´ je soucˇa´stı´ standardnı´ho balı´ku Java3D. Prˇi pouzˇitı´ te´to trˇ´ıdy, mu˚zˇeme importovat naprˇ´ıklad objekt z pokrocˇile´ho modelovacı´ho programu, jako je trˇeba 3DStudioMax, Maya, nebo Rhinoceros3D. Ja´ jsem pouzˇil program Rhinoceros3D, v ktere´m jsem objekty, pouzˇite´ ve vrcholech grafu, vytvorˇil a vyexportoval do souboru .obj, ktere´ jsou ulozˇeny v adresa´rˇi objects. Prˇi pouzˇitı´ te´to techniky lze usˇetrˇit cˇas i na´mahu prˇi tvorˇenı´ objektu˚, ktere´ chceme v Java3D zobrazit. Na obra´zku 10 je dobre´ si povsˇimnout slozˇenı´ aktivnı´ho objektu z neˇkolika soucˇa´stı´. Koule (Sphere), ktera´ je prˇ´ımo nava´za´na na transformacˇnı´ skupinu apexesTG bude tvorˇit bod, od ktere´ho bude smeˇrˇovat hrana. Ostatnı´ koncove´ objekty jsou nava´za´ny prˇes transformacˇnı´ skupiny pro zmeˇnu jejich polohy na transformacˇnı´ skupinu billboardTG, ktera´ bude zajisˇt’ovat, aby byly tyto objekty vzˇdy namı´rˇeny prˇ´ımo na kameru a to z toho du˚vodu, aby naprˇ´ıklad popisky byly vzˇdy cˇitelne´.
4
IMPLEMENTACE SYSTE´MU NA VIZUALIZACI GRAFU
4.4.5
22
Balı´cˇek graph.utils
4.4.5.1 Trˇ´ıda SystemVariables Tato trˇ´ıda obsahuje poze konstanty pro nastavenı´ ru˚zny´ch vlastnostı´ syste´mu, jako jsou typy objektu˚ a barvy pı´sem. 4.4.5.2 Trˇ´ıda Timer Trˇ´ıda Timer je potomkem trˇ´ıdy Thread. Vytva´rˇ´ı se prˇi spusˇteˇnı´ aplikace a beˇzˇ´ı v samostatne´m vla´knu, aby neblokovala aplikaci. Slouzˇ´ı k animaci transformace grafu. Beˇzˇ´ı v nekonecˇne´ smycˇce a vola´ metodu move() trˇ´ıdy Scene, pokud je jeho vlastnost stoped rovna false. Implementuje proto take´ metody set a get pro nastavenı´ te´to vlastnost. Implicitneˇ je prˇi startu syste´mu nastavena na true, takzˇe transformace neprobı´ha´. 4.4.5.3 Trˇ´ıda XmlParser Tato trˇ´ıda implementuje pouze jednu statickou metodu parseApexesAndEdges(String sourceFile, TransformGroup targetGroup, ArrayList edges), ktera´ se stara´ o import dat z XML souboru.
5
ˇ ´IRUC ˇ KA UZˇIVATELSKA´ PR
23
5 Uzˇivatelska´ prˇ´ırucˇka 5.1
Instalace a spusˇteˇnı´
Jak jizˇ bylo zmı´neˇno, cela´ aplikace je implementova´na Java technologiı´, takzˇe pro jejı´ spusˇteˇnı´ bude muset by´t nainstalova´na Java 2 SDK, standard Edition ve verzi minima´lneˇ 1.5.0 a Java3D ve verzi 1.4.0 a vysˇsˇ´ı. Oba dva programy se dajı´ volneˇ sta´hnout z internetu, ale k dispozici jsou i na prˇilozˇene´m CD v adresa´rˇi install a ve verzi pro operacˇnı´ syste´m Microsoft Windows. Instalace samotne´ Javy probı´ha´ pomocı´ instala´toru ale archı´v Java3D se musı´ rozbalit rucˇneˇ nahra´t do jizˇ nainstalovane´ho Java SDK a to do adresa´rˇe java sdk/jre/. Pro beˇh Java3D je taky nutne´ mı´t nainstalova´nu podporu OpenGL, nebo DirectX. Aplikace samotna´ je na prˇilozˇene´m CD v adresa´rˇi GraphVisualization v podobeˇ Eclipse projektu. Instalovat se nemusı´, stacˇ´ı ji jen spustit a to bud’ ze zminˇovane´ho prostrˇedı´ Eclipse, nebo z prˇ´ıkazove´ rˇa´dky prˇ´ıkazem java graph.Main z adresa´rˇe GraphVisualization. Po u´speˇsˇne´m spusˇteˇnı´ by se meˇlo uka´zat hlavnı´ okno aplikace.
5.2
Ovla´da´nı´
Jestlizˇe probeˇhl start aplikace v porˇa´dku a vidı´te hlavnı´ okno programu, mu˚zˇete s nı´m zacˇ´ıt pracovat. Ve vrchnı´ cˇa´sti je umı´steˇno menu, ktere´ slouzˇ´ı pro import souboru, export obra´zku a k na´poveˇdeˇ. V leve´ cˇa´sti okna jsou prvky k nastavenı´ vlastnostı´ vrcholu˚, spolu s tlacˇ´ıtky Nastavit a Play. Tlacˇ´ıtko Nastavit vezme hodnoty z vy´sˇe umı´steˇny´ch textovy´ch polı´cˇek a prˇirˇadı´ je vrcholu˚m, takzˇe tı´mto nastavova´nı´m mu˚zˇeme graf meˇnit. Tlacˇ´ıtko Play pak zpu˚sobı´ spusˇteˇnı´ animace transformace grafu. Je li zma´cˇknuto, tak se jeho na´pis zmeˇnı´ na Stop a uzˇivatel mu˚zˇe animaci timto tlacˇ´ıtkem zastavit. Spodnı´ rˇa´dek je stavovy´ a zobrazuje uzˇivateli informace o stavu aplikace. Ostatnı´ cˇa´st okna je vyplneˇna sce´nou pro visualizaci grafu, kterou mu˚zˇeme ovla´dat pomocı´ mysˇi. Jestlizˇe na sce´nu klikneme a drzˇ´ıme leve´ tlacˇ´ıtko mysˇi, bude sce´na rotovat. Jestlizˇe pouzˇijeme prave´ tlacˇ´ıtko, bude se sce´na prˇiblizˇovat, cˇi vzdalovat. Prostrˇednı´ tlacˇ´ıtko na´m umozˇnı´ posun grafu ve smeˇru os x a y.
5.3
Demonstracˇnı´ prˇ´ıklad
Na tomto prˇ´ıkladeˇ uka´zˇi, jak je snadne´ s aplikaci pracovat a vytvorˇit tak rychle a snadno graf podnikove´ho procesu. Nejprve vyexportuji z aplikace BPStudio neˇjaky´ podnikovy´ proces, resp. koordinacˇnı´ diagram podnikove´ho procesu, ktery´ budu chtı´t zobrazit v me´ alikaci. Obra´zek 11 zna´zornˇuje proces v aplikaci BPStudio, ktery´ se budeme snazˇit zobrazit v nasˇem programu. Spustı´me si aplikaci GraphVisualization. Po startu by meˇla vypadat jako na obra´zku 12. Vidı´me, zˇe graf sce´ny je pra´zdny´ a tlacˇ´ıtko Nastavit pro nastavenı´ vlastnostı´ vrcholu˚ a tlacˇ´ıtko Play nejdou zatı´m pouzˇ´ıt. Nema´me totizˇ co nastavovat a transformovat. Proto klikneme na menu Soubor a tam na polozˇku Import souboru. otevrˇe se na´m dialogove´ okno pro otevrˇenı´ souboru viz obra´zek 13. Zvolı´m soubor manual.xml a stisknu tlacˇ´ıtko otevrˇ´ıt. Jestlizˇe se soubor spra´vneˇ importuje, bude ve stavove´m rˇa´dku
5
ˇ ´IRUC ˇ KA UZˇIVATELSKA´ PR
24
Obra´zek 11: Diagram koordinacˇnı´ho modelu v aplikaci BPStudio
Obra´zek 12: Aplikace GraphVisualization po spusˇteˇnı´
spra´va o u´speˇsˇne´m provedenı´ operace. Jestlizˇe se ale soubor importovat nepodarˇ´ı, bude ve
5
ˇ ´IRUC ˇ KA UZˇIVATELSKA´ PR
25
Obra´zek 13: Zvolenı´ souboru pro import dat
stavove´m rˇa´dku vypsa´na chyba importu. Probeˇhlo-li vsˇe vporˇa´dku, uvidı´me uzˇ konecˇneˇ neˇjake´ vrcholy a hrany, ale zatı´m jen ve shluku uprostrˇed, protozˇe aplikace prˇi importu umı´stı´ vrcholy na´hodneˇ kolem strˇedu sce´ny. Obra´zek 14 ukazuje, jak by to mohlo vypadat.
Obra´zek 14: Aplikace teˇsneˇ po importu souboru˚
Nynı´ jizˇ mu˚zˇeme s grafem manipulovat (rotovat, posouvat a zoomovat). To na´m ale nebude k nicˇemu, kdyzˇ jsou vrcholy na sobeˇ namacˇka´ny. Proto spustı´me na´mi ocˇeka´va-
5
ˇ ´IRUC ˇ KA UZˇIVATELSKA´ PR
26
nou transformaci tlacˇ´ıtkem Play. Sce´na se zacˇne animovat a vidı´me, jak na sebe vrcholy vza´jemeˇ pu˚sobı´. Po urcˇite´ dobeˇ se graf usta´lı´ a nebude se da´le meˇnit, vy´sledek transformace je na obra´zku 15
Obra´zek 15: Graf po transformaci Nynı´ si mu˚zˇeme zacˇ´ıt hra´t s nastavova´nı´m vlastnostı´ vrcholu˚. Budou-li naprˇ´ıklad vrcholy od sebe hodneˇ vzda´leny mu˚zˇeme bud’ snı´zˇit hodnotu jejich na´boje, aby se me´neˇ odpuzovaly a ve vy´sledku byly blı´zˇe k sobeˇ. Nastavova´nı´ na´boje ale ovlivnˇuje cely´
Obra´zek 16: Graf po prˇenastavenı´ vlastnostı´ vlcholu˚
5
ˇ ´IRUC ˇ KA UZˇIVATELSKA´ PR
27
graf, nebot’se mezi sebou odpuzujı´ vsˇechny vrcholy. Zmeˇnı´me-li tuhost pruzˇiny, bude to ovlivnˇovat pouze vrcholy, ktere´ mezi sebou majı´ hranu. Stejny´ graf po u´praveˇ neˇkolika parametru˚ mu˚zˇe vypadat naprˇ´ıklad jako na obra´zku 16. Cı´lem ale je, aby byl graf co
Obra´zek 17: Prˇehledny´ graf
5
ˇ ´IRUC ˇ KA UZˇIVATELSKA´ PR
28
nejprˇehledneˇjsˇ´ı. nastavı´me proto ovla´dacı´ prvky tak, aby jsme mohli graf natocˇit tak aby tento pozˇadavek splnˇoval. Na obra´zku 17 vidı´me, zˇe je tento graf prˇehledny´ a v prˇehlednosti velice konkuruje grafu, ktery´ vytvorˇil cˇloveˇk viz. obra´zek 11. Vy´sledny´ obra´zek rafu si pote´ mu˚zˇeme exportovat v podobeˇ Jpeg obra´zku. Kliknutı´m na menu Soubor a polozˇku Ulozˇit obra´zek. Otevrˇe se dialog pro ulozˇenı´ souboru, kde zada´me cestu, vyplnı´me na´zev souboru s prˇ´ıponou .jpg a klikneme na tlacˇ´ıtko ulozˇit. Nakonec jesˇteˇ jedna uka´zko trochu slozˇiteˇjsˇ´ıho procesu prodeje auta na obra´zku 18.
Obra´zek 18: Uka´zka vygenerovane´ho koordinacˇnı´ho diagramu prodeje auta
6
ZA´VEˇR
29
6 Za´veˇr Vy´sledkem te´to bakala´rˇske´ pra´ce je aplikace, ktera´ doka´zˇe zobrazovat podnikove´ procesy v 3D sce´neˇ. Dı´ky dobre´ analy´ze vzhledu koordinacˇnı´ho modelu se povedlo navrhnout a implementovat velice u´cˇinny´ syste´m na automaticke´ rozmı´steˇnı´ prvku ve sce´neˇ grafu. Vy´sledky jsou prˇekvapiveˇ dobre´ a da´ se rˇ´ıci, zˇe i srovnatelne´ s cˇloveˇkem vytvorˇeny´m diagramem. Je jeasne´ zˇe u´plneˇ bez lidske´ pomoci to nejde, je trˇeba si vy´sledny´ graf pootocˇit, aby byl prˇehledneˇjsˇ´ı. Ale o tu pra´veˇ jde. V te´to aplikaci ma´ cˇloveˇk mnohem lepsˇ´ı mozˇnosti pro manipulaci s diagramem, nezˇ v klasicke´m 2D zobrazenı´. Jesˇteˇ lepsˇ´ı prˇehlednosti by se dosa´hlo prˇi pouzˇ´ıtı´ efektivneˇjsˇ´ı zobrazovacı´ metody, jakou je naprˇ´ıklad virtua´lnı´ realita. Kdybychom naprˇ´ıklad mohli jasneˇ rozpoznat, ktery´ objekt je blı´zˇe a ktery´ da´l, prˇehlednost grafu by se jesˇteˇ zvy´sˇila. Toto by se dalo implementovat i do tohoto programu, ale byl by zapotrˇebı´ harware, ktery´ by na´m sce´nu zobrazoval a my bychom ji mohli videˇt 3D, tak, jak to je naprˇ´ıklad v kinech IMAX. Vy´sledkem tedy je, zˇe pouzˇity´ pruzˇinkovy´ graf s elektrostatickou odpudivou silu funguje celkem dobrˇe a da´ se pouzˇ´ıt nejen k visualizaci podnikovy´ch procesu˚, ale k jake´koliv visualizaci grafu. Naprˇ´ıklad by asi bylo vhodne´ vyuzˇitı´ v chemicky´ch programech pro zobrazenı´ ru˚znych slozˇity´ch molekul. V prˇ´ıpadeˇ pokracˇova´nı´ na tomto projektu, bych do budoucna ra´d implementoval jesˇteˇ neˇktere´ veˇci, ktere´ by efektivitu algoritmu jesˇteˇ zvy´sˇily. Naprˇ´ıklad uvedu alesponˇ funkce, jako je mozˇnost uchycenı´ neˇktery´ch bodu˚ na pevnou pozici v grafu, nebo mozˇnost posouva´nı´ jednotlivy´mi vrcholy.
7
LITERATURA
30
7 Literatura [1] Java API: http://java.sun.com/j2se/1.5.0/docs/api/ [2] Java 3D API: http://download.java.net/media/java3d/javadoc/1.4.0/index.html [3] Java 3D API Tutorial: http://java.sun.com/developer/onlineTraining/java3d/ [4] Fedorcˇa´k Dusˇan: Distribuovane´ workflow syste´my [5] Vondra´k, Ivo: Skripta k prˇedmeˇtu Softwarove´ inzˇeny´rstvı´
A
A
ˇ ´ID PODROBNY´ POPIS TR
31
Podrobny´ popis trˇ´ıd Edge
MainFrame
(from graph::objects)
(from graph) -from:Apex -to:Apex
-serialVersionUID:long= 1 -initialized:boolean= false
<< create >>+Edge():Edge << create >>+Edge(from:Apex,to:Apex):Edge +move():void +getTG():TransformGroup +getFrom():Apex +getTo ():Apex +setFrom(from:Apex):void +setTo (to:Apex):void +toString():String
<< create >>+MainFrame():MainFrame -makeMenuItem(name:String,action:String):MenuItem +initSettings():void +loadFile():void +setMassAndStiffnes():void +animate():void +captureJpeg():void +actionPerformed(actionEvent:ActionEvent):void
XmlParser (from graph::utils)
+parseApexesAndEdges(sourceFile:String,targetGroup:TransformGroup ,edges:ArrayList):ArrayList
Apex (from graph::objects)
Scene
#neighbours:ArrayList #notChangedApexes:ArrayList #name:String #type:int #mass:double #Fo:double #Fp:double #stiffnes:double -k:double= 0.5
(from graph::scene) -apexes:ArrayList -edges:ArrayList << create >>+Scene():Scene +initializeGraph(file:String):Canvas3D +move():void +getApexes():ArrayList
<< create >>+Apex():Apex << create >>+Apex(name:String,targetGroup:TransformGroup ,type:String):Apex +setModel():void +setFyzics():void +getName():String +getType ():int +setType (type:int):void +getMass():double +getStiffnes():double +setMass(mass:double):void +setStiffnes(stiffnes:double):void +getTG():TransformGroup +addNeighbour(neighbour:Apex):void +fillNotChangedApexes(allApexes:ArrayList):void +changePower(vector:Vector3d):void +getPosition():Vector3d +removeChangedApex(apex:Apex):void -isNeighbour(apex:Apex):boolean +calculatePower(apexes:ArrayList):void +move():void +toString():String
Timer (from graph::utils) -stoped:boolean << create >>+Timer(scene:Scene):Timer +setStoped(stop:boolean):void +isStoped():boolean +run():void
Obra´zek 19: Podrobny´ popis trˇ´ıd
B
B
ˇ ILOZˇENE´HO CD OBSAH PR
Obsah prˇilozˇene´ho CD Seznam adresa´rˇu˚ a popis jejich obsahu: • GraphVisualization - aplikace GraphVisualization se zdrojovy´mi ko´dy • text - text bakala´rˇske´ pra´ce • text/src - zdrojove´ ko´dy textu bakala´rˇske´ pra´ce ve forma´tu LATEX • import - xml soubory pro import do aplikace • install - instala´tor Java technologie a Java 3D
32