From a2dc5c73dc638a4d954a222657dc5a894926c703 Mon Sep 17 00:00:00 2001 From: Thierry Zamofing Date: Tue, 6 Sep 2022 17:35:48 +0200 Subject: [PATCH] coord trf looks good! --- swissmx.py | 92 +++++++++++++----------------------------------------- 1 file changed, 22 insertions(+), 70 deletions(-) diff --git a/swissmx.py b/swissmx.py index 7b38336..f1e874a 100755 --- a/swissmx.py +++ b/swissmx.py @@ -453,7 +453,6 @@ class WndSwissMx(QMainWindow, Ui_MainWindow): #--- beam marker --- size_eu=cfg.value(AppCfg.GEO_BEAM_SZ) pos_eu=cfg.value(AppCfg.GEO_BEAM_POS) - pos_eu*=0 self._goBeamMarker=obj=UsrGO.Marker(pos_eu-size_eu/2,size_eu,mode=0) obj.sigRegionChangeFinished.connect(self.cb_marker_moved) #bm.setTransform(tr) # assign transform @@ -825,13 +824,10 @@ class WndSwissMx(QMainWindow, Ui_MainWindow): A=np.asarray(geo._pix2pos.I) #trf=cfg.value(AppCfg.GEO_CAM_TRF) tr=self._goImgGrp.transform() - trf=np.array( ((tr.m11(),tr.m21(),tr.m31()),(tr.m12(),tr.m22(),tr.m32()),(tr.m13(),tr.m23(),tr.m33())) ) - tr=grp.transform() - p1=np.hstack((opt_ctr, 1)) # position of optical center on image item - p2=np.matmul(trf, p1) # position of optical center on viewbox + p=tr.map(opt_ctr[0],opt_ctr[1]) tr.setMatrix(A[0, 0], A[0, 1], 0, A[1, 0], A[1, 1], 0, - p2[0], p2[1], 1) # translate dx,dy + p[0], p[1], 1) # translate dx,dy grp.setTransform(tr) #bm=self._goBeamMarker @@ -1289,14 +1285,14 @@ class WndSwissMx(QMainWindow, Ui_MainWindow): app=QApplication.instance() geo=app._geometry zoom = app._zoom.get_val() - fast_x=self.tweakers["fast_x"];fast_y=self.tweakers["fast_y"] + twk_fx=self.tweakers["fast_x"];twk_fy=self.tweakers["fast_y"] # TODO: get_position() is delayed as it is the RBV. do same as for the zoom # TODO: and return the last set_point - fx=fast_x.get_val() - fy=fast_y.get_val() + fx=twk_fx.get_val() + fy=twk_fy.get_val() try: - tracked=self._goTracked - zoom_old,fx_old,fy_old=tracked._state + grp=self._goTracked + zoom_old,fx_old,fy_old=grp._state except AttributeError: # at initialization self._goTracked=grp=pg.ItemGroup() grp.setZValue(20) #higher than beam marker and opt ctr that have z=10 @@ -1304,67 +1300,23 @@ class WndSwissMx(QMainWindow, Ui_MainWindow): grp._state=(zoom,fx,fy) zoom_old=fx_old=fy_old=None _log.debug(f"zoom:{zoom_old}->{zoom} fx:{fx_old}->{fx} fy:{fy_old}->{fy}") - opt_ctr=geo._opt_ctr if zoom_old!=zoom: - #geo.interp_zoom(zoom_old) - #pix2pos_old=geo._pix2pos geo.interp_zoom(zoom) - pix2pos=geo._pix2pos - # pos2pix: np.asarray(geo._pix2pos.I*np.mat(p).T).ravel() - A=np.asarray(pix2pos.I) - grp=self._goTracked - tr=grp.transform() - #UsrGO.obj_info(tr) bm=self._goBeamMarker - bm_pos=bm.pos() - bm_sz=bm.size() - - pos=(-fx,-fy)-bm_pos - #fx_px,fy_px=geo.pos2pix((fx,fy)-bm_pos)-opt_ctr - - fx_px,fy_px=geo.pos2pix(pos)-opt_ctr - tr.setMatrix(A[0,0], A[0,1], 0, #. . 100 - A[1,0], A[1,1], 0, - fx_px, fy_px, 1) #100 . . pixel right + grp=self._goTracked + opt_ctr=geo._opt_ctr + A=np.asarray(geo._pix2pos.I) + # trf=cfg.value(AppCfg.GEO_CAM_TRF) + tr=self._goFixGrp.transform() + p1=bm.pos()+bm.size()/2+(-fx,-fy) + #p=tr.map(opt_ctr[0], opt_ctr[1]) + p=tr.map(p1[0], p1[1]) + tr.setMatrix(A[0, 0], A[0, 1], 0, + A[1, 0], A[1, 1], 0, + p[0], p[1], 1) # translate dx,dy grp.setTransform(tr) - #for o in tracked['objLst']: - # # names consists of abrevations - # # part 0: po=position sz=size dt=delta - # # part 1: px=pixel eu=engineering units (e.g. mm) - # po_px=o.pos() - # sz_px=o.size() - # tr=o.transform() - # geo._pix2pos=pix2pos_old - # dt_px=-opt_ctr-po_px - # dt_eu=geo.pix2pos(dt_px) - # sz_eu=geo.pix2pos(sz_px) - - # geo._pix2pos=pix2pos_new - # dt_px2=geo.pos2pix(dt_eu) - # sz_px2=geo.pos2pix(sz_eu) - # po_px2=-opt_ctr-dt_px2 - # o.setPos(po_px2) - # o.setSize(sz_px2) - - #np.asarray(self._pix2pos*np.mat(p).T).ravel() - #geo.interp_zoom(zoom) - - #if fx_old!=fx or fy_old!=fy: - # p1=geo.pos2pix((fx_old,fy_old)) - # p2=geo.pos2pix((fx,fy)) - # d=p1-p2 - - # for o in tracked['objLst']: - # pos=o.pos() - # sz=o.size() - # tr=o.transform() - # o.setPos(pos+d) - #tracked._state=(zoom, fx, fy) - #imgPos=self._goImg.mapFromScene(event.scenePos()) - #x=imgPos.x();y=imgPos.y() - def cb_modify_app_param(self): wnd=WndParameter(self) wnd.show() @@ -2020,7 +1972,7 @@ class WndSwissMx(QMainWindow, Ui_MainWindow): sp.setup_sync(verbose=verbose&32, timeOfs=0.05) try: p=geo._fitPlane - sp.setup_coord_trf(cz=f'{p[0]}X+{p[1]}Y+{p[2]}') # reset to shape path system + sp.setup_coord_trf(cz=f'{p[0]:+.18g}X{p[1]:+.18g}Y{p[2]:+.18g}') # reset to shape path system except AttributeError: _log.warning('no plane fitting done. z does not move') sp.setup_coord_trf() # reset to shape path system @@ -2037,9 +1989,9 @@ class WndSwissMx(QMainWindow, Ui_MainWindow): _log.info(f'progress {p}/{sp.points.shape[0]}') time.sleep(.1) sp.gather_upload(fnRec=fn+'.npz') - #dp=deltatau.shapepath.DebugPlot(sp) - #dp.plot_gather(mode=11) - #plt.show(block=False) + dp=deltatau.shapepath.DebugPlot(sp) + dp.plot_gather(mode=11) + plt.show(block=False) #plt.show(block=True) return