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)