class Compass(QWidget): def __init__(self, parent): super().__init__(parent) self.uas = None svgRenderer = QSvgRenderer('res/compass.svg') self.compass = QGraphicsSvgItem() self.compass.setSharedRenderer(svgRenderer) self.compass.setCacheMode(QGraphicsItem.NoCache) self.compass.setElementId('needle') center = self.compass.boundingRect().center() self.compass.setTransformOriginPoint(center.x(), center.y()) bkgnd = QGraphicsSvgItem() bkgnd.setSharedRenderer(svgRenderer) bkgnd.setCacheMode(QGraphicsItem.NoCache) bkgnd.setElementId('background') self.compass.setPos( bkgnd.boundingRect().width() / 2 - self.compass.boundingRect().width() / 2, bkgnd.boundingRect().height() / 2 - self.compass.boundingRect().height() / 2) self.compass.setTransformOriginPoint( self.compass.boundingRect().width() / 2, self.compass.boundingRect().height() / 2) fregnd = QGraphicsSvgItem() fregnd.setSharedRenderer(svgRenderer) fregnd.setCacheMode(QGraphicsItem.NoCache) fregnd.setElementId('foreground') scene = QGraphicsScene() scene.addItem(bkgnd) scene.addItem(self.compass) scene.addItem(fregnd) scene.setSceneRect(bkgnd.boundingRect()) view = QGraphicsView(scene) view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) layout = QVBoxLayout() layout.addWidget(view) super().setLayout(layout) def setHeading(self, hdr): if math.isnan(hdr) == False: hdr *= 180.0 / math.pi self.compass.setRotation(360.0 - hdr) def updateAttitude(self, sourceUAS, timestamp, roll, pitch, yaw): unused(sourceUAS, timestamp, roll, pitch) self.setHeading(yaw) def setActiveUAS(self, uas): uas.updateAttitudeSignal.connect(self.updateAttitude) self.uas = uas
def loadSvgContent(self, content): s = self.scene() s.clear() self.resetTransform() item = QGraphicsSvgItem() item.setSharedRenderer(QSvgRenderer(content)) item.setFlags(QGraphicsItem.ItemClipsToShape) item.setCacheMode(QGraphicsItem.NoCache) item.setZValue(0) s.addItem(item)
def __init__(self, parent): super().__init__(parent) self.uas = None svgRenderer = QSvgRenderer('res/barometer.svg') bkgnd = QGraphicsSvgItem() bkgnd.setSharedRenderer(svgRenderer) bkgnd.setCacheMode(QGraphicsItem.NoCache) bkgnd.setElementId('background') scene = QGraphicsScene() scene.addItem(bkgnd) scene.setSceneRect(bkgnd.boundingRect()) self.needle = QGraphicsSvgItem() self.needle.setSharedRenderer(svgRenderer) self.needle.setCacheMode(QGraphicsItem.NoCache) self.needle.setElementId('needle') self.needle.setParentItem(bkgnd) self.needle.setPos( bkgnd.boundingRect().width() / 2 - self.needle.boundingRect().width() / 2, bkgnd.boundingRect().height() / 2 - self.needle.boundingRect().height() / 2) self.needle.setTransformOriginPoint( self.needle.boundingRect().width() / 2, self.needle.boundingRect().height() / 2) # textElement = svgRenderer.boundsOnElement('needle-text') self.digitalBaro = QGraphicsTextItem() self.digitalBaro.setDefaultTextColor(QColor(255, 255, 255)) self.digitalBaro.document().setDefaultTextOption( QTextOption(Qt.AlignCenter)) self.digitalBaro.setFont(QFont('monospace', 13, 60)) self.digitalBaro.setParentItem(bkgnd) txm = QTransform() txm.translate( bkgnd.boundingRect().center().x(), bkgnd.boundingRect().height() - 1.5 * self.digitalBaro.document().size().height()) self.digitalBaro.setTransform(txm, False) view = QGraphicsView(scene) view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) layout = QVBoxLayout() layout.addWidget(view) self.setLayout(layout) self.setBarometer(1000)
def open_file(self, filename): svg_file = QFile(filename) if not svg_file.exists(): return self.file_name = svg_file self.resetTransform() self.scale(2.0, 2.0) svg_item = QGraphicsSvgItem(svg_file.fileName()) svg_item.setFlags(QGraphicsItem.ItemClipsToShape) svg_item.setCacheMode(QGraphicsItem.NoCache) svg_item.setZValue(0) s = self.scene() s.clear() s.addItem(svg_item)
def __init__(self, parent): super().__init__(parent) self.uas = None svgRenderer = QSvgRenderer('res/compass.svg') self.compass = QGraphicsSvgItem() self.compass.setSharedRenderer(svgRenderer) self.compass.setCacheMode(QGraphicsItem.NoCache) self.compass.setElementId('needle') center = self.compass.boundingRect().center() self.compass.setTransformOriginPoint(center.x(), center.y()) bkgnd = QGraphicsSvgItem() bkgnd.setSharedRenderer(svgRenderer) bkgnd.setCacheMode(QGraphicsItem.NoCache) bkgnd.setElementId('background') self.compass.setPos( bkgnd.boundingRect().width() / 2 - self.compass.boundingRect().width() / 2, bkgnd.boundingRect().height() / 2 - self.compass.boundingRect().height() / 2) self.compass.setTransformOriginPoint( self.compass.boundingRect().width() / 2, self.compass.boundingRect().height() / 2) fregnd = QGraphicsSvgItem() fregnd.setSharedRenderer(svgRenderer) fregnd.setCacheMode(QGraphicsItem.NoCache) fregnd.setElementId('foreground') scene = QGraphicsScene() scene.addItem(bkgnd) scene.addItem(self.compass) scene.addItem(fregnd) scene.setSceneRect(bkgnd.boundingRect()) view = QGraphicsView(scene) view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) layout = QVBoxLayout() layout.addWidget(view) super().setLayout(layout)
class SvgView(QGraphicsView): def __init__(self, parent=None): super(SvgView, self).__init__(parent) self.setViewport(QWidget()) self.svgItem = None self.image = QImage() self.setScene(QGraphicsScene(self)) self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse) self.setDragMode(QGraphicsView.ScrollHandDrag) self.setViewportUpdateMode(QGraphicsView.FullViewportUpdate) def openFile(self, svg_file): if not svg_file.exists(): return s = self.scene() s.clear() self.resetTransform() self.svgItem = QGraphicsSvgItem(svg_file.fileName()) self.svgItem.setFlags(QGraphicsItem.ItemClipsToShape) self.svgItem.setCacheMode(QGraphicsItem.NoCache) self.svgItem.setZValue(0) s.addItem(self.svgItem) self.printHotRectangles() def printHotRectangles(self): names="GND0,GND1,GND2,GND3,A1,A2,PVS,OUT,IN,MIC,SINE,IN1,IN2,SEN,SQR1,SQR2,OD1,CCS".split(",") for n in names: print(n, self.svgItem.renderer().boundsOnElement(n)) def wheelEvent(self, event): factor = pow(1.2, event.angleDelta().y() / 240.0) self.scale(factor, factor) event.accept()
class SvgView(QGraphicsView): def __init__(self, parent=None): super(SvgView, self).__init__(parent) self.setViewport(QWidget()) self.svgItem = None self.image = QImage() self.setScene(QGraphicsScene(self)) self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse) self.setDragMode(QGraphicsView.ScrollHandDrag) self.setViewportUpdateMode(QGraphicsView.FullViewportUpdate) def openFile(self, svg_file): if not svg_file.exists(): return s = self.scene() s.clear() self.resetTransform() self.svgItem = QGraphicsSvgItem(svg_file.fileName()) self.svgItem.setFlags(QGraphicsItem.ItemClipsToShape) self.svgItem.setCacheMode(QGraphicsItem.NoCache) self.svgItem.setZValue(0) s.addItem(self.svgItem) self.printHotRectangles() def printHotRectangles(self): names = "GND0,GND1,GND2,GND3,A1,A2,PVS,OUT,IN,MIC,SINE,IN1,IN2,SEN,SQR1,SQR2,OD1,CCS".split( ",") for n in names: print(n, self.svgItem.renderer().boundsOnElement(n)) def wheelEvent(self, event): factor = pow(1.2, event.angleDelta().y() / 240.0) self.scale(factor, factor) event.accept()
class SvgView(QGraphicsView): Native, OpenGL, Image = range(3) def __init__(self, parent=None): super(SvgView, self).__init__(parent) self.renderer = SvgView.Native self.svgItem = None self.backgroundItem = None self.outlineItem = None self.image = QImage() self.setScene(QGraphicsScene(self)) self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse) self.setDragMode(QGraphicsView.ScrollHandDrag) self.setViewportUpdateMode(QGraphicsView.FullViewportUpdate) # Prepare background check-board pattern. tilePixmap = QPixmap(64, 64) tilePixmap.fill(Qt.white) tilePainter = QPainter(tilePixmap) color = QColor(220, 220, 220) tilePainter.fillRect(0, 0, 32, 32, color) tilePainter.fillRect(32, 32, 32, 32, color) tilePainter.end() self.setBackgroundBrush(QBrush(tilePixmap)) def drawBackground(self, p, rect): p.save() p.resetTransform() p.drawTiledPixmap(self.viewport().rect(), self.backgroundBrush().texture()) p.restore() def openFile(self, svg_file): if not svg_file.exists(): return s = self.scene() if self.backgroundItem: drawBackground = self.backgroundItem.isVisible() else: drawBackground = False if self.outlineItem: drawOutline = self.outlineItem.isVisible() else: drawOutline = True s.clear() self.resetTransform() self.svgItem = QGraphicsSvgItem(svg_file.fileName()) self.svgItem.setFlags(QGraphicsItem.ItemClipsToShape) self.svgItem.setCacheMode(QGraphicsItem.NoCache) self.svgItem.setZValue(0) self.backgroundItem = QGraphicsRectItem(self.svgItem.boundingRect()) self.backgroundItem.setBrush(Qt.white) self.backgroundItem.setPen(QPen(Qt.NoPen)) self.backgroundItem.setVisible(drawBackground) self.backgroundItem.setZValue(-1) self.outlineItem = QGraphicsRectItem(self.svgItem.boundingRect()) outline = QPen(Qt.black, 2, Qt.DashLine) outline.setCosmetic(True) self.outlineItem.setPen(outline) self.outlineItem.setBrush(QBrush(Qt.NoBrush)) self.outlineItem.setVisible(drawOutline) self.outlineItem.setZValue(1) s.addItem(self.backgroundItem) s.addItem(self.svgItem) s.addItem(self.outlineItem) s.setSceneRect(self.outlineItem.boundingRect().adjusted(-10, -10, 10, 10)) def setRenderer(self, renderer): self.renderer = renderer if self.renderer == SvgView.OpenGL: if QGLFormat.hasOpenGL(): self.setViewport(QGLWidget(QGLFormat(QGL.SampleBuffers))) else: self.setViewport(QWidget()) def setHighQualityAntialiasing(self, highQualityAntialiasing): if QGLFormat.hasOpenGL(): self.setRenderHint(QPainter.HighQualityAntialiasing, highQualityAntialiasing) def setViewBackground(self, enable): if self.backgroundItem: self.backgroundItem.setVisible(enable) def setViewOutline(self, enable): if self.outlineItem: self.outlineItem.setVisible(enable) def paintEvent(self, event): if self.renderer == SvgView.Image: if self.image.size() != self.viewport().size(): self.image = QImage(self.viewport().size(), QImage.Format_ARGB32_Premultiplied) imagePainter = QPainter(self.image) QGraphicsView.render(self, imagePainter) imagePainter.end() p = QPainter(self.viewport()) p.drawImage(0, 0, self.image) else: super(SvgView, self).paintEvent(event) def wheelEvent(self, event): print(event.angleDelta().y()) factor = pow(1.2, event.angleDelta().y() / 240.0) self.scale(factor, factor) event.accept()
class Attitude(QGraphicsView): viewUpdate = pyqtSignal() def __init__(self, winParent): QGraphicsView.__init__(self) self.winParent = winParent self.viewUpdate.connect(self.update) self.m_roll = 0 self.m_pitch = 0 self.m_faceDeltaX_new = 0 self.m_faceDeltaX_old = 0 self.m_faceDeltaY_new = 0 self.m_faceDeltaY_old = 0 self.m_originalHeight = 240 self.m_originalWidth = 240 self.m_originalPixPerDeg = 1.7 self.m_originalAdiCtr = QPointF(120, 120) self.m_backZ = -30 self.m_faceZ = -20 self.m_ringZ = -10 self.m_caseZ = 10 self.setStyleSheet("background: transparent; border: none") self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setInteractive(False) self.setEnabled(False) self.m_scene = QGraphicsScene(self) self.setScene(self.m_scene) self.init() def init(self): self.m_scaleX = self.width() / self.m_originalWidth self.m_scaleY = self.height() / self.m_originalHeight self.m_itemBack = QGraphicsSvgItem(":/qfi/images/adi/adi_back.svg") self.m_itemBack.setCacheMode(QGraphicsItem.NoCache) self.m_itemBack.setZValue(self.m_backZ) self.m_itemBack.setTransform( QTransform.fromScale(self.m_scaleX, self.m_scaleY), True) self.m_itemBack.setTransformOriginPoint(self.m_originalAdiCtr) self.m_scene.addItem(self.m_itemBack) self.m_itemFace = QGraphicsSvgItem(":/qfi/images/adi/adi_face.svg") self.m_itemFace.setCacheMode(QGraphicsItem.NoCache) self.m_itemFace.setZValue(self.m_faceZ) self.m_itemFace.setTransform( QTransform.fromScale(self.m_scaleX, self.m_scaleY), True) self.m_itemFace.setTransformOriginPoint(self.m_originalAdiCtr) self.m_scene.addItem(self.m_itemFace) self.m_itemRing = QGraphicsSvgItem(":/qfi/images/adi/adi_ring.svg") self.m_itemRing.setCacheMode(QGraphicsItem.NoCache) self.m_itemRing.setZValue(self.m_ringZ) self.m_itemRing.setTransform( QTransform.fromScale(self.m_scaleX, self.m_scaleY), True) self.m_itemRing.setTransformOriginPoint(self.m_originalAdiCtr) self.m_scene.addItem(self.m_itemRing) self.m_itemCase = QGraphicsSvgItem(":/qfi/images/alt/alt_case.svg") self.m_itemCase.setCacheMode(QGraphicsItem.NoCache) self.m_itemCase.setZValue(self.m_caseZ) self.m_itemCase.setTransform( QTransform.fromScale(self.m_scaleX, self.m_scaleY), True) self.m_itemCase.setTransformOriginPoint(self.m_originalAdiCtr) self.m_scene.addItem(self.m_itemCase) self.centerOn(self.width() / 2, self.height() / 2) self.updateView() def reinit(self): if (self.m_scene): self.m_scene.clear() self.init() def update(self): self.updateView() self.m_faceDeltaX_old = self.m_faceDeltaX_new self.m_faceDeltaY_old = self.m_faceDeltaY_new def setRoll(self, roll): self.m_roll = roll if (self.m_roll < -180): self.m_roll = -180 if (self.m_roll > 180): self.m_roll = 180 def setPitch(self, pitch): self.m_pitch = pitch if (self.m_pitch < -25): self.m_pitch = -25 if (self.m_pitch > 25): self.m_pitch = 25 def resizeEvent(self, event): QGraphicsView.resizeEvent(self, event) self.reinit() def reset(self): self.m_itemBack = None self.m_itemFace = None self.m_itemRing = None self.m_itemCase = None self.m_roll = 0.0 self.m_pitch = 0.0 def updateView(self): self.m_scaleX = self.width() / self.m_originalWidth self.m_scaleY = self.height() / self.m_originalHeight self.m_itemBack.setRotation(-self.m_roll) self.m_itemRing.setRotation(-self.m_roll) self.m_itemFace.setRotation(-self.m_roll) roll_rad = math.pi * self.m_roll / 180.0 delta = self.m_originalPixPerDeg * self.m_pitch self.m_faceDeltaX_new = self.m_scaleX * delta * math.sin(roll_rad) self.m_faceDeltaY_new = self.m_scaleY * delta * math.cos(roll_rad) self.m_itemFace.moveBy(self.m_faceDeltaX_new - self.m_faceDeltaX_old, self.m_faceDeltaY_new - self.m_faceDeltaY_old) self.m_scene.update()
class flt_adi(QGraphicsView): def __init__(self, parent=None): super(flt_adi, self).__init__(parent) self.__paramsInit() def reinit(self): """ reinitiate widget """ self.__scene.clear() self.__init() def update(self): """ redraws widget """ self.__updateView() self.__faceDeltaXOld = self.__faceDeltaXNew self.__faceDeltaYOld = self.__faceDeltaYNew def setRoll(self, roll): """ set roll angle, deg roll: float """ self.__roll = roll if self.__roll < -180.0: self.__roll = -180.0 elif self.__roll > 180.0: self.__roll = 180.0 def setPitch(self, pitch): """ set pitch angle, deg pitch: float """ self.__pitch = pitch if self.__pitch < -25.0: self.__pitch = -25.0 elif self.__pitch > 25.0: self.__pitch = 25.0 def resizeEvent(self, event): QGraphicsView.resizeEvent(event) self.reinit() def __paramsInit(self): self.__roll = 0.0 self.__pitch = 0.0 self.__faceDeltaXNew = 0.0 self.__faceDeltaXOld = 0.0 self.__faceDeltaYNew = 0.0 self.__faceDeltaYOld = 0.0 self.__scaleX = 1.0 self.__scaleY = 1.0 self.__originalPixPerDeg = 1.7 self.__originalHeight = 240 self.__originalWidth = 240 self.__backZ = -30 self.__faceZ = -20 self.__ringZ = -10 self.__caseZ = 10 self.__originalAdiCtr = QPointF(120.0, 120.0) self.__scene = QGraphicsScene(self) self.__scene.clear() def __del__(self): self.__scene.clear() del self.__scene self.__reset() def __init(self): self.__scaleX = width() / self.__originalWidth self.__scaleY = height() / self.__originalHeight self.__reset() # "border-image: url(:/side_btn/LightGCS_image/setter.png);" self.__itemBack = QGraphicsSvgItem( ":/fi_img/monitor/flightInstruments/img/adi/adi_back.svg") self.__itemBack.setCacheMode(QGraphicsItem.NoCache) self.__itemBack.setZvalue(self.__backZ) self.__itemBack.setTransform( QTransform.fromScale(self.__scaleX, self.__scaleY), True) self.__itemBack.setTransformOriginPoint(self.__originalAdiCtr) self.__scene.addItem(self.__itemBack) self.__itemFace = QGraphicsSvgItem( ":/fi_img/monitor/flightInstruments/img/adi/adi_face.svg") self.__itemFace.setCacheMode(QGraphicsItem.NoCache) self.__itemFace.setZvalue(self.__faceZ) self.__itemFace.setTransform( QTransform.fromScale(self.__scaleX, self.__scaleY), True) self.__itemFace.setTransformOriginPoint(self.__originalAdiCtr) self.__scene.addItem(self.__itemFace) self.__itemRing = QGraphicsSvgItem( ":/fi_img/monitor/flightInstruments/img/adi/adi_ring.svg") self.__itemRing.setCacheMode(QGraphicsItem.NoCache) self.__itemRing.setZvalue(self.__ringZ) self.__itemRing.setTransform( QTransform.fromScale(self.__scaleX, self.__scaleY), True) self.__itemRing.setTransformOriginPoint(self.__originalAdiCtr) self.__scene.addItem(self.__itemRing) self.__itemCase = QGraphicsSvgItem( ":/fi_img/monitor/flightInstruments/img/adi/adi_case.svg") self.__itemCase.setCacheMode(QGraphicsItem.NoCache) self.__itemCase.setZvalue(self.__ringZ) self.__itemCase.setTransform( QTransform.fromScale(self.__scaleX, self.__scaleY), True) self.__itemCase.setTransformOriginPoint(self.__originalAdiCtr) self.__scene.addItem(self.__itemCase) centerOn(width() / 2.0, height() / 2.0) self.__updateView() def __reset(self): self.__roll = 0.0 self.__pitch = 0.0 self.__faceDeltaXNew = 0.0 self.__faceDeltaXOld = 0.0 self.__faceDeltaYNew = 0.0 self.__faceDeltaYOld = 0.0 del self.__itemBack del self.__itemFace del self.__itemRing del self.__itemCase def __updateView(self): self.__scaleX = width() / self.__originalWidth self.__scaleY = height() / self.__originalHeight self.__itemBack.setRotation(-self.__roll) self.__itemFace.setRotation(-self.__roll) self.__itemRing.setRotation(-self.__roll) roll_rad = math.PI * self.__roll / 180.0 delta = self.__originalPixPerDeg * self.__pitch self.__faceDeltaXNew = self.__scaleX * delta * sin(roll_rad) self.__faceDeltaYNew = self.__scaleY * delta * cos(roll_rad) self.__itemFace.moveBy(self.__faceDeltaXNew - self.__faceDeltaXOld, self.__faceDeltaYNew - self.__faceDeltaYOld) self.__scene.update()
class qfi_ALT (QGraphicsView): viewUpdate = pyqtSignal() def __init__(self,winParent): QGraphicsView.__init__(self) self.winParent=winParent self.viewUpdate.connect(self.updateView) self.m_altitude = 0 self.m_pressure = 28 self.m_originalHeight = 240 self.m_originalWidth = 240 self.m_originalAltCtr = QPointF(120,120) self.m_face1Z = -50 self.m_face2Z = -40 self.m_face3Z = -30 self.m_hand1Z = -20 self.m_hand2Z = -10 self.m_caseZ = 10 self.setStyleSheet("background: transparent; border: none") self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setInteractive(False) self.setEnabled(False) self.m_scene = QGraphicsScene(self) self.setScene(self.m_scene) self.init() def init (self): self.m_scaleX = self.width() / self.m_originalWidth self.m_scaleY = self.height() / self.m_originalHeight self.m_itemFace_1 = QGraphicsSvgItem(":/qfi/images/alt/alt_face_1.svg") self.m_itemFace_1.setCacheMode (QGraphicsItem.NoCache) self.m_itemFace_1.setZValue( self.m_face1Z ) self.m_itemFace_1.setTransform( QTransform.fromScale( self.m_scaleX, self.m_scaleY ), True ) self.m_itemFace_1.setTransformOriginPoint( self.m_originalAltCtr ) self.m_scene.addItem (self.m_itemFace_1) self.m_itemFace_2 = QGraphicsSvgItem(":/qfi/images/alt/alt_face_2.svg") self.m_itemFace_2.setCacheMode (QGraphicsItem.NoCache) self.m_itemFace_2.setZValue( self.m_face2Z ) self.m_itemFace_2.setTransform( QTransform.fromScale( self.m_scaleX, self.m_scaleY ), True ) self.m_itemFace_2.setTransformOriginPoint( self.m_originalAltCtr ) self.m_scene.addItem (self.m_itemFace_2) self.m_itemFace_3 = QGraphicsSvgItem(":/qfi/images/alt/alt_face_3.svg") self.m_itemFace_3.setCacheMode (QGraphicsItem.NoCache) self.m_itemFace_3.setZValue( self.m_face3Z ) self.m_itemFace_3.setTransform( QTransform.fromScale( self.m_scaleX, self.m_scaleY ), True ) self.m_itemFace_3.setTransformOriginPoint( self.m_originalAltCtr ) self.m_scene.addItem (self.m_itemFace_3) self.m_itemHand_1 = QGraphicsSvgItem(":/qfi/images/alt/alt_hand_1.svg") self.m_itemHand_1.setCacheMode (QGraphicsItem.NoCache) self.m_itemHand_1.setZValue( self.m_hand1Z ) self.m_itemHand_1.setTransform( QTransform.fromScale( self.m_scaleX, self.m_scaleY ), True ) self.m_itemHand_1.setTransformOriginPoint( self.m_originalAltCtr ) self.m_scene.addItem (self.m_itemHand_1) self.m_itemHand_2 = QGraphicsSvgItem(":/qfi/images/alt/alt_hand_2.svg") self.m_itemHand_2.setCacheMode (QGraphicsItem.NoCache) self.m_itemHand_2.setZValue( self.m_hand2Z ) self.m_itemHand_2.setTransform( QTransform.fromScale( self.m_scaleX, self.m_scaleY ), True ) self.m_itemHand_2.setTransformOriginPoint( self.m_originalAltCtr ) self.m_scene.addItem (self.m_itemHand_2) self.m_itemCase = QGraphicsSvgItem(":/qfi/images/alt/alt_case.svg") self.m_itemCase.setCacheMode (QGraphicsItem.NoCache) self.m_itemCase.setZValue( self.m_caseZ ) self.m_itemCase.setTransform( QTransform.fromScale( self.m_scaleX, self.m_scaleY ), True ) self.m_itemCase.setTransformOriginPoint( self.m_originalAltCtr ) self.m_scene.addItem (self.m_itemCase) self.centerOn (self.width()/2, self.height()/2) self.updateView() def reinit(self): if (self.m_scene): self.m_scene.clear() self.init() def update(self): self.updateView() def setAltitude (self, altitude): self.m_altitude = altitude def setPressure (self, pressure): self.m_pressure = pressure if (self.m_pressure < 28): self.m_pressure = 28 if (self.m_pressure > 31.5): self.m_pressure = 31.5 def resizeEvent (self, event): QGraphicsView.resizeEvent (self,event) self.reinit() def reset (self): self.m_itemFace_1 = None self.m_itemFace_2 = None self.m_itemFace_3 = None self.m_itemHand_1 = None self.m_itemHand_2 = None self.m_itemCase = None self.m_altitude = 0.0 self.m_pressure = 28.0 def updateView(self): altitude = math.ceil(self.m_altitude + 0.5) angleH1 = self.m_altitude * 0.036 angleH2 = ( altitude % 1000 ) * 0.36 angleF1 = (self.m_pressure - 28.0 ) * 100.0 angleF3 = self.m_altitude * 0.0036 self.m_itemHand_1.setRotation(angleH1) self.m_itemHand_2.setRotation(angleH2) self.m_itemFace_1.setRotation(- angleF1) self.m_itemFace_3.setRotation(angleF3) self.m_scene.update()
class Battery(QGraphicsView): viewUpdate = pyqtSignal() def __init__(self,winParent): QGraphicsView.__init__(self) self.winParent=winParent self.viewUpdate.connect(self.update) self.m_currentValue = 0 self.m_scaleX = 0 self.m_scaleY = 0 self.m_originalHeight = 245 self.m_originalWidth = 245 self.m_originalCtr = QPointF(120,120) self.m_faceZ = -20 self.m_caseZ = 10 self.m_markZ = -30 self.m_mark2Z = -30 self.m_mark3Z = -30 self.m_mark4Z = -30 self.m_mark5Z = -30 self.m_itemFace = None self.m_itemCase = None self.m_itemMark = None self.m_itemMark2 = None self.m_itemMark3 = None self.m_itemMark4 = None self.m_itemMark5 = None self.setStyleSheet("background: transparent; border: none"); self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setInteractive(False) self.setEnabled(False) self.m_scene = QGraphicsScene(self) self.setScene(self.m_scene) self.init() def init (self): # os.chdir('/Users/zeyneptuna/Desktop/during_flight/widget/battery') self.m_scaleX = self.width() / self.m_originalWidth self.m_scaleY = self.height() / self.m_originalHeight self.m_itemFace = QGraphicsSvgItem("widget/battery/battery_face.svg") self.m_itemFace.setCacheMode (QGraphicsItem.NoCache) self.m_itemFace.setZValue(self.m_faceZ) self.m_itemFace.setTransform(QTransform.fromScale(self.m_scaleX, self.m_scaleY), True) self.m_itemFace.setTransformOriginPoint(self.m_originalCtr) self.m_scene.addItem(self.m_itemFace) self.m_itemCase = QGraphicsSvgItem("widget/battery/battery_case.svg") self.m_itemCase.setCacheMode (QGraphicsItem.NoCache) self.m_itemCase.setZValue(self.m_caseZ) self.m_itemCase.setTransform(QTransform.fromScale(self.m_scaleX, self.m_scaleY), True) self.m_itemCase.setTransformOriginPoint(self.m_originalCtr) self.m_scene.addItem(self.m_itemCase) self.m_itemMark = QGraphicsSvgItem("widget/battery/battery_mark.svg") self.m_itemMark.setCacheMode (QGraphicsItem.NoCache) self.m_itemMark.setZValue(self.m_markZ) self.m_itemMark.setPos(57, 120) self.m_itemMark.setScale(0.77) self.m_scene.addItem(self.m_itemMark) self.m_itemMark2 = QGraphicsSvgItem("widget/battery/battery_mark.svg") self.m_itemMark2.setCacheMode (QGraphicsItem.NoCache) self.m_itemMark2.setZValue(self.m_mark2Z) self.m_itemMark2.setPos(57, 92.5) self.m_itemMark2.setScale(0.77) self.m_scene.addItem(self.m_itemMark2) self.m_itemMark3 = QGraphicsSvgItem("widget/battery/battery_mark.svg") self.m_itemMark3.setCacheMode (QGraphicsItem.NoCache) self.m_itemMark3.setZValue(self.m_mark3Z) self.m_itemMark3.setPos(57, 65) self.m_itemMark3.setScale(0.77) self.m_scene.addItem(self.m_itemMark3) self.m_itemMark4 = QGraphicsSvgItem("widget/battery/battery_mark.svg") self.m_itemMark4.setCacheMode(QGraphicsItem.NoCache) self.m_itemMark4.setZValue(self.m_mark4Z) self.m_itemMark4.setPos(57, 37.5) self.m_itemMark4.setScale(0.77) self.m_scene.addItem(self.m_itemMark4) self.m_itemMark5 = QGraphicsSvgItem("widget/battery/battery_mark.svg") self.m_itemMark5.setCacheMode (QGraphicsItem.NoCache) self.m_itemMark5.setZValue(self.m_mark5Z) self.m_itemMark5.setPos(57, 10) self.m_itemMark5.setScale(0.77) self.m_scene.addItem(self.m_itemMark5) self.centerOn(self.width()/2, self.height()/2) self.updateView() def reinit(self): if (self.m_scene): self.m_scene.clear() self.init() def update(self): self.updateView() def setCurrentVal(self, val): self.m_currentValue = val def resizeEvent (self, event): QGraphicsView.resizeEvent (self,event) self.reinit() def reset (self): self.m_itemFace = None self.m_itemCase = None self.m_itemMark = None self.m_itemMark2 = None self.m_itemMark3 = None self.m_itemMark4 = None self.m_itemMark5 = None self.m_currentValue = 0 def updateView(self): if self.m_currentValue <= 20: self.m_itemMark2.setZValue(-30) elif self.m_currentValue <= 40: self.m_itemMark3.setZValue(-30) elif self.m_currentValue <= 60: self.m_itemMark4.setZValue(-30) elif self.m_currentValue <= 80: self.m_itemMark5.setZValue(-30) elif self.m_currentValue <= 100: self.m_itemMark.setZValue(20) self.m_itemMark2.setZValue(20) self.m_itemMark3.setZValue(20) self.m_itemMark4.setZValue(20) self.m_itemMark5.setZValue(20) self.m_scene.update()
class SvgView(QGraphicsView): Native, OpenGL, Image = range(3) def __init__(self, parent=None): super(SvgView, self).__init__(parent) self.renderer = SvgView.Native self.svgItem = None self.backgroundItem = None self.outlineItem = None self.image = QImage() self.setScene(QGraphicsScene(self)) self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse) self.setDragMode(QGraphicsView.ScrollHandDrag) self.setViewportUpdateMode(QGraphicsView.FullViewportUpdate) def drawBackground(self, p, rect): p.save() p.resetTransform() p.drawTiledPixmap(self.viewport().rect(), self.backgroundBrush().texture()) p.restore() def openFile(self, svg_file): if not svg_file.exists(): return s = self.scene() if self.backgroundItem: drawBackground = self.backgroundItem.isVisible() else: drawBackground = False if self.outlineItem: drawOutline = self.outlineItem.isVisible() else: drawOutline = True s.clear() self.resetTransform() self.svgItem = QGraphicsSvgItem(svg_file.fileName()) self.svgItem.setFlags(QGraphicsItem.ItemClipsToShape) self.svgItem.setCacheMode(QGraphicsItem.NoCache) self.svgItem.setZValue(0) s.addItem(self.svgItem) def setRenderer(self, renderer): self.renderer = renderer if self.renderer == SvgView.OpenGL: if QGLFormat.hasOpenGL(): self.setViewport(QGLWidget(QGLFormat(QGL.SampleBuffers))) else: self.setViewport(QWidget()) def setHighQualityAntialiasing(self, highQualityAntialiasing): if QGLFormat.hasOpenGL(): self.setRenderHint( QPainter.HighQualityAntialiasing, highQualityAntialiasing ) def setViewBackground(self, enable): if self.backgroundItem: self.backgroundItem.setVisible(enable) def setViewOutline(self, enable): if self.outlineItem: self.outlineItem.setVisible(enable) def paintEvent(self, event): if self.renderer == SvgView.Image: if self.image.size() != self.viewport().size(): self.image = QImage( self.viewport().size(), QImage.Format_ARGB32_Premultiplied ) imagePainter = QPainter(self.image) QGraphicsView.render(self, imagePainter) imagePainter.end() p = QPainter(self.viewport()) p.drawImage(0, 0, self.image) else: super(SvgView, self).paintEvent(event) def wheelEvent(self, event): factor = pow(1.2, event.angleDelta() / 240.0) self.scale(factor, factor) event.accept()
class SvgView(QGraphicsView): Native, OpenGL, Image = range(3) def __init__(self, parent=None): super(SvgView, self).__init__(parent) self.renderer = SvgView.Native self.svgItem = None self.backgroundItem = None self.outlineItem = None self.image = QImage() self.setScene(QGraphicsScene(self)) self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse) self.setDragMode(QGraphicsView.ScrollHandDrag) self.setViewportUpdateMode(QGraphicsView.FullViewportUpdate) # Prepare background check-board pattern. tilePixmap = QPixmap(64, 64) tilePixmap.fill(Qt.white) tilePainter = QPainter(tilePixmap) color = QColor(220, 220, 220) tilePainter.fillRect(0, 0, 32, 32, color) tilePainter.fillRect(32, 32, 32, 32, color) tilePainter.end() self.setBackgroundBrush(QBrush(tilePixmap)) def drawBackground(self, p, rect): p.save() p.resetTransform() p.drawTiledPixmap(self.viewport().rect(), self.backgroundBrush().texture()) p.restore() def openFile(self, svg_file): if not svg_file.exists(): return s = self.scene() if self.backgroundItem: drawBackground = self.backgroundItem.isVisible() else: drawBackground = False if self.outlineItem: drawOutline = self.outlineItem.isVisible() else: drawOutline = True s.clear() self.resetTransform() self.svgItem = QGraphicsSvgItem(svg_file.fileName()) self.svgItem.setFlags(QGraphicsItem.ItemClipsToShape) self.svgItem.setCacheMode(QGraphicsItem.NoCache) self.svgItem.setZValue(0) self.backgroundItem = QGraphicsRectItem(self.svgItem.boundingRect()) self.backgroundItem.setBrush(Qt.white) self.backgroundItem.setPen(QPen(Qt.NoPen)) self.backgroundItem.setVisible(drawBackground) self.backgroundItem.setZValue(-1) self.outlineItem = QGraphicsRectItem(self.svgItem.boundingRect()) outline = QPen(Qt.black, 2, Qt.DashLine) outline.setCosmetic(True) self.outlineItem.setPen(outline) self.outlineItem.setBrush(QBrush(Qt.NoBrush)) self.outlineItem.setVisible(drawOutline) self.outlineItem.setZValue(1) s.addItem(self.backgroundItem) s.addItem(self.svgItem) s.addItem(self.outlineItem) s.setSceneRect(self.outlineItem.boundingRect().adjusted( -10, -10, 10, 10)) def setRenderer(self, renderer): self.renderer = renderer if self.renderer == SvgView.OpenGL: if QGLFormat.hasOpenGL(): self.setViewport(QGLWidget(QGLFormat(QGL.SampleBuffers))) else: self.setViewport(QWidget()) def setHighQualityAntialiasing(self, highQualityAntialiasing): if QGLFormat.hasOpenGL(): self.setRenderHint(QPainter.HighQualityAntialiasing, highQualityAntialiasing) def setViewBackground(self, enable): if self.backgroundItem: self.backgroundItem.setVisible(enable) def setViewOutline(self, enable): if self.outlineItem: self.outlineItem.setVisible(enable) def paintEvent(self, event): if self.renderer == SvgView.Image: if self.image.size() != self.viewport().size(): self.image = QImage(self.viewport().size(), QImage.Format_ARGB32_Premultiplied) imagePainter = QPainter(self.image) QGraphicsView.render(self, imagePainter) imagePainter.end() p = QPainter(self.viewport()) p.drawImage(0, 0, self.image) else: super(SvgView, self).paintEvent(event) def wheelEvent(self, event): factor = pow(1.2, event.delta() / 240.0) self.scale(factor, factor) event.accept()
class SvgView(QGraphicsView): Native, Image = range(2) clicked_event = pyqtSignal(QMouseEvent) double_click_event = pyqtSignal(QMouseEvent) wheel_event = pyqtSignal(QWheelEvent) def __init__(self, parent=None): super(SvgView, self).__init__(parent) self.renderer = SvgView.Native self.svgItem = None self.backgroundItem = None self.image = QImage() self.default_width = 0 self.default_height = 0 self.__tf_rotate = QTransform() self.__tf_scale = QTransform() self.setScene(QGraphicsScene(self)) def drawBackground(self, p: QPainter, rect: QRectF): p.save() p.resetTransform() p.drawTiledPixmap(self.viewport().rect(), self.backgroundBrush().texture()) p.restore() def openFile(self, svg_file: QFile): if not svg_file.exists(): return if self.backgroundItem: drawBackground = self.backgroundItem.isVisible() else: drawBackground = False s = self.scene() s.clear() self.resetTransform() self.svgItem = QGraphicsSvgItem(svg_file.fileName()) self.svgItem.setFlags(QGraphicsItem.ItemClipsToShape) self.svgItem.setCacheMode(QGraphicsItem.NoCache) self.svgItem.setZValue(0) tmp = self.svgItem.renderer().defaultSize() self.default_width = tmp.width() self.default_height = tmp.height() self.backgroundItem = QGraphicsRectItem(self.svgItem.boundingRect()) self.backgroundItem.setBrush(Qt.white) self.backgroundItem.setPen(QPen(Qt.NoPen)) self.backgroundItem.setVisible(drawBackground) self.backgroundItem.setZValue(-1) s.addItem(self.backgroundItem) s.addItem(self.svgItem) def setRenderer(self, renderer): self.renderer = renderer self.setViewport(QWidget()) def setViewBackground(self, enable): if self.backgroundItem: self.backgroundItem.setVisible(enable) def paintEvent(self, event: QPaintEvent): if self.renderer == SvgView.Image: if self.image.size() != self.viewport().size(): self.image = QImage(self.viewport().size(), QImage.Format_ARGB32_Premultiplied) imagePainter = QPainter(self.image) QGraphicsView.render(self, imagePainter) imagePainter.end() p = QPainter(self.viewport()) p.drawImage(0, 0, self.image) else: super(SvgView, self).paintEvent(event) def _setSize(self, width: float, height: float): self.__tf_scale = QTransform.fromScale(width / self.default_width, height / self.default_height) self.__tf() def _setAngle(self, angle: float): self.__tf_rotate = QTransform().rotate(angle) self.__tf() def __tf(self): self.setTransform(self.__tf_rotate * self.__tf_scale) def mouseReleaseEvent(self, event: QMouseEvent): self.clicked_event.emit(event) def mouseDoubleClickEvent(self, event: QMouseEvent): self.double_click_event.emit(event) def wheelEvent(self, event: QWheelEvent): self.wheel_event.emit(event)
class Barometer(QWidget): def __init__(self, parent): super().__init__(parent) self.uas = None svgRenderer = QSvgRenderer('res/barometer.svg') bkgnd = QGraphicsSvgItem() bkgnd.setSharedRenderer(svgRenderer) bkgnd.setCacheMode(QGraphicsItem.NoCache) bkgnd.setElementId('background') scene = QGraphicsScene() scene.addItem(bkgnd) scene.setSceneRect(bkgnd.boundingRect()) self.needle = QGraphicsSvgItem() self.needle.setSharedRenderer(svgRenderer) self.needle.setCacheMode(QGraphicsItem.NoCache) self.needle.setElementId('needle') self.needle.setParentItem(bkgnd) self.needle.setPos( bkgnd.boundingRect().width() / 2 - self.needle.boundingRect().width() / 2, bkgnd.boundingRect().height() / 2 - self.needle.boundingRect().height() / 2) self.needle.setTransformOriginPoint( self.needle.boundingRect().width() / 2, self.needle.boundingRect().height() / 2) # textElement = svgRenderer.boundsOnElement('needle-text') self.digitalBaro = QGraphicsTextItem() self.digitalBaro.setDefaultTextColor(QColor(255, 255, 255)) self.digitalBaro.document().setDefaultTextOption( QTextOption(Qt.AlignCenter)) self.digitalBaro.setFont(QFont('monospace', 13, 60)) self.digitalBaro.setParentItem(bkgnd) txm = QTransform() txm.translate( bkgnd.boundingRect().center().x(), bkgnd.boundingRect().height() - 1.5 * self.digitalBaro.document().size().height()) self.digitalBaro.setTransform(txm, False) view = QGraphicsView(scene) view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) layout = QVBoxLayout() layout.addWidget(view) self.setLayout(layout) self.setBarometer(1000) def setBarometer(self, hbar): deg = ((hbar - 950) * 3 + 210) % 360 self.needle.setRotation(deg) self.digitalBaro.setPlainText('{:.1f}'.format(hbar)) self.digitalBaro.adjustSize() self.digitalBaro.setX(0 - self.digitalBaro.textWidth() / 2) def updateAirPressure(self, sourceUAS, timestamp, absPressure, diffPressure, temperature): unused(sourceUAS, timestamp, diffPressure, temperature) self.setBarometer(absPressure) def setActiveUAS(self, uas): uas.updateAirPressureSignal.connect(self.updateAirPressure) self.uas = uas
class qfi_VSI (QGraphicsView): viewUpdate = pyqtSignal() def __init__(self,winParent): QGraphicsView.__init__(self) self.winParent=winParent self.viewUpdate.connect(self.update) self.m_climbRate = 0 self.m_scaleX = 0 self.m_scaleY = 0 self.m_originalHeight = 240 self.m_originalWidth = 240 self.m_originalVsiCtr = QPointF(120,120) self.m_faceZ = -20 self.m_handZ = -10 self.m_caseZ = 10 self.m_itemHand = None self.m_itemFace = None self.m_itemCase = None self.setStyleSheet("background: transparent; border: none"); self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setInteractive(False) self.setEnabled(False) self.m_scene = QGraphicsScene(self) self.setScene(self.m_scene) self.init() def init (self): self.m_scaleX = self.width() / self.m_originalWidth self.m_scaleY = self.height() / self.m_originalHeight self.m_itemHand = QGraphicsSvgItem(":/qfi/images/vsi/vsi_hand.svg") self.m_itemHand.setCacheMode (QGraphicsItem.NoCache) self.m_itemHand.setZValue( self.m_handZ ) self.m_itemHand.setTransform( QTransform.fromScale( self.m_scaleX, self.m_scaleY ), True ) self.m_itemHand.setTransformOriginPoint( self.m_originalVsiCtr ) self.m_scene.addItem (self.m_itemHand) self.m_itemFace = QGraphicsSvgItem(":/qfi/images/vsi/vsi_face.svg") self.m_itemFace.setCacheMode (QGraphicsItem.NoCache) self.m_itemFace.setZValue( self.m_faceZ ) self.m_itemFace.setTransform( QTransform.fromScale( self.m_scaleX, self.m_scaleY ), True ) self.m_itemFace.setTransformOriginPoint( self.m_originalVsiCtr ) self.m_scene.addItem (self.m_itemFace) self.m_itemCase = QGraphicsSvgItem(":/qfi/images/vsi/vsi_case.svg") self.m_itemCase.setCacheMode (QGraphicsItem.NoCache) self.m_itemCase.setZValue( self.m_caseZ ) self.m_itemCase.setTransform( QTransform.fromScale( self.m_scaleX, self.m_scaleY ), True ) self.m_itemCase.setTransformOriginPoint( self.m_originalVsiCtr ) self.m_scene.addItem (self.m_itemCase) self.centerOn (self.width()/2, self.height()/2) self.updateView() def reinit(self): if (self.m_scene): self.m_scene.clear() self.init() def update(self): self.updateView() def setClimbRate (self, climbRate): self.m_climbRate = climbRate if (self.m_climbRate < -2000): self.m_climbRate = -2000 if (self.m_climbRate > 2000): self.m_climbRate = 2000 def resizeEvent (self, event): QGraphicsView.resizeEvent (self,event) self.reinit() def reset (self): self.m_itemHand = None self.m_itemFace = None self.m_itemCase = None self.m_climbRate = 0.0 def updateView(self): self.m_itemHand.setRotation( self.m_climbRate * 0.086 ) self.m_scene.update()
class fDuration (QGraphicsView): viewUpdate = pyqtSignal() def __init__(self,winParent): QGraphicsView.__init__(self) self.winParent=winParent self.viewUpdate.connect(self.update) self.m_hour = 0 self.m_min = 0 self.m_sec = 0 self.m_scaleX = 0 self.m_scaleY = 0 self.m_originalHeight = 245 self.m_originalWidth = 245 self.m_originalFdCtr = QPointF(120,120) self.m_originalMarkCtr = QPointF(120, 120) self.m_faceZ = -20 self.m_handZ = -10 self.m_caseZ = 10 self.m_mark1Z = 20 self.m_mark2Z = 30 self.m_mark3Z = 40 self.m_itemHand = None self.m_itemFace = None self.m_itemCase = None self.m_itemMark1 = None self.m_itemMark2 = None self.m_itemMark3 = None self.setStyleSheet("background: transparent; border: none"); self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setInteractive(False) self.setEnabled(False) self.m_scene = QGraphicsScene(self) self.setScene(self.m_scene) self.init() def init (self): #os.chdir('/Users/zeyneptuna/Desktop/during_flight/widget/flight_duration') self.m_scaleX = self.width() / self.m_originalWidth self.m_scaleY = self.height() / self.m_originalHeight self.m_itemFace = QGraphicsSvgItem("widget/flight_duration/fd_face.svg") self.m_itemFace.setCacheMode(QGraphicsItem.NoCache) self.m_itemFace.setZValue(self.m_faceZ) self.m_itemFace.setTransform(QTransform.fromScale(self.m_scaleX, self.m_scaleY), True) self.m_itemFace.setTransformOriginPoint(self.m_originalFdCtr) self.m_scene.addItem(self.m_itemFace) self.m_itemCase = QGraphicsSvgItem("widget/flight_duration/fd_case.svg") self.m_itemCase.setCacheMode(QGraphicsItem.NoCache) self.m_itemCase.setZValue(self.m_caseZ) self.m_itemCase.setTransform(QTransform.fromScale(self.m_scaleX, self.m_scaleY), True) self.m_itemCase.setTransformOriginPoint(self.m_originalFdCtr) self.m_scene.addItem(self.m_itemCase) #self.m_itemMark1 = QGraphicsSvgItem("fd_mark_1.svg") #self.m_itemMark1.setCacheMode(QGraphicsItem.NoCache) #self.m_itemMark1.setZValue(self.m_mark1Z) #self.m_itemMark1.setTransformOriginPoint(self.m_originalMarkCtr) #self.m_itemMark1.setTransform(QTransform.fromScale(self.m_scaleX, self.m_scaleY), True) #self.m_scene.addItem(self.m_itemMark1) #self.m_itemMark2 = QGraphicsSvgItem("fd_mark_2.svg") #self.m_itemMark2.setCacheMode(QGraphicsItem.NoCache) #self.m_itemMark2.setZValue(self.m_mark2Z) #self.m_itemMark2.setTransformOriginPoint(self.m_originalMarkCtr) #self.m_itemMark2.setTransform(QTransform.fromScale(self.m_scaleX, self.m_scaleY), True) #self.m_scene.addItem(self.m_itemMark2) #self.m_itemMark3 = QGraphicsSvgItem("fd_mark_3.svg") #self.m_itemMark3.setCacheMode(QGraphicsItem.NoCache) #self.m_itemMark3.setZValue(self.m_mark3Z) #self.m_itemMark3.setTransformOriginPoint(self.m_originalMarkCtr) #self.m_itemMark3.setTransform(QTransform.fromScale(self.m_scaleX, self.m_scaleY), True) #self.m_scene.addItem(self.m_itemMark3) self.centerOn (self.width()/2, self.height()/2) self.updateView() def reinit(self): if (self.m_scene): self.m_scene.clear() self.init() def update(self): self.updateView() def setHour (self, hour): self.m_hour = hour def setMin (self, mins): self.m_min = mins def setSec (self, sec): self.m_sec = sec def resizeEvent (self, event): QGraphicsView.resizeEvent (self,event) self.reinit() def reset (self): self.m_itemFace = None self.m_itemCase = None self.m_itemMark1 = None self.m_itemMark2 = None self.m_itemMark3 = None self.m_hour = 0 self.m_min = 0 self.m_sec = 0 def updateView(self): #angle1 = 90*((self.m_hour - 9)/3) #angle2 = 90*((self.m_min)/15) #angle3 = 90*((self.m_sec - 54)/15) #self.m_itemMark1.setRotation( angle1 ) #self.m_itemMark2.setRotation( angle2 ) #self.m_itemMark3.setRotation( angle3 ) self.m_scene.update()
class qfi_HSI (QGraphicsView): viewUpdate = pyqtSignal() def __init__(self,winParent): QGraphicsView.__init__(self) self.winParent=winParent self.viewUpdate.connect(self.update) self.m_heading = 0 self.m_scaleX = 0 self.m_scaleY = 0 self.m_originalHeight = 240 self.m_originalWidth = 240 self.m_originalHsiCtr = QPointF(120,120) self.m_faceZ = -20 self.m_handZ = -10 self.m_caseZ = 10 self.m_itemHand = None self.m_itemFace = None self.m_itemCase = None self.setStyleSheet("background: transparent; border: none"); self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setInteractive(False) self.setEnabled(False) self.m_scene = QGraphicsScene(self) self.setScene(self.m_scene) self.init() def init (self): self.m_scaleX = self.width() / self.m_originalWidth self.m_scaleY = self.height() / self.m_originalHeight self.m_itemFace = QGraphicsSvgItem(":/qfi/images/hsi/hsi_face.svg") self.m_itemFace.setCacheMode (QGraphicsItem.NoCache) self.m_itemFace.setZValue( self.m_faceZ ) self.m_itemFace.setTransform( QTransform.fromScale( self.m_scaleX, self.m_scaleY ), True ) self.m_itemFace.setTransformOriginPoint( self.m_originalHsiCtr ) self.m_scene.addItem (self.m_itemFace) self.m_itemCase = QGraphicsSvgItem(":/qfi/images/hsi/hsi_case.svg") self.m_itemCase.setCacheMode (QGraphicsItem.NoCache) self.m_itemCase.setZValue( self.m_caseZ ) self.m_itemCase.setTransform( QTransform.fromScale( self.m_scaleX, self.m_scaleY ), True ) self.m_itemCase.setTransformOriginPoint( self.m_originalHsiCtr ) self.m_scene.addItem (self.m_itemCase) self.centerOn (self.width()/2, self.height()/2) self.updateView() def reinit(self): if (self.m_scene): self.m_scene.clear() self.init() def update(self): self.updateView() def setHeading (self, heading): self.m_heading = heading def resizeEvent (self, event): QGraphicsView.resizeEvent (self,event) self.reinit() def reset (self): self.m_itemFace = None self.m_itemCase = None self.m_heading = 0.0 def updateView(self): self.m_itemFace.setRotation( - self.m_heading ) self.m_scene.update()
class Altimeter (QGraphicsView): viewUpdate = pyqtSignal() def __init__(self,winParent): QGraphicsView.__init__(self) self.winParent=winParent self.viewUpdate.connect(self.updateView) self.m_altitude = 0 self.m_pressure = 28 self.m_originalHeight = 240 self.m_originalWidth = 240 self.m_originalAltCtr = QPointF(120,120) self.m_face1Z = -50 self.m_face2Z = -40 self.m_face3Z = -30 self.m_hand1Z = -20 self.m_hand2Z = -10 self.m_caseZ = 10 self.setStyleSheet("background: transparent; border: none") self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setInteractive(False) self.setEnabled(False) self.m_scene = QGraphicsScene(self) self.setScene(self.m_scene) self.init() def init (self): self.m_scaleX = self.width() / self.m_originalWidth self.m_scaleY = self.height() / self.m_originalHeight self.m_itemFace_1 = QGraphicsSvgItem(":/qfi/images/alt/alt_face_1.svg") self.m_itemFace_1.setCacheMode (QGraphicsItem.NoCache) self.m_itemFace_1.setZValue( self.m_face1Z ) self.m_itemFace_1.setTransform( QTransform.fromScale( self.m_scaleX, self.m_scaleY ), True ) self.m_itemFace_1.setTransformOriginPoint( self.m_originalAltCtr ) self.m_scene.addItem (self.m_itemFace_1) self.m_itemFace_2 = QGraphicsSvgItem(":/qfi/images/alt/alt_face_2.svg") self.m_itemFace_2.setCacheMode (QGraphicsItem.NoCache) self.m_itemFace_2.setZValue( self.m_face2Z ) self.m_itemFace_2.setTransform( QTransform.fromScale( self.m_scaleX, self.m_scaleY ), True ) self.m_itemFace_2.setTransformOriginPoint( self.m_originalAltCtr ) self.m_scene.addItem (self.m_itemFace_2) self.m_itemFace_3 = QGraphicsSvgItem(":/qfi/images/alt/alt_face_3.svg") self.m_itemFace_3.setCacheMode (QGraphicsItem.NoCache) self.m_itemFace_3.setZValue( self.m_face3Z ) self.m_itemFace_3.setTransform( QTransform.fromScale( self.m_scaleX, self.m_scaleY ), True ) self.m_itemFace_3.setTransformOriginPoint( self.m_originalAltCtr ) self.m_scene.addItem (self.m_itemFace_3) self.m_itemHand_1 = QGraphicsSvgItem(":/qfi/images/alt/alt_hand_1.svg") self.m_itemHand_1.setCacheMode (QGraphicsItem.NoCache) self.m_itemHand_1.setZValue( self.m_hand1Z ) self.m_itemHand_1.setTransform( QTransform.fromScale( self.m_scaleX, self.m_scaleY ), True ) self.m_itemHand_1.setTransformOriginPoint( self.m_originalAltCtr ) self.m_scene.addItem (self.m_itemHand_1) self.m_itemHand_2 = QGraphicsSvgItem(":/qfi/images/alt/alt_hand_2.svg") self.m_itemHand_2.setCacheMode (QGraphicsItem.NoCache) self.m_itemHand_2.setZValue( self.m_hand2Z ) self.m_itemHand_2.setTransform( QTransform.fromScale( self.m_scaleX, self.m_scaleY ), True ) self.m_itemHand_2.setTransformOriginPoint( self.m_originalAltCtr ) self.m_scene.addItem (self.m_itemHand_2) self.m_itemCase = QGraphicsSvgItem(":/qfi/images/alt/alt_case.svg") self.m_itemCase.setCacheMode (QGraphicsItem.NoCache) self.m_itemCase.setZValue( self.m_caseZ ) self.m_itemCase.setTransform( QTransform.fromScale( self.m_scaleX, self.m_scaleY ), True ) self.m_itemCase.setTransformOriginPoint( self.m_originalAltCtr ) self.m_scene.addItem (self.m_itemCase) self.centerOn (self.width()/2, self.height()/2) self.updateView() def reinit(self): if (self.m_scene): self.m_scene.clear() self.init() def update(self): self.updateView() def setAltitude (self, altitude): self.m_altitude = altitude def setPressure (self, pressure): self.m_pressure = pressure if (self.m_pressure < 28): self.m_pressure = 28 if (self.m_pressure > 31.5): self.m_pressure = 31.5 def resizeEvent (self, event): QGraphicsView.resizeEvent (self,event) self.reinit() def reset (self): self.m_itemFace_1 = None self.m_itemFace_2 = None self.m_itemFace_3 = None self.m_itemHand_1 = None self.m_itemHand_2 = None self.m_itemCase = None self.m_altitude = 0.0 self.m_pressure = 28.0 def updateView(self): altitude = math.ceil(self.m_altitude + 0.5) angleH1 = self.m_altitude * 0.036 angleH2 = ( altitude % 1000 ) * 0.36 angleF1 = (self.m_pressure - 28.0 ) * 100.0 angleF3 = self.m_altitude * 0.0036 self.m_itemHand_1.setRotation(angleH1) self.m_itemHand_2.setRotation(angleH2) self.m_itemFace_1.setRotation(- angleF1) self.m_itemFace_3.setRotation(angleF3) self.m_scene.update()
class qfi_TC(QGraphicsView): viewUpdate = pyqtSignal() def __init__(self, winParent): QGraphicsView.__init__(self) self.winParent = winParent self.viewUpdate.connect(self.updateView) self.m_itemBack = None self.m_itemBall = None self.m_itemFace_1 = None self.m_itemFace_2 = None self.m_itemMark = None self.m_itemCase = None self.m_turnRate = 0 self.m_slipSkid = 0 self.m_scaleX = 0 self.m_scaleY = 0 self.m_originalHeight = 240 self.m_originalWidth = 240 self.m_originalMarkCtr = QPointF(120, 120) self.m_originalBallCtr = QPointF(120, -36) self.m_backZ = -70 self.m_ballZ = -60 self.m_face1Z = -50 self.m_face2Z = -40 self.m_markZ = -30 self.m_caseZ = 10 self.setStyleSheet("background: transparent; border: none") self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setInteractive(False) self.setEnabled(False) self.reset() self.m_scene = QGraphicsScene(self) self.setScene(self.m_scene) self.m_scene.clear() self.init() def init(self): self.m_scaleX = self.width() / self.m_originalWidth self.m_scaleY = self.height() / self.m_originalHeight self.reset() self.m_itemBack = QGraphicsSvgItem(":/qfi/images/tc/tc_back.svg") self.m_itemBack.setCacheMode(QGraphicsItem.NoCache) self.m_itemBack.setZValue(self.m_backZ) self.m_itemBack.setTransform( QTransform.fromScale(self.m_scaleX, self.m_scaleY), True) self.m_scene.addItem(self.m_itemBack) self.m_itemBall = QGraphicsSvgItem(":/qfi/images/tc/tc_ball.svg") self.m_itemBall.setCacheMode(QGraphicsItem.NoCache) self.m_itemBall.setZValue(self.m_ballZ) self.m_itemBall.setTransform( QTransform.fromScale(self.m_scaleX, self.m_scaleY), True) self.m_itemBall.setTransformOriginPoint(self.m_originalBallCtr) self.m_scene.addItem(self.m_itemBall) self.m_itemFace_1 = QGraphicsSvgItem(":/qfi/images/tc/tc_face_1.svg") self.m_itemFace_1.setCacheMode(QGraphicsItem.NoCache) self.m_itemFace_1.setZValue(self.m_face1Z) self.m_itemFace_1.setTransform( QTransform.fromScale(self.m_scaleX, self.m_scaleY), True) self.m_scene.addItem(self.m_itemFace_1) self.m_itemFace_2 = QGraphicsSvgItem(":/qfi/images/tc/tc_face_2.svg") self.m_itemFace_2.setCacheMode(QGraphicsItem.NoCache) self.m_itemFace_2.setZValue(self.m_face2Z) self.m_itemFace_2.setTransform( QTransform.fromScale(self.m_scaleX, self.m_scaleY), True) self.m_scene.addItem(self.m_itemFace_2) self.m_itemMark = QGraphicsSvgItem(":/qfi/images/tc/tc_mark.svg") self.m_itemMark.setCacheMode(QGraphicsItem.NoCache) self.m_itemMark.setZValue(self.m_markZ) self.m_itemMark.setTransform( QTransform.fromScale(self.m_scaleX, self.m_scaleY), True) self.m_itemMark.setTransformOriginPoint(self.m_originalMarkCtr) self.m_scene.addItem(self.m_itemMark) self.m_itemCase = QGraphicsSvgItem(":/qfi/images/tc/tc_case.svg") self.m_itemCase.setCacheMode(QGraphicsItem.NoCache) self.m_itemCase.setZValue(self.m_caseZ) self.m_itemCase.setTransform( QTransform.fromScale(self.m_scaleX, self.m_scaleY), True) self.m_scene.addItem(self.m_itemCase) self.centerOn(self.width() / 2, self.height() / 2) self.updateView() def reinit(self): if (self.m_scene): self.m_scene.clear() self.init() def update(self): self.updateView() def setTurnRate(self, turnRate): self.m_turnRate = turnRate if (self.m_turnRate < -6): self.m_turnRate = -6 if (self.m_turnRate > 6): self.m_turnRate = 6 def setSlipSkid(self, slipSkid): self.m_slipSkid = slipSkid if (self.m_slipSkid < -15): self.m_slipSkid = -15 if (self.m_slipSkid > 15): self.m_slipSkid = 15 def resizeEvent(self, event): QGraphicsView.resizeEvent(self, event) self.reinit() def reset(self): self.m_itemCase = None self.m_turnRate = 0 self.m_slipSkid = 0 def updateView(self): self.m_scaleX = self.width() / self.m_originalWidth self.m_scaleY = self.height() / self.m_originalHeight self.m_itemBall.setRotation(-self.m_slipSkid) angle = (self.m_turnRate / 3) * 20 self.m_itemMark.setRotation(angle) self.m_scene.update()
class qfi_ADI (QGraphicsView): viewUpdate = pyqtSignal() def __init__(self,winParent): QGraphicsView.__init__(self) self.winParent=winParent self.viewUpdate.connect(self.update) self.m_roll = 0 self.m_pitch = 0 self.m_faceDeltaX_new = 0 self.m_faceDeltaX_old = 0 self.m_faceDeltaY_new = 0 self.m_faceDeltaY_old = 0 self.m_originalHeight = 240 self.m_originalWidth = 240 self.m_originalPixPerDeg = 1.7 self.m_originalAdiCtr = QPointF(120,120) self.m_backZ = -30 self.m_faceZ = -20 self.m_ringZ = -10 self.m_caseZ = 10 self.setStyleSheet("background: transparent; border: none"); self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setInteractive(False) self.setEnabled(False) self.m_scene = QGraphicsScene(self) self.setScene(self.m_scene) self.init() def init (self): self.m_scaleX = self.width() / self.m_originalWidth self.m_scaleY = self.height() / self.m_originalHeight self.m_itemBack = QGraphicsSvgItem(":/qfi/images/adi/adi_back.svg") self.m_itemBack.setCacheMode (QGraphicsItem.NoCache) self.m_itemBack.setZValue( self.m_backZ ) self.m_itemBack.setTransform( QTransform.fromScale( self.m_scaleX, self.m_scaleY ), True ) self.m_itemBack.setTransformOriginPoint( self.m_originalAdiCtr ) self.m_scene.addItem (self.m_itemBack) self.m_itemFace = QGraphicsSvgItem(":/qfi/images/adi/adi_face.svg") self.m_itemFace.setCacheMode (QGraphicsItem.NoCache) self.m_itemFace.setZValue( self.m_faceZ ) self.m_itemFace.setTransform( QTransform.fromScale( self.m_scaleX, self.m_scaleY ), True ) self.m_itemFace.setTransformOriginPoint( self.m_originalAdiCtr ) self.m_scene.addItem (self.m_itemFace) self.m_itemRing = QGraphicsSvgItem(":/qfi/images/adi/adi_ring.svg") self.m_itemRing.setCacheMode (QGraphicsItem.NoCache) self.m_itemRing.setZValue( self.m_ringZ ) self.m_itemRing.setTransform( QTransform.fromScale( self.m_scaleX, self.m_scaleY ), True ) self.m_itemRing.setTransformOriginPoint( self.m_originalAdiCtr ) self.m_scene.addItem (self.m_itemRing) self.m_itemCase = QGraphicsSvgItem(":/qfi/images/alt/alt_case.svg") self.m_itemCase.setCacheMode (QGraphicsItem.NoCache) self.m_itemCase.setZValue( self.m_caseZ ) self.m_itemCase.setTransform( QTransform.fromScale( self.m_scaleX, self.m_scaleY ), True ) self.m_itemCase.setTransformOriginPoint( self.m_originalAdiCtr ) self.m_scene.addItem (self.m_itemCase) self.centerOn (self.width()/2, self.height()/2) self.updateView() def reinit(self): if (self.m_scene): self.m_scene.clear() self.init() def update(self): self.updateView() self.m_faceDeltaX_old = self.m_faceDeltaX_new self.m_faceDeltaY_old = self.m_faceDeltaY_new def setRoll (self, roll): self.m_roll = roll if (self.m_roll < -180): self.m_roll = -180 if (self.m_roll > 180): self.m_roll = 180 def setPitch (self, pitch): self.m_pitch = pitch if (self.m_pitch < -25): self.m_pitch = -25 if (self.m_pitch > 25): self.m_pitch = 25 def resizeEvent (self, event): QGraphicsView.resizeEvent (self,event) self.reinit() def reset (self): self.m_itemBack = None self.m_itemFace = None self.m_itemRing = None self.m_itemCase = None self.m_roll = 0.0 self.m_pitch = 0.0 def updateView(self): self.m_scaleX = self.width() / self.m_originalWidth self.m_scaleY = self.height() / self.m_originalHeight self.m_itemBack.setRotation(- self.m_roll) self.m_itemRing.setRotation(- self.m_roll) self.m_itemFace.setRotation(- self.m_roll) roll_rad = math.pi * self.m_roll / 180.0 delta = self.m_originalPixPerDeg * self.m_pitch self.m_faceDeltaX_new = self.m_scaleX * delta * math.sin( roll_rad ) self.m_faceDeltaY_new = self.m_scaleY * delta * math.cos( roll_rad ) self.m_itemFace.moveBy( self.m_faceDeltaX_new - self.m_faceDeltaX_old, self.m_faceDeltaY_new - self.m_faceDeltaY_old ) self.m_scene.update()