from engine import Engine from cursor import Cursor if __name__ == "__main__": engine = Engine() engine.add_object(Cursor()) engine.run()
class Application(QMainWindow): def __init__(self, caption, w, h, available_objects, precision): super().__init__() self.caption = caption self.w = w self.h = h self.keyboard = { 'A': False, 'D': False, 'W': False, 'S': False, 'SHIFT': False, 'SPACE': False } self.avaliable = available_objects self.precision = precision self.setFixedSize(w, h) self.setWindowTitle(caption) self.cam = Cam((0, 50, 0)) self.engine = Engine(self.cam) self.pointer = Pointer() self.canvas = Canvas(self, w * 0.75, h, 0, 0, 'rgba(100,100,100,100%)', self.engine) self.selector = ObjectSelector(w / 4, h / 3, 'Select figure to Create', self, 'rgba(50,50,50,100%)', self.avaliable) self.move_window = MoveWindow(self, w / 3, h / 3, 'Move object', -10000, 10000, 2, 0.0) self.scale_window = ScaleWindow(self, w / 3, h / 3, 'Scale object', 0.01, 10, 2, 1.0) self.rotate_window = RotateWindow(self, w / 3, h / 3, 'Rotate object', 0, 360, 2, 0.0) self.objects = SideBar(self, w * 0.25, h, w * 0.75, 0, 'rgba(50,50,50,100%)') main_menu = self.menuBar() camera_menu = main_menu.addMenu('Camera') reset_camera = QAction('Reset', camera_menu) reset_camera.setStatusTip('Reset camera position and mode') reset_camera.triggered.connect(self.reset_camera) self.switch_camera = QAction('Mode: Free flight', camera_menu) self.switch_camera.setStatusTip('Switching camera mode...') self.switch_camera.triggered.connect(self.switch_camera_mode) camera_menu.addAction(self.switch_camera) camera_menu.addAction(reset_camera) self.timer = QBasicTimer() self.frames = 60 self.dt = int(100 / self.frames) self.timer.start(self.dt, self) self.show() def keyPressEvent(self, event): key = event.key() if self.canvas.hasFocus(): if key == Qt.Key_A: self.keyboard['A'] = True elif key == Qt.Key_D: self.keyboard['D'] = True elif key == Qt.Key_W: self.keyboard['W'] = True elif key == Qt.Key_S: self.keyboard['S'] = True elif key == Qt.Key_Space: self.keyboard['SPACE'] = True elif key == Qt.Key_Shift: self.keyboard['SHIFT'] = True def keyReleaseEvent(self, event): key = event.key() if key == Qt.Key_A: self.keyboard['A'] = False elif key == Qt.Key_D: self.keyboard['D'] = False elif key == Qt.Key_W: self.keyboard['W'] = False elif key == Qt.Key_S: self.keyboard['S'] = False elif key == Qt.Key_Space: self.keyboard['SPACE'] = False elif key == Qt.Key_Shift: self.keyboard['SHIFT'] = False def timerEvent(self, event): dx, dy = self.pointer.get_movement() self.cam.update_rotation(dx, dy) self.cam.update_position(self.dt, self.keyboard) self.canvas.repaint() def add_object(self, obj): self.engine.add_object(obj) list_object = ListObject(obj.name, self.objects.list) self.objects.list.addItem(list_object) self.objects.list.clearSelection() self.objects.list.setCurrentItem(list_object) def delete_object(self, name): items = self.objects.list.findItems(name, Qt.MatchExactly) if len(items) > 0: row = self.objects.list.row(items[0]) self.objects.list.takeItem(row) self.engine.delete_item(name) def switch_camera_mode(self): if self.cam.mode == 0: self.cam.mode = 1 self.switch_camera.setText('Mode: Centered') else: self.cam.mode = 0 self.switch_camera.setText('Mode: Free Flight') self.reset_camera() def reset_camera(self): self.cam.pos = [0, 50, 0] self.cam.rot = [0, 0, 0]