Sharing Marker between multiple clients
This commit is contained in:
@@ -320,9 +320,9 @@ public class ScreenPanel3 extends Panel {
|
||||
if (App.hasArgument("integration")) {
|
||||
try {
|
||||
setIntegration(Integer.valueOf(App.getArgumentValue("integration")));
|
||||
if (integration!=0){
|
||||
if (integration != 0) {
|
||||
buttonFit.setSelected(false);
|
||||
buttonProfile.setSelected(false);
|
||||
buttonProfile.setSelected(false);
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
@@ -448,12 +448,12 @@ public class ScreenPanel3 extends Panel {
|
||||
} catch (IOException ex) {
|
||||
showException(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
JCheckBoxMenuItem menuFrameIntegration = new JCheckBoxMenuItem("Multi-Frame", (integration!=0));
|
||||
|
||||
JCheckBoxMenuItem menuFrameIntegration = new JCheckBoxMenuItem("Multi-Frame", (integration != 0));
|
||||
menuFrameIntegration.addActionListener((ActionEvent e) -> {
|
||||
if (integration==0){
|
||||
if (integration == 0) {
|
||||
JPanel panel = new JPanel();
|
||||
GridBagLayout layout = new GridBagLayout();
|
||||
layout.columnWidths = new int[]{150, 50}; //Minimum width
|
||||
@@ -473,20 +473,19 @@ public class ScreenPanel3 extends Panel {
|
||||
c.gridy = 0;
|
||||
panel.add(textFrames, c);
|
||||
if (SwingUtils.showOption(getTopLevel(), "Multi-Frame Integration", panel, OptionType.OkCancel) == OptionResult.Yes) {
|
||||
setIntegration(checkContinuous.isSelected() ? -(Integer.valueOf(textFrames.getText())): (Integer.valueOf(textFrames.getText())));
|
||||
setIntegration(checkContinuous.isSelected() ? -(Integer.valueOf(textFrames.getText())) : (Integer.valueOf(textFrames.getText())));
|
||||
}
|
||||
} else {
|
||||
if (SwingUtils.showOption(getTopLevel(), "Multi-Frame Integration",
|
||||
"Do you want to disable " + ((integration<0)? "continuous ":"") +"multi-frame integration (" + Math.abs(integration)+ ")?", OptionType.YesNo) == OptionResult.Yes) {
|
||||
} else {
|
||||
if (SwingUtils.showOption(getTopLevel(), "Multi-Frame Integration",
|
||||
"Do you want to disable " + ((integration < 0) ? "continuous " : "") + "multi-frame integration (" + Math.abs(integration) + ")?", OptionType.YesNo) == OptionResult.Yes) {
|
||||
setIntegration(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
System.out.println("---");
|
||||
for (Component cmp : SwingUtils.getComponentsByType(renderer.getPopupMenu(),JMenu.class)){
|
||||
JMenu menu = (JMenu)cmp;
|
||||
if (menu.getText().equals("Integration")){
|
||||
|
||||
for (Component cmp : SwingUtils.getComponentsByType(renderer.getPopupMenu(), JMenu.class)) {
|
||||
JMenu menu = (JMenu) cmp;
|
||||
if (menu.getText().equals("Integration")) {
|
||||
menu.addSeparator();
|
||||
menu.add(menuFrameIntegration);
|
||||
}
|
||||
@@ -510,7 +509,7 @@ public class ScreenPanel3 extends Panel {
|
||||
menuCalibrate.setEnabled((calibrationDialolg == null) || (!calibrationDialolg.isShowing()));
|
||||
menuSaveStack.setEnabled(imageBufferLenght > 0);
|
||||
menuSetImageBufferSize.setEnabled(!renderer.isPaused());
|
||||
menuFrameIntegration.setSelected(integration!=0);
|
||||
menuFrameIntegration.setSelected(integration != 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -522,6 +521,7 @@ public class ScreenPanel3 extends Panel {
|
||||
}
|
||||
});
|
||||
renderer.getPopupMenu().setVisible(false);
|
||||
clearMarker();
|
||||
|
||||
showFit = buttonFit.isSelected();
|
||||
showProfile = buttonProfile.isSelected();
|
||||
@@ -536,6 +536,18 @@ public class ScreenPanel3 extends Panel {
|
||||
}
|
||||
}
|
||||
});
|
||||
renderer.addListener(new RendererListener() {
|
||||
@Override
|
||||
public void onMoveFinished(Renderer renderer, Overlay overlay) {
|
||||
if (overlay == marker) {
|
||||
try {
|
||||
onMarkerChanged();
|
||||
} catch (IOException ex) {
|
||||
Logger.getLogger(ScreenPanel3.class.getName()).log(Level.WARNING, null, ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
if (MainFrame.isDark()) {
|
||||
textState.setDisabledTextColor(textState.getForeground());
|
||||
}
|
||||
@@ -543,26 +555,26 @@ public class ScreenPanel3 extends Panel {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
void setIntegration(int frames){
|
||||
|
||||
void setIntegration(int frames) {
|
||||
try {
|
||||
if (integration != frames){
|
||||
if (integration != frames) {
|
||||
integration = frames;
|
||||
if (camera!=null){
|
||||
if (camera != null) {
|
||||
if (Math.abs(integration) > 1) {
|
||||
renderer.setDevice(new ImageIntegrator(integration));
|
||||
} else {
|
||||
renderer.setDevice(camera);
|
||||
}
|
||||
}
|
||||
synchronized (imageBuffer) {
|
||||
currentFrame = null;
|
||||
imageBuffer.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -785,6 +797,7 @@ public class ScreenPanel3 extends Panel {
|
||||
System.out.println("Initializing");
|
||||
parseUserOverlays();
|
||||
errorOverlay = null;
|
||||
lastMarkerPos = null;
|
||||
|
||||
if (dataTableDialog != null) {
|
||||
dataTableDialog.dispose();
|
||||
@@ -909,7 +922,8 @@ public class ScreenPanel3 extends Panel {
|
||||
renderer.setDevice(camera);
|
||||
}
|
||||
renderer.setAutoScroll(true);
|
||||
renderer.setMarker(marker);
|
||||
//renderer.setMarker(marker);
|
||||
clearMarker();
|
||||
imageSize = null;
|
||||
|
||||
camera.addListener(new ImageListener() {
|
||||
@@ -945,6 +959,7 @@ public class ScreenPanel3 extends Panel {
|
||||
if (!renderer.isPaused()) {
|
||||
updateStreamData();
|
||||
}
|
||||
updateMarker();
|
||||
}
|
||||
}
|
||||
manageFit(bi, data);
|
||||
@@ -1101,11 +1116,13 @@ public class ScreenPanel3 extends Panel {
|
||||
renderer.refresh();
|
||||
}
|
||||
|
||||
void checkMarker() {
|
||||
void checkMarker(Point p) throws IOException {
|
||||
if (camera != null) {
|
||||
if (buttonMarker.isSelected()) {
|
||||
Dimension d = renderer.getImageSize();
|
||||
Point p = (d == null) ? new Point(renderer.getWidth() / 2, renderer.getHeight() / 2) : new Point(d.width / 2, d.height / 2);
|
||||
if (p==null){
|
||||
p = (d == null) ? new Point(renderer.getWidth() / 2, renderer.getHeight() / 2) : new Point(d.width / 2, d.height / 2);
|
||||
}
|
||||
Overlay ov = null;
|
||||
marker = new Overlays.Crosshairs(renderer.getPenMarker(), p, new Dimension(100, 100));
|
||||
marker.setMovable(true);
|
||||
@@ -1114,6 +1131,73 @@ public class ScreenPanel3 extends Panel {
|
||||
marker = null;
|
||||
}
|
||||
renderer.setMarker(marker);
|
||||
onMarkerChanged();
|
||||
}
|
||||
}
|
||||
|
||||
Point lastMarkerPos;
|
||||
void onMarkerChanged() throws IOException {
|
||||
lastMarkerPos = getStreamMarkerPos();
|
||||
if (marker == null) {
|
||||
setInstanceConfigValue("Marker", null);
|
||||
} else {
|
||||
setInstanceConfigValue("Marker", new int[]{marker.getPosition().x, marker.getPosition().y});
|
||||
}
|
||||
}
|
||||
|
||||
void updateMarker() {
|
||||
try {
|
||||
if (server != null) {
|
||||
Point p = getStreamMarkerPos();
|
||||
if (p != null) {
|
||||
//To prevent a local change being overriden by a message having the old settings.
|
||||
//TODO: This is not bullet-proof, as one can have 2 changes between 2 frames...
|
||||
if (!p.equals(lastMarkerPos)){
|
||||
if (p.x == Integer.MIN_VALUE) {
|
||||
if (buttonMarker.isSelected()) {
|
||||
buttonMarker.setSelected(false);
|
||||
checkMarker(null);
|
||||
}
|
||||
} else {
|
||||
if (!buttonMarker.isSelected()) {
|
||||
buttonMarker.setSelected(true);
|
||||
checkMarker(p);
|
||||
} else {
|
||||
if (!p.equals(marker.getPosition())){
|
||||
marker.setPosition(p);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
Point getStreamMarkerPos() throws IOException{
|
||||
//System.out.println(server.getInstanceConfig().get("Marker"));
|
||||
Map<String, Object> pars = server.getProcessingParameters();
|
||||
if (pars != null) {
|
||||
List markerPosition = (List) pars.get("Marker");
|
||||
if (markerPosition != null) {
|
||||
return new Point((Integer)markerPosition.get(0), (Integer)markerPosition.get(1));
|
||||
}
|
||||
return new Point(Integer.MIN_VALUE,Integer.MIN_VALUE);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
void clearMarker(){
|
||||
marker = null;
|
||||
renderer.setMarker(marker);
|
||||
}
|
||||
|
||||
void setInstanceConfigValue(String name, Object value) throws IOException {
|
||||
if (server != null) {
|
||||
Map map = server.getInstanceConfig();
|
||||
map.put(name, value);
|
||||
server.setInstanceConfig(map);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1156,14 +1240,9 @@ public class ScreenPanel3 extends Panel {
|
||||
} else {
|
||||
buttonManual.setSelected(true);
|
||||
}
|
||||
btFixColormapRange.setVisible(buttonAutomatic.isSelected());
|
||||
|
||||
//spinnerMin.setVisible(buttonManual.isSelected()); labelMin.setVisible(spinnerMin.isVisible());
|
||||
//spinnerMax.setVisible(buttonManual.isSelected()); labelMax.setVisible(spinnerMax.isVisible());
|
||||
btFixColormapRange.setVisible(buttonAutomatic.isSelected());
|
||||
spinnerMin.setEnabled(buttonManual.isSelected());
|
||||
spinnerMax.setEnabled(buttonManual.isSelected());
|
||||
//spinnerMin.setValue(Double.isNaN(config.colormapMin) ? 0 : Math.min(Math.max((int) config.colormapMin, 0), 65535));
|
||||
//spinnerMax.setValue(Double.isNaN(config.colormapMax) ? 0 : Math.min(Math.max((int) config.colormapMax, 0), 65535));
|
||||
if (!Double.isNaN(config.colormapMin)) {
|
||||
spinnerMin.setValue(Math.min(Math.max((int) config.colormapMin, 0), 65535));
|
||||
}
|
||||
@@ -1249,11 +1328,7 @@ public class ScreenPanel3 extends Panel {
|
||||
buttonFit.setEnabled(active);
|
||||
buttonReticle.setEnabled(active && camera.getConfig().isCalibrated());
|
||||
buttonStreamData.setEnabled(active && (server != null));
|
||||
buttonPause.setEnabled(active);
|
||||
//buttonPause.setIcon(getIcon("Play"));
|
||||
//buttonPause.setToolTipText("Resume");
|
||||
//buttonPause.setIcon(getIcon("Pause"));
|
||||
//buttonPause.setToolTipText("Pause");
|
||||
buttonPause.setEnabled(active);
|
||||
|
||||
if (renderer.isPaused() != buttonPause.isSelected()) {
|
||||
buttonPause.setSelected(renderer.isPaused());
|
||||
@@ -1340,8 +1415,7 @@ public class ScreenPanel3 extends Panel {
|
||||
Double xMean = null, xSigma = null, xNorm = null, xCom = null, xRms = null;
|
||||
Double yMean = null, ySigma = null, yNorm = null, yCom = null, yRms = null;
|
||||
double[] pX = null, pY = null, gX = null, gY = null;
|
||||
PointDouble[] sliceCenters = null;
|
||||
//Double xCom=null, yCom=null;
|
||||
PointDouble[] sliceCenters = null;
|
||||
if (data != null) {
|
||||
int height = data.getHeight();
|
||||
int width = data.getWidth();
|
||||
@@ -2181,9 +2255,7 @@ public class ScreenPanel3 extends Panel {
|
||||
SwingUtils.centerComponent(getTopLevel(), dataTableDialog);
|
||||
dataTableDialog.requestFocus();
|
||||
return;
|
||||
}
|
||||
//String msg = String.join("\n", ids);
|
||||
//SwingUtils.showMessage(getTopLevel(), "Image Data", msg);
|
||||
}
|
||||
dataTableModel = new DefaultTableModel(new Object[0][2], new String[]{"Name", "Value"}) {
|
||||
public Class getColumnClass(int columnIndex) {
|
||||
return String.class;
|
||||
@@ -3582,7 +3654,7 @@ public class ScreenPanel3 extends Panel {
|
||||
|
||||
private void buttonMarkerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonMarkerActionPerformed
|
||||
try {
|
||||
checkMarker();
|
||||
checkMarker(null);
|
||||
} catch (Exception ex) {
|
||||
showException(ex);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user