Loading GUI/src/main/java/cz/fidentis/analyst/gui/elements/SurfaceMaskPanel.java +23 −14 Original line number Diff line number Diff line Loading @@ -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; /** Loading @@ -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. Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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) { Loading @@ -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 Loading @@ -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)); } } Loading GUI/src/main/java/cz/fidentis/analyst/gui/task/interactivemask/InteractiveMaskAction.java +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; Loading Loading @@ -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( Loading @@ -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; Loading GUI/src/main/java/cz/fidentis/analyst/gui/task/interactivemask/InteractiveMaskPanel.java +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; Loading @@ -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 Loading @@ -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 Loading Loading
GUI/src/main/java/cz/fidentis/analyst/gui/elements/SurfaceMaskPanel.java +23 −14 Original line number Diff line number Diff line Loading @@ -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; /** Loading @@ -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. Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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) { Loading @@ -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 Loading @@ -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)); } } Loading
GUI/src/main/java/cz/fidentis/analyst/gui/task/interactivemask/InteractiveMaskAction.java +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; Loading Loading @@ -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( Loading @@ -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; Loading
GUI/src/main/java/cz/fidentis/analyst/gui/task/interactivemask/InteractiveMaskPanel.java +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; Loading @@ -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 Loading @@ -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 Loading