From d75188928466a755776e047d3028c9fbe94ca1a5 Mon Sep 17 00:00:00 2001 From: Thierry Zamofing Date: Thu, 10 Nov 2022 09:55:30 +0100 Subject: [PATCH] wip --- graphExample.py | 53 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/graphExample.py b/graphExample.py index 66d5423..880e6cd 100755 --- a/graphExample.py +++ b/graphExample.py @@ -142,7 +142,28 @@ class RIXSgrating(QWidget): 'cc':58, #detector angle 'szG':(200,5), #size VLS grating 'szD':(150,5), #size detector + 'difrBeamPaint':4, # mode to plot the difracted beam } + self._lutDifrBeamPaint=(# (number of difr beam,draw mode,alpha,width) + ( 4, 2, 190, 0), + ( 4, 1, 200, 0), + (32, 1, 120, 0), + ( 8, 1, 196, 0), + (32, 0, 120, 3), + (32, 2, 255, 0), + ) + + + # n=4;mode=2;alpha=190 + # n=4;mode=1;alpha=200 + # n=32;mode=1;alpha=120 + # n=8;mode=1;alpha=196 + n=32; + mode=0; + alpha=120; + width=3 + # n=32;mode=2;alpha=255 + self.initUI() def initUI(self): @@ -232,7 +253,8 @@ class RIXSgrating(QWidget): l=QtGui.QVBoxLayout(w) sld={} - for key,rng,tk,pos in (('r1',(50,800),50,60),('r2',(50,800),50,80),('aa',(0,90),5,20),('bb',(0,90),5,20),('cc',(0,180),5,40),): + for key,rng,tk in (('r1',(50,800),50),('r2',(50,800),50),('aa',(0,90),5),('bb',(0,90),5),('cc',(0,180),5), + ('difrBeamPaint',(0,len(self._lutDifrBeamPaint)-1),1),): sl=QtGui.QSlider(QtCore.Qt.Horizontal,objectName=key) sl.setFixedWidth(200);sl.setMinimum(rng[0]);sl.setMaximum(rng[1]) sl.setValue(self._param[key]) @@ -388,19 +410,18 @@ class RIXSgrating(QWidget): qp.translate(ctr[0],ctr[1]) qp.setCompositionMode(QtGui.QPainter.CompositionMode_Lighten) - tf0=qp.transform() qp.setPen(QtGui.QPen(QtCore.Qt.white, 1, QtCore.Qt.SolidLine)) qp.setBrush(QColor(255, 80, 0, 128)) qp.drawEllipse(-r1-20, -10, 20, 20) # target - qp.drawLine(-r1,0,0,0) #beam + qp.drawLine(-r1,0,0,0) #central beam1 qp.rotate(-aa) tf1=qp.transform() qp.drawRect(int(-szG[0]/2), 0, szG[0], szG[1]) # grating qp.rotate(-bb) tf2=qp.transform() - qp.drawLine(0,0,int(r2+szD[0]/2),0) #beam + qp.drawLine(0,0,int(r2+szD[0]/2),0) #central beam2 qp.translate(r2,0) qp.rotate(-cc) tf3=qp.transform() @@ -416,12 +437,8 @@ class RIXSgrating(QWidget): qp.drawLine(p0,p1) # beam vlsg to detector - #n=4;mode=2;alpha=190 - #n=4;mode=1;alpha=200 - #n=32;mode=1;alpha=120 - #n=8;mode=1;alpha=196 - n=32;mode=0;alpha=120;width=3 - #n=32;mode=2;alpha=255 + #n=32;mode=0;alpha=120;width=3 + n,mode,alpha,width=self._lutDifrBeamPaint[p['difrBeamPaint']] scl=256/n p0=QtCore.QPointF(*tf1.map(-szG[0]/2, 0)) p1=QtCore.QPointF(*tf1.map(szG[0]/2, 0)) @@ -441,7 +458,7 @@ class RIXSgrating(QWidget): qp.setPen(QtGui.QPen(QtCore.Qt.black, 0, QtCore.Qt.SolidLine)) for i in range(n): p2=QtCore.QPointF(*tf3.map(szD[0]/2-szD[0]*i/(n-1), 0)) - col.setHsv(i*scl, 255, 255, alpha) + col.setHsv(int(i*scl), 255, 255, alpha) qp.setBrush(col) qp.drawPolygon(p0, p1, p2) if mode==2: @@ -450,10 +467,20 @@ class RIXSgrating(QWidget): for i in range(n): p2=QtCore.QPointF(*tf3.map(szD[0]/2-szD[0]*(i+1)/n, 0)) p3=QtCore.QPointF(*tf3.map(szD[0]/2-szD[0]*i/n, 0)) - col.setHsv(i*scl, 255, 255, alpha) + col.setHsv(int(i*scl), 255, 255, alpha) qp.setBrush(col) qp.drawPolygon(p0, p1, p2, p3) + qp.setCompositionMode(QtGui.QPainter.CompositionMode_SourceOver) + + #draw central beam (if needed) + if mode!=0: + qp.setTransform(tf0) + qp.setPen(QtGui.QPen(QtGui.QColor(0x757780), 2, QtCore.Qt.SolidLine)) + qp.drawLine(-r1,0,0,0) #central beam1 + qp.setTransform(tf2) + qp.drawLine(0,0,int(r2+szD[0]/2),0) #central beam2 + #draw dimensions try: d=self._vlsg_geo @@ -466,7 +493,7 @@ class RIXSgrating(QWidget): vbb=90-d['bb'] vcc=90-d['cc'] - qp.setCompositionMode(QtGui.QPainter.CompositionMode_SourceOver) + qp.setTransform(QtGui.QTransform()) pen=QtGui.QPen(QtCore.Qt.red, 1, QtCore.Qt.SolidLine) penTxt=QtGui.QPen(QtCore.Qt.yellow, 1, QtCore.Qt.SolidLine) qp.setPen(pen)