Commit d2cff488 authored by Mario Chromik's avatar Mario Chromik
Browse files

Introducing action listener to SurfaceMaskPanel

parent 5a1db19f
Loading
Loading
Loading
Loading
+23 −14
Original line number Diff line number Diff line
@@ -9,16 +9,14 @@ import cz.fidentis.analyst.data.face.HumanFace;
import cz.fidentis.analyst.data.shapes.SurfaceMask;
import cz.fidentis.analyst.data.shapes.SurfaceMask2D;
import cz.fidentis.analyst.gui.task.interactivemask.InteractiveMaskTaskNoParallel;
import java.awt.Graphics2D;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseMotionAdapter;
import java.util.ArrayList;
import java.awt.event.MouseEvent;
import java.awt.geom.QuadCurve2D;


/**
@@ -26,11 +24,13 @@ import java.awt.geom.QuadCurve2D;
 * @author Mario Chromik
 */
public class SurfaceMaskPanel extends CurveRenderingPanel {
    private Canvas canvas;
    /**private Canvas canvas;
    private HumanFace face;
    */

    private final SurfaceMask2D surfaceMask = new SurfaceMask2D();

    private ActionListener panelListener;

    /**
     * Constructor setting mouse listeners and drawing an initial mask.
@@ -42,17 +42,21 @@ public class SurfaceMaskPanel extends CurveRenderingPanel {
        addMouseMotionListener(new MotionAdapter());
        drawInitialRectangleSM();
    }

    /**
    /**
     * Sets canvas and face
     * @param canvas input canvas
     * @param face input face
     */
     *
    public void setCanvasAndFace(Canvas canvas, HumanFace face) {
        this.canvas = canvas;
        this.face = face;
    }
    */

    public SurfaceMask2D getSurfaceMask() {
        return surfaceMask;
    }

    /**
     * Draws an initial shape for surface mask
@@ -87,8 +91,8 @@ public class SurfaceMaskPanel extends CurveRenderingPanel {
                    surfaceMask.getMaskPoints().get(0).x, surfaceMask.getMaskPoints().get(0).y);
        }
    }
/**

    /**
     * Draws curves between points
     * @param g panel graphics
     * @param controlPoints a list of control points
@@ -121,30 +125,30 @@ public class SurfaceMaskPanel extends CurveRenderingPanel {
        q.setCurve(x, y, x1, y1, x2, y2);
        g2.draw(q);
    }
    */



    /**
     * Projects points onto face using asynchronous thread
     */
     /
    private void project() {
        /** Code used to intialize task and project points in parellel
        //cancel if task is already running
         task.cancel(false);
         task = new InteractiveMaskTask(canvas, pointsToProject, getPanelWidth(), getPanelHeight());
         task.execute();
        **/
        /
        InteractiveMaskTaskNoParallel task = new InteractiveMaskTaskNoParallel(canvas, surfaceMask.getPointsToProject(), getPanelWidth(), getPanelHeight());
        task.project();

    }

    */

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        face.setSurfaceMask(new SurfaceMask());
        //face.setSurfaceMask(new SurfaceMask());
        g.setColor(Color.BLACK);

        if (surfaceMask.getMaskPoints().size() >= 2) {
@@ -168,6 +172,10 @@ public class SurfaceMaskPanel extends CurveRenderingPanel {
        return (int)this.getSize().getHeight();
    }

    public void addActionListener(ActionListener listener) {
        this.panelListener = listener;
    }

    /**
     * Custom mouse listener to handle drawing a mask
     * @author Mario Chromik
@@ -186,7 +194,8 @@ public class SurfaceMaskPanel extends CurveRenderingPanel {
        @Override
        public void mouseReleased(MouseEvent e) {
            surfaceMask.setSelectedPoint(null);
            project();
            //project();
            panelListener.actionPerformed( new ActionEvent(this, ActionEvent.ACTION_PERFORMED, null));
        }
    }

+8 −2
Original line number Diff line number Diff line
package cz.fidentis.analyst.gui.task.interactivemask;

import cz.fidentis.analyst.canvas.Canvas;
import cz.fidentis.analyst.data.shapes.SurfaceMask2D;
import cz.fidentis.analyst.engines.face.events.HumanFaceSelectedEvent;
import cz.fidentis.analyst.data.face.HumanFaceEvent;
import cz.fidentis.analyst.data.face.HumanFaceListener;
@@ -30,7 +31,7 @@ public class InteractiveMaskAction extends ControlPanelAction<InteractiveMaskPan
    public InteractiveMaskAction(Canvas canvas, FacesProxy faces, JTabbedPane topControlPane) {
        super(canvas, faces, topControlPane);
        InteractiveMaskPanel pl = new InteractiveMaskPanel(this);
        pl.getSurfaceMaskPanel1().setCanvasAndFace(canvas, faces.getPrimaryFace());
        //pl.getSurfaceMaskPanel1().setCanvasAndFace(canvas, faces.getPrimaryFace());
        setControlPanel(pl);

        setShowHideCode(
@@ -50,13 +51,18 @@ public class InteractiveMaskAction extends ControlPanelAction<InteractiveMaskPan
        }
    }

    private void project() {
        SurfaceMask2D mask = getControlPanel().getSurfaceMask();
    }


    @Override
    public void actionPerformed(ActionEvent ae) {
        String action = ae.getActionCommand();

        switch (action) {
            case InteractiveMaskPanel.ACTION_PROJECT:
                project();
                break;
            case InteractiveMaskPanel.ACTION_DRAW:
                mode = InteractiveMaskPanel.ACTION_DRAW;
                break;
+10 −1
Original line number Diff line number Diff line
package cz.fidentis.analyst.gui.task.interactivemask;

import cz.fidentis.analyst.data.shapes.SurfaceMask2D;
import cz.fidentis.analyst.gui.elements.SurfaceMaskPanel;
import cz.fidentis.analyst.gui.task.ControlPanel;
import cz.fidentis.analyst.gui.task.featurepoints.FeaturePointsPanel;
@@ -19,6 +20,8 @@ public class InteractiveMaskPanel extends ControlPanel {
    public static final String ACTION_EDIT = "edit interactive mask";
    public static final String ACTION_VIEW = "view interactive mask";

    public static final String ACTION_PROJECT = "project interactive mask";
    
    
    /**
     * Creates new form InteractiveMaskPanel
@@ -31,8 +34,14 @@ public class InteractiveMaskPanel extends ControlPanel {
        draw.addActionListener(createListener(action, ACTION_DRAW));
        edit.addActionListener(createListener(action, ACTION_EDIT));
        view.addActionListener(createListener(action, ACTION_VIEW));
        surfaceMaskPanel1.addActionListener(createListener(action, ACTION_PROJECT));
    }

    public SurfaceMask2D getSurfaceMask() {
        return surfaceMaskPanel1.getSurfaceMask();
    }


    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always