package jaist.css.covis.fm; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Stroke; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.piccolo2d.event.PInputEvent; import org.piccolo2d.nodes.PPath; import org.piccolo2d.util.PAffineTransform; import jaist.css.covis.PPPath; /** * 範囲指定ズームのためのアクション * * @author miuramo * */ @SuppressWarnings("serial") public class ZoomRegionStateAction extends StateAction { PPPath selection; Point2D cp; private Stroke[] strokes = null; private float strokeNum = 0; final static int NUM_STROKES = 10; final static int DASH_WIDTH = 15; FlowMenu_TMRG ownersv; public ZoomRegionStateAction(FlowMenu_TMRG f, String n) { super(f, n); float[] dash = { DASH_WIDTH, DASH_WIDTH }; strokes = new Stroke[NUM_STROKES]; for (int i = 0; i < NUM_STROKES; i++) { strokes[i] = new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, dash, i); } ownersv = (FlowMenu_TMRG) f; } public void drag(PInputEvent e) { super.drag(e); Point2D cmp = owner.camerap; cp = e.getPositionRelativeTo(owner.camera); selection.setPathToRectangle((float) cmp.getX(), (float) cmp.getY(), (float) (cp.getX() - cmp.getX()), (float) (cp.getY() - cmp .getY())); float origStrokeNum = strokeNum; strokeNum = (strokeNum + 0.5f) % NUM_STROKES; // Increment by partial // steps to slow down // animation if ((int) strokeNum != (int) origStrokeNum) { selection.setStroke(strokes[(int) strokeNum]); } } public void endDrag(PInputEvent e) { Point2D cmp = owner.camerap; cp = e.getPositionRelativeTo(owner.camera); removeAllChildren(); if (cmp.getX() < cp.getX() && cmp.getY() < cp.getY()) { // カメラ座標から,グローバル(パネル)座標への変換 PAffineTransform at = owner.camera.getViewTransform(); Rectangle2D globalb = selection.getGlobalBounds(); Rectangle2D layerb = new Rectangle2D.Double(); at.inverseTransform(globalb, layerb); owner.camera.animateViewToCenterBounds(layerb, true, 1000); } } public void paint() { Point2D cmp = owner.camerap; selection = new PPPath(); selection.setPathToRectangle((float) cmp.getX(), (float) cmp.getY(), 0, 0); selection.setStrokePaint(Color.blue); selection.setPaint(null); selection.setStroke(strokes[0]); addChild(selection); } }