towards document type
This commit is contained in:
@@ -182,9 +182,15 @@ class WndFixTarget(QWidget):
|
|||||||
bl.addWidget(param, 1, 1,1,1)
|
bl.addWidget(param, 1, 1,1,1)
|
||||||
|
|
||||||
self._btnAdd=btnAdd = QPushButton("add obj")
|
self._btnAdd=btnAdd = QPushButton("add obj")
|
||||||
btnAdd.clicked.connect(self.add_obj)
|
#btnAdd.clicked.connect(lambda x: _log.warning("TODO: IMPLEMENT") )
|
||||||
bl.addWidget(btnAdd, 1, 2,1,1)
|
bl.addWidget(btnAdd, 1, 2,1,1)
|
||||||
|
|
||||||
|
self._btnDelAll=btnDelAll = QPushButton("del all")
|
||||||
|
#btnDelAll.clicked.connect(lambda x: _log.warning("TODO: IMPLEMENT") )
|
||||||
|
bl.addWidget(btnDelAll, 2, 2,1,1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# but = QPushButton("Dump to console")
|
# but = QPushButton("Dump to console")
|
||||||
# but.clicked.connect(self.dump_data)
|
# but.clicked.connect(self.dump_data)
|
||||||
@@ -275,6 +281,15 @@ class WndFixTarget(QWidget):
|
|||||||
print(data)
|
print(data)
|
||||||
self._data=data
|
self._data=data
|
||||||
self._tree.setData(data)
|
self._tree.setData(data)
|
||||||
|
try:
|
||||||
|
wnd=app._mainWnd
|
||||||
|
except AttributeError:
|
||||||
|
_log.info('_mainWnd not handeled')
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
for go in data:
|
||||||
|
wnd.vb.addItem(go)
|
||||||
|
wnd._goTracked['objLst']=self._data
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
@@ -358,9 +373,6 @@ class WndFixTarget(QWidget):
|
|||||||
json.dump(self._data, f,cls=MyJsonEncoder)
|
json.dump(self._data, f,cls=MyJsonEncoder)
|
||||||
print(self._data)
|
print(self._data)
|
||||||
|
|
||||||
def add_obj(self):
|
|
||||||
_log.warning("TODO: IMPLEMENT")
|
|
||||||
|
|
||||||
def delete_selected(self):
|
def delete_selected(self):
|
||||||
row = self._current_row
|
row = self._current_row
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ from pyqtgraph.Qt import QtCore, QtGui
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
from PyQt5.QtGui import QPolygon,QPolygonF
|
from PyQt5.QtGui import QPolygon,QPolygonF
|
||||||
from PyQt5.QtCore import Qt,QPointF,QLineF
|
from PyQt5.QtCore import Qt,QPointF,QLineF
|
||||||
|
import yaml
|
||||||
|
|
||||||
def obj_tree(obj,p=''):
|
def obj_tree(obj,p=''):
|
||||||
obj_info(obj,p)
|
obj_info(obj,p)
|
||||||
@@ -159,6 +160,24 @@ class Fiducial(pg.ROI):
|
|||||||
p.setTransform(tr)
|
p.setTransform(tr)
|
||||||
|
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
s=f'{self.__class__.__name__}:(pos:{tuple(self.pos())}, size:{tuple(self.size())}, xyz:{self._xyz}}}'
|
||||||
|
return s
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def yaml_repr(dumper, data):
|
||||||
|
m={'pos':(data.pos()),'size':(data.size()),'xyz':(map(float,data._xyz))}
|
||||||
|
return dumper.represent_mapping(u'!Fiducial', m)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def yaml_cnstr(loader, node):
|
||||||
|
m=loader.construct_mapping(node)
|
||||||
|
return Fiducial(**m)
|
||||||
|
|
||||||
|
yaml.add_representer(Fiducial, Fiducial.yaml_repr)
|
||||||
|
yaml.add_constructor(u'!Fiducial', Fiducial.yaml_cnstr)
|
||||||
|
|
||||||
|
|
||||||
class Grid(pg.ROI):
|
class Grid(pg.ROI):
|
||||||
'''a grid'''
|
'''a grid'''
|
||||||
|
|
||||||
@@ -224,21 +243,24 @@ class Grid(pg.ROI):
|
|||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
s=f'{self.__class__.__name__}:(pos:{tuple(self.pos())}, size:{tuple(self.size())}, cnt:{self._cnt}, ficucialScale:{self._fidScl}}}'
|
s=f'{self.__class__.__name__}:(pos:{tuple(self.pos())}, size:{tuple(self.size())}, cnt:{self._cnt}, ficucialScale:{self._fidScl}}}'
|
||||||
return s
|
return s
|
||||||
import yaml
|
|
||||||
def yaml_repr_Grid(dumper, data):
|
@staticmethod
|
||||||
|
def yaml_repr(dumper, data):
|
||||||
#s=f'{{"pos":{tuple(data.pos())}, "size":{tuple(data.size())}, "cnt":{data._cnt}, "ficucialScale":{data._fidScl}}}'
|
#s=f'{{"pos":{tuple(data.pos())}, "size":{tuple(data.size())}, "cnt":{data._cnt}, "ficucialScale":{data._fidScl}}}'
|
||||||
#return dumper.represent_scalar(u'!Grid', s)
|
#return dumper.represent_scalar(u'!Grid', s)
|
||||||
m={'pos':tuple(data.pos()),'size':tuple(data.size()),'cnt':data._cnt, 'ficucialScale':data._fidScl}
|
m={'pos':list(data.pos()),'size':list(data.size()),'cnt':list(data._cnt), 'ficucialScale':data._fidScl}
|
||||||
return dumper.represent_mapping(u'!Grid', m)
|
return dumper.represent_mapping(u'!Grid', m)
|
||||||
yaml.add_representer(Grid, yaml_repr_Grid)
|
|
||||||
|
|
||||||
def yaml_cnstr_Grid(loader, node):
|
@staticmethod
|
||||||
|
def yaml_cnstr(loader, node):
|
||||||
# value = loader.construct_scalar(node)
|
# value = loader.construct_scalar(node)
|
||||||
# kwargs=eval(value)
|
# kwargs=eval(value)
|
||||||
# return Grid(**kwargs)
|
# return Grid(**kwargs)
|
||||||
m=loader.construct_mapping(node)
|
m=loader.construct_mapping(node)
|
||||||
return Grid(**m)
|
return Grid(**m)
|
||||||
yaml.add_constructor(u'!Grid', yaml_cnstr_Grid)
|
|
||||||
|
yaml.add_representer(Grid, Grid.yaml_repr)
|
||||||
|
yaml.add_constructor(u'!Grid', Grid.yaml_cnstr)
|
||||||
|
|
||||||
|
|
||||||
class Path(pg.ROI):
|
class Path(pg.ROI):
|
||||||
@@ -302,6 +324,24 @@ class Path(pg.ROI):
|
|||||||
lv=QLineF(x, y-5*ry, x, y+5*ry)
|
lv=QLineF(x, y-5*ry, x, y+5*ry)
|
||||||
p.drawLines(lh,lv)
|
p.drawLines(lh,lv)
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
s=f'{self.__class__.__name__}:(pos:{tuple(self.pos())}, size:{tuple(self.size())}, cnt:{self._cnt}, ficucialScale:{self._fidScl}}}'
|
||||||
|
return s
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def yaml_repr(dumper, data):
|
||||||
|
m={'pos':list(data.pos()),'size':list(data.size()),'cnt':data._cnt, 'ficucialScale':data._fidScl}
|
||||||
|
return dumper.represent_mapping(u'!Path', m)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def yaml_cnstr(loader, node):
|
||||||
|
m=loader.construct_mapping(node)
|
||||||
|
return Path(**m)
|
||||||
|
|
||||||
|
yaml.add_representer(Path, Path.yaml_repr)
|
||||||
|
yaml.add_constructor(u'!Path', Path.yaml_cnstr)
|
||||||
|
|
||||||
|
|
||||||
class FixTargetFrame(pg.ROI):
|
class FixTargetFrame(pg.ROI):
|
||||||
'''fixed target frame'''
|
'''fixed target frame'''
|
||||||
tpl={
|
tpl={
|
||||||
@@ -345,9 +385,12 @@ class FixTargetFrame(pg.ROI):
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__( self, pos=(0,0), size=(100,100), tpl='test', **kargs):
|
def __init__( self, pos=(0,0), size=(100,100), tpl='test', dscr=None, **kwargs):
|
||||||
pg.ROI.__init__(self, pos, size, **kargs)
|
pg.ROI.__init__(self, pos, size, **kwargs)
|
||||||
#fiducial type 0: 5 squares with pitch 120 um
|
#fiducial type 0: 5 squares with pitch 120 um
|
||||||
|
if dscr is not None:
|
||||||
|
self._dscr=dscr
|
||||||
|
else:
|
||||||
self._dscr=FixTargetFrame.tpl[tpl]
|
self._dscr=FixTargetFrame.tpl[tpl]
|
||||||
|
|
||||||
self.addScaleHandle([1, 1], [0, 0])
|
self.addScaleHandle([1, 1], [0, 0])
|
||||||
@@ -404,6 +447,25 @@ class FixTargetFrame(pg.ROI):
|
|||||||
else:
|
else:
|
||||||
assert('unknown feducial type')
|
assert('unknown feducial type')
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
s=f'{self.__class__.__name__}:(pos:{tuple(self.pos())}, size:{tuple(self.size())}, dscr:{self._dscr}}}'
|
||||||
|
return s
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def yaml_repr(dumper, data):
|
||||||
|
#m={'pos':list(data.pos()),'size':list(data.size()),'dscr':repr(data._dscr)}
|
||||||
|
m={'pos':list(data.pos()),'size':list(data.size())}
|
||||||
|
return dumper.represent_mapping(u'!FixTargetFrame', m)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def yaml_cnstr(loader, node):
|
||||||
|
m=loader.construct_mapping(node)
|
||||||
|
#m['dscr']=eval(m['dscr'])
|
||||||
|
return FixTargetFrame(**m)
|
||||||
|
|
||||||
|
yaml.add_representer(FixTargetFrame, FixTargetFrame.yaml_repr)
|
||||||
|
yaml.add_constructor(u'!FixTargetFrame', FixTargetFrame.yaml_cnstr)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class TxtROI(pg.ROI):
|
class TxtROI(pg.ROI):
|
||||||
@@ -539,12 +601,22 @@ if __name__=='__main__':
|
|||||||
# Custom ROI for selecting an image region
|
# Custom ROI for selecting an image region
|
||||||
#viRoi=pg.ROI([20, -50], [60, 40])
|
#viRoi=pg.ROI([20, -50], [60, 40])
|
||||||
viRoi=TxtROI([20, -50], [60, 40])
|
viRoi=TxtROI([20, -50], [60, 40])
|
||||||
|
#viRoi.addScaleHandle([1, 1], [0, 0])
|
||||||
|
#viRoi.addScaleHandle([.7, .5], [0, 0])
|
||||||
|
|
||||||
vb.addItem(viRoi)
|
vb.addItem(viRoi)
|
||||||
viUsrRoi=Marker([50, 120], [30, 20],mode=0)
|
viUsrRoi=Marker([50, 120], [30, 20],mode=0)
|
||||||
vb.addItem(viUsrRoi)
|
vb.addItem(viUsrRoi)
|
||||||
obj=Marker([250, 220], [30, 20],mode=1)
|
obj=Marker([250, 220], [30, 20],mode=1)
|
||||||
vb.addItem(obj)
|
vb.addItem(obj)
|
||||||
vi=Grid( (120,-100), (200,150), (30,20),2)
|
vi=Grid( (120,-100), (200,150), (30,20),2)
|
||||||
|
tr=QtGui.QTransform() # prepare ImageItem transformation:
|
||||||
|
tr.setMatrix(1, -.1, 0,
|
||||||
|
.2, 1, 0,
|
||||||
|
10, 10, 1)
|
||||||
|
vi.setTransform(tr) # assign transform
|
||||||
|
|
||||||
|
|
||||||
#vi=Grid( (50,10), (200,150), (6,4))
|
#vi=Grid( (50,10), (200,150), (6,4))
|
||||||
vb.addItem(vi) #vi= visual item
|
vb.addItem(vi) #vi= visual item
|
||||||
|
|
||||||
@@ -567,6 +639,16 @@ if __name__=='__main__':
|
|||||||
vi=Fiducial((0,200),(40,40),(1,2,3))
|
vi=Fiducial((0,200),(40,40),(1,2,3))
|
||||||
vb.addItem(vi)
|
vb.addItem(vi)
|
||||||
|
|
||||||
|
viRoi=pg.ROI([-200, -200], [100, 80],movable=True, rotatable=True, resizable=True)
|
||||||
|
|
||||||
|
viRoi.addFreeHandle(pos=[.7, .5], axes=None, item=None, name=None, index=None) # rechteck , frei beweglich ??? verschwinden anch bewegung
|
||||||
|
#viRoi.addRotateFreeHandle([.7, .5], [0, 0], axes=None, item=None, name=None, index=None) # kreis ??? verschwinden anch erstem gebrauch
|
||||||
|
#viRoi.addRotateHandle([.7, .5], [0, 0], item=None, name=None, index=None) # kreis, nur rot
|
||||||
|
#viRoi.addScaleHandle([.7, .5], [0, 0], axes=None, item=None, name=None, lockAspect=False, index=None) # raute scale x,y
|
||||||
|
#viRoi.addScaleRotateHandle([0, .5], [1, .5], item=None, name=None, index=None) # kreis
|
||||||
|
#viRoi.addTranslateHandle([.7, .5], axes=None, item=None, name=None, index=None) #quadrat
|
||||||
|
vb.addItem(viRoi)
|
||||||
|
|
||||||
|
|
||||||
childTree(vb)
|
childTree(vb)
|
||||||
|
|
||||||
|
|||||||
57
swissmx.py
57
swissmx.py
@@ -407,8 +407,8 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
self._goGrid=grid=pg.GridItem() # green grid and labels
|
self._goGrid=grid=pg.GridItem() # green grid and labels
|
||||||
grid.opts['pen']=QPen(QColor(0, 255, 0))
|
grid.opts['pen']=QPen(QColor(0, 255, 0))
|
||||||
grid.opts['textPen']=QPen(QColor(0, 255, 0))
|
grid.opts['textPen']=QPen(QColor(0, 255, 0))
|
||||||
tr.reset()
|
#tr.reset()
|
||||||
grid.setTransform(tr) # assign transform
|
#grid.setTransform(tr) # assign transform
|
||||||
vb.addItem(grid)
|
vb.addItem(grid)
|
||||||
|
|
||||||
#--- beam marker ---
|
#--- beam marker ---
|
||||||
@@ -424,13 +424,13 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
|
|
||||||
#--- testing scan grid ---
|
#--- 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), (200, 150), (30, 22), 2)
|
||||||
go=UsrGO.Grid((120, -100), (1000, 500), (10, 5), 2)
|
# go=UsrGO.Grid((120, -100), (1000, 500), (10, 5), 2)
|
||||||
go.setTransform(tr) # assign transform
|
# go.setTransform(tr) # assign transform
|
||||||
vb.addItem(go)
|
# vb.addItem(go)
|
||||||
self._goTracked['objLst'].append(go)
|
# self._goTracked['objLst'].append(go)
|
||||||
self.track_objects() #tracking now the objects
|
# self.track_objects() #tracking now the objects
|
||||||
#UsrGO.obj_tree(vb)
|
# #UsrGO.obj_tree(vb)
|
||||||
|
|
||||||
def init_actions(self):
|
def init_actions(self):
|
||||||
app = QApplication.instance()
|
app = QApplication.instance()
|
||||||
@@ -964,7 +964,11 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
px=p2+p1
|
px=p2+p1
|
||||||
mm=geo.pix2pos(px)
|
mm=geo.pix2pos(px)
|
||||||
_log.debug(f'{px} -> {mm}')
|
_log.debug(f'{px} -> {mm}')
|
||||||
fx_motor, fy_motor, bx_motor, bz_motor, omega_motor=self.get_gonio_tweakers()
|
|
||||||
|
fx_motor=self.tweakers["fast_x"]
|
||||||
|
fy_motor=self.tweakers["fast_y"]
|
||||||
|
#bz=self.tweakers["base_z"].get_rbv()
|
||||||
|
#fx_motor, fy_motor, bx_motor, bz_motor, omega_motor=self.get_gonio_tweakers()
|
||||||
#fx=fx_motor.get_position()
|
#fx=fx_motor.get_position()
|
||||||
#fy=fy_motor.get_position()
|
#fy=fy_motor.get_position()
|
||||||
#dx=(x-bx)/ppm
|
#dx=(x-bx)/ppm
|
||||||
@@ -1538,7 +1542,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
self._moduleFixTarget =mft = ModuleFixTarget.WndFixTarget(self,data)
|
self._moduleFixTarget =mft = ModuleFixTarget.WndFixTarget(self,data)
|
||||||
tab = self._tabs_daq_methods.insertTab(0,mft,'Fix Target')
|
tab = self._tabs_daq_methods.insertTab(0,mft,'Fix Target')
|
||||||
mft._btnAdd.clicked.connect(self.module_fix_target_add_obj)
|
mft._btnAdd.clicked.connect(self.module_fix_target_add_obj)
|
||||||
|
mft._btnDelAll.clicked.connect(self.module_fix_target_del_all_obj)
|
||||||
|
|
||||||
#tab.layout().addWidget(mft)
|
#tab.layout().addWidget(mft)
|
||||||
mft.prefixSelected.connect(lambda prefix: self._le_prefix.setText(prefix))
|
mft.prefixSelected.connect(lambda prefix: self._le_prefix.setText(prefix))
|
||||||
@@ -1613,37 +1617,48 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
mft=self._moduleFixTarget
|
mft=self._moduleFixTarget
|
||||||
fx=self.tweakers["fast_x"].get_rbv()
|
fx=self.tweakers["fast_x"].get_rbv()
|
||||||
fy=self.tweakers["fast_y"].get_rbv()
|
fy=self.tweakers["fast_y"].get_rbv()
|
||||||
#cz=self.tweakers["fast_y"].get_rbv()
|
bz=self.tweakers["base_z"].get_rbv()
|
||||||
app=QApplication.instance()
|
app=QApplication.instance()
|
||||||
geo=app._geometry
|
geo=app._geometry
|
||||||
oc=geo._opt_ctr
|
oc=geo._opt_ctr
|
||||||
|
bm_pos=self._goBeamMarker.pos()
|
||||||
|
bm_sz=self._goBeamMarker.size()
|
||||||
idx=mft._cbType.currentIndex()
|
idx=mft._cbType.currentIndex()
|
||||||
param=mft._txtParam.text()
|
param=mft._txtParam.text()
|
||||||
|
|
||||||
#cb.addItems(["Fiducial", "FixTarget(12.5x12.5)", "FixTarget(23.0x23.0)", "FixTarget(<param>)", "Grid(<param>)"])
|
#cb.addItems(["Fiducial", "FixTarget(12.5x12.5)", "FixTarget(23.0x23.0)", "FixTarget(<param>)", "Grid(<param>)"])
|
||||||
|
|
||||||
if idx==0:
|
if idx==0:
|
||||||
go=UsrGO.Fiducial((120, -100), (200, 150),(1,2,3))
|
go=UsrGO.Fiducial(bm_pos+bm_sz/2-(20, 20), (40, 40),(fx,fy,bz))
|
||||||
elif idx==1:
|
elif idx==1:
|
||||||
v=geo.pos2pix((12.5, 0))
|
v=geo.pos2pix((12.5, 0))
|
||||||
l=np.linalg.norm(v)
|
l=np.linalg.norm(v)
|
||||||
go=UsrGO.FixTargetFrame(-oc, (l, l), tpl='12.5x12.5')
|
go=UsrGO.FixTargetFrame(bm_pos+bm_sz/2-(l/2,l/2), (l, l), tpl='12.5x12.5')
|
||||||
elif idx==2:
|
elif idx==2:
|
||||||
v=geo.pos2pix((23, 0))
|
v=geo.pos2pix((23, 0))
|
||||||
l=np.linalg.norm(v)
|
l=np.linalg.norm(v)
|
||||||
go=UsrGO.FixTargetFrame(-oc, (l, l), tpl='23.0x23.0')
|
go=UsrGO.FixTargetFrame(bm_pos+bm_sz/2-(l/2,l/2), (l, l), tpl='23.0x23.0')
|
||||||
elif idx==3:
|
elif idx==3:
|
||||||
go=UsrGO.FixTargetFrame((120, -100), (200, 150), tpl='test')
|
go=UsrGO.FixTargetFrame(bm_pos+bm_sz/2-(200/2,150/2), (200, 150), tpl='test')
|
||||||
elif idx==4:
|
elif idx==4:
|
||||||
go=UsrGO.Grid((120, -100), (200, 150), (30, 22), 2)
|
go=UsrGO.Grid(bm_pos+bm_sz/2-(200/2,150/2), (200, 150), (30, 22), 2)
|
||||||
else:
|
else:
|
||||||
|
_log.error('index not handeled')
|
||||||
|
|
||||||
_log.error('set xstep 0..2 for tests')
|
|
||||||
self.vb.addItem(go)
|
self.vb.addItem(go)
|
||||||
obj=self._goTracked['objLst']
|
obj=self._goTracked['objLst']
|
||||||
obj.append(go)
|
obj.append(go)
|
||||||
mft._tree.setData(obj)
|
mft._tree.setData(obj)
|
||||||
|
|
||||||
|
def module_fix_target_del_all_obj(self):
|
||||||
|
mft=self._moduleFixTarget
|
||||||
|
vb=self.vb
|
||||||
|
objLst=self._goTracked['objLst']
|
||||||
|
for go in objLst:
|
||||||
|
vb.removeItem(go)
|
||||||
|
objLst.clear()
|
||||||
|
mft._tree.setData(objLst)
|
||||||
|
|
||||||
# **************** OBSOLETE AND/OR OLD STUFF ****************
|
# **************** OBSOLETE AND/OR OLD STUFF ****************
|
||||||
|
|
||||||
|
|
||||||
@@ -3407,9 +3422,9 @@ if __name__=="__main__":
|
|||||||
|
|
||||||
startupWin.set(60, f'start main window')
|
startupWin.set(60, f'start main window')
|
||||||
|
|
||||||
main = SwissMxWnd()
|
app._mainWnd=wnd=SwissMxWnd()
|
||||||
main.show()
|
wnd.show()
|
||||||
startupWin._wnd.finish(main)
|
startupWin._wnd.finish(wnd)
|
||||||
|
|
||||||
# needed so pycharm can restart application
|
# needed so pycharm can restart application
|
||||||
signal.signal(signal.SIGINT, sigint_handler)
|
signal.signal(signal.SIGINT, sigint_handler)
|
||||||
|
|||||||
Reference in New Issue
Block a user