package oripa.paint.outline;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.geom.Line2D;
import java.util.Collection;
import java.util.Stack;
import javax.vecmath.Vector2d;
import oripa.paint.EditMode;
import oripa.paint.core.GraphicMouseAction;
import oripa.paint.core.LineSetting;
import oripa.paint.core.PaintContext;
import oripa.paint.util.PairLoop;
public class EditOutlineAction extends GraphicMouseAction {
public EditOutlineAction(){
setActionState(new SelectingVertexForOutline());
setEditMode(EditMode.OTHER);
}
private class DrawTempOutlines implements PairLoop.Block<Vector2d>{
private Graphics2D g2d;
public void execute(Graphics2D g2d, Collection<Vector2d> outlineVertices){
this.g2d = g2d;
g2d.setColor(Color.GREEN);
g2d.setStroke(LineSetting.STROKE_TMP_OUTLINE);
if(outlineVertices.size() > 1){
PairLoop.iterateWithCount(
outlineVertices, outlineVertices.size() - 1, this);
}
}
@Override
public boolean yield(Vector2d p0,
Vector2d p1) {
g2d.draw(new Line2D.Double(p0.x, p0.y, p1.x, p1.y));
return true;
}
}
@Override
public void onDraw(Graphics2D g2d, PaintContext context) {
// TODO Auto-generated method stub
super.onDraw(g2d, context);
this.drawPickCandidateVertex(g2d, context);
Stack<Vector2d> outlinevertices = context.getVertices();
// Shows the outline of the editing
int outlineVnum = outlinevertices.size();
if (outlineVnum != 0) {
(new DrawTempOutlines()).execute(g2d, outlinevertices);
Vector2d cv = (context.pickCandidateV == null)
? new Vector2d(context.getLogicalMousePoint().getX(), context.getLogicalMousePoint().getY())
: context.pickCandidateV;
g2d.draw(new Line2D.Double(outlinevertices.get(0).x,
outlinevertices.get(0).y,
cv.x, cv.y));
g2d.draw(new Line2D.Double(outlinevertices.get(outlineVnum - 1).x,
outlinevertices.get(outlineVnum - 1).y, cv.x, cv.y));
}
}
@Override
public void onPress(PaintContext context, AffineTransform affine,
boolean differentAction) {
// TODO Auto-generated method stub
}
@Override
public void onDrag(PaintContext context, AffineTransform affine,
boolean differentAction) {
// TODO Auto-generated method stub
}
@Override
public void onRelease(PaintContext context, AffineTransform affine,
boolean differentAction) {
// TODO Auto-generated method stub
}
}