diff --git a/plugins/Imaging.form b/plugins/Imaging.form
index 014a24f..854a559 100644
--- a/plugins/Imaging.form
+++ b/plugins/Imaging.form
@@ -34,9 +34,9 @@
-
+
-
+
@@ -44,8 +44,8 @@
-
-
+
+
@@ -54,7 +54,7 @@
-
+
@@ -73,28 +73,27 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
@@ -108,16 +107,13 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -664,6 +660,17 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/plugins/Imaging.java b/plugins/Imaging.java
index 538bb26..f966365 100644
--- a/plugins/Imaging.java
+++ b/plugins/Imaging.java
@@ -172,6 +172,8 @@ public class Imaging extends Panel {
jLabel10 = new javax.swing.JLabel();
jLabel13 = new javax.swing.JLabel();
deviceValuePanel2 = new ch.psi.pshell.swing.DeviceValuePanel();
+ jLabel16 = new javax.swing.JLabel();
+ panelAzimuth = new ch.psi.pshell.swing.DeviceValuePanel();
checkMeasurements = new javax.swing.JCheckBox();
jLabel11 = new javax.swing.JLabel();
checkArrows = new javax.swing.JCheckBox();
@@ -543,29 +545,35 @@ public class Imaging extends Panel {
deviceValuePanel2.setDeviceName("fov");
+ jLabel16.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
+ jLabel16.setText("Az:");
+
+ panelAzimuth.setDeviceName("azimuth_rot");
+
javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
jPanel4.setLayout(jPanel4Layout);
jPanel4Layout.setHorizontalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel4Layout.createSequentialGroup()
.addContainerGap()
- .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(jPanel4Layout.createSequentialGroup()
- .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
- .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .addContainerGap(19, Short.MAX_VALUE))
+ .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+ .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(jPanel4Layout.createSequentialGroup()
.addGap(6, 6, 6)
.addComponent(jLabel10)
+ .addGap(0, 0, 0)
+ .addComponent(deviceValuePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(deviceValuePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 78, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(jLabel13, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(jLabel13, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addGap(0, 0, 0)
.addComponent(deviceValuePanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
- .addContainerGap())))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(jLabel16)
+ .addGap(0, 0, 0)
+ .addComponent(panelAzimuth, javax.swing.GroupLayout.PREFERRED_SIZE, 59, javax.swing.GroupLayout.PREFERRED_SIZE)))
+ .addContainerGap())
);
jPanel4Layout.setVerticalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@@ -577,14 +585,13 @@ public class Imaging extends Panel {
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
+ .addComponent(jLabel10)
+ .addComponent(jLabel13)
+ .addComponent(jLabel16)
.addComponent(deviceValuePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(deviceValuePanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addGroup(jPanel4Layout.createSequentialGroup()
- .addGap(9, 9, 9)
- .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(jLabel10)
- .addComponent(jLabel13))))
+ .addComponent(panelAzimuth, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
@@ -628,14 +635,14 @@ public class Imaging extends Panel {
.addComponent(checkArrows)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(buttonAbort))
- .addComponent(renderer, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .addContainerGap(17, Short.MAX_VALUE))
+ .addComponent(renderer, javax.swing.GroupLayout.DEFAULT_SIZE, 448, Short.MAX_VALUE))
+ .addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
- .addComponent(renderer, javax.swing.GroupLayout.PREFERRED_SIZE, 638, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(renderer, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
@@ -643,7 +650,7 @@ public class Imaging extends Panel {
.addComponent(jLabel11))
.addComponent(checkArrows)
.addComponent(buttonAbort))
- .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addGap(10, 10, 10))
);
}// //GEN-END:initComponents
@@ -830,6 +837,7 @@ public class Imaging extends Panel {
private javax.swing.JLabel jLabel13;
private javax.swing.JLabel jLabel14;
private javax.swing.JLabel jLabel15;
+ private javax.swing.JLabel jLabel16;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
@@ -842,6 +850,7 @@ public class Imaging extends Panel {
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JPanel jPanel5;
+ private ch.psi.pshell.swing.DeviceValuePanel panelAzimuth;
private ch.psi.pshell.swing.ProcessVariablePanel processVariablePanel1;
private ch.psi.pshell.swing.ProcessVariablePanel processVariablePanel2;
private javax.swing.JRadioButton radioAll;
diff --git a/script/devices/LEEM2000.py b/script/devices/LEEM2000.py
index 5315bf0..46e74c3 100644
--- a/script/devices/LEEM2000.py
+++ b/script/devices/LEEM2000.py
@@ -351,12 +351,26 @@ tilt_horizontal.polling=500
manip_x.polling=500
manip_y.polling=500
fov.polling=5000
-azimuth_rot.precision=2
+azimuth_rot.precision=1
azimuth_rot.polling=5000
bv.polling=1000
fil.polling=1000
-
+#Create a listener to the sensor, verifying the readback values.
+class ListenerAzimuth (DeviceListener):
+ def onCacheChanged(self, device, value, former, timestamp,value_changed):
+ if (device is azimuth_rot) and (value is not None):
+ if value_changed:
+ if self.debug:
+ print "Azimuth angle changed: " + str(value)
+ try:
+ set_azimuth_rot(value)
+ except:
+ if self.debug:
+ self.getLogger().warning(str(sys.exc_info()[1]))
+listenerAzimuth = ListenerAzimuth()
+listenerAzimuth.debug=True
+azimuth_rot.addListener(listenerAzimuth)
diff --git a/script/imaging/fov_arrows.py b/script/imaging/fov_arrows.py
index 4860cd6..075be86 100644
--- a/script/imaging/fov_arrows.py
+++ b/script/imaging/fov_arrows.py
@@ -9,7 +9,9 @@ FOV_ARROWS = { \
run("imaging/FOV_table")
FOV_ARROWS_SIZE=80
+FOV_XRAY_ARROW_SIZE=120
FOV_LABEL_POS=FOV_ARROWS_SIZE+15
+FOV_XRAY_LABEL_POS=FOV_XRAY_ARROW_SIZE+15
#FOV_ARROWS_ORIGIN=Point(image.getData().width/4, image.getData().height*3/4)
#FOV_ARROWS_ORIGIN=Point(image.getData().width*3/4, image.getData().height/4)
FOV_ARROWS_ORIGIN=Point(image.getData().width-(FOV_LABEL_POS+5), FOV_LABEL_POS+5)
@@ -30,9 +32,15 @@ def set_fov_offset(value):
global FOV_OFFSET
FOV_OFFSET = value
update_arrows()
+
+def set_azimuth_rot(value):
+ global AZIMUTH_ROT
+ AZIMUTH_ROT = value
+ update_arrows()
+
def update_arrows():
- global arrows_renderer, arrow_x, arrow_y, arrow_a, label_x, label_y
+ global arrows_renderer, arrow_x, arrow_y, arrow_a, label_x, label_y, label_a
if arrows_renderer is not None:
args = FOV_ARROWS.get(fov.take(), None)
if args is not None:
@@ -41,8 +49,10 @@ def update_arrows():
angle=angle+180
x,y = FOV_ARROWS_ORIGIN.x, FOV_ARROWS_ORIGIN.y
a=math.radians(angle)
- xa,ya=int(x+FOV_ARROWS_SIZE*math.cos(a)), int(y-FOV_ARROWS_SIZE*math.sin(a))
+ xa,ya=int(x+FOV_XRAY_ARROW_SIZE*math.cos(a)), int(y-FOV_XRAY_ARROW_SIZE*math.sin(a))
arrow_a.update(FOV_ARROWS_ORIGIN, Point(xa,ya))
+ xa,ya=int(x+FOV_XRAY_LABEL_POS*math.cos(a)), int(y-FOV_XRAY_LABEL_POS*math.sin(a))
+ label_a.update(Point(xa,ya))
angle=angle+azimuth
a=math.radians(angle)
xa,ya=int(x+FOV_ARROWS_SIZE*math.cos(a)), int(y-FOV_ARROWS_SIZE*math.sin(a))
@@ -60,8 +70,10 @@ def update_arrows():
arrow_x.update(FOV_ARROWS_ORIGIN, FOV_ARROWS_ORIGIN)
arrow_y.update(FOV_ARROWS_ORIGIN, FOV_ARROWS_ORIGIN)
arrow_a.update(FOV_ARROWS_ORIGIN, FOV_ARROWS_ORIGIN)
+ label_a.update(label_a.UNDEFINED_POINT)
label_x.update(label_x.UNDEFINED_POINT)
label_y.update(label_y.UNDEFINED_POINT)
+ arrows_renderer.refresh()
def task_update_arrows():
global arrows_renderer
@@ -76,7 +88,7 @@ def task_update_arrows():
def start_arrows(renderer=None):
- global arrows_renderer, arrow_x, arrow_y, arrow_a, label_x, label_y, FOV_FUTURE
+ global arrows_renderer, arrow_x, arrow_y, arrow_a, label_x, label_y, label_a, FOV_FUTURE
if arrows_renderer is None:
arrows_renderer = renderer if renderer else show_panel(image)
arrow_x = Overlays.Arrow(Pen(FOV_COLOR_X))
@@ -84,15 +96,16 @@ def start_arrows(renderer=None):
arrow_a = Overlays.Arrow(Pen(FOV_COLOR_A))
label_x = Overlays.Text(arrow_x.pen, "X",FOV_LABEL_FONT)
label_y = Overlays.Text(arrow_y.pen, "Y",FOV_LABEL_FONT)
- arrows_renderer.addOverlays([arrow_a, arrow_x,arrow_y,label_x, label_y])
+ label_a = Overlays.Text(arrow_a.pen, "X-rays",FOV_LABEL_FONT)
+ arrows_renderer.addOverlays([arrow_a, label_a, arrow_x,arrow_y,label_x, label_y])
#update_arrows()
FOV_FUTURE = fork(task_update_arrows,)[0]
def stop_arrows(renderer=None):
- global arrows_renderer, arrow_x, arrow_y, label_x, label_y, FOV_FUTURE
+ global arrows_renderer, arrow_x, arrow_y, label_x, label_y, label_a, FOV_FUTURE
if arrows_renderer is not None:
- arrows_renderer.removeOverlays([arrow_a, arrow_x,arrow_y, label_x, label_y])
+ arrows_renderer.removeOverlays([arrow_a, label_a, arrow_x,arrow_y, label_x, label_y])
arrows_renderer=None
if FOV_FUTURE is not None:
FOV_FUTURE.cancel(True)