diff --git a/src/main/java/ch/psi/mxsc/BasePlate.java b/src/main/java/ch/psi/mxsc/BasePlate.java index 8c97562..b786e57 100644 --- a/src/main/java/ch/psi/mxsc/BasePlate.java +++ b/src/main/java/ch/psi/mxsc/BasePlate.java @@ -7,10 +7,14 @@ import ch.psi.pshell.device.Device; import ch.psi.pshell.device.DeviceBase; import ch.psi.pshell.imaging.DimensionDouble; import ch.psi.pshell.imaging.PointDouble; -import ch.psi.utils.swing.MainFrame; +import ch.psi.pshell.imaging.Utils; + import ch.psi.utils.swing.MainFrame; import java.awt.Color; +import java.awt.Component; import java.awt.Graphics2D; +import java.awt.Point; import java.awt.Rectangle; +import java.awt.image.BufferedImage; import java.io.IOException; import java.util.ArrayList; @@ -155,19 +159,57 @@ public class BasePlate extends DeviceBase { } boolean drawContour; + + enum DrawMode{ + fill, + center, + left, + right, + top, + bottom + } - void draw(Graphics2D g, Rectangle plotRect, boolean drawSamples, boolean drawIds, boolean drawContour) { - this.plotRect = plotRect; - this.drawContour = drawContour; - if (drawContour){ - g.setColor(getColor()); - g.fillOval((int)(plotRect.width*0.05), (int)(plotRect.height * 0.05), (int)(plotRect.width*0.90), (int)(plotRect.height*0.90)); + void draw(Graphics2D g, Rectangle plotRect, boolean drawSamples, boolean drawIds, boolean drawContour, DrawMode mode, BufferedImage img) { + if (mode != DrawMode.fill){ + int length = Math.min(plotRect.width, plotRect.height); + Point center= new Point(plotRect.x + plotRect.width/2, plotRect.y + plotRect.height/2); //center; + switch (mode){ + case left: + center.setLocation(length/2, center.y); + break; + case right: + center.setLocation(plotRect.width - length/2, center.y); + break; + case top: + center.setLocation(center.x, length/2); + break; + case bottom: + center.setLocation(center.x, plotRect.height - length/2); + break; + } + + plotRect = new Rectangle(center.x - length/2, center.y - length/2, length, length); + } + this.plotRect = plotRect; + this.drawContour = drawContour; + Rectangle 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.drawImage(img, boundingBox.x, boundingBox.y, null); + } + boolean drawBackground = (img==null); + + if (drawContour){ + if (drawBackground){ + g.setColor(getColor()); + g.fillOval(boundingBox.x, boundingBox.y, boundingBox.width, boundingBox.height); + } g.setColor(getBorderColor()); - g.drawOval((int)(plotRect.width*0.05), (int)(plotRect.height * 0.05), (int)(plotRect.width*0.90), (int)(plotRect.height*0.90)); + g.drawOval(boundingBox.x, boundingBox.y, boundingBox.width, boundingBox.height); } for (Puck puck : getPucks()) { - puck.draw(g, null, drawSamples, drawIds, this) ; + puck.draw(g, null, drawSamples, drawIds, drawBackground, this) ; } } diff --git a/src/main/java/ch/psi/mxsc/BasePlatePanel.java b/src/main/java/ch/psi/mxsc/BasePlatePanel.java index 787d1b5..033c61a 100644 --- a/src/main/java/ch/psi/mxsc/BasePlatePanel.java +++ b/src/main/java/ch/psi/mxsc/BasePlatePanel.java @@ -3,9 +3,15 @@ */ package ch.psi.mxsc; +import ch.psi.mxsc.BasePlate.DrawMode; +import ch.psi.pshell.core.Context; +import ch.psi.pshell.imaging.Data; +import ch.psi.pshell.imaging.ImageListener; +import ch.psi.pshell.imaging.Source; import ch.psi.pshell.swing.DevicePanel; import ch.psi.utils.State; import ch.psi.utils.swing.SwingUtils; +import java.awt.Component; import java.awt.Point; import java.awt.Dimension; import java.awt.Graphics; @@ -14,6 +20,7 @@ import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.awt.image.BufferedImage; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JMenuItem; @@ -103,11 +110,12 @@ public class BasePlatePanel extends DevicePanel { Rectangle platePlotRect; Rectangle puckPlotRect; + Source source; @Override public void paint(Graphics g) { super.paint(g); - if (getDevice() != null) { + if (getDevice() != null) { Graphics2D g2d = (Graphics2D) g; Dimension size = getSize(); if ((size.width > 40) && (size.height > 40)) { @@ -122,38 +130,64 @@ public class BasePlatePanel extends DevicePanel { case single: platePlotRect = plotRect; puckPlotRect = null; - getDevice().draw(g2d, platePlotRect, true, false, true); + getDevice().draw(g2d, platePlotRect, true, false, true, DrawMode.center, img); break; case horizontal: platePlotRect = new Rectangle(plotRect.x, plotRect.y, plotRect.width / 2, plotRect.height); - getDevice().draw(g2d, platePlotRect, false, true, true); + getDevice().draw(g2d, platePlotRect, false, true, true, DrawMode.fill, null); if (selectedPuck!=null){ puckPlotRect = new Rectangle(plotRect.x + plotRect.width / 2 + borderPuck, plotRect.y + borderPuck, plotRect.width / 2 - 2 * borderPuck, plotRect.height - 2 * borderPuck); - selectedPuck.draw(g2d, puckPlotRect, true, false, null); + selectedPuck.draw(g2d, puckPlotRect, true, false, true, null); } break; case vertical: platePlotRect = new Rectangle(plotRect.x, plotRect.y, plotRect.width, plotRect.height / 2); - getDevice().draw(g2d, platePlotRect, false, true, true); + getDevice().draw(g2d, platePlotRect, false, true, true, DrawMode.fill, null); if (selectedPuck!=null){ puckPlotRect = new Rectangle(plotRect.x + borderPuck, plotRect.y + plotRect.height / 2 + borderPuck, plotRect.width - 2 * borderPuck, plotRect.height / 2 - 2 * borderPuck); - selectedPuck.draw(g2d, puckPlotRect, true, false, null); + selectedPuck.draw(g2d, puckPlotRect, true, false, true, null); } break; case overlapped: //getDevice().draw(g2d, plotRect, false, true); platePlotRect = new Rectangle(plotRect.x - ((int) (plotRect.width * 0.14)), plotRect.y - ((int) (plotRect.height * 0.14)), (int) (plotRect.width * 1.28), (int) (plotRect.height * 1.28)); - getDevice().draw(g2d, platePlotRect, false, true, false); + getDevice().draw(g2d, platePlotRect, false, true, false, DrawMode.fill, null); if (selectedPuck!=null){ int overlappedSize = (int) (1.5 * selectedPuck.getDrawSize()); puckPlotRect = new Rectangle((int) (plotRect.getCenterX() - overlappedSize / 2), (int) (plotRect.getCenterY() - overlappedSize / 2), overlappedSize, overlappedSize); - selectedPuck.draw(g2d, puckPlotRect, true, false, null); + selectedPuck.draw(g2d, puckPlotRect, true, false, true, null); } break; } } } } + + BufferedImage img; + ImageListener imageListener = new ImageListener() { + @Override + public void onImage(Object origin, BufferedImage image, Data data) { + img = image; + repaint(); + } + + @Override + public void onError(Object origin, Exception ex) { + img = null; + repaint(); + } + }; + void setCameraView(Source source){ + img = null; + if (this.source!=null){ + this.source.removeListener(imageListener); + } + this.source = source; + if (source!=null){ + source.addListener(imageListener); + } + repaint(); + } MouseAdapter mouseAdapter = new MouseAdapter() { @Override diff --git a/src/main/java/ch/psi/mxsc/MainPanel.form b/src/main/java/ch/psi/mxsc/MainPanel.form index 363c364..3d35a8f 100644 --- a/src/main/java/ch/psi/mxsc/MainPanel.form +++ b/src/main/java/ch/psi/mxsc/MainPanel.form @@ -24,6 +24,7 @@ + @@ -47,8 +48,10 @@ - + + + @@ -72,7 +75,7 @@ - + @@ -81,32 +84,28 @@ - - + + - - - + + + - + - - - - - - - - + + + + @@ -180,7 +179,7 @@ - + @@ -332,7 +331,7 @@ - + @@ -405,7 +404,7 @@ - + @@ -491,7 +490,7 @@ - + @@ -560,7 +559,7 @@ - + @@ -570,7 +569,7 @@ - + @@ -659,7 +658,7 @@ - + @@ -698,5 +697,19 @@ + + + + + + + + + + + + + + diff --git a/src/main/java/ch/psi/mxsc/MainPanel.java b/src/main/java/ch/psi/mxsc/MainPanel.java index 61f73e0..949d52c 100644 --- a/src/main/java/ch/psi/mxsc/MainPanel.java +++ b/src/main/java/ch/psi/mxsc/MainPanel.java @@ -5,7 +5,12 @@ package ch.psi.mxsc; import ch.psi.pshell.device.Device; +import ch.psi.pshell.imaging.Source; import ch.psi.pshell.ui.Panel; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.JFrame; +import javax.swing.JPanel; /** * @@ -20,7 +25,7 @@ public class MainPanel extends Panel { } - @Override + @Override public void onInitialize(int runCount) { Controller.getInstance().onInitialize(runCount); basePlatePanel.setDevice((Device) getDevice("BasePlate")); @@ -39,7 +44,7 @@ public class MainPanel extends Panel { private void initComponents() { basePlatePanel = new ch.psi.mxsc.BasePlatePanel(); - processVariablePanel1 = new ch.psi.pshell.swing.ProcessVariablePanel(); + buttonCamera = new javax.swing.JToggleButton(); jPanel1 = new javax.swing.JPanel(); jPanel3 = new javax.swing.JPanel(); jSeparator1 = new javax.swing.JSeparator(); @@ -85,27 +90,30 @@ public class MainPanel extends Panel { led15 = new ch.psi.pshell.swing.Led(); jLabel17 = new javax.swing.JLabel(); jLabel18 = new javax.swing.JLabel(); + panelDewar = new ch.psi.pshell.swing.ProcessVariablePanel(); - basePlatePanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Puck Positions")); + basePlatePanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Dewar")); - processVariablePanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Dewar Light", javax.swing.border.TitledBorder.RIGHT, javax.swing.border.TitledBorder.DEFAULT_POSITION)); - processVariablePanel1.setShowAdvanced(false); - processVariablePanel1.setShowButtons(false); - processVariablePanel1.setShowSlider(true); + buttonCamera.setText("Image"); + buttonCamera.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonCameraActionPerformed(evt); + } + }); javax.swing.GroupLayout basePlatePanelLayout = new javax.swing.GroupLayout(basePlatePanel); basePlatePanel.setLayout(basePlatePanelLayout); basePlatePanelLayout.setHorizontalGroup( basePlatePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, basePlatePanelLayout.createSequentialGroup() - .addGap(0, 314, Short.MAX_VALUE) - .addComponent(processVariablePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 266, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(487, Short.MAX_VALUE) + .addComponent(buttonCamera)) ); basePlatePanelLayout.setVerticalGroup( basePlatePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, basePlatePanelLayout.createSequentialGroup() - .addGap(0, 0, Short.MAX_VALUE) - .addComponent(processVariablePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(basePlatePanelLayout.createSequentialGroup() + .addComponent(buttonCamera) + .addGap(0, 636, Short.MAX_VALUE)) ); jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("LN2 Level")); @@ -132,7 +140,7 @@ public class MainPanel extends Panel { .addGap(4, 4, 4) .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jSeparator2) - .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, 35, Short.MAX_VALUE))) + .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 35, Short.MAX_VALUE))) .addGroup(jPanel3Layout.createSequentialGroup() .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jSeparator3, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)) @@ -150,7 +158,7 @@ public class MainPanel extends Panel { jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(progressLN2, javax.swing.GroupLayout.DEFAULT_SIZE, 635, Short.MAX_VALUE) + .addComponent(progressLN2, javax.swing.GroupLayout.DEFAULT_SIZE, 653, Short.MAX_VALUE) .addGroup(jPanel3Layout.createSequentialGroup() .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) @@ -247,7 +255,7 @@ public class MainPanel extends Panel { .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel5)) .addComponent(jToggleButton1)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap(40, Short.MAX_VALUE)) ); jPanel4Layout.setVerticalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -289,7 +297,7 @@ public class MainPanel extends Panel { .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel7)) .addComponent(jButton1)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 40, Short.MAX_VALUE) .addComponent(hexiposiPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) ); @@ -339,7 +347,7 @@ public class MainPanel extends Panel { .addComponent(led7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel10))) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap(44, Short.MAX_VALUE)) ); jPanel7Layout.setVerticalGroup( jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -383,7 +391,7 @@ public class MainPanel extends Panel { .addGroup(jPanel8Layout.createSequentialGroup() .addComponent(jLabel13) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(textSample)) + .addComponent(textSample, javax.swing.GroupLayout.DEFAULT_SIZE, 175, Short.MAX_VALUE)) .addGroup(jPanel8Layout.createSequentialGroup() .addComponent(jLabel12) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) @@ -391,7 +399,7 @@ public class MainPanel extends Panel { .addGroup(jPanel8Layout.createSequentialGroup() .addComponent(jLabel11) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(textType, javax.swing.GroupLayout.DEFAULT_SIZE, 98, Short.MAX_VALUE))) + .addComponent(textType, javax.swing.GroupLayout.DEFAULT_SIZE, 141, Short.MAX_VALUE))) .addContainerGap()) ); @@ -436,7 +444,7 @@ public class MainPanel extends Panel { .addComponent(led15, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel18))) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap(40, Short.MAX_VALUE)) ); jPanel10Layout.setVerticalGroup( jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -452,6 +460,13 @@ public class MainPanel extends Panel { .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); + panelDewar.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Dewar Light", javax.swing.border.TitledBorder.LEFT, javax.swing.border.TitledBorder.DEFAULT_POSITION)); + panelDewar.setShowAdvanced(false); + panelDewar.setShowButtons(false); + panelDewar.setShowLimitButtons(false); + panelDewar.setShowSlider(true); + panelDewar.setShowStop(false); + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( @@ -463,7 +478,8 @@ public class MainPanel extends Panel { .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(roomTempBasePlatePanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(panelDewar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup() @@ -484,7 +500,9 @@ public class MainPanel extends Panel { .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() .addComponent(roomTempBasePlatePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(panelDewar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(basePlatePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) @@ -499,9 +517,19 @@ public class MainPanel extends Panel { ); }// //GEN-END:initComponents + private void buttonCameraActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonCameraActionPerformed + try{ + Source source = buttonCamera.isSelected() ? (Source)this.getDevice("img"): null; + basePlatePanel.setCameraView(source); + } catch (Exception ex) { + showException(ex); + } + }//GEN-LAST:event_buttonCameraActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables private ch.psi.mxsc.BasePlatePanel basePlatePanel; + private javax.swing.JToggleButton buttonCamera; private ch.psi.mxsc.HexiposiPanel hexiposiPanel1; private javax.swing.JButton jButton1; private javax.swing.JLabel jLabel1; @@ -541,7 +569,7 @@ public class MainPanel extends Panel { private ch.psi.pshell.swing.Led led5; private ch.psi.pshell.swing.Led led6; private ch.psi.pshell.swing.Led led7; - private ch.psi.pshell.swing.ProcessVariablePanel processVariablePanel1; + private ch.psi.pshell.swing.ProcessVariablePanel panelDewar; private javax.swing.JProgressBar progressLN2; private javax.swing.JProgressBar progressWater; private ch.psi.mxsc.RoomTempBasePlatePanel roomTempBasePlatePanel1; diff --git a/src/main/java/ch/psi/mxsc/Puck.java b/src/main/java/ch/psi/mxsc/Puck.java index 541c6e9..38ff5d5 100644 --- a/src/main/java/ch/psi/mxsc/Puck.java +++ b/src/main/java/ch/psi/mxsc/Puck.java @@ -255,19 +255,21 @@ public class Puck extends DeviceBase { Rectangle plotRect; - void draw (Graphics2D g, Rectangle plotRect, boolean drawSamples, boolean drawId, BasePlate enclosingPlate){ + void draw (Graphics2D g, Rectangle plotRect, boolean drawSamples, boolean drawId, boolean drawBackground, BasePlate enclosingPlate){ this.plotRect = plotRect; Point position = getDrawPosition(); int size = getDrawSize(); - g.setColor(getColor()); - g.fillOval(position.x - size / 2, position.y - size / 2, size, size); + if (drawBackground){ + g.setColor(getColor()); + g.fillOval(position.x - size / 2, position.y - size / 2, size, size); + } g.setColor(getBorderColor()); g.drawOval(position.x - size / 2, position.y - size / 2, size, size); if (drawSamples){ //Draw samples for (Sample sample: getSamples()) { - sample.draw(g); + sample.draw(g, drawBackground); } } diff --git a/src/main/java/ch/psi/mxsc/Sample.java b/src/main/java/ch/psi/mxsc/Sample.java index 635c8c0..1eb9fe6 100644 --- a/src/main/java/ch/psi/mxsc/Sample.java +++ b/src/main/java/ch/psi/mxsc/Sample.java @@ -164,12 +164,14 @@ public class Sample extends DeviceBase { return Color.GRAY; } - void draw (Graphics2D g){ + void draw (Graphics2D g, boolean drawBackground){ Point position = getDrawPosition(); int size = getDrawSize(); - g.setColor(getColor()); - g.fillOval(position.x - size / 2, position.y - size / 2, size, size); + if (drawBackground){ + g.setColor(getColor()); + g.fillOval(position.x - size / 2, position.y - size / 2, size, size); + } g.setColor(getBorderColor()); g.drawOval(position.x - size / 2, position.y - size / 2, size, size);