Package chunmap.app.tools

Source Code of chunmap.app.tools.SelectTool

/**
* Copyright (c) 2009-2011, chunquedong(YangJiandong)
*
* This file is part of ChunMap project
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE(Version >=3)
*
* History:
*     2010-05-05  Jed Young  Creation
*/
package chunmap.app.tools;

import java.awt.AWTEvent;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.util.List;

import chunmap.app.bench.AbstractTool;
import chunmap.app.bench.EventType;
import chunmap.data.feature.Feature;
import chunmap.data.provider.LayerFactory;
import chunmap.model.coord.Transform;
import chunmap.model.elem.Envelope;
import chunmap.util.CMEventListenerList;
import chunmap.view.layer.Layer;
import chunmap.view.layer.VectorLayer;
import chunmap.view.render.ArrowSymbol;
import chunmap.view.render.GeneralSymbol;
import chunmap.view.render.Style2D;
import chunmap.view.render.Symbol;

/**
* @author chunquedong
*
*/
public class SelectTool extends AbstractTool {

  private void mouseClicked(MouseEvent e) {
    double x = e.getX();
    double y = e.getY();
    double d = 5d;
    double minx = x - d;
    double miny = y - d;
    double maxx = x + d;
    double maxy = y + d;
    Envelope env = new Envelope(minx, miny, maxx, maxy);
    Transform trans = map.getView().screen2World();
    Envelope env2 = env.transform(trans);
    select(env2);
  }
 
  public CMEventListenerList onSelectChange=new CMEventListenerList();

  private void select(Envelope env) {

    SelectIterator it = new SelectIterator(env);
    List<Layer> layers = map.getLayerCollection().getLayers();
    for (Layer layer : layers) {
      if (layer instanceof VectorLayer) {
        VectorLayer vl = (VectorLayer) layer;
        if (vl.isSelectabel()){
          vl.getFeatures().select(map.getView().getBufferEnvelop(), it);
        }
      }
    }
    finish(it.features);
    onSelectChange.fire(it.features);
    map.refreshMap();
  }
 
  public void finish(List<Feature> features) {
    if (features.size() == 0)
        {
            map.getLayerCollection().setSelectedLayer(null);
            return;
        }
   
    VectorLayer layer = (VectorLayer) LayerFactory.createFeatureLayer(features);
    Style2D style = new Style2D();
    style.setNeedArea(false);

    final ArrowSymbol symbol = new ArrowSymbol();
   
    style.setPointSize(15);
    style.setLineColor(Color.magenta);
    style.setStroke(new BasicStroke(3));
    style.setPointColor(Color.magenta);

    layer.setDefaultStyle(new Symbol[]{new GeneralSymbol(style),symbol});
    map.getLayerCollection().setSelectedLayer(
        layer);
  }

  @Override
  public boolean actionEvent(AWTEvent event, EventType type) {
    if (MouseEvent.MOUSE_CLICKED != event.getID()) return true;
   
    MouseEvent e = (MouseEvent) event;
    mouseClicked(e);
   
    return true;
  }
}
TOP

Related Classes of chunmap.app.tools.SelectTool

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.