Startup
This commit is contained in:
+82
-11
@@ -2,6 +2,7 @@
|
||||
* Copyright (c) 2014 Paul Scherrer Institute. All rights reserved.
|
||||
*/
|
||||
|
||||
import ch.psi.pshell.core.Controller;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Paths;
|
||||
@@ -24,7 +25,19 @@ import ch.psi.pshell.epics.ChannelInteger;
|
||||
import ch.psi.pshell.epics.ChannelIntegerArray;
|
||||
import ch.psi.pshell.ui.App;
|
||||
import ch.psi.pshell.imaging.Data;
|
||||
import ch.psi.pshell.imaging.Overlay;
|
||||
import ch.psi.pshell.imaging.Overlays;
|
||||
import ch.psi.pshell.imaging.Pen;
|
||||
import ch.psi.pshell.imaging.Renderer;
|
||||
import ch.psi.pshell.imaging.Renderer.Profile;
|
||||
import ch.psi.pshell.imaging.RendererListener;
|
||||
import ch.psi.pshell.imaging.Utils;
|
||||
import ch.psi.pshell.scripting.InterpreterResult;
|
||||
import ch.psi.pshell.scripting.ScriptManager;
|
||||
import ch.psi.utils.Arr;
|
||||
import ch.psi.utils.Convert;
|
||||
import ch.psi.utils.swing.Editor.EditorDialog;
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Frame;
|
||||
@@ -36,6 +49,7 @@ import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.script.ScriptException;
|
||||
import static javax.swing.WindowConstants.DISPOSE_ON_CLOSE;
|
||||
|
||||
/**
|
||||
@@ -48,7 +62,7 @@ public class Cameras extends Panel {
|
||||
renderer.setPersistenceFile(Paths.get(getController().getSetup().getContextPath(), "Renderer_Cameras.bin"));
|
||||
setPersistedComponents(new Component[]{checkCamtool});
|
||||
comboCameras.setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
final String configFolder = "/afs/psi.ch/intranet/SF/Applications/config/camtool";
|
||||
File[] cameraConfigFiles = new File[0];
|
||||
@@ -165,6 +179,8 @@ public class Cameras extends Panel {
|
||||
return (Integer) state.get("run");
|
||||
}
|
||||
}
|
||||
|
||||
Overlay[] fitOv;
|
||||
|
||||
void setCamera(String cameraName) throws IOException, InterruptedException {
|
||||
System.out.println("Setting camera: " + cameraName);
|
||||
@@ -215,13 +231,15 @@ public class Cameras extends Panel {
|
||||
camera.initialize();
|
||||
if (camera instanceof Camtool){
|
||||
double[] origin = ((Camtool)camera).origin.read();
|
||||
camera.getConfig().spatialCalOffsetX = origin[0];
|
||||
camera.getConfig().spatialCalOffsetY = origin[1];
|
||||
if (origin.length>=2){
|
||||
camera.getConfig().spatialCalOffsetX = origin[0];
|
||||
camera.getConfig().spatialCalOffsetY = origin[1];
|
||||
}
|
||||
}
|
||||
camera.getConfig().save();
|
||||
|
||||
camera.setPolling(-500);
|
||||
//camera.setMonitored(true);
|
||||
camera.setPolling(-1000);
|
||||
camera.setMonitored(false);
|
||||
renderer.setDevice(camera);
|
||||
renderer.setShowReticle(true);
|
||||
renderer.setAutoScroll(true);
|
||||
@@ -229,13 +247,19 @@ public class Cameras extends Panel {
|
||||
camera.addListener(new ImageListener() {
|
||||
@Override
|
||||
public void onImage(Object o, BufferedImage bi, Data data) {
|
||||
if (renderer.getReticle() != null) {
|
||||
if (bi == null) {
|
||||
return;
|
||||
}
|
||||
renderer.getReticle().setSize(new Dimension(bi.getWidth(), bi.getHeight()));
|
||||
if (bi == null) {
|
||||
renderer.removeOverlays(fitOv);
|
||||
fitOv = null;
|
||||
} else {
|
||||
if (renderer.getReticle() != null) {
|
||||
renderer.getReticle().setSize(new Dimension(bi.getWidth(), bi.getHeight()));
|
||||
}
|
||||
Overlay[] profile = renderer.getProfileOverlays();
|
||||
profile = ((profile != null) && (profile.length==4)) ? getFitOverlays(bi) : null;
|
||||
renderer.updateOverlays(profile, fitOv);
|
||||
fitOv = profile;
|
||||
}
|
||||
camera.removeListener(this);
|
||||
//camera.removeListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -253,6 +277,53 @@ public class Cameras extends Panel {
|
||||
textState.setText((camera == null) ? "" : camera.getState().toString());
|
||||
buttonConfig.setEnabled(camera != null);
|
||||
}
|
||||
|
||||
Pen fitPen = new Pen(new Color(0, 192, 0));
|
||||
Overlay[] getFitOverlays(BufferedImage img){
|
||||
Overlays.Polyline hpoly = null;
|
||||
Overlays.Polyline vpoly = null;
|
||||
int factor = 2;
|
||||
Profile profile = renderer.getProfile();
|
||||
if ((profile != Profile.None) && (img != null)) {
|
||||
img = Utils.grayscale(img);
|
||||
if (profile.hasVertical()) {
|
||||
int[] sum = Utils.integrateVertically(img);
|
||||
int[] x = Arr.indexesInt(img.getWidth());
|
||||
int[] y = new int[img.getWidth()];
|
||||
try {
|
||||
ScriptManager sm = Controller.getInstance().getScriptManager();
|
||||
sm.setVar("y", Convert.toDouble(sum));
|
||||
sm.setVar("x", Convert.toDouble(x));
|
||||
InterpreterResult r = sm.eval("r = fit(y, x)");
|
||||
if (r.exception != null){
|
||||
r.exception .printStackTrace();
|
||||
return null;
|
||||
} else {
|
||||
Object ret = sm.getVar("r");
|
||||
System.out.println(ret);
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
}
|
||||
|
||||
for (int i = 0; i < img.getWidth(); i++) {
|
||||
y[i] = (int) (img.getHeight() - 1 - (((double) sum[i]) / 255 / factor)/2);
|
||||
}
|
||||
vpoly = new Overlays.Polyline(fitPen, Arr.indexesInt(img.getWidth()), y);
|
||||
}
|
||||
if (profile.hasHorizontal()) {
|
||||
int[] integration = Utils.integrateHorizontally(img);
|
||||
int[] x = new int[img.getHeight()];
|
||||
int[] y = Arr.indexesInt(img.getHeight());
|
||||
|
||||
for (int i = 0; i < img.getHeight(); i++) {
|
||||
x[i] = (int) (((double) integration[i]) / 255 / factor)/2;
|
||||
}
|
||||
hpoly = new Overlays.Polyline(fitPen, x, y);
|
||||
}
|
||||
return new Overlay[]{hpoly, vpoly};
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/////////
|
||||
public class Camtool extends ArraySource {
|
||||
|
||||
Reference in New Issue
Block a user