forked from pgriffin17/cameraControl
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patheeroi.py
More file actions
85 lines (72 loc) · 2.93 KB
/
eeroi.py
File metadata and controls
85 lines (72 loc) · 2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtWidgets, QtGui
import numpy as np
class EE_ROI(pg.CircleROI):
def __init__(self, pos, size=None, radius=100, scaleSnap=True, translateSnap=True):
super().__init__(pos, size, radius=radius, scaleSnap=scaleSnap, translateSnap=translateSnap)
self.snapSize = 1
self.removeHandle(0)
self.addScaleHandle((0, 0), (0.5, 0.5), lockAspect=True)
self.addScaleHandle((1, 0), (0.5, 0.5), lockAspect=True)
self.addScaleHandle((0, 1), (0.5, 0.5), lockAspect=True)
self.addScaleHandle((1, 1), (0.5, 0.5), lockAspect=True)
self.half_roi = Half_ROI(pos, size, radius, ee_roi=self)
self.sigRegionChanged.connect(self.half_roi.center_rel_ee)
self.center_roi = Center_Spot((0,0))
self.setVisible(True)
self.half_roi.setVisible(True)
self.center_roi.setVisible(True)
def set_center_pos(self, pos:tuple):
x,y = pos[0],pos[1]
radius = self.size().x()/2
centered_pos = (x-radius, y-radius)
self.setPos(centered_pos)
def get_center_pos(self) -> tuple:
radius = self.size().x()/2
(x, y) = self.pos()
centered_pos = (x - radius, y-radius)
return centered_pos
class Half_ROI(pg.CircleROI):
resized = QtCore.Signal(float)
is_locked_to_ee : bool = True
def __init__(self, pos, size=None, radius=None, movable=False, ee_roi: EE_ROI = None):
super().__init__(pos, size, radius=radius, movable=movable)
self.removeHandle(0)
self.ee_roi = ee_roi
self.setPen(pg.mkPen('y'))
def radius(self) -> float:
return self.size().x()/2
def center_rel_ee(self) -> None:
if(self.is_locked_to_ee):
ee_pos_x = self.ee_roi.pos()[0]
ee_pos_y = self.ee_roi.pos()[1]
ee_rad = self.ee_roi.size().x()/2
self.setPos((ee_pos_x + ee_rad - self.radius(), ee_pos_y+ee_rad-self.radius()))
def set_center_pos(self, pos:tuple):
x,y = pos[0],pos[1]
radius = self.size().x()/2
centered_pos = (x-radius, y-radius)
self.setPos(centered_pos)
def resize(self, radius: float):
self.setSize(radius * 2, center=(0.5,0.5))
self.resized.emit(radius)
class Center_Spot(pg.CircleROI):
def __init__(self, pos, radius=2, movable = False):
super().__init__(pos, radius, movable)
self.setPen(pg.mkPen('r', width=2))
self.removeHandle(0)
self.setVisible(False)
def set_center_pos(self, pos:tuple):
x,y = pos[0],pos[1]
radius = self.size().x()/2
centered_pos = (x-radius, y-radius)
self.setPos(centered_pos)
if __name__ == "__main__":
app = pg.mkQApp()
widget = pg.GraphicsLayoutWidget()
viewbox = pg.ViewBox()
viewbox.addItem(Center_Spot((0,0)))
viewbox.setAspectLocked(True)
widget.addItem(viewbox)
widget.show()
app.exec()