package org.geotoolkit.pending.demo.rendering.customgraphicbuilder;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.Point;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Point2D;
import java.util.List;
import java.util.logging.Level;
import org.apache.sis.feature.FeatureExt;
import org.geotoolkit.data.FeatureCollection;
import org.geotoolkit.data.FeatureIterator;
import org.geotoolkit.data.query.QueryBuilder;
import org.geotoolkit.display.canvas.RenderingContext;
import org.geotoolkit.display.VisitFilter;
import org.geotoolkit.display.canvas.control.CanvasMonitor;
import org.geotoolkit.display.SearchArea;
import org.geotoolkit.display2d.canvas.J2DCanvas;
import org.geotoolkit.display2d.canvas.RenderingContext2D;
import org.geotoolkit.map.FeatureMapLayer;
import org.apache.sis.internal.referencing.j2d.AffineTransform2D;
import org.apache.sis.storage.DataStoreException;
import org.geotoolkit.display2d.primitive.GraphicJ2D;
import org.opengis.display.primitive.Graphic;
import org.opengis.feature.Feature;
import org.opengis.geometry.Envelope;
public class LinksGraphic extends GraphicJ2D{
private final FeatureMapLayer layer;
public LinksGraphic(J2DCanvas canvas, FeatureMapLayer layer){
super(canvas);
this.layer = layer;
}
@Override
public void paint(RenderingContext2D renderingContext) {
final CanvasMonitor monitor = renderingContext.getMonitor();
final Graphics2D g2d = renderingContext.getGraphics();
FeatureCollection collection = layer.getCollection();
try {
//we reproject our collection
collection = collection.subCollection(QueryBuilder.reprojected(
collection.getFeatureType().getName().toString(), renderingContext.getObjectiveCRS2D()));
} catch (DataStoreException ex) {
monitor.exceptionOccured(ex, Level.WARNING);
return;
}
g2d.setStroke(new BasicStroke(3));
renderingContext.switchToDisplayCRS();
final AffineTransform2D objToDisp = renderingContext.getObjectiveToDisplay();
final Point2D from = new Point2D.Double(0, 0);
final Point2D to = new Point2D.Double(0, 0);
final Color firstColor = Color.RED;
final FeatureIterator mainIte = collection.iterator();
try{
while(mainIte.hasNext()){
final Feature feature = mainIte.next();
//draw a line from each point to all other
final Geometry geom = (Geometry) FeatureExt.getDefaultGeometryAttributeValue(feature);
final Point center = geom.getCentroid();
from.setLocation(center.getX(), center.getY());
objToDisp.transform(from, from);
final Shape cercle = new java.awt.geom.Ellipse2D.Double(from.getX()-5, from.getY()-5, 10, 10);
g2d.setStroke(new BasicStroke(4));
g2d.setColor(Color.WHITE);
g2d.draw(cercle);
g2d.setPaint(firstColor);
g2d.fill(cercle);
g2d.setStroke(new BasicStroke(2));
g2d.setColor(Color.BLACK);
g2d.draw(cercle);
final FeatureIterator ite = collection.iterator();
try{
while(ite.hasNext()){
final Feature target = ite.next();
if(Math.random() > 0.1d) continue;
final Geometry targetgeom = (Geometry) FeatureExt.getDefaultGeometryAttributeValue(target);
final Point targetcenter = targetgeom.getCentroid();
to.setLocation(targetcenter.getX(), targetcenter.getY());
objToDisp.transform(to, to);
final Shape line = new java.awt.geom.Line2D.Double(from,to);
g2d.setStroke(new BasicStroke( (float)Math.random()*4f));
g2d.setPaint(firstColor);
g2d.draw(line);
}
}finally{
ite.close();
}
}
}finally{
mainIte.close();
}
}
@Override
public List<Graphic> getGraphicAt(RenderingContext context, SearchArea mask, VisitFilter filter, List<Graphic> graphics) {
return graphics;
}
@Override
public Object getUserObject() {
return null;
}
@Override
public Envelope getEnvelope() {
return null;
}
}