Za´padoˇceska´ univerzita v Plzni Fakulta aplikovany´ch vˇed Katedra informatiky a vy´poˇcetn´ı techniky
Bakal´ aˇ rsk´ a pr´ ace Rozˇ s´ıˇ ren´ı programu pro grafick´ y n´ avrh podoby rekonstruovan´ ych dom˚ u
Plzeˇ n 2013
Pavel Lorenz
Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem bakal´aˇrskou pr´aci vypracoval samostatnˇe a v´ yhradnˇe s pouˇzit´ım citovan´ ych pramen˚ u. V Plzni dne 27. ˇcervna 2013 Pavel Lorenz
Podˇ ekov´ an´ı R´ad bych zde podˇekoval vedouc´ı bakal´aˇrsk´e pr´ace Ing. Janˇe H´ajkov´e Ph.D. za jej´ı rady a ˇcas, kter´ y do mne investovala pˇri ˇreˇsen´ı problematiky kolem t´eto pr´ace. D´ale sv´emu nadˇr´ızen´emu Ing. Kryˇstofu Peˇslovi ve firmˇe InterInformatics s r.o. a druh´emu nadˇr´ızen´emu Petru Maˇskovi ve firmˇe Skeleton.cz s r.o. za schov´ıvavost a pochopen´ı bˇehem dokonˇcovac´ıch prac´ı. V neposledn´ı ˇradˇe bych tak´e r´ad podˇekoval sv´e rodinˇe a pˇr´ıtelkyni za pevn´e nervy a trpˇelivost.
Abstract In today’s globalization world we can see, more than anytime, that the all human activities have a negative impact on our environment. We have started to take care about our limited source of energy. We can watch, in the long term, increasing of energy prices. It necessarily leads to be thrifty not only from ecologic but also economic term. The communism era has left us many ugly prefabricated buildings, because of construction of these buildings there are lots heat losses and the lodgers must pay increasingly higher bills for every year. The revitalization of prefabricated buildings tries to stop these heat losses. It is a complex set of construct modifications that reduce heating costs, increase the noise characteristics, extends overall life and make the house much nicer. It’s not easy to find agreement with the customer about new graphic design. At this time there is no exist a simple tool that would be available to ordinary people and which could easily present their idea about graphic design of their house. This bachelor thesis is a continuation of the work of Bc. Pavel Kraft, who develop the original of application. In this work I have to try improving it and the main goals are focus to 3D projection, better control in terms of user control and especially extensibility. I would like to continue with this program in my next studies.
Obsah ´ 1 Uvod
1
2 Anal´ yza p˚ uvodn´ı aplikace 2.1 Kritick´a m´ısta . . . . . . . 2.1.1 N´avrh p˚ udorysu . . 2.1.2 Umist’ov´an´ı panel˚ u 2.1.3 Kreslen´ı na stˇeny . 2.1.4 Struktura aplikace 2.1.5 Shrnut´ı . . . . . . 2.2 N´apady na inovace . . . . 3 Volba technologie pro 3.1 Windows Forms . . 3.2 WPF . . . . . . . . 3.2.1 XAML . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
tvorbu desktopov´ ych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4 Technika programov´ an´ı 4.1 Rychl´ y v´ yvoj . . . . . . . . . . . . . . . . 4.2 N´avrhov´e vzory . . . . . . . . . . . . . . . 4.2.1 Model-View-ViewModel . . . . . . 4.2.2 Inversion of Control . . . . . . . . . 4.2.3 Dependecies Injection . . . . . . . . 4.3 Frameworky . . . . . . . . . . . . . . . . . 4.3.1 Caliburn.Micro . . . . . . . . . . . 4.3.2 Managed Extensibility Framework .
. . . . . . . .
. . . . . . .
2 2 2 3 3 4 5 5
aplikac´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6 6 6 7
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . . .
8 8 9 9 10 11 11 12 13
5 Komunikace s DB 14 5.1 Datasety . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 5.2 Linq2SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 5.3 Entity framework . . . . . . . . . . . . . . . . . . . . . . . . . 16
OBSAH
OBSAH
6 WPF a 3D 6.1 Z´aklady 3D . . . . . . . . . . . 6.2 3D Kontejner . . . . . . . . . . 6.3 Souˇradnice v prostoru . . . . . 6.4 Kamery . . . . . . . . . . . . . 6.4.1 Perspektivn´ı kamera . . 6.4.2 Ortografick´a kamera . . 6.4.3 Maticov´a kamera . . . . 6.5 Modely . . . . . . . . . . . . . . 6.6 Svˇetla . . . . . . . . . . . . . . 6.6.1 Ambientn´ı svˇetlo . . . . 6.6.2 Smˇerov´e svˇetlo . . . . . 6.6.3 Bodov´e svˇetlo . . . . . . 6.6.4 Reflektorov´e svˇetlo . . . 6.7 Geometrick´a reprezentace . . . 6.8 Materi´al . . . . . . . . . . . . . 6.8.1 Emisn´ı materi´al . . . . . 6.8.2 Difuzn´ı materi´al . . . . . 6.8.3 Spekul´arn´ı materi´al . . . 6.8.4 Kombinovan´e materi´aly 6.9 Transformace . . . . . . . . . . 6.9.1 Translace . . . . . . . . 6.9.2 Zmˇena velikosti . . . . . 6.9.3 Rotace . . . . . . . . . . 6.9.4 Skl´ad´an´ı transformac´ı . 6.9.5 Maticov´a transformace .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
18 19 20 20 21 22 23 24 24 25 25 25 26 27 28 29 30 31 31 32 33 33 34 35 36 37
7 Implementace 7.1 V´ ybˇer n´astroj˚ u . . . 7.2 Struktura aplikace . 7.2.1 Interfaces . . 7.2.2 Models . . . . 7.2.3 ViewModels . 7.2.4 Views . . . . 7.3 Navigace a datab´aze
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
38 38 39 39 40 41 45 48
. . . .
50 50 50 51 52
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
8 Pr´ ace s programem 8.1 Tvorba projektu . . . . . . . . . . . 8.1.1 Kreslen´ı p˚ udorysu . . . . . . 8.1.2 Umist’ov´an´ı panel˚ u na stˇeny 8.1.3 Kreslen´ı na stˇeny . . . . . . 5
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
OBSAH
8.2 8.3
OBSAH
8.1.4 Detail projektu Tvorba solutionu . . . 8.2.1 Tvorba linku . Shrnut´ı . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
52 53 54 54
9 Z´ avˇ er
56
Pˇ rehled zkratek
57
Literatura
58
6
´ 1 Uvod V dneˇsn´ım globalizovan´em svˇetˇe se ˇc´ım d´al v´ıce ukazuje, jak veˇsker´a lidsk´a ˇcinnost m´a ˇsirok´ y dopad na naˇse okol´ı. Zaˇc´ın´a se v´ıce hledˇet na to, abychom zbyteˇcnˇe nepl´ ytvali omezen´ ymi zdroji energie. Dalˇs´ım nem´enˇe d˚ uleˇzit´ ym aspektem je pak neust´ale zvyˇsov´an´ı cen energi´ı, a tak se ˇsetˇr´ı nejen ˇ e z ekologick´eho ale i ekonomick´eho hlediska. Z komunistick´e ´ery n´am v Cesk´ Republice, a nejen zde, z˚ ustalo mnoho ohyzdn´ ych panelov´ ych dom˚ u, kde d´ıky jejich konstrukci doch´az´ı k velk´ ym u ´nik˚ um tepla, a tak vˇsem n´ajemn´ık˚ um s kaˇzdoroˇcn´ım zved´an´ım cen energi´ı nar˚ ustaj´ı i reˇzijn´ı n´aklady. Tyto u ´niky lze zastavit pomoc´ı tzv. revitalizace panelov´ ych dom˚ u. Jde o komplexn´ı soubor stavebn´ıch u ´prav, kter´e sn´ıˇz´ı n´aklady za vyt´apˇen´ı, zv´ yˇs´ı protihlukov´e vlastnosti domu, prodlouˇz´ı jeho celkovou ˇzivotnost a v neposledn´ı ˇradˇe zkr´aˇsl´ı samotn´ y d˚ um. Domluvit se se z´akazn´ıkem na pˇresn´e podobnˇe grafick´eho vzhledu b´ yv´a nelehk´ yu ´kol a na trhu v souˇcasn´e dobˇe neexistuje jednoduch´ y n´astroj, kter´ y by byl dostupn´ y bˇeˇzn´emu uˇzivateli a kde by snadno mohl prezentovat svoji pˇredstavu. C´ılem t´eto pr´ace je rozˇs´ıˇrit program pro grafick´ y n´avrh podoby rekonstruovan´ ych dom˚ u. Tato pr´ace volnˇe navazuje na bakal´aˇrskou pr´aci z roku 2011 vytvoˇrenou kolegou Pavlem Kraftem, kter´ y souhlasil s moˇznost´ı rozˇs´ıˇren´ı. C´ılem projektu je zanalyzovat p˚ uvodn´ı aplikaci, vytipovat kritick´a m´ısta a vylepˇsit je. Prozkoumat architekturu, pˇr´ıpadnˇe ji pˇrepracovat tak, aby aplikace byla snadno rozˇsiˇriteln´a i do budoucna, napˇr´ıklad v r´amci diplomov´e pr´ace. Dalˇs´ım z´amˇerem je usnadnit uˇzivateli pr´aci s n´avrhem panelov´eho domu a umoˇzn ˇit mu pˇren´est svou pˇredstavu do aplikace. D´ale pak prozkoumat moˇznosti 3D projekce v .net frameworku a aplikovat tyto poznatky na projekt. Rozˇs´ıˇrit aplikaci o prostorov´e zobrazen´ı a pˇribl´ıˇzit tak grafick´ y n´avrh bˇezn´emu publiku.
1
2 Anal´yza p˚ uvodn´ı aplikace P˚ uvodn´ı aplikace byla vytvoˇrena kolegou Bc. Pavlem Kraftem v r´amci bakal´aˇrsk´e pr´ace. Pro samotnou implementaci byl zvolen .NET framework s technologi´ı WPF (3.2) a technikou Rychl´eho v´ yvoje” (viz kapitola 4.1), coˇz m´a ” negativn´ı dopad na roˇsiˇritelnost aplikace. Jeho pr´ace je rozdˇelena do dvou ˇca´st´ı. V prvn´ı ˇc´asti se navrhuje p˚ udorys a umist’uj´ı se jednotliv´e panely na zdi. V druh´e ˇca´sti se pak zmˇen´ı projekce z ptaˇc´ı perspektivy” do pohledu ze pˇredu” na zdi. Uˇzivateli je zde umoˇz” ” nˇeno kreslit obrazce na zdi a prohl´ıˇzet si je ze vˇsech svˇetov´ ych stran. Bˇehem projekce je uˇzivatel upozornˇen, pokud jsou rozmˇery na protˇejˇs´ıch stran´am rozd´ıln´e a je pouze na nˇem, jak si s t´ımto porad´ı. D´ale je umoˇznˇeno ukl´ad´an´ı rozpracovan´eho n´avrhu do specifick´eho bin´arn´ıho form´atu.
2.1
Kritick´ a m´ısta
C´ılem n´asleduj´ıc´ı sekce je mimo jin´e vytipovat kritick´a m´ısta p˚ uvodn´ı aplikace.
2.1.1
N´ avrh p˚ udorysu
Z´akladn´ım tvarem p˚ udorysu je obd´eln´ık. Pomoc´ı zmenˇsov´an´ı/zvˇetˇsov´an´ı a rozdˇelov´an´ı stˇen lze tento tvar libovolnˇe mˇenit. Jednotliv´e d´elky stˇen se odv´ıjej´ı od fixn´ı d´elky jednoho panelu a nav´ıc nelze vytvoˇrit zed’ ˇsikmou. Uˇzivatelsk´e ovl´ad´an´ı je m´ısty nelogick´e a nebo minim´alnˇe pˇres ruku”. ” ∙ pevn´a d´elka stˇeny ∙ nemoˇznost tvorby ˇsikm´ ych stˇen ∙ uˇzivatelsk´e ovl´ad´an´ı
2
Anal´yza p˚ uvodn´ı aplikace
2.1.2
Kritick´a m´ısta
Umist’ov´ an´ı panel˚ u
Na pˇredpˇripraven´ y p˚ udorys lze v t´eto ˇc´asti pˇrid´avat r˚ uzn´e typy panel˚ u, napˇr´ıklad okna, balk´ony, dveˇre ˇci ˇcist´e stˇeny. Jak lze vidˇet na obr´azku 2.1, tato ˇc´ast je udˇel´ana vhodnˇe a jedin´e, co by se tomu dalo vytknout je, ˇze jednotliv´e panely jsou umist’ov´any na stejnˇe dlouhou plochu aˇc je velikost panel˚ u r˚ uzn´a. ∙ r˚ uzn´a velikost panelu
Obr´azek 2.1: N´avrh p˚ udorysu domu
2.1.3
Kreslen´ı na stˇ eny
Po pˇrepnut´ı do projekce umoˇzn ˇuje aplikace prohl´ıˇzet panelov´ y d˚ um ze vˇsech svˇetov´ ych stran. Pˇri t´eto projekci lze z´aroveˇ n kreslit na jednotliv´e plochy domu, jak lze vidˇet na obr´azku 2.2. 3
Anal´yza p˚ uvodn´ı aplikace
Kritick´a m´ısta
Ovl´ad´an´ı nen´ı pˇr´ıliˇs uˇzivatelsky pˇr´ıvˇetiv´e. Velkou nev´ yhodou pak je nemoˇznost vyexportovat d´ılˇc´ı stˇeny a ponechat kreslen´ı na nˇekter´em z jin´ ych n´astroj˚ u. ∙ nemoˇznost exportu do obrazov´eho form´atu ∙ uˇzivatelsk´e ovl´ad´an´ı
Obr´azek 2.2: Zobrazen´ı domu a kreslen´ı
2.1.4
Struktura aplikace
Cel´a aplikace je postavena na jedin´em oknˇe a layout je st´ale stejn´ y. Rozpracovan´a data lze naˇc´ıst a uloˇzit, ale chyb´ı tomu jist´a pˇridan´a hodnota. Pokud si d´a uˇzivatel tu pr´aci a namodeluje si panelov´ y d˚ um dle sv´ yh pˇredstav, tak nedostane nic, jen primitivn´ı n´astroj na kreslen´ı na pˇredpˇripraven´e stˇeny. Tyto pohledy nav´ıc nijak nezohled’ˇ nuj´ı zalomen´ı stˇen. 4
Anal´yza p˚ uvodn´ı aplikace
N´apady na inovace
V´ ystupn´ı form´at je bin´arn´ı, takˇze dek´odovat takto pˇripraven´ y soubor z aplikace tˇret´ı strany je velice obt´ıˇzn´e. T´eto jednoduch´e struktuˇre odpov´ıd´a i architektura samotn´e aplikace. Vˇetˇsina ˇca´st´ı je vygenerov´ana pomoc´ı n´astroj˚ u Microsoft Visual Studio nebo Microsoft Expression Blend.
2.1.5
Shrnut´ı
M˚ uˇze se zd´at, ˇze p˚ uvodn´ı aplikace m´a jen sam´a negativa. Chtˇel bych zde zd˚ uraznit, ˇze tomu tak nen´ı. Autor p˚ uvodn´ı bakal´aˇrsk´e pr´ace vytyˇcil smˇer, jak´ ym by se mˇel v´ yvoj takov´eto aplikace odv´ıjet a svoj´ı prac´ı uk´azal zp˚ usob, jak´ ym by se mˇela ub´ırat. Do t´eto pr´ace se pokus´ım pˇridat sv´e poznatky z v´ yvoje desktopov´ ych aplikac´ı, nav´azat na myˇslenku P. Krafta a posunout tuto aplikaci d´ale.
2.2
N´ apady na inovace
C´ılem t´eto pr´ace je v´ yˇse uveden´e nedostatky pokud moˇzno odstranit, aplikaci vylepˇsit a rozˇs´ıˇrit. Samotn´ y koncept n´avrhu panelov´eho domu od p˚ udorysu, pˇres doplnˇen´ı specifick´ ych panel˚ u aˇz po samotn´e kreslen´ı se nikterak mˇenit nebude. N´avrh p˚ udorysu bude rozˇs´ıˇren o moˇznost kreslen´ı obecn´eho polygonu a velikost stˇen nebude omezena na velikost panelu. Pˇri umist’ov´an´ı panel˚ u bude br´ana v potaz velikost panel˚ u. Kreslen´ı na stˇeny bude vylepˇseno o moˇznost exportu do obecn´eho obrazov´eho form´atu. Z´asadn´ı ˇc´ast´ı nov´e pr´ace pak bude prom´ıtnut´ı v´ ysledku do trojrozmˇern´e podoby, coˇz by mˇelo pˇribl´ıˇzit aplikaci ˇsirok´e veˇrejnosti. D´ale tak´e pˇripravit takovou architekturu aplikace, aby byla do budoucna sn´aze rozˇsiˇriteln´a.
5
3 Volba technologie pro tvorbu desktopov´ ych aplikac´ı V t´eto kapitole budou pops´any r˚ uzn´e pˇr´ıstupy tvorby desktopov´ ych aplikac´ı ve frameworku .NET. P˚ uvodn´ı aplikace je ps´ana v technologii Windows Presentation Foundation (zkr´azenˇe WPF) od spoleˇcnosti Microsoft. Desktopov´e aplikace lze ps´at i pomoc´ı starˇs´ı technologie Windows Forms.
3.1
Windows Forms
Windows Forms technologie je ekvivalentem technologie Abstract Window Toolkit (zkr´acenˇe AWT) v Java API. Tato technologie se objevila jiˇz u prvn´ıch verz´ı .NET frameworku a umoˇzn ˇuje snadn´e tvoˇren´ı okenn´ıch aplikac´ı. WinForms maj´ı strmou kˇrivku uˇcen´ı a pro program´atory, kteˇr´ı pˇrech´az´ı z Javy o mnoho jednoduˇsˇs´ı. Aplikace zaloˇzen´e na t´eto technologii jsou ud´alostnˇe ˇr´ızeny, tedy kaˇzd´a akce aktivuje” sadu ud´alost´ı a je jen na progra” m´atorovi, zda se na dan´e ud´alosti zaregistruje a bude na nˇe reagovat ˇci ne.[wik(2013a)] Mezi nesporn´e v´ yhody tak´e patˇr´ı to, ˇze tato technologie je l´ety provˇeˇren´a a mnoho program´ator˚ u s n´ı m´a zkuˇsenosti. Technologie je tak´e pˇrenositeln´a i na linuxovou platformu pomoc´ı projektu Mono [mon(2013)]. Spoleˇcnost Microsoft technologii Windows Forms povaˇzuje za dostateˇcnˇe vyspˇelou a jej´ımu v´ yvoji jiˇz nad´ale nevˇenuje pozornost.
3.2
WPF
Naproti tomu technologie WPF pˇriˇsla s .net frameworkem 3.0 a snaˇz´ı se ˇreˇsit neduhy technologie Windows Forms. WPF je technologie, kter´a pˇrin´aˇs´ı mnoho zmˇen a nauˇcit se ji, znamen´a pochopit zcela jin´ y pˇr´ıstup k programovan´ı desktopov´ ych aplikac´ı. WPF technologie je plnˇe hardwarovˇe akcelerovan´a a vykreslov´ana pomoc´ı Direct3D. Veˇsker´a grafika je tvoˇrena vektorovˇe, coˇz znamen´a, ˇze v´ ysledn´a 6
Volba technologie pro tvorbu desktopov´ych aplikac´ı
WPF
aplikace je nez´avisl´a na rozliˇsen´ı. Z´avislost na vykreslovac´ı vrstvˇe Direct3D s sebou pˇrin´aˇs´ı i jednu nev´ yhodu, z´avislost na operaˇcn´ım syst´emu Windows. WPF technologie d´ale plnˇe oddˇeluje design od v´ ykonn´eho k´odu a to tak, ˇze zav´ad´ı XAML, jazyk, zaloˇzen´ y na XML slouˇz´ıc´ı k definici uˇzivatelsk´eho rozhran´ı (zkr´acenˇe UI). Design´eˇri tak mohou paralelnˇe pracovat s program´atory, kaˇzd´ y nez´avisle na jin´e vrstvˇe [wik(2013b)]. D´ıky pˇrepracovan´emu objektov´emu modelu lze tak´e snadnˇeji mˇenit vzhled grafick´ ych komponent ˇci dokonce cel´eho okna pomoc´ı styl˚ u ˇci ˇsablon. Mezi nejd˚ uleˇzitˇejˇs´ı zmˇeny je nutn´e zahrnout tak´e binding, tedy moˇznost prov´azat uˇzivatelsk´e rozhran´ı s v´ ykonn´ ym k´odem tak, aby obˇe vrstvy byly na sobˇe nez´avisl´e. [Chris Sells(2007)] Tato technologie je propagov´ana spoleˇcnost´ı Microsoft. Delˇs´ı kˇrivku uˇcen´ı kompenzuje znovupouˇzitelnost nabyt´ ych znalost´ı i pro dalˇs´ı technologie jako je napˇr´ıklad Silverlight, Windows Phone a aplikace na syst´em Windows RT.
3.2.1
XAML
XAML je znaˇckovac´ı jazyk. Jedn´a se o XML deriv´at, podobnˇe jako napˇr. HTML jazyk. Slouˇz´ı k popisu uˇzivatelsk´eho rozhran´ı aplikace. Cokoliv zapsan´e v jazyce XAML je moˇzn´e zapsat i v jazyce C#. Zkompilovan´e XAML a C# soubory obsahuj´ıc´ı totoˇzn´e prvky uˇzivatelsk´eho rozhran´ı se nijak neliˇs´ı. Vˇse zapsan´e pomoc´ı jazyka XAML m´a sv˚ uj ekvivalent v jazyce C#. D˚ uvodem k jeho vyuˇzit´ı je jednak striktn´ı oddˇelen´ı aplikaˇcn´ı logiky od jej´ıho rozhran´ı (vzhled je snadno modifikovateln´ y a pˇr´ıstupn´ y bez vlivu na logiku), pˇredevˇs´ım vˇsak je to XML struktura jazyka XAML, d´ıky kter´e m˚ uˇze b´ yt obsah libovolnˇe zpracov´av´an v komplexn´ıch v´ yvojov´ ych prostˇred´ıch (Microsoft Expression Studio). S vyuˇzit´ım knihoven WPF, pro kter´e byl ostatnˇe jazyk XAML navrˇzen, lze vytv´aˇret jak´ ykoliv vektorov´ y grafick´ y obsah a d´ale jej vyuˇz´ıt v aplikaci. Pomoc´ı jazyka C# lze (pˇrirozenˇe) t´eˇz pˇristupovat k WPF knihovn´am, dˇeje se tak ale pouze pokud je tˇreba obsah dynamicky mˇenit za bˇehu aplikace, definice rozs´ahl´ ych statick´ ych struktur je moˇzn´a, ale velmi nepohodln´a. [Kraft(2011)]
7
4 Technika programov´an´ı Pˇred poˇca´tkem implementace jak´ekoliv aplikace je vhodn´e se pozastavit a promyslet, k ˇcemu bude aplikace slouˇzit. Zda bude do budoucna rozv´ıjena, ˇci jednor´azovˇe pouˇzita, napˇr´ıklad pro import dat. Na mnoha prezentac´ıch lze pozorovat, jak lze velice snadno a rychle vyvinout aplikaci pomoc´ı t´e ˇci on´e technologie, ale pokud zaˇcneme stavˇet re´alnou aplikaci, mohly brzy by vyvstat pot´ıˇze. V t´eto kapitole se pokus´ım rozebrat oba dva pˇr´ıstupy a popsat, v ˇcem je jejich s´ıla.
4.1
Rychl´ y v´ yvoj
Tento pˇr´ıstup lze aplikovat v pˇr´ıpadˇe potˇreby aplikace pro jednor´azovou akci ˇci potˇreby rychl´eho v´ yvoje prototypu. Pro tento zp˚ usob lze bez obt´ıˇz´ı pouˇz´ıt obˇe v´ yˇse zm´ınˇen´e technologie.
V´ yhody ∙ rychlost ∙ nen´ı nutn´a hlubˇs´ı znalost technologie ∙ vhodn´e pro jednor´azov´e aplikace
Nev´ yhody ∙ GUI je silnˇe prov´azan´e s v´ ykonn´ ym k´odem ∙ nemoˇznost paraleln´ıho programov´an´ı ∙ nepˇrehlednost ∙ problematick´e rozv´ıjen´ı aplikace ∙ nemoˇznost testov´an´ı 8
Technika programov´an´ı
N´avrhov´e vzory
Pomoc´ı designeru lze navrhnout grafick´e uˇzivatelsk´e rozhran´ı (GUI) a implementovat handlery, v code behind si vyt´ahnout potˇrebn´a data, kter´a n´aslednˇe lze rychle zobrazit pˇriˇrazen´ım do nˇekter´eho z grafick´ ych prvk˚ u na GUI.
4.2
N´ avrhov´ e vzory
Alternativou k rychl´emu v´ yvoji je pak vyuˇzit´ı jiˇz zn´am´ ych a l´ety provˇeˇren´ ych n´avrhov´ ych vzor˚ u. Jedn´ım z nejzn´amˇejˇs´ıch je Model-View-Controller (zkr´acenˇe MVC). Aplikace je rozdˇelena do tˇr´ı oddˇelen´ ych blok˚ u, kter´e jsou na sobˇe nez´avisl´e. Jednotliv´e vrstvy lze modifikovat bez dopadu zmˇen na vrstvy ostatn´ı ˇci vrstvy plnˇe nahradit jin´ ymi. Model reprezentuje bussiness logiku aplikace a samotn´a data, kter´a se maj´ı prezentovat. View tvoˇr´ı prezentaˇcn´ı vrstvu, kter´a zobrazuje uˇzivateli poskytnut´a data a Controller je prostˇredn´ık, kter´ y m´a na starosti veˇsker´e toky ud´alost´ı v aplikaci [Bernard(2013)]. Vzhledem k tomu, ˇze WPF podporuje tzv. Databinding, lze tento model uˇs´ıt na m´ıru” pr´avˇe t´eto technologii. ”
4.2.1
Model-View-ViewModel
Model-View-ViewModel (zkr´acenˇe MVVM) vych´az´ı z princip˚ u vzoru MVC a byl navrhnut architektem WPF/Silveright Johnem Gossmanem. ∙ Pˇredstavuje urˇcit´eho prostˇredn´ıka, kter´ y adaptuje Model pro potˇreby View. ∙ Je zodpovˇedn´ y za stav View, avˇsak bez nutnosti pˇr´ım´eho zjiˇst’ov´an´ı hodnot jednotliv´ ych prvk˚ u ve View. ∙ Vol´a model nebo sluˇzby pˇres jejich interface. ∙ Vystavuje veˇrejn´e vlastnosti, kter´e jsou v XAML bindov´any. Aby mohlo doch´azet ke komunikaci mezi View a ViewModelem, je vhodn´e aby 9
Technika programov´an´ı
N´avrhov´e vzory
ViewModelem tyto veˇrejn´e vlastnosti byly publikov´any jako notifikaˇcn´ı. To tedy znamen´a, ˇze: – jednoduch´e typy jsou vystaveny pomoc´ı vlastnost´ı typu DependencyProperty, pˇr´ıpadnˇe je na nich implementov´an interface INotifyPropertyChanged – kolekce prvk˚ u jsou vystaveny pomoc´ı ObservableCollection
nebo jej´ıch potomk˚ u – pro pˇr´ıkazy, kter´e vedou na vol´an´ı metod modelu/sluˇzeb, jsou zpˇr´ıstupnˇeny commandy pˇres implementovan´e rozhran´ı ICommand V´ ysledek je takov´ y, ˇze View se pˇridˇel´ı ViewModel jako DataContext a napˇr. tlaˇc´ıtku se pˇriˇrad´ı, ˇze po stisku m´a vyvolat pˇr´ıkaz BackCommand. At’ uˇz je pˇr´ıkaz definov´an ˇci ne, na kompilaci View nem´a vliv. Tlaˇc´ıtko pouze v´ı, ˇze m´a volat pˇr´ıkaz s n´azvem BackCommand a o v´ıce se nezaj´ım´a. Analogicky napˇr. pro GridView nastav´ıme, kde m´a hledat seznam poloˇzek, kter´e m´a zobrazit a kam m´a uloˇzit referenci pr´avˇe aktivn´ıho ˇra´dku a o v´ıc se GridView nezaj´ım´a. Jakmile bude z ViewModelu informov´an o zmˇenˇe seznamu poloˇzek, tak se s´am obnov´ı. Vzhledem k t´eto nez´avislosti lze prostˇe odmazat prvek GridView a zamˇenit jej za ComboBox bez jak´ekoliv zmˇeny na ostatn´ıch vrstv´ach [Jirava(2010)].
4.2.2
Inversion of Control
Technika Inversion of Control (IoC) je zaloˇzena na myˇslence vytv´aˇret jednotliv´e tˇr´ıdy jako na sobˇe nez´avisl´e komponenty, kter´e jsou programov´any oproti rozhran´ı a komunikuj´ı mezi sebou jen a pouze pˇres nˇe. Samotn´e propojen´ı jednotliv´ ych komponent je pak ponech´ano na tzv. IoC kontejneru. Tento kontejner je tˇr´ıda, kter´a v´ı, jakou m´a vr´atit instanci pro dan´e rozhran´ı a tento u ´kol je pouze v jej´ı reˇzii. D˚ usledkem tohoto stylu programov´an´ı je absence kl´ıˇcov´eho slova new v k´odu a veˇsker´a inicializace je ponech´ana na kontejneru. V´ yhodou tohoto programov´an´ı pak je snadn´a v´ ymˇena komponent jedn´e za druhou, napˇr´ıklad za tˇr´ıdu slouˇz´ıc´ı k testov´an´ı.[August´ yn(2010)]
10
Technika programov´an´ı
Frameworky
V´ yhody ∙ vytv´aˇren´ı instanc´ı na z´akladˇe konfigurace ∙ nastavov´an´ı ˇzivotnosti objekt˚ u ∙ tvoˇren´ı tˇr´ıd jako samostatn´e komponenty
Nev´ yhody ∙ nutnost konfigurace kontajneru
4.2.3
Dependecies Injection
Dependecies Injection (zkracenˇe DI) je n´avrhov´ y vzor, kter´ y definuje zp˚ usob z´ısk´av´an´ı objekt˚ u potˇrebn´ ych k jeho ˇcinnosti. V praxi se nejˇcastˇeji pouˇz´ıvaj´ı dva typy injekce. Prvn´ım je Constructor Injection, kde k vytvoˇren´ı instance objektu je potˇreba m´ıt jiˇz vytvoˇren´e instance parametr˚ u konstruktoru. Druh´ ym typem je Setter Injection, kde se vytvoˇr´ı instance objektu a napln´ı se vˇsechny jej´ı metody oznaˇcen´e jako setter. [August´ yn(2010)] Techniky IoC a DI se ˇcasto vyuˇz´ıvaj´ı pospolu a ve v´ ysledku znamenaj´ı, ˇze parametry konstruktor˚ u budou rozhran´ı a kterou instanc´ı budou doplnˇeny, tak se ponech´a na konfiguraci IoC kontajneru. Caliburn.Micro je odlehˇcen´ y, ale robustn´ı M-V-VM framework, a Managed Extensibility Framework je implementac´ı technik IoC/DI. Nejvˇetˇs´ı silou obou tˇechto n´astroj˚ u je jejich snadn´e propojen´ı a vz´ajemn´a kooperace.
4.3
Frameworky
N´asleduj´ıc´ı kapitola popisuje frameworky postaven´e na v´ yˇctu n´avrhov´ ych vzor˚ u z kapitoly 4.2
11
Technika programov´an´ı
4.3.1
Frameworky
Caliburn.Micro
Aplikace jak´ehokoliv n´avrhov´eho vzoru na aplikaci bude znamenat jistou reˇzii nav´ıc. Tento investovan´ y ˇcas na poˇc´atku se n´am brzy vr´at´ı pˇri budouc´ıch u ´prav´ach aplikace, kdy pˇri rychl´em v´ yvoji by kaˇzd´ y z´asah znamenal mnoho program´atorsk´ ych hodin. Tato reˇzie je ale v´ıcem´enˇe poˇr´ad stejn´a a napˇr. provazbit View s ViewModelem znamen´a zkop´ırovat 5 ˇra´dek k´odu a pozmˇenit n´azev c´ılov´eho ViewModelu. Pro usnadnˇen´ı pr´ace byl vytvoˇren framework Caliburn a jeho mladˇs´ı a odlehˇcen´ y br´aˇska” Caliburn.Micro. Tento framework vznikl v ruk´ach fenome” n´aln´ıho program´atora Roba Eisenberga, kter´ y postavil cel´ y projekt na myˇslence Convention-over-configuration”. ” Pokud budou dodrˇzov´ana jist´a pravidla, tak framework bude tyto konfigurace ˇreˇsit s´am. Napˇr´ıklad v´ yˇse zm´ınˇen´e provazben´ı View s ViewModel em lze zajistit tak, ˇze namespacu ViewModel u odmaˇzeme slova Model a dostaneme cestu k View.
Uk´ azka u ´ pravy namespace: ViewModel: Zcu.PanelComposer.ViewModels.Pages.HomeViewModel.cs View: Zcu.PanelComposer.Views.Pages.HomeView.cs
Tato pravidla jsou samozˇrejmˇe konfigurovateln´a. D´ale je zde pˇripraveno mnoho utilit jako je napˇr´ıklad Event Aggregator slouˇz´ıc´ı k asynchronn´ımu pˇred´av´an´ı zpr´av napˇr. mezi jednotliv´ ymi okny ˇci str´ankami. Framework podporuje asynchronn´ı tasky a automaticky provazbuje prvky na View s vlastnostmi ViewModel u. Caliburn.Micro si tak´e rozum´ı s Managed Extensibility Frameworkem (MEF) a ve spojen´ı s technikou Inversion of Control (IoC) a Dependency Injection (DI) se z tohoto frameworku st´av´a robustn´ı n´astroj, kter´ y program´atory v´ıcem´enˇe nut´ı programovat oproti interfac˚ um. V´ yhodou tohoto frameworku je tak´e to, ˇze je pouˇziteln´ y pro WPF 4.0/4.5, Silverlight 4.0/5.0, Windows Phone 7.1/8.0 a WinRT (Metro). [Eisenberg(2013)]
12
Technika programov´an´ı
4.3.2
Frameworky
Managed Extensibility Framework
P˚ uvodnˇe skupina nadˇsenc˚ u vytv´aˇrela framework, kter´ y je postaven na technice IoC/DI, ale nebude fungovat tak, ˇze bude pracovat v r´amci jedn´e aplikace, ale um´ı prohled´avat jednotliv´e assembly. Byl vymyˇslen mechanismus, kter´ y pomoc´ı reflexe prohled´a celou assembly a vyhled´a pouze tˇr´ıdy, kter´e obsahuj´ı specifick´e atributy. Vˇsechny tˇr´ıdy, kter´e reprezentuj´ı dan´e rozhran´ı, je nejprve nutn´e implementovat a n´aslednˇe jim pˇridat atribut Export s typem rozhran´ı. Analogicky je nutn´e takto doplnit vˇsechny settery, pˇr´ıpadnˇe konstruktory, kter´e je tˇreba plnit pˇri inicializaci objektu a ty pot´e rozˇs´ıˇr´ıt o atribut Import. IoC kontejner pak pˇri spuˇstˇen´ı aplikace prohled´a vˇsechny dostupn´e assembly, pˇr´ıpadnˇe sloˇzku, z´aleˇz´ı na nastaven´ı, a vytvoˇr´ı si strom z´avislost´ı. Nen´ı tedy nutn´e ˇz´adn´ ym zp˚ usobem kontejner konfigurovat, protoˇze to za n´as obstar´a mechanismus postaven´ y na reflexi. Tento framework se samotn´emu Microsoftu natolik zal´ıbil, ˇze jej zahrnul do .net frameworku od verze 4.0. Pomoc´ı tohoto n´astroje lze tak stavˇet aplikace, kter´e podporuj´ı pluginy. [mef(2012)]
13
5 Komunikace s DB Jednou z kl´ıˇcov´ ych vˇec´ı kaˇzd´e aplikace je ukl´ad´an´ı rozpracovan´ ych dokument˚ u. Tuto funkcionalitu lze zajistit nˇekolika moˇzn´ ymi zp˚ usoby, z´aleˇz´ı na zp˚ usobu pouˇzit´ı tˇechto dat. Osobnˇe preferuji ukl´ad´an´ı dat do lok´aln´ıch datab´az´ı, kter´e za n´as ˇreˇs´ı probl´emy konzistence a umoˇzn ˇuj´ı program´ator˚ um soustˇredit se pouze na kl´ıˇcov´e probl´emy. Pokud m´a program spolupracovat s jin´ ymi aplikacemi, je vhodn´e vytvoˇrit funkce pro export ˇci import. Ide´aln´ı je nepouˇz´ıvat bin´arn´ı ukl´ad´an´ı, protoˇze od tohoto zp˚ usobu se v dneˇsn´ı dobˇe upouˇst´ı. Pˇr´ıkladem m˚ uˇze b´ yt bal´ık program˚ u Microsoft Windows Office od verze 2007 a vyˇsˇs´ı. Pˇri exportu a importu se preferuj´ı bud’ zaveden´e form´aty, nebo vyuˇz´ıt´ı znaˇckovac´ıho jazyka XML. Pro desktopov´e aplikace, u kter´ ych je napl´anov´an provoz bez nutnosti internetov´eho pˇripojen´ı, je vhodn´e vyuˇz´ıt nˇekter´e z lok´aln´ıch datab´az´ı. Pˇr´ıkladem m˚ uˇze b´ yt produkt SQLLite ˇci odlehˇcen´a verze Microsoft SQL datab´aze, ˇcasto oznaˇcovan´a jako SQL Compact Edition.
5.1
Datasety
Jedn´ım z nejstarˇs´ıch pˇr´ıstup˚ u, avˇsak dodnes vyuˇz´ıvan´ ych, jsou datasety. Pomoc´ı mnoˇzstv´ı podp˚ urn´ ych objetk˚ u, jako jsou napˇr´ıklad SqlCommandy, SqlDataReader a mnoho dalˇs´ıch, se dost´av´a program´ator˚ um do rukou mocn´ y n´astroj pro relativnˇe pˇr´ım´ y pˇr´ıstup do datab´aze. Relativnˇe proto, ˇze vˇse jde pˇres perzistentn´ı vrstvu v pamˇeti, kter´a urychluje ˇcten´ı, umoˇzn ˇuje prov´est mnoho zmˇen najednou a prom´ıtnout vˇse do datab´aze. Pr´ace s datasety znamen´a velikou reˇzii nav´ıc, ale v´ yhodou pak je, ˇze m´a program´ator veˇsker´ y k´od pod svoj´ı kontrolou, coˇz se u pouˇzit´ı ORM mapperu ˇr´ıci ned´a. Bohuˇzel datasety ve spolupr´aci s MS SQL Compact Edition trp´ı jist´ ymi nedostatky: ∙ probl´emy s n´avratov´ ymi hodnotami (MS SQL CE neum´ı skl´ad´an´ı dotaz˚ u) 14
Komunikace s DB
Linq2SQL
∙ nemoˇznost lazy loadingu ∙ vyˇsˇs´ı reˇzie V´ yhodou je pak nejvyˇsˇs´ı v´ ykon ze vˇsech dostupn´ ych technologi´ı.
5.2
Linq2SQL
S vyd´an´ım .net frameworku 3.5 pˇrich´az´ı Microsoft s nov´ ym integrovan´ ym dotazovac´ım jazykem Linq. Tento jazyk je ps´an dostateˇcnˇe obecnˇe a lze je aplikovat na kolekce, slovn´ıky, xml i datab´aze. Pr´avˇe posledn´ı zm´ınˇen´a komunikace s datab´az´ı byla zpoˇca´tku omezena pouze na produkty od Microsoftu, tedy klasickou serverovou datab´azi a jiˇz zmiˇ novanou kompaktn´ı verzi. Pˇr´ımo v k´odu lze pak skl´adat dotazy s komfortem samotn´eho Visual Studia ˇci jin´eho programovac´ıho prostˇred´ı (zkr´acenˇe IDE) a samotn´ y SQL dotaz je pak sloˇzen na pozad´ı.
V´ yhody ∙ komfort IDE ∙ lazy loading ∙ moˇznost urychlen´ı pomoc´ı kompilace dotaz˚ u ∙ odstraˇ nuje probl´emy se skl´ad´an´ı dotaz˚ u
Nev´ yhody ∙ omezenost na produkty od Microsoftu ∙ progr´amator nem´a pod kontrolu” samotn´e SQL dotazy ” ∙ vazby N:M (nen´ı to klasick´ y ORM Mapper) Linq2SQL znamen´a odlehˇcen´ı pr´ace pro program´atory, ale tato v´ yhoda s sebou nese samozˇrejmˇe jistou reˇzii, a tak je na tom v´ ykonovˇe tato technologie v porovn´an´ı s datasety h˚ uˇre. Pokles v´ ykonu je ale velice nepatrn´ y. 15
Komunikace s DB
Entity framework
Protoˇze Linq2SQL nen´ı klasick´ ym ORM mapperem, jeho nejvˇetˇs´ı nev´ yhodou je, ˇze si neum´ı poradit s vazbami N:M a tak tato pr´ace z˚ ust´av´a na samotn´em program´atorovi.
5.3
Entity framework
Microsoft si byl velice vˇedom nev´ yhod technologie Linq2SQL a tak hned v n´asleduj´ıc´ım service packu 1 vydal nov´ y produkt, Entity framework (zkr´acenˇe EF), kter´ y je plnohodnotn´ ym ORM mapperem. Tato technologie odstraˇ nuje probl´em s omezen´ım na MS SQL datab´aze a vazbami M:N. Entity framework se stal n´astupcem Linq2SQL a Microsoft se jiˇz nad´ale v´ yvojem t´eto technologie (Linq2SQL) nezab´ yv´a. Pˇr´ıstup do datab´aze je rovnˇeˇz poskytov´an za pomoci dotazovac´ıho jazyku LINQ.
V´ yhody ∙ komfort IDE ∙ lazy loading ∙ moˇznost urychlen´ı pomoc´ı kompilace dotaz˚ u ∙ odstraˇ nuje probl´emy se skl´ad´an´ı dotaz˚ u ∙ vazby N:M ∙ plnohodnotn´ y ORM mapper ∙ pouˇziteln´ y pro vˇetˇsinu bˇezn´ ych datab´az´ı
Nev´ yhody ∙ komfort si vyb´ır´a daˇ n na v´ ykonu ∙ progr´amator nem´a pod kontrolu” samotn´e SQL dotazy ”
16
Komunikace s DB
Entity framework
Mezi program´atory vyuˇz´ıvaj´ıc´ı ORM mappery a ostatn´ımi, vyuˇz´ıvaj´ıc´ı klasick´ y pˇr´ıstup pˇres datasety ˇci pˇr´ım´ y pˇr´ıstup pˇres Stored procedury existuje odvˇek´a rivalita a obˇe dvˇe strany se nemohou shodnout, kter´ y zp˚ usob je ten jedin´ y spr´avn´ y. ORM mappery usnadˇ nuj´ı pr´aci s datab´azemi a odst´ıˇ nuj´ı program´atora od pˇr´ım´e znalosti datab´aze ˇci T-SQL jazyka. Program´ator tak nemus´ı zn´at v´ıce jazyk˚ u a m˚ uˇze se soustˇredit na jeden hlavn´ı. Druh´a strana vˇeci je vˇsak to, ˇze program´ator nem´a vliv na v´ ysledn´ y SQL dotaz, coˇz u nˇekter´ ych typ˚ u aplikac´ı m˚ uˇze b´ yt velice d˚ uleˇzit´e. Osobnˇe si mysl´ım, ˇze oba pˇr´ıstupy maj´ı sv´e m´ısto a z´aleˇz´ı ryze na typu aplikace.
17
6 WPF a 3D Cel´a sekce WPF a 3D byla vypracov´ana v r´amci pˇredmˇetu Projektu 5 a bylo ˇcerp´ano zejm´ena z knihy Programming WPF. 2nd ed.”. [Chris Sells(2007)] ” Tato technologie je u ´zce v´azan´a na Windows a DirectX. Zat´ımco Windows Forms trpˇely t´ım, ˇze byly napˇr´ımo rasterizov´any, WPF technologie jde cestou opaˇcnou, tedy vˇse vykreslit vektorovˇe a zobrazen´ı ponechat na grafick´e kartˇe. Grafika je proto hardwarovˇe akcelerovan´a, ale to neznamen´a, ˇze by WPF byla tou spr´avnou volbou pro tvorbu n´aroˇcn´ ych 3D aplikac´ı ˇci her. 3D se zde vyuˇz´ıv´a pro vytvoˇren´ı zaj´ımav´ ych efekt˚ u ˇci zobrazen´ı jednoduch´ ych model˚ u. Ud´av´a se, ˇze by modely nemˇely pˇresahovat v´ıce neˇz 20 000 bod˚ u a 60 000 troj´ uheln´ık˚ u. Pro n´aroˇcnˇejˇs´ı aplikace je vhodn´e zvolit technologii jinou. Vˇsechny prvky ve WPF lze zapsat deklarativnˇe pomoc´ı XAMLu ˇci procedur´alnˇe v k´odu. Oba zp˚ usoby lze tak´e kombinovat pomoc´ı bindingu. [Microsoft(2013)]
Obr´azek 6.1: Projekce [Mosers(2013)]
18
WPF a 3D
6.1
Z´aklady 3D
Z´ aklady 3D
Z´akladn´ı stavebn´ı k´amen 3D grafiky je poˇc´ıtaˇcov´ y model jakoˇzto objekt. Protoˇze naˇse obrazovky jsou ale dvourozmˇern´e, je nutn´e tyto objekty nˇejak´ ym zp˚ usobem pˇrev´est na 2D obraz (viz obr. 6.1). Tento pˇrevod se naz´ yv´a rendering. Pro rendering je nutn´e definovat, odkud se na model d´ıv´ame, tedy urˇcit pozici kamery. Abychom v˚ ubec nˇeco mohli pozorovat, je nutn´e tak´e definovat zdroj svˇ etla. A protoˇze svˇet kolem n´as je pln´ y barev, je tak´e vhodn´e nadefinovat materi´ al dan´eho objektu. Napˇr. ho m˚ uˇzeme obarvit jednou barvou nebo zobrazit tak, aby vypadal jako dˇrevo. Protoˇze dˇrevo nen´ı jednobarevn´e, pouˇzijeme napˇr´ıklad obr´azek dˇreva, tedy texturu. Svˇet v poˇc´ıtaˇcov´e grafice je sloˇzen z troj´ uheln´ık˚ u a dneˇsn´ı hardware je uzp˚ usoben pr´avˇe k tomu, aby umˇel s troj´ uheln´ıky pracovat rychle. [Mosers(2013)]
Vlastnosti troj´ uheln´ık˚ u ∙ je vˇzdy konvexn´ı ∙ definuje plochu/rovinu ∙ kaˇzd´ y polygon lze definovat jako sadu troj´ uheln´ık˚ u (princip triangulace)
Obr´azek 6.2: Popis meshe [Mosers(2013)] Jak´ ykoliv objekt lze (s jistou odchylkou) rozloˇzit na s´ıt’ troj´ uheln´ık˚ u. Tato s´ıt’ se naz´ yv´a mesh (viz obr. 6.2). S´ıt’ je definov´an v´ yˇctem bod˚ u ve 19
WPF a 3D
3D Kontejner
3D prostoru. Tyto body se naz´ yvaj´ı vrcholy (angl. vertex, plur. vertices). Jednotliv´e vrcholy se spojuj´ı do tzv. troj´ uheln´ık˚ u (angl. triangle(s)). Kaˇzd´ y troj´ uheln´ık m´a dvˇe strany, pˇredn´ı a zadn´ı. Pˇredn´ı strana je definov´ana pomoc´ı takzvan´eho pravidla prav´e ruky, tedy z´aleˇz´ı na poˇrad´ı, v jak´em jsou troj´ uheln´ıky skl´ad´any.
6.2
3D Kontejner
Z´akladn´ı prvek WPF pro zobrazen´ı trojrozmˇern´eho prostoru je Viewport3D. Tento prvek definuje prostor v obrazovce, pomoc´ı nˇehoˇz se pohl´ıˇz´ı na sc´enu do svˇeta 3D. Viewport3D v sobˇe zapouzdˇruje vˇsechna data o nastaven´ı kamery, svˇetel a vˇsech 3D modelech popˇr. informace o jejich transformaci. K tomu, abychom zobrazili trojrozmˇern´ y prostor, mus´ıme nadefinovat tˇri vˇeci. Kameru, alespoˇ n jeden zdroj svˇetla (jinak bychom nic nevidˇeli) a model.
6.3
Souˇ radnice v prostoru
Vykreslov´an´ı ve dvourozmˇern´em prostoru je zajiˇstˇeno z lev´eho horn´ıho rohu renderovac´ı oblasti (typicky pak obrazovky). X-ov´a osa je kladn´a ve smˇeru z lev´e strany do prav´e strany, Y-ov´a osa pak shora dol˚ u, jak je naznaˇceno na obr. 6.3. Toto vyuˇzijeme zejm´ena u texturov´an´ı. V trojrozmˇern´em syst´emu je tomu jinak. Poˇc´ateˇcn´ı bod je uprostˇred renderovan´ı ˇca´sti, x-ov´a osa je shodn´a s vykreslov´an´ım v 2D prostoru, ale Y-ov´a osa je obr´acenˇe, tedy kladn´a smˇerem nahoru a z´aporn´a smˇerem dol˚ u. Z-ov´a osa je pak kladn´a smˇerem k pozorovateli. Toto vyuˇzijeme zejm´ena u sestavov´an´ı 3D modelu.
20
WPF a 3D
Kamery
Obr´azek 6.3: Souˇradnice v prostoru [Microsoft(2013)]
6.4
Kamery
Viewport3D v souˇcasn´e dobˇe umoˇzn ˇuje nastaven´ı tˇr´ı typ˚ u kamer: PerspectiveCamera, OrthographicCamera a MatrixCamera (viz obr. 6.4). Pomoc´ı tˇechto kamer m˚ uˇzeme mˇenit pohled na trojrozmˇern´ y svˇet.
Obr´azek 6.4: Rozd´ıl mezi projekcemi [Microsoft(2013)] Lidsk´emu oku nejpˇrirozenˇejˇs´ı je kamera perspektivn´ı, kter´a vzd´alen´e objekty zobrazuje menˇs´ı. Tento pohled se nejv´ıce pˇribliˇzuje re´aln´emu svˇetu. Oproti tomu kamera ortografick´a je jednoduch´a, zobrazuje objekty tak, jak si je nadefinujeme, a nedoch´az´ı k ˇz´adn´e deformaci. Tento pohled se vyuˇz´ıv´a u CAD syst´emu, kde n´am nejde o re´aln´ y pohled, ale o skuteˇcn´e rozmˇery, dle kter´ ych budeme ˇr´ıdit konstrukce. 21
WPF a 3D
6.4.1
Kamery
Perspektivn´ı kamera
Z´akladn´ı nastaven´ı t´eto kamery je jej´ı um´ıstˇen´ı - Position a smˇer - LookDirection, kter´ ym budeme hledˇet na trojrozmˇern´ y prostor. Perspektivn´ı kameru si lze pˇredstavit jako jehlan, kter´ y m´a vrchol v bodu, kter´ y jsme nastavili jako pozici kamery, smˇeˇruje na 3D-sc´enu. U tohoto pohledov´eho jehlanu m˚ uˇzeme nav´ıc nastavit u ´hel – FieldOfView, tedy z´abˇer kamery. S kamerou lze tak´e ot´aˇcet pomoc´ı parametru UpDirection, kter´ y nastavuje smˇer vzh˚ uru do kamery. Defaulftnˇe je tento parametr nastaven v kladn´em smˇeru osy Y.
Obr´azek 6.5: Jehlan perspektivn´ı kamery [libGDX(2012)]
22
WPF a 3D
Kamery
Z´avˇerem je tˇreba nastavit oˇrez´av´an´ı jehlanu pomoc´ı dvou ploch. Prvn´ı, ta bliˇzˇs´ı, ud´av´a plochu, pˇred kterou nebude ˇz´adn´ y objekt vykreslen, zadn´ı naopak schov´a vˇse za n´ı (NearPlaneDistance a FarPlaneDistance). Listing 6.1: Uk´azka nastaven´ı perspektivn´ı kamery < Viewport3D > < Viewport3D . Camera > < PerspectiveCamera UpDirection = " 0 ,1 ,0 " Position = " 0 ,0 ,5 " LookDirection = " 0 ,0 , -1 " FieldOfView = " 45 " NearPlaneDistance = " 3 " FarPlaneDistance = " 50 " / > Viewport3D . Camera > Viewport3D >
6.4.2
Ortografick´ a kamera
Z´asadn´ı rozd´ıl mezi perspektivn´ı a ortografickou kamerou je zp˚ usob oˇrez´av´an´ı prostoru. Zat´ımco perspektivn´ı kamera vyuˇz´ıv´a jehlan, ortografick´a si vystaˇc´ı s kv´adrem.
Obr´azek 6.6: Kv´adr ortografick´e kamery [libGDX(2012)]
23
WPF a 3D
Modely
Zp˚ usob nastaven´ı kamery je tedy velice podobn´ y s t´ım rozd´ılem, ˇze nenastavujeme u ´hel, ale pouze ˇs´ıˇrku - Width, kterou chceme zobrazit. Listing 6.2: Uk´azka nastaven´ı ortografick´e kamery < Viewport3D > < Viewport3D . Camera > < OrthographicCamera UpDirection = " 0 ,1 ,0 " Position = " 0 ,0 ,5 " LookDirection = " 0 ,0 , -1 " Width = " 10 " NearPlaneDistance = " 3 " FarPlaneDistance = " 50 " / > Viewport3D . Camera > Viewport3D >
6.4.3
Maticov´ a kamera
Posledn´ım typem kamery je kamera maticov´a. Tato kamera je zde sp´ıˇse kv˚ uli pˇrenosu kamery mezi jednotliv´ ymi 3D form´aty, kter´e pr´avˇe t´ımto zp˚ usobem uchov´avaj´ı nastaven´ı. Maticov´a kamera se nastavuje pomoc´ı dvou matic typu 4x4. Prvn´ım parametrem je ViewMatrix, tento parametr nastavuje pozici a orientaci kamery. Sv´ ym zp˚ usobem nahrazuje parametry Position, UpDirection a LookDirection z pˇredchoz´ıch typ˚ u kamer. Druh´ ym parametrem je pak ProjectionMatrix, kter´ ym nastavujeme, jak bude 3D prostor transformov´an do 2D obrazu.
6.5
Modely
Model je reprezentace 3D modelu pomoc´ı troj´ uheln´ık˚ u. Viewport3D sm´ı obsahovat pouze jednu kameru, ale neomezen´e” mnoˇzstv´ı model˚ u. Tyto modely ” jsou zapouzdˇreny do objektu ModelVisual3D. Obsahem tohoto prvku mohou b´ yt svˇetla nebo geometrick´a reprezentace, tedy popis povrchu (meshe) pomoc´ı troj´ uheln´ık˚ u. Speci´aln´ım prvkem je pak Model3DGroup, kter´ y umoˇzn ˇuje tyto prvky kombinovat. Napˇr. lze vytvoˇrit geometrickou reprezentaci koule, kter´a bude z´aroveˇ n sv´ıtit. Pomoc´ı transformace cel´eho ModelVisual3D prvku lze doc´ılit pohybu po obloze.
24
WPF a 3D
6.6
Svˇetla
Svˇ etla
Ve WPF jsou k dispozici celkem 4 typy svˇetel. Svˇetla budou popisov´any od v´ ykonovˇe nejm´enˇe n´aroˇcn´e aˇz po nejn´aroˇcnˇejˇs´ı.
6.6.1
Ambientn´ı svˇ etlo
Jde o z´akladn´ı a nejjednoduˇsˇs´ı svˇetlo. Osvˇetl´ı vˇsechny objekty stejnˇe bez ohledu na pozici ˇci orientaci. Vlivem tohoto svˇetla nejsou vidˇet v˚ ubec st´ıny, a tak ˇcerven´a koule vypad´a jako vyplnˇen´a rud´a kruˇznice. V´ yhodou je samozˇrejmˇe v´ ypoˇcetn´ı n´aroˇcnost. Jedin´ ym parametrem tohoto svˇetla je barva.
Obr´azek 6.7: Koule pod ambientn´ım svˇetlem Listing 6.3: Nastaven´ı ambientn´ıho svˇetla < AmbientLight Color = " White " / >
6.6.2
Smˇ erov´ e svˇ etlo
Jak uˇz s´am n´azev napov´ıd´a, jedn´a se o smˇerov´e svˇetlo a lze si ho pˇredstavit jako z´aˇr´ıc´ı slunce. Neud´av´a se tedy pozice, ale pouze smˇer z´aˇren´ı. Po osvˇetlen´ı modelu se jiˇz pˇribliˇzujeme realitˇe. Objekty jsou st´ınovan´e, ale nevrhaj´ı st´ıny mezi sebou. 25
WPF a 3D
Svˇetla
Obr´azek 6.8: Koule pod smˇerov´ ym svˇetlem Listing 6.4: Nastaven´ı smˇerov´eho svˇetla < DirectionalLight Color = " White " Direction = " 0 ,0 , -1 " / >
6.6.3
Bodov´ e svˇ etlo
Bodov´a svˇetla patˇr´ı do lok´aln´ıho osvˇetlovac´ıho modelu, tedy lze pomoc´ı nˇej simulovat napˇr. svˇetlo pouliˇcn´ıch lamp ˇci lustr. Z´akladn´ı nastaven´ı bodov´eho svˇetla je jeho pozice a barva. Tento typ patˇr´ı mezi ty v´ ykonovˇe n´aroˇcnˇejˇs´ı, ale tak´e umoˇznuje komplexnˇejˇs´ı nastaven´ı. Existuj´ı zde tˇri koeficienty ConstantAttenuation (CA), LinearAttenuation (LA) a QuadraticAttenuation (QA). V´ ysledn´e zeslaben´ı svˇetla se pak poˇc´ıt´a podle vzorce 6.1, kde distance je zd´alenost od zdroje svˇetla. 𝑙𝑖𝑔ℎ𝑡 = 𝐶𝐴 + 𝐿𝐴 * 𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑒 + 𝑄𝐴 * 𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑒2 Dle nastaven´ı tˇechto parametr˚ u lze ovlivnit sv´ıtivost. Listing 6.5: Nastaven´ı bodov´eho svˇetla < PointLight Color = " White " Position = " 0 ,0 ,0 " Range = " 30 " Cons tantAtt enuation = " 0.5 " LinearAttenuation = " 0.05 " Qu ad rat icA tt enu at ion = " 0.005 " / >
26
(6.1)
WPF a 3D
Svˇetla
Obr´azek 6.9: Koule pod bodov´ ym svˇetlem
6.6.4
Reflektorov´ e svˇ etlo
Reflektorov´e svˇetlo se v z´asadˇe moc neliˇs´ı od bodov´eho svˇetla. Rozd´ıl je v ˇs´ıˇren´ı svˇetla. Zat´ımco bodovˇe svˇetlo je vˇsesmˇerov´e, tak reflektorov´e svˇetlo sv´ıt´ı pouze smˇerem jedn´ım.
Obr´azek 6.10: Koule pod reflektorov´ ym svˇetlem Z´asadn´ım parametrem je tedy smˇer svˇetla – direction, osvˇetlen´ı lze d´ale ovlivnit pomoc´ı dvou u ´hl˚ u. InnerConeAngle specifikuje oblast, ve kter´e bude svˇetlo v pln´e intenzitˇe. V oblasti mezi InnerConeAngle a OuterConeAngle se bude intenzita postupnˇe sniˇzovat.
27
WPF a 3D
Geometrick´a reprezentace
Listing 6.6: Nastaven´ı reflektorov´eho svˇetla < SpotLight Color = " White " Position = " 0 ,0 ,0 " Direction = " 0 ,0 , -1 " InnerConeAngle = " 45 " OuterConeAngle = " 90 " / >
6.7
Geometrick´ a reprezentace
K popisu samotn´eho modelu v 3D prostoru slouˇz´ı prvek MeshGeometry3D. V souˇcasn´e dobˇe neexistuje jin´a moˇznost, jak popsat model v technologii WPF. Tento prvek popisuje povrch modelu pouze pomoc´ı sady vrchol˚ u, jednotliv´ ych troj´ uheln´ık˚ u, norm´al a koordin´at˚ u pro texturov´an´ı.
Obr´azek 6.11: Krychle Zat´ımco napˇr. technologie OpenGL umoˇzn ˇuje i sloˇzitˇejˇs´ı konstrukce neˇz troj´ uheln´ıky (strips, fans, polygons, quads aj.), tak WPF technologie podporuje pouze troj´ uheln´ıky. Pokud je tˇreba tyto primitiva naˇc´ıst, tak je nutn´e je manu´alnˇe pˇrev´est. U sestavov´an´ı troj´ uheln´ık˚ u je nutn´e si d´at pozor na pravidlo prav´e ruky”. Pˇri nastavov´an´ı koordin´at˚ u pro textury je nutn´e si ” uvˇedomit, ˇze 2D m´a jin´ y souˇradn´ y syst´em neˇz 3D viz obr´azek 6.12.
28
WPF a 3D
Materi´al
Listing 6.7: Geometrick´a reprezentace krychle < GeometryModel3D . Geometry > < MeshGeometry3D Positions = " -1 ,1 ,1 -1 , -1 ,1 -1 ,1 , -1 -1 , -1 , -1 1 , -1 , -1 1 ,1 , -1 " TriangleIndices = " 0 ,1 ,2 0 ,2 ,3 3 ,2 ,6 3 ,6 ,7 4 ,5 ,1 4 ,1 ,0 7 ,6 ,5 7 ,5 ,4 1 ,5 ,6 1 ,6 ,2 4 ,0 ,3 4 ,3 ,7 " / > GeometryModel3D . Geometry >
1 , -1 ,1
1 ,1 ,1
Obr´azek 6.12: Mapov´an´ı textur [Sonnino(2007)]
6.8
Materi´ al
Nastaven´ım kamer, svˇetel a vytvoˇren´ım grafick´e reprezentace, napˇr. krychle, jeˇstˇe nen´ı trojrozmˇern´a reprezentace viditeln´a. D˚ uvodem je to, ˇze krychle nem´a ˇza´dn´ y materi´al, tedy nen´ı co vykreslovat. Materi´alem m˚ uˇze b´ yt 2D kresba, barva, a nebo ˇc´ast uˇzivatelsk´eho prostˇred´ı napˇr. tlaˇc´ıtko. Jednotliv´e materi´aly lze mezi sebou kombinovat a to tak, ˇze je zanoˇr´ıme do prvku MaterialGroup. Z´akladem kaˇzd´eho materi´alu je parametr Brush. Typy materi´al˚ u jsou seˇrezeny od v´ ykonovˇe m´enˇe n´aroˇcn´ ych aˇz po ty sloˇzitˇejˇs´ı.
29
WPF a 3D
6.8.1
Materi´al
Emisn´ı materi´ al
Zat´ımco ostatn´ı typy materi´alu potˇrebuj´ı svˇetlo k tomu, aby byly vidˇet, tak emisn´ı materi´al s´am o sobˇe sv´ıt´ı”. Ne ˇze by osvˇetloval okoln´ı objekty, ale lze ” jej pozorovat bez zdroje svˇetla.
Obr´azek 6.13: Nastaven´ı emisn´ıho materi´alu Listing 6.8: Nastaven´ı emisn´ıho materi´alu < EmissiveMaterial Brush = " Green " / >
30
WPF a 3D
6.8.2
Materi´al
Difuzn´ı materi´ al
Difuzn´ı materi´al popisuje tu oblast modelu, kam dopad´a svˇetlo. Tato ˇca´st bude vykreslen´a matn´ ym materi´alem, kter´ y lze nadefinovat pomoc´ı parametru Brush. Oblast, kam nedopad´a svˇetlo, bude tmav´a (st´ın). K tomu, abychom takto potaˇzen´ y objekt vidˇeli, mus´ı existovat svˇetlo.
Obr´azek 6.14: Krychle potaˇzen´a difuzn´ım materi´alem Listing 6.9: Nastaven´ı difuzn´ıho materi´alu < DiffuseMaterial Brush = " Red " / >
6.8.3
Spekul´ arn´ı materi´ al
Tento typ materi´alu definuje leskl´ y povrch. Zobrazuje odlesky svˇetla a materi´al pak v´ıce pˇripom´ın´a re´aln´ y objekt. Tento typ materi´alu se obvykle pouˇz´ıv´a v kombinaci s difuzn´ım materi´alem. Spekul´arn´ı materi´al lze pozorovat pouze pod bodov´ ym nebo reflektorov´ ym svˇetlem. Tento materi´al obsahuje jeˇstˇe jeden parametr nav´ıc. Naz´ yv´a se ˇ ım niˇzˇs´ı ˇc´ıslo je, t´ım je odraz SpecularPower a urˇcuje s´ılu odrazu svˇetla. C´ silnˇejˇs´ı. Listing 6.10: Nastaven´ı spekul´arn´ıho materi´alu < SpecularMaterial Brush = " White " SpecularPower = " 2 " / >
31
WPF a 3D
Materi´al
Obr´azek 6.15: Krychle potaˇzen´a spekul´arn´ım materi´alem
6.8.4
Kombinovan´ e materi´ aly
Jednotliv´e materi´aly lze mezi sebou kombinovat pomoc´ı prvku MaterialGroup. V´ ysledn´ ym efektem je pak re´alnˇejˇs´ı zobrazen´ı objektu.
Obr´azek 6.16: Kombinace difuzn´ı a spekul´arn´ıho materi´alu
32
WPF a 3D
Transformace
Listing 6.11: Nastaven´ı MaterialGroup prvku < GeometryModel3D . Material > < MaterialGroup > < DiffuseMaterial Brush = " Red " / > < SpecularMaterial Brush = " White " SpecularPower = " 2 " / > MaterialGroup > GeometryModel3D . Material >
6.9
Transformace
Jednotliv´e modely ˇci celou sc´enu lze transformovat. Tedy pokud je krychle definov´ana v poˇc´atku souˇradn´e soustavy a je potˇreba ji posunout, otoˇcit ˇci zmenˇsit/zvˇetˇsit, nen´ı nutn´e redefinovat souˇradnice, ale lze pouˇz´ıt jiˇz st´avaj´ıc´ı a pouze je transformovat.
6.9.1
Translace
Translace neboli posuv. Touto transformac´ı lze pohybovat modelem po jednotliv´ ych os´ach X, Y nebo Z. Jednotliv´e sloˇzky pohybu se nastavuj´ı pomoc´ı offsetu. Pohyb je zad´an relativnˇe. Pˇri pozorov´an´ı translace je nutn´e m´ıt spr´avnˇe nastavenou kameru.
Obr´azek 6.17: Uk´azka translace
33
WPF a 3D
Transformace
Listing 6.12: Nastaven´ı translace po ose X a Z < Transl at eTr an sfo rm 3D
6.9.2
OffsetX = " 5 " OffsetZ = " 2 " / >
Zmˇ ena velikosti
Scaling neboli zmˇena rozmˇer˚ u. Tato transformace obsahuje celkem 3 parametry zaˇc´ınaj´ıc´ı slovem Scale. N´asleduje p´ısmeno oznaˇcuj´ıc´ı osu, dle kter´e bude objekt zmenˇsen ˇci zvˇetˇsen. Snadno tak lze z krychle vytvoˇrit kv´adr.
Obr´azek 6.18: Dvojn´asobn´e zvˇetˇsen´ı po ose Y Listing 6.13: Nastaven´ı zvˇetˇsen´ı < ScaleTransform3D ScaleY = " 2 " / >
34
WPF a 3D
6.9.3
Transformace
Rotace
Posledn´ı transformac´ı je rotace. Nejprve je nutn´e zadat osu, dle kter´e bude ´ objekt rotov´an a pak u ´hel. Uhel se zad´av´a ve stupn´ıch.
Obr´azek 6.19: Rotace krychle o 25 stupˇ n˚ u v ose X Listing 6.14: Nastaven´ı rotace < RotateTransform3D > < RotateTransform3D . Rotation > < Ax isAngle Rotation 3D Axis = " 0 ,1 ,0 " Angle = " 25 " / > RotateTransform3D . Rotation > RotateTransform3D >
35
WPF a 3D
6.9.4
Transformace
Skl´ ad´ an´ı transformac´ı
Jednotliv´e transformace se tak´e daj´ı skl´adat pomoc´ı prvku Transform3DGroup, ale z hlediska v´ ykonnostn´ıho se to moc nedoporuˇcuje. Jako alternativa se pak nab´ız´ı transformace maticov´a.
Obr´azek 6.20: Kombinace transformac´ı Listing 6.15: Nastaven´ı skl´ad´an´ı transformac´ı < Transform3DGroup > < ScaleTransform3D ScaleY = " 2 " / > < RotateTransform3D > < RotateTransform3D . Rotation > < Ax isAngle Rotation 3D Axis = " 0 ,1 ,0 " Angle = " 25 " / > RotateTransform3D . Rotation > RotateTransform3D > Transform3DGroup >
36
WPF a 3D
6.9.5
Transformace
Maticov´ a transformace
Maticov´a transformace umoˇzn ˇuje veˇsker´e akce jako pˇredchoz´ı transformace a co v´ıc, nen´ı tˇreba vyuˇz´ıvat Transform3DGroup, coˇz umoˇzn ˇuje vyˇsˇs´ı v´ ykon.
Obr´azek 6.21: Maticov´a tranformace Jedin´ ym parametrem t´eto transformace je Matrix, tedy 4x4 matice. Prvn´ımi tˇremi ˇc´ısli na diagon´ale lze nastavit scaling a posledn´ı ˇra´dka (tedy prvn´ı 3 ˇc´ısla) nastavuje posuv. Listing 6.16: Nastaven´ı dvojn´asobn´eho zvˇetˇsen´ı po Y a posuv o 3 v ose X < MatrixTransform3D Matrix = " 1 ,0 ,0 ,0 , 0 ,2 ,0 ,0 , 0 ,0 ,1 ,0 , 3 ,0 ,0 ,1 " / >
37
7 Implementace V n´asleduj´ıc´ı kapitole budu popisovat implementovanou architekturu aplikace. U sloˇzitˇejˇs´ıch algoritm˚ u se pozastav´ım a bl´ıˇze pop´ıˇsi danou problematiku.
7.1
V´ ybˇ er n´ astroj˚ u
Aplikace je vyvinuta na platformˇe Microsoft .NET verze 4.0 s vyuˇzit´ım technologie WPF (viz kapitola 3.2). Jako programovac´ı jazyk byl zvolen C#. Technologie WPF byla zvolena proto, ˇze umoˇzn ˇuje snadno oddˇelovat aplikaˇcn´ı vrstvu s vrstvou prezenˇcn´ı. Toto oddˇelen´ı bylo nav´ıc podpoˇreno doporuˇcen´ ym n´avrhov´ ym vzorem M-V-VM (viz kapitola 4.2.1). Pro snazˇs´ı implementaci byl pouˇzit jednoduch´ y framework Caliburn.Micro (viz kapitola 4.3.1) a pro snazˇs´ı dekompozici je podpoˇren dalˇs´ım frameworkem MEF (viz kapitola 4.3.2). V´ yhodou vˇsech tˇechto technik, technologi´ı a framework˚ u je to, ˇze um´ı spolu u ´zce spolupracovat a po jejich pochopen´ı usnadˇ nuj´ı v´ yvoj´aˇri mnoho pr´ace a tak´e udrˇzuj´ı k´od pˇrehledn´ y, ˇc´ımˇz je splnˇen poˇzadavek na rozˇsiˇritelnost a znuvupouˇzitelnost aplikace. Pro samotn´ y v´ yvoj byly vyuˇzity tyto n´astroje: ∙ Microsoft Visual Studio 2010 ∙ Microsoft SQL Server Management Studio (v. 10.50.1617.0) ∙ .NET framework 4.0 D´ale byly vyuˇzity tyto knihovny tˇret´ıch stran: ∙ Helix 3D Toolkit - snazˇs´ı manipulace s 3D objekty [objo(2013)] ∙ log4net - pomocn´a knihovna pro logov´an´ı [Apache.org(2013)] N´aroky samotn´e aplikace nejsou vyˇsˇs´ı neˇz n´aroky na operaˇcn´ı syst´em Windows s nainstalovan´ ym .NET frameworkem 4.0. 38
Implementace
7.2
Struktura aplikace
Struktura aplikace
Aplikace je rozdˇelena do 4 samostatn´ ych ˇca´st´ı. Kaˇzd´a je vytvoˇrena v u ´plnˇe oddˇelen´e sestavˇe (angl. assembly). ∙ PanelComposer.Interfaces ∙ PanelComposer.Models ∙ PanelComposer.ViewModels ∙ PanelComposer.Views
7.2.1
Interfaces
Knihovna Interfaces obsahuje sd´ılen´e rozhran´ı a v´ yˇcet obrazovek (viz obr. 7.1). Tato knihovna je sd´ılena mezi zbyl´ ymi tˇremi knihovnami.
Obr´azek 7.1: Obsah knihovny Interfaces
39
Implementace
7.2.2
Struktura aplikace
Models
Knihovna Models (viz obr. 7.2) umoˇzn ˇuje komunikaci s lok´aln´ı datab´az´ı a obsahuje implementaci rozhran´ı IRepository. Repository je n´avrhov´ y vzor, kter´ y sjednocuje pˇr´ıstup k r˚ uzn´ ym entit´am v datab´azi. Tato implementace je generick´a, lze ji tedy pouˇz´ıvat pro vˇsechny entity stejnˇe. Rozhran´ı IRepository obsahuje CRUD operace nad datab´az´ı. Samotn´a datab´aze se nach´az´ı ve sloˇzce data. Jedn´a se o lok´aln´ı datab´azi MS SQL Compact Edition, kterou lze pouˇz´ıvat jako snadn´e uloˇziˇstˇe dat. K samotn´e datab´azi pak aplikace pˇristupuje pomoc´ı LINQ2SQL (viz kapitola 5.2). Protoˇze Visual Studio 2010 neum´ı vytvoˇrit datov´ y model, tzv. DataClasses, je nutn´e tento model generovat pomoc´ı utility sqlmetal. Bliˇzˇs´ı popis, jak na to, je rozeps´an v textov´em souboru HowTo.
Obr´azek 7.2: Obsah knihovny Models
40
Implementace
7.2.3
Struktura aplikace
ViewModels
´ Posledn´ı knihovna ViewModels (viz obr. 7.3) je vrstvou aplikaˇcn´ı. Uzce spolupracuje s Model em a zpracov´av´a data z datab´aze. Zaroveˇ n s tˇemito daty manipuluje a poskytuje je vrstvˇe View. Kaˇzd´a tˇr´ıda, kter´a komunikuje s prezenˇcn´ı vrstvou aplikace konˇc´ı v n´azvu postfixem ViewModel, d´ale je tˇreba, aby tyto tˇr´ıdy implementovaly rozhran´ı INotifyPropertyChanged. T´ım doc´ıl´ıme toho, ˇze jak´akoliv zmˇena vlastnost´ı na ViewModelu bude dopropagov´ana na View. ViewModel obsahuje 4 sloˇzky.
Shell Ve sloˇzce Shell se nach´az´ı implementace ViewModelu pro okna aplikace. Toto okno je zodpovˇedn´e za navigaci po ostatn´ıch str´ank´ach a ovl´ad´a samotn´e menu. Kaˇzd´a str´anka je oddˇedˇena od tˇr´ıdy NavigateScreen a obsahuje n´azev z v´ yˇctu PageNames. T´ımto lze snadno identifikovat kaˇzdou str´anku a poˇza´dat hlavn´ı okno (shell) o jej´ı zobrazen´ı. Takov´a ud´alost (jako je zmˇena aktivn´ı str´anky) m˚ uˇze b´ yt zaj´ımav´a i pro ostatn´ı str´anky. Samotn´a zmˇena je vyvol´ana vyuˇzit´ım tzv. EventAggregatoru, kter´ y zajist´ı to, ˇze vˇsechny str´anky, kter´e jsou v nˇem registrov´any a implementuj´ı rozhran´ı IHandle dan´eho typu ud´alost´ı, tak budou pˇri zmˇenˇe informov´ani.
Pages Jak jiˇz bylo zm´ınˇeno v pˇredchoz´ıch odstavc´ıch, vˇsechny str´anky jsou uloˇzeny ve sloˇzce Pages. Kaˇzd´ y ViewModel reprezentuje aplikaˇcn´ı vrstvu pro jednu str´anku. Zde je zejm´ena nutn´e dodrˇzet jmennou konvenci, tedy n´azev odpov´ıd´a n´azvu UserControlu na View akor´at s postfixem ViewModel.
Events Pro veˇsker´e ud´alosti, kter´e lze vyvolat pˇres EventAggregator je nutn´e vytvoˇrit objekt. Tento objekt nemus´ı obsahovat nic, ale pokud potˇrebujeme pˇredat nˇejakou informaci, tak se n´am toto velice hod´ı. Ud´alosti jsou vyuˇzity vˇzdy, pokud je potˇreba informovat v´ıce nez´avisl´ ych zdroj˚ u najednou.
41
Implementace
Struktura aplikace
Core Tato sloˇzka obsahuje d˚ uleˇzit´e tˇr´ıdy, kter´e je vhodn´e oddˇelit od ViewModelu, napˇr´ıklad, protoˇze stejnou funkci vyuˇz´ıv´a v´ıce tˇr´ıd (napˇr. pr´ace se soubory na disku). Tˇr´ıda ClippingEar obsahuje implementaci triangulaci obecn´eho polygonu, konkr´etnˇe jde o implementaci algoritmu oˇrez´av´an´ı uˇs´ı”. ” Tento algoritmus pracuje tak, ˇze nejprve seˇrad´ı jednotliv´e vrcholy v protismˇeru hodinov´ ych ruˇciˇcek. Dalˇs´ı postup je, ˇze vezme 3 vrcholy a kontroluje, jestli prostˇredn´ı z nich je natoˇcen na pravou ˇci levou stranu. Pokud je na stranˇe lev´e, lze tento vrchol prohl´asit za ucho“ a to uˇr´ıznout jej, viz uk´azka ” k´odu (??). Listing 7.1: Uk´azka algoritmu oˇrez´av´an´ı uˇs´ı /// < summary > /// Triangulates the specified points . /// summary > /// < param name = " points " > The points . param > public static IList < IList < Point > > Triangulate ( IList < Point > points ) { // zdrojovy seznam bodu IList < Point > source = null ; // seznam seznamu bodu IList < IList < Point > > result = new List < IList < Point > >() ; source = MakeClockOtherwise ( points ) ; int x = 0; // odrezavame usi , dokud nam nezbyde jeden trojuhelnik while ( source . Count > 3) { // vytazeni bodu Point p0 = source [( x - 1 + source . Count ) % source . Count ]; Point p1 = source [( x ) % source . Count ]; Point p2 = source [( x + 1) % source . Count ]; // zkontrolujeme , zdali P1 je nalevo nebo napravo if ( IsLeft ( p0 , p2 , p1 ) < 0) { // pokud je vlevo , je treba zkontroloval zdali trojuhelnik neprochazi zkrz existujici hrany bool isOk = true ; // projedeme vsechny body a budeme kontrolovat , zdali se nachazi uvnitr noveho trojuhelniku foreach ( Point p in source ) { // pouzite body automaticky preskocime
42
Implementace
Struktura aplikace
if ( p == p0 || p == p1 || p == p2 ) continue ; // pokud je uvnitr , nastavime flaf isOk na false if ( IsInsideTriangle ( p0 , p1 , p2 , p ) ) isOk = false ; } // pokud je vse v poradku , tak vygenerujeme trojuhelnik if ( isOk ) { result . Add ( new List < Point > () { p0 , p1 , p2 }) ; source . Remove ( p1 ) ; } } x ++; } result . Add ( source ) ; return result ; }
FileHelper usnadˇ nuje pr´aci s ukl´ad´an´ım obr´azk˚ u do sloˇzky Drawing v koˇrenov´em adres´aˇri aplikace, vˇse ukl´ad´a pod k´odov´ ymi n´azvy a vytv´aˇr´ı z´aznam v datab´azi. NavigateScreen a ValidatingScreen jsou dvˇe rozˇs´ıˇren´ı tˇr´ıdy Screen z frameworku Caliburn.Micro. Tyto dvˇe tˇr´ıdy implementuj´ı vˇse potˇrebn´e pro kaˇzdou str´anku a umoˇzn ˇuj´ı snadn´e vol´an´ı navigace a ValidatingScreen nav´ıc obsahuje validace jednotliv´ ych vlastnost´ı tˇr´ıdy, coˇz je hojnˇe vyuˇz´ıv´ano u zakl´adac´ıch ˇci editaˇcn´ıch obrazovek. Tˇr´ıda Utils obsahuje pomocn´e metody pro pˇrevod pl´atna na obr´azek PNG. Nejd˚ uleˇzitˇejˇs´ı tˇr´ıdou j´adra je Polygon3DModel, kter´ y na z´akladˇe pˇredan´ ych bod˚ u polygonu, v´ yˇsky a cesty k obr´azku vygeneruje kompletn´ı 3D model panelov´eho domu.
43
Implementace
Struktura aplikace
Obr´azek 7.3: Obsah knihovny ViewModels
44
Implementace
7.2.4
Struktura aplikace
Views
Samotn´a aplikace je spouˇstˇena z assembly Views (viz obr. 7.4). Ta je tedy vstupn´ım bodem aplikace a z´aroveˇ n prezenˇcn´ı vrstvou. Nejd˚ uleˇzitˇejˇs´ı tˇr´ıdou View je jednoznaˇcnˇe AppBootstrapper, kter´ y je vyvol´an hned po startu aplikace a za bˇehu propojuje jednotliv´e assembly, d´ale prohled´av´a vˇsechny tˇr´ıdy, kter´e obsahuj´ı atribut Export a vˇsechny je naˇcte do slovn´ıku. Tento pr˚ uzkum provede jeˇstˇe jednou a pokus´ı se naopak vyhledat vˇsechny objekty, kter´e obsahuj´ı atribut Import. Vnitˇrnˇe si vybuduje strom z´avislost´ı, a jakmile si vyˇz´ad´ame instanci nˇekter´eho z tˇechto zaregistrovan´ ych objekt˚ u, tak automaticky inicializuje vˇse potˇrebn´e za n´as. Toto je pr´ace frameworku MEF (viz kapitola 4.3.2). Na druhou stranu, bootstrapper je objektem druh´eho frameworku Caliburn.Micro (viz kapitola 4.3.1), kter´ y naopak vyuˇzije vlastnost´ı pˇredchoz´ıho frameworku a vyˇz´ad´a si vytvoˇren´ı instance rozhran´ı IShell, kter´ y reprezentuje okno aplikace. O samotn´e propojen´ı View s ViewModelem se postar´a u ´plnˇe s´am. Nem´enˇe d˚ uleˇzit´ y je tak´e soubor app.config, kter´ y obsahuje konfiguraci logovac´ı knihovny Log4NET a nastaven´ı spojen´ı s datab´az´ı.
Shells Tato sloˇzka obsahuje obdobnˇe jako u ViewModelu reprezentaci hlavn´ıho okna. Tentokr´at ale nejde o aplikaˇcn´ı vrstvu, ale o vrstvu prezenˇcn´ı. Tˇr´ıda ShellView tedy obsahuje design hlavn´ı str´anky.
Pages Analogicky jako u pˇredchoz´ıho odstavce, sloˇzka Pages obsahuje design jednotliv´ ych str´anek.
Themes Tato sloˇzka obsahuje tzv. ResourcesDictionary. Tento soubor obsahuje obecn´e styly, kter´e jsou pouˇz´ıv´any v cel´e prezenˇcn´ı vrstvˇe. 45
Implementace
Struktura aplikace
UserControls Tato sloˇzka obsahuje specifick´e uˇzivatelsk´e kontrolky, kter´e jsou v´ yraznˇe pozmˇenˇeny oproti jej´ım standardn´ım implementac´ım. Zde jsou konkr´etnˇe um´ıstˇeny dvˇe kontrolky. BaseCanvas je kresl´ıc´ı pl´atno speci´alnˇe upraven´e tak, aby vyhovovalo kreslen´ı p˚ udorysu panelov´ ych dom˚ u. Tedy umoˇzn ˇuje kreslen´ı polygonu. PanelCanvas je opˇet upraven´e kresl´ıc´ı pl´atno, kter´e ale tentokr´at na z´akladˇe vstupn´ıch dat generuje v´ yslednou texturu 3D modelu.
Logging Tato sloˇzka obsahuje implementaci rozhran´ı ILog od frameworku CM a propojuje funkcionalitu tohoto frameworku s logovac´ı knihovnou Log4NET.
46
Implementace
Struktura aplikace
Obr´azek 7.4: Obsah knihovny Views
47
Implementace
7.3
Navigace a datab´aze
Navigace a datab´ aze
N´asleduj´ıc´ı obr´azek 7.5 popisuje moˇzn´ y pr˚ uchod aplikac´ı. Tedy odkud kam se lze dostat z dan´e str´anky. Tato navigace se obecnˇe naz´ yv´a Screen Flow. Datab´azov´e sch´ema 7.6 popisuje jednotliv´e entity v datab´azi a vztahy mezi nimi. Lze tedy snadno vypozorovat, ˇze kaˇzd´ y Solution m˚ uˇze obsahovat 0 aˇz N projekt˚ u a s kaˇzd´ ym t´ımto projektem lze samostatnˇe manipulovat. Toto popisuje vazebn´ı tabulka SolutionProject.
Obr´azek 7.5: Obsah knihovny Views
48
Implementace
Navigace a datab´aze
Obr´azek 7.6: Datab´azov´e sch´ema
49
8 Pr´ace s programem Cel´ y proces v nov´e aplikaci je zaloˇzen na tom, ˇze kaˇzd´ y jednotliv´ y panelov´ y d˚ um je jedn´ım projektem. Tyto projekty lze n´aslednˇe shlukovat v tzv. Solutionu (ˇcesky ˇreˇsen´ı). Solution je soubor d´ılˇc´ıch projekt˚ u a lze jej vyuˇz´ıt pro zobrazen´ı v´ıce panelov´ ych domu vedle sebe, napˇr. s´ıdliˇstˇe. N´azvy Solution a Project byly pˇrevzaty z terminologie nejzn´amˇejˇs´ıho IDE - Visual Studio. Cel´a aplikace je lokalizov´ana do angliˇctiny, protoˇze ˇ a lokalizace m˚ tento jazyk je standardem v IT oblasti. Cesk´ uˇze b´ yt pˇr´ıkladem dalˇs´ıho rozˇs´ıˇren´ı. Uˇzivatelsk´a dokumentace je pˇriloˇzena v elektronick´e podobˇe na CD.
8.1
Tvorba projektu
Tento projekt lze zaloˇzit vyplnˇen´ım jeho jm´ena pro snadn´e rozpozn´an´ı z pohledu uˇzivatele a vyplnˇen´ım poˇctu pater. Z´aklad kaˇzd´eho domu je jeho p˚ udorys a tak dalˇs´ım nezbytn´ ym krokem je pr´avˇe n´akres samotn´eho p˚ udorysu. Toto z´akladn´ı sch´ema, jak jiˇz bylo ˇreˇceno, m˚ uˇze b´ yt obecn´ y polygon. Vˇetˇsina ˇ e Republice m´a obd´eln´ıkov´ panelov´ ych dom˚ u v Cesk´ y tvar, ale existuje mnoho v´ yjimek. Napˇr´ıklad panelov´e domy v Plzni na Borech (viz obr. 8.1) maj´ı tvar ˇsestihranu a tyto domy nebylo moˇzn´e rozkreslit v p˚ uvodn´ı aplikaci.
8.1.1
Kreslen´ı p˚ udorysu
N´avrh p˚ udorysu je velice jednoduch´a z´aleˇzitost. Lev´ ym tlaˇc´ıtkem myˇsi ukotv´ıme prvn´ı bod polygonu a dalˇs´ım stiskem postupnˇe vytv´aˇr´ıme polygon. Jakmile dojde k pˇrekˇr´ıˇzen´ı dvou stˇen, nov´a stˇena zmˇen´ı barvu na ˇcervenou, styl na pˇreruˇsovanou ˇc´aru a kurzor myˇsi se zmˇen´ı na z´akaz (viz obr. 8.2). T´ımto se aplikace br´an´ı tvorbˇe ˇspatn´ ych” polygon˚ u. Samotn´ y polygon pak ” ukonˇc´ıme pomoc´ı stisku prav´eho tlaˇc´ıtka myˇsi.
50
Pr´ace s programem
Tvorba projektu
Obr´azek 8.1: Panelov´ y d˚ um v Plzni na Borech
8.1.2
Umist’ov´ an´ı panel˚ u na stˇ eny
Jakmile je n´avrh z´aklad˚ u panelov´eho domu hotov, povol´ı se na detailu projektu nov´a poloˇzka Draw on panels”. Pˇri prvn´ım vstupu na tuto str´anku ” bude vygenerov´ana textura odpov´ıdaj´ıc´ı rozmˇer˚ um p˚ udorysu a v´ yˇsky nastaven´e dle poˇctu pater. Nyn´ı lze v´ ybˇerem specifick´eho panelu snadno umist’ovat jednotliv´e panely na texturu domu. Zde opˇet funguje automatick´a kontrola, kter´a hl´ıd´a, aby uˇzivatel nemohl pˇrekl´adat panely pˇres sebe (viz obr. 8.3). Speci´aln´ım typem panelu jsou pak dveˇre, kter´e je nutn´e um´ıstit na panel stejn´e velikosti tedy typu A” (typ se zobraz´ı po najen´ı na tlaˇc´ıtko panelu). ” Uˇzivatel je o t´eto skuteˇcnosti informov´an pomoc´ı zmˇeny kurzoru.
51
Pr´ace s programem
Tvorba projektu
Obr´azek 8.2: Kreslen´ı p˚ udorysu
8.1.3
Kreslen´ı na stˇ eny
Jsou-li panely rozm´ıstˇeny na stˇeny, n´asleduje posledn´ı ˇca´st procesu tvorby panelov´eho domu, kreslen´ı. Aplikace umoˇzn ˇuje pouze kreslen´ı z´akladn´ıch obrazc˚ u jako je obd´eln´ık, elipsa a ˇca´ra (viz obr. 8.4). Pro sloˇzitˇejˇs´ı kresby je doporuˇceno pouˇz´ıt funkci pro export obr´azku a n´aslednˇe vyuˇz´ıt nˇekter´ y z komerˇcn´ıch kresl´ıc´ıch program˚ u napˇr. PaintBrush, Photoshop, Gimp, Paint.NET aj,. Ide´aln´ı volbou pak je software, kter´ y um´ı kreslen´ı ve vrstv´ach, protoˇze Export vytvoˇr´ı jeden obr´azek pro kaˇzdou vrstvu. Pomoc´ı funkce Import lze naopak obr´azek zpˇet uloˇzit do aplikace pro tvorbu panelov´ ych dom˚ u.
8.1.4
Detail projektu
Po dokonˇcen´ı cel´eho procesu tvorby projektu lze na detailu pozorovat 3D projekci pr´avˇe navrˇzen´eho panelov´eho domu. 3D model lze ot´aˇcet pomoc´ı stisku prav´eho tlaˇc´ıtka a n´asledn´ ym pohybem myˇsi. Analogicky lze pouˇz´ıt
52
Pr´ace s programem
Tvorba solutionu
Obr´azek 8.3: Umist’ov´an´ı panel˚ u na stˇeny malou projekˇcn´ı kostku v prav´em doln´ım rohu a kliknut´ım lev´eho tlaˇc´ıtka myˇsi na danou stˇenu. Cel´ y prostor lze tak´e posunout pomoc´ı stisku koleˇcka myˇsi a taˇzen´ım.
8.2
Tvorba solutionu
M´ame-li vyhotoven´ y vˇetˇs´ı poˇcet projekt˚ u a chtˇeli bychom vidˇet, jak by domy vypadaly vedle sebe, lze vyuˇz´ıt solutionu. Pro zaloˇzen´ı solutionu staˇc´ı pouze zadat n´azev, to jen pro snazˇs´ı orientaci uˇzivatele v pˇrehledu jiˇz vytvoˇren´ ych ˇreˇsen´ı. Detail zaloˇzen´eho ˇreˇsen´ı obsahuje pˇrehled vˇsech jiˇz pˇriloˇzen´ ych projekt˚ u ve spodn´ı ˇc´asti obrazovky. Na lev´e stranˇe se nach´az´ı pˇrehled vˇsech akc´ı, kter´e lze prov´adˇet nad solutionem ˇci nad pr´avˇe aktivn´ım projektem.
53
Pr´ace s programem
Shrnut´ı
Obr´azek 8.4: Kreslen´ı na stˇeny
8.2.1
Tvorba linku
Propojen´ı projektu se solutionem lze doc´ılit pomoc´ı tzv. linku (ˇcesky spoje). V kaˇzd´em linku se definuje, kter´ y projekt chceme pˇripojit a jak dan´ y projekt (d˚ um) posunout ˇci otoˇcit ve v´ ysledn´em ˇreˇsen´ı.
8.3
Shrnut´ı
Pomoc´ı tˇechto dvou proces˚ u, tvorby projektu(˚ u) a tvorby ˇreˇsen´ı se n´am do ruky dost´av´a mocn´ y n´astroj k tvorbˇe trojrozmˇern´e projekce jak pro jednotliv´e domy, tak cel´a s´ıdliˇstˇe (viz obr. 8.5).
54
Pr´ace s programem
Shrnut´ı
Obr´azek 8.5: S´ıdliˇstˇe
55
9 Z´avˇer C´ılem bakal´aˇrsk´e pr´ace bylo, sezn´amit se s pˇredchoz´ım ˇreˇsen´ım aplikace pro grafick´ y n´avrh podoby rekonstrukce panelov´ ych dom˚ u a zhodnotit moˇznosti dalˇs´ıho rozˇs´ıˇren´ı, ˇcemuˇz se vˇenuje cel´a kapitola Anal´ yza p˚ uvodn´ı aplikace” ” (viz kap. ˇc.2). D´ale byla prakticky vyvinuta nov´a aplikace, kter´a se v t´e p˚ uvodn´ı pouze inspiruje. Byla kompletnˇe pˇrepracov´ana architektura aplikace, jej´ımu n´avrhu byla vˇenov´ana velk´a ˇca´st pr´ace. D´ale bylo uˇzito mnoho doporuˇcen´ ych n´avrhov´ ych vzor˚ u, ˇc´ımˇz byl splnˇen poˇzadavek na dalˇs´ı rozˇsiˇritelnost aplikace. Nejvˇetˇs´ı prostor byl vˇenov´an problematice 3D zobrazen´ı a cel´ y v´ yzkum je podrobnˇe pops´an v kapitole WPF a 3D” (viz kap. ˇc. 6), kter´a byla zpracov´ana ” v pˇredmˇetu Projekt 5. Veˇsker´e poznatky byly pouˇzity pˇri tvorbˇe dynamick´ ych 3D model˚ u, kter´e jsou generov´any na z´akladˇe nakreslen´eho p˚ udorysu, coˇz m˚ uˇze b´ yt jak´ ykoliv polygon, jehoˇz strany se neprot´ınaj´ı. Vzhledem k tomu, ˇze i kdyby byl vˇenov´an cel´ y prostor bakal´aˇrsk´e pr´ace kreslen´ı na stˇeny, tak bychom nikdy nevytvoˇrili tak komfortn´ı uˇzivatelsk´e prostˇred´ı jako nab´ız´ı mnoho komerˇcn´ıch aplikac´ı. Bylo proto od t´eto myˇslenky upuˇstˇeno a naopak byl umoˇznˇen export a import textury dom˚ u do obrazov´eho form´atu PNG. Uˇzivatel tak m˚ uˇze snadno pouˇz´ıvat sv˚ uj obl´ıben´ y obrazov´ y editor a nemus´ı b´ yt limitov´an touto aplikac´ı. Veˇsker´a pr´ace je novˇe ukl´ad´ana do lok´aln´ı datab´aze MS SQL Compact Edition a tak m´a uˇzivatel vˇzdy pˇrehled o vˇsech projektech realizovan´ ych v t´eto aplikaci. Jako jedno z moˇzn´ ych rozˇs´ıˇren´ı se tedy nab´ız´ı import a export cel´eho projektu ˇci solutionu. D´ale se nab´ız´ı vylepˇsen´ı grafick´eho vzhledu aplikace napˇr. vyuˇzit´ım Ribbon knihovny. Vytvoˇren´ı propracovanˇejˇs´ı manipulace s 3D objekty ˇci 3D prezentac´ı, napˇr. s balk´ony ve formˇe 3D a nikoliv textury. Samotn´emu kreslen´ı na stˇeny bych se sp´ıˇse vyhnul, avˇsak jako jist´e rozˇs´ıˇren´ı se nab´ız´ı vytvoˇren´ı pluginu do nˇekter´eho z komerˇcn´ıch program˚ u pro kreslen´ı a usnadnit tak jejich kooperaci.
56
Pˇ rehled zkratek WPF AWT XAML UI GUI MVC MVVM IoC DI MEF DB SQL ORM LINQ IDE CM
Windows Presentation Foundation Abstract Window Toolkit Extensible Application Markup Language Uˇzivatelsk´e rozhran´ı Grafick´e uˇzivatelsk´e rozhran´ı Model View Controller Model View ViewModel Inversion of Control Dependecies Injection Managed Extensibility Framework Datab´aze Structured Query Language Object-relational mapping Language Integrated Query Integrated Development Environment framework Caliburn.Micro
57
Literatura [mef(2012)] Managed Extensibility Framework [online]. [cit. 25.04.2013]. Dostupn´e z: http://mef.codeplex.com/.
2012.
[mon(2013)] Mono [online]. 2013. [cit. 25.04.2013]. Dostupn´e z: http://www. mono-project.com/Main_Page/. [wik(2013a)] Windows Forms [online]. 2013a. [cit. 25.04.2013]. Dostupn´e z: http://en.wikipedia.org/wiki/Windows_Forms/. [wik(2013b)] Windows Presentation Foundation [online]. 2013b. [cit. 25.04.2013]. Dostupn´e z: http://en.wikipedia.org/wiki/ Windows_Presentation_Foundation/. [Apache.org(2013)] APACHE.ORG. Logging services [online]. 2013. [cit. 27.06.2013]. Dostupn´e z: http://logging.apache.org/log4net/. [August´ yn(2010)] AUGUST´ yN, M. Augiho web [online]. 2010. [cit. 25.04.2013]. Dostupn´e z: http://www.augi.cz/programovani/ iocdi-v-net/. ´ [Bernard(2013)] BERNARD, B. Uvod do architektury MVC [online]. 2013. [cit. 25.04.2013]. Dostupn´e z: http://www.zdrojak.cz/clanky/ uvod-do-architektury-mvc/. [Chris Sells(2007)] CHRIS SELLS, I. G. Programming WPF. 2nd ed. Sebastopol, Calif. : O’Reilly, 2007. ISBN 978-0-596-51037-4. [Eisenberg(2013)] EISENBERG, R. Caliburn.Micro [online]. 2013. [cit. 25.04.2013]. Dostupn´e z: http://caliburnmicro.codeplex.com/. [Jirava(2010)] JIRAVA, J. Pouˇz´ıv´ame Model-View-ViewModel – u ´vod [online]. 2010. [cit. 25.04.2013]. Dostupn´e z: http://xaml.cz/wpf/ pouzivame-model-view-viewmodel-uvod/. 58
LITERATURA
LITERATURA
[Kraft(2011)] KRAFT, P. Program pro grafick´ y n´avrh podoby rekonstruovan´ ych dom˚ u, 2011. [libGDX(2012)] LIBGDX. Android/iOS/HTML5/desktop game deveploment framework [online]. 2012. [cit. 25.04.2013]. Dostupn´e z: https://code. google.com/p/libgdx/. [Microsoft(2013)] MICROSOFT. 3-D Graphics Overview [online]. 2013. [cit. 25.04.2013]. Dostupn´e z: http://msdn.microsoft.com/en-us/ library/ms747437.aspx/. [Mosers(2013)] MOSERS, C. WPF Tutorial.net [online]. [cit. 25.04.2013]. Dostupn´e z: http://www.wpftutorial.net/.
2013.
[objo(2013)] OBJO. Helix 3D Toolkit [online]. 2013. [cit. 27.06.2013]. Dostupn´e z: http://helixtoolkit.codeplex.com/. [Sonnino(2007)] SONNINO, R. Creating a 3D book-shaped application with speech and ink using WPF 3.5 [online]. 2007. [cit. 25.04.2013]. Dostupn´e z: http://www.codeproject.com/Articles/22352/ Creating-a-3D-book-shaped-application-with-speech/.
59