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 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 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()