Closedown
This commit is contained in:
@@ -469,9 +469,8 @@ public class ScreenPanel extends Panel {
|
||||
}
|
||||
}
|
||||
|
||||
Thread tcomboScreen;
|
||||
Thread tcomboFilter;
|
||||
|
||||
Thread devicesInitTask;
|
||||
|
||||
void setCamera(String cameraName) throws IOException, InterruptedException {
|
||||
System.out.println("Setting camera: " + cameraName + " [" + (buttonCamtool.isSelected() ? "camtool" : "direct") + "]");
|
||||
//renderer.removeOverlay(errorOverlay);
|
||||
@@ -480,8 +479,6 @@ public class ScreenPanel extends Panel {
|
||||
buttonGrabBackground.setEnabled(false);
|
||||
checkBackground.setEnabled(false);
|
||||
spinnerThreshold.setEnabled(false);
|
||||
comboScreen.setModel(new DefaultComboBoxModel());
|
||||
comboFilter.setModel(new DefaultComboBoxModel());
|
||||
|
||||
checkThreshold.setEnabled(false);
|
||||
|
||||
@@ -496,126 +493,79 @@ public class ScreenPanel extends Panel {
|
||||
renderer.removeOverlays(userOv);
|
||||
renderer.clear();
|
||||
renderer.resetZoom();
|
||||
|
||||
if ((tcomboScreen!=null) && (tcomboScreen.isAlive())){
|
||||
tcomboScreen.interrupt();
|
||||
}
|
||||
|
||||
if ((tcomboFilter!=null) && (tcomboFilter.isAlive())){
|
||||
tcomboFilter.interrupt();
|
||||
}
|
||||
boolean changed = !String.valueOf(cameraName).equals(this.cameraName);
|
||||
this.cameraName = cameraName;
|
||||
|
||||
if (screen != null) {
|
||||
screen.close();
|
||||
screen = null;
|
||||
}
|
||||
if (filter != null) {
|
||||
filter.close();
|
||||
filter = null;
|
||||
}
|
||||
|
||||
//Parallelizing initialization
|
||||
tcomboScreen = new Thread(() -> {
|
||||
try {
|
||||
screen = new DiscretePositioner("CurrentScreen", cameraName + ":SET_SCREEN1_POS", cameraName + ":GET_SCREEN1_POS");
|
||||
screen.initialize();
|
||||
DefaultComboBoxModel model = new DefaultComboBoxModel();
|
||||
for (String pos : screen.getPositions()) {
|
||||
model.addElement(pos);
|
||||
}
|
||||
comboScreen.setModel(model);
|
||||
comboScreen.setSelectedItem(screen.read());
|
||||
|
||||
} catch (Exception ex) {
|
||||
comboScreen.setModel(new DefaultComboBoxModel());
|
||||
System.err.println(ex.getMessage());
|
||||
if (changed){
|
||||
if ( (devicesInitTask!=null) && (devicesInitTask.isAlive())){
|
||||
devicesInitTask.interrupt();
|
||||
}
|
||||
if (screen != null) {
|
||||
screen.close();
|
||||
screen = null;
|
||||
}
|
||||
comboScreen.setEnabled(screen != null);
|
||||
valueScreen.setDevice(screen);
|
||||
});
|
||||
tcomboScreen.start();
|
||||
|
||||
tcomboFilter = new Thread(() -> {
|
||||
try {
|
||||
filter = new DiscretePositioner("CurrentFilter", cameraName + ":SET_FILTER", cameraName + ":GET_FILTER");
|
||||
filter.initialize();
|
||||
DefaultComboBoxModel model = new DefaultComboBoxModel();
|
||||
for (String pos : filter.getPositions()) {
|
||||
model.addElement(pos);
|
||||
}
|
||||
comboFilter.setModel(model);
|
||||
comboFilter.setSelectedItem(filter.read());
|
||||
} catch (Exception ex) {
|
||||
System.err.println(ex.getMessage());
|
||||
if (filter != null) {
|
||||
filter.close();
|
||||
filter = null;
|
||||
}
|
||||
comboFilter.setEnabled(filter != null);
|
||||
valueFilter.setDevice(filter);
|
||||
});
|
||||
tcomboFilter.start();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
Path configFile = Paths.get(configFolder, cameraName + ".json");
|
||||
cameraConfigJson = configFile.toFile().exists() ? new String(Files.readAllBytes(configFile)) : null;
|
||||
if ((cameraConfigJson == null) && (buttonDirect.isSelected())) {
|
||||
throw new Exception("Cannot open camera config file: " + configFile.toFile());
|
||||
}
|
||||
boolean changed = !String.valueOf(cameraName).equals(this.cameraName);
|
||||
this.cameraName = cameraName;
|
||||
try {
|
||||
if (buttonCamtool.isSelected()) {
|
||||
//camera = new Camtool("CurrentCamera", "gfa-lc6-64:8080");
|
||||
camera = new Camtool("CurrentCamera");
|
||||
camera.getConfig().flipHorizontally = false;
|
||||
camera.getConfig().flipVertically = false;
|
||||
camera.getConfig().rotation = 0.0;
|
||||
camera.getConfig().roiX = 0;
|
||||
camera.getConfig().roiY = 0;
|
||||
camera.getConfig().roiWidth = -1;
|
||||
camera.getConfig().roiHeight = -1;
|
||||
} else {
|
||||
camera = new PsiCamera("CurrentCamera", cameraName);
|
||||
config = (CameraConfig) JsonSerializer.decode(cameraConfigJson, CameraConfig.class);
|
||||
camera.getConfig().flipHorizontally = config.getMirrorX();
|
||||
camera.getConfig().flipVertically = config.getMirrorY();
|
||||
//camera.getConfig().rotation = config.getRotate();
|
||||
//camera.getConfig().rotationCrop = true;
|
||||
switch (config.getRotate()) {
|
||||
case 1:
|
||||
camera.getConfig().rotation = 270;
|
||||
break;
|
||||
case 2:
|
||||
camera.getConfig().rotation = 180;
|
||||
break;
|
||||
case 3:
|
||||
camera.getConfig().rotation = 90;
|
||||
break;
|
||||
}
|
||||
camera.getConfig().rotationCrop = false;
|
||||
camera.getConfig().roiX = config.getRoiEnable() ? config.getRoi().get(0) : 0;
|
||||
camera.getConfig().roiY = config.getRoiEnable() ? config.getRoi().get(1) : 0;
|
||||
camera.getConfig().roiWidth = config.getRoiEnable() ? config.getRoi().get(2) : -1;
|
||||
camera.getConfig().roiHeight = config.getRoiEnable() ? config.getRoi().get(3) : -1;
|
||||
try {
|
||||
camera.getConfig().spatialCalOffsetX = config.getCalOffsetX();
|
||||
camera.getConfig().spatialCalOffsetY = config.getCalOffsetY();
|
||||
camera.getConfig().spatialCalScaleX = -config.getScaleX();
|
||||
camera.getConfig().spatialCalScaleY = -config.getScaleY();
|
||||
} catch (Exception ex) {
|
||||
camera.getConfig().spatialCalOffsetX = Double.NaN;
|
||||
camera.getConfig().spatialCalOffsetY = Double.NaN;
|
||||
camera.getConfig().spatialCalScaleX = Double.NaN;
|
||||
camera.getConfig().spatialCalScaleY = Double.NaN;
|
||||
}
|
||||
}
|
||||
|
||||
if (buttonCamtool.isSelected()) {
|
||||
//camera = new Camtool("CurrentCamera", "gfa-lc6-64:8080");
|
||||
camera = new Camtool("CurrentCamera");
|
||||
camera.getConfig().flipHorizontally = false;
|
||||
camera.getConfig().flipVertically = false;
|
||||
camera.getConfig().rotation = 0.0;
|
||||
camera.getConfig().roiX = 0;
|
||||
camera.getConfig().roiY = 0;
|
||||
camera.getConfig().roiWidth = -1;
|
||||
camera.getConfig().roiHeight = -1;
|
||||
} else {
|
||||
camera = new PsiCamera("CurrentCamera", cameraName);
|
||||
config = (CameraConfig) JsonSerializer.decode(cameraConfigJson, CameraConfig.class);
|
||||
camera.getConfig().flipHorizontally = config.getMirrorX();
|
||||
camera.getConfig().flipVertically = config.getMirrorY();
|
||||
//camera.getConfig().rotation = config.getRotate();
|
||||
//camera.getConfig().rotationCrop = true;
|
||||
switch (config.getRotate()) {
|
||||
case 1:
|
||||
camera.getConfig().rotation = 270;
|
||||
break;
|
||||
case 2:
|
||||
camera.getConfig().rotation = 180;
|
||||
break;
|
||||
case 3:
|
||||
camera.getConfig().rotation = 90;
|
||||
break;
|
||||
}
|
||||
camera.getConfig().rotationCrop = false;
|
||||
camera.getConfig().roiX = config.getRoiEnable() ? config.getRoi().get(0) : 0;
|
||||
camera.getConfig().roiY = config.getRoiEnable() ? config.getRoi().get(1) : 0;
|
||||
camera.getConfig().roiWidth = config.getRoiEnable() ? config.getRoi().get(2) : -1;
|
||||
camera.getConfig().roiHeight = config.getRoiEnable() ? config.getRoi().get(3) : -1;
|
||||
try {
|
||||
camera.getConfig().spatialCalOffsetX = config.getCalOffsetX();
|
||||
camera.getConfig().spatialCalOffsetY = config.getCalOffsetY();
|
||||
camera.getConfig().spatialCalScaleX = -config.getScaleX();
|
||||
camera.getConfig().spatialCalScaleY = -config.getScaleY();
|
||||
} catch (Exception ex) {
|
||||
camera.getConfig().spatialCalOffsetX = Double.NaN;
|
||||
camera.getConfig().spatialCalOffsetY = Double.NaN;
|
||||
camera.getConfig().spatialCalScaleX = Double.NaN;
|
||||
camera.getConfig().spatialCalScaleY = Double.NaN;
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
config = null;
|
||||
showException(ex);
|
||||
}
|
||||
camera.initialize();
|
||||
camera.assertInitialized();
|
||||
System.out.println("Camera initialization OK");
|
||||
if (camera instanceof Camtool) {
|
||||
//Managing no background exception. Can be done in a better way?
|
||||
checkBackground.setEnabled(true);
|
||||
@@ -688,7 +638,12 @@ public class ScreenPanel extends Panel {
|
||||
public void onError(Object o, Exception excptn) {
|
||||
}
|
||||
});
|
||||
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
showException(ex);
|
||||
renderer.clearOverlays();
|
||||
|
||||
//TODO: Find better way to manage no background exception
|
||||
if (ex.getMessage().toLowerCase().contains("no background image")) {
|
||||
checkBackground.setSelected(true);
|
||||
@@ -704,10 +659,51 @@ public class ScreenPanel extends Panel {
|
||||
} finally {
|
||||
checkReticle();
|
||||
onTimer();
|
||||
}
|
||||
}
|
||||
|
||||
if (changed){
|
||||
comboScreen.setModel(new DefaultComboBoxModel());
|
||||
comboFilter.setModel(new DefaultComboBoxModel());
|
||||
|
||||
//Parallelizing initialization
|
||||
devicesInitTask = new Thread(() -> {
|
||||
try {
|
||||
screen = new DiscretePositioner("CurrentScreen", cameraName + ":SET_SCREEN1_POS", cameraName + ":GET_SCREEN1_POS");
|
||||
screen.initialize();
|
||||
DefaultComboBoxModel model = new DefaultComboBoxModel();
|
||||
for (String pos : screen.getPositions()) {
|
||||
model.addElement(pos);
|
||||
}
|
||||
comboScreen.setModel(model);
|
||||
comboScreen.setSelectedItem(screen.read());
|
||||
|
||||
} catch (Exception ex) {
|
||||
comboScreen.setModel(new DefaultComboBoxModel());
|
||||
System.err.println(ex.getMessage());
|
||||
screen = null;
|
||||
}
|
||||
comboScreen.setEnabled(screen != null);
|
||||
valueScreen.setDevice(screen);
|
||||
|
||||
try {
|
||||
filter = new DiscretePositioner("CurrentFilter", cameraName + ":SET_FILTER", cameraName + ":GET_FILTER");
|
||||
filter.initialize();
|
||||
DefaultComboBoxModel model = new DefaultComboBoxModel();
|
||||
for (String pos : filter.getPositions()) {
|
||||
model.addElement(pos);
|
||||
}
|
||||
comboFilter.setModel(model);
|
||||
comboFilter.setSelectedItem(filter.read());
|
||||
} catch (Exception ex) {
|
||||
System.err.println(ex.getMessage());
|
||||
filter = null;
|
||||
}
|
||||
comboFilter.setEnabled(filter != null);
|
||||
valueFilter.setDevice(filter);
|
||||
});
|
||||
devicesInitTask.start();
|
||||
}
|
||||
|
||||
//tcomboScreen.join();
|
||||
//tcomboFilter.join();
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user