import ie.dcu.segment.painters.SegmentationPainter;
import ie.dcu.swt.*;
import ie.dcu.swt.event.*;
-import ie.dcu.apps.ist.dialogs.PopUpLabelDialog;
import java.lang.reflect.InvocationTargetException;
import java.net.*;
init();
}
-
/**
* Initialize.
*/
Tool.Foreground.action.setEnabled(false);
Tool.Background.action.setEnabled(false);
view.removeContextChangeListener(eventHandler);
- view.getImageControl().getCanvas().addMouseListener(popupListener);
+ view.addPopupListener();
if(!(view.getTool() == null))
{
view.getTool().detach();
}
else
{
- view.getImageControl().getCanvas().removeMouseListener(popupListener);
+ view.removePopupListener();
view.addContextChangeListener(eventHandler);
view.getTool().attach(view.getImageControl());
}
}
};
- private final MouseListener popupListener = new MouseListener() {
-
- public void mouseUp(MouseEvent event) {
- // For the right click
- if(event.button == 3)
- {
- PopUpLabelDialog dialog = new PopUpLabelDialog(getShell());
- PopUpLabelDialog.Result result = dialog.open();
- if (result != null)
- {
- String lab = null;
- if(result.comboText.indexOf('{') != -1)
- {
- lab = result.comboText.substring(0,result.comboText.indexOf('{')-1);
- }
- else
- {
- lab = result.comboText;
- }
- System.out.println("selected"+lab);
- comboLabel.setText(result.comboText);
- execute(Tool.AssignButton, null);
- }
- }
- else if(event.button == 1)
- {
- System.out.println("Mask number "+view.getContext().getMasks().size());
- //view.highlightClickedSegment(event.x,event.y);
- repaint();
- }
- }
- public void mouseDown(MouseEvent e)
- {
- }
- public void mouseDoubleClick(MouseEvent e)
- {
- }
-
- };
+
/**
* Class that prevents segmentation algorithms crashing the application
import ie.dcu.apps.ist.controllers.AnnotationTool;
+import ie.dcu.apps.ist.dialogs.PopUpLabelDialog;
import ie.dcu.apps.ist.event.*;
import ie.dcu.apps.ist.views.SegmentationView;
import ie.dcu.segment.SegmentationContext;
listeners.remove(listener);
}
+ public void addPopupListener() {
+ view.getCanvas().addMouseListener(popupListener);
+ }
+
+ public void removePopupListener() {
+ view.getCanvas().removeMouseListener(popupListener);
+ }
private void fireContextChanged(SegmentationContext old) {
ContextChangedEvent e = null;
}
/**
- * For highlighting the mouse clicked segment in Labelling Mode.
+ * For Enabling the mouse clicked segment in Labelling Mode.
* @param Mosue clicked points x,y
*/
- public void highlightClickedSegment(int x, int y) {
- ctx.highlightClickedSegment(x,y);
+ public void enableClickedSegment(Point mouseClickedPoint) {
+ ctx.enableClickedSegment(mouseClickedPoint);
}
}
};
+ private final MouseListener popupListener = new MouseListener() {
+
+ public void mouseUp(MouseEvent event) {
+ Point mouseClickedPoint = new Point(event.x,event.y);
+ // For the right click
+ if(event.button == 3)
+ {
+ PopUpLabelDialog dialog = new PopUpLabelDialog(getShell());
+ PopUpLabelDialog.Result result = dialog.open();
+ if (result != null)
+ {
+ String lab = null;
+ if(result.comboText.indexOf('{') != -1)
+ {
+ lab = result.comboText.substring(0,result.comboText.indexOf('{')-1);
+ }
+ else
+ {
+ lab = result.comboText;
+ }
+ System.out.println("selected"+lab);
+ //comboLabel.setText(result.comboText);
+ //execute(Tool.AssignButton, null);
+ }
+ }
+ else if(event.button == 1)
+ {
+ if(view.imageContains(mouseClickedPoint))
+ {
+ ctx.enableClickedSegment(view.canvasToImage(mouseClickedPoint));
+ }
+ repaint();
+ }
+ }
+ public void mouseDown(MouseEvent e)
+ {
+ }
+ public void mouseDoubleClick(MouseEvent e)
+ {
+ }
+
+ };
+
/**
* Listens for annotations and updates the buffer and view accordingly.
*/
}
public final void formSegmentationObject() {
+ // Makes needsHighlighting <code>False</code> for all the previous segments.
+ disableAllSegments(false);
+ // Set needsHighlighting <code>True</code> for the current segment.
+ segmentationMask.enabled = true;
segmentationMaskObjects.add(segmentationMask);
// Making a new segmentationObject after storing the current SegmentationObject
return segmentationMaskObjects;
}
+
/**
* For highlighting the clicked segmentObject
* @param x, mouse clicked point x
* @param y, mouse clicked point y
*/
- public void highlightClickedSegment(int x, int y) {
- mouseClickedPoint.x = x;
- mouseClickedPoint.y = y;
+ public void enableClickedSegment(Point mouseClickedPoint) {
+
+ for(SegmentationMask segmentMaskObject : segmentationMaskObjects)
+ {
+ if(segmentMaskObject.getPixel(mouseClickedPoint.x, mouseClickedPoint.y) == 1)
+ {
+ // Disable all previous segments
+ disableAllSegments(false);
+ // Enable the currently clicked segment.
+ segmentMaskObject.enabled = true;
+ }
+ }
}
-
- public Point getMouseClickedPoint()
+
+ public void disableAllSegments(boolean value)
{
- return mouseClickedPoint;
+ for(SegmentationMask maskObject : segmentationMaskObjects)
+ maskObject.enabled = value;
}
/**
*/
public final int width;
+ /**
+ * The total number of layers formed.
+ */
+ public static int numberOfLayers;
+
+ /**
+ * The layering number of the segmentation mask.
+ */
+ public int layerNumber;
+ /**
+ * Whether the segment needs to be enabled(highlighted) or not ?
+ */
+ public boolean enabled;
+
/**
* The height of the segmentation mask.
*/
super(height, width);
this.width = width;
this.height = height;
+ this.layerNumber = ++numberOfLayers;
+ this.enabled = false;
clear();
}
fill(UNKNOWN);
}
- /**
- * forms a segmentation object and stores it in an arrayList
- */
-
-
/**
* Get the offset of pixel (x, y).
*
// Paint image
gc.drawImage(ctx.getImage(), 0, 0);
- Point mouseClickedPoint = ctx.getMouseClickedPoint();
-
- // Paint masks
+ // Paint all masks skipping the enabled mask.
if(ctx.getMasks().size() > 0)
{
- // For drawing all the previous masks.
+ // For drawing all the disabled masks.
for(SegmentationMask mask : ctx.getMasks())
{
- // Blending of background pixel values while pasting the last mask only
- if(ctx.getMasks().indexOf(mask) == ctx.getMasks().size()-1)
+ // Skipping the enabled segment from painting. We will paint the enabled segment at last.
+ if(mask.enabled == true)
{
- createVisibleMask(mask,true);
- gc.drawImage(maskImage, 0, 0);
+ continue;
}
else
{
createVisibleMask(ctx.getMask(),false);
gc.drawImage(maskImage, 0, 0);
}
+ // Painting the enabled mask.
+ if(ctx.getMasks().size() > 0)
+ {
+ // For drawing all the previous masks.
+ for(SegmentationMask mask : ctx.getMasks())
+ {
+ // Blending of background pixel values while pasting the last mask only
+ if(mask.enabled == true)
+ {
+ createVisibleMask(mask,true);
+ gc.drawImage(maskImage, 0, 0);
+ }
+ }
+ }
+ // Very initial mask, which has not yet been turned into an object.
else
{
createVisibleMask(ctx.getMask(),true);
// Commit changes
im.endPaint();
}
-
-
+ /**
+ *
+ * @param mask
+ * Mask object to be drawn.
+ * @param isFirstObject
+ * If set to <code>True</code> will blend the background and fore ground pixels.
+ */
private void createVisibleMask(SegmentationMask mask,boolean isFirstObject) {
+
dispose();
+
if (isNewMaskDataRequired(mask.getBounds())) {
maskData = createMaskData(mask.getBounds());
}