SISTEM NAVIGASI BERASASKAN ALGORITMA DIJKSTRA DI DALAM PERSEKITARAN TIGA DIMENSI MUHAMAD UZNIR BIN UJANG UNIVERSITI TEKNOLOGI MALAYSIA Bahagian A – PENGESAHAN KERJASAMA* Adalah disahkan bahawa projek penyelidikan tesis ini telah dilaksanakan melalui kerjasama antara _______________________ dengan _______________________ Disahkan oleh: Tandatangan : Nama : Jawatan (Cop rasmi) : Tarikh : * Jika penyediaan tesis/projek melibatkan kerjasama. bahagian b – UNTUK KEGUNAAN PEJABAT SEKOLAH PENGAJIAN SISWAZAH Tesis ini telah diperiksa dan diakui oleh: Nama dan Alamat Pemeriksa Luar : PROF. MADYA DR. NANNA SURYANA HERMAN Timbalan Dekan (Penyelidikan & Pengajian Siswazah) Fakulti Teknologi Maklumat dan Komunikasi Universiti Teknikal Malaysia Melaka Karung Berkunci 1200 75450 AYER KEROH MELAKA Nama dan Alamat Pemeriksa Dalam : PROF. MADYA MOHAMAD NOR SAID Fakulti Kejuruteraan & Sains Geoinformasi Universiti Teknologi Malaysia 81310 UTM Skudai JOHOR DARUL TA’AZIM Disahkan oleh Ketua Jabatan (Pengajian Siswazah): Tandatangan : Nama : Tarikh : SISTEM NAVIGASI BERASASKAN ALGORITMA DIJKSTRA DI DALAM PERSEKITARAN TIGA DIMENSI MUHAMAD UZNIR BIN UJANG Tesis ini dikemukakan sebgai memenuhi syarat penganugerahan Ijazah Sarjana Sains (Geoinformatik) Fakulti Kejuruteraan Dan Sains Geoinformasi Universiti Teknologi Malaysia JUN 2008 DEDIKASI This thesis is dedicated to: My lovely mum Kasmira, my dad Ujang, My best ever sis Uraini, And lastly to you Wafiah. Thanks for your love and kindness, This is for you. With love, Muhamad Uznir Ujang PENGHARGAAN Dengan nama Allah Yang Maha Pemurah dan Maha Penyayang, Selawat dan salam kepada junjungan besar Nabi Muhammad S.A.W, kaum keluarga baginda dan para-para sahabat baginda. Penghargaan ditujukan kepada penyelia kajian, Profesor Madya Dr. Alias Abdul Rahman atas bimbingan dan tunjuk ajar yang diberikan. Bantuan yang diberikan sepanjang penyelidikan tesis ini dijalankan adalah amat dihargai. Terima kasih juga diucapkan kepada kakitangan FKSG yang terlibat secara langsung atau pun tidak dalam menjayakan penyelidikan ini. Sumbangan dan pertolongan kalian amatlah dihargai dan penulis mengucapkan jutaan terima kasih di atas jasa baik kalian. Semoga Tuhan membalas jasa baik kalian, insyaAllah. ABSTRAK Navigasi merupakan salah satu aspek yang penting bagi sesetengah bidang, contohnya seperti bidang pengangkutan perindustrian, bantuan kecemasan dan juga perancangan. Analisis rangkaian yang terdapat di dalam proses navigasi dapat menjimatkan kos pengangkutan, meminimakan kesan bencana atau kemalangan dan dapat memberikan keputusan yang tepat mengenai laluan yang terbaik bagi situasisituasi tertentu. Algoritma Dijkstra merupakan antara algoritma yang digunakan di dalam analisis rangkaian dan telah terbukti keberkesanannya dalam pengiraan laluan yang terpendek bagi situasi yang melibatkan data dua dimensi (2D). Apabila melibatkan navigasi di dalam bangunan bertingkat, analisis rangkaian terhadap jaringan rangkaian tiga dimensi (3D) diperlukan. Sistem Maklumat Geografi (GIS) semasa masih tidak mampu melakukan analisis rangkaian laluan yang terpendek terhadap data 3D. Akibat daripada reka bentuk binaan dan bentuk muka bumi yang menjadi semakin kompleks untuk diuruskan, maka wujudnya permintaan daripada pengguna GIS terhadap pengurusan data 3D di dalam GIS. Oleh itu, kajian di dalam tesis ini adalah bertujuan untuk mengkaji kebolehlaksanaan algoritma Dijsktra bagi pengiraan laluan terpendek di dalam persekitaran 3D. Jaringan rangkaian navigasi 3D bagi model kawasan bangunan kajian dibina dan seterusnya diuji bersama-sama dengan algoritma Dijkstra. Hasil daripada analisis rangkaian tersebut dipersembahkan dengan menggunakan enjin permainan komputer (3D State) di dalam persekitaran objek spatial 3D dan seterusnya boleh melakukan navigasi di dalam persekitaran 3D tersebut (Virtual Reality) dengan menggunakan simulasi pergerakan manusia. Bagi mewujudkan persekitaran 3D yang lebih realistik, penggunaan tekstur sebenar bagi objek spatial kawasan kajian digunakan untuk memberikan kesan 3D bagi navigasi maya 3D yang dibina. ABSTRACT Navigation is an important aspect in some areas such as industrial transportation, emergency navigation and also navigation planning. Network analysis in navigation process can minimize transportation cost, disaster or accident impact and also it can provide right decision for the best route in certain situations. Dijkstra's algorithm is one of the algorithms that could be used in network analysis process especially for 2D shortest route data. Network analysis for three-dimensional (3D) network is required when it involves navigation inside a multi-level building. Current Geographical Information System (GIS) is still not capable in performing shortest route network analysis for 3D data. The complexity of building and surroundings makes GIS users require a system that can manage the phenomenon in 3D environment. Therefore, it is the aim of this study to conduct a research about the Dijsktra’s algorithm implementation for shortest path calculation in 3D environment. Hereby, the Dijkstra’s algorithm is tested with the developed 3D navigation network inside the building model. The results from the network analysis will be shown by using 3D computer game engine (3D State) in the 3D spatial objects environment and navigation can be made inside the 3D environment (Virtual Reality) by simulating human movements. Real texture of the surroundings is incorporated into the navigation system to produce realistic 3D surroundings and to give more 3D effects for the 3D virtual navigation. ISI KANDUNGAN BAB 1 PERKARA MUKA SURAT PENGAKUAN ii DEDIKASI iii PENGHARGAAN iv ABSTRAK v ABSTRACT vi ISI KANDUNGAN vii SENARAI RAJAH xii SENARAI SINGKATAN xxi SENARAI LAMPIRAN xxii PENGENALAN 1.1 Latar Belakang 1 1.2 Penyataan Masalah 4 1.3 Tujuan Kajian 6 1.4 Objektif Kajian 7 1.5 Skop Kajian 7 1.6 Kepentingan Kajian 8 1.7 Metodologi Kajian 9 1.8 Struktur Ringkasan Tesis 11 2 KAJIAN LITERATUR 2.1 Pendahuluan Bab 13 2.2 Sistem Maklumat Geografi (GIS) 3 Dimensi 14 2.3 Objek Tiga Dimensi (3D) 16 2.4 Kemampuan Perisian GIS Semasa 18 2.5 Navigasi dan GIS 20 2.6 Algoritma Dijkstra 21 2.7 Pembangunan GIS 3D 22 2.7.1 Enjin Grafik 23 2.7.2 Enjin Grafik 3D State 25 2.8 Kajian Berkaitan 3 27 KONSEP ALGORITMA DIJKSTRA 3.1 Pendahuluan Bab 34 3.2 Aplikasi Algoritma Dijkstra 35 3.3 Algoritma Laluan Optima (Optimum Path Algorithm) 37 3.3.1 Teknik Penyelidikan Operasi 38 3.3.1.1 Masalah Laluan Terpendek 41 3.3.1.1.1 Acyclic Algorithm 42 3.3.1.1.2 Cyclic (Dijkstra Algorithm) 3.3.2 Analisa Rangkaian (Network Analysis) 3.4 Perincian Prosidur Algoritma Dijkstra 3.5 Pengimplementasian Algoritma Dijkstra Di Dalam Persekitaran 3D 45 47 51 54 4 REKA BENTUK SISTEM NAVIGASI 4.1 Pembangunan Analisis Rangkaian (3 Dimensi) 59 4.2 Fasa Permulaan 60 4.3 Fasa Pembangunan 61 4.3.1 Kajian Keperluan 63 4.3.2 Reka Bentuk Dalaman 64 4.3.3 Perkakasan Komputer 69 4.3.4 Model Bangunan 3D 70 4.3.4.1 Pendigitan Pelan Lantai 70 4.3.4.2 Reka Bentuk Model Bangunan 3D 4.3.4.3 Reka Bentuk Model Objek 3D 4.3.4.4 96 4.3.5 Jaringan Rangkaian 3D 99 4.3.6 Pengaturcaraan 102 4.3.6.1 Converter 103 4.3.6.2 Topology 105 4.3.6.3 Attribute 106 4.3.6.4 Aplikasi Utama 107 4.3.7 5 88 Tekstur Model Bangunan dan Objek-objek 3D 4.4 79 Pengujian Rumusan 108 108 ANALISIS DAN KEPUTUSAN KAJIAN 5.1 Pendahuluan Bab 110 5.2 Jaringan Rangkaian 3 Dimensi 112 5.3 Antara Muka Converter 112 5.4 5.5 5.6 6 5.3.1 Menu File 113 5.3.2 Menu Tools 116 5.3.3 Menu Help 118 Antara Muka Topology 119 5.4.1 Menu File 120 5.4.2 Menu Tools 123 5.4.3 Menu Help 124 Antara Muka Attribute 125 5.5.1 Menu File 126 5.5.2 Menu Edit 128 5.5.3 Menu Find 134 5.5.4 Menu Help 135 Paparan dan Penukaran Format bagi Model 3D Bangunan FKSG 137 5.7 Aplikasi Utama 139 5.8 Analisis Rangkaian 3D 160 5.9 Rumusan 169 KESIMPULAN DAN CADANGAN 6.1 Pendahuluan Bab 170 6.2 Kesimpulan dan Ulasan 170 6.3 Masalah yang Dihadapi 172 6.4 Cadangan 174 6.4.1 Algoritma Kajian 174 6.4.2 Enjin Grafik 3D 175 6.4.3 Integrasi Analisis Rangkaian 3D dengan Perisian-perisian GIS 175 6.4.4 Paparan Navigasi 3D Pada Alat-alat Mudah Alih RUJUKAN DAN BIBLIOGRAFI LAMPIRAN A - J 176 177 182 - 234 SENARAI RAJAH NO. RAJAH TAJUK MUKA SURAT 2.1 Contoh paparan ArcGlobe 19 2.2 Contoh paparan 3D menggunakan ArcGIS 20 3D Analyst 2.3 Contoh pengaturcaraan enjin grafik 26 menggunakan bahasa Visual Basic 2.4 Model 3 dimensi bandar Hamburg 2.5 Kawasan kajian (Florida Keys) bagi kajian 27 Agent-Based Modeling and Analysis of Hurricane Evacuation Procedures for the Florida Keys (Chen et al., 2005) 2.6 Struktur Evacuation Path (M. Meijers et al.,2005) 2.7 30 Jalan terpendek daripada balai bomba ke tempat bencana (Kwan et al., 2003) 3.1 29 32 Contoh rangkaian yang mengandungi 5 nod dan juga 8 arka. 39 3.2 Rangkaian bersambung 40 3.3 Rangkaian bersambung (Merentang) 41 3.4 Contoh rangkaian yang mewakili kedudukan bandar 43 3.5 Laluan terpendek daripada nod 1 ke nod 7 44 3.6 Contoh rangkaian bagi pengiraan algoritma Cyclic 45 3.7 Hasil pengiraan algoritma Cyclic 3.8 Contoh rangkaian bagi pengiraan algoritma 47 Dijkstra 48 3.9 Spanning Tree 50 3.10 Contoh rangkaian yang mengandungi 7 nod dan juga 9 arka 3.11 Hasil akhir pengiraan algoritma Dijkstra dalam bentuk Spanning Tree 3.12 54 Perbezaan kedudukan nod A (x 1, y1, z1) dan nod B (x2, y2, z 2) 4.1 51 57 Carta alir menunjukkan hasil bagi setiap dua fasa yang pertama bagi sesebuah sistem maklumat. Teks yang ditunjukkan dalam Italics merujuk kepada pengembalian ke fasa yang sebelumnya hanya jika perlu sahaja (Sumber: Steven, 2002). 4.2 Fasa Pembangunan dan aktiviti-aktiviti yang berkaitan dengannya 4.3 71 Proses mencantumkan imej menggunakan arahan Align 4.7 66 Imej yang diimbas dimasukkan sebagai rujukan bagi proses pendigitan. 4.6 65 Lakaran kasar paparan antara muka bagi navigasi 4.5 62 Carta alir ringkas aplikasi yang direka bentuk 4.4 60 72 Ketiga-tiga imej pelan lantai yang dicantumkan menjadi satu pelan bagi satu aras 4.8 Proses pendigitan pelan lantai (ketebalan dinding) 4.9 73 74 Hasil pendigitan entiti ruang bilik dan lantai bagi satu aras 75 4.10 Pembetulan kesalahan bagi keseluruhan hasil pendigitan dengan menggunakan arahan Drawing Cleanup 4.11 76 Proses penganjakkan dilakukan bagi data digital pelan 77 4.12 Proses penskalaan data digital pelan 78 4.13 Proses pembetulan herotan pada pelan lantai digital 79 4.14 Menu Select File to Import 80 4.15 Import Options (Geometry Tab) 81 4.16 Import Options (Layers Tab) 82 4.17 Import Options (Spline Rendering Tab) 82 4.18 Menu transform 83 4.19 Properties box (Selection) 84 4.20 Penggunaan element bagi reka bentuk 85 model 4.21 Fungsi Extrude bagi membentuk dinding bangunan 4.22 Dinding bangunan dihasilkan menggunakan fungsi Extrude 4.23 86 87 Dinding bangunan dan lantai yang telah siap dibentuk 88 4.24 Pilihan Stairs untuk mereka bentuk tangga 89 4.25 Reka bentuk tangga menggunakan fungsi reka bentuk U Type Stair yang tersedia di dalam perisian 4.26 90 Nilai parameter yang boleh diubah bagi menghasilkan sebuah tangga mengikut jenis tangga yang dikehendaki pengguna 91 4.27 Tangga yang telah siap direka bentuk 92 4.28 Koridor yang telah siap direka bentuk 92 4.29 Hasil reka bentuk ukiran yang terdapat pada bumbung bangunan FKSG 93 4.30 Hasil reka bentuk ukiran yang terdapat pada bumbung bangunan FKSG serta gabungan beberapa objek geometri yang lain bagi membentuk model bumbung untuk digunakan dengan model bangunan yang sebenar 4.31 94 Hasil keseluruhan reka bentuk ukiran dan bumbung bangunan FKSG 95 4.32 Pondok wakaf 95 4.33 Bangku kayu di Dataran Harmonis (C06) 96 4.34 Beberapa tekstur sebenar bagi objek spatial 3D yang telah disunting untuk memperbetulkan herotan, warna, dan sebagainya bagi kegunaan permodelan model 3D bangunan kajian 4.35 Contoh model aras bangunan yang dibuka di dalam CAD 4.36 98 100 Rangkaian 3D bagi aras 1 yang diwarnakan dengan warna ungu yang ditunjukkan secara pandangan Planimetri (atas) dan pandangan Perspektif (bawah) 4.37 Carta alir sub-sub aktiviti dalam aktiviti pengaturcaraan 4.38 101 102 Contoh bentuk data rangkaian yang disimpan di dalam komputer (AutoCAD Drawing) 104 4.39 Contoh rangkaian (asas) 105 4.40 Format Pangkalan Data MW 107 5.1 Carta alir bagi kedudukan kefungsian program-program yang dibina dan juga 5.2 aplikasi utama 111 Antara muka bagi program Converter 113 5.3 Fungsi Load yang digunakan untuk mencari dan membuka fail jaringan rangkaian 3D 5.4 114 Fail jaringan rangkaian 3D yang telah dibuka di dalam program 114 5.5 Fungsi Save As 115 5.6 Menu Tools 116 5.7 Analisis yang boleh dilakukan 116 5.8 View Coordinates 117 5.9 Build MWraw file 118 5.10 Fungsi About memaparkan maklumat berkaitan dengan tujuan Converter dibina 119 5.11 Antara muka Topology 120 5.12 Fungsi-fungsi yang terdapat pada menu File 121 5.13 Tetingkap pertanyaan bagi automasi pembinaan topologi 121 5.14 Tetingkap Open MWraw File 122 5.15 Tetingkap Save As fail MW Database (*.MW) 123 5.16 Menu Tools dan Sub Menu Tools 124 5.17 Tetingkap MW Database file 124 5.18 Tetingkap About bagi program Topology 124 5.19 Antara muka program Attribute 125 5.20 Sub-menu bagi menu File 127 5.21 Fungsi Load 127 5.22 Sub-menu pada menu Edit 128 5.23 Fungsi Start Editing tidak diaktifkan 129 5.24 Tetingkap Insert Attribute – Step 1 digunakan untuk memasukkan maklumat nama blok 5.25 129 Tetingkap Insert Attribute – Step 2 digunakan untuk memasukkan maklumat aras 130 5.26 Tetingkap Insert Attribute – Step 3 digunakan untuk memasukkan maklumat nombor bilik 5.27 130 Tetingkap Insert Attribute – Step 4 digunakan untuk memasukkan maklumat nama bilik 5.28 Contoh nod yang tiada atau pun tidak dimasukkan maklumat atribut 5.29 133 Tetingkap ini dipaparkan untuk menyimpan maklumat atribut yang telah dimasukkan 5.32 132 Tetingkap Save As dipaparkan apabila fungsi Stop Editing diklik 5.31 131 Contoh nod telah dimasukkan maklumat atribut 5.30 131 133 Sub-menu Search Phrase di bawah menu Find 134 5.33 Tetingkap Find 134 5.34 Hasil pencarian menggunakan fungsi Find 135 5.35 Fungsi sub menu About pada menu Help 136 5.36 Butang arahan untuk navigasi data 136 5.37 Paparan imej model 3D FKSG mengikut blok-blok 5.38 138 Paparan splash screen pada permulaan aplikasi 139 5.39 Antara muka utama aplikasi 140 5.40 Fungsi yang diklik akan bertukar warna tulisannya 141 5.41 Paparan bagi fungsi FKSG Base Plan 142 5.42 Cursor diarahkan ke tulisan C02 dan imej model 3D blok C02 dipaparkan 5.43 143 Paparan imej snapshot model 3D bagi fungsi 3D Screenshot 144 5.44 Butang navigasi bagi melihat imej-imej snapshot 144 5.45 Butang arahan Flythrough 145 5.46 Paparan fungsi arahan Flythrough 145 5.47 Paparan antara muka 3D Navigation 146 5.48 Konfigurasi pangkalan data bagi kegunaan aplikasi 5.49 Arahan Open digunakan untuk mencari fail rangkaian atau model 3D 5.50 147 148 Tetingkap Open File dipaparkan untuk mencari fail rangkaian 3D dan model spatial 3D 5.51 148 Arahan Save Setting diaktifkan selepas data yang baru disetkan di dalam paparan Database ini 5.52 149 Tetingkap informasi untuk menyatakan set data yang baru telah dimasukkan ke dalam aplikasi utama 149 5.53 Fungsi Shortest Path 150 5.54 Sebahagian nama-nama yang terdapat di dalam drop down list 5.55 Fungsi Search untuk mencari maklumat atribut secara filtering 5.56 5.59 152 Nombor bilik yang di’filter’kan berdasarkan nama blok dan aras 5.58 151 Aras yang di’filter’kan berdasarkan nama blok 5.57 151 153 Nama bilik yang di’filter’kan berdasarkan nama blok, aras dan nombor bilik 153 Fungsi Acquire pada paparan Search 154 5.60 Fungsi Acquire yang memindahkan maklumat pada paparan Search ke medan nama staff/bilik paparan Shortest Path 5.61 Amaran yang dipaparkan kerana syarat utama bagi fungsi Calculate tidak dipenuhi 5.62 154 155 Paparan statistik pengiraan algoritma Dijkstra 156 5.63 Arahan Navigate dan Cancel 158 5.64 Paparan Navigasi 3D 159 5.65 Paparan bagi fungsi About 160 5.66 Konfigurasi set data yang digunakan adalah penting sebelum melakukan analisis rangkaian 3D 5.67 161 Lokasi semasa disetkan Satellite Navigation Research Group (SNAG) dan lokasi destinasi disetkan Hydro I and Hydro II Lecture Room sebelum melakukan pengiraan analisis rangkaian 3D 5.68 162 Statistik pengiraan algoritma Dijkstra hasil daripada pengiraan laluan yang terpendek daripada bilik Satellite Navigation Research Group (SNAG) ke lokasi destinasi iaitu bilik Hydro I and Hydro II Lecture Room 5.69 Paparan graf hasil pengiraan algoritma Dijkstra 5.70 163 164 Lokasi awal disetkan di lokasi semasa yang ditetapkan pengguna pada permulaan analisis iaitu di bilik Satellite Navigation Research Group (SNAG) 5.71 165 Lokasi destinasi (Hydro I and Hydro II Lecture Room) akan ditandakan dengan OK bagi menunjukkan pengguna telah tiba ke lokasi destinasi 166 5.72 Anak panah yang terdapat pada papan kekunci 5.73 Tetingkap informasi mengenai maklumat asas navigasi 5.74 166 167 Peta 2D menunjukkan pandangan plan (Plan View) 168 SENARAI SINGKATAN PERKATAAN GIS Sistem Maklumat Geografi 2D Dua Dimensi 3D Tiga Dimensi 4D Empat Dimensi GIS 3D Sistem Maklumat Geografi Tiga Dimensi SDK Software Development Kit API Application Programming Interface VR Virtual Reality FKSG Fakulti Kejuruteraan dan Sains Geoinformasi UTM Universiti Teknologi Malaysia PIRR Photo realistic Interactive Real-Time Rendering SIS Spatial Information System GIERS GIS-based intelligent emergency response system EMIS Emergency management information systems CAD Computer Aided Design LOD Level of Details RSO Rectified Skew Orthomorphic SENARAI LAMPIRAN LAMPIRAN TAJUK A Pelan Lantai Bangunan Kajian B Tekstur yang Digunakan pada Model MUKA SURAT 182 Bangunan 3D Kajian 194 C Carta alir program Converter 199 D Contoh Pengaturcaraan Bagi Program Converter 200 E Carta alir program Topology 206 F Contoh Pengaturcaraan Bagi Program Topology 207 G Carta alir program Attribute 217 H Contoh Pengaturcaraan Bagi Program Attribute 218 I Contoh Pengaturcaraan Program Utama 233 J Carta alir program Aplikasi Utama (pengiraan laluan terpendek) 234 BAB 1 PENGENALAN 1.1 Latar Belakang Di antara keistimewaan Sistem Maklumat Geografi (GIS) ialah kemampuannya untuk melakukan analisis spatial terhadap entiti seperti poligon, garisan dan juga titik (polygon/line/point analysis). GIS juga mampu untuk melakukan pengiraan statistik berdasarkan entiti-entiti spatial yang terdapat di muka bumi (geografi). Selain itu, fungsi utama GIS yang lain ialah ianya dapat menghubungkan maklumat spatial dengan maklumat-maklumat bukan spatial (atribut). Ciri-ciri ini tidak boleh dilakukan oleh mana-mana sistem yang lain. Sebagai contoh, dengan menggunakan GIS, maklumat spatial seperti peta gunatanah dapat dihubungkan dengan maklumat-maklumat (rekod-rekod) yang berkaitan dengan peta gunatanah tersebut seperti jenis kegiatan yang dilakukan terhadap tanah tersebut, keluasan tanah, nombor lot, nama pemilik, perkadaran cukai yang ditetapkan dan sebagainya. Kemampuan GIS ialah ianya dapat mempercepatkan proses kerja/tugas manual yang pada sebelum ini memerlukan masa yang agak lama. GIS juga dapat menyediakan atau menyimpan maklumat-maklumat geografi dalam bentuk yang teratur supaya ianya lebih mudah difahami dan juga lebih mudah untuk dicapai. Namun begitu, apabila bentuk muka bumi menjadi semakin kompleks untuk diuruskan dan tambahan pula kemampuan teknologi berubah dari hari ke hari, keperluan terhadap GIS ini semakin meningkat. Binaan dan teknologi canggih seperti laluan jalanraya bertingkat, bangunan berkembar, laluan terowong bawah tanah dan perancangan bagi kawasan yang padat memerlukan kefungsian tambahan bagi GIS yang sedia ada. Terdapat juga beberapa usaha daripada sesetengah pihak dalam membangunkan fungsi atau pun aplikasi bagi menyelesaikan permasalahan tersebut. Akan tetapi, kebanyakan usaha bagi setiap permasalahan yang dilakukan adalah berdasarkan “task oriented”. Namun begitu, persoalan yang boleh ditanya ialah adakah pendekatan tersebut menyelesaikan permasalahan GIS dan memenuhi kehendak pengguna GIS secara menyeluruh? Analisis spatial merupakan salah satu kelebihan atau pun “tools package” yang hadir bersama-sama dengan GIS. Akan tetapi, telah dinyatakan sebelum ini, akibat daripada keperluan pengguna GIS yang semakin meningkat, berlaku satu evolusi yang menghendaki GIS mengendalikan data yang berasaskan 3 dimensi (3D). 3D di sini bermaksud data yang mempunyai 3 elemen asas koordinat iaitu x, y dan z di dalam maklumat spatialnya. Ketiga-tiga elemen ini hendaklah digunakan atau pun diaplikasikan ke dalam GIS sebagaimana ia digunakan di dalam dunia yang sebenar. Pengguna boleh melakukan sebarang pertanyaan dan juga analisis yang berkaitan terhadap ketiga-tiga elemen tersebut. Sebagai contoh, bagi kes jalanraya bertingkat, pengguna boleh memilih untuk melakukan analisis terhadap jalan yang berada di atas atau pun jalanraya yang terdapat di bahagian bawah. Ini tidak bermakna bahawa “tools package” yang hadir bersama-sama GIS untuk ketika ini tidak lengkap, akan tetapi perkara atau pun situasi seperti ini timbul akibat daripada reka bentuk objek spatial yang dibina semakin kompleks. Apa yang mampu dilakukan oleh pakej GIS yang sedia ada sekarang ialah analisis terhadap data yang berbentuk 2 dimensi (2D) sahaja. Terdapat juga beberapa “extension” tambahan yang dibina untuk digunakan bersama perisian-perisian GIS yang sedia ada untuk menganalisis data-data yang berasaskan 3D. Akan tetapi “extension” tersebut mempunyai limitasi-limitasi yang tertentu. Namun begitu menurut pendapat penyelidik-penyelidik GIS yang menyatakan bahawa kebanyakan kes yang berlaku sekarang ini, contohnya bagi kawasan bandar yang menggunakan GIS, evolusi ke arah objek 3D adalah sangat perlahan. Ini mungkin disebabkan oleh beberapa faktor. Di antaranya ialah cara pemikiran sesetengah pihak terhadap GIS 2D. Sebagai contoh, bagi data kadester; proses evolusi kepada 3D bagi data kadester 2D yang sedia ada adalah dengan kaedah menggunakan “extensions” untuk mewujudkan bentuk 3D bagi data kadester tersebut. Walaupun produk yang dihasilkan agak memuaskan, akan tetapi pendekatan yang dilakukan itu tidak lengkap dan juga terdapat had-had yang tertentu contohnya seperti analisis dalam persekitaran 3D itu sendiri. Oleh itu, apa yang paling kritikal di sini ialah analisis spatial 3D yang berfungsi sebagai salah satu “tool” bagi model 3D, lihat Billen et al (2001). Analisis spatial 3D merupakan sesuatu yang masih lagi di dalam peringkat kajian. Bagi memenuhi keperluan ini, pelbagai kajian atau perkara perlu diambil kira secara menyeluruh bagi melengkapkannya di dalam bidang GIS. Analisis spatial 2D yang sedia ada terbahagi kepada beberapa kategori. Contohnya analisis spatial yang asas seperti Buffer (penimbal), Join (cantum), dan Overlay (tindihan). Namun begitu terdapat juga analisis spatial yang lain seperti analisis permukaan (surface analysis) dan analisis rangkaian (network analysis). Bagi analisis rangkaian, di antara analisis yang dilakukan ialah pencarian laluan yang terpendek di antara dua lokasi. Contohnya seperti pencarian laluan yang terpendek/terbaik bagi pelancong untuk ke sesebuah restoran daripada hotel. Hasil daripada analisis seperti ini dapat membantu individu tersebut dalam melakukan navigasi dengan menjimatkan masa atau pun kos pengangkutan. Namun begitu, implementasi analisis pada persekitaran 3D adalah berbeza. Analisis rangkaian yang menggunakan rangkaian 2D bersama-sama dengan maklumat permukaan 3D (Digital Terrain Model) tidak melibatkan pengiraan analisis rangkaian 3D. Perbezaannya tidak ketara jika analisis tersebut masih menggunakan rangkaian 2D (data geografi 2D). Akan tetapi, bagi situasi bangunan bertingkat, pastinya rangkaian 3D perlu digunakan. Lazimnya, pengiraan yang dilakukan untuk mencari laluan terpendek/terbaik di dalam analisis rangkaian 2D menggunakan algoritma matematik yang khusus berdasarkan situasi yang terlibat. Di antara algoritma yang digunakan dan terbukti berkesan dalam pengiraan laluan terpendek/terbaik ialah algoritma Dijkstra, DKD, Graph Growth dan juga Genetic. Bagi mengaplikasikan algoritma-algoritma ini ke atas jaringan rangkaian 3D, kajian yang terperinci perlu dilakukan. Terdapat beberapa rumusan yang boleh dibuat daripada perbincangan yang telah dilakukan. Di antaranya ialah, GIS perlu menguruskan data 3D di masa yang mendatang. Pengguna kini semakin bijak, mereka menghendaki analisis-analisis yang boleh dilakukan terhadap data geografi 3D. Permintaan daripada pengguna GIS dan ditambah pula dengan rupa bentuk muka bumi dan binaan manusia yang semakin kompleks pada masa sekarang ini menyebabkan perlunya satu GIS yang dapat menyokong analisis 3D untuk membantu pengguna dalam melakukan tugastugas seharian. 1.2 Penyataan Masalah Lanjutan daripada perbincangan yang dilakukan di seksyen 1.1, dirumuskan bahawa perkara yang kritikal pada masa ini ialah di antaranya masih kurang analisisanalisis yang boleh dilakukan di dalam persekitaran GIS 3D. Kajian-kajian ke arah menghasilkan struktur analisis GIS 3D adalah perlu bagi memenuhi kehendak pengguna-pengguna GIS di masa akan datang. Dari segi pengimplementasian algoritma Dijkstra, kebanyakannya diimplementasikan terhadap permukaan 2D dan ini adalah berdasarkan kajian-kajian penyelidik sebelum ini (Cherkassy et al.,1991), (Zhan, 2001), (Eklund, 1993). Kemampuan algoritma Dijkstra dalam menyelesaikan permasalahan “shortest path” telah terbukti di dalam kajian-kajian terdahulu (Shad et al., 1998), (Sherlock et al., 1999), (Semanta et al., 2005). Namun begitu, kajian mengenai analisis terhadap permukaan 3D masih kurang dan perlu dijalankan penyelidikan dan kajian berkaitan. Beberapa kajian terdahulu mengenai GIS 3D telah pun dilakukan oleh beberapa penyelidik seperti Meijers et al. (2005), Kwan et al. (2003), dan Kirkby et al. (1996). Meijers et al. melakukan kajian mengenai struktur bagi bangunan bertingkat untuk diimplementasikan di dalam GIS yang berasaskan 3D supaya satu struktur yang piawai dapat dibina untuk proses “evacuation” bagi bangunan yang bertingkat. Kwan et al. pula melakukan kajian mengenai potensi untuk membina satu sistem kecemasan bagi bangunan bertingkat (kawasan mikro-spatial) secara real-time, dan Kirkby et al. mengkhususkan kajiannya terhadap pengimplementasian algoritma untuk mencari jalan terpendek di dalam persekitaran 3D bagi tujuan visualisasi (drive/flythrough). Di dalam kajian-kajian ini turut dinyatakan penggunaan algoritma Dijkstra untuk mencari “shortest route”. Kesemua kajian ini tertumpu kepada pembinaan seperti struktur laluan bagi proses “evacuation”, mengkaji potensi untuk mewujudkan sistem kecemasan bagi bangunan 3D dan bagi Kirkby et al. pengkhususan 3D hanyalah kepada tujuan navigasi kenderaan dan tidak tertumpu kepada bangunan bertingkat. Manakala, kajian mengenai algoritma Dijkstra khususnya kepada pengimplementasiannya kepada permasalahan bangunan bertingkat berdasarkan struktur dan model 3D adalah masih kurang dan perlu diberikan tumpuan. Berdasarkan daripada permasalahan dan cadangan tersebut, penekanan di dalam kajian tesis ini adalah untuk mengimplementasikan algoritma Dijkstra ini ke dalam jaringan di dalam bangunan bertingkat. Fungsi algoritma adalah untuk mencari laluan terpendek/terdekat (shortest route) dari satu lokasi ke lokasi yang lain (lokasi destinasi) dalam persekitaran 3D. Bagi tujuan paparan 3D, enjin komputer 3D (3D State) digunakan sebagai alat visualisasi dan navigasi 3D. Menurut Kirkby et al.(1996), kelebihan bagi pengimplementasian algoritma “shortest path” secara grafikal di dalam persekitaran 3D ialah ia memudahkan pemahaman pengguna terhadap hasil pengiraan “shortest path” tersebut dan seterusnya dengan adanya kajian lanjutan yang berkaitan mengenai kajian seperti ini akan menghasilkan senario model 3D yang lebih realistik bagi GIS. GIS sebenarnya memerlukan kajian-kajian lanjutan yang berkaitan dengan 3D. Kajian-kajian tersebut perlu merangkumi beberapa aspek penting, antaranya seperti permodelan data 3D, topologi 3D, pangkalan data 3D dan juga analisis terhadap data yang berbentuk 3D. Pendekatan analisis rangkaian terhadap persekitaran 3D di dalam tesis ini amat berguna bagi bidang-bidang yang tertentu seperti pengurusan bencana, pengurusan bangunan, dan juga navigasi-navigasi yang memerlukan maklumat 3D. Algoritma Dijkstra terbukti berjaya dari segi implementasinya terhadap data-data GIS yang berbentuk 2D. Oleh itu, kajian di dalam tesis ini menjurus kepada mengaplikasikan algortitma Dijkstra terhadap data yang berasaskan 3D. Analisis “shortest path” yang selama ini hanya dapat dilakukan terhadap data 2D, diimplementasikan terhadap data 3D dan seterusnya pengimplementasian tersebut akan diadaptasikan terhadap kawasan persekitaran model bangunan 3D. 1.3 Tujuan Kajian Tujuan kajian ini dijalankan adalah untuk mengimplementasikan algoritma Dijkstra ke atas jaringan rangkaian 3D di dalam bangunan. Seterusnya, enjin komputer 3D digunakan sebagai alat bagi tujuan navigasi dan paparan hasil pengiraan algoritma di dalam persekitaran 3D. 1.4 Objektif Kajian Berdasarkan tujuan kajian yang dikhususkan, beberapa objektif telah dikenal pasti, iaitu: i. Mengkaji keperluan algoritma Dijkstra dari segi implementasinya terhadap analisis rangkaian dalam persekitaran 3D, ii. Mengimplementasikan algoritma tersebut ke dalam persekitaran 3D dengan menggunakan enjin komputer 3D. 1.5 Skop Kajian Skop kajian merangkumi kawasan kajian, algoritma serta tumpuan utama analisis adalah seperti berikut: i. Berdasarkan cadangan kajian yang terdahulu, algoritma Dijkstra dipilih sebagai analisis rangkaian yang terlibat dalam kajian ini. Algoritma ini digunakan bertujuan untuk mengira jarak terpendek di antara dua lokasi di dalam persekitaran 3D. Ianya dipilih berdasarkan kemampuan pengiraannya berdasarkan jumlah nod yang terlibat dalam kajian. Penekanan diberikan terhadap kaedah pengimplementasian algoritma tersebut terhadap jaringan rangkaian 3D dengan menggunakan pendekatan GIS. ii. Model digital bangunan 3D yang digunakan adalah bangunan Fakulti Kejuruteraan dan Sains Geoinformasi, Universiti Teknologi Malaysia, Skudai Johor (Blok C02, C03, C04, C05 dan C06). iii. Jaringan rangkaian yang dibentuk adalah berdasarkan laluan navigasi yang terdapat di dalam bangunan kajian. Rangkaian yang dibina adalah rangkaian yang distruktur dan direka tanpa mengambil kira sebarang halangan (obstacle/barrier) atau pun faktor-faktor navigasi yang lain. Ini kerana, tujuan utama rangkaian yang dibina adalah untuk digunakan bersama algoritma kajian. iv. Bagi tujuan paparan 3D, enjin komputer 3D (3D State) digunakan sebagai alat visualisasi dan navigasi 3D. 1.6 Kepentingan Kajian Kajian ini bertujuan untuk memberikan beberapa sumbangan kepada bidang GIS. Ia merupakan salah satu kajian awal dalam mewujudkan GIS berbentuk 3D, mengurus dan menganalisis data 3D. Kajian ini boleh dijadikan rujukan awal kepada penyelidik-penyelidik yang lain bagi mewujudkan GIS yang lebih baik, terutamanya bagi aspek analisis seperti analisis rangkaian. Kajian ini juga dijalankan berdasarkan objek 3D sebenar yang mana keberkesanan penggunaan algoritma dapat diuji untuk kajian lanjutan. Kajian ini juga dapat membantu penyelidikan yang berkaitan pengurusan bencana (disaster management) terutamanya dalam persekitaran bangunan. Ini kerana bagi bangunan bertingkat proses “evacuation” adalah kriteria yang utama dan perlu dilakukan dengan pantas dan efisyen. Oleh kerana kajian ini adalah untuk proses navigasi dalam bangunan bertingkat, maka ia bersesuaian bagi navigasi kecemasan di dalam bangunan bertingkat ketika berlaku sebarang bencana seperti kebakaran, gempa bumi dan sebagainya. Algoritma Dijkstra pula terkenal sebagai salah satu kaedah penyelesaian bagi permasalahan di dalam bidang sains komputer. Terdapat tiga faktor utama yang menjadikan ia terkenal di dalam bidang tersebut: i. Pencipta algoritma ini ialah seorang saintis komputer, ii. Ia memerlukan struktur data yang berlainan (special data), iii. Terdapat persaingan antara operation research (OR/MS) untuk mengorientasikan algoritma yang menyelesaikan masalah bagi laluan terpendek tersebut. Namun begitu algoritma ini menjadi semakin terkenal digunakan di dalam bidang-bidang aplikasi praktikal lain yang memerlukan kemampuan algoritma ini. Contohnya bidang GIS sendiri memerlukan online computing dan penunjuk arah di dalam navigasi. Pihak Microsoft juga mempunyai pasukan penyelidik yang membuat kajian mengenai shortest path ini (Dijkstra’s Algorithm, 2005). Implementasi algoritma Dijkstra kebanyakannya dibuat terhadap permukaan 2D. Oleh itu, kajian di dalam tesis ini adalah untuk mengimplementasikan algoritma Dijkstra ke dalam dunia GIS sebenar untuk mencari laluan terpendek/terdekat (shortest route) dari satu lokasi ke lokasi yang lain (lokasi destinasi) bagi objek yang berada di dalam persekitaran 3D. Tambahan pula, kajian ini membuat percubaan untuk menggunakan algoritma ini ke dalam persekitaran 3D di mana ianya adalah satu cabaran baru bagi algoritma ini sendiri. Penggunaan algoritma ini terhadap jaringan jalanraya sebenar, telah terbukti adalah di antara yang terpantas, Zhan (2001). 1.7 Metodologi Kajian Bagi mencapai tujuan dan objektif kajian berdasarkan skop yang telah dinyatakan, satu pendekatan atau metodologi kajian yang baik dan tepat amat diperlukan. Sehubungan dengan itu, Rajah 1.1 menunjukkan carta alir perlaksanaan kajian dalam tesis ini. Ianya menyatakan pemahaman masalah, penetapan tujuan dan objektif kajian, metodologi, keputusan dan analisis serta kesimpulan kajian. Carian literatur dan penyertaan seminar Penemuan Isu dan Masalah Struktur analisa rangkaian dan navigasi dalam persekitaran 3D Penanda aras kajian Matlamat dan Objektif Kajian Pembentukan hala tuju kajian Kajian Literatur Metodologi Kajian Kajian mengenai prosedur algoritma: 1. Steps 2. Iterations Algoritma Dijkstra struktur jaringan Kemampuan/prestasi algoritma GIS Kajian terhadap struktur penyimpanan data jaringan Struktur simpanan maklumat dibina Integrasi enjin 3D dan model 3D dikaji Kesesuaian SDK Pengoptimaan jumlah nod dan poligon bagi model 3D GIS dan Algoritma Dijkstra Kaedah Implementasi Algoritma Struktur Data Jaringan struktur model bangunan Model 3D Struktur Model 3D Algoritma Dijkstra (3D) Kriteria bagi pengimplementasian algoritma pada jaringan 3D disenaraikan Keserasian enjin 3D diuji Dijkstra dan Elemen 3D Digunakan semasa pengiraan algoritma Struktur MW Pengubahsuaian semula Modifikasi Algoritma Algoritma yang diubahsuai diuji bersama dengan pangkalan data jaringan dan juga model 3D bangunan Pengujian Algoritma Rangkaian Jaringan 3D Converter Topology Attribute Statistik pengiraan dan navigasi 3D Model 3D Kajian Pembangunan Data Spatial dan Atribut Pembangunan Aplikasi Utama Keputus an dan Analisis Kajian Kesimpulan Rajah 1.1: Carta alir perlaksanaan kajian 1.8 Struktur Penulisan Tesis Penulisan kajian ini dibahagikan kepada enam bab. Kandungan rumusan perbincangan bab-bab adalah seperti berikut: a) Bab satu Bab ini berkaitan dengan pengenalan terhadap kajian yang menghuraikan permasalahan kajian, tujuan dan objektif kajian, skop kajian dan juga kepentingan kajian. Penerangan metodologi dan hasil akhir kajian turut dinyatakan secara umum di dalam bab ini b) Bab dua Bab kedua membincangkan beberapa kajian literatur yang dilaksanakan sepanjang kajian. Permasalahan dalam kajian yang berkaitan dikenal pasti dan penelitian terhadap struktur jaringan rangkaian 3D yang sedia ada dirujuk bagi tujuan implementasi navigasi di dalam bangunan kajian. Enjin 3D yang digunakan sebagai alat paparan navigasi 3D diterangkan dalam bab ini bagi melihat ciri-ciri dan prestasi enjin tersebut. Selain itu, cadangan seperti penggunaan algoritma yang sesuai berdasarkan jenis jaringan rangkaian turut dititik beratkan di dalam bab ini. c) Bab tiga Bab ini tertumpu kepada pemahaman algoritma Dijkstra dan kaedah pengimplementasian algoritma tersebut terhadap jaringan rangkaian 3D. Ciri-ciri algoritma diterangkan bagi melihat kebolehlaksanaannya ke atas jaringan rangkaian sebenar. Perbincangan mengenai cara penyelesaian laluan terpendek dalam beberapa bidang (teknik penyelidikan operasi dan analisa rangkaian) juga diterangkan di dalam bab ini. d) Bab empat Bab keempat menerangkan mengenai persediaan yang terlibat sebelum kiraan algoritma dan navigasi. Contohnya seperti kajian keperluan, reka bentuk aplikasi, penyediaan model 3D bangunan dan jaringan rangkaian 3D kajian dan juga pengaturcaraan berkaitan. Pengaturcaraan dibuat bagi mendapatkan maklumat daripada data jaringan rangkaian dan seterusnya kiraan algoritma Dijkstra itu sendiri. e) Bab lima Bab ini menghuraikan keputusan dan analisis kajian. Pengaturcaraan yang dibincangkan pada bab keempat dijelaskan dalam bab ini dan hasilnya ditunjukkan mengikut kefungsiannya. Hasil akhir kajian iaitu pengiraan laluan terpendek terhadap jaringan rangkaian 3D dan juga navigasi 3D ditunjukkan pada aplikasi utama kajian yang dibangunkan. f) Bab enam Bab terakhir berkaitan dengan kesimpulan dan cadangan kajian. Permasalahan yang dihadapi dalam kajian dinyatakan bagi menjadi justifikasi dan juga penambah baikan terhadap kajian-kajian berkaitan pada masa akan datang. Ini kerana, kajian tesis ini merupakan kajian awal terhadap kajian-kajian lanjutan yang berkaitan dengan analisis rangkaian dan navigasi dalam persekitaran 3D. BAB 2 KAJIAN LITERATUR 2.1 Pendahuluan Bab Bab ini menerangkan dan membincangkan kajian-kajian terdahulu yang berkaitan dengan kajian. Ini bertujuan untuk mendapatkan gambaran senario sebenar penyelidikan yang telah dijalankan serta melihat contoh-contoh kaedah perlaksanaan kajian-kajian tersebut. Tambahan pula, beberapa isu dibincangkan untuk melihat permasalahan yang timbul sepanjang kajian tersebut. Selain itu, pengertian GIS secara umum dan juga maksud GIS 3D dibincangkan bagi tujuan mendapatkan gambaran awal mengenai bidang kajian. Perbincangan lain seperti perisian-perisian yang digunakan di dalam kajian dan mengapa ianya dipilih turut dibincangkan. Walau bagaimana pun, algoritma laluan terpendek yang digunakan dalam kajian iaitu algoritma Dijkstra juga dibincangkan secara am dari aspek kefungsian dan peranannya. Perincian mengenai algoritma Dijkstra dibincangkan pada bab seterusnya iaitu bab empat. Di samping itu, fakta dan maklumat sokongan kajian dikumpul dan kemudiannya dijadikan sumber rujukan bagi kajian yang dilakukan. 2.2 Sistem Maklumat Geografi (GIS) 3 Dimensi GIS yang sedia ada mampu memberikan persembahan peta 2D yang menarik bagi bentuk muka bumi. Namun begitu persembahan peta yang berbentuk 2D masih tidak mencukupi. Ini dapat dilihat dari aspek visualisasi 3D. Contohnya visualisasi ini amat diperlukan dalam proses perancangan pembangunan bandar, pembinaan jalanraya yang bertingkat, dan juga navigasi. Terdapat juga beberapa proses yang tidak dinyatakan di sini yang memerlukan elemen dimensi ke tiga dalam GIS. Permintaan penggunaan 3D ini wujud daripada pengguna GIS sendiri. Memandangkan bentuk muka bumi serta binaan manusia yang semakin kompleks untuk diuruskan maka permintaan-permintaan seperti ini terhasil untuk memenuhi kehendak pengguna GIS. Walaupun permintaan wujud, akan tetapi untuk meletakkan satu lagi dimensi di dalam GIS adalah bukan perkara yang mudah dan cepat dari segi masa untuk menghasilkannya. Ini kerana akan wujud beberapa komplikasi dari segi permasalahan spatial dan ia memerlukan permodelan geometri yang lebih terperinci termasuklah juga perhubungan antara entiti-entiti spatial itu sendiri (Chen, 2005). Bagi mewujudkan GIS yang berunsurkan 3D, pelbagai kajian terperinci perlu dilakukan. Memandangkan GIS sebelum ini mampu menguruskan data spatial 2D dengan baik, maka rujukan akan dibuat secara terperinci dari segi pendekatan pengimplementasian GIS terhadap data spatial 2D. Sudah pasti akan wujud perbezaan yang ketara dari segi pendekatan mahupun visualisasi 3D. Akan tetapi rujukan terhadap pengurusan data spatial 2D adalah merupakan landasan atau pun asas yang terbaik. Penelitian terhadap skop 3D adalah penting sebagai permulaan. Terdapat satu kajian yang cuba menghubungkan antara GIS 3D dengan Virtual Reality Environment (VR) (Verbree et. al., 1999). Kelebihan VR ialah ianya membolehkan pengguna untuk memvisualisasikan data 3D. Penyelidikan tersebut mencadangkan pendekatan 3 multi-view berdasarkan 3 jenis visualisasi iaitu plan view (2D), model view (2.5D) dan world view (3D). Kriteria-kriteria seperti jenis model, pandangan visualisasi, jenis navigasi, proses selection, manipulasi dan analisis bagi setiap view dinyatakan. Bagi view yang berbeza, setiap kriteria yang diambil kira juga berbeza-beza. Sebagai contoh, analisis bagi pandangan plan view ialah Buffer, Overlay dan Network Proximity. Bagi Model View pula, analisis yang boleh dilakukan ialah Line of Sight dan Volume Proximity (3D). Akhir sekali bagi World View, analisis yang terlibat hanya Sound Sight dan juga proses Shadow. Kesemua ini merupakan satu usaha kumpulan penyelidik untuk mencipta GIS 3D dengan menggunakan VR yang dinamakan Karma VI. Ini adalah penting bagi permulaan GIS 3D untuk menetapkan satu piawai bagi paparan data yang berbeza mengikut jenis pandangan (view) yang digunakan di dalam persekitaran 3D. Walaupun wujud permintaan untuk GIS 3D ini, akan tetapi banyak perkara perlu difikirkan dan dikaji sebelum menghasilkan apa yang dikatakan GIS 3D ini. Memandangkan kajian-kajian terhadap GIS 3D ini masih giat dibuat, namun ia masih belum mencukupi untuk mewujudkan GIS 3D yang boleh memuaskan kehendak kesemua pengguna GIS. Setakat ini apa yang berjaya dilakukan ialah pengimplementasian GIS 3D terhadap sistem/aplikasi yang hendak dibina. GIS 3D yang dihasilkan hanya berorientasikan kepada tujuan ia dibina dan bukanlah untuk kegunaan pengguna GIS secara menyeluruh. Contohnya jika GIS 3D yang dibina adalah untuk perancangan pembangunan bandar, maka ia tidak boleh digunakan bagi sistem/aplikasi lain seperti pengawalan alam sekitar mahupun proses perlombongan (3D mining). GIS 3D yang dibina bukan untuk penggunaan operasi 3D yang menyeluruh akan tetapi hanya berorientasikan kepada tujuan-tujuan tertentu sahaja. 2.3 Objek Tiga Dimensi (3D) Jika dirujuk kepada definisinya, objek dua dimensi (2D) bermaksud objek yang dibina berasaskan 2 paksi (x dan y, tinggi dan lebar, lajur dan baris dan sebagainya). Struktur 3D juga kebiasaanya digunakan untuk mensimulasikan imej 3D pada skrin. GIS menyimpan maklumat geografi sebagai satu koleksi lapisan tematik yang dihubungkan bersama-sama. Ia nampak mudah tetapi sebenarnya terbukti berkesan dan berkemampuan untuk menyelesaikan pelbagai permasalahan geografi. Persembahannya yang ringkas iaitu dengan hanya berdasarkan lapisan-lapisan tematik yang digunakan bersama-sama membenarkan pengguna untuk memahami perhubungan antara objek-objek spatial. Kejayaan pendekatan GIS ini dapat dilihat di serata dunia berdasarkan pelbagai aplikasi dan sistem yang dibangunkan untuk menguruskan maklumat geografi. Aktiviti GIS kebanyakannya menggunakan data geografi 2D sama ada data yang terdapat pada cetakan kertas (peta topografi) mahupun data secara digital (peta digital) yang sedia ada. Walau bagaimana pun, data geografi 2D tersebut tetap dalam bentuk 3D di dunia yang sebenar. Kajian juga menunjukkan kebanyakan aplikasi yang berasaskan 2D menunjukkan kemampuan yang terhad atau tidak mencukupi apabila membabitkan analisis ruang 3D. Maka berlaku peralihan kepada GIS 3D. Sesetengah pengguna GIS hanya melakukan projeksi terhadap data 2D untuk menjadikannya seakan-akan menyerupai objek 3D. Objek 3D yang dicipta daripada projeksi objek 2D sebenarnya akan kehilangan beberapa maklumat penting yang mana ia akan menyukarkan pengguna untuk memahami, menganalisis dan menilai keadaan persekitaran untuk sebarang aktiviti manusia. Terdapat pelbagai aplikasi yang cuba untuk membina alat untuk memodel, menyimpan, menganalisis dan memvisualisasikan data-data 3D dengan cara yang efektif. Antara bidang yang mempunyai permintaan terhadap pengurusan data 3D ialah seperti pembangunan bandar, perancangan lanskap, telekomunikasi, harta tanah, kadester, pembinaan jalanraya/landasan keretapi/bangunan, pengurusan utiliti, perniagaan dan juga pelancongan (Zlatanova, 2002). Akan tetapi jika dilihat daripada pihak vendor pula, keadaannya adalah sama sekali berbeza. Vendor bertungkus lumus untuk menghasilkan fungsi-fungsi tambahan bagi perisian mereka. Akan tetapi apa yang kurangnya ialah aspek pengurusan data 3D dan juga kekurangan dari segi kefungsian yang diperlukan bagi aplikasi yang pelbagai. Perisian-perisian tersebut sebenarnya bagus dan baik untuk penggunaan dari segi visualisasi data 3D dan juga untuk analisis permukaan. Tetapi model-model yang digunakan sebenarnya masih dalam keadaan 2D yang mana elemen dimensi ketiganya masih lagi disimpan sebagai atribut. Namun begitu, peralihan teknologi yang begitu cepat akan dapat memperkembangkan lagi bidang GIS 3D ini pada masa yang akan datang. Model 3D yang berasaskan realiti banyak menerima perhatian dari pelbagai perspektif, di antaranya ialah 3D data capturing, 3D visualization dan 3D data modeling and management (Nebiker, 2003): 3D Data Capture Pelbagai kajian telah pun dilakukan dan banyak kemajuan telah berlaku dalam bidang ini. Antaranya ialah kaedah pengumpulan data seperti pembinaan model permukaan secara automasi daripada imej foto udara atau pun imbasan laser. Projekprojek yang masih dijalankan kebanyakannya menjurus kepada integrasi multipenderiaan dalam proses untuk meningkatkan ketepatan data 3D. 3D Geovisualization Terdapat beberapa kemajuan melibatkan model bandar dan lanskap dari segi visualisasi. Perisian-perisian dan juga grafik 3D yang baru dan canggih yang ada pada komputer peribadi membantu dalam 3D Geovisualization ini. Antara pembangunan yang sedang dijalankan ialah untuk memaparkan model 3D bagi sebuah bandar besar (bangunan 3D dalam kuantiti yang banyak) pada alat-alat mudah alih (mobile devices). 3D Data Modeling and Management Sejak beberapa tahun yang lalu, dapat dilihat pelbagai usaha dijalankan dalam bidang permodelan dan pengurusan objek geospatial 3D. Sesetengah daripadanya memfokuskan kepada model 3D yang kompleks sebagai kajian awal terhadap persekitaran perhubungan DBMS. Antara projek-projek yang sedang dijalankan ialah untuk menggunakan konsep object relational bagi isu-isu yang berkaitan dengan topologi. 2.4 Kemampuan Perisian GIS Semasa Terdapat beberapa vendor GIS yang mempunyai produk/perisian yang mampu menyokong beberapa aplikasi untuk tujuan 3D. Kebanyakannya menjurus kepada proses navigasi sahaja (Abdul Rahman, 2005). Antara vendor tersebut ialah ESRI, ERDAS, Intergraph, dan PCIGEOMATICS yang mana vendor-vendor ini mempunyai pasaran yang luas di antara pengguna-pengguna GIS (Zlatanova et. al, 2002). Antara vendor yang aktif dan juga mempunyai pasaran yang luas di antara pengguna-pengguna GIS dan juga pengguna di Malaysia ialah ESRI. Produk terbarunya ialah ArcGIS 9.2 yang mana ia mempunyai beberapa kemampuan untuk memanipulasi data-data geografi 2D menjadi 3D dan seterusnya digunakan untuk tujuan visualisasi. ArcGlobe (rujuk Rajah 2.1) merupakan sebahagian daripada ArcGIS 3D Analyst extension. Ia menyediakan paparan interaktif maklumat geografi. Seperti ArcMap (ArcGIS), ArcGlobe juga menggunakan data GIS, memaparkan maklumat yang terdapat di dalam geodatabase dan juga format data GIS yang mampu disokongnya (ESRI, 2005). ArcGlobe mempunyai paparan maklumat geografi 3D yang dinamik. Ia juga membenarkan data geografi dipaparkan hanya apabila berada pada skala yang sepatutnya. Rajah 2.1: Contoh Paparan ArcGlobe (Sumber: http://www.esri.com/software/arcgis/extensions/3danalyst/index.html) Bagi ArcGIS Desktop, terdapat beberapa pilihan tambahan atau pun extensions yang ditawarkan oleh ESRI. Antaranya ialah ArcGIS 3D Analyst (Rajah 2.2). ArcGIS 3D Analyst menawarkan pengguna fungsi visualisasi dan analisis data permukaan yang efektif. Pengguna boleh melihat maklumat permukaan (contohnya permukaan tanah) daripada pelbagai titik pandangan (multiple viewpoints), membuat pertanyaan terhadap data permukaan tersebut, menentukan objek apa yang patut atau pun yang dapat dilihat daripada tempat pandangan dan membenarkan imej raster ditampal (drape) pada data permukaan tersebut. Di antara tools yang ada dalam pakej ArcGIS 3D Analyst untuk 3D ialah seperti cut and fill (potong dan timbus), line of sight (laluan pandangan) dan juga terrain modelling (permodelan muka bumi). Untuk menjadikan ia lebih realistik lagi, ia juga boleh menggunakan simbol bagi objekobjek 3D. Rajah 2.2: Contoh Paparan 3D menggunakan ArcGIS 3D Analyst (Sumber: http://www.arcdata.cz/img/2004/arcglobe.jpg) 2.5 Navigasi dan GIS Navigasi diaplikasikan dalam pelbagai jenis aplikasi. Di antaranya ialah seperti navigasi kecemasan, yang membabitkan kes-kes seperti bencana alam, navigasi ambulans, bomba mahupun polis yang memerlukan maklumat tertentu bagi membantu mengurangkan kesan bencana yang berlaku. Selain itu, terdapat juga navigasi kenderaan yang tidak melibatkan proses kecemasan seperti navigasi untuk mencari arah atau pun tempat yang dituju. Navigasi kapal di lautan boleh juga di ambil kira, cuma pendekatannya bukanlah seperti di daratan tetapi pemetaan navigasi tersebut adalah di lautan yang tidak mempunyai limitasi seperti di daratan. Apabila dihubungkan GIS dengan navigasi, pelbagai aplikasi dibangunkan untuk mencapai tujuan yang diperkatakan. Contohnya bidang Location Based Services (LBS) yang agak baru. LBS berkemampuan untuk menyokong aplikasi berkaitan navigasi. Contohnya seperti navigasi daripada satu lokasi ke lokasi destinasi. Teknologi Global Positioning System (GPS) yang diintegrasikan bersama LBS berfungsi sebagai alat penentu kedudukan pengguna. Ini menggalakkan lagi penggunaan LBS dalam kehidupan seharian. Justeru itu, navigasi dengan menggunakan GIS dipilih kerana berdasarkan kelebihan dan kemampuan GIS dalam menguruskan data geografi. Perbincangan sebelum ini banyak menyentuh kepada navigasi-navigasi yang memerlukan pemetaan 2D. Bagaimana pula dengan navigasi-navigasi 3D? Navigasi di dalam bangunan bertingkat memerlukan pendekatan yang berlainan kerana persekitaran yang diperlukan adalah dalam 3D (termasuklah jaringan rangkaian 3D). Begitu juga navigasi yang terlibat di dalam simulasi perancangan bandar, yang memerlukan simulasi/navigasi bagi tujuan membuat perancangan dan pembangunan sesebuah bandar itu. Bagi navigasi 2D, berdasarkan kajian-kajian yang terdahulu memang banyak pengimplementasian telah pun dilakukan dan juga GIS berjaya menguruskan analisis-analisis yang melibatkan analisa rangkaian 2D. Akan tetapi bagi navigasi 3D yang agak baru dalam bidang GIS, masih belum banyak aplikasi dibangunkan dan kebanyakannya adalah masih di dalam peringkat kajian. 2.6 Algoritma Dijkstra Algoritma Dijkstra merupakan algoritma yang dicipta oleh seorang professor berbangsa Jerman yang bernama Edsger W. Dijkstra untuk menyelesaikan masalah mencari laluan yang terpendek dari satu titik di dalam graf matematik (mathematical graf) untuk ke titik yang lain atau pun titik destinasinya (Wikipedia, 2005). Algoritma ini digunakan secara meluas dalam bidang matematik (graf). Contoh penggunaannya seperti bandar-bandar diwakilkan sebagai titik di dalam graf. Manakala pemberat di dalam graf tersebut pula ialah jarak antara bandar-bandar tersebut yang mana setiap bandar tersebut dihubungkan/berhubung dengan bandarbandar lain dengan jalanraya masing-masing. Kegunaan algoritma Dijkstra ini terletak pada kemampuannya untuk mencari shortest route diantara dua bandar berpandukan jalanraya yang sedia ada. Terdapat banyak kajian yang melihat kepada prestasi algoritma Dijkstra. Salah satu kajian mengenai algoritma Dijkstra adalah oleh Shad et al. (1998). Kajian ini membuat perbandingan antara algoritma pengiraan jalan terpendek di dalam GIS. Terdapat pelbagai algoritma yang digunakan untuk mencari best route, least cost, atau pun shortest path. Beberapa algoritma dipilih di dalam kajian ini seperti Dijkstra’s Algorithm, Graph Growth Algorithm dan DKD Algortihm. Ujian tersebut dilakukan terhadap beberapa peta yang mempunyai Level Of Detail (LOD) yang berbeza (jumlah nod berbeza). Merujuk kepada kajian tersebut, hasil kajiannya menunjukkan perbezaan mengikut situasi-situasi yang telah ditetapkan (one to one, one to all dan all to all). Daripada kajian perbandingan tersebut, bagi situasi one to one, jumlah nod yang kurang atau sama dengan 2000, pengimplementasian algoritma yang terbaik ialah algoritma Dijkstra. Namun begitu, keputusan algoritma yang terbaik untuk digunakan ke atas rangkaian 3D masih tidak boleh lagi ditetapkan kerana tiada lagi kajian yang dibuat untuk dibuat perbandingan. Penerangan mengenai algoritma Dijsktra secara terperinci akan dibincangkan di dalam Bab 3. 2.7 Pembangunan GIS 3D Bagi pembangunan GIS ke arah 3D, pelbagai pendapat diutarakan oleh penyelidik-penyelidik mengenai kaedah dalam mewujudkan satu GIS secara menyeluruh bagi menyokong data 3D. Pelbagai kriteria perlu diambil kira sebelum wujudnya GIS 3D yang sempurna. Di antaranya ialah pembangunan data 3D dan permodelan data 3D. Kajian secara komprehensif adalah perlu bagi mengkaji struktur penyimpanan data 3D dalam GIS. Ini kerana bagi sistem pangkalan data GIS semasa, ianya hanya mampu menyokong data 2D sahaja. Kajian mengenai permodelan data spatial 3D adalah perlu kerana geometri bagi entiti-entiti spatial perlu dikaji sebelum diaplikasikan pada sistem GIS. Terdapat pelbagai kaedah untuk melakukan permodelan 3D. Namun begitu tiada kajian dibuat untuk mencari model yang terbaik untuk diimplementasikan dalam GIS dengan mengambil kira faktor-faktor seperti pengstoran data, LOD dan lain-lain. Di dalam kajian ini enjin grafik digunakan sebagai alat untuk memaparkan objek spatial di dalam persekitaran 3D. Perbincangan seterusnya adalah mengenai enjin grafik yang digunakan. 2.7.1 Enjin Grafik Beberapa faktor dikenalpasti mengenai mengapa perlunya penggunaan enjin grafik yang ada di pasaran jika dibandingkan dengan membina enjin grafik sendiri bagi membangunkan sesebuah aplikasi atau sistem. Faktor-faktor yang dikenal pasti ialah perkakasan dan perisian, masa pembangunan, kit pembangunan perisian (SDK) dan juga tumpuan terhadap aplikasi utama. Perkakasan dan perisian komputer sering berubah terutamanya bagi 3D accelerator dan juga API (Application Programming Interface). Produk baru sering diperkenalkan, antaranya seperti MiniGL Out, ICD In, DirectX 9.0 Out, Direct9.1 In, Glide2x Out, Glide 3x In, OpenGL 1.2 1.1 dan lain-lain. Pengujian bagi setiap kod pada setiap 3D accelerator adalah rumit dan memakan masa yang lama dan masa yang diperlukan untuk menghasilkan aplikasi utama terpaksa dikurangkan. Pada masa enjin grafik dan aplikasi siap dibina, suasana teknologi industri komputer mungkin sudah berubah. Oleh itu, kumpulan yang khusus pada penghasilan enjin grafik adalah diperlukan. Manakala kumpulan pembangunan aplikasi pula menumpukan perhatian kepada penghasilan aplikasi utama. Oleh sebab itu, enjin grafik diperlukan bagi menyokong aplikasi yang dibuat dan juga ia dapat menjimatkan masa dalam proses pembangunan aplikasi. Enjin grafik 3D yang baik tidak perlu menunjukkan pengaturcaraan 3D API yang tidak mesra pengguna kepada pengguna. Dalam pada masa yang sama, jika ianya menggunakan antara muka yang baik, enjin tersebut sepatutnya tidak mengurangkan prestasi pemprosesan. Selain itu, untuk menjadi seseorang pakar bagi satu API sahaja memakan masa yang lama. Dengan menggunakan enjin grafik, pengguna dapat membuat program utama di peringkat yang lebih tinggi. Seseorang pakar di dalam 3D API tetap perlu membina sebuah enjin grafik untuk memaparkan objek 3D. Pembinaan sebuah enjin grafik yang baru memerlukan masa sedangkan terdapat pelbagai enjin grafik yang baik telah dibina oleh organisasi lain yang tugasnya khusus kepada penghasilan enjin grafik sahaja. Ini kerana hasilnya adalah sama bagi kedua-dua enjin cuma masa yang lebih diperlukan untuk enjin grafik yang dihasilkan sendiri. Dari aspek prestasi, enjin grafik yang datang dalam satu pakej dengan perkakasan API tidak menunjukkan prestasi yang baik. Sebagai contoh, enjin Direct3D Retained Mode adalah agak lemah, dan tidak mampu untuk menyokong persekitaran 3D yang luas. Perkara lain mengapa enjin grafik dipilih ialah tools yang disediakan bersama dengan enjin berkenaan. Kit pembangunan perisian (SDK) enjin 3D yang baik hadir bersama dengan tools untuk membantu proses pembangunan sistem. GUI-based tools boleh mengurangkan masa pembangunan secara menyeluruh dan kerja-kerja pengaturcaraan dapat diganti dengan operasi penggunaan tetikus seperti drag and drop. Bagi enjin yang mempunyai SDK yang tidak lengkap, contohnya seperti menggunakan enjin 3D daripada vendor X, World Builder (bagi tujuan permodelan persekitaran 3D) daripada vendor Y dan terrain generation daripada vendor Z, maka pembina aplikasi akan banyak menghabiskan masa pada proses import/export fail yang mengakibatkan hasil yang tidak diingini. Contohnya model yang dibina daripada 3DS (3D Studio MAX) akan nampak berbeza dalam format DirectX. 2.7.2 Enjin Grafik 3DState Terdapat pelbagai enjin grafik di pasaran pada masa kini. Bagi tujuan kajian ini, 3D State dipilih sebagai enjin grafik untuk memaparkan objek spatial 3D di dalam analisis rangkaian. Beberapa ciri enjin ini menepati bagi tujuan kajian. Faktor-faktor yang dikenalpasti ialah prestasi enjin, pengaturcaraan enjin, multi-tasking dan teknologi enjin. Enjin ini dipilih kerana kelebihannya seperti prestasi nisbah high frame per second, kualiti grafik dan juga kesan khasnya. Enjin ini mampu memproses objek persekitaran 3D bagi kawasan yang luas dengan menggunakan 3D accelerator card. Selain daripada itu, enjin ini menggunakan state-of-the-art algorithms and techniques termasuklah teknologi PIRR (Photo realistic Interactive Real- Time Rendering). Hasilnya adalah lebih prestasi pada kelajuan frame per second dan kualiti imej berbanding dengan enjin yang lain. SDK enjin ini membenarkan pengguna untuk menambah sebarang jenis aplikasi bagi mewujudkan satu suasana 3D yang lengkap. Cara menggunakan enjin ini adalah mudah. Ia dapat mengurangkan masa pembinaan aplikasi. Pengaturcaraan 3D State adalah padat. Rajah 2.3 merupakan contoh pengaturcaraan yang dibuat untuk memaparkan satu persekitaran 3D (world) pada skrin komputer sehingga pengguna menekan kekunci Escape (Esc). Private Sub Form_Load() STATE_engine_load_world "world1.wld", "", "bitmaps",_ _USER_DEFINED_BEHAVIOR While (GetAsyncKeyState(vbKeyEscape) <> 0) STATE_engine_render 0, STATE_camera_get_default_camera Wend End Sub Rajah 2.3: Contoh pengaturcaraan enjin grafik menggunakan bahasa Visual Basic Kelebihan lain bagi enjin 3D State ialah ia dibina untuk tujuan yang pelbagai. Sesetengah enjin grafik dibina untuk tujuan yang tertentu sahaja. Contohnya enjin yang baik seperti Quake tidak boleh digunakan untuk mereka bentuk sebuah permainan lumba kereta atau pun simulasi penerbangan. Kelebihan enjin 3D State adalah ia membenarkan pelbagai tujuan aplikasi untuk dibangunkan. Selain daripada itu, 3D State menyediakan pelbagai tools untuk digunakan bersama-sama dengan enjin. Tools lain bagi tujuan pembangunan aplikasi tidak diperlukan. Tambahan lagi, enjin ini didatangkan bersama dengan pelbagai SDK untuk digunakan bersama platfom yang berbeza berdasarkan kepada pilihan pengguna. SDKnya datang dengan sampel Console, Windows API dan juga beberapa program MFC. Akhir sekali enjin ini tidak menggunakan class yang baru mahupun struktur data yang baru. Beberapa sample (contoh) disediakan untuk memudahkan pengguna dalam membangunkan aplikasi. 2.8 Kajian Berkaitan Evolusi 3D yang berlaku sekarang ini banyak menggunakan “extensions” untuk menghasilkan maklumat 3D. Hasil yang ditunjukkan agak memuaskan, cuma pendekatan tersebut masih tidak lengkap dan akibatnya pengguna masih juga terdapat had-had yang tertentu dalam melakukan analisis. Perkara yang kritikal di sini ialah analisis spatial untuk model 3D. Rajah 2.4: Model 3 dimensi bandar Hamburg, Jerman (Coors, 2001) Coors (2001) telah membina model 3D bagi seluruh bandar Hamburg (Rajah 2.4). Ia dibina daripada data-data kadester (2D) dan juga atributnya seperti bilangan tingkat di dalam bangunan. Namun begitu model ini kemudiannya terpaksa dibina semula disebabkan oleh beberapa faktor. Antaranya cabaran bagi model 3D ini ialah ketinggian bagi bangunan-bangunan yang unik dan berbeza (bumbung). Ini menunjukkan bahawa proses pembinaan model 3D dengan kaedah “extrude” secara automatik daripada data 2D mengakibatkan beberapa maklumat penting tidak dijana. Akhirnya pengguna akan berhadapan dengan masalah untuk menginterpretasi data tersebut. Walupun data 2D tersebut berjaya dijadikan 3D, akan tetapi pendekatan tersebut masih lagi tidak lengkap (Billen et al., 2001). Ini jelas menunjukkan bahawa terdapat keperluan untuk mewujudkan GIS 3D yang mampu menguruskan maklumat geometri dan topologi 3D, mengintegrasikan maklumat geometri 3D dengan maklumat semantik, dan seterusnya proses visualisasi data tersebut di dalam bentuk yang bersesuaian. Dari aspek pengimplementasian algoritma Dijkstra di dalam analisis rangkaian 2D, Eklund et al. (1993), membincangkan mengenai implementasi algoritma klasik Dijkstra untuk mencari laluan (path) dalam jaringan jalanraya yang bersambungan. Algoritma yang diubahsuai ini kemudiannya digunakan untuk 3D Spatial Information System (SIS) bagi kegunaan servis “routing” kecemasan bagi kenderaan. “Vehicle routing” tersebut dilakukan berdasarkan keadaan mukabumi bandaraya Jepun (Okayama) dengan merujuk kepada simulasi gempa bumi yang terdapat di bandar tersebut. Keputusan daripada kertas kerja ini menegaskan bahawa penggunaan algoritma Dijkstra adalah amat efisyen. Pengiraan “shortest path” bagi data yang digunakan mengambil masa di bawah 3 saat (data dan visualisasi adalah dalam bentuk 2 dimensi sahaja). Rajah 2.5: Skop kawasan bagi kajian Agent-Based Modeling and Analysis of Hurricane Evacuation Procedures for the Florida Keys (Chen et al., 2005) Kajian lain yang mengimplementasikan algoritma Dijkstra dalam proses mencari “shortest path” atau pun “best route” adalah yang dijalankan oleh Chen et al. (2005). Kajian ini adalah mengenai proses “evacuation” bagi kawasan Florida Keys (Rajah 2.5) secara 2D jika taufan melanda. Jumlah penduduk bagi kawasan tersebut ialah 92,596 orang. Rupa bentuk geografi kawasan Florida Keys yang unik menyebabkan proses evacuation adalah sukar untuk dilaksanakan. Pengimplementasian algoritma Dijkstra yang digunakan di sini ialah untuk mencari laluan yang terbaik bagi proses mengosongkan bandar tersebut. Proses simulasi yang telah berjaya dijalankan menunjukkan bahawa ia mengambil masa paling minimum 20 jam 11 minit hingga 20 jam 14 minit untuk mengosongkan penduduk seramai 92,596 orang. Pretasi algoritma adalah berbeza bergantung kepada tahap kompleksnya jaringan yang digunakan dan jumlah nod yang terlibat (Shad et al., 1998). Balstrom (2001) melakukan kajian untuk mencari laluan terbaik seperti kajian yang dilakukan oleh penyelidik-penyelidik yang lain. Namun begitu pendekatannya adalah berbeza. Tugasnya ialah untuk mencari laluan yang terbaik di kawasan berbukit tanpa maklumat jaringan laluan pejalan kaki. Prosedur seperti ini biasanya dilakukan kepada laluan yang baru. Adalah sukar untuk mencari laluan terbaik bagi kawasan berbukit jika maklumat laluan (secara digital) untuk proses jejakan tersebut tiada. Beliau menegaskan pencarian laluan terbaik ini adalah mudah dilakukan jika jaringan jalan (laluan) telah siap dibina secara digital. Walau bagaimana pun, bagi tujuan pengimplementasian algoritma Dijkstra, jaringan tersebut perlu disediakan terlebih dahulu sebelum sebarang pengiraan analisis dilakukan. Oleh itu kajian ini menyelesaikan masalah tersebut secara GIS dan implementasi algoritma Dijkstra seterusnya digunakan untuk mencari laluan jejakan tersebut. Seterusnya, perbincangan yang akan dibuat adalah mengenai kajian yang berkaitan dengan pembinaan model 3D dan juga potensi pengimplementasian algoritma Dijkstra ke dalam persekitaran 3D. Ini kerana kajian ini melibatkan pengimplementasian algoritma Dijkstra ke atas struktur bangunan yang bertingkat dan juga navigasi di dalam bahagian dalam bangunan. Maka kajian-kajian terdahulu seumpanya akan diselidik sebelum kajian ini dijalankan. Rajah 2.6: Struktur Evacuation Path (Meijers et al.,2005) Menurut Meijers et al. (2005), bahagian dalam bangunan (interior) selalunya dipersembahkan di dalam bentuk 2D dan terdapat atribut dihubungkan dengannya. Contohnya seperti reka bentuk arkitek hinggalah ke peta yang menunjukkan jalan kecemasan di dalam bangunan. Kebanyakan proses navigasi yang menggunakan peta dua dimensi (2D) adalah untuk tujuan visualisasi dan komunikasi. Namun begitu terdapat juga model 3D seperti bangunan-bangunan bersejarah dan muzium yang menawarkan proses navigasi menerusi bahagian dalam bangunan 3D yang diletakkan tekstur (dinding) bangunan dan beberapa objek-objek 3D yang lain di dalam bangunan. Namun begitu, navigasi seperti ini hanyalah dibina untuk tujuan navigasi/visualisasi sahaja. Tiada struktur yang dibina khas untuknya (contohnya laluan navigasi pengguna dan laluan kecemasan). Membina struktur bagi bahagian interior bangunan bukanlah kerja yang mudah kerana ia memerlukan pengkhususan dan juga penelitian. Meijers mencadangkan dalam kajiannya satu struktur rangkaian yang khusus dibina sebelum analisis rangkaian dilakukan (Rajah 2.6). Jika tidak struktur laluan yang dianalisis akan menghadapi masalah yang tertentu (Karas et al., 2005). Struktur yang dibina perlulah mengambil kira faktor-faktor seperti fungsi bangunan, struktur bangunan tersebut, laluan-laluan yang sedia ada dan lain-lain. Setiap bangunan bertingkat mempunyai seni pembinaan yang berbeza. Contohnya seperti kawasan open-air food-court yang mana ia dinamakan open-air tetapi ia sebenarnya masih di dalam bangunan. Kwan et al. (2003) melakukan kajian berkaitan dengan GIS-Based Intelligent Emergency Response System (GIERS). GIERS adalah merupakan satu sistem bagi menggantikan Emergency Management Information Systems (EMIS) yang sedia ada. EMIS hanya mampu menguruskan maklumat-maklumat kecemasan untuk data-data berbentuk 2D sahaja. Masalah timbul apabila ianya hendak diaplikasikan kepada sistem kecemasan bangunan-bangunan bertingkat (Rajah 2.7). Contoh bangunanbangunan bertingkat tersebut ialah bangunan yang mempunyai stesen keretapi bawah tanah. Oleh kerana penyelidikan dan kajian-kajian mengenai bangunan bertingkat yang berstruktur masih dijalankan, ia mengakibatkan proses pembinaan model dan analisis 3D menjadi sukar. Tambahan pula untuk membina bahagian dalaman bangunan bukanlah satu kerja yang mudah (Meijers et al., 2005). Penyelidikan yang dibuat mengenai potensi GIERS ini ialah untuk melihat potensi implementasi GIS 3D untuk tindakan kecemasan bagi kawasan persekitaran mikro-spatial. Ini adalah kesan lanjutan daripada serangan pengganas terhadap World Trade Center (WTC) di New York dan di Pentagon pada 11 September 2001. Kesan ini menjejaskan bangunan yang diserang dan juga bangunan-bangunan bersebelahan. Ini menunjukkan perlunya satu sistem yang teratur untuk tujuan evacuation bagi bangunan bertingkat (3D) ketika di dalam kecemasan. Rajah 2.7: Jalan terpendek daripada balai bomba ke tempat bencana (Kwan et al., 2003) Kajian ini juga menyatakan setiap bilik atau pun pejabat yang dinamakan zon eksklusif di dalam bangunan berhubung dengan jalan pengangkutan yang kompleks contohnya koridor. Manakala bagi setiap tingkat (aras) bangunan dihubungkan dengan sistem pangangkutan seperti lif dan tangga (stairways). Ditambah pula, maklumat mendatar (horizontal) dan tegak (vertical) ini (maklumat di setiap tingkat dan hubungan antara tingkat-tingkat di dalam bangunan) dihubungkan dengan sistem pengangkutan bawah tanah (keretapi) dan sistem pengangkutan awam (teksi, bas dan sebagainya). Hasil kajian menunjukkan terdapat potensi untuk mewujudkan sistem navigasi GIS 3D bagi bangunan-bangunan tersebut. Juga dicadangkan dalam kajian ini mengenai potensi penggunaan algoritma Dijkstra dalam mencari laluan yang sesuai bagi proses pengosongan (evacuation). Walaupun pendekatan bagi sistem ini masih baru namun ia masih berpontensi untuk dilaksanakan dengan jayanya. Kajian-kajian yang dibincangkan adalah berkaitan dengan usaha mewujudkan model 3D bagi data spatial yang kebanyakannya digunakan untuk tujuan perancangan bandar dan juga simulasi/visualisasi. Kajian seperti ini dirujuk kerana kajian di dalam tesis ini turut menggunakan model bangunan 3D di dalam analisis rangkaiannya. Objek spatial 3D (bangunan) di dalam persekitaran enjin komputer 3D dibina berdasarkan pelan asal bangunan. Pendekatan kaedah “extension” tidak digunakan kerana terdapat banyak limitasi wujud seperti limitasi maklumat koridor, ketinggian bumbung, maklumat setiap aras dan sebagainya. Secara rumusannya, pengkhususan bagi kajian ini adalah menjurus kepada pengimplementasian algoritma Dijkstra ke dalam persekitaran bangunan bertingkat. Algoritma Dijkstra pada kebiasaannya digunakan sebagai salah satu kaedah penyelesaian laluan terpendek di dalam bidang sains komputer. Dengan mengimplementasikan algoritma tersebut ke dalam bidang GIS dan hasil pengiraannya digunakan di dalam persekitaran 3D, ianya dapat menambahkan lagi kajian-kajian yang berkaitan dengan analisis permukaan 3D di dalam GIS. Sebagai langkah permulaan, kajian ini adalah sebagai pendekatan awal kepada analisis yang dilakukan di dalam persekitaran 3D dan juga sebagai rujukan bagi kajian-kajian lanjutan yang berkaitan dengan tajuk penyelidikan. BAB 3 KONSEP ALGORITMA DIJKSTRA 3.1 Pendahuluan Bab Di dalam GIS, perwakilan bagi maklumat spatial di muka bumi sebenar adalah terdiri daripada bentuk-bentuk geometri asas iaitu titik, garisan dan poligon (point, line and polygon). Bagi perwakilan garisan (line), ia mewakili entiti-entiti spatial berbentuk linear seperti jaringan jalanraya, jaringan paip air, jaringan agihan sumber bekalan kuasa elektrik dan sebagainya. Jaringan-jaringan atau pun garisangarisan ini pula terdiri daripada sejumlah titik-titik yang bersambung (continous point/node) yang mana titik-titik ini apabila disambungkan akan membentuk garisan dan seterusnya sejumlah garisan tersebut pula membentuk jaringan garisan yang luas atau pun dipanggil jaringan rangkaian. Geometri asas bagi garisan ialah sejumlah titik-titik yang bersambung, dan membentuk satu garisan. Perkaitan antara algoritma Dijkstra dan GIS ialah titik-titik yang dinyatakan. Dirujuk kembali kepada definisi algoritma Dijkstra; “ it solves the single-source shortest path problem for a directed graph with nonnegative edge weights”, Wikipedia (2005). Directed graph dalam bidang GIS bermaksud rangkaian. Rangkaian mengandungi sejumlah garisan dan garisan tersebut dibentuk daripada titik-titik yang dinyatakan sebelum ini. Kegunaan algoritma Dijkstra terletak pada kemampuannya untuk mencari jalan terpendek atau pun shortest route di antara dua titik (nod). Carian laluan terpendek di dalam graf bagi algoritma Dijkstra boleh diimplementasikan ke dalam GIS untuk mencari laluan yang terpendek bagi jaringan garisan (line) yang asasnya adalah terdiri daripada titik-titik yang bersambungan (continous node). Justeru itu, kajian dalam tesis ini ialah untuk mengimplementasikan algoritma ini ke dalam persekitaran 3D dengan menggunakan enjin permainan komputer untuk mencari laluan terpendek daripada satu lokasi ke lokasi yang lain dan secara tidak langsung dapat digunakan dalam permasalahan dunia sebenar. 3.2 Aplikasi Algoritma Dijkstra Ramai penyelidik masih melakukan kajian untuk menggunapakai algoritma ini. Di antaranya ialah Meijers et al. (2005), Takino (2000), Kwan et al. (2003), Eklund et al. (1993) dan Karas et al. (2006). Kajian-kajian ini dilakukan untuk menggunakan algoritma Dijkstra dan menyesuaikannya dengan aplikasi masingmasing yang berorientasikan sistem kecemasan (yang memerlukan pengiraan laluan terpendek). Contohnya kajian oleh Shad et al. (1998) menyatakan bahawa pengiraan laluan terpendek yang merupakan salah satu fungsi dalam analisis rangkaian adalah penting bagi permasalahan pengangkutan jalanraya. Kertas kerja ini mengkaji prestasi beberapa algoritma “shortest path” secara 2D dengan menggunakan beberapa bahasa pengaturcaraan. Keputusan kajian menunjukkan bahawa tiada jawapan tepat boleh dirumuskan untuk penggunaan dalam pengangkutan kerana penggunaan algoritma bergantung kepada tahap betapa kompleksnya jaringan rangkaian jalanraya, jumlah nod dan juga jumlah arka yang ada. Menurut Sherlock et al. (1999), penilaian pengiraan komputer bagi analisis laluan terpendek dalam kajiannya dibuat berdasarkan lesen perisian, masa implementasi (masa pembinaan perisian), kos implementasi dan masa pertanyaan untuk “shortest path” (shortest path query). Kajian analisis komperatif seperti ini penting bagi para penyelidik GIS untuk mencari implementasi terbaik berdasarkan keperluan komputer bagi pengiraan laluan terpendek. Contoh kajian yang menggunakan pengiraan laluan terpendek di dalam situasi sebenar adalah seperti Semanta et al. (2005). Beliau menilai kiraan masa perjalanan yang diperlukan untuk ke stesen keretapi daripada rumah pengguna atau stesen bas. Masa pengiraan di dalam kajian tersebut dilakukan berdasarkan daripada centroids rumah pengguna/stesen bas ke stesen keretapi yang dicadangkan. Laluan terpendek dalam permasalahan dunia sebenar adalah penting. Contohnya navigasi kecemasan seperti navigasi ambulans, bomba dan polis yang boleh mengakibatkan berlakunya kes-kes kehilangan nyawa, Abdul Rahman (2004). Laluan terpendek sesuai digunakan bagi tujuan navigasi seperti navigasi kecemasan, navigasi kenderaan mahupun navigasi persendirian (pejalan kaki) dan sebagainya. Terdapat beberapa perisian GIS yang mampu melakukan analisis mencari laluan yang terpendek ini. Namun begitu, maklumat mengenai algoritma yang digunakan untuk hitungan mencari laluan terpendek ini tidak diketahui dan diuji keberkesanannya. Ini kerana prestasi algoritma adalah berbeza-beza mengikut situasi pengimplementasian (Shad et al., 1998). Analisis yang terdapat pada perisian GIS boleh dilaksanakan dengan menggunakan fungsi yang disediakan bersama-sama dengan perisian (penyediaan data digital 2D adalah mengikut keperluan sistem perisian GIS tersebut). Hasil analisis adalah paparan maklumat mengenai jaringan laluan terpendek daripada satu lokasi ke lokasi destinasi (sasaran) yang diwarnakan dengan warna yang berbeza. Maklumat tersebut adalah tepat dan benar. Menurut Sherlock et al. (1999), ArcView's Network Analyst menggunakan algoritma Dijkstra yang telah diubahsuai dengan menggunakan kombinasi pengurusan memori komputer dengan tujuan untuk menguruskan data rangkaian yang besar. Bagi navigasi kecemasan, contohnya navigasi ambulans yang memerlukan maklumat yang tepat mengenai laluan jalanraya yang hendak digunakan, beberapa maklumat atau kriteria lain perlu diambil kira sebelum melakukan analisis laluan terpendek. Maklumat kriteria tambahan tersebut seperti maklumat mengenai masa minimum yang perlu diambil untuk membuat tindakan, keadaan lalu-lintas (traffic flow), keadaan jalanraya, kedudukan lampu isyarat dan sebagainya. Namun begitu, faktor yang paling kritikal ialah masa. Perkara yang perlu ditekankan di sini ialah mengenai algoritma yang digunakan. Algoritma yang berlainan akan melibatkan masa pengiraan (computation time) bagi sistem berbeza. Jika melibatkan data yang besar, perkara atau pun faktor masa ini amat perlu dititikberatkan terutama sekali di dalam sistem navigasi kecemasan. Oleh itu, implementasi algoritma Dijkstra dalam persekitaran enjin 3D komputer merupakan salah satu langkah kajian awal bagi kajian-kajian yang selanjutnya yang berkaitan dengan laluan terpendek mahupun navigasi kecemasan. 3.3 Algoritma Laluan Optima (Optimum Path Algorithm) Terdapat pelbagai algoritma bagi pencarian laluan optima. Antaranya ialah seperti algoritma Dijkstra, algoritma Genetic, algoritma DKD dan sebagainya. Namun begitu, tujuan asas bagi pengiraan di dalam algoritma-algoritma tersebut ialah untuk mencari laluan yang terbaik bagi situasi masing-masing. Terdapat algoritma yang bukan sahaja digunakan untuk mencari laluan yang terpendek malah ianya juga digunakan untuk mencari laluan yang terbaik bagi kriteria yang lain. Contohnya seperti di dalam bidang perindustrian (pengangkutan barang-barang perindustrian), algoritma yang digunakan bukan sahaja untuk mencari laluan yang terpendek, tetapi ia juga mengambil kira faktor kapasiti barangan yang boleh dimuatkan di sesebuah jalanraya yang hendak digunakan. Ini kerana tidak semua jalanraya membenarkan kenderaan-kenderaan berat melaluinya. Pada kebiasaannya algoritma-algoritma seperti ini digunakan untuk mencari laluan yang optima. Di dalam topik yang selanjutnya, perbincangan yang dibuat adalah mengenai algoritma Dijkstra yang digunakan di dalam bidang-bidang yang tertentu. Di dalam bidang yang berlainan, kaedah pengimplementasian algoritma Dijkstra adalah berlainan. Akan tetapi kaedah pengiraan algoritma Dijkstra adalah berasaskan kepada konsep yang sama. Bidang yang dibincangkan selanjutnya adalah mengenai penggunaan algoritma Dijkstra di dalam bidang Teknik Penyelidikan Operasi (Research Operational Technique) dan bidang Analisa Rangkaian (Network Analysis). 3.3.1 Teknik Penyelidikan Operasi Penyelidikan operasi adalah merupakan salah satu cabang daripada bidang matematik yang menggunakan kaedah seperti permodelan matematik, statistik dan algoritma bagi mendapatkan keputusan yang optima bagi permasalahan yang kompleks. Penyelesaian yang optima boleh menjurus kepada pengoptimaan maksima (keuntungan, peningkatan jalur lebar dan sebagainya) atau pengoptimaan minima (mengurangkan risiko, perancangan yang teratur dan lain-lain) mengikut objektif penyelidikan tersebut. Tujuan sebenar penyelidikan operasi ini adalah untuk mencari penyelesaian matematik yang terbaik, bagi mengoptimakan prestasi sesebuah sistem. Algoritma laluan optima seperti algoritma Dijkstra (laluan terpendek) yang menggunakan jarak sebagai pemberat merupakan salah satu penyelidikan yang terdapat dalam penyelidikan operasi. Berdasarkan ciri-ciri algoritma tersebut ia merupakan kaedah mencari laluan yang optima dengan menggunakan jarak sebagai pemberatnya. Pencarian laluan optima memerlukan rangkaian dan pemberat bagi pengiraannya. Jika dilihat dari definisi rangkaian (network), ia terdiri daripada set-set nod yang dihubungkan oleh garisan lengkung (arcs). Setiap arka ini dikaitkan dengan suatu aliran tertentu di dalamnya. Contohnya rangkaian pengangkutan. Bandar diwakili oleh nod dan jalanraya diwakili oleh arka. Aliran pula diukur dengan kapasiti kenderaan yang dapat menggunakan jalan-jalan berkenaan (Haron et. al., 2004). Bagi pemberat-pemberat yang dinyatakan sebelum ini, ianya digunakan sebagai faktor untuk menentukan laluan yang optima. Di antara contoh-contoh pemberat adalah seperti masa, jarak, had kapasiti dan sebagainya. Notasi piawai bagi menerangkan rangkaian ialah G. G = (N, A). N mewakili set-set nod dan A mewakili arka (rujuk Rajah 3.1). 3 5 1 4 2 N = {1, 2, 3, 4, 5} A = {(1,3), (1,2), (2,3), (2,4), (2,5), (3,4), (3,5), (4,5) Rajah 3.1: Contoh rangkaian yang mengandungi 5 nod dan 8 arka. Aliran dalam arka dihadkan oleh kapasiti - sama ada terhingga/tak terhingga. Arka dikatakan berarah/berhaluan (directed) jika ia membenarkan aliran pada satu arah dan aliran sifar pada arah yang bertentangan. Rangkaian berarah/berhaluan adalah keadaan di mana semua arka adalah berarah. Lalua n meru paka n arka yang mengh ubun gkan dua nod. Pada Raja h 3.1, lalu an yang bole h digu naka n dari nod 1 ke nod 4 iala h lalu an 1→3, 3→2 dan 2→4. Lalua n dika taka n bole h memb entu k satu gelun g (loop /cyc le) jika ia mengh ubun gkan nod denga n diri nya send iri. Cont oh pada Raja h 3.1, arka 3→2, 4→3 dan 2→4 memb entu k gelun g. Gelu ng berar ah (dire cted loop /cir cuit ) pula adal ah gelun g di man a semu a arka memp unyai arah yang sama . Rangkaian bersambung (connected) adalah rangkaian di mana setiap dua nod yang berasingan dihubungkan oleh suatu laluan arka (Rajah 3.1). Rangkaian bersambung melibatkan hanya beberapa nod-nod yang ada manakala rangkaian bersambung (merentang) terdiri dari semua nod dalam rangkaian tetapi tidak mempunyai gelung. Rajah 3.2 menunjukkan contoh pohon rangkaian bersambung dan Rajah 3.3 menunjukkan rangkaian bersambung (merentang) bagi sesebuah rangkaian. 3 1 4 2 Rajah 3.2: Rangkaian bersambung 3 5 1 4 2 Rajah 3.3: Rangkaian bersambung (Merentang) Model-model rangkaian boleh digunakan untuk menganalisis banyak jenis masalah keputusan. Banyak masalah pengurusan yang praktikal adalah terlalu kompleks/rumit dan ianya memerlukan penyelesaian dengan menggunakan kaedah grafik. Selanjutnya penerangan akan menyentuh penggunaan model rangkaian dalam masalah pengoptimaan bagi masalah laluan terpendek. 3.3.1.1 Masalah Laluan Terpendek Masalah laluan yang terpendek adalah permasalahan bagi menentukan arka yang dihubungkan dalam rangkaian yang menghasilkan jarak terpendek antara nod sumber ke nod destinasi. Terdapat 2 algoritma yang boleh digunakan iaitu Acyclic Algorithm dan Cyclic Algorithm (bergantung kepada situasi). 3.3.1.1.1 Acyclic Algori thm Berdasa rkan kepada pengira an secara rekurs if iaitu pengira an yang menggun akan rumus/ kaedah yang sama secara berula ng-ulang bagi mendap atkan jawapan , di→j mewaki li jarak antara nod i ke nod j. Manakal a uj mewaki li jarak terpen dek antara nod j dengan nod sebelu mnya. Anggap nod pertam a (sumbe r) mempun yai nilai u1 bersam aan dengan 0. Nilai u j, bagi u 1, u 2 , u3 , . . . ., un dikira secara rekurs if dengan menggunakan rumus beriku t u j = min i { u 1 + d i→ j }. Setiap nod dilabe lkan dengan {u j , n}. n mewaki li nod yang mendah ului (nod selepa s) dan j ialah jarak yang terpen dek. Oleh itu u j bersam aan dengan u j = min i {u i, d i→j } = un + d n→j . Nod pertam a (sumbe r) dilabe lkan sebagai [0, -] untuk menand akan ianya adalah nod sumber . Algorit ma ini menghas ilkan jarak terpen dek antara nod sumber dengan nod lain dalam rangkai an. Rajah 3.4 menunj ukkan rangkai an antara bandar-bandar yang diwaki li oleh nod-nod dan dihubu ngkan oleh arka (jalan raya/leb uhraya). 2 5 2 5 6 1 11 7 8 4 4 3 3 9 7 1 6 Rajah 3.4: Contoh rangkaian yang mewakili kedudukan bandar Jika nod 1 diangga p sebagai nod sumber dan nod 7 adalah nod destin asi atau nod yang dituju , pengira an lalua n yang terpen dek boleh dilaku kan dengan kaedah sepert i beriku t: Labelkan nod 1 [0, - ] iaitu nod sumber/pertama. 1) u1 = 0, labelkan [0,-] pada nod 1 Pengiraan untuk nod 2, 2) u2 = u1 + d1→2 = 0 + 2 = 2, labelkan [2, 1 ] pada nod 2 Pengiraan untuk nod 3, 3) u3 = u1 + d1→3 = 0 + 4 = 4, labelkan [4, 1 ] pada nod 3 Pengiraan untuk nod 4, 4) u4 = min {u2 + d2→4, u3 + d3→4,} = min {2+11, 4+3} = min {13, 7} = 7, Pengiraan untuk nod 5, labelkan [7,3] pada nod 4 5) u5 = min {u2 + d2→5, u4 + d4→5} = min {2+5, 7+8} = min (7,15) = 7, labelkan [7,2] pada nod 5 Pengiraan untuk nod 6, 6) u6 = min {u3 + d3→6, u4 + d4→6} = min {4+1, 7+7} = min {5,14} =5, labelkan [5,3] pada nod 6 Pengiraan untuk nod 7, 7) u7 = min {u5 + d5→7, u6+d6→7} = min {7+6, 5+9} = min {13,14} = 13, labelkan [13,5] pada nod 7 [2,1] [0,-] [7,2] 5 2 2 5 6 [13,5] 1 11 4 4 3 3 [4,1] 7 8 [7,3] 9 7 1 6 [5,3] Rajah 3.5: Laluan terpendek daripada nod 1 ke nod 7 Setelah selesai, setiap nod dilabelkan berdasarkan kiraan yang dibuat bagi mencari laluan yang terpendek (Rajah 3.5). Oleh itu, berdasarkan rangkaian pada Rajah 3.5, laluan terpendek daripada nod 1 (nod sumber) ke nod 7 (nod destinasi) ialah dengan menggunakan laluan (1) - (2) - (5) - (7). 3.3.1.1.2 Cyclic (Dijkstra's) Algorithm Algoritma Cyclic juga dikenali sebagai algoritma Dijkstra. Algoritma tersebut digunakan bagi rangkaian yang mempunyai gelung (cycle/loop). la membenarkan perubahan dilakukan (nod) dan pengiraan semula jarak terpendek bagi setiap nod. Proses pengiraan diteruskan sehingga jarak terpendek ke nod destinasi (akhir) dikira. Ciri-ciri utamanya ialah jika jarak terpendek bagi sesuatu nod telah ditemui, barulah nod tersebut dikeluarkan dari pengiraan. Algoritma ini menggunakan dua jenis teknik perlabelan iaitu perlabelan sementara (temporary) dan perlabelan kekal (permanent). Rajah 3.6 menunjukkan contoh jaringan rangkaian yang digunakan bagi pengiraan algoritma. Rajah 3.6: Contoh rangkaian bagi pengiraan algoritma Cyclic 1) Pengiraan dimulakan dengan nod 1, nod pertama mesti dilabelkan sebagai kekal [0, - ] 2) Nod yang berhubung dengan nod 1 ialah nod 2 dan nod 3. Pengiraan dijalankan pada kedua-dua nod tersebut. Nod 2 Nod 3 [0+100, 1 ] [0+30, 1 ] [100,1] [30, 1 ] Min {100,30} = 30, Nod 3 mempunyai jarak terpendek d=30. Nod 3 dilabelkan kekal (permanent) dan nod 2 dilabelkan sebagai sementara (temporary). 3) Nod terakhir dilabelkan kekal (nod 3). Nod yang berhubung dengan nod 3 ialah nod 4 dan nod 5. Nod 4 Nod 5 [30+10, 3] [30+60, 3] [40, 3] [90, 3] Nod yang dilabelkan sebagai sementara dipertimbangkan bersama-sama nod 4 dan nod 5. Nod 2 [100,1], nod 4 [40,3], nod 5 [90,3] Min {100, 40, 90}. Nod 4 mempunyai jarak (d) yang terpendek. Oleh itu nod 4 dilabelkan kekal (nod 5 dilabelkan sementara). 4) Nod yang berhubung dengan nod 4 ialah nod 2 dan 5. Nod 2 Nod 5 [40+15. 4] [40+50,4] [55, 4] [90, 4] Nod 2 mempunyai jarak (d) yang terpendek. Gantikan label nod 2, dengan label kekal. 5) Hanya tinggal nod 5. Labelkan kekal. Kiraan tamat dan hasil pengiraan adalah seperti pada Rajah 3.7. [55,4]* [100,1] [40,3]* [0,-]* 6 [90,3]* [90,4]* [30,1]* Rajah 3.7: Hasil pengiraan algoritma Cyclic 3.3.2 Analisa Rangkaian (Network Analysis) Terdapat perbezaan implementasi algoritma Dijkstra dalam bidang Analisa Rangkaian. Namun begitu, asas pengiraan bagi algoritma Dijkstra untuk kedua-dua bidang (Teknik Penyelidikan Operasi dan Analisia Rangkaian) adalah sama. Perbezaannya adalah dari segi pendekatan yang digunakan. Kajian di dalam tesis ini membuat pengkhususan terhadap analisa rangkaian di dalam persekitaran 3D. Prosidur dan pengiraan bagi algoritma Dijkstra untuk tujuan kajian tesis ini akan berdasarkan pengimplementasian algoritma Dijkstra di dalam bidang analisa rangkaian ini. Rajah 3.8 merupakan contoh rangkaian dan seterusnya adalah kaedah penyelesaian algoritma Dijkstra bagi mencari laluan yang terpendek daripada nod sumber (Nod 1) ke nod destinasi (Nod 5). Rajah 3.8: Contoh rangkaian bagi pengiraan algoritma Dijkstra Terdapat Iteration bagi prosidur yang dibuat. Bagi setiap prosidur pula mengandungi kaedah Step 1 dan Step 2. Teknik perlabelan bagi nod sebagai Temporary dan juga Permanent adalah sama seperti perbincangan sebelum ini. Berikut ialah contoh pengiraan bagi rangkaian pada Rajah 3.8. Iteration 1 Step 1 P = {1} T = {2, 3, 4, 5} L (1) = 0 L (2) = 100 L (3) = 30 * label kekal L (4) = ∞ L (5) = ∞ P mewakili label Permanent dan L (n) di bawah simbol P adalah jarak bagi nod n yang telah dilabelkan sebagai Permanent. T mewakili label Temporary dan L (n) di bawah label T adalah jarak bagi nod n (temporary) dengan nod yang Permanent. L (3) mempunyai nilai jarak yang terkecil, ia dipilih dan dilabelkan sebagai kekal. Simbol infiniti (∞) digunakan untuk menandakan bahawa nod tersebut tidak bersambung dengan nod 1. Step 2 P = {1, 3} T = {2, 4, 5} L (1) = 0 L (2) = min {100, L (3) + ∞} L (3) = 30 = min {100, ∞} = 100 L (4) = min {∞, L (3) + d3→4 } = min {∞, 30 + 10} = min {∞, 40} = 40 * label kekal L (5) = min {∞, L (3) + d3→5 } = min {∞, 30 + 60} = 90 Nod 3 dimasukkan di dalam pengelasan P. Nod 2, nod 4 dan nod 5 yang dibawah pengelasan T dibandingkan jaraknya dengan Nod 3. Jarak pada Step 1 juga dibandingkan bersama dengan jarak tersebut untuk mencari jarak yang minima. Nod 4 dipilih kerana nod tersebut mempunyai nilai jarak yang terkecil. Seterusnya pengiraan di dalam Iteration 2. Iteration 2 Step 1 P = {1, 3, 4} T = {2, 5} L (1) = 0 L (2) = min {100, L (4) + d4→2} L (3) = 30 = min {100, 40 + 15} L (4) = 40 = 55 * label kekal L (5) = min {90, L (4) + d4→5} = min {90, 90 } = 90 Step 2 P = {1, 3, 4, 2} T = {5} L (1) = 0 L (5) = min {90, L (2) + d2→5} L (3) = 30 = min {90, 55 + ∞} L (4) = 40 = 90 *label kekal L (2) = 55 Apabila nod yang dilabelkan kekal ialah nod destinasi (Nod 5) maka pengiraan bagi algoritma Dijkstra akan dihentikan. Oleh itu, laluan yang terpendek bagi laluan dari Nod 1 ke Nod 5 ialah: P = {1→ 3→4→2→5} Daripada maklumat ini, kesemua nod yang telah dilabelkan sebagai Permanent (P) dimasukkan ke dalam rajah pepohon yang dipanggil Spanning Tree. Spanning Tree bagi permasalahan yang diberikan ialah seperti berikut (Rajah 3.9): 15 2 4 50 1 10 30 5 3 Rajah 3.9: Spanning Tree 3.4 Perincian Prosidur Algoritma Dijkstra Topik ini membincangkan mengenai cara kerja algoritma ini dengan lebih terperinci dengan berdasarkan contoh rangkaian pada Rajah 3.10. 38 15 26 2 20 1 5 4 40 47 25 45 3 18 7 6 Rajah 3.10: Contoh rangkaian yang mengandungi 7 nod dan juga 9 arka Bulatan yang terdapat nombor di dalamnya mewakili nod (vertices) di dalam rangkaian. Anak panah pula merupakan arah laluan (perhubungan antara nod) dan nombor yang terdapat pada atas anak panah tersebut merupakan jarak antara nod (pemberat). Karekteristik bagi algoritma Dijkstra ialah ia membenarkan rangkaian yang digunakan untuk mempunyai gelung (loop/cycle). Sesetengah algoritma pencarian laluan yang terbaik atau optima tidak membenarkan rangkaian mempunyai gelung. Contoh rangkaian yang diberikan di dalam Rajah 3.10 mempunyai tujuh nod, sembilan arah (arcs) dan juga jarak masing-masing. Rangkaian ini juga mengandungi gelung. Algoritma Dijkstra menggunakan dua teknik perlabelan iaitu teknik perlabelan temporary dan permanent. Ia menggunakan format [n, d] yang mana d mewakili jarak dan n mewakili nod selepas (predecessor node). Bagi Rajah 3.10, andaikan pengiraan dibuat bagi mencari laluan yang terpendek daripada nod 1 ke nod 6, ini bermakna nod sumber ialah nod 1 dan nod destinasi ialah nod 6. sebelum pengiraan ini dimulakan, algoritma ini akan meletakkan atau pun melabelkan kesemua nod sebagai sementara (Temporary). Oleh itu bagi permulaan pengiraan, nod 1 akan dijadikan nod permulaan (nod sumber) dan secara automatik akan dilabelkan sebagai kekal (Permanent) dan ditanda (label) sebagai [-, 0]. Pengiraan bagi jarak (d) adalah 0 dan tiada nilai bagi nod sebelum (n) oleh kerana ia merupakan nod yang pertama. Selepas nod sumber atau pun nod 1 dilabelkan sebagai permanent, pengiraan diteruskan dengan mencari nod yang berhubung dengan nod 1. Di dalam situasi ini, nod selepas nod 1 ialah nod 2 dan nod 3. pemilihan seterusnya dibuat antara nod 2 dan nod 3 dengan memilih nod yang mempunyai jarak terpendek antara nod 1 dan nod tersebut. Jarak (d) dikira daripada proses penambahan nilai d bagi nod 1 dan juga jarak (yang terdapat pada anak panah) antara nod terlibat. Bagi nod 2 (d = 0 + 15 = 15) dan nod 3 (d = 0 + 40 = 40). Oleh itu bagi kes ini, jarak yang terpendek ialah jarak antara nod 1 dan nod 2 (d = 15). Nod 2 akan dilabelkan sebagai permanent [1, 15] dan nod 3 akan masih dilabelkan sebagai temporary. Seterusnya, nod yang akan diambil untuk dilakukan pengiraan ialah nod yang terakhir sekali dilabelkan sebagai permanent (nod 2). Langkah yang sama juga dijalankan, mencari nod selepas (berhubung) nod 2, bagi contoh yang diberikan maka tiada nod selepas daripada nod 2 dan dengan itu pengiraan akan dibuat pada nod yang dilabelkan sebagai temporary dan mempuyai nilai d yang terpendek. Maka dengan ini nod tersebut ialah nod 3 dengan d = 40. Oleh kerana tiada nod lagi yang boleh dibandingkan dengan nod 3 untuk mencari jalan yang terpendek dari segi jaraknya, maka nod 3 akan dilabelkan sebagai permanent [1, 40]. Langkah seterusnya adalah seperti sebelum ini, mula dengan nod yang terakhir dilabelkan dengan permanent (nod 3) dan mencari nod selepas nod tersebut. Nod 3 dihubungkan dengan nod 4 dan 5. Dengan itu jarak antara nod tersebut dikira. Jarak untuk ke nod 4 ialah 40 + 20 = 60 dan jarak untuk ke nod 5 ialah 40 + 47 = 87 (perhatikan bahawa nilai 40 diambil daripada nilai jarak antara nod 1 dan nod 3). Nilai yang kecil menunjukkan jarak yang pendek antara nod-nod tersebut, oleh itu nod 4 akan dilabelkan sebagai permanent [3, 60] dan nod 5 akan dibiarkan sebagai temporary. Algoritma ini diteruskan dengan mencari nod selepas nod 4 iaitu nod 5. Nilai d dikira (d = 60 + 26 = 86). Nilai d ini dibandingkan dengan nod lain yang dilabelkan sebagai temporary. Nilai d yang dibandingkan di sini ialah nilai d antara nod 3 ke nod 5 dan nilai d nod 4 dan nod 5. Nilai d (3→5) = 87 dan d (4→5) = 86. Nilai 86 adalah lebih kecil (terpendek), maka nod 5 akan dilabelkan sebagai permanent [4, 86]. Setakat ini nod yang masih dilabelkan sebagai temporary ialah nod 6 dan 7. Pengiraan masih lagi diteruskan, nod selepas nod 5 ialah nod 6 dan nod 7. Nilai d ialah d (5 – 6) = 131 dan d (5 – 7) = 111. Maka dengan ini nod 7 dilabelkan sebagai permanent [5, 111] dan nod 6 masih dilabelkan sebagai temporary. Nod yang terakhir sekali dilabelkan sebagai permanent, nod 7, nilai d bagi nod selepasnya (nod 6) dikira dan dibandingkan dengan nod yang dilabelkan sebagai temporary yang mempunyai nilai d. Oleh itu, nilai d (7→6) = 129, dibandingkan dengan d (5→6) = 131 dan nilai d yang terpendek ialah nilai jarak antara nod 7 dan nod 6. Akhir sekali nod 6 akan dilabelkan sebagai permanent [7, 129]. Maka dalam permasalahan ini, pengiraan algoritma dihentikan dan spanning tree dihasilkan. Spanning tree adalah rangkaian yang tidak mempunyai gelung. Daripada contoh rangkaian yang digunakan (Rajah 3.10), pengiraan menghasilkan sebuah spanning tree yang tidak mempunyai gelung bagi rangkaian tersebut. Rajah 3.11 menunjukkan hasil akhir pengiraan di dalam bentuk spanning tree. [1, 15] [3, 87] [4, 86] [3, 60] 26 15 2 20 1 5 4 47 25 40 [0, -] 3 [1, 40] [1, 40] [5, 131] [7, 129] 18 7 [5, 111] 6 * Italic mewakili label temporary * Bold mewakili label permanent Rajah 3.11: Hasil akhir pengiraan algoritma Dijkstra dalam bentuk Spanning Tree Gambarajah Spanning Tree di dalam kes ini menunjukkan jarak yang terpendek antara nod 1 dengan kesemua nod yang lain. Oleh itu, penyelesaian dalam mencari laluan yang terpendek daripada nod 1 ke nod 6 ialah laluan nod 1→nod 3→nod 4→nod 5→nod 7→nod 6. 3.5 Pengimplementasian Algoritma Dijkstra Di Dalam Persekitaran 3D Kriteria pertama bagi data jaringan yang hendak digunakan di dalam algoritma Dijkstra ialah kesemua nilai titik/nod (points) bagi rangkaian yang hendak digunakan perlulah bernilai positif. Pengiraan algoritma tidak boleh dilakukan pada nod yang mempunyai x, y atau z yang bernilai negatif. “If the length function is nonnegative, Dijkstra’s algorithms scan each node exactly once” (Cherkassy et al., 1991). Bagi membolehkan algoritma ini diguna pakai di dalam GIS, nilai kesemua titik (koordinat) perlu diletakkan di dalam nilai yang positif terlebih dahulu. Sesetengah data spatial GIS bernilai negative kerana ianya bergantung pada projeksi peta. Oleh itu, sebelum melakukan pengimplementasian algoritma ini, data spatial GIS (rangkaian 3D) perlu disetkan nilai ke nilai yang positif. Ini dapat dilakukan dengan menganjakkan nilai origin bagi data spatial tersebut kepada nilai origin yang baru untuk menjadikan nilai x, y dan z bagi kesemua titik menjadi nilai yang positif. Perbezaan nilai x, y dan z antara origin asal dengan origin baru (anjakkan) iaitu ∂x, ∂y dan ∂z dikira supaya hasil akhir pengiraan algoritma Dijkstra boleh ditambah atau tolak dengan nilai perbezaan ini. Maka hasil akhir nanti akan memaparkan nilai koordinat yang sebenar. Algoritma Dijkstra membenarkan data rangkaian yang digunakan mempunyai gelung (cyclic/loop). Sesetengah algoritma lain tidak membenarkan data rangkaian yang digunakan mempunyai gelung. Ini memberikan kelebihan kepada penggunaan algoritma Dijkstra kerana data GIS memang wujud rangkaian yang mempunyai gelung. Algoritma Dijkstra memerlukan maklumat nama nod atau pun nombor bagi setiap nod. Nama atau pun nombor tersebut adalah ID kepada nod tersebut. Maklumat lain yang diperlukan adalah jarak antara nod-nod yang ada. Selain itu, maklumat yang penting dalam pengiraan algoritma Dijkstra ialah maklumat nod sebelum (predecessor) dan nod selepas (successor) bagi setiap nod. Ini adalah maklumat asas bagi keperluan algoritma Dijkstra. Dari aspek GIS, ID yang diperlukan boleh dihasilkan semasa proses mengekstrak koordinat pada rangkaian 3D tersebut. Dengan meletakkan ID bagi setiap maklumat x, y dan z, maka salah satu keperluan atau pun kehendak algoritma Dijkstra telah dipenuhi. Berdasarkan daripada struktur data jaringan yang dibina dengan menggunakan perisian Computer Aided Design (CAD), ID bagi setiap nod boleh dimasukkan berdasarkan koordinat x, y dan z yang telah disimpan. Sebelum melakukan pengiraan jarak antara nod-nod yang ada, maklumat nod sebelum dan nod selepas merupakan kriteria kedua bagi algoritma Dijkstra. Ini kerana pengiraan jarak hanya perlu dilakukan terhadap nod-nod yang berhubung sahaja dan bukannya jarak antara satu nod dengan kesemua nod yang ada di dalam rangkaian. Sebagai contoh, jika nod 1 berhubung dengan nod 2, maka pengiraan jarak antara nod hanya dilakukan antara nod 1 dan nod 2 dan bukannya dengan kesemua nod yang ada. Oleh itu, maklumat nod sebelum (predecessor) dan nod selepas (successor) bagi setiap nod adalah penting. Maklumat tersebut perlu disediakan supaya aplikasi dapat memahami nod-nod tersebut sebelum melakukan pengiraan jarak. Bagi mendapatkan maklumat predecessor dan successor, data rangkaian yang digunakan perlu dikaji. Sebagai contoh, data rangkaian yang dibina menggunakan perisian aplikasi CAD mempunyai format tersendiri untuk disimpan dalam data rangkaian tersebut. Data tersebut disimpan dengan menggunakan cara yang teratur dan menggunakan teknik baris (sequential). Ini bermakna garisan rangkaian yang berhubung disimpan dalam sequence yang teratur. Sebagai contoh, jika garisan A bermula dengan nod 1 dan diakhiri dengan nod 5, maka data CAD yang disimpan mempunyai sequence untuk menyatakan garisan A adalah terdiri daripada nod 1, nod 2, nod 3 dan seterusnya sehingga nod 5. Oleh itu, kajian perlu dilakukan untuk melihat bagaimana data tersebut di simpan, data yang patut digunakan dan data yang tidak diperlukan sebelum melakukan analisis algoritma Dijkstra. Dengan cara ini, penentuan bagi nod mana yang bersambung atau pun tidak dapat ditentukan dengan mudah dan cepat. Dengan itu, maklumat nod sebelum dan nod selepas dapat digunakan untuk pengiraan jarak antara nod pada proses yang seterusnya. Bagi pengiraan jarak antara nod yang berhubungan, agak mudah untuk dikira kerana proses pengekstrakkan koordinat daripada data rangkaian telah dilakukan terlebih dahulu. Tambahan pula maklumat nod sebelum dan nod selepas telah diketahui. Dengan menggunakan formula matematik pengiraan jarak berdasarkan 3 paksi (x, y dan z), pengiraaan jarak tersebut dapat dilakukan. Rumus matematik yang digunakan di sini ialah Theorem Pythagoras. Bagi kes ini, ia membabitkan koordinat 3D. Maka formula matematik tersebut boleh diterbitkan daripada situasi seperti yang ditunjukkan pada Rajah 3.12. Nod B (x2 , y2, z2 ) D ∂Z h z ∂Y Nod A y ∂X (x1 , y1, z1 ) x Rajah 3.12: Perbezaan kedudukan nod A (x 1, y1, z1) dan nod B (x2 , y2, z 2) Delta (∂ ) x, y dan z bagi nod A dan B dikira dengan mengira perbezaan nilai koordinat antara nod tersebut. Sebagai contoh: ∂X = (x2 – x1 ) ; ∂Y = (y2 – y1) ; ∂Z = (z2 – z 1) Kemudian jarak (D) yang hendak dicari ialah: D = √(h2 + ∂Z2) …………………. Persamaan 1 Nilai h dapat dikira dengan langkah berikut: h = √(∂X2 + ∂ Y2) ………………..Persamaan 2 Dengan menggabungkan persamaan 1 dan persamaan 2, persamaan yang dapat dihasilkan ialah untuk mencari nilai jarak (D) antara dua nod ialah: D = √[(∂X2 + ∂Y2) + ∂ Z 2] Atau D = √[(x2 – x1)2 + (y2 – y1)2 + (z2 – z1)2 ] Setelah kesemua maklumat seperti ID setiap nod, maklumat nod sebelum (predecessor) dan nod selepas (successor) bagi setiap nod di dalam rangkaian dan jarak antara nod diperolehi, maka pengiraan dalam algoritma Dijkstra dapat dijalankan sepertimana pengimplementasiannya terhadap data rangkaian 2D. Kelebihannya ialah, keperluan yang diperlukan oleh algoritma Dijkstra ada di dalam data yang diguna pakai oleh GIS. BAB 4 REKA BENTUK SISTEM NAVIGASI 4.1 Pembangunan Analisis Rangkaian 3 Dimensi Berdasarkan kajian-kajian yang terdahulu, implementasi analisis rangkaian digunakan dalam sistem yang dibangunkan khusus untuk situasi permasalahan tertentu. Ini bertujuan supaya analisis tersebut dapat diguna pakai untuk melihat keberkesannya seperti pencarian laluan yang optimum. Bagi kajian ini, untuk mewujudkan satu analisis rangkaian 3D, analisis tersebut perlu digunakan di dalam satu sistem. Merujuk kepada metodologi kajian, hasil akhir yang dijangkakan ialah pemberian maklumat kepada pengguna mengenai laluan yang terbaik (shortest path) dalam persekitaran 3D. Oleh itu, satu aplikasi ringkas dibangunkan bagi tujuan untuk memaparkan hasil analisa rangkaian yang dibina. Aplikasi ini digunakan hanya untuk memaparkan hasil pengiraan analisis rangkaian yang dibangunkan dalam kajian ini. Pembangunan analisis rangkaian bagi aplikasi yang dibina melalui tiga fasa utama. Fasa-fasa tersebut ialah fasa Permulaan, fasa Pembangunan, dan juga Fasa Implementasi. Setiap pembangunan sistem maklumat perlu melalui fasa-fasa yang terlibat untuk menghasilkan satu sistem maklumat yang terbaik (Alter, 2002). Rajah 4.1 menunjukkan carta alir fasa-fasa yang dinyatakan: Fasa Permulaan Penyataan masalah dan bagaimana ia dapat membantu Perubahan tujuan, skop dan jadual pembangunan Fasa Pembangunan Pengubahsuaian dilakukan sebelum implementasi Prosidur dan program yang dijalankan di komputer Fasa Implementasi Rajah 4.1: Carta alir menunjukkan hasil bagi setiap dua fasa yang pertama bagi sesebuah sistem maklumat. Teks yang ditunjukkan dalam Italics merujuk kepada pengembalian ke fasa yang sebelumnya hanya jika perlu sahaja (Sumber: Alter, 2002). 4.2 Fasa Permulaan Fasa Permulaan secara ringkasnya di dalam kajian ini adalah untuk menetapkan tujuan dan objektif termasuk matlamat analisis yang hendak dibangunkan. Tujuan utama aplikasi yang bakal dibangunkan adalah untuk membenarkan analisis rangkaian terhadap rangkaian 3 dimensi yang dikira, dipaparkan bersama-sama objek spatial 3 dimensi serta tekstur sebenar bagi objek spatial tersebut. Kajian yang terperinci mengenai algoritma Dijkstra yang digunakan pada analisa rangkaian tersebut adalah perlu dan penting. Kajian mengenai algoritma bagi analisis rangkaian di dalam kajian ini telah diterangkan di dalam Bab 3 iaitu bab Konsep Algoritma Dijkstra. 4.3 Fasa Pembangunan Fasa Pembangunan merupakan fasa untuk mengkonfigurasi perkakasan, perisian dan juga sumber-sumber lain yang berkaitan untuk membina analisis yang dirancang. Fasa ini bermula dengan menentukan secara tepat bagaimana aplikasi akan beroperasi. Jika perkakasan dan perisian yang diperlukan tiada, maka perhatian perlu diberikan terhadap pembelian perkakasan, perisian dan juga sumber-sumber yang berkaitan sebelum memulakan proses pembinaan analisis tersebut. Matlamat utama fasa ini secara umumnya adalah untuk memastikan bahawa sistem kerja dan analisis yang dibuat benar-benar memenuhi kehendak pengguna dalam menyelesaikan permasalahan yang ada. Namun begitu, secara khususnya matlamat fasa ini adalah untuk memaparkan maklumat hasil daripada pengiraan algoritma Dijkstra secara grafikal di dalam persekitaran objek spatial 3D. Rajah 4.2 menunjukkan aktiviti-aktiviti di dalam Fasa Pembangunan. Penerangan bagi setiap aktiviti yang ada akan dibuat selanjutnya. FASA PERMULAAN Spesifikasi Fungsi FASA PEMBANGUNAN Kajian Keperluan Spesifikasi luaran untuk menerangkan kepada pengguna bagaimana aplikasi berfungsi Reka bentuk Dalaman Spesifikasi dalaman bagi struktur teknikal aplikasi Perkakasan Komputer Model Bangunan 3D Pengaturcaraan Debugged programs Jaringan Rangkaian 3D Perkakasan berfungsi Data spatial dan bukan spatial sedia untuk digunakan Pengujian Sistem yang berfungsi mengikut spesifikasi yang ditetapkan FASA IMPLEMENTASI Rajah 4.2: Fasa Pembangunan dan aktiviti-aktiviti yang berkaitan dengannya 4.3.1 Kajian Keperluan Langkah pertama di dalam fasa pembangunan ialah kajian keperluan. Aktiviti tersebut menghasilkan satu deskripsi bagaimana aplikasi tersebut akan berfungsi berdasarkan pengguna (user –oriented). Analisis kepenggunaan ringkas dibuat untuk mengetahui bagaimana pengguna melakukan navigasi di dalam sesebuah bangunan secara umum dan navigasi di dalam bangunan kawasan kajian secara khasnya. Pada lazimnya, navigasi yang dilakukan di dalam sesebuah bangunan adalah berdasarkan daripada lokasi semasa ke lokasi destinasi atau pun lokasi yang hendak dituju di dalam sesebuah bangunan tersebut. Bagi kawasan bangunan kajian, Fakulti Kejuruteraan dan Sains Geoinformasi (FKSG) terbahagi kepada beberapa blok iaitu blok C02, C03, C04, C05 dan C06. Bilangan (penamaan) aras bagi setiap blok pula adalah berbeza. Sebagai contoh, aras 2 bagi blok C03 adalah bersamaan dengan aras aras 3 blok C05. Ini berlaku akibat kedudukan bangunan yang unik dan berada di atas kawasan bercerun menyebabkan binaan bangunan agak berbeza di antara blok-blok yang terlibat. Secara amnya boleh dirumuskan bahawa bangunan kawasan kajian mempunyai empat aras kesemuanya. Secara kesimpulannya, pengguna akan memilih nama staf/bilik/makmal/bilik kuliah sebagai kata kunci untuk ke lokasi yang hendak dituju di dalam bangunan tersebut sebelum melakukan navigasi. Selain itu, pengguna menggunakan nombor blok dan aras yang hendak dituju sebagai kata kunci. Terdapat pengguna yang menggunakan nombor rujukan bilik atau pun pejabat. Akan tetapi penggunaan nombor ini agak terhad dan juga terdapat limitasi-limitasi tertentu. Pengguna lebih gemar menggunakan nama lokasi yang hendak dituju. Namun begitu, di dalam situasi pengguna ini, pengalaman mengenai bangunan FKSG adalah perlu sebelum melakukan sebarang navigasi. Ini kerana dengan adanya pengalaman atau pun tunjuk arah, navigasi di dalam bangunan FKSG dapat dilakukan dengan efisyen dan juga tanpa membuang masa atau pun membazirkan tenaga untuk ke lokasi yang hendak dituju. Pengguna perlu mempunyai sedikit maklumat atau pun informasi mengenai lokasi yang hendak dituju di dalam bangunan sebelum melakukan navigasi. Maklumat yang perlu dan selalunya digunakan pengguna dapat dikategorikan sebagai: Nama: Nama bagi staf, nama bilik, nama makmal atau pun nama bilik kuliah Nombor: Nombor rujukan yang ada pada setiap bilik Aras dan Blok: Aras dan blok yang hendak dituju. Bagi menghasilkan analisis dalam kajian, maklumat utama yang diperlukan pengguna perlu ada di dalam aplikasi bagi memudahkan pengguna untuk melakukan navigasi. Oleh itu, maklumat tersebut (Nama, Nombor, Aras dan Blok) perlu dimasukkan di dalam aplikasi tersebut untuk membenarkan pengguna menentukan lokasi yang hendak dituju di dalam bangunan kawasan kajian. Spesifikasi luaran yang dibuat ialah pengguna perlu memasukkan nilai-nilai atau pun maklumat lokasi semasa dan lokasi destinasi (setiap kali pengguna menggunakan aplikasi). Ini bertujuan supaya aplikasi dapat melakukan pengiraan analisa rangkaian dan memaparkannya secara grafikal 3D kepada pengguna aplikasi. Dengan menggunakan analisis dalam aplikasi ini, pengguna tidak perlu lagi mempunyai pengalaman navigasi terdahulu mengenai bangunan FKSG sebelum melakukan navigasi. 4.3.2 Reka Bentuk Dalaman Keunikan reka bentuk aplikasi yang dibuat ialah ia membenarkan pengguna memasukkan data spatial dan bukan spatial yang dimiliki oleh pengguna. Pengguna aplikasi mampu untuk mengubah data yang hendak digunakan dengan melakukan pengubahsuaian pada pangkalan data aplikasi (menu khas untuk pengguna aplikasi). Dengan ini pengguna boleh menggunakan sebarang data spatial (persekitaran 3D) dan bukan spatial (jaringan rangkaian 3D) bagi kawasan yang berbeza tidak kira samada kawasan berskala kecil atau besar. Rajah 4.3 merupakan carta alir ringkas aplikasi. Model 3D Rangkaian 3D Input Aplikasi Utama Proses Paparan Laluan Terpendek di dalam Persekitaran 3D Output Rajah 4.3: Carta alir ringkas aplikasi yang direka bentuk Hasil daripada pengiraan algoritma hanya berbentuk numerical sahaja. Oleh itu, untuk memaparkan hasil kiraan di dalam persekitaran 3D, maka satu sistem navigasi perlu dibangunkan mengikut kehendak pengguna bagi memaparkan hasil kajian secara teratur. Ini kerana paparan secara grafikal adalah lebih mudah untuk difahami berbanding dengan maklumat numerical sahaja. Aplikasi di dalam kajian ini terdiri daripada beberapa komponen yang saling berhubungkait dalam paparan hasil kiraan algoritma. Rajah 4.4 merupakan peringkat reka bentuk paparan antara muka. Berikut adalah lakaran kasar mengenai antara muka yang bakal dibina. A C B Rajah 4.4: Lakaran kasar paparan antara muka bagi navigasi Bagi A, ia merupakan paparan Header utama bagi aplikasi. Manakala bagi B pula ialah ruangan paparan utama bagi aplikasi, setiap fungsi-fungsi yang dibina akan dipaparkan di paparan utama. C merupakan hotspot bagi pengguna untuk memilih fungsi-fungsi yang disediakan. Fungsi-fungsi yang terdapat pada bahagian C (hotspot) ialah: a) Menu Utama b) Paparan Base Plan c) Paparan Screenshot d) Navigasi 3D e) Pangkalan Data f) Menu navigasi g) Pengiraan algoritma h) Maklumat kajian i) Keluar Menu Utama: Pengguna boleh menggunakan fungsi ini untuk kembali ke menu utama aplikasi. Paparan Base Plan: Paparan ini akan menunjukkan pelan asas (plan view) bagi FKSG bagi tujuan identifikasi pengguna mengenai lokasi semasa atau pun lokasi destinasi di dalam bangunan. Bagi pengguna baru, maklumat ini adalah amat berguna/penting. Paparan Screenshot: Pengguna boleh menggunakan fungsi ini untuk melihat beberapa grafik dan animasi bagi model bangunan kajian tanpa melakukan navigasi di dalam bangunan tersebut. Navigasi 3D: Fungsi ini membenarkan pengguna untuk melakukan navigasi di dalam bangunan persekitaran 3D termasuk penggunaan tekstur bangunan yang sebenar tanpa melakukan pengiraan jarak terpendek antara dua lokasi di dalam model bangunan. Pangkalan Data: Fungsi ini boleh digunakan pengguna aplikasi untuk setkan data rangkaian dan juga model 3D yang bakal digunakan. Pengguna tidak digalakkan untuk menggunakan fungsi ini akan tetapi boleh menggunakannya jika ingin menggunakan set data lain. Jika tiada perubahan yang dibuat, data rangkaian 3D dan model bangunan yang digunakan adalah data default. Menu Navigasi: Fungsi ini perlu digunakan sebelum melakukan pengiraan algoritma Dijkstra. Pengguna perlu setkan lokasi semasa dan juga lokasi destinasi berdasarkan nama bilik, nama staff atau nombor bilik yang hendak dituju. Selepas itu pengguna boleh melakukan pengiraan dengan menggunakan fungsi Pengiraan Algoritma. Di dalam fungsi ini terdapat sub fungsi lain iaitu Pencarian Lanjutan bagi pengguna yang ingin mencari lokasi yang hendak dituju. Pencarian Lanjutan: Fungsi ini digunakan untuk mencari maklumat non-spatial bagi objek-objek 3D di dalam bangunan. Ia bakal digunakan jika pengguna tidak pasti nama atau pun nombor bilik yang hendak dituju. Pengiraan Algoritma: Fungsi ini hanya akan aktif apabila pengguna telah pun setkan lokasi semasa dan lokasi destinasi pada fungsi Menu Navigasi. Jika tidak, fungsi ini tidak akan diaktifkan. Dengan menggunakan fungsi ini, pengiraan bagi algoritma Dijkstra akan dijalankan. Hasilnya akan dipaparkan melalui satu menu statistik pengiraan (numerical) dan kemudian pengguna boleh memilih samada untuk melihat laluan terpendek ke lokasi destinasi (grafikal) atupun tidak. Jika pengguna ingin dan memilih untuk melihat hasil secara grafik, pengguna akan dan boleh melakukan navigasi di dalam persekitaran 3D bangunan serta dapat melihat tekstur sebenar bangunan di samping dapat melihat laluan terpendek yang dikira sebelum ini secara grafikal. Simulasi yang dibuat adalah berdasarkan pergerakan simulasi manusia. Maklumat Kajian: Fungsi ini hanya untuk memaparkan serba sedikit mengenai maklumat kajian, apa kegunaan aplikasi dan mengapa ianya dibangunkan. Keluar: Keluar daripada aplikasi. 4.3.3 Perkakasan Komputer Bagi membolehkan perisian-perisian yang bakal digunakan berfungsi dengan baik, segala komponen (perkaksan) penting bagi pembangunan aplikasi perlu disediakan di dalam sistem komputer supaya proses reka bentuk dan pembangunan aplikasi dapat dilakukan dengan sebaik-baiknya. Bagi sesetengah pembangunan sistem maklumat yang lain, aktiviti ini dianggap tidak penting kerana perkakasan tersebut sudah sedia ada dan hanya mengguna pakai sistem atau pun perkakasan komputer tersebut. Sesetengah pembangunan sistem maklumat yang lain perlu memperincikan setiap maklumat perkakasan yang hendak digunakan untuk melihat kos, keberkesanan penggunaan, dan juga untuk perancangan jangka masa panjang. Bagi kajian yang dijalankan ini, perkakasan komputer (spesifikasi sistem) yang dibekalkan di dalam kajian ini ialah: Spesifikasi sistem: Intel Pentium 4 2.4GHz, 1 GB RAM, NVIDIA GeForce2 MX/ MX400 , Microsoft Windows XP Professional, Version 2002, Service pack 2. 4.3.4 Model Bangunan 3D Aplikasi yang hendak digunakan memerlukan data-data (spatial dan bukan spatial) untuk diproses oleh aplikasi supaya ianya boleh dijadikan maklumat. Bagi sesebuah sistem maklumat contohnya GIS, ia memerlukan data spatial dan bukan spatial sebelum melakukan analisis. Dapat dikelaskan di sini bahawa data spatial bagi gunapakai aplikasi kajian ialah model tiga dimensi bangunan FKSG itu sendiri (termasuk data rangkaian 3D yang terdapat di dalam bangunan kajian) dan bagi data bukan spatial pula adalah maklumat rekod-rekod bagi setiap entiti spatial yang terdapat di dalam bangunan kajian. Maklumat-maklumat yang diambil kira di dalam kajian ini ialah berdasarkan analisis kepenggunaan yang dilakukan sebelum ini. Maklumat tersebut ialah maklumat mengenai nama staf, nama bilik atau makmal, nombor bilik, aras bangunan dan juga nombor blok yang terdapat di dalam bangunan FKSG. 4.3.4.1 Pendigitan Pelan Lantai Bagi menghasilkan model bangunan FKSG mengikut ukuran dan nisbah yang sebenar, pelan lantai (floor plan) sebenar bangunan FKSG digunakan untuk menghasilkan model 3D yang lebih realistik. Pelan lantai yang digunakan (Lampiran A) diperolehi daripada Pejabat Harta Bina UTM. Ianya terdiri daripada beberapa pelan. Kesemua pelan lantai tersebut adalah dalam nisbah skala 1:16. Oleh itu, beberapa perkara perlu dilakukan untuk menjadikan model yang bakal dihasilkan mengikut ukuran sebenar bangunan FKSG dan di antaranya ialah proses mencantumkan pelan lantai yang sedia ada, proses penskalaan dan sebagainya. Oleh itu, perisian aplikasi Computer Aided Design - CAD (AutoCAD 3D Map 2005) digunakan untuk proses pendigitan pelan lantai tersebut. Proses ini dimulakan dengan melakukan pengimbasan terhadap pelan lantai yang telah tersedia dalam bentuk hardcopy. Proses pengimbasan dibuat dengan menggunakan mesin pengimbas bersaiz A0 memandangkan pelan lantai tersebut bersaiz A3. Imej pelan lantai yang diimbas disimpan di dalam cakera keras dalam format TIFF (*.tiff). Di dalam perisian CAD, imej yang diimbas tersebut dimasukkan di dalam paparan kerja untuk didigit. Ianya boleh dilakukan dengan cara seperti Rajah 4.5 berikut: Rajah 4.5: Imej yang diimbas dimasukkan sebagai rujukan bagi proses pendigitan. Oleh kerana setiap aras di dalam bangunan mempunyai tiga pelan/imej, maka imej-imej bagi setiap aras perlu dicantumkan terlebih dahulu sebelum melakukan proses pendigitan. Setelah imej pertama dimasukkan, imej kedua pula dimasukkan dengan menggunakan cara yang sama. Setelah selesai, proses untuk mencantumkan kedua-dua imej tersebut (imej pertama dan kedua) perlu dilakukan supaya pelan lantai bagi aras tersebut kelihatan seperti satu pelan lantai sahaja dan bukan lagi terdiri daripada tiga pelan lantai yang berasingan. Proses mencantumkan imej tersebut boleh dilakukan dengan menggunakan arahan Align (Rajah 4.6). Seterusnya, imej yang ketiga juga dimasukkan ke dalam paparan kerja dan dicantumkan sepertimana proses yang dilakukan terhadap imej yang kedua. Hasil akhir ialah satu pelan lantai bagi satu aras yang berkenaan (Rajah 4.7). Rajah 4.6: Proses mencantumkan imej menggunakan arahan Align Rajah 4.7: Ketiga-tiga imej pelan lantai yang dicantumkan menjadi satu pelan bagi satu aras Terdapat pelbagai kaedah untuk melakukan proses pendigitan. Akan tetapi setelah beberapa kajian dilakukan, kaedah yang dipilih untuk digunakan di dalam kajian ini adalah yang terbaik mengikut situasi kegunaan aplikasi. Ianya terbaik dari segi untuk mengurangkan jumlah vertices yang terdapat di dalam model bangunan 3D yang bakal dibentuk. Ini penting pada prestasi aplikasi semasa fasa pengimplementasian. Jumlah vertices yang banyak akan mengurangkan kadar prestasi aplikasi. Akan tetapi pengurangan vertices yang dilakukan tidak bermaksud mengurangkan LOD bagi bangunan 3D kawasan kajian, ianya cuma mengurangkan jumlah vertices yang tidak penting bagi tujuan paparan model 3D yang terlibat. Sebagai contoh, bagi permukaan sesebuah dinding, jika dinding empat segi tepat yang dibina berasaskan daripada 2 segitiga, maka koordinat yang perlu disimpan adalah 3 pasang koordinat dan ini secara tidak langsung menambahkan lagi penggunaan ruang penstoran komputer dan pada akhirnya menjejaskan prestasi aplikasi. Maka dengan mengurangkan jumlah vertices pada model (menjadi 2 pasang koordinat sahaja), ia tidak akan menjejaskan LOD dan menjimatkan ruangan penstoran komputer. Pendigitan boleh dilakukan terus dengan berpandukan kepada pelan lantai yang telah dicantumkan sebelum ini. Pendigitan yang dilakukan adalah untuk menghasilkan satu kumpulan poligon dan bukannya satu kumpulan garisan. Jika dirujuk kepada Rajah 4.8, pendigitan dilakukan dengan mengambil kira ketebalan dinding bangunan. Ini kerana proses seterusnya dalam perisian permodelan 3D memerlukan maklumat ketebalan dinding. Pendigitan dinding bilik perlulah dipastikan tertutup dan menjadi/membentuk satu poligon bagi memudahkan proses penampalan tekstur bangunan pada model. Rajah 4.8: Proses pendigitan pelan lantai (ketebalan dinding) Bagi memudahkan proses permodelan 3D, pendigitan dibahagikan kepada dua bahagian iaitu pendigitan ruang-ruang (bilik-bilik) dan pendigitan lantai bagi setiap aras (Rajah 4.9). Pengasingan fail pendigitan tersebut adalah untuk memudahkan pemprosesan model 3D semasa menggunakan perisian permodelan 3D kerana setiap bahagian tersebut mempunyai ketinggian yang berbeza. Rajah 4.9: Hasil pendigitan entiti ruang bilik dan lantai bagi satu aras Bagi mempastikan hasil pendigitan adalah bersih/bebas daripada kesilapan seperti overshoot dan undershoot, pendigitan berulang, dan yang paling penting ialah untuk mempastikan bahawa hasil yang didigit berada dalam bentuk poligon, maka arahan di dalam CAD boleh digunakan. Pilihan pada menu Map > Tools > Drawing Cleanup. Ikuti arahan yang diberikan dan pilih jenis kesalahan apa yang perlu diubahsuai atau diperbetulkan dan perisian akan melakukan pemprosesan secara automatik dan akan memberitahu statistik kesilapan yang dilakukan dan juga berapa banyak objek yang diubahsuai kepada pengguna. Rajah 4.10: Pembetulan kesalahan bagi keseluruhan hasil pendigitan dengan menggunakan arahan Drawing Cleanup Proses Georeferencing perlu dilakukan bagi pelan lantai yang telah didigit, yang mana proses ini adalah untuk meletakkan pelan lantai digital tersebut pada nilai kedudukan koordinat sebenar mengikut projeksi peta. Nilai koordinat sebenar yang digunakan di dalam kajian ini adalah berdasarkan kajian penyelidik GIS yang terdahulu. Nilai koordinat yang diperolehi dan digunakan adalah berdasarkan kepada projeksi Rectified Skew Orthomorphic (RSO). Bagi melakukan proses ini, tiga kaedah lazim dilakukan terhadap data pelan lantai digital tersebut. Tiga kaedah tersebut ialah Move (differential), Scaling dan Rotation. Bagi kaedah move ianya adalah untuk mencari nilai perbezaan (differential) bagi paksi rujukan yang digunakan iaitu paksi x, paksi y dan paksi z. Setelah dikenal pasti perbezaan nilai x, y dan z antara kedudukan sebenar bangunan dengan kedudukan data digital pelan lantai, maka data tersebut boleh dianjakkan (Rajah 4.11) ke kedudukan yang hampir sama dengan kedudukan bangunan yang sebenar. Ia masih lagi tidak tepat dengan kedudukan yang sebenar kerana masih lagi terdapat herotan dan juga penskalaan yang tidak tepat. Rajah 4.11: Proses penganjakkan dilakukan bagi data digital pelan Bagi proses penskalaan pula (Rajah 4.12), nisbah antara data pelan digital dengan bangunan sebenar dicari. Oleh kerana pelan lantai yang ada berada pada nisbah 1:16, maka pelan yang didigit diskalakan/didarab mengikut nisbah tersebut dan seterusnya disemak dengan data bangunan sebenar kajian GIS yang terdahulu untuk melihat ketepatannya. Rajah 4.12: Proses penskalaan data digital pelan Seterusnya adalah proses rotation (Rajah 4.13). Proses ini perlu dilakukan jika pelan lantai digital tersebut terdapat herotan apabila dibandingkan dengan kedudukan sebenar bangunan. Proses ini dapat dilakukan dengan mencari sudut perbezaan antara kedudukan model (pelan lantai digital) dengan kedudukan bangunan yang sebenar. Dengan berpandukan kepada sudut perbezaan yang dikira tersebut, kedudukan pelan lantai digital tersebut boleh dibetulkan herotannya. Rajah 4.13: Proses pembetulan herotan pada pelan lantai digital Setelah dilakukan pembetulan (Move, Scaling dan Rotation) yang dibincangkan sebelum ini selesai dilakukan, maka dengan itu pelan lantai yang didigit tersebut telah sedia untuk dilakukan proses permodelan 3D dengan menggunakan perisian permodelan 3D. Proses tersebut akan dibincangkan dengan lebih lanjut pada topik yang seterusnya. Kini pelan lantai tersebut telah berada pada rujukan sebenar mengikut projeksi peta yang diguna pakai. 4.3.4.2 Reka Bentuk Model Bangunan 3D Model bangunan FKSG yang dibentuk adalah berdasarkan daripada pelan lantai yang didigit. Pelan lantai yang telah didigit boleh digunakan di dalam reka bentuk bangunan 3D menggunakan perisian permodelan 3D. Di dalam kajian ini perisian yang digunakan ialah Autodesk 3D Studio Max 6. Pelan lantai yang telah dibentuk sebelum ini dengan menggunakan perisian CAD boleh diimport masuk ke dalam perisian permodelan 3D yang digunakan. Ia boleh dilakukan dengan mengklik File > Import. Menu import fail akan dipaparkan (Rajah 4.14). Pilih jenis fail yang hendak diimport dan seterusnya pilih nama fail yang ingin digunakan. Rajah 4.14: Menu Select File to Import Setelah nama dan jenis fail telah dipilih (klik Open), satu menu Import Options akan dipaparkan seperti Rajah 4.15. Rajah 4.15: Import Options (Geometry Tab) Pastikan uncheck textbox pada Scale untuk mempastikan objek yang akan diimport tidak akan diskalakan semula kerana pelan lantai yang didigit telah melalui proses penskalaan semasa proses georeferencing. Pilih layer yang ingin diimport masuk ke dalam ruangan kerja permodelan (Rajah 4.16). Layer yang tidak berkenaan boleh diabaikan supaya tidak diimport bersama-sama. Biarkan option yang lain seperti nilai default (Rajah 4.17) dan klik OK. Rajah 4.16: Import Options (Layers Tab) Rajah 4.17: Import Options (Spline Rendering Tab) Setelah pelan lantai yang telah didigit dimasukkan ke dalam ruangan kerja, ia mesti ditukarkan ke format yang membenarkan proses pengeditan dijalankan. Caranya ialah dengan mengklik pelan lantai di dalam ruangan kerja untuk memilihnya, dan seterusnya klik kanan pada pelan tersebut dan seterusnya pilih Transform > Convert > Convert to Editable Poly (Rajah 4.18). Rajah 4.18: Menu transform Sekarang pada kotak properties sebelah kanan ruangan kerja terdapat beberapa pilihan yang boleh dibuat untuk mengedit pelan lantai tersebut. Rajah 4.19: Properties box (Selection) Terdapat beberapa pilihan (Selection) jika dilihat pada Rajah 4.19 sebelum ini. Pilihan yang boleh dibuat ialah Vertex, Edge, Border, Polygon dan Element. Pilihan Vertex akan membenarkan pengguna untuk memilih vertex yang terdapat di dalam model yang aktif. Begitu juga dengan pilihan edge dan border. Manakala bagi pilihan polygon, pilihan yang dibenarkan ialah seluruh permukaan poligon yang dipilih. Contohnya jika pengguna klik pada satu permukaan pada objek maka seluruh permukaan tersebut akan dipilih. Manakala bagi pilihan element (Rajah 4.20), apabila pengguna klik pada seseuatu objek, seluruh objek tersebut akan dipilih. Pilihan element akan sering digunakan di dalam proses reka bentuk kajian ini. Rajah 4.20: Penggunaan element bagi reka bentuk model Klik pada element dan seterusnya klik pula pada bahagian dinding (ketebalan) bangunan. Bahagian (poligon) dinding bagi keseluruhan bangunan akan ditonjolkan (highlight) dengan warna merah (Rajah 4.20). Element yang diwarnakan dengan warna merah menunjukkan pengguna telah membuat pemilihan bahagian poligon yang hendak diubahsuai. Kemudiannya, klik fungsi extrude pada pilihan Edit Polygons di sebelah kanan ruangan kerja. Fungsi ini akan membina ketinggian pada dinding yang telah dipilih. Masukkan nilai ketinggian dinding bangunan pada Extrusion height (Rajah 4.21). Klik OK dan seterusnya dinding bangunan akan dihasilkan. Rajah 4.21: Fungsi Extrude bagi membentuk dinding bangunan Bagi mendapatkan ukuran ketinggian model bangunan (contohnya seperti ketinggian dinding, lantai, koridor, tingkap pintu dan sebagainya), pada kebiasaannya keratan rentas bagi pelan bangunan dapat memberikan maklumat tersebut. Akan tetapi pelan tersebut tidak dapat diperolehi. Maka dengan ini kerja pengukuran (asas) telah dilakukan bagi mendapatkan dimensi bangunan yang sebenar. Berikut merupakan beberapa dimensi yang telah diukur mengikut ukuran sebenar bangunan: Dimensi objek di dalam bangunan: Ketinggian aras bangunan: 3.9 m, - Ketebalan lantai bangunan: 0.3 m, - Ketinggian ruang bilik: 3.6 m, Tingkap/Jendela: - Lebar: 0.97 m - Tinggi: 0.94 m Pintu: - Lebar: 0.92 m - Tinggi: 2.14 m - Lebar (2 pintu) : 1.47 m. Ketinggian koridor: 0.95 m. Ukuran seperti pintu, tingkap dan lain-lain adalah berbeza bagi sesetengah tempat/bilik. Akan tetapi nilai yang digunakan adalah nilai ukuran dimensi yang biasa/purata bagi hampir kesemua objek tersebut. Pembinaan objek spatial 3D yang akan direka bentuk adalah berdasarkan kepada nilai dimensi yang dinyatakan sebelum ini. Fungsi extrude yang digunakan untuk mereka bentuk dinding dibuat berdasarkan ketinggian ruang bilik iaitu 3.6m. Nilai 3.9m tidak digunakan kerana baki nilai 0.3m akan digunakan (mewakili) pada data lantai. Rajah 4.22 merupakan hasil dinding bangunan yang dihasilkan dengan menggunakan fungsi extrude. Rajah 4.22: Dinding bangunan dihasilkan menggunakan fungsi Extrude Proses yang sama juga diaplikasikan terhadap dinding-dinding bangunan yang lain yang masih lagi tidak dibentuk. Bagi lantai, nilai Extrusion height yang dimasukkan ialah 0.3m. Rajah 4.23 menunjukkan dinding dan lantai bangunan yang telah siap dibentuk. Bagi aras-aras yang lain, proses yang sama juga boleh diadaptasikan/digunakan dan seterusnya model 3D bagi aras-aras tersebut boleh disimpan dan boleh diteruskan dengan proses reka bentuk yang selanjutnya. Rajah 4.23: Dinding bangunan dan lantai yang telah siap dibentuk 4.3.4.3 Reka Bentuk Model Objek 3D Terdapat beberapa objek spatial yang lain yang perlu dibina bagi melengkapkan lagi model bangunan yang dibina. Antara objek-objek yang hendak dibina ialah seperti: i) tangga, ii) koridor, iii) bumbung, iv) pondok wakaf dan bangku kayu Setiap objek tersebut diterangkan dengan lebih terperinci pada bahagian seterusnya. Penerangan tersebut merangkumi proses reka bentuk objek-objek spatial. Perbincangan setiap proses ini adalah seperti berikut: i) Tangga Proses menghasilkan model tangga di dalam perisian permodelan 3D yang digunakan di dalam kajian ini adalah agak mudah. Ini kerana terdapat fungsi yang khusus disediakan bagi menghasilkan tangga berdasarkan kemahuan pengguna. Fungsi tersebut boleh digunakan dengan klik pada tab Create > Geometry dan pilih Stairs pada pilihan yang disediakan seperti yang ditunjukkan pada Rajah 4.24: Rajah 4.24: Pilihan Stairs untuk mereka bentuk tangga Terdapat beberapa pilihan bagi jenis tangga yang hendak dibina. Pilihan yang disediakan ialah L Type Stair, Spiral Stair, Straight Stair dan U Type Stair. Bagi kawasan bangunan kajian, tangga yang hendak dibina adalah tangga jenis U Type Stair. Klik pada pilihan tangga jenis U Type Stair dan seterusnya lukiskan pada ruangan kerja (Rajah 4.25). Tetapkan dimensi tangga yang sesuai (panjang, lebar dan tinggi). Beberapa modifikasi boleh dilakukan selanjutnya dengan menggunakan menu properties. Rajah 4.25: Reka bentuk tangga menggunakan fungsi reka bentuk U Type Stair yang tersedia di dalam perisian Autodesk 3D Studio Max Modifikasi pada model 3D tangga tersebut boleh dibuat dengan mengubah parameter bagi tangga tersebut. Pada nilai parameter (Rajah 4.26), pastikan Type adalah jenis Closed, Generate Geometry pula tandakan pada checkbox Handrail (left, right) untuk membuat handrail, dan bagi Layout pilih left kerana tangga yang terdapat di dalam kawasan kajian adalah daripada jenis tersebut. Bagi nilai-nilai pada Railings, nilai-nilai yang ada hanya perlu diubah jika pengguna ingin mendapatkan permukaan yang lebih terperinci (detailed) sahaja. Sebarang objek tambahan yang hendak ditambah pada model tangga boleh dilakukan secara manual dengan menggunakan fungsi-fungsi yang disediakan (Rajah 4.27). Rajah 4.26: Nilai parameter yang boleh diubah bagi menghasilkan sebuah tangga mengikut jenis tangga yang dikehendaki pengguna Rajah 4.27: Tangga yang telah siap direka bentuk ii) Koridor Rajah 4.28: Koridor yang telah siap direka bentuk Tiada fungsi khusus yang boleh digunakan untuk membina koridor yang boleh dimasukkan di dalam model bangunan. Proses untuk membina model 3D bagi koridor berlainan dengan proses membina model 3D tangga. Pada kebiasaanya model 3D objek spatial seperti ini direka berdasarkan kreativiti pengguna (Rajah 4.28). Koridor ini direka berdasarkan daripada kotak empat segi dan seterusnya dilukis beberapa objek dan seterusnya dijadikan 3D dengan melakukan beberapa operasi seperti operasi Boolean terutamanya. Seterusnya fail (3D) ini disimpan sebagai fail *.max dan seterusnya boleh digunakan bersama dengan model bangunan FKSG bagi proses selanjutnya nanti. iii) Bumbung Bumbung bangunan FKSG mempunyai keunikan yang tersendiri kerana mempunyai beberapa ukiran yang melambangkan seni reka bentuk bangunan FKSG. Bumbung yang hendak dibina adalah perlu berdasarkan kepada pelan lantai aras yang paling atas untuk mendapatkan ketepatan dimensi dan bagi ukiran pula ianya dilukis dengan menggunakan perisian yang sama. Hasil daripada lukisan mewakili ukiran pada bahagian bumbung setelah dijadikan ianya berbentuk 3D adalah seperti Rajah 4.29. Rajah 4.29: Hasil reka bentuk ukiran yang terdapat pada bumbung bangunan FKSG Seterusnya bahagian atas dan bawah bumbung FKSG dibina dengan menyatukan beberapa objek geometri asas (Rajah 4.30) untuk menghasilkan bumbung yang akan dimasukkan ke dalam model bangunan 3D yang sebenar bagi proses reka bentuk yang seterusnya. Rajah 4.30: Hasil reka bentuk ukiran yang terdapat pada bumbung bangunan FKSG serta gabungan beberapa objek geometri yang lain bagi membentuk model bumbung untuk digunakan dengan model bangunan yang sebenar Akhir sekali, bagi membina bumbung untuk keseluruhan bangunan FKSG, pelan lantai bagi aras yang paling atas digunakan bersama-sama dengan model bumbung untuk meletakkan bumbung pada tempat dan kedudukan (skala) yang betul. Proses reka bentuk perlu dilakukan dengan teliti (secara manual) kerana kedudukan bangunan kajian adalah unik yang berada di atas bukit/tanah tinggi. Hasil akhir adalah satu model bumbung yang lengkap bagi keseluruhan bangunan kajian dan seterusnya ianya boleh digunakan bersama-sama dengan model bangunan yang sebenar (Rajah 4.31). Rajah 4.31: Hasil keseluruhan reka bentuk ukiran dan bumbung bangunan FKSG iv) Pondok Wakaf Rajah 4.32: Pondok wakaf Rajah 4.33: Bangku kayu di Dataran Harmonis (C06) Di samping koridor, tangga dan juga bumbung bangunan, pondok wakaf juga merupakan di antara objek model spatial 3D yang boleh diletakkan bersamasama dengan model bangunan sebenar bagi menghasilkan suatu persekitaran 3D yang lebih realistik. Pondok wakaf (Rajah 4.32) dan bangku kayu (Rajah 4.33) direka bentuk dengan teliti mengikut skala bagi setiap entiti spatial tersebut di dunia yang nyata. Kedua-dua hasil ini kemudiannya disimpan di dalam fail yang berasingan supaya ianya boleh digunakan bersama-sama dengan bangunan FKSG untuk proses reka bentuk yang selanjutnya nanti. 4.3.4.4 Tekstur Model Bangunan dan Objek-objek 3D Tekstur yang digunakan di dalam kajian ini adalah tekstur sebenar bagi objek spatial di dunia yang nyata. Ini adalah berdasarkan tujuan kajian untuk menghasilkan analisa rangkaian 3 dimensi di dalam persekitaran 3D. Persekitaran 3D yang dimaksudkan adalah bukan sahaja terdiri daripada objek 3D akan tetapi termasuk tekstur sebenar objek tersebut untuk menjadikan persekitaran 3D tersebut seakanakan realistik sepertimana yang terdapat pada dunia yang sebenar. Tekstur-tekstur sebenar di ambil dengan menggunakan kamera digital, setiap objek spatial yang penting di dalam model bangunan diambil untuk digunakan bersama-sama model. Seterusnya gambar tersebut akan dilakukan penyuntingan dengan menggunakan perisian grafik untuk memperbetulkan sebarang herotan pada gambar, membetulkan tint pada gambar tersebut, menseragamkan warna akibat kesan daripada cuaca persekitaran dan lain-lain. Kesemua proses ini dibuat untuk menghasilkan tekstur yang kelihatan seakan-akan pengguna melihat permukaan bangunan kajian yang sebenar (Rajah 4.34). Terdapat pelbagai cara untuk meletakkan tekstur pada model 3D bangunan. Kaedah-kaedah tersebut pada konsep asasnya ialah setiap permukaan yang telah dipilih dan dilekatkan tekstur padanya, maklumat bagi setiap permukaan termasuk koordinat pemetaan tekstur pada model tersebut akan disimpan di dalam fail model yang digunakan. Beberapa sub kajian telah dijalankan di dalam kajian ini bagi mendapatkan satu kaedah yang terbaik dalam penggunaan tekstur. Satu langkah terbaik dari segi penjimatan masa kiraan komputasi dan storan komputer ialah dengan mencipta satu set tekstur bagi keseluruhan permukaan dinding. Dengan cara ini ia dapat mengurangkan penggunaan storan komputer termasuklah kiraan komputasi semasa melakukan proses permodelan. Pada kebiasaannya cara yang dilakukan untuk menampal tekstur pada model adalah berdasarkan permukaan poligon yang dipecah-pecahkan mengikut permukaan dinding. Sebagai contoh, sesebuah permukaan dinding mempunyai 8 set poligon yang kecil. Kelapan-lapan poligon tersebut diletakkan tekstur satu per satu. Contohnya tekstur pintu pada poligon pertama, tekstur tingkap pada poligon kedua dan seterusnya. Kaedah tersebut boleh digunakan, akan tetapi ia menggunakan ruangan storan komputer yang agak besar dan agak lambat untuk proses pengiraan komputasi. Cara yang terbaik iaitu dengan mencipta keseluruhan set tekstur bagi satu permukaan dinding adalah dengan cara membuat satu imej tekstur yang disunting dengan menggunakan perisian grafik bagi keseluruhan dinding. Imej tekstur tersebut mengandungi pintu, tingkap dan lain-lain padanya. Ini menjimatkan ruangan storan komputer dan meningkatkan prestasi pengiraan komputer. Contoh, bagi sebuah permukaan dinding (yang mempunyai 8 set poligon kecil) hanya ditampal satu imej tekstur sahaja bagi permukaan dinding tersebut. Ini dapat menjimatkan masa semasa proses permodelan ini. Contoh bagi tekstur yang telah disunting bagi keseluruhan set dinding dapat dilihat pada Lampiran B. Tekstur seterusnya digunakan bersama-sama dengan model bangunan menggunakan fungsi yang telah disediakan bersama dengan perisian dan koordinat pemetaan bagi setiap tekstur diambil kira bagi menghasilkan pemetaan tekstur yang sempurna. Rajah 4.34: Beberapa tekstur sebenar bagi objek spatial 3D yang telah disunting untuk memperbetulkan herotan, warna, dan sebagainya bagi kegunaan permodelan model 3D bangunan kajian 4.3.5 Jaringan Rangkaian 3D Pendigitan laluan ini boleh dilakukan di dalam CAD. Walaubagaimana pun, kaedah pendigitan laluan tersebut ada sedikit perbezaan dengan pendigitan laluan bagi jaringan 2D. Arahan yang digunakan untuk mendigit jaringan 3D ialah arahan 3D polyline (3DPOLY). Setelah beberapa penelitian dibuat di dalam kajian ini, terdapat beberapa syarat yang ditetapkan semasa melakukan pendigitan rangkaian ini. Ini bertujuan untuk mengelakkan kesilapan pengiraan shortest route pada hasil akhir analisis nanti. Syarat-syarat tersebut ialah pendigitan yang dilakukan mestilah menggunakan arahan 3DPOLY yang terdapat di dalam perisian CAD. Ini kerana, pengaturcaraan yang dibuat untuk membaca fail CAD ini adalah berdasarkan arahan 3DPOLY ini. Arahan lain boleh digunakan akan tetapi pengaturcaraan perlu diubah berdasarkan jenis data yang hendak dibaca dan ditapis nanti. Seterusnya, jika terdapat persilangan laluan bagi pendigitan yang dilakukan, persilangan yang dibenarkan ialah persilangan yang tidak melebihi 2 laluan/garis (5 nod termasuk nod persilangan). Ini kerana jaringan yang direka bentuk ini adalah berpandukan daripada corak atau pun patern graf. Ini bagi mengelakkan pertindihan laluan yang banyak dan akhirnya menghasilkan laluan yang tidak praktikal bagi kegunaan pengguna. Syarat yang paling penting sekali ialah jika terdapat laluan yang bertindih dan laluan itu juga mempunyai ketinggian (z) yang sama, pendigitan harus dilakukan pada titik persilangan antara laluan yang pertama dengan laluan yang kedua. Aplikasi tidak akan menghadapi sebarang masalah jika syarat ini tidak dipenuhi akan tetapi hasil pengiraan bagi analisis akan terdapat ralat. Ini kerana jika pendigitan tidak dibuat pada titik persilangan laluan, ia menunjukkan laluan tersebut seolah-olah seperti sebuah flyover yang melalui di bahagian atas laluan yang pertama tadi. Oleh itu, laluan yang hendak didigit perlulah dirancang dengan teliti untuk mengelakkan sebarang permasalahan seperti yang dinyatakan berlaku. Ini kerana pendigitan rangkaian 3D mementingkan elemen ketinggian dalam prosesnya. Proses pendigitan boleh dilakukan dengan menggunakan model bangunan bagi setiap aras yang telah siap dibina. Model aras bangunan tersebut boleh diimport masuk ke dalam perisian CAD (Rajah 4.35). Rajah 4.35: Contoh model aras bangunan yang dibuka di dalam CAD Pendigitan boleh dilakukan terus ke dalam model bangunan ini dengan menggunakan arahan 3DPOLY. Setelah selesai proses pendigitan, simpan fail ini di dalam format AutoCAD 2000 DXF (*.dxf) untuk proses yang selanjutnya. Rajah 4.36 merupakan contoh hasil pendigitan laluan bagi aras 1 bangunan kajian. Rajah 4.36: Rangkaian 3D bagi aras 1 yang diwarnakan dengan warna ungu yang ditunjukkan secara pandangan Planimetri (atas) dan pandangan Perspektif (bawah) 4.3.6 Pengaturcaraan Rajah 4.37 merupakan carta alir untuk menunjukkan sub-sub aktiviti yang terdapat di dalam aktiviti pengaturcaraan. Reka bentuk Dalaman Pengaturcaraan Converter Topology Attribute Aplikasi Utama Pengujian Rajah 4.37: Carta alir sub-sub aktiviti dalam aktiviti pengaturcaraan Daripada carta alir yang ditunjukkan terdapat beberapa sub-sub aktiviti seperti converter, topology, attribute dan aplikasi utama. Sub aktiviti converter bermaksud menukarkan format bagi data rangkaian 3D yang didigit kepada satu format yang baru iaitu format MWraw Database Interchange (*.Mwraw). Seterusnya sub aktiviti topology ialah untuk membina maklumat topologi pada data rangkaian format MWraw Database Interchange. Setelah selesai, pangkalan data tersebut telah sedia untuk dimasukkan maklumat atribut atau pun maklumat bukan spatial di dalamnya. Proses ini dilakukan di dalam sub aktiviti atribut. Dengan berpandukan kepada ketiga-tiga sub aktiviti ini, maka satu sistem navigasi utama atau pun aplikasi utama kajian boleh dibangunkan. Ini bertujuan supaya aplikasi utama tersebut direka bersesuaian dengan jenis data yang hendak dibaca/digunakan. Aplikasi utama perlu menggunakan data model bangunan 3D dan juga data rangkaian yang telah dimasukkan atribut untuk menjalankan analisis rangkaian 3D dengan menggunakan algoritma Dijkstra. Setiap sub-sub aktiviti ini akan diterangkan pada sub-sub topik yang seterusnya. Bagi setiap pengaturcaraan yang dibuat bagi setiap sub aktiviti ia dinamakan dengan; Converter, Topology, Attribute dan Aplikasi Utama. 4.3.6.1 Converter Tujuan utama pengaturcaraan ini dibuat adalah untuk membaca fail data rangkaian 3D yang telah didigit. Data rangkaian yang didigit mempunyai maklumatmaklumat seperti koordinat titik awal dan titik akhir garisan, warna garisan, ketebalan garisan, dan lain-lain lagi. Apa yang diperlukan oleh algoritma Dijkstra daripada data rangkaian ini ialah koordinat (x, y dan z). Dengan berpandukan daripada koordinat ini pelbagai maklumat lain boleh dibentuk bagi mencapai matlamat kajian ini. 0 SECTION 2 HEADER 9 $ACADVER 1 $DWGCODEPAGE 3 ANSI_1252 9 $INSBASE 10 0.0 20 0.0 30 0.0 9 $EXTMIN 10 0.0 ……. ……. ……. ……. ……. ……. AcDbXrecord 280 1 9B 330 A2 0 ENDSEC 0 EOF Rajah 4.38: Contoh bentuk data rangkaian yang disimpan di dalam komputer (AutoCAD Drawing) Oleh itu, hanya maklumat yang penting sahaja yang perlu diekstrak daripada data asal ini. Converter ini merupakan satu pengaturcaraan yang dibuat untuk membaca fail rangkaian 3D digital yang disimpan dan menukarkan ia kepada format MWraw Database Interchange (*.Mwraw). Data yang disimpan (Rajah 4.38) dikaji untuk melihat susun atur datanya. Setelah semuanya dikenal pasti dan diteliti, maka carta alir (Lampiran C) dan pengaturcaraan (Lampiran D) dibuat untuk mengekstrak maklumat yang berkaitan (koordinat x, y dan z) sahaja. 4.3.6.2 Topology Topologi merupakan perkara yang penting di dalam sesebuah GIS. Topologi menentukan kedudukan objek spatial secara relatif di dalam GIS. Carta alir (Lampiran E) dan pengaturcaraan (Lampiran F) yang dibuat dalam kajian ini pada asasnya adalah untuk membina topologi bagi data MWraw Database Interchange (*.Mwraw). Topologi yang dibina disini adalah untuk menentukan perhubungan antara garisan-garisan (rangkaian). Sebagai contoh, adakah garisan yang pertama bersambung dengan garisan yang ke 100? Persoalan ini akan dijawab dengan menggunakan Topology. Nod yang bertindihan akan dibuang dan hanya satu sahaja yang disimpan. Sebagai contoh (Rajah 4.39), garisan 1 terdiri daripada nod A dan nod B sebagai nod awal dan nod akhir masing-masing. Manakala garisan 2 pula ialah nod B dan nod C. Nod bertindihan yang dibuang ialah nod B. Oleh itu daripada A ke C adalah dengan cara A > B > C dan bukan lagi A > B > B > C. Ini akan menjimatkan ruangan storan data dan juga menjimatkan masa bagi data retrieval. Topologi bagi melihat perhubungan antara nod-nod yang berhubung juga dibina di dalam pengaturcaraan ini. Garisan 2 B C Garisan 1 A Rajah 4.39: Contoh rangkaian (asas) Setelah data MWraw dibina topologinya, maka data rangkaian baru yang mengandungi topologi akan disimpan dalam format MW Database (*.MW). 4.3.6.3 Attribute Sub aktiviti pengaturcaraan ini khusus kepada untuk membaca dan memasukkan maklumat bukan spatial di dalam MW Database. Maklumat bukan spatial yang boleh dimasukkan ialah maklumat nama staf/blik/makmal/dewan kuliah, nombor bilik, aras dan juga blok yang berkenaan (rujuk Lampiran G). Maklumat ini dimasukkan ke dalam pangkalan data kerana semasa proses Kajian Keperluan, maklumat ini merupakan antara maklumat yang perlu ada dalam aplikasi bagi pengguna melakukan navigasi di dalam bangunan kajian. Antara muka bagi pengaturcaraan ini ditunjukkan dan diterangkan di dalam bab yang seterusnya. Pangkalan data MW yang telah dimasukkan atribut disimpan di dalam format *.MW (Rajah 4.40). Seterusnya pangkalan data MW ini digunakan untuk analisis rangkaian 3D. 1. 2. 3. 4. 5. - File Header 6. - ID 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. – Sub Header 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. – Empty Slot 32. Header MW File Empty slot Coordinates Topology 1 Topology 2 Attribute information EOF Rajah 4.40: Format Pangkalan Data MW 4.3.6.4 Aplikasi Utama Bagi pengaturcaraan aplikasi utama kajian, ia direka bentuk berdasarkan antara muka pada Rajah 4.4. Pengaturcaraan ini dibuat menggunakan bahasa pengaturcaraan bagi enjin grafik kajian yang berasaskan Microsoft Visual Basic. Setiap fungsi diperincikan dan diteliti. Gambaran bagi aplikasi ini diterang dan ditunjukkan pada bab lima. Carta alir pengiraan laluan terpendek dan pengaturcaraan bagi aplikasi utama dilampirkan pada Lampiran I dan Lampiran J. 4.3.7 Pengujian Aktiviti ini adalah untuk menguji kesemua pengaturcaraan yang telah dibuat. Program yang telah di debug akan dilihat jika terdapat kesalahan major atau minor di dalamnya. Setelah terbukti tiada lagi kesalahan muncul, maka aplikasi telahpun sedia untuk ke fasa operasi aplikasi yang dibina. 4.3 Rumusan Analisa rangkaian di dalam GIS (2D network) memerlukan kedua-dua maklumat spatial seperti jaringan rangkaian jalan raya dan lot sebelum melakukan analisis laluan optima. Jika syarat yang ditetapkan oleh perisian untuk melakukan analisis tersebut dipenuhi, maka analisis boleh dilakukan tanpa sebarang masalah. Data lot digunakan untuk menggambarkan keadaan sebenar muka bumi yang terdiri daripada beberapa binaan bangunan atau pun lot tanah untuk menunjukkan pemilikan individu semasa. Seterusnya data jaringan jalanraya yang ditunjukkan di dalam gambarajah pula digunakan untuk melakukan analisis rangkaian untuk mencari jalan yang terpendek dan sebagainya. Begitu juga situasinya untuk mengaplikasikan analisis rangkaian di dalam kajian ini. Analisis rangkaian 3D yang dibina memerlukan data jaringan rangkaian 3D di samping maklumat objek spatial 3D yang lain sebelum melakukan operasi analisis. Objek spatial 3D yang digunakan di dalam kajian ini ialah model 3D bangunan. Manakala jaringan rangkaian perlu dibina di dalam model bangunan tersebut untuk menunjukkan jalan-jalan yang dibenarkan atau boleh dilalui oleh manusia. Bagi sesetengah kajian yang dilakukan oleh penyelidik GIS, laluan atau pun path (jaringan rangkaian) yang dibina dilakukan secara automatik (Karas et. al., 2006). Menurut Zlatanova (2002), proses pembinaan objek spatial 3D untuk GIS yang dilakukan secara automatik daripada proses projeksi data 2D akan menyebabkan beberapa kehilangan maklumat dan pada akhirnya akan menyukar pengguna GIS untuk melakukan analisis dan interpretasi. Sebagai contoh kesalahan yang paling ketara dalam membina laluan (path) secara automatik ialah laluan tersebut ada yang melalui atau pun merempuh dinding untuk ke koridor luar. Sepatutnya laluan yang teratur adalah melalui pintu yang ada untuk ke koridor dan sebagainya. Merempuh dinding sememangnya adalah laluan yang terpendek akan tetapi ianya tidak praktikal untuk diaplikasikan di dunia yang sebenar. Dengan itu, kajian di dalam tesis ini membina laluan (path) tersebut dengan merujuk kepada kajian yang dilakukan oleh Meijers et. al. (2005) yang membina satu struktur laluan yang teratur dengan berkonsepkan kepada graf. Dengan ini tidak timbul kesalahan seperti laluan rangkaian yang merempuh dinding atau melalui tingkap dan sebagainya. Di dalam bab ini telah diterangkan secara terperinci mengenai aktiviti-aktiviti dan sub-sub aktiviti yang terlibat. Lampiran-lampiran yang disertakan di dalam kajian ini juga memberikan serba sedikit gambaran proses semasa fasa pembangunan aplikasi. Gambaran mengenai reka bentuk fizikal aplikasi dan pengaturcaraan yang dibuat akan diterangkan pada bab yang seterusnya. BAB 5 KEPUTUSAN DAN ANALISIS KAJIAN 5.1 Pendahuluan Bab Bab analisis dan keputusan kajian tertumpu kepada penerangan mengenai hasil kajian iaitu hasil daripada analisis rangkaian terhadap set data rangkaian 3D bagi kawasan kajian iaitu bangunan FKSG. Terdapat beberapa langkah-langkah yang perlu dilakukan sebelum melakukan analisis tersebut. Sebagaimana yang diterangkan pada bab sebelum ini, terdapat beberapa aktiviti yang terlibat di dalam fasa pembangunan. Aktiviti yang ditekankan dalam bab ini adalah hasil aktiviti pengaturcaraan program seperti Converter, Topology, Attribute dan akhir sekali aplikasi utama yang dibangunkan bagi menjalankan analisis rangkaian 3D. Oleh itu, bab ini menunjukkan langkah-langkah menggunakan program tersebut dan juga hasil bagi setiap aktiviti-aktiviti tersebut. Rajah 5.1 menunjukkan kedudukan bagi program yang dibina dan juga kefungsiannya. Carta tersebut juga merupakan langkah-langkah di dalam penyediaan data bagi kegunaan aplikasi utama. Setiap program dan langkah-langkah menggunakannya akan diterangkan di dalam sub topik yang selanjutnya. Model Bangunan 3D Jaringan Rangkaian 3D Format *.3Dstate atau *.wld Format *.MW DATA SPATIAL 3D Shortest Route Statistik Pengiraan Algoritma Dijkstra APLIKASI UTAMA Navigasi 3D HASIL ANALISIS Rajah 5.1: Carta alir bagi kedudukan kefungsian program-program yang dibina dan juga aplikasi utama 5.2 Jaringan Rangkaian 3 Dimensi Daripada Rajah 5.1, dapat dilihat bahawa format jaringan rangkaian yang diperlukan di dalam aplikasi utama kajian ini hendaklah di dalam format MW Database Interchange (*.MW). Format pangkalan data MW dihasilkan dengan menggunakan program yang dibina (Rujuk Bab 4: Reka Bentuk Sistem Navigasi). Program-program yang dinyatakan ialah Converter, Topology dan juga Attribute. 5.3 Antara Muka Converter Pengaturcaraan bagi program Converter secara ringkasnya digunakan untuk membaca fail data rangkaian 3D yang telah didigit dan menyunting maklumat yang terdapat di dalam data tersebut untuk mengambil maklumat yang berkenaan sahaja. Maklumat tersebut merupakan maklumat yang diperlukan bagi algoritma Dijkstra. Seterusnya program Converter ini akan menukarkan format data rangkaian yang didigit menggunakan perisian CAD kepada format MWraw Database Interchange (*.Mwraw). Data ini dikelaskan sebagai data mentah kerana topologi dan juga penyemakan data bertindih secara terperinci masih lagi belum dilakukan. Rajah 5.2 menunjukkan antara muka bagi program ini. Rajah 5.2: Antara Muka bagi program Converter Pada antara muka yang ditunjukkan terdapat 3 menu yang disediakan untuk kemudahan pengguna. Menu-menu tersebut ialah menu File, menu Tools dan menu Help. Manakala di bahagian bawah menu pula merupakan paparan utama bagi data rangkaian CAD yang dibaca dan juga paparan hasil bagi proses penukaran format kepada *.Mwraw Database Interchange (*.Mwraw). 5.3.1 Menu File Terdapat tiga sub menu pada menu File ini. Tiga sub menu tersebut ialah fungsi Load, Save As dan juga Exit Converter. Load digunakan bagi membuka tetingkap untuk mencari dan membuka fail jaringan rangkaian 3D yang didigit menggunakan perisian CAD. Rajah 5.3 menunjukkan proses tersebut. Rajah 5.3: Fungsi Load yang digunakan untuk mencari dan membuka fail jaringan rangkaian 3D Rajah 5.4: Contoh struktur fail jaringan rangkaian 3D yang telah dibuka di dalam program Rajah 5.4 pula menunjukkan fail jaringan rangkaian yang telah didigit dibuka di dalam program dan dipaparkan di paparan utama. Manakala bagi fungsi Save As (Rajah 5.5) pula ianya hanya boleh digunakan apabila data yang telah dibuka telah dilakukan analisis terhadapnya (penukaran format). Fungsi ini bertujuan untuk mencipta satu fail baru berformat *.MWraw bagi rangkaian 3D yang telah dibuka. Shortcut key bagi fungsi ini ialah Ctrl+S. Rajah 5.5: Fungsi Save As Akhir sekali ialah fungsi Exit Converter. Fungsi ini digunakan untuk keluar daripada program ini. Fungsi ini juga boleh digunakan dengan menekan kekunci Ctrl+E sebagai shortcut keys bagi fungsi tersebut. 5.3.2 Menu Tools Di bawah menu Tools terdapat beberapa sub menu atau fungsi. Fungsi tersebut ialah Analysis dan juga Clear Data View (Rajah 5.6). Bagi fungsi Analysis, terdapat dua sub fungsi yang boleh digunakan. Fungsi tersebut ialah View Cordinates dan juga Build MWraw File (Rujuk Rajah 5.7). Rajah 5.6: Menu Tools Rajah 5.7: Analisis yang boleh dilakukan Bagi fungsi View Coordinates, ianya digunakan untuk menganalisis data rangkaian 3D (filtering) dengan mencari maklumat koordinat bagi nod-nod yang terdapat di dalam rangkaian tersebut dan seterusnya setiap set koordinat tersebut diletakkan ID masing-masing (Rajah 5.8). Bagi fungsi Build MWraw file pula, ia menukarkan format data yang didigit kepada format MWraw Database Interchange dan maklumat tersebut seterusnya dipaparkan pada paparan utama bagi program ini (Rajah 5.9). Clear Data View (shortcut key F3) pula adalah untuk memadamkan fail yang dipaparkan pada paparan utama. Setelah fungsi ini dijalankan, analisis tidak dapat dilakukan kerana set data tiada dalam program. Analisis hanya boleh dilakukan jika set data rangkaian dimuatkan semula dengan menggunakan fungsi yang terdapat pada menu File. Rajah 5.8: View Coordinates Rajah 5.9: Build MWraw file 5.3.3 Menu Help Menu ini hanya mempunyai fungsi About (Rajah 5.10). Fungsi ini akan memaparkan maklumat mengenai program ini, kenapa ianya dibina dan seterusnya maklumat fungsi program. Rajah 5.10: Fungsi About memaparkan maklumat berkaitan dengan tujuan Converter dibina 5.4 Antara Muka Topology Bagi Topology, pengaturcaraan yang dibuat pada asasnya adalah untuk membina topologi bagi data MWraw Database Interchange (*.Mwraw) yang telah dibina. Topologi tersebut adalah untuk menentukan perhubungan antara garisangarisan di dalam jaringan rangkaian 3D tersebut. Dengan membina topologi terhadap set data jaringan, persoalan seperti adakah garisan yang ke 3 bersambung dengan garisan yang ke 88 dapat diselesaikan. Nod-nod yang mempunyai maklumat bertindih akan dibuang dan hanya satu nod sahaja yang disimpan. Nod persilangan akan ditetapkan dan pengiraan panjang garisan dilakukan dan disimpan. Setelah data MWraw Database Interchange dibina topologinya, maka data rangkaian baru yang mengandungi topologi akan disimpan dalam format MW Database (*.MW). Rajah 5.11 merupakan paparan antara muka bagi program Topology. Rajah 5.11: Antara Muka Topology Bagi program ini, terdapat tiga menu yang disediakan. Menu-menu tersebut ialah menu File, menu Tools dan juga menu Help. Terdapat butang arahan Generate pada bahagian kanan bawah antara muka program. Butang ini boleh digunakan jika segala proses pembinaan topologi hendak dilakukan secara automatik dan bukannya satu persatu. Namun begitu pembinaan topologi bagi data rangkaian 3D (*.MWraw) boleh juga dilakukan secara manual dengan menggunakan arahan-arahan yang terdapat pada menu-menu yang tertentu. Penerangan selanjutnya adalah mengenai fungsi-fungsi yang terdapat pada menu-menu yang disediakan. 5.4.1 Menu File Bagi menu menu File terdapat tiga sub menu iaitu Load, Save As dan juga Close. Bagi fungsi Load, ianya digunakan untuk membuka tetingkap baru bagi mencari dan membuka fail Mwraw Database Interchange. Rajah 5.12: Fungsi-fungsi yang terdapat pada menu File Namun begitu, program akan melakukan pertanyaan kepada pengguna sama ada untuk melakukan pembinaan topologi secara automatik atau pun tidak (Rajah 5.13). Rajah 5.13: Tetingkap pertanyaan bagi automasi pembinaan topologi Jika pengguna program memilih Yes, maka program akan dijalankan secara automatik sebagaimana butang arahan Generate. Akan tetapi, pengguna masih boleh melakukan proses tersebut dengan cara manual dengan memilih No. Proses secara manual adalah pengguna perlu memilih fail MWraw Database Interchange, melakukan fungsi pembinaan topologi dan akhir sekali menyimpan maklumat MWraw Database Interchange yang dibina topologinya ke dalam format yang baru iaitu format MW Database (.*MW). Tetingkap Open MWraw File akan dipaparkan untuk memilih fail MWraw yang akan digunakan bagi pembinaan topologi. Rajah 5.14 menunjukkan tetingkap Open MWraw File. Setelah fail MWraw telah dipilih, maka pembinaan topologi boleh dilakukan. Rajah 5.14: Tetingkap Open MWraw File Selain daripada fungsi Load, terdapat juga fungsi Save As dan juga Close. Fungsi Save As hanya akan boleh digunakan apabila set data telah dilakukan pembinaan topologi (Rajah 5.15). Shortcut key bagi fungsi Save As ialah Ctrl+S. Fungsi terakhir ialah fungsi Close (Ctrl+E). Fungsi ini digunakan untuk keluar daripada program Topology ini. Rajah 5.15: Tetingkap Save As fail MW Database (*.MW) 5.4.2 Menu Tools Bagi menu Tools, terdapat 2 fungsi (sub-menu) di bawahnya (Rajah 5.16). Dua fungsi tersebut ialah fungsi Build MW Database Topology dan juga Clear Data View. Selepas data MWraw Database Interchange telah dimasukkan ke dalam program, maka fungsi Build MW Database Topology akan diaktifkan. Ini bertujuan untuk membenarkan set data tersebut dilakukan pembinaan topologi terhadapnya. Apabila fungsi Build MW Database Topology diklik, ia akan mengambil masa seketika bagi melakukan pembinaan topologi tersebut. Apabila selesai, satu tetingkap informasi akan dipaparkan seperti Rajah 5.17 untuk menyatakan MW Database telah siap dibina topologinya. Selepas selesai, fungsi Save As di bawah menu File akan diaktifkan (Rujuk sub topik 5.4.1) untuk menyimpan fail MW Database. Rajah 5.16: Menu Tools dan Sub Menu Tools Rajah 5.17: Tetingkap MW Database file 5.4.3 Menu Help Menu ini mempunyai sub menu About (Ctrl+A) yang boleh digunakan untuk memaparkan maklumat mengenai program ini, kenapa ianya dibina dan seterusnya maklumat fungsi program (Rajah 5.18). Rajah 5.18: Tetingkap About bagi program Topology 5.5 Antara Muka Attribute Pengaturcaraan seterusnya iaitu pengaturcaraan bagi program Attribute digunakan untuk membaca fail data rangkaian 3D MW Database yang telah dibina topologinya. Program ini digunakan untuk melihat maklumat nod-nod dan juga koordinat yang terdapat di dalam set rangkaian tersebut. Program ini juga digunakan untuk memasukkan maklumat atribut ke dalam pangkalan data tersebut. Maklumat atribut dimasukkan berdasarkan ID dan koordinat nod yang berkenaan. Maklumat atribut bagi nod-nod akan dipaparkan. Maklumat atribut yang boleh dimasukkan adalah maklumat Blok, Aras, Nombor Bilik dan juga Nama Bilik/Staff bagi nod yang berkenaan. Rajah 5.19 merupakan paparan antara muka program ini tanpa sebarang set data dimasukkan ke dalam program. Rajah 5.19: Antara Muka program Attribute Bagi program ini, terdapat empat menu yang dibina untuk kegunaan program. Menu-menu tersebut ialah menu File, menu Edit, menu Find, dan menu Help. Menumenu tersebut mempunyai kegunaan-kegunaan yang tertentu. Terdapat sub-menu bagi setiap menu tersebut dan ianya dikelaskan mengikut menu yang ada. Perbincangan mengenai fungsi sub-menu tersebut akan dilakukan pada topik yang seterusnya. Paparan antara muka program ini pada Rajah 5.19 menunjukkan terdapat 8 maklumat yang boleh dipaparkan di dalam text box bersebelahan dengan nama maklumat yang dinyatakan. Maklumat yang dipaparkan oleh program ini ialah maklumat Nodes ID, X-Coordinate, Y-Coordinate, Z-Coordinate, Block Number, Floor Level, Room Number, dan Room Staff/Name. Nodes ID memaparkan ID bagi nod yang terdapat di dalam rangkaian 3D yang digunakan. ID ini dihasilkan oleh program Converter semasa menukarkan set data CAD kepada MWraw Database Interchange. X, Y dan Z Coordinates merupakan maklumat koordinat bagi nod yang memiliki ID tersebut. Seterusnya maklumat atribut yang terdapat di dalam pangkalan data akan dipaparkan menerusi text box Floor Level, Room Number, Room Staff/Name. Kesemua ini adalah maklumat atribut bagi ID dan set koordinat nod tersebut. 5.5.1 Menu File Menu File ini dibina untuk mengelaskan dua fungsi ini menjadi sub menunya. Sub menu tersebut ialah fungsi Load dan juga fungsi Exit MW File Reader. Rajah 5.20 menunjukkan sub-menu di bawah menu File. Rajah 5.20: Sub-menu bagi menu File Bagi fungsi Load, ianya digunakan untuk membuka set data MW Database ke dalam program. Bagi kegunaan Data Browsing, pengguna program boleh membuka set data (*.MW) ke dalam program dan kesemua set nod yang terdapat di dalam set data akan dipaparkan satu persatu. Manakala bagi fungsi Exit MW File Reader pula digunakan untuk keluar daripada program ini. Shortcut key bagi fungsi ini ialah Ctrl+E. Rajah 5.21 merupakan tetingkap Open yang dipaparkan selepas menggunakan fungsi Load. Rajah 5.21: Fungsi Load 5.5.2 Menu Edit Terdapat empat sub menu di bawah menu Edit. Keempat-empat ini mempunyai fungsi yang tertentu. Sub-menu tersebut ialah fungsi Start Editing, Insert Attribute, Stop Editing dan juga Clear Data View. Keempat-empat fungsi ini tidak akan diaktifkan apabila tiada data dimasukkan ke dalam program. Apabila set data dimasukkan ke dalam program, fungsi Start Editing dan Clear Data View akan diaktifkan untuk menunjukkan proses mengedit boleh dilakukan. Rajah 5.22 menunjukkan fungsi-fungsi yang diaktifkan apabila set data telah dimasukkan ke dalam program dengan menggunakan fungsi Load pada menu File. Rajah 5.22: Sub-menu pada menu Edit Fungsi Start Editing digunakan untuk memulakan proses pengeditan iaitu proses memasukkan maklumat atribut ke dalam program. Apabila fungsi ini diklik, maka fungsi Insert Attribute dan juga Stop Editing yang sebelum ini tidak diaktifkan, diaktifkan bagi kegunaan di dalam proses pengeditan data. Manakala bagi fungsi Start Editing yang sudah diklik, ianya pula tidak diaktifkan menandakan bahawa mod program berada di dalam mod pengeditan. Fungsi Start Editing dibina adalah untuk langkah-langkah keselamatan supaya pengguna tidak mengubahsuai data yang ada secara tidak sengaja. Proses memasukkan maklumat atribut hanya boleh dilakukan jika fungsi Start Editing digunakan. Gambarajah 5.23 menunjukkan fungsi Start Editing diklik dan hasilnya fungsi Insert Attribute dan Stop Editing diaktifkan. Rajah 5.23: Fungsi Start Editing tidak diaktifkan Fungsi Insert Attribute digunakan untuk memasukkan maklumat atribut bagi nod yang berkenaan. Sebagai contohnya, maklumat yang dipaparkan pada text box Nodes ID ialah nod 867, dan terdapat maklumat atribut bagi nod tersebut yang perlu dimasukkan, maka fungsi Insert Attribut digunakan untuk memasukkan maklumat atribut nod tersebut. Sebagaimana yang dinyatakan sebelum ini, maklumat atribut yang boleh dimasukkan ke dalam pangkalan data ialah maklumat atribut mengenai nama blok, maklumat aras, nombor bilik dan juga nama bilik atau staff. Oleh itu bagi memudahkan proses memasukkan maklumat atribut, tetingkap kemasukan data bagi setiap maklumat atribut yang dinyatakan dibina untuk mengelakkan daripada berlakunya kesilapan kemasukan maklumat ke dalam MW Database. Empat tetingkap dibina bagi proses ini. Apabila fungsi Insert Attribute diklik atau pun dengan menggunakan shortcut key F9, tetingkap yang pertama (Step 1) adalah tetingkap untuk memasukkan nilai atau pun maklumat nama blok. Rajah 5.24 menunjukkan maklumat nama blok yang dimasukkan ke dalam pangkalan data. Rajah 5.24: Tetingkap Insert Attribute – Step 1 digunakan untuk memasukkan maklumat nama blok Setelah selesai memasukkan maklumat tersebut, tetingkap kedua akan dipaparkan. Ini adalah untuk memasukkan nilai atau pun maklumat aras bagi ID nod yang berkenaan. Ini merupakan Step 2 bagi proses kemasukan atribut. Rajah 5.25 pula menunjukkan gambarajah tetingkap tersebut. Rajah 5.25: Tetingkap Insert Attribute – Step 2 digunakan untuk memasukkan maklumat aras Seterusnya, langkah ketiga ialah proses memasukkan nilai atau maklumat nombor bilik. Tetingkap seperti sebelumnya akan dipaparkan untuk proses kemasukan maklumat nombor bilik (Rajah 5.26). Rajah 5.26: Tetingkap Insert Attribute – Step 3 digunakan untuk memasukkan maklumat nombor bilik Akhir sekali ialah proses memasukkan maklumat nama bilik atau nama staff. Proses yang sama juga diaplikasikan seperti sebelum ini (Rajah 5.27). Rajah 5.27: Tetingkap Insert Attribute – Step 4 digunakan untuk memasukkan maklumat nama bilik Maklumat yang telah siap dimasukkan akan dipaparkan pada text box di dalam program. Rajah 5.28 menunjukkan contoh nod yang tidak dimasukkan maklumat atribut dan seterusnya Rajah 5.29 pula menujukkan contoh nod yang dimasukkan nilai atribut kepadanya. Rajah 5.28: Contoh nod yang tiada atau pun tidak dimasukkan maklumat atribut Rajah 5.29: Contoh nod telah dimasukkan maklumat atribut Maklumat-maklumat atribut yang telah dimasukkan menggunakan fungsi Insert Attribute dipaparkan di dalam program. Akan tetapi, maklumat ini hanya akan dipaparkan secara sementara sahaja. Jika program ini ditutup tanpa maklumat ini disimpan terlebih dahulu, maka maklumat atribut tersebut akan dipadamkan. Ini kerana bagi mengelakkan sebarang kesilapan berlaku semasa proses memasukkan maklumat atribut tersebut. Jika maklumat atribut yang dimasukkan disimpan terlebih dahulu sebelum program ditutup, maka maklumat atribut tersebut akan disimpan secara kekal. Untuk menyimpan maklumat tersebut, fungsi Stop Editing perlulah digunakan. Apabila fungsi ini digunakan, satu tetingkap informasi dipaparkan untuk bertanyakan pada pengguna sama ada pengguna mahu menyimpan (Save) maklumatmaklumat yang telah dimasukkan semasa mod pengeditan diaktifkan (Rajah 5.30). Jika pengguna memilih Yes, maka maklumat tersebut akan disimpan (Rajah 5.31). Jika No dipilih, maka maklumat yang dimasukkan akan dipadamkan oleh program. Rajah 5.30: Tetingkap Save As dipaparkan apabila fungsi Stop Editing diklik Rajah 5.31: Tetingkap ini dipaparkan untuk menyimpan maklumat atribut yang telah dimasukkan Akhir sekali ialah fungsi Clear Data View. Ianya digunakan untuk mengosongkan program daripada sebarang set data yang telah dimasukkan semasa menggunakan fungsi Load pada menu File. Fungsi ini juga boleh diaktifkan dengan menggunakan shortcut key F3. 5.5.3 Menu Find Di bawah menu ini terdapat satu sub-menu iaitu Search Phrase. Fungsi ini dibuat bagi memudahkan proses untuk mencari maklumat-maklumat koordinat yang terdapat di dalam pangkalan data yang digunakan. Rajah 5.32 merupakan sub-menu yang terdapat di bawah menu Find. Rajah 5.32: Sub-menu Search Phrase di bawah menu Find Apabila fungsi ini digunakan, satu tetingkap Find akan dipaparkan. Tetingkap ini memerlukan pengguna program untuk memasukkan maklumat koordinat yang hendak dicari. Selepas itu program akan memaparkan nod yang mempunyai nilai koordinat yang berkenaan. Rajah 5.33 menunjukkan tetingkap Find yang dipaparkan oleh program. Rajah 5.33: Tetingkap Find Pengguna boleh memasukkan nilai dan seterusnya menggunakan butang arahan Search untuk mencari maklumat koordinat tersebut. Rajah 5.34 merupakan hasil daripada pencarian yang dilakukan oleh fungsi Find ini. Rajah 5.34: Hasil pencarian menggunakan fungsi Find 5.5.4 Menu Help Menu yang terakhir ini hanya mempunyai sub menu About (shortcut key Ctrl+A) yang digunakan untuk memaparkan maklumat mengenai program ini, kenapa ianya dibina dan seterusnya maklumat fungsi program (Rajah 5.35). Rajah 5.35: Fungsi sub menu About pada menu Help Pada bahagian kanan bawah program, terdapat empat butang arahan untuk navigasi data di dalam program. Di dalam satu set data MW Database, ianya terdiri daripada sejumlah set rekod (nod) yang dipaparkan oleh program satu per satu. Oleh itu, butang arahan bagi navigasi data ini dibina untuk melakukan navigasi data seperti untuk melihat rekod seterusnya, rekod sebelum, rekod yang terakhir dan juga rekod yang pertama. Rajah 5.36 menunjukkan butang arahan navigasi data tersebut. A B C D Rajah 5.36: Butang arahan untuk navigasi data Bagi A, butang arahan ini digunakan untuk kembali kepada rekod yang pertama yang terdapat di dalam MW Database. Apabila program sedang memaparkan rekod yang pertama, butang arahan ini tidak akan diaktifkan. Ini menunjukkan bahawa rekod yang sedang dipaparkan adalah rekod yang pertama di dalam set data tersebut. Butang arahan B digunakan untuk melihat set rekod sebelum set rekod semasa yang dipaparkan oleh program. Jika rekod yang dipaparkan oleh program adalah rekod yang pertama, penggunaan butang arahan B ini akan menyebabkan rekod yang akan dipaparkan seterusnya adalah rekod yang terakhir. Bagi butang arahan C pula, ianya digunakan untuk melihat set rekod yang seterusnya di dalam pangkalan data. Jika rekod yang dipaparkan oleh program adalah rekod yang terakhir, penggunaan butang arahan C ini akan menyebabkan rekod yang akan dipaparkan seterusnya adalah rekod yang pertama kembali. Akhir sekali ialah butang arahan D. Butang arahan tersebut adalah untuk melihat set rekod yang terakhir yang terdapat di dalam MW Database. Apabila rekod semasa yang dipaparkan oleh program adalah rekod yang terakhir, maka butang arahan ini tidak akan diaktifkan. Ini adalah bertujuan untuk menunjukkan bahawa rekod semasa yang dipaparkan oleh program adalah rekod yang terakhir yang terdapat di dalam pangkalan data. 5.6 Paparan dan Penukaran Format bagi Model 3D Bangunan FKSG Model bangunan yang telah direka bentuk sebelum ini (Rujuk Bab 4), dibina di dalam fail yang berasingan bagi setiap aras. Oleh itu, bagi hasil akhir iaitu model 3D lengkap bagi bangunan Fakulti Kejuruteraan Dan Sains Geoinformasi (FKSG), maka setiap fail tersebut perlulah digabungkan (Merge) menjadi satu fail yang mengandungi kesemua aras dan kesemua elemen seperti permukaan tanah dan objek spatial yang lain untuk membentuk satu model 3D bangunan yang lengkap dan realistik. Daripada Rajah 5.1, dapat dilihat bahawa model 3D bagi bangunan FKSG perlulah berada di dalam format World (*.wld) atau pun 3DState (*.3Dstate). Aplikasi utama yang dibangunkan di dalam kajian ini menggunakan enjin 3D State. Enjin 3D State memerlukan model yang digunakan berformat World atau pun 3DState. Format ini boleh dihasilkan dengan menggunakan converter yang disediakan bersama-sama dengan SDK enjin 3D State tersebut. Beberapa langkah dan syarat perlu dipatuhi untuk melakukan proses ini dengan menggunakan converter tersebut. Rajah 5.37 menunjukkan model 3D bangunan FKSG yang telah digabungkan untuk membentuk satu bangunan FKSG yang lengkap. Rajah tersebut ditunjukkan berdasarkan pandangan mengikut blok-blok yang terdapat di dalam bangunan FKSG. Pandangan atas Blok C02 Blok C03 Blok C04 Blok C05 Blok C06 Rajah 5.37: Paparan imej model 3D FKSG mengikut blok-blok 5.7 Aplikasi Utama Aplikasi utama ini merupakan aplikasi yang dibangunkan khusus untuk menjalankan analisis rangkaian 3D terhadap set data rangkaian 3D dan memaparkan laluan yang terpendek iaitu hasil daripada analisis tersebut di dalam persekitaran objek spatial 3D dengan menggunakan tekstur yang sebenar bagi model 3D tersebut. Algoritma yang digunakan bagi pengiraan laluan yang terpendek ialah algoritma Dijkstra. Aplikasi ini juga bukan sahaja memaparkan laluan terpendek di dalam persekitaran 3D akan tetapi ia juga membenarkan pengguna aplikasi untuk melakukan navigasi di dalam persekitaran 3D tersebut dengan meniru simulasi pergerakan manusia di dunia yang sebenar. Bagi permulaan aplikasi, splash screen akan dipaparkan terlebih dahulu. Ini bertujuan untuk memberitahu kepada pengguna bahawa aplikasi dalam proses loading. Di bahagian kanan bawah paparan tersebut menunjukkan status peratusan proses loading tersebut. Apabila ianya mencecah 100 peratus, maka aplikasi akan dipaparkan secara automatik dan splash screen tersebut akan dipadamkan. Maklumat-maklumat lain yang terdapat pada paparan ini merupakan maklumat asas bagi aplikasi. Rajah 5.38 menunjukkan paparan antara muka splash screen tersebut. Rajah 5.38: Paparan splash screen pada permulaan aplikasi Setelah proses load bagi paparan splash screen selesai, paparan utama aplikasi akan dipaparkan. Antara muka bagi paparan ini adalah seperti Rajah 5.39. Rajah 5.39: Antara muka utama aplikasi Aplikasi ini direka bentuk berdasarkan reka bentuk awal yang diterangkan di dalam Bab 4 (Rajah 4.4). Ia terdiri daripada header, ruangan paparan utama dan juga butang fungsi atau pun hotspots di bahagian kiri aplikasi. Maklumat yang terdapat pada header ialah maklumat mengenai nama bangunan kawasan kajian iaitu bangunan FKSG. Logo Universiti Teknologi Malaysia (UTM) dimasukkan di dalam header ini sebagai menunjukkan bahawa FKSG terletak di dalam kawasan UTM. Bagi paparan utama aplikasi, diletakkan nama aplikasi di tengah-tengah paparan untuk memberitahu kepada pengguna nama aplikasi tersebut. Bagi hotspot pula, terdapat 9 fungsi yang dibina. Akan tetapi salah satu fungsi tersebut tidak dipaparkan di dalam Rajah 5.39. Ini adalah kerana fungsi tersebut hanya akan diaktifkan (dipaparkan) apabila fungsi lain yang berkaitan digunakan. Fungsi-fungsi yang dibina ialah Home, FKSG Base Plan, 3D Screenshot, 3D Navigation, Database, Shortest Path, Calculate, About dan Log Out. Penerangan lanjut mengenai kesembilan fungsi ini akan dilakukan selanjutnya. Fungsi yang pertama iaitu fungsi Home, digunakan untuk memaparkan kembali nama aplikasi ini sahaja di paparan utama aplikasi. Ini bermakna jika terdapat paparan lain yang dipaparkan pada paparan utama, maka paparan selain daripada nama aplikasi akan dipadamkan dan hanya paparan nama aplikasi sahaja yang akan ditunjukkan. Hasil daripada penggunaan fungsi ini ialah seperti yang ditunjukkan pada Rajah 5.39. Bagi setiap fungsi hotspot ini, apabila ianya digunakan (diklik), maka tulisan bagi setiap hotspot yang digunakan tersebut akan bertukar kepada warna merah. Ini adalah untuk menunjukkan kepada pengguna aplikasi bahawa pengguna telah menggunakan fungsi tersebut. Fungsi tersebut masih lagi boleh digunakan cuma warna tulisan sahaja yang ditukarkan kepada warna merah. Rajah berikut merupakan fungsi Home yang telah diklik oleh pengguna dan warna tulisannya telah berubah. Rajah 5.40: Fungsi yang diklik akan bertukar warna tulisannya Fungsi yang kedua ialah fungsi FKSG Base Plan. Fungsi ini dibina bertujuan untuk menunjukkan paparan bangunan FKSG secara keseluruhan bagi memudahkan pengguna aplikasi untuk mengetahui kedudukan mereka di dalam bangunan. Apabila fungsi ini digunakan, satu paparan baru ditunjukkan kepada pengguna. Paparan ini menunjukkan imej pandangan daripada atas (Planiteric View) bagi bangunan FKSG. Setiap blok-blok yang ada akan ditandakan nama blok masing-masing (Rajah 5.41). Rajah 5.41: Paparan bagi fungsi FKSG Base Plan Paparan pada Rajah 5.41, pengguna boleh melihat gambar model 3D bagi setiap model tersebut. Pengguna hanya perlu menggerakkan cursor ke nama-nama blok tersebut. Tulisan bagi nama blok yang ditunjukkan oleh cursor akan dipaparkan imej model 3D bagi blok tersebut di dalam paparan tersebut (Rajah 5.42). Rajah 5.42: Cursor diarahkan ke tulisan C02 dan imej model 3D blok C02 dipaparkan Setelah selesai menggunakan fungsi FKSG Base Plan, butang arahan OK yang terdapat pada paparan digunakan untuk keluar daripada paparan ini. Ia akan kembali kepada antara muka utama aplikasi. Fungsi yang ketiga ialah fungsi 3D Screenshot. Fungsi ini bertujuan untuk memberikan beberapa snapshots bagi model bangunan 3D yang dibina. Pengguna boleh melihat beberapa imej-imej daripada proses penyediaan model bangunan 3D sehingga model bangunan 3D yang lengkap. Rajah 5.43 menunjukkan paparan yang dikeluarkan apabila fungsi 3D Screenshot digunakan. Rajah 5.43: Paparan imej snapshot model 3D bagi fungsi 3D Screenshot Terdapat 11 imej yang disediakan. Pengguna boleh menggunakan butang navigasi yang terdapat di bahagian bawah paparan untuk melakukan navigasi bagi melihat imej-imej yang disediakan (rujuk Rajah 5.44). Butang A digunakan untuk melihat imej pertama yang disediakan (11 imej). Manakala butang B pula digunakan untuk melihat imej yang seterusnya dan butang C untuk melihat imej yang sebelumnya. Akhir sekali ialah butang D untuk melihat imej yang terakhir yang disediakan di dalam paparan ini. A B C D Rajah 5.44: Butang navigasi bagi melihat imej-imej snapshot Terdapat satu butang arahan yang diletakkan di dalam paparan ini. Butang tersebut ialah butang Flythrough (Rajah 5.45). Ia berfungsi untuk memberikan satu flythrough di dalam bangunan kawasan kajian (FKSG). Apabila butang arahan ini digunakan satu paparan fail video bagi flythough tersebut akan dimainkan secara automatik. Rajah 5.45: Butang arahan Flythrough Pada paparan bagi memainkan fail video flythrough, terdapat beberapa fungsi multimedia yang asas disediakan di sebelah kiri paparan. Ianya boleh dilakukan untuk melihat video tersebut atau melakukan ulangan dan sebagainya. Rajah 5.46 menunjukkan paparan Flythrough termasuk fungsi multimedia yang dinyatakan sebelum ini. Rajah 5.46: Paparan fungsi arahan Flythrough Untuk kembali kepada paparan utama aplikasi, butang arahan OK dan Cancel boleh digunakan untuk menutup paparan yang dibuka sebelum ini. Fungsi hotspot yang keempat ialah fungsi 3D Navigation. Fungsi ini bertujuan untuk membenarkan pengguna melakukan navigasi di dalam persekitaran 3D bangunan FKSG tanpa melakukan analisis rangkaian 3D. Apabila fungsi ini diklik, maka paparan navigasi 3D akan dipaparkan dan pengguna boleh melakukan navigasi dengan menggunakan anak panah yang terdapat pada papan kekunci. Fungsi ini hampir menyamai dengan fungsi Calculate. Akan tetapi fungsi Calculate melibatkan pengiraan analisis rangkaian 3D. Bagi tujuan navigasi pula ianya sama dengan fungsi 3D Navigation cuma fungsi Calculate akan memaparkan laluan yang terpendek untuk ke lokasi destinasi secara grafik. Rajah 5.47 merupakan paparan antara muka bagi fungsi 3D Navigation. Penerangan secara terperinci mengenai navigasi ini akan dilakukan pada penerangan fungsi Calculate. Rajah 5.47: Paparan antara muka 3D Navigation Fungsi seterusnya ialah fungsi Database. Jika dirujuk pada Rajah 5.1, aplikasi yang dibangunkan ini memerlukan dua set data spatial iaitu model bangunan 3D dan juga maklumat rangkaian 3D. Oleh itu, fungsi Database ini bertujuan untuk mengsetkan pangkalan data yang hendak digunakan. Terdapat dua set data yang perlu disetkan di dalam fungsi ini. Dua set tersebut ialah maklumat pangkalan data rangkaian 3D (*.MW) dan juga model 3D (*.3dstate atau *.wld). Rajah 5.48 menunjukkan paparan fungsi tersebut. Rajah 5.48: Konfigurasi pangkalan data bagi kegunaan aplikasi Daripada Rajah 5.48, konfigurasi yang boleh dilakukan ialah konfigurasi terhadap MW Database (3D network data) dan juga Environment Setting (3D model environment). Ini bermakna set data boleh ditukar kepada set data yang lain selain daripada data yang default. Bagi tujuan tersebut, pengguna boleh menggunakan arahan Open yang terdapat di sebelah kanan program. Rajah 5.49 menunjukkan arahan Open tersebut. Pengguna perlu mencari fail yang berkenaan/berkaitan untuk dimasukkan ke dalam aplikasi. Rajah 5.50 pula menunjukkan tetingkap Open File yang dipaparkan selepas arahan Open digunakan. Rajah 5.49: Arahan Open digunakan untuk mencari fail rangkaian atau model 3D Rajah 5.50: Tetingkap Open File dipaparkan untuk mencari fail rangkaian 3D dan model spatial 3D Setiap konfigurasi tersebut perlulah disimpan (save setting) terlebih dahulu. Jika konfigurasi tersebut tidak disimpan, maka konfigurasi yang lama akan digunakan dan konfigurasi baru tidak akan dimasukkan ke dalam aplikasi. Setiap kali data baru disetkan di dalam paparan Database ini, maka arahan simpan (save setting) akan dipaparkan (Rajah 5.51). Jika tidak, arahan tersebut tidak akan diaktifkan. Ini bertujuan untuk memberitahu kepada pengguna aplikasi bahawa terdapat perubahan set data dalam paparan Database dibandingkan dengan data default sebelumnya. Rajah 5.51: Arahan Save Setting diaktifkan selepas data yang baru disetkan di dalam paparan Database ini Satu tetingkap informasi akan dipaparkan selepas pengguna mengklik arahan Save Setting tersebut (Rajah 5.52). Ini untuk memberitahu kepada pengguna aplikasi bahawa set data yang baru telah dimasukkan/digunakan di dalam aplikasi. Seterusnya, setelah selesai, pengguna boleh kembali kepada paparan utama aplikasi dengan mengklik butang OK pada bahagian kanan bawah paparan Database. Rajah 5.52: Tetingkap informasi untuk menyatakan set data yang baru telah dimasukkan ke dalam aplikasi utama Hotspot yang keenam ialah fungsi Shortest Path. Fungsi ini berkait rapat dengan fungsi yang ketujuh iaitu fungsi Calculate. Apabila fungsi Shortest Path digunakan, maka dengan secara automatiknya fungsi Calculate akan diaktifkan. Ini adalah kerana fungsi Shortest Path adalah untuk mengsetkan elemen-elemen kedudukan lokasi semasa dengan lokasi destinasi sebelum melakukan kiraan analisis rangkaian 3D. Apabila elemen-elemen tersebut telah disetkan, maka pengiraan bagi analisis boleh dilakukan dengan menggunakan fungsi Calculate. Rajah 5.53: Fungsi Shortest Path Rajah 5.53 menunjukkan paparan yang dikeluarkan apabila fungsi Shortest Path digunakan. Terdapat dua medan yang perlu diisi oleh pengguna sebelum analisis dapat dijalankan. Medan tersebut ialah nama bilik atau nama staff bagi kedudukan semasa pengguna dengan lokasi destinasi yang hendak dituju pengguna. Pengguna hanya perlu memilih daripada Drop down list yang terdapat pada keduadua medan tersebut. Drop down list tersebut mengandungi nama-nama staff/bilik yang terdapat di dalam bangunan kawasan kajian. Nama-nama yang dimasukkan ke dalam drop down list tersebut adalah maklumat daripada pangkalan data MW yang dimasukkan ke dalam aplikasi. Set data yang berbeza akan memaparkan nama-nama yang berbeza bagi senarai drop down list tersebut. Rajah 5.54 menunjukkan senarai nama-nama yang terdapat di dalam drop down list bagi medan-medan tersebut. Rajah 5.54: Sebahagian nama-nama yang terdapat di dalam drop down list Bagi pengguna yang kurang pasti mengenai kedudukan yang ingin dicarinya, fungsi Search yang disediakan boleh digunakan sebagai pencarian lanjutan (Advance Search). Fungsi ini digunakan untuk filtering maklumat atribut yang ada di dalam pangkalan data berdasarkan maklumat blok, aras bangunan, nombor bilik dan juga nama staff atau bilik. Rajah 5.55 menunjukkan paparan pencarian lanjutan yang dibincangkan ini. Rajah 5.55: Fungsi Search untuk mencari maklumat atribut secara filtering Terdapat empat medan yang ada paparan tersebut. Medan yang dimaksudkan ialah medan nama blok, aras, nombor bilik dan juga nama staff/bilik. Jika diperhatikan, drop down list bagi medan aras, nombor bilik dan juga nama bilik adalah kosong. Akan tetapi berbeza pula bagi medan nama blok. Ini adalah kerana pengguna perlu memasukkan nama blok terlebih dahulu dan kemudiannya medanmedan yang lain akan ditapis (filter) berdasarkan medan nama blok. Sebagai contoh, nama blok yang dimasukkan ialah C05, maka aras yang akan dipaparkan pada medan aras adalah berdasarkan atribut yang melibatkan blok C05 sahaja. Rajah 5.26 menunjukkan situasi tersebut. Rajah 5.56: Aras yang ditapis berdasarkan nama blok Begitu juga bagi nombor bilik. Maklumat pada medan aras perlulah terlebih dahulu disetkan supaya maklumat nombor bilik yang akan dipaparkan hanya berdasarkan atribut yang terdapat pada blok dan aras yang berkenaan sahaja (Rajah 5.57). Rajah 5.57: Nombor bilik yang ditapis berdasarkan nama blok dan aras Setelah ketiga-tiga medan tersebut dipenuhi, maka nama bilik atau staf yang akan dipaparkan di dalam drop down list adalah nama yang memenuhi ketiga-tiga syarat medan nama blok, aras dan juga nombor bilik. Sebagai contoh, nama bilik yang memenuhi syarat nama blok = C05, aras = 4 dan nombor bilik = 405-05 adalah Bilik Seminar Geomatik 2 (Rajah 5.58). Rajah 5.58: Nama bilik yang ditapis berdasarkan nama blok, aras dan nombor bilik Setelah kesemua medan bagi nama blok, aras, nombor bilik dan nama bilik/staff diisi, maka perkara seterusnya ialah untuk menggunakan maklumat tersebut pada fungsi Shortest Path (medan lokasi semasa atau medan lokasi destinasi). Pada paparan fungsi Search ini telah dibina satu fungsi yang tidak memerlukan pengguna aplikasi menghafal nama staff yang terdapat pada paparan Search dan mengisikan maklumat tersebut pada paparan Shortest Path (medan lokasi semasa atau medan lokasi destinasi). Fungsi tersebut adalah fungsi Acquire (Rajah 5.59). Dengan menggunakan fungsi ini, maklumat-maklumat tersebut (yang terdapat pada pada paparan Search) akan dimasukkan ke dalam medan nama bilik/staff bagi medan lokasi semasa atau medan lokasi destinasi pada paparan Shortest Path. Rajah 5.59: Fungsi Acquire pada paparan Search Rajah 5.60 menunjukkan maklumat yang terdapat pada paparan Search dipindahkan ke medan di dalam paparan Shortest Path. Rajah 5.60: Fungsi Acquire yang memindahkan maklumat pada paparan Search ke medan nama staff/bilik paparan Shortest Path Sebelum ini ada dinyatakan bahawa fungsi Calculate hanya akan diaktifkan jika fungsi Shortest Path digunakan. Untuk menggunakan fungsi Calculate, syarat utama yang mesti dipatuhi ialah maklumat lokasi destinasi dan maklumat lokasi semasa mestilah diisi terlebih dahulu sebelum pengiraan analisis rangkaian 3D dilakukan. Jika tidak tetingkap amaran akan dikeluarkan oleh aplikasi untuk memberi amaran bahawa syarat yang dikehendaki tidak dipenuhi. Rajah 5.61 menunjukkan amaran tersebut. Rajah 5.61: Amaran yang dipaparkan kerana syarat utama bagi fungsi Calculate tidak dipenuhi Maklumat-maklumat ini diperlukan oleh analisis dan algoritma yang bakal dijalankan untuk menentukan lokasi semasa dan destinasi yang dituju supaya jalan yang terpendek untuk ke lokasi destinasi boleh dikira. Setelah maklumat-maklumat utama tersebut dipenuhi, maka fungsi Calculate boleh dijalankan dengan sempurna. Pengiraan bagi analisis rangkaian 3D akan mengambil masa sedikit. Setelah selesai satu paparan statistik pengiraan analisis rangkaian 3D dipaparkan. Rajah 5.62: Paparan statistik pengiraan algoritma Dijkstra Daripada Rajah 5.62, statistik ini memaparkan beberapa maklumat mengenai analisis rangkaian 3D tersebut. Maklumat tersebut ialah seperti Status, Date, Time Executed, Processing Stopped, Nodes Calculated, Nodes Used, Distance (Shortest), informasi lokasi semasa dan juga informasi lokasi destinasi. Status merupakan maklumat mengenai status pengiraan yang dijalankan sama ada berjaya atau pun tidak berjaya yang bermaksud tiada jalan yang menghubungkan antara lokasi semasa dengan lokasi destinasi yang hendak dituju. Bagi data rangkaian yang tidak lengkap (corrupted) maka status yang dipaparkan ialah stopped (dihentikan). Ini menunjukkan bahawa data yang digunakan tidak lengkap dan analisis (algoritma Dijsktra) tidak dapat dijalankan. Date merupakan maklumat tarikh analisis tersebut dijalankan. Time Executed dan Processing Stopped merupakan maklumat masa pengiraan dimulakan dan masa pengiraan ditamatkan. Ini adalah bertujuan untuk melihat sela masa yang diambil untuk menjalankan analisis tersebut. Sela masa ini adalah bergantung kepada jumlah nod yang terdapat di dalam pangkalan data 3D iaitu MW Database. Nodes Calculated pula memaparkan maklumat mengenai jumlah nod (nod) yang dikira oleh algoritma Dijkstra semasa melakukan analisis. Tidak semua nod yang dikira oleh algoritma Dijkstra akan dipilih sebagai nod yang berada di laluan yang terpendek. Hanya beberapa nod sahaja daripada jumlah nod yang dikira akan termasuk di dalam laluan yang terpendek tersebut. Nodes Used merupakan maklumat mengenai jumlah nod-nod yang terpilih yang berada di dalam laluan terpendek tersebut. Jumlah Nodes Used adalah mesti kurang atau sama dengan jumlah Nodes Calculated dan tidak boleh lebih. Maklumat Distance (Shortest) pula memaparkan maklumat mengenai jarak antara lokasi semasa dengan lokasi destinasi yang ditetapkan oleh pengguna. Nilai jarak tersebut adalah dalam nilai piawaian meter. Di bahagian bawah paparan statistik ini terdapat maklumat mengenai lokasi semasa dan lokasi destinasi yang telah ditetapkan oleh pengguna aplikasi. Maklumatmaklumat yang dipaparkan adalah maklumat seperti set koordinat bagi lokasi tersebut (x, y dan z), nama bilik/staff, nombor bilik, aras dan juga nama blok bagi setiap lokasi (semasa dan destinasi). Ini bertujuan untuk memaparkan kepada pengguna aplikasi sama ada pengiraan yang dilakukan adalah betul dan memenuhi kehendak pengguna tersebut. Jika diperhatikan pada Rajah 5.62, di bahagian kanan atas paparan statistik tersebut terdapat 3 paksi dilukiskan bersebelahan dengan maklumat statistik pengiraan analisis. Paksi tersebut adalah paksi x, y dan z. Ia sebenarnya merupakan sebuah graf yang akan melukiskan kesemua jaringan rangkaian 3D yang terdapat dalam MW Database yang digunakan. Jaringan rangkaian 3D yang dilukiskan di dalam graf tersebut diwarnakan dengan warna kuning. Akan tetapi di dalam graf itu juga dilukiskan rangkaian atau pun laluan yang terpendek yang dipilih oleh algoritma ketika melakukan analisis rangkaian 3D tersebut. Jaringan yang terpilih ini diwarnakan dengan warna merah. Ini adalah bertujuan untuk memberikan warna yang menonjol daripada warna keseluruhan rangkaian yang terdapat di dalam MW Database (yang diwarnakan dengan warna kuning). Paparan yang lengkap mengenai statistik ini akan ditunjukkan selanjutnya pada topik keputusan analisis yang dijalankan. Terdapat dua arahan di bahagian kanan (bawah) paparan statistik tersebut. Arahan tersebut ialah arahan Navigation dan arahan Cancel (rujuk Rajah 5.63). Arahan Navigate digunakan untuk pengguna melakukan navigasi di dalam persekitaran 3D. Ia mempunyai persamaan dengan fungsi hotspot 3D Navigation. Perbezaannya ialah, arahan Navigate ini akan membenarkan pengguna melakukan navigasi berserta dengan maklumat laluan yang terpendek daripada lokasi semasa ke lokasi destinasi. Pengguna akan disetkan di lokasi semasa dan seterusnya laluan yang terpendek tersebut akan dipaparkan dengan simbol anak panah yang terdapat pada permukaan lantai dan anak panah tersebut akan menunjukkan arah ke lokasi destinasi. Pengguna hanya perlu mengikut anak panah tersebut untuk ke lokasi destinasi (rujuk Rajah 5.64). Arahan Cancel pula digunakan untuk kembali kepada paparan utama aplikasi utama. Rajah 5.63: Arahan Navigate dan Cancel Apabila navigasi 3D diaktifkan tidak kiralah sama ada menggunakan fungsi hotspot 3D Navigation atau pun arahan Navigate ini, dengan secara automatik fungsi hotspot bagi fungsi Database tidak akan diaktifkan. Ini adalah kerana persekitaran bangunan/model 3D telah dimuatkan ke dalam aplikasi. Maka pangkalan data yang telah dikonfigurasikan tidak boleh diubahsuai untuk mengelakkan daripada berlakunya kesilapan (program crash). Pada paparan antara muka navigasi 3D, terdapat beberapa maklumat yang dipaparkan pada sebelah kanan antara muka tersebut (Rajah 5.64). Maklumatmaklumat tersebut adalah mengenai koordinat lokasi semasa (ketika melakukan navigasi) yang terdiri daripada koordinat x, y dan z. Maklumat status bagi navigasi juga turut dipaparkan untuk menunjukkan sama ada pengguna sedang bergerak ke hadapan atau ke belakang dan ke kiri atau ke kanan. Maklumat-maklumat lain ialah maklumat lokasi semasa (asal) dan maklumat lokasi yang hendak dituju (destinasi) Rajah 5.64: Paparan Navigasi 3D Hotspot About merupakan salah satu fungsi yang dibina untuk menerangkan mengenai tujuan dan mengapa aplikasi utama ini dibina. Tiada analisis yang dapat dilakukan di dalam fungsi ini. Hanya satu paparan baru akan ditunjukkan bagi memaparkan maklumat yang dinyatakan sebelum ini. Rajah 5.65 menunjukkan paparan tersebut. Rajah 5.65: Paparan bagi fungsi About Hotspot yang terakhir ialah fungsi Log Out. Fungsi ini digunakan untuk keluar daripada aplikasi ini. Aplikasi akan ditutup dan segala memori sementara yang disetkan di dalam memori sementara komputer akan dikosongkan. 5.8 Analisis Rangkaian 3D Hasil pengiraan bagi analisis rangkaian yang menggunakan algoritma Dijkstra adalah dalam bentuk format nombor-nombor sahaja. Bagi pengguna yang tidak tahu langkah kerja pengiraan algoritma Dijkstra, agak sukar untuk memahami keputusan analisis yang berada di dalam format nombor-nombor tersebut. Bagi memudahkan pengguna memahami hasil analisis tersebut, persembahan secara grafik bagi hasil analisis adalah yang terbaik. Justeru itu, hasil analisis rangkaian 3D di dalam kajian ini dipersembahkan secara grafik 3D. Jika dirujuk daripada Rajah 5.1, hasil analisis terdiri daripada statistik pengiraan algoritma Dijkstra dan juga navigasi di dalam persekitaran objek spatial 3D. Langkah kerja bagi memaparkan kedua-dua maklumat ini telah diterangkan di dalam sub topik 5.7. Penerangan yang dibuat selanjutnya di dalam topik ini pula adalah mengenai contoh atau pun gunapakai aplikasi utama kajian dengan menggunakan set data spatial 3D yang ada dan seterusnya dijalankan analisis rangkaian 3D. Keputusan dan hasil akan diterangkan bersama-sama dengan langkah kerja yang dibuat. Langkah pertama sebelum melakukan analisis rangkaian ialah aplikasi utama perlulah terlebih dahulu diloadkan ke dalam komputer. Setelah selesai, pastikan set data bagi pangkalan data jaringan rangkaian 3D (MW Database) dan juga persekitaran model spatial 3D (*.3dstate) dikonfigurasi dengan betul. Ianya boleh dilakukan dengan menggunakan fungsi hotspot Database (Rajah 5.66). Rajah 5.66: Konfigurasi set data yang digunakan adalah penting sebelum melakukan analisis rangkaian 3D Setelah pangkalan data yang hendak digunakan telah dikonfigurasi dengan betul, maka analisis rangkaian 3D boleh dijalankan. Dengan menggunakan fungsi hotspot Shortest Path, beberapa medan maklumat perlu diisi sebagai syarat wajib sebelum melakukan analisis. Medan yang perlu diisi tersebut ialah medan nama bilik/staff bagi lokasi semasa dan juga lokasi destinasi yang hendak dituju. Sebagai contoh, lokasi semasa pengguna ialah di bilik Satellite Navigation Research Group (SNAG). Lokasi yang hendak dituju atau pun lokasi destinasi pula ialah bilik Hydro I and Hydro II Lecture Room. Maka medan-medan yang terdapat pada paparan Shortest Path perlulah diisi dengan maklumat-maklumat tersebut (rujuk Rajah 5.67). Rajah 5.67: Lokasi semasa disetkan Satellite Navigation Research Group (SNAG) dan lokasi destinasi disetkan Hydro I and Hydro II Lecture Room sebelum melakukan pengiraan analisis rangkaian 3D Setelah selesai, hotspot Calculate digunakan bagi menjalankan pengiraan laluan yang terpendek. Satu paparan mengenai statistik pengiraan algoritma Dijkstra akan ditunjukkan (Rajah 5.68). Rajah 5.68: Statistik pengiraan algoritma Dijkstra hasil daripada pengiraan laluan yang terpendek daripada bilik Satellite Navigation Research Group (SNAG) ke lokasi destinasi iaitu bilik Hydro I and Hydro II Lecture Room Daripada Rajah 5.68, didapati bahawa status pengiraan tersebut adalah berjaya (Success). Ia mengambil masa pengiraan selama 3 saat. Jumlah nod (nod) yang dikira sepanjang pengiraan ialah sebanyak 396 nod dan jumlah nod yang berada pada laluan yang terpendek ialah 47 nod. Ini bermakna 47 nod yang dipilih akan membentuk laluan (rangkaian) yang terpendek untuk ke lokasi destinasi daripada lokasi semasa. Seterusnya rangkaian yang terpilih tersebut memberikan jarak sejauh 168.1286 meter. Rajah 5.69: Paparan graf hasil pengiraan algoritma Dijkstra Graf pada Rajah 5.69 menunjukkan laluan yang terpendek di dalam rangkaian ditandakan dengan warna merah. Manakala jaringan (laluan) yang tidak dikelaskan di dalam laluan yang terpendek diwarnakan dengan warna kuning. Di bahagian bawah paparan terdapat maklumat mengenai lokasi semasa dan juga lokasi destinasi. Lokasi semasa berada pada blok C06 aras 4 dan lokasi destinasi berada pada blok C04 aras 1. Untuk melakukan navigasi di dalam persekitaran 3D arahan Navigate digunakan. Aplikasi memerlukan sedikit masa untuk menjalankan enjin grafik 3D yang digunakan di dalam kajian ini. Setelah selesai, antara muka navigasi 3D akan dipaparkan seperti Rajah 5.70 berikut: Rajah 5.70: Lokasi awal disetkan di lokasi semasa yang ditetapkan pengguna pada permulaan analisis iaitu di bilik Satellite Navigation Research Group (SNAG) Lokasi awal yang dipaparkan ialah lokasi semasa yang ditetapkan oleh pengguna aplikasi semasa permulaan analisis iaitu di bilik Satellite Navigation Research Group (SNAG). Seterusnya, laluan jalan yang terpendek (rangkaian) tersebut ditunjukkan oleh anak panah yang mengarah ke lokasi destinasi. Anak panah tersebut sebenarnya berada pada laluan yang terpendek yang dikira oleh algoritma Dijkstra. Anak panah tersebut dilukis oleh aplikasi sehingga ia sampai lokasi destinasi. Apabila tiba ke lokasi destinasi, ianya ditandakan dengan tanda OK untuk menandakan bahawa pengguna telah tiba ke lokasi destinasi yang dituju (Rajah 5.71). Rajah 5.71: Lokasi destinasi (Hydro I and Hydro II Lecture Room) akan ditandakan dengan OK bagi menunjukkan pengguna telah tiba ke lokasi destinasi Arahan untuk melakukan navigasi di dalam persekitaran 3D ialah dengan menggunakan anak panah yang terdapat pada papan kekunci (Rajah 5.72). A B C D Rajah 5.72: Anak panah yang terdapat pada papan kekunci Navigasi di dalam paparan ini mengikut simulasi pergerakan manusia (pejalan kaki). Oleh itu, navigasi yang dilakukan di dalam paparan ini adalah seperti berjalan kaki di dalam bangunan FKSG. Oleh itu, kekunci kiri (A) pada Rajah 5.72 digunakan untuk pusing ke kiri. Bagi kekunci atas dan bawah (B dan C) pula, ianya digunakan untuk bergerak ke hadapan dan ke belakang masing-masing. Akhir sekali kekunci kanan (D) digunakan untuk pusing ke kanan. Keempat-empat anak panah pada papan kekunci komputer ini perlu digunakan untuk melakukan navigasi di dalam persekitaran objek spatial 3D iaitu bangunan FKSG. Bagi navigasi pengguna (pergerakan ke hadapan dan ke belakang), aplikasi akan memainkan bunyi pergerakan kaki yang berbunyi seolah-olah seperti manusia sedang berjalan di dalam bangunan. Apabila pengguna melanggar dinding atau pun objek besar yang menghalang laluan navigasi, fail bunyi seperti bunyi manusia melanggar dinding akan dimainkan. Bunyi-bunyi dimasukkan ke dalam aplikasi adalah bertujuan untuk menjadikan proses navigasi 3D yang dilakukan menjadi lebih realistik di samping menggunakan tekstur yang sebenar bagi model bangunan 3D FKSG. Terdapat beberapa fungsi lain yang ditambah di dalam navigasi 3D ini. Di antaranya ialah pengguna boleh mendongak dan tunduk untuk melihat keadaan sekeliling semasa melakukan navigasi. Ini boleh dilakukan dengan menggunakan kekunci A dan kekunci Z yang terdapat pada papan kekunci komputer. Kekunci A digunakan untuk mendongak, manakala kekunci Z digunakan untuk tunduk. Selain itu kekunci F3 pada papan kekunci komputer boleh digunakan untuk paparan Help. Satu tetingkap informasi akan dibuka dan beberapa maklumat asas mengenai navigasi 3D ini akan ditunjukkan (Rajah 5.73). Rajah 5.73: Tetingkap informasi mengenai maklumat asas navigasi Terdapat satu fungsi yang dibina bagi membantu pengguna untuk melakukan navigasi. Fungsi tersebut ialah fungsi yang memaparkan peta 2D pada paparan navigasi. Ini adalah bertujuan untuk memberikan pengguna satu pandangan atas (plan view) semasa melakukan navigasi (rujuk Rajah 5.74). Rajah 5.74: Peta 2D menunjukkan pandangan plan (Plan View) Jika dilihat pada peta 2D tersebut terdapat 2 bulatan kecil yang berwarna merah dan hijau. Bulatan yang berwarna merah adalah kedudukan semasa pengguna pada ketika itu. Bulatan merah ini akan sentiasa bergerak mengikut lokasi koordinat pengguna bergerak. Manakala bulatan hijau pula menandakan lokasi tersebut adalah lokasi yang hendak dituju atau pun lokasi destinasi. Namun begitu, ini merupakan paparan peta 2D yang mempunyai limitasi-limitasi yang tertentu dan bukannya peta 3D. Ianya bertujuan untuk memudahkan pergerakan atau pun navigasi pengguna. Fungsi paparan peta 2D ini boleh diaktifkan dengan menggunakan kekunci M pada papan kekunci komputer. Manakala kekunci P digunakan untuk tidak mengaktifkannya. Setelah selesai menggunakan/melakukan navigasi di dalam persekitaran 3D, maka untuk ke paparan utama aplikasi, kekunci Escape (Esc) digunakan untuk menutup paparan navigasi 3D tersebut. 5.9 Rumusan Penulisan di dalam bab ini menekankan kepada proses dan langkah kerja dalam menggunakan program-program yang dibina serta aplikasi utama dalam menjalankan analisis rangakain 3D terhadap set data rangakaian 3D. Setiap langkah diterangkan dengan teratur dan hasil serta keputusan kajian ditunjukkan. Contoh yang bersesuian diambil dan digunakan bagi melakukan analisis tersebut. Rumusan yang boleh dibuat ialah algoritma Dijkstra yang dicipta dan diimplementasikan terhadap graf rangkaian 2D boleh diimplementasikan terhadap set data rangkaian 3D yang mempunyai maklumat atau pun elemen ketiga iaitu elemen ketinggian (height z). Setiap maklumat asas bagi keperluan algoritma perlu disediakan sebelum menjalankan algoritma tersebut. Penerangan selanjutnya mengenai kesimpulan kajian dan cadangan bagi kajian lanjutan akan dilakukan pada bab yang seterusnya. BAB 6 KESIMPULAN DAN CADANGAN 6.1 Pendahuluan Bab Di dalam bab ini, perbincangan secara keseluruhan mengenai kajian ini akan dibincangkan. Pengulasan oleh penulis mengenai permasalahan yang berlaku semasa kajian dijalankan akan dilakukan di samping memberikan cadangan-cadangan yang berkaitan dengan kajian ini bagi kajian lanjutan supaya dapat menambahkan lagi bahan-bahan bertulis serta mempelbagaikan lagi bidang-bidang yang berkaitan dengan GIS 3D secara umumnya dan analisis rangkaian 3D secara khususnya. 6.2 Kesimpulan dan Ulasan Pembangunan analisis rangkaian 3D yang dibangunkan di dalam kajian ini menunjukkan perkaitan antara algoritma Dijkstra dan juga bidang GIS itu sendiri. Pengimplementasian algoritma Dijkstra dicipta berdasarkan permasalahan graf matematik 2D. Bidang GIS sememangnya menggunakan algoritma ini di dalam pengiraan laluan yang terpendek bagi data spatial 2D. Hubung kait di antara algoritma tersebut dengan bidang GIS adalah keperluan algoritma tersebut. Terdapat hubungan timbal balik yang memenuhi keperluan GIS dan juga algoritma Dijkstra. Sebagai mana yang dibincangkan di dalam bab-bab yang lepas, kriteria yang diperlukan oleh algoritma tersebut memang terdapat pada data-data yang digunakan oleh GIS. Setelah kajian dilakukan, kini algoritma tersebut terbukti berkemampuan untuk diimplementasikan ke dalam rangkaian 3D. Percubaan ke atas data rangkaian 3D merupakan kajian awal bagi melihat kemampuan algoritma tersebut. Maka dengan secara tidak langsung, analisis bagi algoritma tersebut dapat dijalankan dengan jayanya. Hasil pengiraan bagi analisis laluan terpendek adalah dalam bentuk nombornombor pengiraan sahaja. Bagi menghasilkan keputusan yang mudah difahami dan jelas untuk diinterpretasikan, maka persembahan secara grafik perlu dilakukan. Justeru itu, navigasi di dalam persekitaran 3D serta paparan laluan yang terpendek (hasil daripada analisis) dibina bagi kemudahan pengguna. Dengan mengadaptasikan simulasi pergerakan manusia, pengguna boleh melakukan navigasi di dalam persekitaran 3D aplikasi seperti seolah-olah pengguna sedang berjalan di dalam dunia realiti yang sebenar. Penggunaan tekstur sebenar bagi bangunan kawasan kajian menambahkan lagi keadaan yang lebih realistik semasa melakukan navigasi 3D. Analisis rangkaian 3D ini boleh digunakan dalam pelbagai bidang dan situasi. Analisis ini berguna bagi tujuan perancangan, pengurusan malah juga penting bagi tujuan pembinaan (construction). Pendekatan di dalam kajian ini juga amat berguna kepada agensi-agensi yang memerlukan proses navigasi yang kompleks bagi tujuan misi kecemasan dan keselamatan, evacuations dan lain-lain yang menjurus kepada bidang pengurusan bencana. Di antara bidang-bidang lain yang berpotensi menggunakan analisis ini adalah seperti: a. Perancangan explorasi dan juga pembangunan, b. Reka bentuk saliran paip, c. Operasi menggerudi dan fasiliti, d. Rawatan dan pengurusan sisa kumbahan, e. Keboleh gunaan dan keselamatan saliran paip, f. Kecemasan (tumpahan minyak) g. Pengurusan bencana (pelan tindak) h. Keselamatan dan juga kesihatan. Secara kesimpulannya, kajian-kajian ke arah GIS 3D masih lagi dijalankan oleh penyelidik-penyelidik lain. Pelbagai perkara perlu dikaji sebelum analisis GIS 3D ini boleh diaplikasikan terhadap situasi permasalahan sebenar. Pelbagai isu seperti pembangunan pangkalan data 3D, topologi objek 3D, visualisasi 3D dan analisis 3D perlu diberikan penekanan sebelum diimplementasikan di dalam sistem sebenar. Kajian bagi tesis ini lebih menjurus ke arah membina struktur asas bagi mencari penyelesaian yang terbaik untuk melakukan analisis rangkaian 3D. Struktur ini boleh ditambah baik dengan kajian-kajian lanjutan dengan melihat aspek-aspek potensi, keberkesanan dan juga pengoptimaan analisis. 6.3 Masalah yang Dihadapi Masalah-masalah yang dinyatakan di dalam penulisan ini adalah bertujuan untuk berkongsi maklumat dengan penyelidik-penyelidik GIS pada masa akan datang yang mungkin akan melakukan kajian lanjutan atau pun kajian yang berkaitan supaya masalah-masalah yang dinyatakan ini dapat diatasi dan dapat mengoptimakan lagi prestasi bagi kajian yang dilakukan. Masalah-masalah yang dihadapi adalah seperti berikut: i) Enjin 3D yang digunakan di dalam kajian ini memerlukan sejenis fail yang dinamakan fail BSP dihasilkan pada permulaan navigasi 3D bagi setiap set data yang digunakan buat pertama kalinya. Proses menghasilkan fail ini memakan masa lama bagi pemprosesannya dan ia bergantung kepada saiz fail tersebut. Oleh itu penulis terpaksa menunggu setiap proses tersebut selesai sebelum ke proses-proses yang lain. ii) Proses permodelan objek 3D memerlukan penelitian yang terperinci. Maklumat-maklumat berkaitan dengan model adalah perlu bagi mendapatkan keputusan yang tepat. Model bangunan kajian didigit daripada pelan lantai bangunan. Namun begitu, maklumat ketinggian secara terperinci tiada. Seharusnya pelan lantai bangunan perlu disertakan bersama dengan pelan keratan rentas bangunan tersebut bagi proses penjanaan model 3D. Maklumat ketinggian bangunan secara terperinci adalah penting kerana reka bentuk bangunan moden kini semakin kompleks dan unik. iii) Proses melakukan permodelan 3D juga memerlukan komponen-komponen komputer yang khusus. Perkakasan yang tidak mencapai spesifikasi juga merupakan masalah utama di dalam kajian ini. Proses reka bentuk permodelan objek spatial dan juga navigasi 3D memerlukan spesifikasi komputer yang baik. Walaupun perkakasan yang disediakan berprestasi sederhana, namun begitu ia masih lagi tidak mencukupi. Proses bagi menghasilkan model-model spatial 3D memerlukan kuasa pemprosesan komputer yang tinggi. Walau bagaimana pun, masalah-masalah tersebut tidak mematahkan semangat penulis untuk meneruskan kajian di dalam bidang yang agak mencabar ini dan dengan secara tidak langsung ianya telah meningkatkan lagi pengetahuan dan pemahaman penulis mengenai pembangunan sesebuah analisis rangkaian 3D. Ini memberikan beberapa kelebihan terhadap penulis dalam bidang 3D Modelling, 3D Simulation, 3D Game Engine, Virtual Reality termasuklah langkah-langkah untuk membangunkan aplikasi analisis rangkaian 3D bagi kegunaan di dalam negara ini secara umumnya dan kepada bidang GIS secara khususnya. 6.4 Cadangan Daripada hasil kajian yang diperolehi, didapati terdapat beberapa aspek lain yang boleh ditambah agar analisis rangkaian 3D ini dapat diperbaiki di masa akan datang. Berikut merupakan cadangan-cadangan yang boleh diguna pakai untuk kajian lanjutan atau pun kajian-kajian di masa hadapan. 6.4.1 Algoritma Kajian Bagi analisis rangkaian, terdapat beberapa algoritma lain yang memberikan output yang sama seperti algoritma ini. Akan tetapi algoritma tersebut digunakan berdasarkan tujuan yang tertentu. Sebagai contoh terdapat algoritma yang bukan sahaja digunakan untuk mencari laluan yang terpendek, tetapi juga menggunakan faktor pengiraan lain di dalam pengiraannya. Faktor seperti kapasiti laluan; di dunia realiti, navigasi di jalan raya sebenarnya mempunyai beberapa kriteria/syarat yang ditetapkan. Sebagai contoh, ada jalan raya yang tidak membenarkan kenderaan melebihi 5 tan melaluinya. Mencari laluan yang terpendek untuk ke destinasi bukan sahaja diperlukan di sini, malah faktor kapasiti laluan juga perlu diambil kira. Terdapat beberapa algoritma yang boleh digunakan bagi situasi ini dan mungkin boleh diimplmentasikan di dalam bidang GIS 3D. Mungkin dengan situasi yang berbeza, algoritma lain boleh diimplementasikan. Cadangan bagi kajian lanjutan ialah penggunaan algoritma lain bagi pengiraan analisis rangkaian 3D dan seterusnya analisis perbandingan boleh dibuat berdasarkan dari segi masa komputasi dan jumlah nod di dalam set data bagi algoritma yang berbeza. Aplikasi utama di dalam kajian ini membenarkan penggunaan data yang besar dan pelbagai. Maka penggunaan sebarang data 3D di dalam aplikasi utama kajian boleh dilakukan. Oleh itu, perbandingan dengan penggunaan algoritma lain adalah tidak mustahil. 6.4.2 Enjin Grafik 3D Di dalam kajian ini, enjin grafik 3D State digunakan bagi navigasi 3D. Akan tetapi terdapat beberapa enjin grafik 3D lain boleh digunakan. Seterusnya analisis boleh dibuat bagi melihat prestasi enjin grafik tersebut bagi tujuan navigasi 3D. Namun begitu penggunaan enjin yang berbeza sahaja tidak mencukupi, penggabungan dengan beberapa kriteria kajian yang lain diperlukan bagi menghasilkan kepentingan kajian yang cemerlang di dalam bidang GIS 3D. 6.4.3 Integrasi Analisis Rangkaian 3D dengan Perisian-perisian GIS Di antara kajian lanjutan yang boleh dilakukan ialah dengan mengintegrasikan fungsi yang terdapat pada perisian GIS semasa dengan analisis rangkaian 3D. Integrasi ini akan menghasilkan satu fungsi tambahan pada perisian GIS tersebut dan dengan secara tidak langsung analisis rangkaian 3D tersebut boleh menggunakan pangkalan data perisian GIS tersebut. Ini akan memberikan lebih kefungsian pada perisian GIS tersebut. Setakat ini, hanya beberapa fungsi sahaja yang membenarkan analisis 3D dilakukan di dalam perisian GIS semasa. Namun begitu, fungsi-fungsi tersebut kebanyakannya adalah untuk tujuan perancangan dan juga visualisasi sahaja. Selain itu, pendekatan kajian boleh diubah suai dengan menggunakan format data yang berbeza. Carta alir aplikasi utama yang dibina mengandungi Input, Process dan juga Output. Sebagai contoh, jenis data yang digunakan pada fasa input boleh mengambil kira format data GIS yang tersedia. Contohnya seperti format data daripada perisian komersial GIS (shapefile, coverage, mif). Topologi rangkaian bagi setiap format data tersebut boleh dikaji struktur format dan diimplementasikan bersama analisis rangkaian 3D. 6.4.4 Paparan Navigasi 3D Pada Alat-alat Mudah Alih Kajian-kajian sampingan boleh dilakukan bagi analisis ini. Paparan hasil analisis dan juga navigasi 3D dalam sistem pemaparan yang lebih kecil seperti PDA (Personal Digital Assistance) dilihat lebih praktikal. Pengguna boleh menggunakan PDA semasa melakukan navigasi. Penentuan koordinat boleh digunakan dengan berdasarkan teknologi Global Positioning System (GPS) atau pun WiFi yang semakin meluas. Penggunaan penentuan koordinat seperti ini dan juga alat PDA yang berfungsi untuk menjalankan analisis rangkaian 3D akan menghasilkan satu sistem navigasi yang lebih baik di masa akan datang memandangkan senario sekarang iaitu peralihan pengguna GIS daripada desktop GIS kepada pengguna GIS Mobile. RUJUKAN DAN BIBLIOGRAFI Alias Abdul Rahman (2004). Perbincangan peribadi. Tidak diterbitkan, Jabatan Geoinformatik, Fakulti Kejuruteraan & Sains Geoinformasi, Universiti Teknologi Malaysia. Alias Abdul Rahman (2005). Tutorial workshop. Tidak diterbitkan, International Symposium & Exhibition on Geoinformation 2005, ISG 2005. Africawala, A., Castillo, J. dan Schubert, J. (2004). GIS Management and Implementation. GISC/POEC 6383: 30 Oktober 2004. Dallas, 1-15 . Ahuja, R., Mehlron, K., Orlin, J. dan Tarjan, R. (1990). Faster Algorithms for the Shortest Path Problem. Journal of the ACM (JACM). 37 (2). 213 – 223. Alter, S. (2002). Information System Foundation of E-Business. (4th ed). Pearson Education International: Prentice Hall. ESRI (2005). Manual Perisian ArcGIS 9. Earth Science Research Institute, Redlands California: ESRI. Balstrom, T. (2001). Identifying Least Cost Routes in Mountainous Terrain. Tidak diterbitkan. Earth Science Research Institute, Redlands California. Billen, R. dan Zlatanova, S. (2003). 3D Spatial relationships model: A usefull concept for 3D Cadastre?. Paul Longley. Computers, Environment and Urban Systems. 411-425(15). Amsterdam, The Netherlands: Elsevier. Carlsson, C. dan Hagsand, O. (1993). DIVE - A Multi-User Virtual Reality System. Virtual Reality Annual International Symposium. 18-22 September 1993. Seattle, WA, USA: 394-400. Chen, X., Meaker, J. W. dan Zhan, F. B. (2005). Agent-Based Modeling and Analysis of Hurricane Evacuation Procedures for the Florida Keys. Natural hazards. 38 (3). 321-338. Springer. Cherkassy, B., Goldberg, A. dan Radzik, T. (1994). Shortest Paths Algorithms: Theory and Experimental Evaluation. Symposium on Discrete Algorithms. 1994. Arlington, Virginia, United States. 516 - 525. Coors, V. (2001). 3D-GIS in networking Environments. Paul Longley. Computers, Environment and Urban Systems. 345-357(13). Amsterdam, The Netherlands: Elsevier. Cruz-Neira, C., Sandin, D. J. dan DeFanti, T. (1993). Surround-Screen ProjectionBased Virtual Reality: The Design and Implementation of the CAVE. International Conference on Computer Graphics and Interactive Techniques. 1993. New York, 135 – 142. Dial, R. dan Alan (1969). Algorithms Shortest path Forest with Topological Ordering. Communications of the ACM. November 1969. New York, 632 – 633. Dijkstra, E.W. (1959). A note on two problems in connection with graphs. Dijkstra, E.W. Numerische mathematik (269-271). Amsterdam, The Netherlands: ET AS Dijkstra’s Algorithm (2005) - Lecture Note. http://www.ms.unimelb.edu.au/~moshe/620-261/dijkstra/dijkstra.html Eklund, P., Kirkby, S. dan Pollitt, S. (1993). A Dynamic Multi-source Dijkstra’s Algorithm for Vehicle Routing. Intelligent Information Systems, Australian and New Zealand Conference. 18-20 November 1993. Adelaide, SA, Australia, 329333. Garvey, M., Jackson, M. dan Roberts, M. (2000). An Obeject Oriented GIS. Proceeding of Net.Object Days 2000. Oktober 9-12 2000. Erfurt, Germany, 604613. Gilliéron, P. dan Merminod, B. (2003). Personal Navigation System for Indoor Applications. 11th IAIN World Congress. 21-24 Oktober 2003. Berlin, Germany, 1-15. Gilliéron, P., Büchel, D., Spassov, I. dan Merminod, B. (2004). Indoor Navigation Performance Analysis. GNSS 2004. 17-19 Mei 2004. Rotterdam, The Netherlands, 1-9. Haron, H., Alwee, R. dan Sallehuddin, R. (2004). Teknik Penyelidikan Operasi. Jabatan pemodelan & Pengkomputeran Industri. Tidak diterbitkan, Fakulti Sains Komputer dan Sistem Maklumat, UTM Skudai, Johor. Johnson, D. (1973). A Note on Dijkstra's Shortest Path Algorithm. Journal of the ACM. 20 (3), 385-388. Karas, I., Batuk, F., Akay, A., Baz, I. (2006). Automatically Extracting 3D Models and Network Analysis for Indoors. 1st. International Workshop on 3D Geoinformation 2006. 7-8 Ogos 2006. Kuala Lumpur, Malaysia, 1-10. Kerlow, I. (2004). The Art of 3D Computer Animation. San Francisco, USA: John Wiley & Sons, Inc. Kirkby, S.D., Pollitt, S. E. P. dan Eklund, P. W (1996). Implementing a Shortest Path Algorithm in a 3D GIS Environment. Adelaide, Australia: Taylor and Francis. Kwan, M. P. dan Lee, J. (2003). Emergency response after 9/11: the potential of realtime 3D GIS for quick emergency response in micro-spatial environments. International Journal of Geographical Information Science. 19(10), 1039-1056. Lee, J. (2002). A Spatial Access Oriented Implementation of a Topological Data Model for 3D Urban Entities. Geoinformatica. 8 (3), 237 – 264. Lee, J. (2005). 3D GIS in Support of Disaster Management in Urban Areas. 101st AAG Annual Conference. 5-9 April 2005. Denver, 1-10. Meijers, M., Zlatanova, S. dan Pfeifer, N. (2005). 3D Geo-information indoors: structuring for evacuation. Proceedings of the First International Workshop on Next Generation 3D City Models. 2005. Bonn, Germany, 11-16. Nebiker, S. (2003). Support for Visualisation and Animation in a Scalable 3D GIS Environment – Motivation, Concepts And Implementation. The International Archives of the Photogrammetry, Remote Sensing and Spatial Information Sciences. 2003. Istanbul, 1-6. Pu, S. dan Zlatanova, S. (2004). Evacuation Route Calculation of Inner Buildings. First International Symposium on Geo-information for Disaster Management. 2123 Mac 2004. Delft, The Netherlands, 1143-1161. Semanta, S., Jha, M. K. dan Oluokun, C. (2005). Travel Time Calculation with GIS in Rail Station Location Optimization. 2005 ESRI User Conference Proceedings. 23-September 2005. USA: 1-9. Shad, R., Ebadi, H. dan Ghods, M. (1998). Evaluation of route finding methods in GIS application. Tidak diterbitkan, Department of Geodesy and Geomatics Eng. K. N. Toonsi University of Technology, Tehran, Iran. Sherlock, R., Mooney, P., Winstanley, A. (1999). Shortest Path Computation: A Comparative Analysis. GISRUK. April 1999. Sheffield, UK, 91-94. Smith, G. dan Friedman, J. (2004). 3D GIS: A Technology Whose Time Has Come. Earth Observation Magazine. November 2004, 1-4. Steuer, J. (1993). Defining Virtual Reality: Dimensions Determining Telepresence. Journal of Communication. 42 (4), 73 - 93. Stoter, J. dan Zlatanova S. (2003). Visualization and editing of 3D objects organized in a DBMS. Proceedings of the EuroSDR. 2003. Delft, The Netherlands, 1-16. Stoter, J., Salzmann, M., Oosterom, P. dan Molen, P. (2002). Towards a 3D Cadastre. FIG XXII International Congress. 19-26 April 2002. Washington, D.C. USA, 1-12. Takino, S. (2000). Topological network model for improving urban 3D data use. Tidak diterbitkan, Dawn Corporation, Minatojima-minamimachi, Chuo-ku, Kobe, Japan. Treeck, C. dan Rank, E. (2004). Analysis of Building Structure and Topology Based on Graph Theory. Tidak diterbitkan, Lehrstuhl für Bauinformatik, Technische Universität München Verbree, E., Maren, G., Germs, R., Jansen, F. dan Kraak, M. J. (1999). Interaction in Virtual World Views - Linking 3D GIS with VR. International Journal of Geographical Information Science. 13 (4), 385-396(12). Weisstein dan Eric, W. (2004). Four-Dimensional Geometry. MathWorld--A Wolfram. http://mathworld.wolfram.com/Four-DimensionalGeometry.html Wikipedia Encyclopedia (Ogos, 2005). Dijkstra's algorithm. http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm. Wüst, T., Nebiker, S. dan Landolt, R. (2004). Applying the 3D GIS Dilas to Archaeology and Cultural Heritage Projects – Requirements and First Results. XXth ISPRS Congress. 12-23 Julai 2004. Istanbul, Turkey, 1-6. Zhan, F. B. (2001). Three Fastest Shortest Path Algorithms on Real Road Networks: Data Structures and Procedures. Journal of Geographic Information and Decision Analysis. 1 (1), 70–82. Zlatanova, S. (2002). Advances in 3D GIS. Tidak diterbitkan. Delft University of Technology, the Netherlands. Zlatanova, S., Abdul Rahman, A., Pilouk, M. (2002). 3D GIS: Current Status and Perspectives. Proceedings of ISPRS. 8-12 Julai 2002, Ottawa, Canada, 1-6. LAMPIRAN A Pelan lantai bangunan kajian Plan Lantai Aras 1 - 1 Pelan Lantai Aras 1 - 2 Pelan Lantai Aras 1 - 3 Pelan Lantai Aras 2 - 1 Pelan Lantai Aras 2 - 2 Pelan Lantai Aras 2 - 3 Pelan Lantai Aras 3 - 1 Pelan Lantai Aras 3 - 2 Pelan Lantai Aras 3 - 3 Pelan Lantai Aras 4 - 1 Pelan Lantai Aras 4 - 2 Pelan Lantai Aras 4 - 3 LAMPIRAN B Tekstur yang digunakan pada model bangunan 3D kajian Contoh Tekstur yang Terdapat Pada Aras 1 Bangunan FKSG Contoh Tekstur yang Terdapat Pada Aras 2 Bangunan FKSG Contoh Tekstur yang Terdapat Pada Aras 3 Bangunan FKSG Contoh Tekstur yang Terdapat Pada Aras 4 Bangunan FKSG Contoh Tekstur yang Terdapat Pada Aras 5 Bangunan FKSG LAMPIRAN C Carta alir program Converter Start Variable Declaration Open File (AutoCAD drawing) Read File Input Line Filter X, Y, Z Close File Save (Mwraw DB format) End Each node will be given an unique identifier LAMPIRAN D Contoh pengaturcaraan program Converter VERSION 5.00 ‘form declaration section Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX" Begin VB.Form Form1 BackColor = &H8000000A& BorderStyle = 1 'Fixed Single Caption = "Uznetwork@converter™ 1.0" ClientHeight = 7350 ClientLeft = 2610 ClientTop = 2655 ClientWidth = 5430 BeginProperty Font Name = "Times New Roman" Size = 8.25 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Icon = "Form1.frx":0000 LinkTopic = "Form1" MaxButton = 0 'False MinButton = 0 'False ScaleHeight = 7350 ScaleWidth = 5430 Begin VB.TextBox Text3 BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 375 Left = 5760 TabIndex = 2 Top = 720 Visible = 0 'False Width = 1815 End Begin VB.TextBox Text2 BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 375 Left = 5760 TabIndex = 1 Top = 120 Visible = 0 'False Width = 1815 End Begin MSComDlg.CommonDialog cdlg Left = 240 Top = 360 _ExtentX = 847 _ExtentY = 847 _Version = 393216 End Begin VB.TextBox Text1 BackColor = &H8000000A& BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 7335 Left = 0 Locked = -1 'True MultiLine = -1 'True ScrollBars = 3 'Both TabIndex = 0 Top = 0 Width = 5415 End Begin VB.Menu File_Menu ‘'Reka menu Caption = "&File" Begin VB.Menu Load_dxf Caption = "&Load file... (*.dxf 2000)" End Begin VB.Menu Save_MWRaw Caption = "Save &As..." Enabled = 0 'False Shortcut = ^S End Begin VB.Menu Exit Caption = "&Exit converter" Shortcut = ^E End End Begin VB.Menu Tools_Menu Caption = "&Tools" Begin VB.Menu Analysis Caption = "Analysis" Begin VB.Menu View_Coordinates Caption = "View C&oordinates" Enabled = 0 'False End Begin VB.Menu Build_File Caption = "Build &MWraw file" Enabled = 0 'False End End Begin VB.Menu Clear_List Caption = "&Clear Data View" Enabled = 0 'False Shortcut = {F3} End End Begin VB.Menu Help Caption = "&Help" Begin VB.Menu About Caption = "&About..." Shortcut = ^A End End End Attribute VB_Name = "Form1" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Private Sub About_Click() frmAbout.Show End Sub Private Sub Build_File_Click() Data declaration Open Text2.Text For Input As #1 Id = 0 Text1 = "" Text1.Text = "MAIN HEADER" & vbNewLine & _ "© All right reserved 2006" & vbNewLine & vbNewLine While Not EOF(1) Line Input #1, linesA If linesA = AcDb3dPolylineVertex Then Repeat: Line Input #1, linesA If linesA = XHeader Then Line Input #1, coorX Repeat End If If linesA = YHeader Then Line Input #1, coorY Repeat End If If linesA = ZHeader Then Line Input #1, coorZ Text1 = Text1.Text & coorZ & vbNewLine Line Input #1, linesA Line Input #1, linesA Line Input #1, linesA Line Input #1, linesA If linesA = ENDFILE Then Mark = True Text1 = Text1.Text & Id - 1 & vbNewLine & _ "0" & vbNewLine Else If Mark = True Then Text1 = Text1.Text & "0" & vbNewLine & _ Id + 1 & vbNewLine Mark = False Else Text1 = Text1.Text & Id - 1 & vbNewLine & _ Id + 1 & vbNewLine End If End If End If End If Wend Close #1 Save_MWRaw.Enabled = True End Private Sub Clear_List_Click() Text1 = "" Text2 = "" Text3 = "" Save_MWRaw.Enabled = False View_Coordinates.Enabled = False Build_File.Enabled = False Clear_List.Enabled = False cdlg.FileName = "" Text1.BackColor = &H8000000A End Sub Private Sub Exit_Click() End End Sub Private Sub Form_Load() Move (Screen.Width \ 2) - (Me.Width \ 2), (Screen.Height \ 2) (Me.Height \ 2) End Sub Private Sub Load_dxf_Click() Dim FileInput As String cdlg.Filter = "AutoCAD Drawing Interchange (*.dxf 2000)|*.dxf|all files(*,*)|*.*" cdlg.ShowOpen FileInput = cdlg.FileName Text2.Text = FileInput Text1 = "" Text1 = Text1.Text & LoadText(cdlg.FileName) If Text2.Text <> "" Then View_Coordinates.Enabled = True Build_File.Enabled = True Clear_List.Enabled = True Text1.BackColor = &H80000018 cdlg.FileName = "" End If Save_MWRaw.Enabled = False If Text1.Text = "" Then View_Coordinates.Enabled = False Build_File.Enabled = False Clear_List.Enabled = False Text1.BackColor = &H8000000A End If End Sub Private Sub Save_MWRaw_Click() Dim FileInput As String cdlg.Flags = cdlOFNHideReadOnly + cdlOFNOverwritePrompt cdlg.Filter = "MWraw Database Interchange |.*MWraw |all files(*,*)|*.*" cdlg.DefaultExt = "MWraw" cdlg.ShowSave SaveText Text1, cdlg.FileName FileInput = cdlg.FileName Text3.Text = FileInput End Sub Private Sub View_Coordinates_Click() Dim linesA As String Dim coorX, coorY, coorZ As String Dim Id As Integer Open Text2.Text For Input As #1 Id = 0 Text1 = "" Text1.Text = "Copyright to Uznetwork@converter (TM) 1.0" & vbNewLine & _ "© All right reserved 2006" & vbNewLine & vbNewLine Text1 = Text1.Text & " ID" & vbTab & " X" & vbTab & vbTab & vbTab & " Y" & _ vbTab & vbTab & vbTab & " Z" & vbNewLine While Not EOF(1) Line Input #1, linesA If linesA = "AcDb3dPolylineVertex" Then Id = Id + 1 Text1 = Text1.Text & Id Repeat: Line Input #1, linesA If linesA = 10 Then Line Input #1, coorX coorX = Val(Format(coorX, "0000000.00")) Text1 = Text1.Text & vbTab & coorX & vbTab GoTo Repeat End If If linesA = 20 Then Line Input #1, coorY coorY = Val(Format(coorY, "0000000.00")) Text1 = Text1.Text & vbTab & vbTab & coorY & vbTab GoTo Repeat End If If linesA = 30 Then Line Input #1, coorZ coorZ = Val(Format(coorZ, "0000000.00")) Text1 = Text1.Text & vbTab & vbTab & coorZ & vbNewLine End If End If Wend Close #1 Save_MWRaw.Enabled = False End Sub LAMPIRAN E Carta alir program Topology Start Variable Declaration Open File MWraw File Corrupted Read File Successful Input Predecessor Input Successor Check Redundant Nodes No Calculate Distance Between Predecessor and Successor Nodes Store Distance Information Create MW DB File Close File End Move Predecessor Successor information Yes Delete Node and LAMPIRAN F Contoh pengaturcaraan program Topology VERSION 5.00 Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX" Begin VB.Form frmMain BackColor = &H00FF8080& BorderStyle = 1 'Fixed Single Caption = "Uznetwork@topology™ 1.0" ClientHeight = 3435 ClientLeft = 3240 ClientTop = 2655 ClientWidth = 5040 Icon = "frmMain.frx":0000 LinkTopic = "Form1" MaxButton = 0 'False MinButton = 0 'False PaletteMode = 1 'UseZOrder Picture = "frmMain.frx":0ECA ScaleHeight = 229 ScaleMode = 3 'Pixel ScaleWidth = 336 Begin VB.CommandButton cmdGenerate Caption = "&Generate" Height = 375 Left = 3120 TabIndex = 1 Top = 2880 Width = 1695 End Begin MSComDlg.CommonDialog cdlg3forSave Left = 840 Top = 3960 _ExtentX = 847 _ExtentY = 847 _Version = 393216 End Begin VB.TextBox Text1 Height = 3375 Left = 4920 MousePointer = 1 'Arrow MultiLine = -1 'True ScrollBars = 2 'Vertical TabIndex = 0 Top = 360 Visible = 0 'False Width = 5055 End Begin MSComDlg.CommonDialog cdlg2 Left = 240 Top = 3960 _ExtentX = 847 _ExtentY = 847 _Version = 393216 End Begin MSComDlg.CommonDialog cdlg1 Left = 1440 Top = 3960 _ExtentX = 847 _ExtentY = 847 _Version = 393216 End Begin VB.Label lblCommand3 BackStyle = 0 'Transparent Caption = "3. Save the new topology database (*MW) file." BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FFFF& Height = 615 Left = 360 TabIndex = 5 Top = 2280 Width = 4575 WordWrap = -1 'True End Begin VB.Label lblCommand2 BackStyle = 0 'Transparent Caption = "2. Build the topology," BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FFFF& Height = 375 Left = 360 TabIndex = 4 Top = 1920 Width = 3255 WordWrap = -1 'True End Begin VB.Label lblCommand1 BackStyle = 0 'Transparent Caption = "1. Load (*.MWraw) file," BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FFFF& Height = 375 Left = 360 TabIndex = 3 Top = 1560 Width = 4455 WordWrap = -1 'True End Begin VB.Label Label1 Alignment = 2 'Center BackStyle = 0 'Transparent Caption = "There is three steps to build topology for MW Raw Interchange Database File (*.MWraw):" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H000080FF& Height = 855 Left = 600 TabIndex = 2 Top = 360 Width = 3855 WordWrap = -1 'True End Begin VB.Menu File Caption = "&File" Index = 1 Begin VB.Menu Load_MWraw Caption = "&Load... (MWraw Database Interchange)" End Begin VB.Menu Save_As Caption = "Save &As..." Shortcut = ^S End Begin VB.Menu Close Caption = "&Close" Shortcut = ^E End End Begin VB.Menu Tools Caption = "&Tools" Index = 2 Begin VB.Menu Build Caption = "Build MW Database Topology" End Begin VB.Menu Clear Caption = "Clear Data View" Shortcut = {F3} End End Begin VB.Menu Help Caption = "&Help" Index = 3 Begin VB.Menu About Caption = "About" Shortcut = ^A End End End Attribute VB_Name = "frmMain" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Option Explicit Private objFind As New FindClass Private Sub About_Click() frmAbout.Show End Sub Private Sub Build_Click() Dim linesA, Header, ID(9999) As String Dim coorX(9999), coorY(9999), coorZ(9999) As String Dim Topo(9999, 7) As String Dim i As Integer Dim maxI As Integer i = 1 Dim FileInput As String FileInput = cdlg2.FileName Open FileInput For Input As #1 While Not EOF(1) Line Input #1, linesA If linesA = "UzEader" Then Line Input #1, ID(i) Line Input #1, coorX(i) Line Input #1, coorY(i) Line Input #1, coorZ(i) Line Input #1, Topo(i, 0) Line Input #1, Topo(i, 1) Topo(i, 2) = -1 Topo(i, 3) = -1 Topo(i, 4) = -1 Topo(i, 5) = -1 Topo(i, 6) = -1 Topo(i, 7) = -1 i = i + 1 maxI = i - 1 coorX(i) = Val(Format(coorX(i), "0000000.000000")) coorY(i) = Val(Format(coorY(i), "0000000.000000")) coorZ(i) = Val(Format(coorZ(i), "0000000.000000")) End If Wend Close #1 Dim Looping As Integer Dim Looping2 As Integer Dim Looping3 As Integer Dim Looping4 As Integer Dim CessorIndex As Integer Dim CessorIndex2 As Integer Dim CessorIndex3 As Integer Looping = 0 For Looping = 0 To maxI Looping2 = 0 For Looping2 = 0 To maxI If coorX(Looping) = coorX(Looping2) Then If coorY(Looping) = coorY(Looping2) Then If coorZ(Looping) = coorZ(Looping2) Then 'jika ada yg sama If ID(Looping) = ID(Looping2) Then GoTo SKIPTHISNODE If ID(Looping) = "" Then GoTo SKIPTHISNODE '''''''''''''''''''''''''''''''''''''''''''''''''''''''''' CessorIndex = 0 ' CsI untuk loop2 For CessorIndex = 0 To 7 If Topo(Looping2, CessorIndex) < 0 Then GoTo SKIPTHISCESSOR '<<<<<<<<<<<<<<<<<<<<<<<<< CessorIndex2 = 0 'CsI untuk loop1 For CessorIndex2 = 0 To 7 If Topo(Looping2, CessorIndex) = Topo(Looping, CessorIndex2) Then GoTo SKIPTHISCESSOR If Topo(Looping, CessorIndex2) < 0 Then 'looping untuk index cessor yg loop 1st Topo(Looping, CessorIndex2) = Topo(Looping2, CessorIndex) Looping3 = 0 For Looping3 = 0 To maxI CessorIndex3 = 0 For CessorIndex3 = 0 To 7 If Topo(Looping3, CessorIndex3) = ID(Looping2) Then Topo(Looping3, CessorIndex3) = ID(Looping) End If Next CessorIndex3 Next Looping3 ID(Looping2) = "" GoTo SKIPTHISCESSOR End If Next CessorIndex2 '<<<<<<<<<<<<<<<<<<<<<<<<< SKIPTHISCESSOR: Next CessorIndex ID(Looping2) = "" ''''''''''''''''''''''''''''''''''''''''''''''''''''''' End If 'Untuk Z End If 'Untuk Y End If 'untuk X SKIPTHISNODE: Next Looping2 Next Looping Looping = 0 For Looping = 0 To maxI CessorIndex = 0 For CessorIndex = 0 To 7 If Topo(Looping, CessorIndex) = "-1" Then Topo(Looping, CessorIndex) = "0" End If Next CessorIndex Next Looping Dim Distance(9999, 7) As String Dim dX2, dY2, dZ2 As Long Dim x1, x2, y1, y2, z1, z2 As Double Looping = 0 For Looping = 0 To maxI If ID(Looping) = "" Then GoTo SKIPCALCULATETHISIDDISTANCE CessorIndex = 0 For CessorIndex = 0 To 7 If Topo(Looping, CessorIndex) > 0 Then x1 = Val(Format(coorX(Looping), "0000000.000000")) x2 = Val(Format(coorX(Topo(Looping, CessorIndex)), "0000000.000000")) y1 = Val(Format(coorY(Looping), "0000000.000000")) y2 = Val(Format(coorY(Topo(Looping, CessorIndex)), "0000000.000000")) z1 = Val(Format(coorZ(Looping), "0000000.000000")) z2 = Val(Format(coorZ(Topo(Looping, CessorIndex)), "0000000.000000")) dX2 = (x1 - x2) ^ 2 dY2 = (y1 - y2) ^ 2 dZ2 = (z1 - z2) ^ 2 Distance(Looping, CessorIndex) = (dX2 + dY2 + dZ2) ^ 0.5 Else Distance(Looping, CessorIndex) = 0 End If Next CessorIndex SKIPCALCULATETHISIDDISTANCE: Next Looping Dim Directorie$ Directorie$ = App.Path & "\DebugTry.MW" Open Directorie$ For Output As #1 Text1.Text = "" Text1.Text = Text1.Text & "Copyright to Uznetwork@topology (TM) 1.0" & vbNewLine & _ "© All right reserved 2006" & vbNewLine & vbNewLine Print #1, "Copyright to Uznetwork@topology (TM) 1.0" & vbNewLine & _ "© All right reserved 2006" & vbNewLine & vbNewLine Dim ki As Integer ki = 0 For ki = 0 To maxI If ID(ki) = "" Then GoTo SKIPPING Text1.Text = Text1.Text & "UzEader" & vbNewLine & _ ID(ki) & vbNewLine & _ coorX(ki) & vbNewLine & _ coorY(ki) & vbNewLine & _ coorZ(ki) & vbNewLine & _ Topo(ki, 0) & vbNewLine & _ Topo(ki, 1) & vbNewLine & _ Topo(ki, 2) & vbNewLine & _ Topo(ki, 3) & vbNewLine & _ Topo(ki, 4) & vbNewLine & _ Topo(ki, 5) & vbNewLine & _ Topo(ki, 6) & vbNewLine & _ Topo(ki, 7) & vbNewLine & _ "Uzdistjar" & vbNewLine & _ Distance(ki, 0) & vbNewLine Distance(ki, 1) & vbNewLine Distance(ki, 2) & vbNewLine Distance(ki, 3) & vbNewLine Distance(ki, 4) & vbNewLine Distance(ki, 5) & vbNewLine Distance(ki, 6) & vbNewLine Distance(ki, 7) & vbNewLine & & & & & & & & _ _ _ _ _ _ _ vbNewLine Print #1, "UzEader" & vbNewLine & _ ID(ki) & vbNewLine & _ coorX(ki) & vbNewLine & _ coorY(ki) & vbNewLine & _ coorZ(ki) & vbNewLine & _ Topo(ki, 0) & vbNewLine & _ Topo(ki, 1) & vbNewLine & _ Topo(ki, 2) & vbNewLine & _ Topo(ki, 3) & vbNewLine & _ Topo(ki, 4) & vbNewLine & _ Topo(ki, 5) & vbNewLine & _ Topo(ki, 6) & vbNewLine & _ Topo(ki, 7) & vbNewLine & _ "Uzdistjar" & vbNewLine & _ Distance(ki, 0) & vbNewLine & _ Distance(ki, 1) & vbNewLine & _ Distance(ki, 2) & vbNewLine & _ Distance(ki, 3) & vbNewLine & _ Distance(ki, 4) & vbNewLine & _ Distance(ki, 5) & vbNewLine & _ Distance(ki, 6) & vbNewLine & _ Distance(ki, 7) & vbNewLine & vbNewLine SKIPPING: Next ki Close #1 Save_As.Enabled = True MsgBox "MW Database file successfully created!", vbExclamation, "MW Database file" End lblCommand2.ForeColor = &H8080FF lblCommand2.FontItalic = True End Sub Private Sub Clear_Click() Text1.Text = "" cdlg1.FileName = "" cdlg2.FileName = "" Save_As.Enabled = False Build.Enabled = False Clear.Enabled = False End Sub Private Sub Close_Click() End End Sub Private Sub cmdGenerate_Click() Dim Jawapan2 As String Jawapan2 = MsgBox("Do you want to build your MW data automatically?", vbYesNo + vbQuestion, "Automation...") If Jawapan2 = vbNo Then Exit Sub ElseIf Jawapan2 = vbYes Then MsgBox "Please kindly select your MW raw data file", vbInformation, "Step 1 - Load MW raw file..." LoadingPlease On Error GoTo TACKLE Build_Click MsgBox "Choose the directory to save your data", vbInformation, "Step 2 - Save As..." Save_As_Click End If Exit Sub TACKLE: MsgBox "System interupted! Progress will be stop.", vbCritical, "Error" Screen.MousePointer = vbNormal Save_As.Enabled = False Build.Enabled = False Clear.Enabled = False Exit Sub End Sub Private Sub Form_Load() '-- Center the form Move (Screen.Width \ 2) - (Me.Width \ 2), (Screen.Height \ 2) (Me.Height \ 2) Save_As.Enabled = False Build.Enabled = False Clear.Enabled = False End Sub Private Sub LoadingPlease() Dim lIndex As Long '-- Get a text file name to open cdlg1.DialogTitle = "Open MWraw File" cdlg1.CancelError = True cdlg1.Filter = "MWraw (*.MWraw)" cdlg1.FileName = "*.MWraw" On Error Resume Next cdlg1.Action = 1 If Err Then Exit Sub Screen.MousePointer = vbHourglass '-- Load the file objFind.Load (cdlg1.FileName) '-- Error loading? If objFind.ErrorNum Then MsgBox objFind.ErrorMsg, vbInformation, "objFind Error! Data cannot be read" Exit Sub End If '-- This part initialise the input for the textbox data Dim FileInput As String cdlg2.FileName = cdlg1.FileName FileInput = cdlg2.FileName '--fill the textbox1 for MW data viewing Text1 = "" Text1 = Text1.Text & LoadText(cdlg2.FileName) '--initialise end Screen.MousePointer = vbNormal Build.Enabled = True Clear.Enabled = True Save_As.Enabled = False lblCommand1.ForeColor = &H8080FF lblCommand1.FontItalic = True End Sub Private Sub Load_MWraw_Click() Dim Jawapan As String Jawapan = MsgBox("Click Yes, System will build your MW Database Interchange file automatically. Click No to do it manually", vbYesNoCancel + vbQuestion, "Automation...") If Jawapan = vbCancel Then Exit Sub ElseIf Jawapan = vbNo Then LoadingPlease ElseIf Jawapan = vbYes Then MsgBox "Please select your MW raw data file", vbInformation, "Step 1 - Load MW raw file..." LoadingPlease On Error GoTo TACKLING Build_Click MsgBox "Choose the directory to save your data", vbInformation, "Step 2 - Save As..." Save_As_Click End If Exit Sub TACKLING: MsgBox "System interupted! Progress will be stop.", vbCritical, "Error" Screen.MousePointer = vbNormal Save_As.Enabled = False Build.Enabled = False Clear.Enabled = False Exit Sub End Sub Private Sub Save_As_Click() Dim FileInput As String cdlg3forSave.Flags = cdlOFNHideReadOnly + cdlOFNOverwritePrompt cdlg3forSave.Filter = "MW Database Interchange (*.MW)|*.MW" '|all files(*,*)|*.*" cdlg3forSave.DefaultExt = "MW" cdlg3forSave.ShowSave SaveText Text1, cdlg3forSave.FileName FileInput = cdlg3forSave.FileName Save_As.Enabled = False Build.Enabled = False Clear.Enabled = False cdlg1.FileName = "" cdlg2.FileName = "" cdlg3forSave.FileName = "" lblCommand3.ForeColor = &H8080FF lblCommand3.FontItalic = True End Sub LAMPIRAN G Carta alir program Attribute Start Variable Declaration Open File MW File Corrupted Read File Successful Browse Data Insert Attribute Find Node Insert Number Block Insert Floor Level Insert Room Number Insert Room Name Save End LAMPIRAN H Contoh pengaturcaraan program Attribute VERSION 5.00 Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX" Begin VB.Form Form1 BackColor = &H000080FF& BorderStyle = 1 'Fixed Single Caption = "Uznetwork@MWFilereader™ 1.0" ClientHeight = 7095 ClientLeft = 2610 ClientTop = 2655 ClientWidth = 6945 BeginProperty Font Name = "Times New Roman" Size = 8.25 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Icon = "Form1.frx":0000 LinkTopic = "Form1" MaxButton = 0 'False MinButton = 0 'False ScaleHeight = 7095 ScaleWidth = 6945 Begin VB.TextBox txtData BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 4695 Left = 6960 Locked = -1 'True MultiLine = -1 'True ScrollBars = 3 'Both TabIndex = 23 Top = 480 Visible = 0 'False Width = 3015 End Begin VB.CommandButton cmdLastRec Caption = ">|" BeginProperty Font Name = "Trebuchet MS" Size = 15.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 495 Left = 5640 TabIndex Top Width = = = 22 6000 735 End Begin VB.CommandButton cmdFirstRec Caption = "|<" BeginProperty Font Name = "Trebuchet MS" Size = 15.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 495 Left = 3120 TabIndex = 21 Top = 6000 Width = 735 End Begin VB.TextBox Text2 Height = 375 Left = 8040 TabIndex = 20 Top = 480 Visible = 0 'False Width = 1455 End Begin VB.TextBox txtIDArray BeginProperty Font Name = "Verdana" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 375 Left = 3600 TabIndex = 19 Top = 6600 Visible = 0 'False Width = 1695 End Begin VB.TextBox txtNextPrevious Height = 315 Left = 6600 TabIndex = 18 Top = 6360 Visible = 0 'False Width = 1695 End Begin VB.CommandButton cmdPrevious Caption = "<<" BeginProperty Font Name = "Trebuchet MS" Size = 15.75 Charset = 0 Weight = 700 Underline Italic Strikethrough EndProperty Height = Left = TabIndex = Top = Width = = = = 0 0 0 'False 'False 'False 495 3960 17 6000 735 End Begin VB.CommandButton cmdNext Caption = ">>" BeginProperty Font Name = "Trebuchet MS" Size = 15.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 495 Left = 4800 TabIndex = 16 Top = 6000 Width = 735 End Begin VB.TextBox txtFloor BeginProperty Font Name = "Verdana" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 375 Left = 2640 Locked = -1 'True TabIndex = 15 Top = 3840 Width = 3735 End Begin VB.TextBox txtNodeID BeginProperty Font Name = "Verdana" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 375 Left = 2640 Locked = -1 'True TabIndex = 14 Top = 840 Width = 3735 End Begin VB.TextBox txtRoom BeginProperty Font Name = "Verdana" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 375 Left = 2640 Locked = -1 'True TabIndex = 13 Top = 4440 Width = 3735 End Begin VB.TextBox txtBlock BeginProperty Font Name = "Verdana" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 375 Left = 2640 Locked = -1 'True TabIndex = 12 Top = 3240 Width = 3735 End Begin VB.TextBox txtCoorZ BeginProperty Font Name = "Verdana" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 375 Left = 2640 Locked = -1 'True TabIndex = 11 Top = 2640 Width = 3735 End Begin VB.TextBox txtCoorY BeginProperty Font Name = "Verdana" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height Left Locked TabIndex Top Width = = = = = = 375 2640 -1 'True 10 2040 3735 End Begin VB.TextBox txtCoorX BeginProperty Font Name = "Verdana" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 375 Left = 2640 Locked = -1 'True TabIndex = 9 Top = 1440 Width = 3735 End Begin VB.TextBox txtStaff BeginProperty Font Name = "Verdana" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 375 Left = 2640 Locked = -1 'True TabIndex = 8 Top = 5040 Width = 3735 End Begin MSComDlg.CommonDialog cdlg Left = 9360 Top = 1320 _ExtentX = 847 _ExtentY = 847 _Version = 393216 End Begin MSComDlg.CommonDialog cdlg2 Left = 9360 Top = 1920 _ExtentX = 847 _ExtentY = 847 _Version = 393216 End Begin VB.Label Label5 Alignment = 2 'Center BackStyle = 0 'Transparent Caption = "MW Database Information" BeginProperty Font Name = "Arial" Size Charset Weight Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = = = = = = = 15.75 0 700 0 'False -1 'True 0 'False &H00000000& 495 960 24 240 5055 End Begin VB.Label lblStaff AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Room/Staff Name" BeginProperty Font Name = "Verdana" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 240 Left = 480 TabIndex = 7 Top = 5160 Width = 1950 End Begin VB.Label lblRoom AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Room Number" BeginProperty Font Name = "Verdana" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 240 Left = 480 TabIndex = 6 Top = 4560 Width = 1530 End Begin VB.Label lblFloor AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Floor Level" BeginProperty Font Name = "Verdana" Size = 9.75 Charset = 0 Weight = 700 Underline Italic Strikethrough EndProperty Height = Left = TabIndex = Top = Width = = = = 0 0 0 'False 'False 'False 240 480 5 3960 1200 End Begin VB.Label lblBlock AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Block Number" BeginProperty Font Name = "Verdana" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 240 Left = 480 TabIndex = 4 Top = 3360 Width = 1500 End Begin VB.Label Label4 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Z-Coordinate" BeginProperty Font Name = "Verdana" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 240 Left = 480 TabIndex = 3 Top = 2760 Width = 1440 End Begin VB.Label Label3 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Y-Coordinate" BeginProperty Font Name = "Verdana" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height Left TabIndex Top Width = = = = = 240 480 2 2160 1455 End Begin VB.Label Label2 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "X-Coordinate" BeginProperty Font Name = "Verdana" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 240 Left = 480 TabIndex = 1 Top = 1560 Width = 1455 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Nodes ID" BeginProperty Font Name = "Verdana" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 240 Left = 480 TabIndex = 0 Top = 960 Width = 975 End Begin VB.Menu File_Menu Caption = "&File" Begin VB.Menu Load_MW Caption = "&Load file... (*.MW File)" End Begin VB.Menu Exit Caption = "&Exit MW File Reader" Shortcut = ^E End End Begin VB.Menu Edit_Menu Caption = "&Edit" Begin VB.Menu StartEditing Caption = "Start Editing" Enabled = 0 'False End Begin VB.Menu InsertAttribute Caption Enabled Shortcut = = = "Insert Attribute" 0 'False {F9} End Begin VB.Menu StopEditing Caption = "Stop Editing" Enabled = 0 'False End Begin VB.Menu Clear_List Caption = "&Clear Data View" Enabled = 0 'False Shortcut = {F3} End End Begin VB.Menu Find Caption = "Find" Begin VB.Menu Search Caption = "Search phrase..." Enabled = 0 'False End End Begin VB.Menu Help Caption = "&Help" Begin VB.Menu About Caption = "&About..." Shortcut = ^A End End End Attribute VB_Name = "Form1" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Private Sub About_Click() frmAbout.Show End Sub Private Sub Clear_List_Click() Call Clear_Page Text2 = "" Clear_List.Enabled = False StartEditing.Enabled = False StopEditing.Enabled = False InsertAttribute.Enabled = False Search.Enabled = False cdlg.FileName = "" cmdNext.Enabled = False cmdPrevious.Enabled = False cmdFirstRec.Enabled = False cmdLastRec.Enabled = False End Sub Private Sub cmdFirstRec_Click() txtNextPrevious.Text = "First Record" Call Next_Previous End Sub Private Sub cmdLastRec_Click() txtNextPrevious.Text = "Last Record" Call Next_Previous End Sub Private Sub cmdNext_Click() txtNextPrevious.Text = "Next" Call Next_Previous End Sub Private Sub cmdPrevious_Click() txtNextPrevious.Text = "Previous" Call Next_Previous End Sub Private Sub Exit_Click() End End Sub Private Sub Form_Load() Move (Screen.Width \ 2) - (Me.Width \ 2), (Screen.Height \ 2) (Me.Height \ 2) cmdNext.Enabled = False cmdPrevious.Enabled = False cmdFirstRec.Enabled = False cmdLastRec.Enabled = False End Sub Private Sub InsertAttribute_Click() Dim InsertBlock As String Dim InsertAras As String Dim InsertNomborBilik As String Dim InsertNamaBilik As String InsertBlock = InputBox("Block Number (e.g: C03)", "Insert Attribute - Step 1") If InsertBlock = "" Then Exit Sub InsertAras = InputBox("Floor Level (e.g: 3, 4, 1)", "Insert Attribute - Step 2") If InsertAras = "" Then Exit Sub InsertNomborBilik = InputBox("Room Number (e.g: 331, 126)", "Insert Attribute - Step 3") If InsertNomborBilik = "" Then Exit Sub InsertNamaBilik = InputBox("Room Name (e.g: Ahmad Ali, Makmal GIS)", "Insert Attribute - Step 4") If InsertNamaBilik = "" Then Exit Sub InsertBlock = UCase$(InsertBlock) InsertNamaBilik = StrConv(InsertNamaBilik, vbProperCase) txtBlock.Visible = True lblBlock.Visible = True txtBlock.Text = InsertBlock Block(txtIDArray.Text) = InsertBlock txtFloor.Visible = True lblFloor.Visible = True txtFloor.Text = InsertAras Floor(txtIDArray.Text) = InsertAras txtRoom.Visible = True lblRoom.Visible = True txtRoom.Text = InsertNomborBilik Room(txtIDArray.Text) = InsertNomborBilik txtStaff.Visible = True lblStaff.Visible = True txtStaff.Text = InsertNamaBilik Staff(txtIDArray.Text) = InsertNamaBilik End Sub Private Sub Load_MW_Click() cdlg.Filter = "MW Database Interchange (*.MW)|*.MW|all files(*,*)|*.*" cdlg.ShowOpen FileInput = cdlg.FileName Text2.Text = FileInput If Text2.Text <> "" Then StartEditing.Enabled = True Clear_List.Enabled = True Search.Enabled = True cmdNext.Enabled = True cmdPrevious.Enabled = True cmdFirstRec.Enabled = False cmdLastRec.Enabled = True End If If txtIDArray.Text <> "" Then Call Clear_Page End If Call Load_Text txtIDArray.Text = 1 txtNodeID.Text = ID(1) txtCoorX.Text = coorX(1) txtCoorY.Text = coorY(1) txtCoorZ.Text = coorZ(1) If Block(1) <> "" Then txtBlock.Visible = True lblBlock.Visible = True txtBlock.Text = Block(1) Else txtBlock.Visible = False lblBlock.Visible = False End If If Floor(1) <> "" Then txtFloor.Visible = True lblFloor.Visible = True txtFloor.Text = Floor(1) Else txtFloor.Visible = False lblFloor.Visible = False End If If Room(1) <> "" Then txtRoom.Visible = True lblRoom.Visible = True txtRoom.Text = Room(1) Else txtRoom.Visible = False lblRoom.Visible = False End If If Staff(1) <> "" Then txtStaff.Visible = True lblStaff.Visible = True txtStaff.Text = Staff(1) Else txtStaff.Visible = False lblStaff.Visible = False End If End Sub Private Sub Search_Click() frmFind.Show End Sub Private Sub StartEditing_Click() StartEditing.Enabled = False InsertAttribute.Enabled = True StopEditing.Enabled = True End Sub Private Sub StopEditing_Click() Dim Jawapan As String Jawapan = MsgBox("Would you like to save your edits?", vbQuestion + vbYesNoCancel, "Save As...") If Jawapan = vbYes Then txtData.Text = "" txtData.Text = txtData.Text & "Copyright to Uznetwork@topology (TM) 1.0" & vbNewLine & _ "© All right reserved 2006" & vbNewLine & vbNewLine ik = 1 For ik = 1 To maxI txtData.Text = txtData.Text & "UzEader" & vbNewLine & _ ID(ik) & vbNewLine & coorX(ik) & vbNewLine & _ coorY(ik) & vbNewLine & coorZ(ik) & vbNewLine & _ Topo(ik, 0) & vbNewLine & Topo(ik, 1) & vbNewLine & _ Topo(ik, 2) & vbNewLine & Topo(ik, 3) & vbNewLine & _ Topo(ik, 4) & vbNewLine & Topo(ik, 5) & vbNewLine & _ Topo(ik, 6) & vbNewLine & Topo(ik, 7) & vbNewLine & _ "Uzdistjar" & vbNewLine & Jarak(ik, 0) & vbNewLine & _ Jarak(ik, 1) & vbNewLine & Jarak(ik, 2) & vbNewLine & _ Jarak(ik, 3) & vbNewLine & Jarak(ik, 4) & vbNewLine & _ Jarak(ik, 5) & vbNewLine & Jarak(ik, 6) & vbNewLine & _ Jarak(ik, 7) & vbNewLine If Block(ik) <> "" Then txtData.Text = txtData.Text & Block(ik) & vbNewLine & _ Floor(ik) & vbNewLine & Room(ik) & vbNewLine & Staff(ik) _ & vbNewLine & vbNewLine Else txtData.Text = txtData.Text & vbNewLine End If Next ik cdlg2.Flags = cdlOFNHideReadOnly + cdlOFNOverwritePrompt cdlg2.Filter = "MW Database Interchange |.*MW |all files (*,*)|*.*" cdlg2.DefaultExt = "MW" cdlg2.ShowSave SaveText txtData, cdlg2.FileName FileInput = cdlg2.FileName 'Text3.Text = FileInput StartEditing.Enabled = True InsertAttribute.Enabled = False StopEditing.Enabled = False End If If Jawapan = vbNo Then StartEditing.Enabled = True InsertAttribute.Enabled = False StopEditing.Enabled = False Call Clear_Page Call Load_Text End If End Sub Public Sub Load_Text() Dim FileInput As String i = 1 FileInput = cdlg.FileName Open FileInput For Input As #1 Line Input #1, linesA If linesA <> "Copyright to Uznetwork@topology (TM) ERROR While Not EOF(1) Line Input #1, linesA If linesA = "UzEader" Then Line Input #1, ID(i) Line Input #1, coorX(i) Line Input #1, coorY(i) Line Input #1, coorZ(i) Line Input #1, Topo(i, 0) Line Input #1, Topo(i, 1) Line Input #1, Topo(i, 2) Line Input #1, Topo(i, 3) Line Input #1, Topo(i, 4) Line Input #1, Topo(i, 5) Line Input #1, Topo(i, 6) Line Input #1, Topo(i, 7) Line Input #1, Uzdistjar Line Input #1, Jarak(i, 0) 1.0" Then GoTo Line Input #1, Jarak(i, 1) Line Input #1, Jarak(i, 2) Line Input #1, Jarak(i, 3) Line Input #1, Jarak(i, 4) Line Input #1, Jarak(i, 5) Line Input #1, Jarak(i, 6) Line Input #1, Jarak(i, 7) Line Input #1, CheckAdaAttribut If CheckAdaAttribut <> "" Then Block(i) = CheckAdaAttribut Line Input #1, Floor(i) Line Input #1, Room(i) Line Input #1, Staff(i) End If i = i + 1 maxI = i - 1 End If Wend Close #1 Exit Sub ERROR: MsgBox "Your Data Is Corrupted!", vbCritical, "WARNING!" Close #1 End Sub Public Sub Clear_Page() txtNodeID.Text = "" txtCoorX.Text = "" txtCoorY.Text = "" txtCoorZ.Text = "" txtBlock.Text = "" txtFloor.Text = "" txtRoom.Text = "" txtStaff.Text = "" Dim i As Integer i = 1 For i = 1 To maxI ID(i) = "" coorX(i) = "" coorY(i) = "" coorZ(i) = "" Topo(i, 0) = "" Topo(i, 1) = "" Topo(i, 2) = "" Topo(i, 3) = "" Topo(i, 4) = "" Topo(i, 5) = "" Topo(i, 6) = "" Topo(i, 7) = "" Jarak(i, 0) = "" Jarak(i, 1) = "" Jarak(i, 2) = "" Jarak(i, 3) = "" Jarak(i, 4) = "" Jarak(i, 5) = "" Jarak(i, 6) = "" Jarak(i, 7) = "" Block(i) = "" Floor(i) = "" Room(i) = "" Staff(i) = "" Next i txtData.Text = "" maxI = 0 End Sub LAMPIRAN I Carta alir program Aplikasi Utama (pengiraan laluan terpendek) Start Variable Declaration MW Database File Data Verification Successful Read Header Corrupted Goto Err Handler Store Temporary Data Current and Destination Location Setting Setting Temporary Dijkstra Iteration 1 Dijkstra Step 1 No Dijkstra Step 2 Dijkstra Iteration 2 Dijkstra Step 1 Reach to Target Nodes Dijkstra Step 2 Reached Stop Calculation Display Statistics 3D Navigation Close File End Unreachable LAMPIRAN J Contoh pengaturcaraan program utama VERSION 5.00 Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX" Begin VB.Form frmDBConfig BackColor = &H00808080& BorderStyle = 0 'None Caption = "Database Configuration" ClientHeight = 4620 ClientLeft = 5400 ClientTop = 3885 ClientWidth = 6540 Icon = "frmDBConfig.frx":0000 LinkTopic = "Form1" ScaleHeight = 4620 ScaleWidth = 6540 ShowInTaskbar = 0 'False Begin VB.TextBox txtCopyWldBitmaps Height = 375 Left = 240 TabIndex = 8 Text = "Text2" Top = 5520 Visible = 0 'False Width = 1335 End Begin VB.TextBox txtCopyWld Height = 375 Left = 240 TabIndex = 7 Text = "Text1" Top = 5040 Visible = 0 'False Width = 1335 End Begin VB.TextBox txtCopyMWDB Height = 375 Left = 240 TabIndex = 6 Text = "Text1" Top = 4560 Visible = 0 'False Width = 1335 End Begin VB.Frame Frame1 BackColor = &H00000000& Caption = "Database Configuration" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 4335 Left = 120 TabIndex = 0 Top = 120 Width = 6255 Begin MSComDlg.CommonDialog cdlgBitmaps Left = 1560 Top = 4440 _ExtentX = 847 _ExtentY = 847 _Version = 393216 End Begin MSComDlg.CommonDialog cdlgWld Left = 960 Top = 4440 _ExtentX = 847 _ExtentY = 847 _Version = 393216 End Begin MSComDlg.CommonDialog cdlgMW Left = 360 Top = 4440 _ExtentX = 847 _ExtentY = 847 _Version = 393216 End Begin VB.TextBox txtWld BackColor = &H00E0E0E0& BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 315 Left = 480 Locked = -1 'True TabIndex = 5 Top = 2040 Width = 4455 End Begin VB.TextBox txtWldBitmaps BackColor = &H00E0E0E0& BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 315 Left = 480 Locked = -1 'True TabIndex = 4 Top = 2520 Width = 4455 End Begin VB.TextBox txtMWDB BackColor = &H00E0E0E0& BeginProperty Font Name Size Charset Weight Underline Italic Strikethrough EndProperty ForeColor = Height = Left = Locked = TabIndex = Top = Width = = = = = = = = "Arial" 9 0 700 0 'False 0 'False 0 'False &H00000000& 315 480 -1 'True 2 1080 4455 End Begin VB.Label Label5 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Cancel" BeginProperty Font Name = "Arial" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00E0E0E0& Height = 210 Left = 5280 TabIndex = 11 Top = 3960 Width = 555 End Begin VB.Label Label4 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "OK" BeginProperty Font Name = "Arial" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00E0E0E0& Height = 210 Left = 4680 TabIndex = 10 Top = 3960 Width = 225 End Begin VB.Label lblSaveSetting AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Save Setting" BeginProperty Font Name Size Charset Weight Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = = = = = = = = "Arial" 8.25 0 700 0 'False 0 'False 0 'False &H00E0E0E0& 210 480 9 3960 1140 End Begin VB.Image imgCancel Height = 615 Left = 5280 Picture = "frmDBConfig.frx":0ECA Stretch = -1 'True ToolTipText = "Cancel" Top = 3240 Width = 615 End Begin VB.Image imgSaveSetting Height = 615 Left = 720 Picture = "frmDBConfig.frx":2EDE Stretch = -1 'True ToolTipText = "Save Setting" Top = 3240 Width = 615 End Begin VB.Image imgOK Height = 615 Left = 4440 Picture = "frmDBConfig.frx":5CA9 Stretch = -1 'True ToolTipText = "OK" Top = 3240 Width = 615 End Begin VB.Image imgOpenWld Height = 975 Left = 5040 MouseIcon = "frmDBConfig.frx":74E2 MousePointer = 99 'Custom Picture = "frmDBConfig.frx":7C64 Stretch = -1 'True ToolTipText = "Open Environment File" Top = 1920 Width = 975 End Begin VB.Image imgOpenMWDB Height = 960 Left = 5040 MouseIcon = "frmDBConfig.frx":A35B MousePointer = 99 'Custom Picture = "frmDBConfig.frx":AADD Stretch = -1 'True ToolTipText Top Width = = = End Begin VB.Label Label2 BackStyle = Caption = BeginProperty Font Name Size Charset Weight Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = End Begin VB.Label Label1 BackStyle = Caption = BeginProperty Font Name Size Charset Weight Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = End "Open MW Database File" 480 960 0 'Transparent "Environment Setting:" = = = = = = = "Arial" 9.75 0 700 0 'False 0 'False 0 'False &H00E0E0E0& 375 480 3 1680 2295 0 'Transparent "MW database file:" = = = = = = = "Arial" 9.75 0 700 0 'False 0 'False 0 'False &H00E0E0E0& 375 480 1 720 2295 End End Attribute VB_Name = "frmDBConfig" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Private Sub Form_Load() imgSaveSetting.Visible = False lblSaveSetting.Visible = False '------------- Setting the DB automatically-----------------' This untuk setting data default bg MW Database txtMWDB.text = "C:\Program Files\3D Network Analysis\Aspatial\3D Network aras bawah (attribute).MW" ' This untuk setting data default bg World Environment txtWld.text = "C:\Program Files\3D Network Analysis\Spatial\World Aras Bawah.wld" ' This untuk setting data default bg World Bitmaps Environment txtWldBitmaps.text = "C:\Program Files\3D Network Analysis\Spatial\bitmaps" ' Setting utk semua jd default MWDatabaseFileName = txtMWDB.text WorldFileName = "World Aras Bawah.wld" WorldFileDir = "C:\Program Files\3D Network Analysis\Spatial" WorldBitmapsFileName = WorldFileDir & "\Bitmaps" Call Setting4Cancel End Sub Private Sub imgCancel_Click() txtMWDB.text = txtCopyMWDB.text txtWld.text = txtCopyWld.text txtWldBitmaps.text = txtCopyWldBitmaps.text imgSaveSetting.Visible = False lblSaveSetting.Visible = False frmDBConfig.Hide End Sub Private Sub imgOK_Click() frmDBConfig.Hide frmUtama.Show End Sub Private Sub imgOpenMWDB_Click() Call ConfigureMWdb End Sub Private Sub imgOpenWld_Click() Call ConfigureWld End Sub Private Sub imgSaveSetting_Click() Call DataSet frmAdSearch.cboBlock.Clear frmAdSearch.cboFloorLevel.Clear frmAdSearch.cboRoomNumber.Clear frmAdSearch.cboStaffName.Clear MWDatabaseFileName = txtMWDB.text If cdlgWld.FileTitle = "" Then GoTo SINI WorldFileName = cdlgWld.FileTitle WorldFileDir = JustPath4Save WorldBitmapsFileName = txtWldBitmaps.text SINI: Call DataLoad2Combo If DataCorrupted = True Then DataCorrupted = False imgSaveSetting.Visible = False lblSaveSetting.Visible = False Exit Sub End If imgSaveSetting.Visible = False lblSaveSetting.Visible = False Call Setting4Cancel MsgBox "Setting Saved!", vbInformation, "Save Setting" End Sub VERSION 5.00 Begin VB.Form frmShortestPath BackColor = &H00808080& BorderStyle = 0 'None ClientHeight = 7740 ClientLeft = 1515 ClientTop = 750 ClientWidth = 12405 LinkTopic = "Form1" ScaleHeight = 7740 ScaleWidth = 12405 ShowInTaskbar = 0 'False StartUpPosition = 2 'CenterScreen Begin VB.Frame fraDijkstra BackColor = &H00404040& Caption = "Dijkstra's" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 1575 Left = 12000 TabIndex = 0 Top = 1560 Width = 3375 Begin VB.ComboBox cbo Height = 315 Left = 360 TabIndex = 8 Top = 480 Width = 2655 End Begin VB.ComboBox cbo2 Height = 315 Left = 360 TabIndex = 7 Top = 960 Width = 2655 End End Begin VB.Frame fraShortest BackColor = &H00404040& Caption = "Shortest Path" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 1575 Left = 12000 TabIndex = 1 Top = 3120 Width = 3255 Begin VB.ComboBox cbo3 Height = 315 Left = 120 TabIndex = 6 Top = 480 Width = 2895 End Begin VB.ComboBox cbo4 Height = 315 Left = 120 TabIndex = 5 Top = 960 Width = 2895 End End Begin VB.Frame Frame2 BackColor = &H00000000& Caption = "Dijkstra's Shortest Path Algorithm Calculation Result" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 7455 Left = 120 TabIndex = 2 Top = 120 Width = 12135 Begin VB.PictureBox Plot BackColor = &H00000000& BorderStyle = 0 'None FillColor = &H00FFFFFF& ForeColor = &H00FFFFFF& Height = 3075 Left = 5400 ScaleHeight = 3075 ScaleWidth = 6405 TabIndex = 62 Top = 480 Width = 6405 Begin VB.Label Label32 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Z" BeginProperty Font Name = "MS Sans Serif" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = = = 0 0 'False 'False &H8000000E& 240 0 69 240 150 End Begin VB.Label Label31 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Y" BeginProperty Font Name = "MS Sans Serif" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000E& Height = 240 Left = 1320 TabIndex = 68 Top = 1680 Width = 165 End Begin VB.Label Label30 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "X" BeginProperty Font Name = "MS Sans Serif" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000E& Height = 240 Left = 1440 TabIndex = 67 Top = 2760 Width = 150 End Begin VB.Line Line3 BorderColor = &H80000002& X1 = 0 X2 = 0 Y1 = 2400 Y2 = 600 End Begin VB.Line Line2 BorderColor = &H80000002& X1 = 0 X2 = 1200 Y1 Y2 = = End Begin VB.Line Line1 BorderColor = X1 = X2 = Y1 = Y2 = End Begin VB.Line DLine BorderColor = Index = Visible = X1 = X2 = Y1 = Y2 = End 2400 1800 &H80000002& 0 1320 2400 2880 &H000000FF& 0 0 'False 1200 3960 4320 4320 End Begin VB.TextBox Theta_Ang Alignment = 2 'Center BackColor = &H00FFFFFF& BeginProperty Font Name = "Courier" Size = 9.75 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00000000& Height = 330 Left = 3240 TabIndex = 61 Text = "300" Top = 6720 Visible = 0 'False Width = 1365 End Begin VB.TextBox Alt_Ang Alignment = 2 'Center BackColor = &H00FFFFFF& BeginProperty Font Name = "Courier" Size = 9.75 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00000000& Height = 330 Left = 4800 TabIndex = 60 Text = "20" Top = 6705 Visible = 0 'False Width = 1275 End Begin VB.TextBox Size_Factor Alignment = 2 'Center BackColor = &H00FFFFFF& BeginProperty Font Name = "Courier" Size = 9.75 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00000000& Height = 330 Left = 10035 TabIndex = 59 Text = "11000" Top = 720 Visible = 0 'False Width = 1185 End Begin VB.TextBox Perspective_Factor Alignment = 2 'Center BackColor = &H00FFFFFF& BeginProperty Font Name = "Courier" Size = 9.75 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00000000& Height = 330 Left = 6360 TabIndex = 58 Text = "4000" Top = 6720 Visible = 0 'False Width = 1320 End Begin VB.CommandButton Draw_Cube_Button BackColor = &H00C0C0C0& Caption = "Draw" Default = -1 'True BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 375 Left = 6360 TabIndex = 57 Top = 7920 Visible = 0 'False Width = 1500 End Begin VB.ComboBox cboNode Height = 315 Left = 4080 TabIndex = 4 Text = "Combo1" Top = 7800 Width = 1935 End Begin VB.ComboBox cboLvl Height = 315 Left = 1920 TabIndex = 3 Text = "Combo1" Top = 7800 Width = 2055 End Begin VB.Shape Shape1 BorderColor = &H00C0C0C0& Height = 3495 Left = 240 Top = 360 Width = 11655 End Begin VB.Label Label18 Alignment = 2 'Center BackColor = &H00C0C0C0& Caption = "Direction of Eye" ForeColor = &H00000000& Height = 240 Left = 3240 TabIndex = 66 Top = 6480 Visible = 0 'False Width = 1365 End Begin VB.Label Label17 Alignment = 2 'Center BackColor = &H00C0C0C0& Caption = "Altitude of Eye" ForeColor = &H00000000& Height = 240 Left = 4800 TabIndex = 65 Top = 6480 Visible = 0 'False Width = 1275 End Begin VB.Label Label16 Alignment = 2 'Center BackColor = &H00C0C0C0& Caption = "Size Factor" ForeColor = &H00000000& Height = 240 Left = 10020 TabIndex = 64 Top = 480 Visible = 0 'False Width = 1185 End Begin VB.Label Label15 Alignment = 2 'Center BackColor = &H00C0C0C0& Caption = "Perspective" ForeColor = &H00000000& Height = 240 Left = 6330 TabIndex = 63 Top = 6480 Visible = 0 'False Width = 1350 End Begin VB.Label Label29 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Room/Staff Name:" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 240 Left = 6960 TabIndex = 56 Top = 4800 Width = 1725 End Begin VB.Label Label28 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Room Number:" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 240 Left = 6960 TabIndex = 55 Top = 5400 Width = 1425 End Begin VB.Label Label27 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Block:" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = = = = 0 0 0 'False 'False 'False &H8000000A& 240 8640 54 5760 585 End Begin VB.Label Label19 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Floor:" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 240 Left = 6960 TabIndex = 53 Top = 5760 Width = 555 End Begin VB.Label lblStaffNameTarLoc AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000C0C0& Height = 240 Left = 7320 TabIndex = 52 Top = 5040 Width = 735 End Begin VB.Label lblNumberTarLoc AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = = = 0 0 'False 'False &H0000C0C0& 240 8520 51 5400 735 End Begin VB.Label lblArasTarLoc AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000C0C0& Height = 240 Left = 7680 TabIndex = 50 Top = 5760 Width = 735 End Begin VB.Label lblBlokTarLoc AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000C0C0& Height = 240 Left = 9360 TabIndex = 49 Top = 5760 Width = 735 End Begin VB.Label lblBlokCurLoc AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = = 0 'False &H0000C0C0& 240 3120 48 5760 735 End Begin VB.Label lblArasCurLoc AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000C0C0& Height = 240 Left = 1560 TabIndex = 47 Top = 5760 Width = 735 End Begin VB.Label lblNumberCurLoc AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000C0C0& Height = 240 Left = 2400 TabIndex = 46 Top = 5400 Width = 735 End Begin VB.Label lblStaffNameCurLoc AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor Height Left TabIndex Top Width = = = = = = &H0000C0C0& 240 1200 45 5040 735 End Begin VB.Label Label14 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Floor:" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 240 Left = 840 TabIndex = 44 Top = 5760 Width = 555 End Begin VB.Label Label13 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Block:" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 240 Left = 2400 TabIndex = 43 Top = 5760 Width = 585 End Begin VB.Label Label11 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Room Number:" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor Height Left TabIndex Top Width = = = = = = &H8000000A& 240 840 42 5400 1425 End Begin VB.Label Label9 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Room/Staff Name:" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 240 Left = 840 TabIndex = 41 Top = 4800 Width = 1725 End Begin VB.Label Label12 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Cancel" BeginProperty Font Name = "Arial" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00E0E0E0& Height = 210 Left = 11280 TabIndex = 40 Top = 7080 Width = 555 End Begin VB.Label lbl3DNaviPrint AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Print" BeginProperty Font Name = "Arial" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00E0E0E0& Height Left TabIndex Top Width = = = = = 210 10320 39 7080 390 End Begin VB.Label lbl3DNavigation AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Navigate" BeginProperty Font Name = "Arial" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00E0E0E0& Height = 210 Left = 8880 TabIndex = 38 Top = 7080 Width = 690 End Begin VB.Label Label10 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Processing Stopped" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 240 Left = 1440 TabIndex = 37 Top = 1800 Width = 1890 End Begin VB.Label lblTimeEnd AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 240 Left TabIndex Top Width = = = = 3600 36 1800 735 End Begin VB.Image img3DNaviPrint Height = 855 Left = 9840 Picture = "frmShortestPath.frx":0000 Stretch = -1 'True ToolTipText = "Printable 3D Navigation" Top = 6240 Visible = 0 'False Width = 1095 End Begin VB.Image img3DNavigation Height = 735 Left = 8760 Picture = "frmShortestPath.frx":27DD Stretch = -1 'True ToolTipText = "3D Environment Navigation" Top = 6240 Visible = 0 'False Width = 855 End Begin VB.Image imgExit Height = 735 Left = 11160 Picture = "frmShortestPath.frx":5123 Stretch = -1 'True ToolTipText = "Cancel" Top = 6240 Width = 735 End Begin VB.Label lblDistance AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 240 Left = 3600 TabIndex = 35 Top = 2880 Width = 735 End Begin VB.Label Label26 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Nodes Used" BeginProperty Font Name = "Arial" Size = 9.75 Charset Weight Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = = = = = = 0 700 0 'False 0 'False 0 'False &H8000000A& 240 1440 34 2520 1110 End Begin VB.Label Label25 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Z:" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 240 Left = 10440 TabIndex = 33 Top = 4440 Width = 165 End Begin VB.Label Label24 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Y:" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 240 Left = 8880 TabIndex = 32 Top = 4440 Width = 180 End Begin VB.Label Label23 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "X:" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = = = = = 700 0 'False 0 'False 0 'False &H8000000A& 240 6960 31 4440 195 End Begin VB.Label lblDestiZcoord AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 240 Left = 10680 TabIndex = 30 Top = 4440 Width = 735 End Begin VB.Label lblDestiYcoord AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 240 Left = 9120 TabIndex = 29 Top = 4440 Width = 735 End Begin VB.Label lblDestiXcoord AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = = = = 0 0 0 'False 'False 'False &H0000FF00& 240 7320 28 4440 735 End Begin VB.Label Label22 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Z:" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 240 Left = 4320 TabIndex = 27 Top = 4440 Width = 165 End Begin VB.Label Label21 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Y:" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 240 Left = 2760 TabIndex = 26 Top = 4440 Width = 180 End Begin VB.Label Label20 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "X:" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = = = 0 0 'False 'False &H8000000A& 240 840 25 4440 195 End Begin VB.Label lblCurrZcoord AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 240 Left = 4560 TabIndex = 24 Top = 4440 Width = 735 End Begin VB.Label lblCurrYcoord AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 240 Left = 3000 TabIndex = 23 Top = 4440 Width = 735 End Begin VB.Label lblCurrXcoord AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = = 0 'False &H0000FF00& 240 1200 22 4440 735 End Begin VB.Label lblNodesUsed AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 240 Left = 3600 TabIndex = 21 Top = 2520 Width = 735 End Begin VB.Label lblNodesCalculate AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 240 Left = 3600 TabIndex = 20 Top = 2160 Width = 735 End Begin VB.Label lblTime AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor Height Left TabIndex Top Width = = = = = = &H0000FF00& 240 3600 19 1440 735 End Begin VB.Label lblDate AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 240 Left = 3600 TabIndex = 18 Top = 1080 Width = 735 End Begin VB.Label lblStatus AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 240 Left = 1440 TabIndex = 17 Top = 600 Width = 735 End Begin VB.Label Label8 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Destination Location Information:" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor Height Left TabIndex Top Width = = = = = = End Begin VB.Label Label7 AutoSize = BackStyle = Caption = BeginProperty Font Name Size Charset Weight Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = End Begin VB.Label Label6 AutoSize = BackStyle = Caption = BeginProperty Font Name Size Charset Weight Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = End Begin VB.Label Label5 AutoSize = BackStyle = Caption = BeginProperty Font Name Size Charset Weight Underline Italic Strikethrough EndProperty ForeColor = &H8000000A& 240 6360 16 4080 3165 -1 'True 0 'Transparent "Current Location Information:" = = = = = = = "Arial" 9.75 0 700 0 'False 0 'False 0 'False &H8000000A& 240 240 15 4080 2805 -1 'True 0 'Transparent "Time Executed" = = = = = = = "Arial" 9.75 0 700 0 'False 0 'False 0 'False &H8000000A& 240 1440 14 1440 1425 -1 'True 0 'Transparent "Date" = = = = = = = "Arial" 9.75 0 700 0 'False 0 'False 0 'False &H8000000A& Height Left TabIndex Top Width = = = = = End Begin VB.Label Label4 AutoSize = BackStyle = Caption = BeginProperty Font Name Size Charset Weight Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = End Begin VB.Label Label3 AutoSize = BackStyle = Caption = BeginProperty Font Name Size Charset Weight Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = End Begin VB.Label Label2 AutoSize = BackStyle = Caption = BeginProperty Font Name Size Charset Weight Underline Italic Strikethrough EndProperty ForeColor = Height = 240 1440 13 1080 435 -1 'True 0 'Transparent "Nodes Calculated" = = = = = = = "Arial" 9.75 0 700 0 'False 0 'False 0 'False &H8000000A& 240 1440 12 2160 1665 -1 'True 0 'Transparent "Distance (Shortest)" = = = = = = = "Arial" 9.75 0 700 0 'False 0 'False 0 'False &H8000000A& 240 1440 11 2880 1770 -1 'True 0 'Transparent "Statistic:" = = = = = = = "Arial" 9.75 0 700 0 'False 0 'False 0 'False &H8000000A& 240 Left TabIndex Top Width = = = = End Begin VB.Label Label1 AutoSize = BackStyle = Caption = BeginProperty Font Name Size Charset Weight Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = End End End Attribute Attribute Attribute Attribute Attribute 360 10 1080 810 -1 'True 0 'Transparent "Status:" = = = = = = = "Arial" 9.75 0 700 0 'False 0 'False 0 'False &H8000000A& 240 360 9 600 645 VB_Name = "frmShortestPath" VB_GlobalNameSpace = False VB_Creatable = False VB_PredeclaredId = True VB_Exposed = False Option Explicit Private Sub Form_Load() frmUtama.flaMainHeader.Playing = False frmUtama.Enabled = False fraShortest.Visible = False fraDijkstra.Visible = False cboLvl.Visible = False cboNode.Visible = False lblTime = time Dim Dim Dim Dim Dim BarisData As String i As Integer Z As Integer Check As Integer CheckingPrint As Boolean i = 0 Check = 0 Open frmDBConfig.txtMWDB.text For Input As #1 fail Line Input #1, BarisData If BarisData = "Copyright to Uznetwork@topology (TM) Line Input #1, BarisData 1.0" Then If BarisData = "© All right reserved 2006" Then MulaBalik: While Not EOF(1) i = i + 1 Line Input #1, BarisData If BarisData = "UzEader" Then Line Input #1, BarisData i = BarisData ID(i) = BarisData Line Input #1, CoordX(i) Line Input #1, CoordY(i) Line Input #1, CoordZ(i) Z = 0 CessorSection: Line Input #1, Cessor(i, Z) Z = Z + 1 If Z < 8 Then GoTo CessorSection 'counter back to fill the eight cessor Line Input #1, BarisData Z = 0 If BarisData = "Uzdistjar" Then DistSection: Line Input #1, DistUzdistjar(i, Z) Z = Z + 1 If Z < 8 Then GoTo DistSection 'Counter bagi cukup Line Input If Blok(i) data yang without attribute Line Input Line Input Line Input #1, Blok(i) = "" Then GoTo MulaBalik ' Untuk #1, Aras(i) #1, RNumber(i) #1, BName(i) Else GoTo ErrHandler End If Else GoTo MulaBalik End If ' untuk UzEader Wend End If Else GoTo ErrHandler End If Close #1 Dim Dim Dim Dim Dim '--------- always tutup fail, jangan lupa CurrLoc As String TarLoc As String idCurrLoc As Integer idTarLoc As Integer kCheck As Integer 'Validation field Current If frmUtama.cboRoomNumber.text = "" Or frmUtama.cboRoomNumber.text = "<None>" Or frmUtama.cboRoomNumber.text = "Null" Then kCheck = 0 CurrLoc = frmUtama.cboRoom.text For kCheck = 0 To i If BName(kCheck) = CurrLoc Then idCurrLoc = ID(kCheck) Exit For End If Next kCheck Else kCheck = 0 CurrLoc = frmUtama.cboRoomNumber.text For kCheck = 0 To i If RNumber(kCheck) = CurrLoc Then If BName(kCheck) = frmUtama.cboRoom.text Or frmUtama.cboRoom.text = "" Or frmUtama.cboRoom.text = "<None>" Then idCurrLoc = ID(kCheck) Exit For Else MsgBox "Your Current Name and Room Number doesn't match. Please use Advance Search.", vbExclamation, "Matching Field Error" lblStatus.Caption = "Stopped" lblTime = "<None>" Exit Sub End If End If Next kCheck End If 'Validation field Target If frmUtama.cboTargetRoomNumber.text = "" Or frmUtama.cboTargetRoomNumber.text = "<None>" Or frmUtama.cboTargetRoomNumber.text = "Null" Then kCheck = 0 TarLoc = frmUtama.cboTargetRoom.text For kCheck = 0 To i If BName(kCheck) = TarLoc Then idTarLoc = ID(kCheck) Exit For End If Next kCheck Else kCheck = 0 TarLoc = frmUtama.cboTargetRoomNumber.text For kCheck = 0 To i If RNumber(kCheck) = TarLoc Then If BName(kCheck) = frmUtama.cboTargetRoom.text Or frmUtama.cboTargetRoom.text = "" Or frmUtama.cboTargetRoom.text = "<None>" Then idTarLoc = ID(kCheck) Exit For Else MsgBox "Your Destination Name and Room Number doesn't match. Please use Advance Search.", vbExclamation, "Matching Field Error" lblStatus.Caption = "Stopped" lblTime = "<None>" Exit Sub End If End If Next kCheck End If lblStaffNameCurLoc.Caption = BName(idCurrLoc) lblNumberCurLoc.Caption = RNumber(idCurrLoc) lblArasCurLoc.Caption = Aras(idCurrLoc) lblBlokCurLoc.Caption = Blok(idCurrLoc) lblStaffNameTarLoc.Caption = BName(idTarLoc) lblNumberTarLoc.Caption = RNumber(idTarLoc) lblArasTarLoc.Caption = Aras(idTarLoc) lblBlokTarLoc.Caption = Blok(idTarLoc) lblCurrXcoord.Caption = FormatNumber((CoordX(idCurrLoc) Model_Scaling), 3) lblCurrYcoord.Caption = FormatNumber((CoordY(idCurrLoc) Model_Scaling), 3) lblCurrZcoord.Caption = FormatNumber((CoordZ(idCurrLoc) Model_Scaling), 3) lblDestiXcoord.Caption = FormatNumber((CoordX(idTarLoc) Model_Scaling), 3) lblDestiYcoord.Caption = FormatNumber((CoordY(idTarLoc) Model_Scaling), 3) lblDestiZcoord.Caption = FormatNumber((CoordZ(idTarLoc) Model_Scaling), 3) Dim Dim Dim Dim Dim Dim Dim Permanent(1000) As Integer Temporary(1000) As Integer distance(1000) As Double 'Long TempDistance(1000) As Double idPermanent As Integer idTemporary As Integer CessorCheck As Integer Dim Dim Dim Dim Dim TempMinimumDist As Double TempMinimumDistID As Integer CompareTempDistance As Double LevelSpread(1000) As Integer LevelSpreadCheck As Integer / / / / / / 'Fix 'Fix 'Fix 'Fix 'Fix 'Fix Dim A As Integer Dim B As Integer idPermanent = 0 idTemporary = 1 A = 0 For A = 0 To i If ID(A) > "" Then Temporary(idTemporary) = ID(A) TempDistance(idTemporary) = 10101010 'set default idTemporary = idTemporary + 1 End If Next A '------------------------------------------TempMinimumDist = 0 LevelSpread(idCurrLoc) = 0 StartSet: idPermanent = idPermanent + 1 Permanent(idPermanent) = idCurrLoc distance(idPermanent) = TempMinimumDist Call cbo.AddItem(Permanent(idPermanent)) Call cbo2.AddItem(distance(idPermanent)) 'LevelSpreadCheck = LevelSpreadCheck + 1 A = 0 For A = 0 To i If Temporary(A) = idCurrLoc Then Temporary(A) = 12345 'Not realistic TempDistance(A) = 11111111 End If Next A If Permanent(idPermanent) = idTarLoc Then 'MsgBox "Sampai!" GoTo AkhirKira End If CessorCheck = 0 For CessorCheck = 0 To 7 If Cessor(idCurrLoc, CessorCheck) > 0 Then A = 1 For A = 1 To i If Temporary(A) = Cessor(idCurrLoc, CessorCheck) Then B = 1 For B = 1 To idPermanent If Cessor(idCurrLoc, CessorCheck) = Permanent(B) Then 'GoTo LoopExit 'MsgBox "Ada tak?" GoTo LoopExit End If Next B CompareTempDistance = distance(idPermanent) + DistUzdistjar(idCurrLoc, CessorCheck) 'TempDistance(A) 'MsgBox CompareTempDistance If CompareTempDistance < TempDistance(A) Then TempDistance(A) = CompareTempDistance 'MsgBox Permanent(idPermanent) If LevelSpread(Cessor(idCurrLoc, CessorCheck)) = 0 Then LevelSpreadCheck = LevelSpread(idCurrLoc) + 1 LevelSpread(Cessor(idCurrLoc, CessorCheck)) = LevelSpreadCheck Call cboLvl.AddItem(LevelSpread(Cessor(idCurrLoc, CessorCheck))) Call cboNode.AddItem(Cessor(idCurrLoc, CessorCheck)) 'MsgBox LevelSpread(A) End If End If LoopExit: End If Next A End If Next CessorCheck A = 0 TempMinimumDist = 1010101010 For A = 0 To i If TempDistance(A) > 0 Then If TempDistance(A) < TempMinimumDist Then TempMinimumDist = TempDistance(A) TempMinimumDistID = A End If End If Next A 'MsgBox TempMinimumDistID & " TempMinimumDistID" 'MsgBox TempMinimumDist & " TempMinimumDist" idCurrLoc = Temporary(TempMinimumDistID) 'MsgBox idCurrLoc & "TempMinimumDistID punya nilai" GoTo StartSet AkhirKira: Dim Dim Dim Dim Dim Dim IndexArray As Integer LastID As String 'Integer LastDist As Double TransLastID As Integer TransLastDist As Double CheckDist As String 'Double IndexArray = cbo2.ListCount - 1 TransLastID = cbo.List(IndexArray) TransLastDist = cbo2.List(IndexArray) LastID = TransLastID Call cbo3.AddItem(LastID) TransLastDist = FormatNumber(TransLastDist, 10) LastDist = TransLastDist Call cbo4.AddItem(LastDist) If LastDist = 1010101010 Then Call cbo3.Clear Call cbo4.Clear Call cbo3.AddItem("UNREACHABLE") lblStatus.Caption = "Sorry, there's no path to your destination location" lblDate = Date lblTime = time lblNodesCalculate.Caption = cbo.ListCount Exit Sub End If If cbo2.List(cbo2.ListCount - 1) = "10101010" Then lblStatus.Caption = "Sorry, there's no path to your destination location" lblDate = Date lblTime = time lblNodesCalculate.Caption = cbo.ListCount Exit Sub End If LastStart: If LastID = cbo.List(0) Then Call Create_Result 'nak buat statistik semua Exit Sub End If A = 0 For A = 0 To i If ID(A) = LastID Then CessorCheck = 0 For CessorCheck = 0 To 7 If Cessor(A, CessorCheck) > 0 Then If LevelSpread(Cessor(A, CessorCheck)) = (LevelSpread(LastID) - 1) Then 'DistUzdistjar(A, CessorCheck) = FormatNumber(DistUzdistjar(A, CessorCheck), 20) CheckDist = LastDist - DistUzdistjar(A, CessorCheck) CheckDist = FormatNumber(CheckDist, 8) B = 0 For B = 0 To IndexArray cbo2.List(B) = FormatNumber(cbo2.List(B), 8) If cbo.List(B) = Cessor(A, CessorCheck) Then 'If Val(Format(cbo2.List(B), "0000000.0000")) = Val(Format(CheckDist, "0000000.0000")) Then TransLastID = cbo.List(B) TransLastDist = cbo2.List(B) LastID = TransLastID Call cbo3.AddItem(LastID) LastDist = TransLastDist Call cbo4.AddItem(LastDist) GoTo LastStart 'End If End If Next B End If End If Next CessorCheck End If Next A Exit Sub ErrHandler: MsgBox "Your Data is Corrupted! Please configure your data first.", vbCritical End Sub Public Sub Create_Result() lblDate = Date lblTimeEnd = time lblStatus.Caption = "Success" lblNodesCalculate.Caption = cbo.ListCount lblNodesUsed.Caption = cbo3.ListCount lblDistance.Caption = Val(Format((cbo4.List(0) / Model_Scaling), "0000000.0000")) & " meters" img3DNavigation.Visible = True lbl3DNavigation.Visible = True img3DNaviPrint.Visible = True lbl3DNaviPrint.Visible = True Call Draw_Cube_Button_Click End Sub Private Sub imgExit_Click() frmUtama.Enabled = True frmUtama.flaMainHeader.Playing = True Unload Me End Sub Private Sub img3DNavigation_Click() frmUtama.lblDB.Enabled = False Dim KiraCombo As Integer Counter = 1 KiraCombo = cbo3.ListCount - 1 For Counter = 1 To (cbo3.ListCount) NodeUsed(Counter) = cbo3.List(KiraCombo) KiraCombo = KiraCombo - 1 Next Counter frm3DNavigation.Show img3DNavigation.Visible = False lbl3DNavigation.Visible = False img3DNaviPrint.Visible = False lbl3DNaviPrint.Visible = False End Sub Private Sub Draw_Cube_Button_Click() Dim Dim Dim Dim Theta Alt Size Perspective Perspective Size Alt Theta = = = = As As As As Single Single Single Single ' ' ' ' Azimuth of the eye Altitude of the eye Image size scale Image perspective scale Val(Perspective_Factor) Val(Size_Factor) Val(Alt_Ang) Val(Theta_Ang) DRAW_A_CUBE Theta, Alt, Size, Perspective ' Restore mouse pointer to normal when plotting finished frmShortestPath.MousePointer = vbDefault End Sub Private Sub DRAW_A_CUBE(Theta, Alt, Size, Perspective) Dim Dim Dim Dim Dim Dim Dim X Y Z xN2 yN2 ZN2 angle As String 'Long As String 'Long As String 'Long As String 'Long As String 'Long As String 'Long As Single Dim index As Integer Dim Pengira As Integer Dim PengiraCombo As Integer Dim Draw2DLine(5000) As Integer Pengira = 1 PengiraCombo = cbo3.ListCount - 1 Pengira = 1 For Pengira = 1 To (cbo3.ListCount) Draw2DLine(Pengira) = cbo3.List(PengiraCombo) PengiraCombo = PengiraCombo - 1 Next Pengira Pengira = 1 'For Pengira = 1 To (cbo3.ListCount - 1) ' Load DLine(Pengira) ' DLine(Pengira).ZOrder 'Next Pengira Pengira = 1 Dim BoundIDCheck As Integer BoundIDCheck = LBound(ID) For BoundIDCheck = LBound(ID) To UBound(ID) If ID(BoundIDCheck) = "" X = CoordX(BoundIDCheck) Y = CoordY(BoundIDCheck) Z = CoordZ(BoundIDCheck) Then GoTo SKIPPING / 2 / 2 / 2 If Cessor(BoundIDCheck, 0) <> "0" Then Pengira = Pengira + 1 Load DLine(Pengira) DLine(Pengira).BorderColor = &HFFFF& DLine(Pengira).ZOrder xN2 = CoordX(Cessor((BoundIDCheck), 0)) yN2 = CoordY(Cessor((BoundIDCheck), 0)) ZN2 = CoordZ(Cessor((BoundIDCheck), 0)) Plot_Dot X, Y, Z, xN2, yN2, ZN2, Theta, Perspective, Pengira End If / 2 / 2 / 2 Alt, Size, If Cessor(ID(BoundIDCheck), 1) <> "0" Then Pengira = Pengira + 1 Load DLine(Pengira) DLine(Pengira).BorderColor = &HFFFF& DLine(Pengira).ZOrder xN2 = CoordX(Cessor((BoundIDCheck), 1)) / 2 yN2 = CoordY(Cessor((BoundIDCheck), 1)) / 2 ZN2 = CoordZ(Cessor((BoundIDCheck), 1)) / 2 Plot_Dot X, Y, Z, xN2, yN2, ZN2, Theta, Alt, Size, Perspective, Pengira End If SKIPPING: Next BoundIDCheck Dim Pengira2 As Integer Pengira2 = 1 For Pengira2 = 1 To (cbo3.ListCount - 1) xN2 = CoordX(Draw2DLine(Pengira2 + 1)) / 2 yN2 = CoordY(Draw2DLine(Pengira2 + 1)) / 2 ZN2 = CoordZ(Draw2DLine(Pengira2 + 1)) / 2 X = CoordX(Draw2DLine(Pengira2)) / 2 Y = CoordY(Draw2DLine(Pengira2)) / 2 Z = CoordZ(Draw2DLine(Pengira2)) / 2 Pengira = Pengira + 1 Load DLine(Pengira) DLine(Pengira).ZOrder Plot_Dot X, Y, Z, xN2, yN2, ZN2, Theta, Alt, Size, Perspective, Pengira Next Pengira2 End Sub Private Sub Plot_Dot _ (X, Y, Z, xN2, yN2, ZN2, Theta, Alt, Size, Perspective, Pengira) Dim cX As Single Dim cY As Single Dim Dim Dim Dim Dim Dim vX As Single vY As Single vZ As Single vX2 As Single vY2 As Single vZ2 As Single ' Define 2D screen (X,Y) plotting coordinates Dim pX As Single Dim pY As Single Dim pX2 As Single Dim pY2 As Single ' Define zenith distance angle. Dim Phi As Single Phi = 90 - Alt ' Define sines and Dim Sin_Theta As Dim Cos_Theta As Dim Sin_Phi As Dim Cos_Phi As cosines of Theta and Phi Single Single Single Single ' Set the center coordinate values of the plotting area cX = -700 '(Plot.width / 100) '- (Plot.width / 6) cY = (Plot.height / 2) '+ (Plot.height / 12) Sin_Theta Cos_Theta Sin_Phi Cos_Phi = = = = Sine(Theta) Cosine(Theta) Sine(Phi) Cosine(Phi) vX = -X * Sin_Theta _ + Y * Cos_Theta vX2 = -xN2 * Sin_Theta _ + yN2 * Cos_Theta vY = -X * Cos_Theta * Cos_Phi _ - Y * Sin_Theta * Cos_Phi _ + Z * Sin_Phi vY2 = -xN2 * Cos_Theta * Cos_Phi _ - yN2 * Sin_Theta * Cos_Phi _ + ZN2 * Sin_Phi vZ = -X * Cos_Theta * Sin_Phi _ - Y * Sin_Theta * Sin_Phi _ - Z * Cos_Phi + Perspective vZ2 = -xN2 * Cos_Theta * Sin_Phi _ - yN2 * Sin_Theta * Sin_Phi _ - ZN2 * Cos_Phi + Perspective pX = cX + Size * vX / pY = cY - Size * vY / pX2 = cX + Size * vX2 pY2 = cY - Size * vY2 vZ vZ / vZ2 / vZ2 DLine(Pengira).Visible = True DLine(Pengira).X1 = pX DLine(Pengira).X2 = pX2 DLine(Pengira).Y1 = pY DLine(Pengira).Y2 = pY2 End Sub Public Function Sine(Degrees_Arg) ' Level 00 Sine = Sin(Degrees_Arg * Atn(1) / 45) End Function Public Function Cosine(Degrees_Arg) ' Level 00 Cosine = Cos(Degrees_Arg * Atn(1) / 45) End Function VERSION 5.00 Object = "{D27CDB6B-AE6D-11CF-96B8-444553540000}#1.0#0"; "Flash9.ocx" Begin VB.Form frm3DNavigation BackColor = &H00000080& BorderStyle = 0 'None Caption = "3D Navigation (Network Analysis)" ClientHeight = 11490 ClientLeft = 0 ClientTop = 0 ClientWidth = 15360 Icon = "frm3DNavigation.frx":0000 LinkTopic = "Form1" ScaleHeight = 11490 ScaleWidth = 15360 ShowInTaskbar = 0 'False StartUpPosition = 2 'CenterScreen Begin VB.Frame fraDestination BackColor = &H00000000& Caption = "Destination" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 2295 Left = 10800 TabIndex = 4 Top = 6960 Width = 3975 Begin VB.Label Label10 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Coordinates" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 225 Left = 240 TabIndex = 49 Top = 1440 Width = 1035 End Begin VB.Label lblDestiBlock AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 225 Left = 2040 TabIndex = 40 Top = 1200 Width = 645 End Begin VB.Label Label27 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Block" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 225 Left = 240 TabIndex = 39 Top = 1200 Width = 480 End Begin VB.Label lblDestiName AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FFFF& Height = 210 Left = 360 TabIndex = 38 Top = 480 Width = 600 End Begin VB.Label Label25 AutoSize = BackStyle = Caption = BeginProperty Font Name Size Charset Weight Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = -1 'True 0 'Transparent "Room/Staff Name" = = = = = = = "Arial" 9.75 0 700 0 'False 0 'False 0 'False &H8000000A& 240 240 37 240 1665 End Begin VB.Label lblDestiNumber AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 225 Left = 2040 TabIndex = 36 Top = 720 Width = 645 End Begin VB.Label Label22 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Room Number" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 225 Left = 240 TabIndex = 35 Top = 720 Width = 1215 End Begin VB.Label lblDestiFloor AutoSize = -1 'True BackStyle = Caption = BeginProperty Font Name Size Charset Weight Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = 0 'Transparent "<None>" = = = = = = = "Arial" 9 0 700 0 'False 0 'False 0 'False &H0000FF00& 225 2040 34 960 645 End Begin VB.Label Label18 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Floor Level" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 225 Left = 240 TabIndex = 33 Top = 960 Width = 915 End Begin VB.Label lblDestiX AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 225 Left = 2040 TabIndex = 24 Top = 1440 Width = 645 End Begin VB.Label Label15 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = BeginProperty Font Name Size Charset Weight Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = "X" = = = = = = = "Arial" 9 0 700 0 'False 0 'False 0 'False &H8000000A& 225 1680 23 1440 120 End Begin VB.Label lblDestiY AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 225 Left = 2040 TabIndex = 22 Top = 1680 Width = 645 End Begin VB.Label Label13 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Y" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 225 Left = 1680 TabIndex = 21 Top = 1680 Width = 105 End Begin VB.Label lblDestiZ AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name Size Charset Weight Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = = = = = = = = "Arial" 9 0 700 0 'False 0 'False 0 'False &H0000FF00& 225 2040 20 1920 645 End Begin VB.Label Label11 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Z" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 225 Left = 1680 TabIndex = 19 Top = 1920 Width = 105 End End Begin VB.Frame fraFrom BackColor = &H00000000& Caption = "From" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 2295 Left = 10800 TabIndex = 3 Top = 4560 Width = 3975 Begin VB.Label Label8 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Coordinates" BeginProperty Font Name = "Arial" Size Charset Weight Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = = = = = = = 9 0 700 0 'False 0 'False 0 'False &H8000000A& 225 240 48 1440 1035 End Begin VB.Label lblFromBlock AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 225 Left = 2040 TabIndex = 32 Top = 1200 Width = 645 End Begin VB.Label Label23 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Block" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 225 Left = 240 TabIndex = 31 Top = 1200 Width = 480 End Begin VB.Label lblFromName AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 8.25 Charset Weight Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = = = = = = 0 700 0 'False 0 'False 0 'False &H0000FFFF& 210 360 30 480 600 End Begin VB.Label Label21 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Room/Staff Name:" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 240 Left = 240 TabIndex = 29 Top = 240 Width = 1725 End Begin VB.Label lblFromNumber AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 225 Left = 2040 TabIndex = 28 Top = 720 Width = 645 End Begin VB.Label Label19 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Room Number" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = = = = = 700 0 'False 0 'False 0 'False &H8000000A& 225 240 27 720 1215 End Begin VB.Label lblFromFloor AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 225 Left = 2040 TabIndex = 26 Top = 960 Width = 645 End Begin VB.Label Label17 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Floor Level" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 225 Left = 240 TabIndex = 25 Top = 960 Width = 915 End Begin VB.Label lblFromX AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = = = = 0 0 0 'False 'False 'False &H0000FF00& 225 2040 18 1440 645 End Begin VB.Label Label9 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "X" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 225 Left = 1680 TabIndex = 17 Top = 1440 Width = 120 End Begin VB.Label lblFromY AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 225 Left = 2040 TabIndex = 16 Top = 1680 Width = 645 End Begin VB.Label Label7 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Y" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = = = 0 0 'False 'False &H8000000A& 225 1680 15 1680 105 End Begin VB.Label lblFromZ AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 225 Left = 2040 TabIndex = 14 Top = 1920 Width = 645 End Begin VB.Label Label4 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Z" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 225 Left = 1680 TabIndex = 13 Top = 1920 Width = 105 End End Begin VB.Frame fraCurrentLocation BackColor = &H00000000& Caption = "Current Location Coordinates" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 1455 Left = 10800 TabIndex = 2 Top = 2640 Width = 3975 Begin VB.Label lblCurrentStatus2 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H000080FF& Height = 240 Left = 1320 TabIndex = 41 Top = 1080 Visible = 0 'False Width = 735 End Begin VB.Label lblCurrentStatus AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H000080FF& Height = 240 Left = 1080 TabIndex = 12 Top = 1080 Width = 735 End Begin VB.Label Label3 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Status" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor Height Left TabIndex Top Width = = = = = = &H8000000A& 240 240 11 1080 585 End Begin VB.Label Label2 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Z" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 225 Left = 240 TabIndex = 10 Top = 720 Width = 105 End Begin VB.Label lblCurrentZ AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 240 Left = 600 TabIndex = 9 Top = 720 Width = 735 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Y" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor Height Left TabIndex Top Width = = = = = = &H8000000A& 225 240 8 480 105 End Begin VB.Label lblCurrentY AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 240 Left = 600 TabIndex = 7 Top = 480 Width = 735 End Begin VB.Label Label6 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "X" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 225 Left = 240 TabIndex = 6 Top = 240 Width = 120 End Begin VB.Label lblCurrentX AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "<None>" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height Left TabIndex Top Width = = = = = 240 600 5 240 735 End End Begin ShockwaveFlashObjectsCtl.ShockwaveFlash flaMainHeader Height = 1935 Left = 600 TabIndex = 1 Top = 480 Width = 11535 _cx = 4214650 _cy = 4197717 FlashVars = "" Movie = "" Src = "" WMode = "Window" Play = -1 'True Loop = -1 'True Quality = "High" SAlign = "" Menu = -1 'True Base = "" AllowScriptAccess= "" Scale = "ShowAll" DeviceFont = 0 'False EmbedMovie = 0 'False BGColor = "" SWRemote = "" MovieData = "" SeamlessTabbing = -1 'True Profile = 0 'False ProfileAddress = "" ProfilePort = 0 AllowNetworking = "all" End Begin VB.PictureBox picMainView BackColor = &H00404040& BorderStyle = 0 'None Height = 7695 Left = 840 MousePointer = 2 'Cross ScaleHeight = 7695 ScaleMode = 0 'User ScaleWidth = 9495 TabIndex = 0 Top = 3000 Width = 9495 End Begin VB.Frame fra3DNaviView Appearance = 0 'Flat BackColor = &H00404040& Caption = "Three Dimensional (3D) Navigation View" BeginProperty Font Name = "Arial" Size = 9.75 Charset = 0 Weight = 700 Underline = 0 'False Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = = = 0 0 'False 'False &H8000000A& 8295 600 42 2640 9975 End Begin VB.Frame Frame1 BackColor = &H00404040& BorderStyle = 0 'None Height = 11055 Left = 240 TabIndex = 43 Top = 240 Width = 14895 Begin VB.Timer Timer1 Interval = 1 Left = 120 Top = 2640 End Begin ShockwaveFlashObjectsCtl.ShockwaveFlash flaKompas Height = 1935 Left = 12120 TabIndex = 51 Top = 240 Width = 2415 _cx = 4198564 _cy = 4197717 FlashVars = "" Movie = "" Src = "" WMode = "Window" Play = -1 'True Loop = -1 'True Quality = "High" SAlign = "" Menu = -1 'True Base = "" AllowScriptAccess= "" Scale = "ShowAll" DeviceFont = 0 'False EmbedMovie = 0 'False BGColor = "" SWRemote = "" MovieData = "" SeamlessTabbing = -1 'True Profile = 0 'False ProfileAddress = "" ProfilePort = 0 AllowNetworking = "all" End Begin VB.Label Label12 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "# Press F3 for help" BeginProperty Font Name = "Arial" Size = 9.75 Charset Weight Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = = = = = = 0 700 0 'False 0 'False 0 'False &H0080FFFF& 240 12720 50 10680 1755 End Begin VB.Label lblDate AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Date" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 225 Left = 10560 TabIndex = 47 Top = 3960 Width = 390 End Begin VB.Label Label5 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "X" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H8000000A& Height = 225 Left = 9840 TabIndex = 46 Top = 2400 Width = 120 End Begin VB.Label lblTime AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Time" BeginProperty Font Name = "Arial" Size = 9 Charset = 0 Weight Underline Italic Strikethrough EndProperty ForeColor = Height = Left = TabIndex = Top = Width = = = = = 700 0 'False 0 'False 0 'False &H8000000A& 225 13440 45 3960 420 End Begin VB.Label lblCopyright AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "©" BeginProperty Font Name = "Arial" Size = 15.75 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00FFFFFF& Height = 360 Left = 14280 TabIndex = 44 Top = 10320 Width = 225 End Begin VB.Image imgHome Enabled = 0 'False Height = 1695 Left = 10560 Picture = "frm3DNavigation.frx":0ECA Stretch = -1 'True Top = 9000 Width = 3975 End End End Attribute VB_Name = "frm3DNavigation" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Option Explicit Dim BitmapArrow As Long Dim DestOK As Long Const Const Const Const TURNLEFT = 0 TURNRIGHT = 1 TURNUP = 3 TURNDOWN = 4 Const MOVEFORWARD = 0 Const MOVEBACKWARD = 1 Const MOVESPEED = 6 Const TURNSPEED = 5 Const TINGGI_HUMAN = 1.7 * Model_Scaling ' Tinggi Human darab dgn scaling bangunan. in this case is times 5 Dim Dim Dim Dim dblCamLoc(0 To 2) As Double dblCamDir(0 To 2) As Double dblComFactor As Double lngKamera As Long Dim Dim Dim Dim Dim Dim lngLayerDotBmp As Long lngDot As Long lngDestDot As Long lngLayerPetaBmp As Long lngMenuPeta As Long CounterDot As Boolean Dim Steps As Double Dim Hit_Wall As Double Dim Hit_Sound As Boolean Dim Bunyi_On As Boolean Dim Dim Dim Dim Dim Dim Dim Dim Dim Dim DrawPath As Long dblCameraDirection(0 To 2) As Double PolygonHit As Long ObjectHit As Long Intersection(0 To 2) As Double direction(0 To 2) As Double BolehJalan As Long PointAtas(0 To 2) As Double PointBawah(0 To 2) As Double Color(0 To 2) As Long Private Sub Form_Activate() STATE_engine_set_speaker_mode NO STATE_engine_hide_log_window Hit_Sound = False If Engine_On = True Then GoTo SkipLoadWorldAgain 'load world. Dim WldLoad As Integer WldLoad = STATE_engine_load_world(WorldFileName, WorldFileDir, WorldBitmapsFileName, USER_DEFINED_BEHAVIOR + ENABLE_VERY_BRIGHT_LIGHT) 'kat lab If WldLoad <> OK Then ExitOnError "Error loading world" ' load bitmap arrow BitmapArrow = STATE_bitmap_load("C:\Program Files\3D Network Analysis\System Settings\Arrow.bmp", 0) If BitmapArrow = 0 Then MsgBox "Failed to Load bitmap Arrow" End End If ' load Destination OK DestOK = STATE_bitmap_load("C:\Program Files\3D Network Analysis\System Settings\DestOK.bmp", 0) If DestOK = 0 Then MsgBox "Failed to Load Destination OK Logo" End End If ' load dot untuk koordinat semasa bagi 2D map lngLayerDotBmp = STATE_bitmap_load("C:\Program Files\3D Network Analysis\System Settings\Dot.bmp", 1) If (lngLayerDotBmp = 0) Then MsgBox "Couldn't load layer dot bmp", vbCritical End If ' load peta aras 2D map lngLayerPetaBmp = STATE_bitmap_load("C:\Program Files\3D Network Analysis\System Settings\PetaAras.bmp", 0) If (lngLayerPetaBmp = 0) Then MsgBox "Couldn't load layer peta bmp", vbCritical End If ' load buyi Steps dan Climbin' Steps = STATE_sound_load("C:\Program Files\3D Network Analysis\Icon\Steps2Panjang.mp3", lngKamera, SOUND_DISTANCE_DEFAULT) Hit_Wall = STATE_sound_load("C:\Program Files\3D Network Analysis\Icon\hit_wallpjg.mp3", lngKamera, SOUND_DISTANCE_DEFAULT) STATE_sound_set_volume Steps, 5000& STATE_sound_set_volume Hit_Wall, 5000& SkipLoadWorldAgain: 'Initialize 3D card. If (STATE_3D_card_set_window_mode = VR_ERROR) Then If (STATE_3D_card_check_hardware_support = YES) Then MsgBox "Failed to initialize 3D Acceleration.", vbOKOnly, "No 3D card detected" End If End If If Engine_On = True Then STATE_polygon_disable lngDot STATE_polygon_disable lngMenuPeta End If If DestDot_On = True Then STATE_polygon_disable lngDestDot End If InitializeCamera If JustNavigation = False Then Call SetJidar Call DrawShortestPath End If frmUtama.flaMainHeader.Playing = False SetPetaLayers ShowCursor 0 LoopScene End Sub Private Sub InitializeCamera() 'setup camera. Dim DirectionKamera(0 To 2) As Double lngKamera = STATE_camera_get_default_camera If JustNavigation = False Then STATE_camera_set_location lngKamera, CoordX(NodeUsed(1)), CoordY(NodeUsed(1)), CoordZ(NodeUsed(1)) ' nilai x,y,z (titik 1st current location DirectionKamera(0) = CoordX(NodeUsed(2)) CoordX(NodeUsed(1)) DirectionKamera(1) = CoordY(NodeUsed(2)) CoordY(NodeUsed(1)) DirectionKamera(2) = CoordZ(NodeUsed(2)) CoordZ(NodeUsed(1)) - 5 STATE_camera_set_direction lngKamera, DirectionKamera(0), DirectionKamera(1), DirectionKamera(2) ' nilai x,y,z (titik 2nd tolak 1st) ElseIf JustNavigation = True Then STATE_camera_set_location lngKamera, 2270.4182, 156.3203, 6 STATE_camera_set_direction lngKamera, -34.52, 0, -10 End If End Sub Private Sub LoopScene() Do Until GetAsyncKeyState(vbKeyEscape) < 0 DoEvents GetCurrentCoord 'label koordinat di tepi skrin akan diupdate guna sub ini PlayerControls 'controls for camera movement. CLIMBING ' set for climb tangga or jalan naik turun surface UpdateDotBmp ' untuk update dot merah bagi kedudukan bergerak user untuk 2D map STATE_engine_render picMainView.hwnd, lngKamera If GetAsyncKeyState(vbKeyF3) < 0 Then MsgBox "Exit = Press Escape and Navigate = Directional Arrow", vbInformation, "Help" End If If GetAsyncKeyState(vbKeyP) < 0 Then STATE_polygon_disable lngDot STATE_polygon_disable lngMenuPeta If JustNavigation = True Then GoTo SkipPdestDot STATE_polygon_disable lngDestDot SkipPdestDot: End If If GetAsyncKeyState(vbKeyM) < 0 Then STATE_polygon_enable lngDot STATE_polygon_enable lngMenuPeta If JustNavigation = True Then GoTo SkipMdestDot STATE_polygon_enable lngDestDot SkipMdestDot: End If frm3DNavigation.SetFocus Loop STATE_3D_card_use NO If JustNavigation = True Then JustNavigation = False End If ShowCursor 1 'STATE_engine_close 'Unload Me Engine_On = True frmUtama.flaMainHeader.Playing = True frm3DNavigation.Hide End Sub Private Sub PlayerControls() 'check user input and move or turn camera appropriately. dblComFactor = STATE_engine_get_computer_speed_factor STATE_camera_get_location1 lngKamera, dblCamLoc(0) STATE_camera_get_direction1 lngKamera, dblCamDir(0) If GetAsyncKeyState(vbKeyUp) < 0 Then MoveCam (MOVEFORWARD) lblCurrentStatus.Caption = "Moving Forward" If Bunyi_On = False Then STATE_sound_play Steps, SOUND_LOOP_NORMAL Bunyi_On = True End If ElseIf GetAsyncKeyState(vbKeyDown) < 0 Then MoveCam (MOVEBACKWARD) If Bunyi_On = False Then STATE_sound_play Steps, SOUND_LOOP_NORMAL Bunyi_On = True End If lblCurrentStatus.Caption = "Moving Backward" Else lblCurrentStatus.Caption = "<None>" If Bunyi_On = True Then STATE_sound_stop_all_sounds Bunyi_On = False End If End If If GetAsyncKeyState(vbKeyLeft) < 0 Then Turn (TURNLEFT) lblCurrentStatus.Visible = False lblCurrentStatus2.Visible = True lblCurrentStatus2.Caption = "Turning Left" ElseIf GetAsyncKeyState(vbKeyRight) < 0 Then Turn (TURNRIGHT) lblCurrentStatus.Visible = False lblCurrentStatus2.Visible = True lblCurrentStatus2.Caption = "Turning Right" Else lblCurrentStatus2.Visible = False lblCurrentStatus2.Caption = "<None>" lblCurrentStatus.Visible = True End If If GetAsyncKeyState(vbKeyA) < 0 Then Turn (TURNUP) ElseIf GetAsyncKeyState(vbKeyZ) < 0 Then Turn (TURNDOWN) End If End Sub Private Sub MoveCam(direction As Integer) Dim dblMovement As Double 'Reverse direction of vector in dblCamDir if we have to move backwards. If direction = MOVEBACKWARD Then InvertVector dblCamDir dblCamLoc(0) = dblComFactor dblCamLoc(1) = dblComFactor dblCamLoc(2) = dblComFactor 'Now dblCamLoc our camera. dblCamLoc(0) + dblCamDir(0) * MOVESPEED * dblCamLoc(1) + dblCamDir(1) * MOVESPEED * dblCamLoc(2) + dblCamDir(2) * MOVESPEED * contains the new location to which we wish to move 'this will move the camera to its new location as far as it can. dblMovement = STATE_camera_move_with_collision_detection(lngKamera, dblCamLoc(0), 8) If dblMovement = NO Then If Hit_Sound = False Then STATE_sound_play Hit_Wall, SOUND_NO_LOOP Hit_Sound = True End If End If If dblMovement = YES Then If Hit_Sound = True Then 'STATE_sound_stop_all_sounds Hit_Sound = False End If End If End Sub Private Sub Turn(direction As Integer) 'Turn camera left,right,up or down. If direction = TURNLEFT Then STATE_camera_rotate_z lngKamera, WORLD_SPACE ElseIf direction = TURNRIGHT Then STATE_camera_rotate_z lngKamera, WORLD_SPACE ElseIf direction = TURNUP Then STATE_camera_rotate_y lngKamera, CAMERA_SPACE ElseIf direction = TURNDOWN Then STATE_camera_rotate_y lngKamera, CAMERA_SPACE End If End Sub TURNSPEED * dblComFactor, -TURNSPEED * dblComFactor, TURNSPEED * dblComFactor, -TURNSPEED * dblComFactor, Private Sub Form_Load() flaMainHeader.Movie = "C:\Program Files\3D Network Analysis\Flamov\MainHeaderUtama.swf" flaKompas.Movie = "C:\Program Files\3D Network Analysis\Flamov\Kompas.swf" End Sub Private Sub Form_Unload(Cancel As Integer) 'Unload application from memory. STATE_3D_card_use NO STATE_engine_close frmUtama.lblNavi.Enabled = False frmUtama.lblShortestPath.Enabled = False frmUtama.flaMainHeader.Playing = True End Sub Private Sub InvertVector(Vec() As Double) 'reverse direction of input vector. Vec(0) = -Vec(0) Vec(1) = -Vec(1) Vec(2) = -Vec(2) End Sub Public Sub ExitOnError(strReason As String) 'Display an error message and exit program MsgBox strReason, vbExclamation, "Error" Unload Me End Sub Private Sub CLIMBING() Dim lngReturn As Long Dim dblTitik_A(0 To 2) As Double Dim dblTitik_B(0 To 2) As Double Dim lngPolygon_Hit As Long Dim lngObject_Hit As Long Dim dblIntersection(0 To 2) As Double Dim dblArah_Kamera(0 To 2) As Double STATE_camera_get_location1 lngKamera, dblTitik_A(0) STATE_camera_get_direction1 lngKamera, dblArah_Kamera(0) Dim dblLokasi_Baru(0 To 2) As Double Const VECLENGTH = 8 'collision detect untuk nak climbing dblLokasi_Baru(0) = dblTitik_A(0) + dblArah_Kamera(0) * VECLENGTH dblLokasi_Baru(1) = dblTitik_A(1) + dblArah_Kamera(1) * VECLENGTH dblLokasi_Baru(2) = dblTitik_A(2) + dblArah_Kamera(2) * VECLENGTH 'calculate the height of the ground in the new_location Dim dblLokasi_Baru_Bawah(2) As Double Dim dblLokasi_Baru_Atas(2) As Double copy_vec dblLokasi_Baru_Bawah, dblLokasi_Baru dblLokasi_Baru_Bawah(2) = dblTitik_A(2) - (2 * Model_Scaling) 'a very low point copy_vec dblLokasi_Baru_Atas, dblLokasi_Baru dblLokasi_Baru_Atas(2) = dblTitik_A(2) + (1 * Model_Scaling) very high 'a lngReturn = STATE_engine_is_movement_possible(dblLokasi_Baru_Atas(0), dblLokasi_Baru_Bawah(0), lngPolygon_Hit, dblIntersection(0), lngObject_Hit) ' We dont want if langgar dinding pun dia panjat jugak If dblIntersection(2) > dblTitik_A(2) Then Exit Sub End If Dim try As Double If dblIntersection(2) < dblTitik_A(2) Then try = dblTitik_A(2) - dblIntersection(2) If try > TINGGI_HUMAN * 2 Then Exit Sub End If End If Dim dblBeza_Ketinggian As Double dblBeza_Ketinggian = dblTitik_A(2) - dblIntersection(2) ' Lau ada intersection yang menyebabkan ketinggian xsama dengan ketinggian manusia so ' dia akan di set kan lokasi z yg baru If dblBeza_Ketinggian <> TINGGI_HUMAN Then STATE_camera_set_location lngKamera, dblTitik_A(0), dblTitik_A(1), dblIntersection(2) + TINGGI_HUMAN End If End Sub Private Sub copy_vec(dst() As Double, src() As Double) dst(0) = src(0) dst(1) = src(1) dst(2) = src(2) End Sub Private Sub DrawShortestPath() Dim PointA(0 To 2) As Double Dim PointB(0 To 2) As Double Dim PointBaru(0 To 2) As Double Dim BezaX As Double Dim BezaY As Double Dim BezaZ As Double Dim TokokanX As Double Dim TokokanY As Double Dim TokokanZ As Double Const DividingFactor = 4 'Nilai untuk berapa banyak arrow yang ditunjukkan Dim KiraanIndexPointGuna As Integer KiraanIndexPointGuna = 1 For KiraanIndexPointGuna = 1 To (Counter - 1) PointA(0) = CoordX(NodeUsed(KiraanIndexPointGuna)) PointA(1) = CoordY(NodeUsed(KiraanIndexPointGuna)) PointA(2) = CoordZ(NodeUsed(KiraanIndexPointGuna)) If KiraanIndexPointGuna = Counter - 1 Then BolehJalan = STATE_engine_is_movement_possible(PointAtas(0), PointBawah(0), PolygonHit, Intersection(0), ObjectHit) Intersection(2) = Intersection(2) - 2.5 DrawPath = STATE_polygon_add_patch_easy(PolygonHit, Intersection(0), 5, direction(0), DestOK, Color(0)) Exit Sub ' Sampai Destinasi End If PointB(0) = CoordX(NodeUsed(KiraanIndexPointGuna + 1)) PointB(1) = CoordY(NodeUsed(KiraanIndexPointGuna + 1)) PointB(2) = CoordZ(NodeUsed(KiraanIndexPointGuna + 1)) BezaX = PointB(0) - PointA(0) BezaY = PointB(1) - PointA(1) BezaZ = PointB(2) - PointA(2) TokokanX = BezaX / DividingFactor TokokanY = BezaY / DividingFactor TokokanZ = BezaZ / DividingFactor direction(0) = PointB(0) - PointA(0) direction(1) = PointB(1) - PointA(1) direction(2) = PointB(2) - PointA(2) PointAtas(0) = PointA(0) PointAtas(1) = PointA(1) PointAtas(2) = PointA(2) + 5 PointBawah(0) = PointA(0) PointBawah(1) = PointA(1) PointBawah(2) = PointA(2) - 5 GoTo END_LOMPAT LOMPAT: PointAtas(0) = PointBaru(0) PointAtas(1) = PointBaru(1) PointAtas(2) = PointBaru(2) + 5 PointBawah(0) = PointBaru(0) PointBawah(1) = PointBaru(1) PointBawah(2) = PointBaru(2) - 5 END_LOMPAT: BolehJalan = STATE_engine_is_movement_possible(PointAtas(0), PointBawah(0), PolygonHit, Intersection(0), ObjectHit) If BolehJalan = NO Then If PolygonHit = 0 Then GoTo TambahKiraanIndexPointGuna Intersection(2) = Intersection(2) - 2.5 DrawPath = STATE_polygon_add_patch_easy(PolygonHit, Intersection(0), 1.5, direction(0), BitmapArrow, Color(0)) PointBaru(0) = PointAtas(0) + TokokanX PointBaru(1) = PointAtas(1) + TokokanY PointBaru(2) = PointAtas(2) - 5 + TokokanZ If Val(Format(PointBaru(0), "0000000.000")) = Val(Format(PointB(0), "0000000.000")) Then If Val(Format(PointBaru(1), "0000000.000")) = Val(Format(PointB(1), "0000000.000")) Then If Val(Format(PointBaru(2), "0000000.000")) = Val(Format(PointB(2), "0000000.000")) Then GoTo TambahKiraanIndexPointGuna 'Tamat untuk satu equation garis lurus End If End If End If GoTo LOMPAT End If TambahKiraanIndexPointGuna: Next KiraanIndexPointGuna End Sub Public Sub SetJidar() lblFromX = Val(Format((CoordX(NodeUsed(1)) / Model_Scaling), "0000000.000")) lblFromY = Val(Format((CoordY(NodeUsed(1)) / Model_Scaling), "0000000.000")) lblFromZ = Val(Format((CoordZ(NodeUsed(1)) / Model_Scaling), "0000000.000")) lblFromName = BName(NodeUsed(1)) lblFromNumber = RNumber(NodeUsed(1)) lblFromFloor = Aras(NodeUsed(1)) lblFromBlock = Blok(NodeUsed(1)) lblDestiX = Val(Format((CoordX(NodeUsed(Counter - 1)) / Model_Scaling), "0000000.000")) lblDestiY = Val(Format((CoordY(NodeUsed(Counter - 1)) / Model_Scaling), "0000000.000")) lblDestiZ = Val(Format((CoordZ(NodeUsed(Counter - 1)) / Model_Scaling), "0000000.000")) lblDestiName = BName(NodeUsed(Counter - 1)) lblDestiNumber = RNumber(NodeUsed(Counter - 1)) lblDestiFloor = Aras(NodeUsed(Counter - 1)) lblDestiBlock = Blok(NodeUsed(Counter - 1)) End Sub Public Sub GetCurrentCoord() Dim dblTitik_A(0 To 2) As Double STATE_camera_get_location1 lngKamera, dblTitik_A(0) lblCurrentX = Val(Format((dblTitik_A(0) / Model_Scaling), "0000000.000")) lblCurrentY = Val(Format((dblTitik_A(1) / Model_Scaling), "0000000.000")) lblCurrentZ = Val(Format(((dblTitik_A(2) - TINGGI_HUMAN) / Model_Scaling), "0000000.000")) lblTime = time lblDate = Date End Sub Public Sub SetPetaLayers() Dim dblLokasiKamera(2) As Double Dim dblSetKamera(2) As Double STATE_camera_get_location1 lngKamera, dblLokasiKamera(0) dblSetKamera(0) = (dblLokasiKamera(0) / 42.4103) / 2 '- 0.2588 dblSetKamera(1) = 7 - (dblLokasiKamera(1) / 42.4103) / 2 '+ 20.8273 dblSetKamera(1) = dblSetKamera(1) + 7 If dblSetKamera(0) < 0 Then dblSetKamera(0) = 0 ElseIf dblSetKamera(0) > 96 Then dblSetKamera(0) = 96 End If If dblSetKamera(1) < 0 Then dblSetKamera(1) = 0 ElseIf dblSetKamera(1) > 98 Then dblSetKamera(1) = 98 End If lngDot = STATE_engine_add_layer(dblSetKamera(0), dblSetKamera(1), dblSetKamera(0) + 2, dblSetKamera(1) + 2, lngLayerDotBmp, BRIGHT_OPAQUE_GLASS) If JustNavigation = True Then GoTo SKIPDESTDOT dblSetKamera(0) = ((CoordX(NodeUsed(Counter - 1))) / 42.4103) / 2 '- 0.2588 dblSetKamera(1) = 7 - ((CoordY(NodeUsed(Counter - 1))) / 42.4103) / 2 '+ 20.8273 dblSetKamera(1) = dblSetKamera(1) + 7 If dblSetKamera(0) < 1.5 Then dblSetKamera(0) = 1.5 ElseIf dblSetKamera(0) > 97 Then dblSetKamera(0) = 97 End If If dblSetKamera(1) < 1.5 Then dblSetKamera(1) = 2.5 ElseIf dblSetKamera(1) > 98.5 Then dblSetKamera(1) = 98.5 End If lngDestDot = STATE_engine_add_layer(dblSetKamera(0) - 1.5, dblSetKamera(1) - 1.5, dblSetKamera(0) + 1.5, dblSetKamera(1) + 1.5, DestOK, BRIGHT_OPAQUE_GLASS) DestDot_On = True STATE_polygon_disable lngDestDot SKIPDESTDOT: lngMenuPeta = STATE_engine_add_layer(0, 0, 50, 15, lngLayerPetaBmp, BRIGHT_OPAQUE_GLASS) STATE_polygon_disable lngDot STATE_polygon_disable lngMenuPeta End Sub Public Sub UpdateDotBmp() Dim dblLokasiKamera(2) As Double Dim dblSetKamera(2) As Double STATE_camera_get_location1 lngKamera, dblLokasiKamera(0) dblSetKamera(0) = (dblLokasiKamera(0) / 42.4103) / 2 '- 0.2588 dblSetKamera(1) = 7 - (dblLokasiKamera(1) / 42.4103) / 2 '+ 20.8273 dblSetKamera(1) = dblSetKamera(1) + 7 If dblSetKamera(0) < 0 Then dblSetKamera(0) = 0 ElseIf dblSetKamera(0) > 96 Then dblSetKamera(0) = 96 End If If dblSetKamera(1) < 0 Then dblSetKamera(1) = 0 ElseIf dblSetKamera(1) > 98 Then dblSetKamera(1) = 98 End If STATE_polygon_set_location lngDot, dblSetKamera(0) End Sub Public Sub PadamForm() Unload Me End Sub