Initial commit V2

This commit is contained in:
gac-S_Changer
2024-10-29 11:07:44 +01:00
parent 47ab8f1f0e
commit b2557c14b1
7 changed files with 379 additions and 324 deletions

View File

@@ -2,10 +2,12 @@ package ch.psi.mxsc;
import ch.psi.pshell.imaging.Utils;
import ch.psi.utils.swing.MainFrame;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Stroke;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
@@ -60,6 +62,17 @@ public class BasePlateGraphics {
top,
bottom
}
Rectangle imageRoi;
public void setImageRoi( Rectangle roi){
this.imageRoi = roi;
}
Point detection;
public void setDetection( Point detection){
this.detection = detection;
}
void draw(Graphics2D g, Rectangle plotRect, boolean drawSamples, boolean drawIds, boolean drawContour, DrawMode mode, BufferedImage img) {
if (mode != DrawMode.fill){
@@ -85,7 +98,19 @@ public class BasePlateGraphics {
this.plotRect = plotRect;
this.drawContour = drawContour;
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));
int center_x=0, center_y=0;
if (img!=null){
Point detection = this.detection;
if (imageRoi!=null){
img = img.getSubimage(imageRoi.x, imageRoi.y, imageRoi.width, imageRoi.height);
if (detection!=null){
//detection = new Point(detection.x-imageRoi.x, detection.y-imageRoi.y);
center_x = detection.x * boundingBox.width / img.getWidth() + boundingBox.x;
center_y = detection.y * boundingBox.height / img.getHeight() + boundingBox.y;
center_x -= imageRoi.x * boundingBox.width / img.getWidth();
center_y -= imageRoi.y * boundingBox.height / img.getHeight();
}
}
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);
@@ -104,6 +129,16 @@ public class BasePlateGraphics {
for (PuckGraphics pg : puckGraphics) {
pg.draw(g, null, drawSamples, drawIds, drawBackground) ;
}
if (img!=null){
if (detection!=null){
int size=15;
g.setColor(new Color(86, 193, 255));
g.setStroke(new BasicStroke(2f));
g.drawLine(center_x-size, center_y, center_x+size, center_y);
g.drawLine(center_x, center_y-size, center_x, center_y+size);
//g.drawOval(center_x-size, center_y-size, 2*size, 2*size);
}
}
}

View File

@@ -56,7 +56,6 @@ public class Controller {
final BasePlate basePlate;
RoomTemperatureBasePlate roomTemperatureBasePlate;
static /*Panel*/ MainPanel mainFrame;
Device hexiposi;
Device barcode_reader;
Device barcode_reader_puck;
Device puck_detection;
@@ -305,12 +304,6 @@ public class Controller {
}
}
final DeviceListener hexiposiListener = new DeviceAdapter() {
@Override
public void onValueChanged(Device device, Object value, Object former) {
updateView();
}
};
final DeviceListener barcodeReaderListener = new DeviceAdapter() {
@Override
@@ -346,22 +339,6 @@ public class Controller {
};
void updateDevices() {
if (hexiposi != null) {
hexiposi.removeListener(hexiposiListener);
}
if (barcode_reader != null) {
hexiposi.removeListener(barcodeReaderListener);
}
if (puck_detection != null) {
hexiposi.removeListener(puckDetectionListener);
}
hexiposi = (Device) getMainFrame().getDevice("hexiposi");
if (hexiposi != null) {
hexiposi.addListener(hexiposiListener);
} else {
Logger.getLogger(Controller.class.getName()).log(Level.SEVERE, "No hexiposi detected.");
}
mainFrame.hexiposiPanel.setDevice(hexiposi);
barcode_reader = (Device) getDevice("barcode_reader");
if (barcode_reader != null) {
barcode_reader.addListener(barcodeReaderListener);
@@ -429,16 +406,8 @@ public class Controller {
updateView();
}
public String getHexiposiPosition() {
try {
return (String) ((ReadbackDevice) hexiposi).getReadback().take();
} catch (Exception ex) {
return null;
}
}
public boolean isSelectedPuck(Puck puck) {
return ("" + puck.getSegment()).equalsIgnoreCase(getHexiposiPosition());
return puck.isSegmentSelected();
}
public List<Puck> getSelectedPucks() {
@@ -773,7 +742,7 @@ public class Controller {
Puck.Detection[] detection = basePlate.getDetection();
for (int i = 0; i < Controller.NUMBER_OF_PUCKS; i++) {
Puck puck = basePlate.getPucks()[i];
//Only manage pucks for current hexiposi position
if (isSelectedPuck(puck)) {
boolean detectedPuckInserted = (currentDetection[i] != Puck.Detection.Present) && (detection[i] == Puck.Detection.Present);
boolean detectedPuckRemoved = (currentDetection[i] != Puck.Detection.Empty) && (detection[i] == Puck.Detection.Empty);

View File

@@ -1,6 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Form version="1.6" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
<NonVisualComponents>
<Component class="javax.swing.ButtonGroup" name="buttonGroup1">
</Component>
</NonVisualComponents>
<Properties>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[1030, 530]"/>
@@ -31,7 +35,7 @@
<Group type="102" alignment="1" attributes="0">
<Component id="panelTop" max="32767" attributes="0"/>
<EmptySpace min="-2" pref="0" max="-2" attributes="0"/>
<Component id="panelBottom" pref="80" max="32767" attributes="0"/>
<Component id="panelBottom" pref="79" max="32767" attributes="0"/>
<EmptySpace min="-2" pref="1" max="-2" attributes="0"/>
</Group>
</Group>
@@ -89,14 +93,14 @@
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="1" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="panelDetection" linkSize="23" min="-2" max="-2" attributes="0"/>
<Component id="panelLegend" min="-2" max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" max="-2" attributes="0">
<Component id="panelLegend" max="32767" attributes="0"/>
<Component id="panelDetection" max="32767" attributes="0"/>
</Group>
<EmptySpace pref="234" max="32767" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="panelHexiposi" alignment="1" min="-2" max="-2" attributes="0"/>
<Component id="panelViewType" linkSize="23" alignment="1" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="255" max="32767" attributes="0"/>
<Group type="103" groupAlignment="0" max="-2" attributes="0">
<Component id="panelHexiposi" max="32767" attributes="0"/>
<Component id="panelViewType" max="32767" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
</Group>
@@ -278,12 +282,12 @@
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<EmptySpace pref="26" max="32767" attributes="0"/>
<Group type="103" groupAlignment="0" max="-2" attributes="0">
<Component id="buttonClearDet" linkSize="4" max="32767" attributes="0"/>
<Component id="buttonPuckDet" max="32767" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
<Group type="103" groupAlignment="2" attributes="0">
<Component id="buttonDetectionCalibrate" linkSize="4" alignment="2" min="-2" max="-2" attributes="0"/>
<Component id="buttonCalibrationPanel" linkSize="4" alignment="2" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace pref="26" max="32767" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
@@ -291,29 +295,29 @@
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="1" attributes="0">
<EmptySpace max="32767" attributes="0"/>
<Component id="buttonPuckDet" min="-2" max="-2" attributes="0"/>
<Component id="buttonDetectionCalibrate" min="-2" max="-2" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Component id="buttonClearDet" min="-2" max="-2" attributes="0"/>
<Component id="buttonCalibrationPanel" min="-2" max="-2" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Component class="javax.swing.JButton" name="buttonClearDet">
<Component class="javax.swing.JButton" name="buttonCalibrationPanel">
<Properties>
<Property name="text" type="java.lang.String" value="Clear"/>
<Property name="text" type="java.lang.String" value="Panel"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="buttonClearDetActionPerformed"/>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="buttonCalibrationPanelActionPerformed"/>
</Events>
</Component>
<Component class="javax.swing.JButton" name="buttonPuckDet">
<Component class="javax.swing.JButton" name="buttonDetectionCalibrate">
<Properties>
<Property name="text" type="java.lang.String" value="Start"/>
<Property name="text" type="java.lang.String" value="Calibrate"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="buttonPuckDetActionPerformed"/>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="buttonDetectionCalibrateActionPerformed"/>
</Events>
</Component>
</SubComponents>
@@ -333,41 +337,66 @@
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="1" attributes="0">
<EmptySpace pref="14" max="32767" attributes="0"/>
<Group type="103" groupAlignment="2" attributes="0">
<Component id="buttonDetectCover" alignment="2" min="-2" max="-2" attributes="0"/>
<Component id="hexiposiPanel" alignment="2" min="-2" max="-2" attributes="0"/>
<Group type="102" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="jLabel1" max="32767" attributes="0"/>
<Component id="textCoverDet" max="32767" attributes="0"/>
<Component id="jLabel2" alignment="0" max="32767" attributes="0"/>
<Component id="textCoverMove" alignment="0" pref="90" max="32767" attributes="0"/>
</Group>
<EmptySpace pref="15" max="32767" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace pref="18" max="32767" attributes="0"/>
<Component id="hexiposiPanel" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="13" max="32767" attributes="0"/>
<Component id="buttonDetectCover" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="textCoverDet" min="-2" max="-2" attributes="0"/>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="jLabel2" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="textCoverMove" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="18" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Component class="ch.psi.mxsc.HexiposiPanel" name="hexiposiPanel">
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
</AuxValues>
</Component>
<Component class="javax.swing.JButton" name="buttonDetectCover">
<Component class="javax.swing.JLabel" name="jLabel1">
<Properties>
<Property name="text" type="java.lang.String" value="Image"/>
<Property name="horizontalAlignment" type="int" value="0"/>
<Property name="text" type="java.lang.String" value="Detection:"/>
</Properties>
</Component>
<Component class="javax.swing.JTextField" name="textCoverDet">
<Properties>
<Property name="editable" type="boolean" value="false"/>
<Property name="horizontalAlignment" type="int" value="0"/>
<Property name="disabledTextColor" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
<Color blue="0" green="0" red="0" type="rgb"/>
</Property>
<Property name="enabled" type="boolean" value="false"/>
</Properties>
</Component>
<Component class="javax.swing.JLabel" name="jLabel2">
<Properties>
<Property name="horizontalAlignment" type="int" value="0"/>
<Property name="text" type="java.lang.String" value="Last Move:"/>
</Properties>
</Component>
<Component class="javax.swing.JTextField" name="textCoverMove">
<Properties>
<Property name="editable" type="boolean" value="false"/>
<Property name="horizontalAlignment" type="int" value="0"/>
<Property name="disabledTextColor" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
<Color blue="0" green="0" red="0" type="rgb"/>
</Property>
<Property name="enabled" type="boolean" value="false"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="buttonDetectCoverActionPerformed"/>
</Events>
</Component>
</SubComponents>
</Container>
@@ -384,12 +413,12 @@
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="1" attributes="0">
<EmptySpace pref="21" max="32767" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
<Group type="103" groupAlignment="2" attributes="0">
<Component id="buttonDrawing" linkSize="25" alignment="2" min="-2" max="-2" attributes="0"/>
<Component id="buttonCamera" linkSize="25" alignment="2" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace pref="21" max="32767" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
@@ -408,6 +437,10 @@
<SubComponents>
<Component class="javax.swing.JToggleButton" name="buttonCamera">
<Properties>
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
<ComponentRef name="buttonGroup1"/>
</Property>
<Property name="selected" type="boolean" value="true"/>
<Property name="text" type="java.lang.String" value="Image"/>
</Properties>
<Events>
@@ -416,7 +449,9 @@
</Component>
<Component class="javax.swing.JToggleButton" name="buttonDrawing">
<Properties>
<Property name="selected" type="boolean" value="true"/>
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
<ComponentRef name="buttonGroup1"/>
</Property>
<Property name="text" type="java.lang.String" value="Design"/>
</Properties>
<Events>
@@ -1004,9 +1039,9 @@
<Group type="102" alignment="0" attributes="0">
<EmptySpace min="0" pref="0" max="-2" attributes="0"/>
<Component id="devicesPanel" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="26" max="32767" attributes="0"/>
<EmptySpace pref="25" max="32767" attributes="0"/>
<Component id="panelExpert" min="-2" pref="93" max="-2" attributes="0"/>
<EmptySpace pref="27" max="32767" attributes="0"/>
<EmptySpace pref="26" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
@@ -1170,7 +1205,7 @@
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<EmptySpace min="0" pref="0" max="-2" attributes="0"/>
<Component id="panelTableSamples" alignment="1" max="32767" attributes="0"/>
<Component id="panelTableSamples" alignment="1" pref="676" max="32767" attributes="0"/>
<EmptySpace min="0" pref="0" max="-2" attributes="0"/>
</Group>
</Group>

View File

@@ -7,6 +7,9 @@ import ch.psi.mxsc.BasePlatePanel.SelectionMode;
import ch.psi.pshell.core.Plugin;
import ch.psi.pshell.device.Device;
import ch.psi.pshell.device.DeviceAdapter;
import ch.psi.pshell.device.DeviceBase;
import ch.psi.pshell.device.DeviceListener;
import ch.psi.pshell.imaging.PointDouble;
import ch.psi.pshell.imaging.Renderer;
import ch.psi.pshell.imaging.RendererMode;
import ch.psi.pshell.imaging.Source;
@@ -28,11 +31,14 @@ import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -416,7 +422,11 @@ public class MainPanel extends Panel {
updateMode(((Device) getDevice("robot")).take());
} catch (Exception ex) {
this.getLogger().log(Level.SEVERE, null, ex);
}
}
DeviceBase dev = (DeviceBase) this.getDevice("cover_detection");
dev.addListener(cover_detection_listener);
setPuckDatamatrix(null);
setSampleDatamatrix(null);
setBackgroundUpdate(true);
@@ -578,6 +588,21 @@ public class MainPanel extends Panel {
}
void updateCameraView() {
try{
if (buttonCamera.isSelected()){
int center_x = ((Number)this.eval("cover_detection.config.center_x", true)).intValue();
int center_y = ((Number)this.eval("cover_detection.config.center_y", true)).intValue();
int diam_dewar = ((Number)this.eval("cover_detection.config.diameter_dewar", true)).intValue();
double dewar_wall = ((Number)this.eval("cover_detection.config.dewar_wall", true)).doubleValue();
int diam =(int) (dewar_wall * diam_dewar);
Rectangle roi = new Rectangle(center_x-diam/2,center_y - diam/2, diam, diam );
basePlatePanel.basePlateGraphics.setImageRoi(roi);
}
} catch (Exception ex){
if (getState().isInitialized()){
getLogger().log(Level.SEVERE, null, ex);
}
}
Source source = buttonCamera.isSelected() ? (Source) this.getDevice("img") : null;
basePlatePanel.setCameraView(source);
}
@@ -683,20 +708,20 @@ public class MainPanel extends Panel {
buttonCalibrateImage.setVisible(expert);
buttonCalibrateCover.setVisible(expert);
devicesPanel.setActive(expert);
panelViewType.setVisible(expert);
//panelViewType.setVisible(expert);
panelDetection.setVisible(expert && !isRt());
buttonDetectCover.setVisible(expert);
buttonConfig.setVisible(expert);
Puck.setDisplayDetectionError(expert);
if (checkExpert.isSelected() != expert) {
checkExpert.setSelected(expert);
}
if (expert == false) {
buttonCamera.setSelected(false);
buttonDrawing.setSelected(true);
updateViewType();
}
//if (expert == false) {
// buttonCamera.setSelected(true);
// buttonDrawing.setSelected(false);
// updateViewType();
//}
if (current != expert) {
onModeChange(expert);
}
@@ -935,6 +960,24 @@ public class MainPanel extends Panel {
}
}
DeviceListener cover_detection_listener = new DeviceAdapter() {
@Override
public void onCacheChanged(Device device, Object value, Object former, long timestamp, boolean valueChange) {
Point mm = null;
Point det = null;
try{
mm = new Point(Array.getInt(value, 4), Array.getInt(value, 5));
det = new Point(Array.getInt(value, 0), Array.getInt(value, 1));
basePlatePanel.basePlateGraphics.setDetection(det);
} catch (Exception ex){
}
Point aux = mm;
SwingUtilities.invokeLater(()->{
textCoverDet.setText((aux==null) ? "" :aux.x + ", " + aux.y);
});
}
};
/**
* This method is called from within the constructor to initialize the form.
@@ -945,6 +988,7 @@ public class MainPanel extends Panel {
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
buttonGroup1 = new javax.swing.ButtonGroup();
panelTop = new javax.swing.JPanel();
basePlatePanel = new ch.psi.mxsc.BasePlatePanel();
panelLegend = new javax.swing.JPanel();
@@ -959,11 +1003,13 @@ public class MainPanel extends Panel {
ledLidControlActive5 = new ch.psi.pshell.swing.Led();
jLabel23 = new javax.swing.JLabel();
panelDetection = new javax.swing.JPanel();
buttonClearDet = new javax.swing.JButton();
buttonPuckDet = new javax.swing.JButton();
buttonCalibrationPanel = new javax.swing.JButton();
buttonDetectionCalibrate = new javax.swing.JButton();
panelHexiposi = new javax.swing.JPanel();
hexiposiPanel = new ch.psi.mxsc.HexiposiPanel();
buttonDetectCover = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
textCoverDet = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
textCoverMove = new javax.swing.JTextField();
panelViewType = new javax.swing.JPanel();
buttonCamera = new javax.swing.JToggleButton();
buttonDrawing = new javax.swing.JToggleButton();
@@ -1112,17 +1158,17 @@ public class MainPanel extends Panel {
panelDetection.setBorder(javax.swing.BorderFactory.createTitledBorder("Detection"));
buttonClearDet.setText("Clear");
buttonClearDet.addActionListener(new java.awt.event.ActionListener() {
buttonCalibrationPanel.setText("Panel");
buttonCalibrationPanel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonClearDetActionPerformed(evt);
buttonCalibrationPanelActionPerformed(evt);
}
});
buttonPuckDet.setText("Start");
buttonPuckDet.addActionListener(new java.awt.event.ActionListener() {
buttonDetectionCalibrate.setText("Calibrate");
buttonDetectionCalibrate.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonPuckDetActionPerformed(evt);
buttonDetectionCalibrateActionPerformed(evt);
}
});
@@ -1131,55 +1177,75 @@ public class MainPanel extends Panel {
panelDetectionLayout.setHorizontalGroup(
panelDetectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelDetectionLayout.createSequentialGroup()
.addContainerGap(26, Short.MAX_VALUE)
.addGroup(panelDetectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(buttonClearDet, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(buttonPuckDet, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap(26, Short.MAX_VALUE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(panelDetectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(buttonDetectionCalibrate)
.addComponent(buttonCalibrationPanel))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
panelDetectionLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonCalibrationPanel, buttonDetectionCalibrate});
panelDetectionLayout.setVerticalGroup(
panelDetectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelDetectionLayout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(buttonPuckDet)
.addComponent(buttonDetectionCalibrate)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(buttonClearDet)
.addComponent(buttonCalibrationPanel)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
panelHexiposi.setBorder(javax.swing.BorderFactory.createTitledBorder("Cover"));
panelHexiposi.setPreferredSize(new java.awt.Dimension(112, 153));
buttonDetectCover.setText("Image");
buttonDetectCover.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonDetectCoverActionPerformed(evt);
}
});
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel1.setText("Detection:");
textCoverDet.setEditable(false);
textCoverDet.setHorizontalAlignment(javax.swing.JTextField.CENTER);
textCoverDet.setDisabledTextColor(new java.awt.Color(0, 0, 0));
textCoverDet.setEnabled(false);
jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel2.setText("Last Move:");
textCoverMove.setEditable(false);
textCoverMove.setHorizontalAlignment(javax.swing.JTextField.CENTER);
textCoverMove.setDisabledTextColor(new java.awt.Color(0, 0, 0));
textCoverMove.setEnabled(false);
javax.swing.GroupLayout panelHexiposiLayout = new javax.swing.GroupLayout(panelHexiposi);
panelHexiposi.setLayout(panelHexiposiLayout);
panelHexiposiLayout.setHorizontalGroup(
panelHexiposiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelHexiposiLayout.createSequentialGroup()
.addContainerGap(14, Short.MAX_VALUE)
.addGroup(panelHexiposiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(buttonDetectCover)
.addComponent(hexiposiPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(15, Short.MAX_VALUE))
.addGroup(panelHexiposiLayout.createSequentialGroup()
.addContainerGap()
.addGroup(panelHexiposiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(textCoverDet)
.addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(textCoverMove, javax.swing.GroupLayout.DEFAULT_SIZE, 90, Short.MAX_VALUE))
.addContainerGap())
);
panelHexiposiLayout.setVerticalGroup(
panelHexiposiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelHexiposiLayout.createSequentialGroup()
.addContainerGap(18, Short.MAX_VALUE)
.addComponent(hexiposiPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 13, Short.MAX_VALUE)
.addComponent(buttonDetectCover)
.addContainerGap())
.addContainerGap()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(textCoverDet, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(textCoverMove, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(18, Short.MAX_VALUE))
);
panelViewType.setBorder(javax.swing.BorderFactory.createTitledBorder("View"));
buttonGroup1.add(buttonCamera);
buttonCamera.setSelected(true);
buttonCamera.setText("Image");
buttonCamera.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
@@ -1187,7 +1253,7 @@ public class MainPanel extends Panel {
}
});
buttonDrawing.setSelected(true);
buttonGroup1.add(buttonDrawing);
buttonDrawing.setText("Design");
buttonDrawing.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
@@ -1200,11 +1266,11 @@ public class MainPanel extends Panel {
panelViewTypeLayout.setHorizontalGroup(
panelViewTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelViewTypeLayout.createSequentialGroup()
.addContainerGap(21, Short.MAX_VALUE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(panelViewTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(buttonDrawing)
.addComponent(buttonCamera))
.addContainerGap(21, Short.MAX_VALUE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
panelViewTypeLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonCamera, buttonDrawing});
@@ -1225,18 +1291,15 @@ public class MainPanel extends Panel {
basePlatePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, basePlatePanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(basePlatePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panelDetection, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(panelLegend, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 234, Short.MAX_VALUE)
.addGroup(basePlatePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panelHexiposi, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(panelViewType, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(basePlatePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(panelLegend, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(panelDetection, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 255, Short.MAX_VALUE)
.addGroup(basePlatePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(panelHexiposi, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(panelViewType, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
basePlatePanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {panelDetection, panelViewType});
basePlatePanelLayout.setVerticalGroup(
basePlatePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, basePlatePanelLayout.createSequentialGroup()
@@ -1660,9 +1723,9 @@ public class MainPanel extends Panel {
.addGroup(panelDevicesLayout.createSequentialGroup()
.addGap(0, 0, 0)
.addComponent(devicesPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 26, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 25, Short.MAX_VALUE)
.addComponent(panelExpert, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(27, Short.MAX_VALUE))
.addContainerGap(26, Short.MAX_VALUE))
);
panelDevicesLayout.setVerticalGroup(
panelDevicesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@@ -1747,7 +1810,7 @@ public class MainPanel extends Panel {
panelSamplesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelSamplesLayout.createSequentialGroup()
.addGap(0, 0, 0)
.addComponent(panelTableSamples)
.addComponent(panelTableSamples, javax.swing.GroupLayout.DEFAULT_SIZE, 676, Short.MAX_VALUE)
.addGap(0, 0, 0))
);
panelSamplesLayout.setVerticalGroup(
@@ -1861,7 +1924,7 @@ public class MainPanel extends Panel {
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(panelTop, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGap(0, 0, 0)
.addComponent(panelBottom, javax.swing.GroupLayout.DEFAULT_SIZE, 80, Short.MAX_VALUE)
.addComponent(panelBottom, javax.swing.GroupLayout.DEFAULT_SIZE, 79, Short.MAX_VALUE)
.addGap(1, 1, 1))
);
}// </editor-fold>//GEN-END:initComponents
@@ -1887,41 +1950,21 @@ public class MainPanel extends Panel {
JComponent dlgDetTextComp;
JComponent dlgDetRendererComp;
private void buttonPuckDetActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonPuckDetActionPerformed
private void buttonDetectionCalibrateActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonDetectionCalibrateActionPerformed
try {
/*
if ((dlgDetPlot == null) || (!dlgDetPlot.isShowing())){
dlgDetPlotComp = new ch.psi.pshell.plot.LinePlotJFree();
((ch.psi.pshell.plot.LinePlotJFree) dlgDetPlotComp).setTitle("");
dlgDetPlot = SwingUtils.showDialog(getTopLevel(), "Puck Detection", new Dimension(600,400), dlgDetPlotComp);
}
if ((dlgDetText == null)|| (!dlgDetText.isShowing())){
dlgDetTextComp = new javax.swing.JTextArea();
((javax.swing.JTextArea)dlgDetTextComp).setEditable(false);
dlgDetText = SwingUtils.showDialog(getTopLevel(), "Puck Detection", new Dimension(600,400), dlgDetTextComp);
}
*/
if (!App.isDetached()) {
if ((dlgDetRenderer == null) || (!dlgDetRenderer.isShowing())) {
dlgDetRendererComp = new Renderer();
((Renderer) dlgDetRendererComp).setMode(RendererMode.Fit);
dlgDetRenderer = SwingUtils.showDialog(getTopLevel(), "Puck Detection", new Dimension(600, 400), dlgDetRendererComp);
}
}
Controller.getInstance().imageDetectPucks(dlgDetPlotComp, dlgDetRendererComp, dlgDetTextComp);
this.runAsync("imgproc/NewCoverCalibration", this, false);
} catch (Exception ex) {
showException(ex);
}
}//GEN-LAST:event_buttonPuckDetActionPerformed
}//GEN-LAST:event_buttonDetectionCalibrateActionPerformed
private void buttonClearDetActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonClearDetActionPerformed
private void buttonCalibrationPanelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonCalibrationPanelActionPerformed
try {
Controller.getInstance().clearImageDetection();
this.evalAsync("cover_detection.set_renderer(show_panel(img))", true);
} catch (Exception ex) {
showException(ex);
}
}//GEN-LAST:event_buttonClearDetActionPerformed
}//GEN-LAST:event_buttonCalibrationPanelActionPerformed
private void checkExpertActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkExpertActionPerformed
@@ -1973,23 +2016,6 @@ public class MainPanel extends Panel {
execute("imgproc/CameraCalibration", null, false, true);
}//GEN-LAST:event_buttonCalibrateImageActionPerformed
private void buttonDetectCoverActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonDetectCoverActionPerformed
try {
execute("cover_detection_debug=True");
runAsync("imgproc/CoverDetection", null, false).handle((ret, ex) -> {
execute("cover_detection_debug=False", true);
if (ex != null) {
showException((Exception) ex);
} else {
showMessage("Return", String.valueOf(ret));
}
return ret;
});
} catch (Exception ex) {
showException(ex);
}
}//GEN-LAST:event_buttonDetectCoverActionPerformed
private void buttonCalibrateCoverActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonCalibrateCoverActionPerformed
onExpertCommand(null);
execute("imgproc/CoverDetectionCalibration", null, false, true);
@@ -2033,24 +2059,25 @@ public class MainPanel extends Panel {
private javax.swing.JToggleButton btViewRT;
private javax.swing.JButton buttonCalibrateCover;
private javax.swing.JButton buttonCalibrateImage;
private javax.swing.JButton buttonCalibrationPanel;
private javax.swing.JToggleButton buttonCamera;
private javax.swing.JButton buttonClearDet;
private javax.swing.JButton buttonConfig;
private javax.swing.JButton buttonDetectCover;
private javax.swing.JButton buttonDetectionCalibrate;
private javax.swing.JToggleButton buttonDrawing;
private javax.swing.JButton buttonExpertCommands;
private javax.swing.JButton buttonPuckDet;
private javax.swing.ButtonGroup buttonGroup1;
private javax.swing.JButton buttonRecovery;
private javax.swing.JButton buttonRelease;
private javax.swing.JCheckBox checkExpert;
private ch.psi.mxsc.DevicesPanel devicesPanel;
private javax.swing.Box.Filler filler1;
ch.psi.mxsc.HexiposiPanel hexiposiPanel;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel13;
private javax.swing.JLabel jLabel15;
private javax.swing.JLabel jLabel16;
private javax.swing.JLabel jLabel19;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel20;
private javax.swing.JLabel jLabel23;
private javax.swing.JLabel jLabel24;
@@ -2104,6 +2131,8 @@ public class MainPanel extends Panel {
private javax.swing.JProgressBar progressLN2;
private javax.swing.JTable tablePucks;
private javax.swing.JTable tableSamples;
private javax.swing.JTextField textCoverDet;
private javax.swing.JTextField textCoverMove;
private javax.swing.JTextField textPuckDatamatrix;
private javax.swing.JTextField textSampleDatamatrix;
// End of variables declaration//GEN-END:variables

View File

@@ -332,20 +332,7 @@ public class Puck extends DeviceBase {
public boolean isSegmentSelected() {
/*
switch(Integer.valueOf(Controller.getInstance().getHexaposiPosition())){
case 1: return getSegment()=='A';
case 2: return getSegment()=='B';
case 3: return getSegment()=='C';
case 4: return getSegment()=='D';
case 5: return getSegment()=='E';
case 6: return getSegment()=='F';
}
} catch(Exception ex){
}
return false;
*/
return ("" + getSegment()).equalsIgnoreCase(Controller.getInstance().getHexiposiPosition());
}
public int getIndex() {