1 | /************************************************************************************ |
---|
2 | * Copyright (C) 2008 by Politehnica University of Bucharest and Rutgers University |
---|
3 | * All rights reserved. |
---|
4 | * Refer to LICENSE for terms and conditions of use. |
---|
5 | ***********************************************************************************/ |
---|
6 | package vnsim.gui; |
---|
7 | |
---|
8 | import java.awt.event.MouseEvent; |
---|
9 | import java.util.Iterator; |
---|
10 | |
---|
11 | import javax.media.opengl.GL; |
---|
12 | import javax.media.opengl.GLAutoDrawable; |
---|
13 | import javax.media.opengl.glu.GLU; |
---|
14 | |
---|
15 | import com.sun.opengl.util.GLUT; |
---|
16 | |
---|
17 | import vnsim.applications.adaptiveTL.WirelessTrafficLight; |
---|
18 | import vnsim.applications.trafficview.SimulatedCarInfo; |
---|
19 | import vnsim.core.CarInfo; |
---|
20 | import vnsim.map.object.Globals; |
---|
21 | import vnsim.map.object.Point; |
---|
22 | import vnsim.map.utils.GPSutil; |
---|
23 | |
---|
24 | public class MapView extends MapViewPanel { |
---|
25 | /** |
---|
26 | * |
---|
27 | */ |
---|
28 | private static final long serialVersionUID = 1L; |
---|
29 | |
---|
30 | public MapView(Statistics s, int w, int h) { |
---|
31 | super(s, w, h); |
---|
32 | } |
---|
33 | |
---|
34 | public void display(GLAutoDrawable glDrawable) { |
---|
35 | GL myGL = glDrawable.getGL(); |
---|
36 | GLU myGLU = new GLU(); |
---|
37 | myGL.glClear(GL.GL_COLOR_BUFFER_BIT); |
---|
38 | myGL.glMatrixMode(GL.GL_MODELVIEW); |
---|
39 | myGL.glLoadIdentity(); |
---|
40 | // Camera se va uita din pozitia x,y,z in jos la planul xoy |
---|
41 | myGLU.gluLookAt(xCamera, yCamera, zCamera, xCamera, yCamera, 0.0, 0.0, 1.0, 0.0); |
---|
42 | myGL.glCallList(mapList); // displays the map |
---|
43 | // depending on the camera position displays one level of text |
---|
44 | if (zCamera < 800) { |
---|
45 | myGL.glCallList(mapLevel[4]); |
---|
46 | } |
---|
47 | if ((zCamera >= 800) && (zCamera < 1600)) { |
---|
48 | myGL.glCallList(mapLevel[3]); |
---|
49 | } |
---|
50 | if ((zCamera >= 1600) && (zCamera < 2800)) { |
---|
51 | myGL.glCallList(mapLevel[2]); |
---|
52 | } |
---|
53 | if ((zCamera >= 2800) && (zCamera < 3700)) { |
---|
54 | myGL.glCallList(mapLevel[1]); |
---|
55 | } |
---|
56 | if (zCamera > 3700) { |
---|
57 | myGL.glCallList(mapLevel[0]); |
---|
58 | } |
---|
59 | display_Semaphores(myGL); |
---|
60 | display_Cars(myGL); |
---|
61 | display_Arrows(myGL); |
---|
62 | display_Legend(myGL); |
---|
63 | // if (!Globals.engine.pauseFlag && Globals.engine.crtTime > 100) |
---|
64 | synchronized (Globals.mutex) { |
---|
65 | // Globals.flag = 0; |
---|
66 | Globals.mutex.notify(); |
---|
67 | } |
---|
68 | } |
---|
69 | |
---|
70 | public void buildList(GLAutoDrawable glDrawable) { |
---|
71 | // builds the map and 5 different levels of text for the map |
---|
72 | GL myGL = glDrawable.getGL(); |
---|
73 | GLUT glut = new GLUT(); |
---|
74 | GLU myGLU = new GLU(); |
---|
75 | this.mapLevel = new int[5]; |
---|
76 | prioritySign = myGL.glGenLists(12); |
---|
77 | ListBuilder.buildList_PrioritySign(myGL, myGLU, glut, prioritySign); |
---|
78 | noPrioritySign = prioritySign + 1; |
---|
79 | ListBuilder.buildList_NoPrioritySign(myGL, myGLU, glut, noPrioritySign); |
---|
80 | stopSign = noPrioritySign + 1; |
---|
81 | ListBuilder.buildList_StopSign(myGL, myGLU, glut, stopSign); |
---|
82 | mapList = stopSign + 1; |
---|
83 | ListBuilder.buildList_MapList(myGL, myGLU, glut, mapList, prioritySign, stopSign, noPrioritySign, |
---|
84 | Globals.minPoint, Globals.maxPoint); |
---|
85 | carList = mapList + 1; |
---|
86 | ListBuilder.buildList_CarList(myGL, myGLU, glut, carList); |
---|
87 | accCar = carList + 1; |
---|
88 | ListBuilder.buildList_AccCar(myGL, myGLU, glut, accCar); |
---|
89 | hAccCar = accCar + 1; |
---|
90 | ListBuilder.buildList_HAccCar(myGL, myGLU, glut, hDecCar); |
---|
91 | stoppedCar = hAccCar + 1; |
---|
92 | ListBuilder.buildList_StoppedCar(myGL, myGLU, glut, stoppedCar); |
---|
93 | decCar = stoppedCar + 1; |
---|
94 | ListBuilder.buildList_DecCar(myGL, myGLU, glut, decCar); |
---|
95 | hDecCar = decCar + 1; |
---|
96 | ListBuilder.buildList_HDecCar(myGL, myGLU, glut, hDecCar); |
---|
97 | signalCar = hDecCar + 1; |
---|
98 | ListBuilder.buildList_SignalCar(myGL, myGLU, glut, signalCar); |
---|
99 | whiteCar = signalCar + 1; |
---|
100 | ListBuilder.buildList_WhiteCar(myGL, myGLU, glut, whiteCar); |
---|
101 | pinkCar = whiteCar + 1; |
---|
102 | ListBuilder.buildList_PinkCar(myGL, myGLU, glut, pinkCar); |
---|
103 | traceCar = pinkCar + 1; |
---|
104 | ListBuilder.buildList_TraceCar(myGL, myGLU, glut, traceCar); |
---|
105 | carListOut = traceCar + 1; |
---|
106 | ListBuilder.buildList_CarListOut(myGL, myGLU, glut, carListOut); |
---|
107 | neighbor = carListOut + 1; |
---|
108 | ListBuilder.buildList_Neighbor(myGL, myGLU, glut, neighbor); |
---|
109 | endOfQueue = neighbor + 1; |
---|
110 | ListBuilder.buildList_EndOfQueue(myGL, myGLU, glut, endOfQueue); |
---|
111 | arrows = endOfQueue + 1; |
---|
112 | ListBuilder.buildList_Arrows(myGL, myGLU, glut, arrows, this.getSize().getWidth(), this.getSize().getHeight(), |
---|
113 | 25); |
---|
114 | float y2 = (float) GPSutil.getMetersLatitude(Globals.minPoint, Globals.maxPoint); |
---|
115 | float x2 = (float) GPSutil.getMetersLongitude(Globals.minPoint, Globals.maxPoint); |
---|
116 | xCamera = x2 / 2; |
---|
117 | yCamera = y2 / 2; |
---|
118 | zCamera = (float) ((x2 * high) / this.getSize().getWidth()); |
---|
119 | mapLevel[0] = arrows + 1; |
---|
120 | ListBuilder.buildList_MapLevels(myGL, myGLU, glut, mapLevel, Globals.minPoint); |
---|
121 | DSRCapp = mapLevel[4] + 1; |
---|
122 | ListBuilder.buildList_DSRCapp(myGL, myGLU, glut, DSRCapp); |
---|
123 | } |
---|
124 | |
---|
125 | public void selection(MouseEvent e) { |
---|
126 | float winX = e.getX(); |
---|
127 | float winY = (float) this.getSize().height - (float) e.getY(); |
---|
128 | float w = (float) (this.getSize().width * zCamera) / high; |
---|
129 | float h = (float) (this.getSize().height * zCamera) / high; |
---|
130 | float worldX = xCamera - (float) (w / 2) + (winX * zCamera) / high; |
---|
131 | float worldY = yCamera - (float) (h / 2) + (winY * zCamera) / high; |
---|
132 | MyPoint clickPoint = new MyPoint(worldX, worldY); |
---|
133 | // get's here only when is a selection, not a movement |
---|
134 | if (carPositions != null) { |
---|
135 | currentCar = null; |
---|
136 | currentIntersection = null; |
---|
137 | if (carPositions.containsValue(clickPoint)) { |
---|
138 | Iterator<CarInfo> i = carPositions.keySet().iterator(); |
---|
139 | if (i == null) { |
---|
140 | return; |
---|
141 | } |
---|
142 | while (i.hasNext()) { |
---|
143 | CarInfo ci = i.next(); |
---|
144 | if (carPositions.get(ci).equals(clickPoint)) { |
---|
145 | currentCar = (SimulatedCarInfo) ci; |
---|
146 | Globals.demo.st.setSelection("Selection: car " + currentCar.getVehicleId()); |
---|
147 | Globals.demo.st.resetLabels(); |
---|
148 | return; |
---|
149 | } |
---|
150 | } |
---|
151 | } |
---|
152 | } |
---|
153 | Point myPoint = recoverRoad(worldX, worldY); |
---|
154 | for (int i = 0; i < Globals.map.allIntersections.size(); i++) { |
---|
155 | if (Globals.map.allIntersections.get(i).getMapPoint().distanceTo(myPoint) < 0.01) { |
---|
156 | Globals.demo.st.setSelection("Selection: intersection " + i); |
---|
157 | currentIntersection = (WirelessTrafficLight) Globals.map.allIntersections.get(i); |
---|
158 | return; |
---|
159 | } |
---|
160 | } |
---|
161 | } |
---|
162 | |
---|
163 | |
---|
164 | } |
---|