package org.openjump.core.ui.plot;
import java.awt.Color;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.math.plot.plots.ScatterPlot;
import org.math.plot.render.AbstractDrawer;
import com.vividsolutions.jump.feature.Feature;
import com.vividsolutions.jump.feature.FeatureUtil;
import com.vividsolutions.jump.workbench.model.Layer;
import com.vividsolutions.jump.workbench.plugin.PlugInContext;
import com.vividsolutions.jump.workbench.ui.zoom.ZoomToSelectedItemsPlugIn;
public class ScatterPlotOJ extends ScatterPlot {
double[][] XY;
int[] pointId;
PlugInContext context = null;
Layer layer = null;
private ZoomToSelectedItemsPlugIn zoomToSelectedItemsPlugIn = new ZoomToSelectedItemsPlugIn();
/**
* [sstein] constructor for use in O-JUMP
* @param n
* @param c
* @param _XY
* @param featureID
*/
public ScatterPlotOJ(String n, Color c, double[][] _XY, int[] featureID, PlugInContext context, Layer layer) {
super(n, c, AbstractDrawer.ROUND_DOT, AbstractDrawer.DEFAULT_DOT_RADIUS, _XY);
this.pointId = featureID;
XY = _XY;
this.context = context;
this.layer = layer;
}
public double[] isSelected(int[] screenCoordTest, AbstractDrawer draw) {
for (int i = 0; i < XY.length; i++) {
int[] screenCoord = draw.project(XY[i]);
if ((screenCoord[0] + note_precision > screenCoordTest[0]) && (screenCoord[0] - note_precision < screenCoordTest[0])
&& (screenCoord[1] + note_precision > screenCoordTest[1]) && (screenCoord[1] - note_precision < screenCoordTest[1])){
//System.out.println("fid of selected point: " + pointId[i]);
List features = layer.getFeatureCollectionWrapper().getFeatures();
Feature selFeature = null;
for (Iterator iter = features.iterator(); iter.hasNext();) {
Feature f = (Feature) iter.next();
if ( pointId[i] == f.getID()){
selFeature = f;
}
}
//context.getLayerViewPanel().getSelectionManager().clear();
//context.getLayerViewPanel().getSelectionManager().getFeatureSelection().selectItems(layer, selFeature);
Collection clickedFeatures = new ArrayList();
clickedFeatures.add(selFeature);
try{
zoomToSelectedItemsPlugIn.flash(
FeatureUtil.toGeometries(clickedFeatures), context.getLayerViewPanel()); }
catch (Throwable t) {
context.getWorkbenchContext().getErrorHandler().handleThrowable(t);
}
//-- [sstein] modified to print FID as label
// but this results with problems in AbstractDrawer.drawCoordinate()
// since it will try to set the axes using the FID as well.
/*
double[] vals;
if (pointId !=null){
vals = new double[3];
vals[0] = XY[i][0];
vals[1] = XY[i][1];
vals[2] = pointId[i];
}
else{
vals = XY[i];
}
return vals;
*/
return XY[i];
}
}
return null;
}
}