This commit is contained in:
2020-10-12 18:03:27 +02:00
parent 1a6056e8b7
commit 88990832f1
33 changed files with 5872 additions and 167 deletions
+146 -78
View File
@@ -132,6 +132,7 @@ public class ScreenPanel6 extends Panel {
ColormapSource camera;
PipelineServer server;
String cameraName;
String cameraAlias;
int polling = 1000;
Overlay marker = null;
JDialog histogramDialog;
@@ -152,6 +153,9 @@ public class ScreenPanel6 extends Panel {
Overlay titleOv = null;
//int integration = 0;
boolean persistCameraState;
Map<String, List<String>> groups;
Map<String, String> aliases;
final Logger logger;
public class CameraState extends Config {
@@ -382,8 +386,9 @@ public class ScreenPanel6 extends Panel {
final Console console;
public ScreenPanel6() {
logger = Logger.getLogger(getClass().getName());
try {
initComponents();
initComponents();
spinnerThreshold.setVisible(false);
btFixColormapRange.setVisible(false);
setGoodRegionOptionsVisible(false);
@@ -399,6 +404,10 @@ public class ScreenPanel6 extends Panel {
setPersistedComponents(new Component[]{buttonTitle});
comboCameras.setEnabled(false);
comboType.setEnabled(false);
if (App.hasArgument("list")){
comboType.setVisible(false);
labelType.setVisible(false);
}
SwingUtils.setEnumCombo(comboColormap, Colormap.class);
if (App.hasArgument("poll")) {
@@ -495,12 +504,10 @@ public class ScreenPanel6 extends Panel {
String cameraConfigJson = null;
if (usingServer) {
String cameraServerUrl = (camServerUrl == null) ? server.getUrl().substring(0, server.getUrl().length() - 1) + "8" : camServerUrl;
try (CameraServer srv = new CameraServer("CamServer", cameraServerUrl)) {
srv.initialize();
try (CameraServer srv = newCameraServer()) {
//TODO: replace into encodeMultiline
cameraConfigJson = JsonSerializer.encode(srv.getConfig(cameraName), true);
}
} else {
String configFolder = (String) getContext().getClassByName("SfCamera").getMethod("getConfigFolder", new Class[]{}).invoke(null);
Path configFile = Paths.get(configFolder, cameraName + ".json");
@@ -682,7 +689,7 @@ public class ScreenPanel6 extends Panel {
try {
onMarkerChanged();
} catch (IOException ex) {
Logger.getLogger(ScreenPanel6.class.getName()).log(Level.WARNING, null, ex);
logger.log(Level.WARNING, null, ex);
}
}
}
@@ -811,6 +818,15 @@ public class ScreenPanel6 extends Panel {
);
} else {
try (CameraServer srv = newCameraServer()) {
groups = srv.getCameraGroups();
comboType.setModel(new javax.swing.DefaultComboBoxModel(Arr.insert(Arr.sort(groups.keySet().toArray(new String[0])), "All", 0)));
aliases = srv.getCameraAliases();
} catch (Exception ex){
groups = null;
aliases = null;
}
usingServer = buttonServer.isSelected();
updateCameraList();
comboCameras.setEnabled(true);
@@ -834,30 +850,41 @@ public class ScreenPanel6 extends Panel {
}
boolean isVisible(String camera) {
return ((comboType.getSelectedIndex() == 0) || (getCameraType(camera).equals(comboType.getSelectedItem())));
return ((comboType.getSelectedIndex() == 0) || (getCameraTypes(camera).contains(comboType.getSelectedItem())));
}
DefaultComboBoxModel getCameraList(boolean fromServer) throws Exception {
DefaultComboBoxModel model = new DefaultComboBoxModel();
if (fromServer) {
try (PipelineServer srv = newServer()) {
srv.initialize();
List<String> cameras = srv.getCameras();
Collections.sort(cameras);
if (App.hasArgument("list")){
List<String> lists = App.getArgumentValues("list");
for (String list: lists){
String[] tokens = list.split(",");
for (String token : tokens){
if (!token.isBlank()){
model.addElement(token.trim());
}
}
}
} else {
if (fromServer) {
try (CameraServer srv = newCameraServer()) {
List<String> cameras = srv.getCameras();
Collections.sort(cameras);
for (String camera : cameras) {
if (isVisible(camera)) {
model.addElement(camera);
}
}
}
} else {
ArrayList<String> cameras = (ArrayList<String>) getContext().getClassByName("SfCamera").getMethod("getCameras", new Class[]{}).invoke(null);
for (String camera : cameras) {
if (isVisible(camera)) {
model.addElement(camera);
}
}
}
} else {
ArrayList<String> cameras = (ArrayList<String>) getContext().getClassByName("SfCamera").getMethod("getCameras", new Class[]{}).invoke(null);
for (String camera : cameras) {
if (isVisible(camera)) {
model.addElement(camera);
}
}
}
if (App.hasArgument("cam")) {
String camera = App.getArgumentValue("cam");
@@ -883,6 +910,13 @@ public class ScreenPanel6 extends Panel {
updateButtons();
return server;
}
CameraServer newCameraServer() throws IOException, InterruptedException {
String cameraServerUrl = (camServerUrl == null) ? server.getUrl().substring(0, server.getUrl().length() - 1) + "8" : camServerUrl;
CameraServer srv = new CameraServer("CamServer", cameraServerUrl);
srv.initialize();
return srv;
}
boolean updatingCameraSelection;
@@ -909,10 +943,10 @@ public class ScreenPanel6 extends Panel {
try {
String selected = (String) comboCameras.getSelectedItem();
comboCameras.setModel(getCameraList(usingServer));
if (selected != null) {
if (((DefaultComboBoxModel) comboCameras.getModel()).getIndexOf(camera) < 0) {
setComboCameraSelection(selected);
}
if ((selected != null) && (((DefaultComboBoxModel) comboCameras.getModel()).getIndexOf(selected) > 0)){
setComboCameraSelection(selected);
} else{
setComboCameraSelection("");
}
} catch (Exception ex) {
ex.printStackTrace();
@@ -957,9 +991,10 @@ public class ScreenPanel6 extends Panel {
void manageTitleOverlay() {
Overlay to = null;
if ((buttonTitle.isSelected()) && (cameraName != null)) {
String text = cameraAlias;
if ((buttonTitle.isSelected()) && (text != null)) {
Font font = new Font("Arial", Font.PLAIN, 28);
to = new Text(renderer.getPenErrorText(), cameraName, font, new Point(-SwingUtils.getTextSize(cameraName, renderer.getGraphics().getFontMetrics(font)).width - 14, 26));
to = new Text(renderer.getPenErrorText(), text, font, new Point(-SwingUtils.getTextSize(text, renderer.getGraphics().getFontMetrics(font)).width - 14, 26));
to.setFixed(true);
to.setAnchor(Overlay.ANCHOR_VIEWPORT_OR_IMAGE_TOP_RIGHT);
}
@@ -1023,7 +1058,14 @@ public class ScreenPanel6 extends Panel {
renderer.removeOverlays(userOv);
renderer.clear();
renderer.resetZoom();
cameraAlias = cameraName;
if ((aliases!=null) && (cameraName!=null) && (aliases.containsKey(cameraName))){
cameraName = aliases.get(cameraName);
System.out.println("Camera name is alias to: " + cameraName);
}
boolean changed = !String.valueOf(cameraName).equals(this.cameraName);
this.cameraName = cameraName;
@@ -1204,7 +1246,7 @@ public class ScreenPanel6 extends Panel {
onChangeColormap(null);
checkBackground.setEnabled(true);
if (changed) {
boolean electrons = getCameraType(cameraName).equals(ELECTRONS_TYPE);
boolean electrons = getCameraTypes(this.cameraName).contains(ELECTRONS_TYPE);
comboScreen.setModel(new DefaultComboBoxModel());
comboScreen.setEnabled(false);
comboFilter.setModel(new DefaultComboBoxModel());
@@ -1215,10 +1257,10 @@ public class ScreenPanel6 extends Panel {
//Parallelizing initialization
devicesInitTask = new Thread(() -> {
try {
if (cameraName.contains("DSRM")) {
screen = new DiscretePositioner("CurrentScreen", cameraName + ":POSITION_SP", cameraName + ":POSITION");
if (this.cameraName.contains("DSRM")) {
screen = new DiscretePositioner("CurrentScreen", this.cameraName + ":POSITION_SP", this.cameraName + ":POSITION");
} else {
screen = new DiscretePositioner("CurrentScreen", cameraName + ":SET_SCREEN1_POS", cameraName + ":GET_SCREEN1_POS");
screen = new DiscretePositioner("CurrentScreen", this.cameraName + ":SET_SCREEN1_POS", this.cameraName + ":GET_SCREEN1_POS");
}
screen.setMonitored(true);
screen.initialize();
@@ -1238,7 +1280,7 @@ public class ScreenPanel6 extends Panel {
valueScreen.setDevice(screen);
try {
filter = new DiscretePositioner("CurrentFilter", cameraName + ":SET_FILTER", cameraName + ":GET_FILTER");
filter = new DiscretePositioner("CurrentFilter", this.cameraName + ":SET_FILTER", this.cameraName + ":GET_FILTER");
filter.setMonitored(true);
filter.initialize();
DefaultComboBoxModel model = new DefaultComboBoxModel();
@@ -1698,9 +1740,9 @@ public class ScreenPanel6 extends Panel {
try {
((Source) getDevice("image")).initialize();
} catch (IOException ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
logger.log(Level.SEVERE, null, ex);
} catch (InterruptedException ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
logger.log(Level.SEVERE, null, ex);
}
}
updateZoom();
@@ -2418,7 +2460,7 @@ public class ScreenPanel6 extends Panel {
}
ArrayList<Frame> frames = new ArrayList<>();
frames.add(frame);
this.saveFrames(cameraName + "_camera_snapshot", frames);
this.saveFrames(cameraAlias + "_camera_snapshot", frames);
//Enforce the same timestamp to data & image files.
snapshotFile = getContext().getExecutionPars().getPath() + ".png";
@@ -2451,7 +2493,7 @@ public class ScreenPanel6 extends Panel {
if (SwingUtils.showOption(getTopLevel(), "Success", panel, OptionType.OkCancel) == OptionResult.Yes) {
StringBuilder message = new StringBuilder();
message.append("Camera: ").append(cameraName).append(" (").
message.append("Camera: ").append(cameraAlias).append(" (").
append((server != null) ? "server" : "direct").append(")").append("\n");
message.append("Screen: ").append(String.valueOf(valueScreen.getLabel().getText())).append("\n");
message.append("Filter: ").append(String.valueOf(valueFilter.getLabel().getText())).append("\n");
@@ -2473,31 +2515,41 @@ public class ScreenPanel6 extends Panel {
void saveStack() throws Exception {
synchronized (imageBuffer) {
saveFrames(cameraName + "_camera_stack", imageBuffer);
saveFrames(cameraAlias + "_camera_stack", imageBuffer);
}
SwingUtils.showMessage(getTopLevel(), "Success", "Generated data file:\n" + getContext().getExecutionPars().getPath());
}
public static String getCameraType(String name) {
public List getCameraTypes(String name) {
if (name == null) {
return "";
return null;
}
for (String s : new String[]{"LCAM"}) {
if (name.contains(s)) {
return LASER_TYPE;
List ret = new ArrayList<String>();
if (groups!=null){
for (String group: Arr.sort(groups.keySet().toArray(new String[0]))){
if (groups.get(group).contains(name)){
ret.add(group);
}
}
} else {
for (String s : new String[]{"LCAM"}) {
if (name.contains(s)) {
ret.add(LASER_TYPE);
}
}
for (String s : new String[]{"DSCR", "DSRM", "DLAC"}) {
if (name.contains(s)) {
ret.add(ELECTRONS_TYPE);
}
}
for (String s : new String[]{"PROF", "PPRM", "PSSS", "PSCR", "PSRD"}) {
if (name.contains(s)) {
ret.add(PHOTONICS_TYPE);
}
}
}
for (String s : new String[]{"DSCR", "DSRM", "DLAC"}) {
if (name.contains(s)) {
return ELECTRONS_TYPE;
}
}
for (String s : new String[]{"PROF", "PPRM", "PSSS", "PSCR", "PSRD"}) {
if (name.contains(s)) {
return PHOTONICS_TYPE;
}
}
return "Unknown";
ret.add("Unknown");
return ret;
}
public Map<String, Object> getProcessingParameters(StreamValue value) throws IOException {
@@ -2524,7 +2576,7 @@ public class ScreenPanel6 extends Panel {
String pathTimestampStr = pathRoot + "timestamp_str";
Map<String, Object> processingPars = getProcessingParameters(first);
String camera = (String) processingPars.get("camera_name");
String type = getCameraType(camera);
List types = getCameraTypes(camera);
int width = ((Number) first.getValue("width")).intValue();
int height = ((Number) first.getValue("height")).intValue();
@@ -2533,7 +2585,7 @@ public class ScreenPanel6 extends Panel {
getContext().setExecutionPars(name);
DataManager dm = getContext().getDataManager();
//Create tables
//Create tables
dm.createDataset(pathImage, dataType, new int[]{depth, height, width});
dm.createDataset(pathPid, Long.class, new int[]{depth});
dm.createDataset(pathTimestampStr, String.class, new int[]{depth});
@@ -2544,20 +2596,38 @@ public class ScreenPanel6 extends Panel {
Map<String, Object> pars = getProcessingParameters(first);
for (String key : pars.keySet()) {
if ((pars.get(key) != null) && (pars.get(key) instanceof Map)) {
for (Object k : ((Map) pars.get(key)).keySet()) {
for (String k : ((Map<String,Object>) pars.get(key)).keySet()) {
Object v = ((Map) pars.get(key)).get(k);
dm.setAttribute(pathImage, key + " " + k, (v == null) ? "" : v);
k = key + " " + k;
v = (v == null) ? "" : v;
try{
dm.setAttribute(pathImage, k, v);
} catch (Exception ex){
logger.info("Cannot set attribute " + pathImage + ": "+ k + " = " + v + " - " + ex.getMessage());
}
}
} else {
Object value = pars.get(key);
if (value == null) {
value = "";
} else if (value instanceof List) {
Class cls = (((List) value).size() > 0) ? ((List) value).get(0).getClass() : double.class;
value = Convert.toPrimitiveArray(value, cls);
//value = Convert.toDouble(value);
try{
if (value == null) {
value = "";
} else if (value instanceof List) {
if (((List) value).size() > 0){
Class cls = ((List) value).get(0).getClass() ;
if (cls == String.class){
value = ((List) value).toArray(new String[0]);
} else {
value = Convert.toPrimitiveArray(value, cls);
}
} else {
value = "";
}
}
dm.setAttribute(pathImage, key, value);
} catch (Exception ex){
logger.info("Cannot set attribute " + pathImage + ": "+ key + " = " + value + " - " + ex.getMessage());
}
dm.setAttribute(pathImage, key, value);
}
}
} else if (val.getClass().isArray()) {
@@ -2571,8 +2641,8 @@ public class ScreenPanel6 extends Panel {
dm.setAttribute(pathRoot, "Camera", camera);
dm.setAttribute(pathRoot, "Images", depth);
dm.setAttribute(pathRoot, "Interval", -1);
dm.setAttribute(pathRoot, "Type", type);
if (type.equals(ELECTRONS_TYPE)) {
dm.setAttribute(pathRoot, "Type", types.toArray(new String[0]));
if (types.contains(ELECTRONS_TYPE)) {
dm.setAttribute(pathRoot, "Screen", String.valueOf(valueScreen.getLabel().getText()));
dm.setAttribute(pathRoot, "Filter", String.valueOf(valueFilter.getLabel().getText()));
}
@@ -2717,7 +2787,7 @@ public class ScreenPanel6 extends Panel {
}
dev.setPolling(1000);
chart.setDevice(dev);
JDialog dlg = SwingUtils.showDialog(dataTableDialog, cameraName + " " + id, null, chart);
JDialog dlg = SwingUtils.showDialog(dataTableDialog, cameraAlias + " " + id, null, chart);
//TODO:
//PlotBase plot = chart.getPlot();
//if (plot!=null){
@@ -2958,7 +3028,7 @@ public class ScreenPanel6 extends Panel {
panelCameraSelection = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
comboCameras = new javax.swing.JComboBox();
jLabel5 = new javax.swing.JLabel();
labelType = new javax.swing.JLabel();
comboType = new javax.swing.JComboBox();
renderer = new ch.psi.pshell.imaging.Renderer();
@@ -3802,7 +3872,7 @@ public class ScreenPanel6 extends Panel {
}
});
jLabel5.setText("Type:");
labelType.setText("Type:");
comboType.setFont(new java.awt.Font("Dialog", 1, 14)); // NOI18N
comboType.setMaximumRowCount(30);
@@ -3823,7 +3893,7 @@ public class ScreenPanel6 extends Panel {
.addGap(0, 0, 0)
.addComponent(comboCameras, javax.swing.GroupLayout.PREFERRED_SIZE, 222, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel5)
.addComponent(labelType)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(comboType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, 0))
@@ -3834,7 +3904,7 @@ public class ScreenPanel6 extends Panel {
.addGap(0, 0, 0)
.addGroup(panelCameraSelectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(comboType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel5)
.addComponent(labelType)
.addComponent(jLabel1)
.addComponent(comboCameras, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(0, 0, 0))
@@ -3947,7 +4017,7 @@ public class ScreenPanel6 extends Panel {
try {
source.getConfig().save();
} catch (Exception ex) {
Logger.getLogger(getClass().getName()).log(Level.WARNING, null, ex);
logger.log(Level.WARNING, null, ex);
}
source.refresh();
if (buttonPause.isSelected()) {
@@ -4285,7 +4355,7 @@ public class ScreenPanel6 extends Panel {
setLaserState(2,false);
}
try {
System.out.println("Grabbing background for: " + cameraName);
System.out.println("Grabbing background for: " + cameraAlias);
if (server != null) {
server.captureBackground(5);
} else {
@@ -4310,7 +4380,7 @@ public class ScreenPanel6 extends Panel {
try {
saveSnapshot();
} catch (Exception ex) {
Logger.getLogger(getClass().getName()).log(Level.WARNING, null, ex);
logger.log(Level.WARNING, null, ex);
showException(ex);
}
}//GEN-LAST:event_buttonSaveActionPerformed
@@ -4331,11 +4401,9 @@ public class ScreenPanel6 extends Panel {
try {
if (!updatingCameraSelection) {
updateCameraList();
if ((cameraName != null) && (!cameraName.equals(comboCameras.getSelectedItem()))) {
if ((cameraAlias != null) && (!cameraAlias.equals(comboCameras.getSelectedItem()))) {
setCamera(null);
} else {
setCamera(cameraName);
}
}
}
} catch (Exception ex) {
@@ -4501,7 +4569,6 @@ public class ScreenPanel6 extends Panel {
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel5;
@@ -4520,6 +4587,7 @@ public class ScreenPanel6 extends Panel {
private javax.swing.JLabel labelSlNumber;
private javax.swing.JLabel labelSlOrientation;
private javax.swing.JLabel labelSlScale;
private javax.swing.JLabel labelType;
private javax.swing.JPanel panelCameraSelection;
private javax.swing.JPanel panelFilter;
private javax.swing.JPanel panelScreen;