def __init__(self, parent=None): QGraphicsView.__init__(self, parent) self.scene = QGraphicsScene(self) self.scene.setBackgroundBrush(Qt.yellow) self.setScene(self.scene) center_rect = QGraphicsRectItem(-10, -10, 20, 20) self.scene.addItem(center_rect) rect = QGraphicsRectItem(0, 0, 100, 100) rect.setPos(-100, -100) self.scene.addItem(rect) rect2 = QGraphicsRectItem(0, 0, 100, 100) self.scene.addItem(rect2) text = self.scene.addText("Hello WOrld") # self.scene.addLine(QLineF(0, 10, -20, -20), QPen(Qt.black)) rect2.moveBy(50, 50) rect2.setRotation(50) rect2.moveBy(-50, -50) print(self.scene.width(), self.scene.height()) self.resize(400, 400)
def display_markers(self): """Add markers on top of first plot.""" for item in self.idx_markers: self.scene.removeItem(item) self.idx_markers = [] window_start = self.parent.value('window_start') window_length = self.parent.value('window_length') window_end = window_start + window_length y_distance = self.parent.value('y_distance') markers = [] if self.parent.info.markers is not None: if self.parent.value('marker_show'): markers = self.parent.info.markers for mrk in markers: if window_start <= mrk['end'] and window_end >= mrk['start']: mrk_start = max((mrk['start'], window_start)) mrk_end = min((mrk['end'], window_end)) color = QColor(self.parent.value('marker_color')) item = QGraphicsRectItem(mrk_start, 0, mrk_end - mrk_start, len(self.idx_label) * y_distance) item.setPen(color) item.setBrush(color) item.setZValue(-9) self.scene.addItem(item) item = TextItem_with_BG(color.darker(200)) item.setText(mrk['name']) item.setPos(mrk['start'], len(self.idx_label) * self.parent.value('y_distance')) item.setFlag(QGraphicsItem.ItemIgnoresTransformations) item.setRotation(-90) self.scene.addItem(item) self.idx_markers.append(item)
class Square(QGraphicsView): def __init__(self, x, y, a, b): self.x = x self.y = y self.a = a self.b = b self.square = QGraphicsRectItem(self.x, self.y, self.a, self.b) def draw_square(self, scene): scene.addItem(self.square) def move_square(self, m, n): self.square.setPos(m, n) def rotate_square(self, r): self.square.setRotation(r) def scale_square(self, s): self.square.setScale((s + 50) / 100) def recolor_square(self, r, g, b): self.square.setBrush(QColor(r, g, b))
def loadMap(self, mapLocation): with open(mapLocation) as file: mapObjList = json.load(file) for item in mapObjList["objects"]: if (item["type"] == "rect"): shape = QGraphicsRectItem(item["centerX"] - item["length"] / 2, -item["centerY"] - item["width"] / 2, item["length"], item["width"]) shape.setTransformOriginPoint( QPoint(item["centerX"], -item["centerY"])) shape.setPen(QPen(self.black)) shape.setBrush(QBrush(self.black, Qt.SolidPattern)) shape.setRotation(item["rotation"]) self.scene.addItem(shape) elif (item["type"] == "text"): label = QGraphicsTextItem(item["text"]) label.setX(item["centerX"] - item["length"] / 2) label.setY(-item["centerY"] - item["width"] / 2) font = QFont("Bavaria") font.setPointSize(24) font.setWeight(QFont.Bold) label.setFont(font) label.setRotation(item["rotation"]) self.RoomNameList.append(label) self.scene.addItem(label) elif (item["type"] == "obstacle"): shape = QGraphicsRectItem(item["centerX"] - item["length"] / 2, -item["centerY"] - item["width"] / 2, item["length"], item["width"]) shape.setTransformOriginPoint( QPoint(item["centerX"], -item["centerY"])) shape.setPen(QPen(self.gray)) shape.setBrush(QBrush(self.gray, Qt.SolidPattern)) shape.setRotation(item["rotation"]) self.ObstacleList.append(shape) elif (item["type"] == "plant"): shape = QGraphicsEllipseItem( item["centerX"] - item["length"] / 2, -item["centerY"] - item["width"] / 2, item["length"], item["width"]) shape.setTransformOriginPoint( QPoint(item["centerX"], -item["centerY"])) shape.setPen(QPen(self.green)) shape.setBrush(QBrush(self.green, Qt.SolidPattern)) shape.setRotation(item["rotation"]) self.ObstacleList.append(shape) self.SupervisorMap.scale(self.scaleFactor, self.scaleFactor)
class MainController(QObject): appStart = pyqtSignal() newCommand = pyqtSignal(tuple) def __init__(self): super(MainController, self).__init__() self.ser = Serial(WIFLY_SERIAL_PORT, WIFLY_BAUD_RATE) self.wiflyReceiver = WiflyReceiver(self.ser) self.wiflySender = WiflySender(self.ser) self.rover = Rover() self.mainWidget = MainWidget() self.wiflyReceiverThread = QThread() self.wiflyReceiver.moveToThread(self.wiflyReceiverThread) self.wiflySenderThread = QThread() self.wiflySender.moveToThread(self.wiflySenderThread) self.simState = SIMULATION_STATE_PHASE_1 self.simTimer = QTimer() self.simTimer.setSingleShot(True) self.wiflyReceiver.msgReceived.connect(self.mainWidget.appendMsg) self.wiflyReceiver.msgReceived.connect(self.rover.processData) self.newCommand.connect(self.wiflySender.sendMsg) self.appStart.connect(self.wiflyReceiver.processMsg) self.mainWidget.ui.gearSlider.valueChanged.connect( self.manualGearChange) self.mainWidget.ui.upButton.clicked.connect(self.manualMoveForward) self.mainWidget.ui.downButton.clicked.connect(self.manualMoveBackward) self.mainWidget.ui.leftButton.clicked.connect(self.manualMoveLeft) self.mainWidget.ui.rightButton.clicked.connect(self.manualMoveRight) self.mainWidget.ui.brakeButton.clicked.connect(self.manualStop) self.mainWidget.ui.simulationButton.clicked.connect( self.simulationStart) self.rover.newRoverPosition.connect(self.drawRover) self.rover.newWallDetected.connect(self.drawNewWall) self.simTimer.timeout.connect(self.simulationUpdate) self.mapScene = QGraphicsScene(0, 0, WORLD_X / CANVAS_RATIO, WORLD_Y / CANVAS_RATIO) self.mainWidget.ui.mappingGraphicsView.setScene(self.mapScene) self.roverRect = QGraphicsRectItem() self.mapScene.addItem(self.roverRect) """ rect1 = QGraphicsRectItem() rect2 = QGraphicsRectItem() self.mapScene.addItem(rect1) self.mapScene.addItem(rect2) rect1.setRect(100, 100, 20, 40) rect2.setRect(100, 100, 20, 40) #rect.moveBy(10, 50) rect2.setTransformOriginPoint(100, 100) rect2.setRotation(-10) print rect1.rect().center() #print rect2.transformOriginPoint().x(), rect2.transformOriginPoint().y() """ @pyqtSlot(tuple, tuple) def drawNewWall(self, wallFront, wallRear): pFront = QGraphicsRectItem(wallFront[0] / CANVAS_RATIO, wallFront[1] / CANVAS_RATIO, DOT_SIZE, DOT_SIZE) pRear = QGraphicsRectItem(wallRear[0] / CANVAS_RATIO, wallRear[1] / CANVAS_RATIO, DOT_SIZE, DOT_SIZE) self.mapScene.addItem(pFront) self.mapScene.addItem(pRear) @pyqtSlot(tuple, float) def drawRover(self, center, orientation): self.roverRect.setRect((center[0] - ROVER_WIDTH / 2) / CANVAS_RATIO, (center[1] - ROVER_LENGTH / 2) / CANVAS_RATIO, ROVER_WIDTH / CANVAS_RATIO, ROVER_LENGTH / CANVAS_RATIO) self.roverRect.setTransformOriginPoint(center[0] / CANVAS_RATIO, center[1] / CANVAS_RATIO) self.roverRect.setRotation(math.degrees(-orientation)) @pyqtSlot() def manualGearChange(self): gear = self.mainWidget.ui.gearSlider.value() self.mainWidget.ui.gearLcdNumber.display(gear) self.rover.roverGear = gear self.rover.updateMotorCommand() self.newCommand.emit(tuple(self.rover.commandMsg)) @pyqtSlot() def manualMoveForward(self): self.rover.roverDirection = ROVER_DIRECTION_FORWARD self.rover.updateMotorCommand() self.newCommand.emit(tuple(self.rover.commandMsg)) @pyqtSlot() def manualMoveBackward(self): self.rover.roverDirection = ROVER_DIRECTION_BACKWARD self.rover.updateMotorCommand() self.newCommand.emit(tuple(self.rover.commandMsg)) @pyqtSlot() def manualMoveLeft(self): self.rover.roverDirection = ROVER_DIRECTION_LEFT self.rover.updateMotorCommand() self.newCommand.emit(tuple(self.rover.commandMsg)) @pyqtSlot() def manualMoveRight(self): self.rover.roverDirection = ROVER_DIRECTION_RIGHT self.rover.updateMotorCommand() self.newCommand.emit(tuple(self.rover.commandMsg)) @pyqtSlot() def manualStop(self): self.mainWidget.ui.gearSlider.setValue(0) @pyqtSlot() def simulationStart(self): self.simState == SIMULATION_STATE_PHASE_1 self.simTimer.start(5000) @pyqtSlot() def simulationUpdate(self): if self.simState == SIMULATION_STATE_PHASE_1: self.simState = SIMULATION_STATE_PHASE_2 self.rover.roverGear = 2 self.rover.roverDirection = ROVER_DIRECTION_FORWARD self.rover.updateMotorCommand() self.newCommand.emit(tuple(self.rover.commandMsg)) self.simTimer.start(16000) elif self.simState == SIMULATION_STATE_PHASE_2: self.simState = SIMULATION_STATE_PHASE_3 self.rover.roverDirection = ROVER_DIRECTION_BACKWARD self.rover.updateMotorCommand() self.newCommand.emit(tuple(self.rover.commandMsg)) self.simTimer.start(6100) elif self.simState == SIMULATION_STATE_PHASE_3: self.simState = SIMULATION_STATE_PHASE_4 self.rover.roverDirection = ROVER_DIRECTION_LEFT self.rover.updateMotorCommand() self.newCommand.emit(tuple(self.rover.commandMsg)) self.simTimer.start(3500) elif self.simState == SIMULATION_STATE_PHASE_4: self.simState = SIMULATION_STATE_PHASE_5 self.rover.roverDirection = ROVER_DIRECTION_BACKWARD self.rover.updateMotorCommand() self.newCommand.emit(tuple(self.rover.commandMsg)) self.simTimer.start(8300) elif self.simState == SIMULATION_STATE_PHASE_5: self.rover.roverGear = 0 self.rover.roverDirection = ROVER_DIRECTION_STOP self.rover.updateMotorCommand() self.newCommand.emit(tuple(self.rover.commandMsg)) def start(self): self.mainWidget.show() self.wiflyReceiverThread.start() self.wiflySenderThread.start() self.appStart.emit()
class Window(QMainWindow, QGraphicsView): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('Proof of concept') self.setWindowIcon(QIcon('web.png')) # self.setGeometry(3000, 3000, 250, 150) # vbox = QVBoxLayout() # self.setLayout(vbox) self.initView() self.button = QPushButton('Test', self) self.button.move(50, 50) self.button.clicked.connect(self.myButtonClicked) self.statusBar() self.showMaximized() def myButtonClicked(self, event): sender = self.sender() self.statusBar().showMessage(sender.text() + ' was pressed') def initView(self): QGraphicsView.__init__(self) self.scene = QGraphicsScene() blueBrush = QBrush(QColor('blue')) outlinePen = QPen(QColor('black')) self.myRectt = QGraphicsRectItem(100, 30, 80, 100) self.myRectt.setBrush(blueBrush) self.myRectt.setPen(outlinePen) self.scene.addItem(self.myRectt) self.scene.setSceneRect(0, 0, 3000, 3000) self.myRect = QGraphicsRectItem(500, 200, 100, 100) self.myRect.setBrush(blueBrush) self.myRect.setPen(outlinePen) self.scene.addItem(self.myRect) self.view = QGraphicsView(self.scene, self) self.view.resize(3000, 3000) def keyPressEvent(self, e): # override ! if e.key() == Qt.Key_Escape: self.close() elif e.key() == Qt.Key_W: self.statusBar().showMessage("UP pressed") self.myRectt.setY(self.myRectt.y() + 1) self.show() elif e.key() == Qt.Key_D: self.statusBar().showMessage("RIGHT pressed") self.myRectt.setX(self.myRectt.x() + 1) self.show() elif e.key() == Qt.Key_S: self.statusBar().showMessage("DOWN pressed") self.myRectt.setY(self.myRectt.y() - 1) self.show() elif e.key() == Qt.Key_A: self.statusBar().showMessage("LEFT pressed") self.myRectt.setX(self.myRectt.x() - 1) # self.myRect.setPos(self.myRect.x(),self.myRect.y()-) self.show() elif e.key() == Qt.Key_8: self.statusBar().showMessage("UP pressed") self.myRect.setY(self.myRect.y() + 1) self.show() elif e.key() == Qt.Key_6: self.statusBar().showMessage("RIGHT pressed") self.myRect.setX(self.myRect.x() + 1) self.show() elif e.key() == Qt.Key_5: self.statusBar().showMessage("DOWN pressed") self.myRect.setY(self.myRect.y() - 1) self.show() elif e.key() == Qt.Key_4: self.statusBar().showMessage("LEFT pressed") self.myRect.setX(self.myRect.x() - 1) # self.myRect.setPos(self.myRect.x(),self.myRect.y()-) self.show() elif e.key() == Qt.Key_R: self.statusBar().showMessage("Rotate this shit") self.myRect.setTransformOriginPoint( 550, 250 ) #initial position.x + widh/2 ,initial position.y +height/2 print(self.myRect.rotation()) x = self.myRect.x() print(x) self.myRect.setRotation(self.myRect.rotation() - 5) self.show() elif e.key() == Qt.Key_T: self.statusBar().showMessage("Rotate") self.myRectt.setTransformOriginPoint(140, 80) self.myRectt.setRotation(self.myRectt.rotation() - 5) self.show()
class MainController(QObject): appStart = pyqtSignal() newCommand = pyqtSignal(tuple) def __init__(self): super(MainController, self).__init__() self.ser = Serial(WIFLY_SERIAL_PORT, WIFLY_BAUD_RATE) self.wiflyReceiver = WiflyReceiver(self.ser) self.wiflySender = WiflySender(self.ser) self.rover = Rover() self.mainWidget = MainWidget() self.wiflyReceiverThread = QThread() self.wiflyReceiver.moveToThread(self.wiflyReceiverThread) self.wiflySenderThread = QThread() self.wiflySender.moveToThread(self.wiflySenderThread) self.simState = SIMULATION_STATE_PHASE_1 self.simTimer = QTimer() self.simTimer.setSingleShot(True) self.wiflyReceiver.msgReceived.connect(self.mainWidget.appendMsg) self.wiflyReceiver.msgReceived.connect(self.rover.processData) self.newCommand.connect(self.wiflySender.sendMsg) self.appStart.connect(self.wiflyReceiver.processMsg) self.mainWidget.ui.gearSlider.valueChanged.connect(self.manualGearChange) self.mainWidget.ui.upButton.clicked.connect(self.manualMoveForward) self.mainWidget.ui.downButton.clicked.connect(self.manualMoveBackward) self.mainWidget.ui.leftButton.clicked.connect(self.manualMoveLeft) self.mainWidget.ui.rightButton.clicked.connect(self.manualMoveRight) self.mainWidget.ui.brakeButton.clicked.connect(self.manualStop) self.mainWidget.ui.simulationButton.clicked.connect(self.simulationStart) self.rover.newRoverPosition.connect(self.drawRover) self.rover.newWallDetected.connect(self.drawNewWall) self.simTimer.timeout.connect(self.simulationUpdate) self.mapScene = QGraphicsScene(0, 0, WORLD_X / CANVAS_RATIO, WORLD_Y / CANVAS_RATIO) self.mainWidget.ui.mappingGraphicsView.setScene(self.mapScene) self.roverRect = QGraphicsRectItem() self.mapScene.addItem(self.roverRect) """ rect1 = QGraphicsRectItem() rect2 = QGraphicsRectItem() self.mapScene.addItem(rect1) self.mapScene.addItem(rect2) rect1.setRect(100, 100, 20, 40) rect2.setRect(100, 100, 20, 40) #rect.moveBy(10, 50) rect2.setTransformOriginPoint(100, 100) rect2.setRotation(-10) print rect1.rect().center() #print rect2.transformOriginPoint().x(), rect2.transformOriginPoint().y() """ @pyqtSlot(tuple, tuple) def drawNewWall(self, wallFront, wallRear): pFront = QGraphicsRectItem(wallFront[0] / CANVAS_RATIO, wallFront[1] / CANVAS_RATIO, DOT_SIZE, DOT_SIZE) pRear = QGraphicsRectItem(wallRear[0] / CANVAS_RATIO, wallRear[1] / CANVAS_RATIO, DOT_SIZE, DOT_SIZE) self.mapScene.addItem(pFront) self.mapScene.addItem(pRear) @pyqtSlot(tuple, float) def drawRover(self, center, orientation): self.roverRect.setRect((center[0] - ROVER_WIDTH / 2) / CANVAS_RATIO, (center[1] - ROVER_LENGTH / 2) / CANVAS_RATIO, ROVER_WIDTH / CANVAS_RATIO, ROVER_LENGTH / CANVAS_RATIO) self.roverRect.setTransformOriginPoint(center[0] / CANVAS_RATIO, center[1] / CANVAS_RATIO) self.roverRect.setRotation(math.degrees(-orientation)) @pyqtSlot() def manualGearChange(self): gear = self.mainWidget.ui.gearSlider.value() self.mainWidget.ui.gearLcdNumber.display(gear) self.rover.roverGear = gear self.rover.updateMotorCommand() self.newCommand.emit(tuple(self.rover.commandMsg)) @pyqtSlot() def manualMoveForward(self): self.rover.roverDirection = ROVER_DIRECTION_FORWARD self.rover.updateMotorCommand() self.newCommand.emit(tuple(self.rover.commandMsg)) @pyqtSlot() def manualMoveBackward(self): self.rover.roverDirection = ROVER_DIRECTION_BACKWARD self.rover.updateMotorCommand() self.newCommand.emit(tuple(self.rover.commandMsg)) @pyqtSlot() def manualMoveLeft(self): self.rover.roverDirection = ROVER_DIRECTION_LEFT self.rover.updateMotorCommand() self.newCommand.emit(tuple(self.rover.commandMsg)) @pyqtSlot() def manualMoveRight(self): self.rover.roverDirection = ROVER_DIRECTION_RIGHT self.rover.updateMotorCommand() self.newCommand.emit(tuple(self.rover.commandMsg)) @pyqtSlot() def manualStop(self): self.mainWidget.ui.gearSlider.setValue(0) @pyqtSlot() def simulationStart(self): self.simState == SIMULATION_STATE_PHASE_1 self.simTimer.start(5000) @pyqtSlot() def simulationUpdate(self): if self.simState == SIMULATION_STATE_PHASE_1: self.simState = SIMULATION_STATE_PHASE_2 self.rover.roverGear = 2 self.rover.roverDirection = ROVER_DIRECTION_FORWARD self.rover.updateMotorCommand() self.newCommand.emit(tuple(self.rover.commandMsg)) self.simTimer.start(16000) elif self.simState == SIMULATION_STATE_PHASE_2: self.simState = SIMULATION_STATE_PHASE_3 self.rover.roverDirection = ROVER_DIRECTION_BACKWARD self.rover.updateMotorCommand() self.newCommand.emit(tuple(self.rover.commandMsg)) self.simTimer.start(6100) elif self.simState == SIMULATION_STATE_PHASE_3: self.simState = SIMULATION_STATE_PHASE_4 self.rover.roverDirection = ROVER_DIRECTION_LEFT self.rover.updateMotorCommand() self.newCommand.emit(tuple(self.rover.commandMsg)) self.simTimer.start(3500) elif self.simState == SIMULATION_STATE_PHASE_4: self.simState = SIMULATION_STATE_PHASE_5 self.rover.roverDirection = ROVER_DIRECTION_BACKWARD self.rover.updateMotorCommand() self.newCommand.emit(tuple(self.rover.commandMsg)) self.simTimer.start(8300) elif self.simState == SIMULATION_STATE_PHASE_5: self.rover.roverGear = 0 self.rover.roverDirection = ROVER_DIRECTION_STOP self.rover.updateMotorCommand() self.newCommand.emit(tuple(self.rover.commandMsg)) def start(self): self.mainWidget.show() self.wiflyReceiverThread.start() self.wiflySenderThread.start() self.appStart.emit()