-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
107 lines (82 loc) · 2.97 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/usr/bin/env python
'''
Created on Mar 11, 2013
@author: Thomas Langenskiold
'''
import sys
from PyQt4 import QtGui, QtCore
from world import World
class MainWindow(QtGui.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.initUI()
def initUI(self):
# Initialize main window.
self.resize(1024, 768)
self.center()
self.setWindowTitle('3D-Visualisation')
self.frame = ViewFrame(self)
self.setCentralWidget(self.frame)
openFile = QtGui.QAction('Open', self)
openFile.setShortcut('Ctrl+O')
openFile.setStatusTip('Open new File')
openFile.triggered.connect(self.showDialog)
menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
fileMenu.addAction(openFile)
self.show()
def showDialog(self):
# Open file
fname = QtGui.QFileDialog.getOpenFileName(self, 'Open file', '/home')
self.frame.loadFile(fname)
def center(self):
#Center window on screen
screen = QtGui.QDesktopWidget().screenGeometry()
size = self.geometry()
self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)
def keyPressEvent(self, e):
# Handle key pressing events
self.frame.keyPress(e)
class ViewFrame(QtGui.QFrame):
def __init__(self, parent):
# Create the main frame of the window
QtGui.QFrame.__init__(self, parent)
self.setFrameShape(QtGui.QFrame.WinPanel)
self.setFrameShadow(QtGui.QFrame.Sunken)
self.setStyleSheet("QWidget { background-color: #222222 }")
self.world = World()
def keyPress(self, e):
# Handle key pressing
# Move eye
key = e.key()
if key == QtCore.Qt.Key_Up \
or key == QtCore.Qt.Key_Down \
or key == QtCore.Qt.Key_Left \
or key == QtCore.Qt.Key_Right \
or key == QtCore.Qt.Key_Q \
or key == QtCore.Qt.Key_W \
or key == QtCore.Qt.Key_E \
or key == QtCore.Qt.Key_A \
or key == QtCore.Qt.Key_S \
or key == QtCore.Qt.Key_D:
self.world.moveEye(key)
self.update()
# Add or remove walls
if key == QtCore.Qt.Key_Space or key == QtCore.Qt.Key_Backspace:
self.world.editWall(key)
def paintEvent(self, event):
# Handle the paint event. All walls are drawn in the Wall class.
painter = QtGui.QPainter(self)
self.world.drawWalls(painter)
painter.end()
def loadFile(self, fname):
# Passing on the file to the world class, and updating the frame when world is done loading.
self.world.loadWalls(fname)
self.update()
def main():
# Main loop
app = QtGui.QApplication(sys.argv)
win = MainWindow()
sys.exit(app.exec_())
if __name__ == '__main__':
main()