use groupItem for tracked object

This commit is contained in:
2022-09-01 07:59:21 +02:00
parent d29a961763
commit d96f3cc9db
3 changed files with 161 additions and 73 deletions

View File

@@ -421,15 +421,15 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
#--- beam marker ---
bm_sz=np.array((50, 40)) # it is immidiatly repositioned in cb_zoom_changed
self._goBeamMarker=bm=UsrGO.Marker(-opt_ctr-bm_sz/2,bm_sz,mode=0)
bm._size_eu=cfg.value(AppCfg.GEO_BEAM_SZ)
bm._pos_eu=cfg.value(AppCfg.GEO_BEAM_POS)
bm.sigRegionChangeFinished.connect(self.cb_marker_moved)
self._goBeamMarker=obj=UsrGO.Marker(-opt_ctr-bm_sz/2,bm_sz,mode=0)
obj._size_eu=cfg.value(AppCfg.GEO_BEAM_SZ)
obj._pos_eu=cfg.value(AppCfg.GEO_BEAM_POS)
obj.sigRegionChangeFinished.connect(self.cb_marker_moved)
#bm.setTransform(tr) # assign transform
vb.addItem(bm)
vb.addItem(obj)
#--- testing scan grid ---
self.track_objects() # first call is needed to initialize the structure self._goTracked
#self.track_objects() # first call is needed to initialize the structure self._goTracked
# #go=UsrGO.Grid((120, -100), (200, 150), (30, 22), 2)
# go=UsrGO.Grid((120, -100), (1000, 500), (10, 5), 2)
# go.setTransform(tr) # assign transform
@@ -508,6 +508,11 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
action.triggered.connect(self._OLD_escape_goToTellMountPosition)
self.toolBar.addAction(action)
action = QAction(icon, "Test\nCode", self)
action.triggered.connect(self.cb_testcode)
self.toolBar.addAction(action)
self.toolBar.addWidget(qutilities.horiz_spacer())
icon = qtawesome.icon("material.sync")
@@ -1165,50 +1170,72 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
fy=fast_y.get_val()
try:
tracked=self._goTracked
zoom_old,fx_old,fy_old=tracked['state']
zoom_old,fx_old,fy_old=tracked._state
except AttributeError: # at initialization
self._goTracked={'objLst':list(), 'state':(zoom,fx,fy)}
return
self._goTracked=grp=pg.ItemGroup()
grp.setZValue(20) #higher than beam marker and opt ctr that have z=10
self.vb.addItem(grp)
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_old)
#pix2pos_old=geo._pix2pos
geo.interp_zoom(zoom)
pix2pos_new=geo._pix2pos
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)
pix2pos=geo._pix2pos
# pos2pix: np.asarray(geo._pix2pos.I*np.mat(p).T).ravel()
A=np.asarray(pix2pos.I)
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)
grp=self._goTracked
tr=grp.transform()
#UsrGO.obj_info(tr)
bm=self._goBeamMarker
bm_pos=bm._pos_eu
bm_sz=bm._size_eu
#np.asarray(self._pix2pos*np.mat(p).T).ravel()
geo.interp_zoom(zoom)
pos=(-fx,-fy)-bm_pos
#fx_px,fy_px=geo.pos2pix((fx,fy)-bm_pos)-opt_ctr
if fx_old!=fx or fy_old!=fy:
p1=geo.pos2pix((fx_old,fy_old))
p2=geo.pos2pix((fx,fy))
d=p1-p2
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.setTransform(tr)
for o in tracked['objLst']:
pos=o.pos()
sz=o.size()
tr=o.transform()
o.setPos(pos+d)
tracked['state']=(zoom, fx, fy)
#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()
@@ -1262,7 +1289,9 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
fx=fast_x.get_val()
fy=fast_y.get_val()
opt_ctr=geo._opt_ctr
for go in self._goTracked['objLst']:
grp=self._goTracked
cldLst=grp.childItems()
for go in cldLst:
if type(go)!=UsrGO.FixTargetFrame:
_log.warning(f'for now: ONLY FixTargetFrame are supported ->skipped:{go}')
continue
@@ -1312,7 +1341,9 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
fx=fast_x.get_val()
fy=fast_y.get_val()
opt_ctr=geo._opt_ctr
for go in self._goTracked['objLst']:
grp=self._goTracked
cldLst=grp.childItems()
for go in cldLst:
points=go.get_points() #points in coordinate system of ROI
# names consists of abrevations
# part 0: po=position sz=size dt=delta
@@ -1594,9 +1625,13 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
def build_tab_module_fix_target(self):
#tab = self._tab_daq_method_prelocated
data=self._goTracked['objLst']
try:
objLst=self._goTracked.childItems()
except AttributeError:
_log.debug('NOT YET INITIALIZED')
objLst=None
self._moduleFixTarget =mft = ModuleFixTarget.WndFixTarget(self,data)
self._moduleFixTarget =mft = ModuleFixTarget.WndFixTarget(self,objLst)
tab = self._tabs_daq_methods.insertTab(0,mft,'Fix Target')
mft.setAccessibleName(TASK_FIX_TARGET)
self._tabs_daq_methods.setCurrentWidget(mft) #set this as the active tabs
@@ -1690,49 +1725,59 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
#cb.addItems(["Fiducial", "FixTarget(12.5x12.5)", "FixTarget(23.0x23.0)", "FixTarget(<param>)", "Grid(<param>)"])
bm_pos_eu=self._goBeamMarker._pos_eu
bm_size_eu=self._goBeamMarker._size_eu
if idx==0:
go=UsrGO.Fiducial(bm_pos+bm_sz/2-(20, 20), (40, 40),(fx,fy,bz))
#go=UsrGO.Fiducial(bm_pos+bm_sz/2-(20, 20), (40, 40),(fx,fy,bz))
l=.120
go=UsrGO.Fiducial((fx-l/2,fy-l/2), (l, l),(fx,fy,bz))
elif idx==1:
v=geo.pos2pix((12.5, 0))
l=np.linalg.norm(v)
go=UsrGO.FixTargetFrame(bm_pos+bm_sz/2-(l/2,l/2), (l, l), tpl='12.5x12.5')
l=12.5
#ctr=bm_pos+bm_sz/2
go=UsrGO.FixTargetFrame((fx-l/2,fy-l/2), (l, l), tpl='12.5x12.5')
elif idx==2:
v=geo.pos2pix((23, 0))
l=np.linalg.norm(v)
go=UsrGO.FixTargetFrame(bm_pos+bm_sz/2-(l/2,l/2), (l, l), tpl='23.0x23.0')
l=23
go=UsrGO.FixTargetFrame((fx-l/2,fx-l/2), (l, l), tpl='23.0x23.0')
elif idx==3:
go=UsrGO.FixTargetFrame(bm_pos+bm_sz/2-(200/2,150/2), (200, 150), tpl='test')
w,h=(.120*12, .120*8)
go=UsrGO.FixTargetFrame((fx-w/2,fx-h/2), (w, h), tpl='test')
elif idx==4:
go=UsrGO.Grid(bm_pos+bm_sz/2-(200/2,150/2), (200, 150), (30, 22), 2)
w,h=(30, 22)
go=UsrGO.Grid((fx-w/2,fx-h/2), (w, h), (30, 22), .1)
else:
_log.error('index not handeled')
self.vb.addItem(go)
obj=self._goTracked['objLst']
obj.append(go)
mft._tree.setData(obj)
grp=self._goTracked
grp.addItem(go)
mft._tree.setData(grp.childItems())
def module_fix_target_del_all_obj(self):
mft=self._moduleFixTarget
vb=self.vb
objLst=self._goTracked['objLst']
for go in objLst:
grp=self._goTracked
for go in grp.childItems():
vb.removeItem(go)
objLst.clear()
mft._tree.setData(objLst)
#grp.clear()
mft._tree.setData(None)
def module_fix_target_fit_fiducial(self):
mft=self._moduleFixTarget
vb=self.vb
objLst=self._goTracked['objLst']
grp=self._goTracked
cldLst=grp.childItems()
n=0
for go in objLst:
for go in cldLst:
if type(go)==UsrGO.Fiducial:
n+=1
ptFitTrf=np.ndarray((4,2)) # 4 (x,y) points to fit a transformation of a parallelogram
ptFitPlane=np.ndarray((n,3)) #n (x,y,z) points to fit a plane transformation z=ax+by+c
i=j=0
for go in reversed(objLst):
for go in reversed(cldLst):
if type(go)==UsrGO.FixTargetFrame:
if j==4:
#fid=np.array(((0.1, 0.1), (0.1, 1.1), (1.1, 0.1), (1.1, 1.1)))
@@ -1811,6 +1856,36 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
#plt.show(block=True)
return
def cb_testcode(self):
try:
tc=self._testCode
tc['idx']+=1
except AttributeError:
self._testCode=tc={'idx':0}
step=tc['idx']
vb=self.vb
if step==0:
grp=pg.ItemGroup()
vb.addItem(grp)
obj=UsrGO.Marker((100,100), (100,100),mode=1)
grp.addItem(obj)
obj=UsrGO.Marker((150, 100), (50, 50), mode=1)
grp.addItem(obj)
obj=UsrGO.Marker((200, 100), (100, 100), mode=1)
grp.addItem(obj)
tc['grp']=grp
elif step==1:
grp=tc['grp']
tr=grp.transform()
#UsrGO.obj_info(tr)
tr.setMatrix(1, .2, 0,
-.2, 1, 0,
0, 0, 1)
grp.setTransform(tr)
print(vb.childGroup.childItems())
pass
# **************** OBSOLETE AND/OR OLD STUFF ****************