optimize view iteractions

This commit is contained in:
2022-09-07 12:42:46 +02:00
parent a2dc5c73dc
commit 18a7b2abb4
2 changed files with 70 additions and 29 deletions

View File

@@ -515,34 +515,58 @@ class FixTargetFrame(pg.ROI):
param['trf']=trf
return param
class TxtROI(pg.ROI):
def __init__(self, pos, size, **kargs):
pg.ROI.__init__(self, pos, size, **kargs)
def paint(self, p, *args):
#pg.ROI.paint(self, p, *args)
r=QtCore.QRectF(0, 0, self.state['size'][0], self.state['size'][1]).normalized()
p.setRenderHint(QtGui.QPainter.Antialiasing)
p.setPen(self.currentPen)
#p.translate(r.left(), r.top())
#p.scale(r.width(), r.height())
#p.drawRect(0, 0, 1, 1)
p.drawRect(r)
tr=p.worldTransform()
obj_info(tr)
tr.setMatrix(tr.m11(),tr.m12(),tr.m13(),tr.m21(),-tr.m22(),tr.m23(),tr.m31(),tr.m32(),tr.m33())
p.setWorldTransform(tr)
obj_info(tr)
obj_info(p.transform())
obj_info(p.worldTransform())
f=p.font();
f.setPixelSize(15)
p.setFont(f)
p.drawText(0, 5, 'Thierry')
## Start Qt event loop unless running in interactive mode or using pyside.
if __name__=='__main__':
# TODO: pg.ItemGroup does not support bounding box and therefore vb.autoRange() does not work
class ItemGroup(pg.ItemGroup):
# own item group that supports bounding rect
def __init__(self, *args, **kargs):
pg.ItemGroup.__init__(self, *args, **kargs)
def boundingRect(self):
# tr=self.transform()
boRects=[]
for item in self.childItems():
boRects.append(item.boundingRect())
if boRects:
# r=QtCore.QRectF(tr.map(boRects[0].bottomRight()),tr.map(boRects[0].topLeft()))
return boRects[0]
else:
return pg.ItemGroup.boundingRect(self)
def addItem(self, *args, **kargs):
self.setFlag(self.ItemHasNoContents, False)
pg.ItemGroup.addItem(self, *args, **kargs)
class TxtROI(pg.ROI):
def __init__(self, pos, size, **kargs):
pg.ROI.__init__(self, pos, size, **kargs)
def paint(self, p, *args):
# pg.ROI.paint(self, p, *args)
r=QtCore.QRectF(0, 0, self.state['size'][0], self.state['size'][1]).normalized()
p.setRenderHint(QtGui.QPainter.Antialiasing)
p.setPen(self.currentPen)
# p.translate(r.left(), r.top())
# p.scale(r.width(), r.height())
# p.drawRect(0, 0, 1, 1)
p.drawRect(r)
tr=p.worldTransform()
obj_info(tr)
tr.setMatrix(tr.m11(), tr.m12(), tr.m13(), tr.m21(), -tr.m22(), tr.m23(), tr.m31(), tr.m32(), tr.m33())
p.setWorldTransform(tr)
obj_info(tr)
obj_info(p.transform())
obj_info(p.worldTransform())
f=p.font();
f.setPixelSize(15)
p.setFont(f)
p.drawText(0, 5, 'Thierry')
import sys
import argparse
#(h, t)=os.path.split(sys.argv[0]);cmd='\n '+(t if len(h)>20 else sys.argv[0])+' '
@@ -638,6 +662,7 @@ if __name__=='__main__':
w.setWindowTitle('pyqtgraph example: ROI Examples')
vb=w.addViewBox(row=1, col=0, lockAspect=True,invertY=False)
vb.enableAutoRange(enable=False)
try:
g=pg.GridItem(pen=(0, 255, 0), textPen=(0, 255, 0)) # green grid and labels
except:

View File

@@ -85,7 +85,7 @@ ts.log('Import part 3/8:')
import qtawesome
import qutilities
from PyQt5 import QtCore, QtGui
from PyQt5.QtCore import Qt, pyqtSlot, QSize, QRegExp, pyqtSignal, QObject, QThread
from PyQt5.QtCore import Qt, pyqtSlot, QSize, QRegExp, pyqtSignal, QObject, QThread, QRectF
from PyQt5.QtGui import QKeySequence, QPixmap, QRegExpValidator, QFont
from PyQt5.QtWidgets import (
QAction, QApplication, QDoubleSpinBox, QFileDialog, QFormLayout, QGridLayout, QGroupBox, QHBoxLayout, QLabel, QLineEdit,
@@ -388,8 +388,12 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
self.glw.scene().sigMouseClicked.connect(self.cb_mouse_click)
#--- viewbox ---
#self.vb=vb=self.glw.addViewBox(invertY=False,border='r',enableMenu=False)
self.vb=vb=self.glw.addViewBox(invertY=False,border='r',enableMenu=False)
self.vb=vb=self.glw.addViewBox(invertY=False,border='r',enableMenu=True)
#TODO: vb.enableAutoRange(enable=True), vb.autoRange() does not work for ItemGroups
#therefore set the vieweRange manually
pad=10
vb.setRange(QRectF(-1200-pad,-1000-pad,1200+2*pad,1000+2*pad))
vb.setAspectLocked(True)
vb.setBackgroundColor((120, 90, 90))
@@ -728,6 +732,7 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
app=QApplication.instance()
cam=app._camera
self._goImg.setImage(cam._pic)
#vb.setRange(QRectF(-1300,-1100,1400,1200))
def cb_new_frame_sim(self, **kwargs):
app=QApplication.instance()
@@ -1122,6 +1127,14 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
fy_motor.move_rel(pFix[1])
#fx_motor.move_abs(fx_motor.get_val()+pFix[0])
#fy_motor.move_abs(fy_motor.get_val()+pFix[1])
#if none of the image is visible, recenter it
r1=self.vb.viewRect()
#r2=self.vb.itemBoundingRect(self._goImg)
r2=self.vb.itemBoundingRect(self._goBeamMarker)
if not r1.intersects(r2):
self.vb.autoRange(items=(self._goImg,))
try:
pln=geo._fitPlane
except AttributeError: pass
@@ -1540,6 +1553,8 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
self._testCode=tc={'idx':0}
step=tc['idx']
vb=self.vb
vb.autoRange(items=(self._goImg,))
return
if step==0:
grp=pg.ItemGroup()
@@ -1551,6 +1566,7 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
obj=UsrGO.Marker((200, 100), (100, 100), mode=1)
grp.addItem(obj)
tc['grp']=grp
vb.autoRange(items=(obj,))
elif step==1:
grp=tc['grp']
tr=grp.transform()
@@ -1901,7 +1917,7 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
grp=self._goTracked
for go in grp.childItems():
vb.removeItem(go)
#grp.clear()
grp.setFlag(grp.ItemHasNoContents)
mft._tree.setData(None)
def module_fix_target_fit_fiducial(self):