diff --git a/src/main/java/ch/psi/mxsc/BasePlate.java b/src/main/java/ch/psi/mxsc/BasePlate.java index 5aff853..e2e46dd 100644 --- a/src/main/java/ch/psi/mxsc/BasePlate.java +++ b/src/main/java/ch/psi/mxsc/BasePlate.java @@ -14,6 +14,7 @@ import java.awt.Component; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Rectangle; +import java.awt.geom.Ellipse2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.ArrayList; @@ -230,6 +231,7 @@ public class BasePlate extends DeviceBase { boundingBox = new Rectangle((int)(plotRect.x+plotRect.width*0.05), (int)(plotRect.y+plotRect.height * 0.05), (int)(plotRect.width*0.90), (int)(plotRect.height*0.90)); if (img!=null){ img = Utils.stretch(img, boundingBox.width, boundingBox.height); + g.setClip(new Ellipse2D.Float(boundingBox.x, boundingBox.y, boundingBox.width, boundingBox.height)); g.drawImage(img, boundingBox.x, boundingBox.y, null); } boolean drawBackground = (img==null); diff --git a/src/main/java/ch/psi/mxsc/Controller.java b/src/main/java/ch/psi/mxsc/Controller.java index ad07421..a97db8d 100644 --- a/src/main/java/ch/psi/mxsc/Controller.java +++ b/src/main/java/ch/psi/mxsc/Controller.java @@ -173,6 +173,18 @@ public class Controller { } } + public String getWorkingMode(){ + try { + return String.valueOf(getMainFrame().eval("robot.working_mode", true)); + } catch (Exception ex) { + return "Unknown"; + } + } + + public boolean isLocalMode(){ + return getWorkingMode().equals("local"); + } + public void imageDetectPucks() throws Context.ContextStateException { imageDetectPucks(null, null, null); } diff --git a/src/main/java/ch/psi/mxsc/MainPanel.form b/src/main/java/ch/psi/mxsc/MainPanel.form index a870bf7..9a0bf0b 100644 --- a/src/main/java/ch/psi/mxsc/MainPanel.form +++ b/src/main/java/ch/psi/mxsc/MainPanel.form @@ -589,6 +589,7 @@ + @@ -601,13 +602,15 @@ - + - + - + + + @@ -643,6 +646,14 @@ + + + + + + + + diff --git a/src/main/java/ch/psi/mxsc/MainPanel.java b/src/main/java/ch/psi/mxsc/MainPanel.java index 69caeb4..8ad9fbf 100644 --- a/src/main/java/ch/psi/mxsc/MainPanel.java +++ b/src/main/java/ch/psi/mxsc/MainPanel.java @@ -39,12 +39,7 @@ public class MainPanel extends Panel { Controller.createInstance(this); basePlatePanel.setMode(BasePlatePanel.Mode.single); labelRoomTemperature.setVisible(false); - buttonExpertCommands.setVisible(false); - buttonRecovery.setVisible(false); - buttonReleaseLocal.setVisible(false); - buttonReleasePsys.setVisible(false); - panelViewType.setVisible(false); - panelDetection.setVisible(false); + setExpertMode(false); setDefaultDetail(); } @@ -226,7 +221,7 @@ public class MainPanel extends Panel { if (ex != null){ showException((Exception)ex); } else if (showReturn){ - SwingUtils.showMessage(getTopLevel(), "Return", String.valueOf(ret)); + showMessage("Return", String.valueOf(ret)); } return ret; }); @@ -236,11 +231,13 @@ public class MainPanel extends Panel { } - void execute(String script, Object args){ + void execute(String script, Object args, boolean background, boolean showReturn){ try { - runAsync(script, args).handle((ret, ex) -> { + runAsync(script, args, background).handle((ret, ex) -> { if (ex != null){ showException((Exception)ex); + } else if (showReturn){ + showMessage("Return", String.valueOf(ret)); } return ret; }); @@ -284,6 +281,7 @@ public class MainPanel extends Panel { void setExpertMode(boolean expert){ buttonExpertCommands.setVisible(expert); buttonRecovery.setVisible(expert); + buttonCalibrateImage.setVisible(expert); devicesPanel.setActive(expert); buttonReleaseLocal.setVisible(expert); buttonReleasePsys.setVisible(expert); @@ -311,6 +309,7 @@ public class MainPanel extends Panel { recoveryPlugin = getContext().getPluginManager().loadInitializePlugin(getContext().getSetup().expandPath("{plugins}/Recovery.java")); } + void setDefaultDetail() { JLabel label = new JLabel(); label.setIcon(new javax.swing.ImageIcon(getClass().getResource("/apple_transparent_white_100x50.png"))); @@ -382,6 +381,7 @@ public class MainPanel extends Panel { checkExpert = new javax.swing.JCheckBox(); buttonExpertCommands = new javax.swing.JButton(); buttonRecovery = new javax.swing.JButton(); + buttonCalibrateImage = new javax.swing.JButton(); jPanel4 = new javax.swing.JPanel(); ledFillingControl = new ch.psi.pshell.swing.Led(); ledFillingDewar = new ch.psi.pshell.swing.Led(); @@ -757,6 +757,13 @@ public class MainPanel extends Panel { } }); + buttonCalibrateImage.setText("Calibrate"); + buttonCalibrateImage.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonCalibrateImageActionPerformed(evt); + } + }); + javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5); jPanel5.setLayout(jPanel5Layout); jPanel5Layout.setHorizontalGroup( @@ -768,7 +775,8 @@ public class MainPanel extends Panel { .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(buttonExpertCommands, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(checkExpert, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(buttonRecovery, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(buttonRecovery, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(buttonCalibrateImage, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); jPanel5Layout.setVerticalGroup( @@ -777,13 +785,15 @@ public class MainPanel extends Panel { .addComponent(devicesPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGap(9, 9, 9)) .addGroup(jPanel5Layout.createSequentialGroup() - .addGap(35, 35, 35) + .addGap(17, 17, 17) .addComponent(checkExpert) - .addGap(18, 18, 18) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(buttonExpertCommands) .addGap(18, 18, 18) .addComponent(buttonRecovery) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGap(18, 18, 18) + .addComponent(buttonCalibrateImage) + .addGap(49, 49, 49)) ); jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder("LN2 Control")); @@ -1246,11 +1256,16 @@ public class MainPanel extends Panel { } }//GEN-LAST:event_buttonRecoveryActionPerformed + private void buttonCalibrateImageActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonCalibrateImageActionPerformed + execute("imgproc/CameraCalibration", null, false, true); + }//GEN-LAST:event_buttonCalibrateImageActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables private ch.psi.mxsc.BasePlatePanel basePlatePanel; private javax.swing.JToggleButton btViewDewar; private javax.swing.JToggleButton btViewRT; + private javax.swing.JButton buttonCalibrateImage; private javax.swing.JToggleButton buttonCamera; private javax.swing.JButton buttonClearDet; private javax.swing.JToggleButton buttonDrawing;