Commit 41fdbf25 authored by Dumoulin Nicolas's avatar Dumoulin Nicolas
Browse files

fix for displaying shapefile

1 merge request!1Add Svn history
Showing with 88 additions and 83 deletions
+88 -83
......@@ -3,29 +3,30 @@
<hashtable>
<entry>
<java-class>pikelake.GridObserver</java-class>
<java-class>pikelake.pikes.PikesGroup</java-class>
<fr.cemagref.observation.kernel.ObservablesHandler>
<observers>
<pikelake.environment.Movement2DWithinShapeObserver>
<title>Bariousses</title>
<bgColor>
<red>168</red>
<green>0</green>
<blue>0</blue>
<red>230</red>
<green>230</green>
<blue>230</blue>
<alpha>255</alpha>
</bgColor>
<pikeColor>
<red>0</red>
<red>255</red>
<green>0</green>
<blue>255</blue>
<blue>0</blue>
<alpha>255</alpha>
</pikeColor>
<shapeColor>
<red>0</red>
<green>0</green>
<red>51</red>
<green>102</green>
<blue>255</blue>
<alpha>255</alpha>
</shapeColor>
<margin>0</margin>
<!--shape>//data//input//shape//hsi_BROAUTOMNE507.shp</shape-->
</pikelake.environment.Movement2DWithinShapeObserver>
</observers>
......
package pikelake.environment;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.MultiPolygon;
import fr.cemagref.observation.gui.Configurable;
import fr.cemagref.observation.gui.Drawable;
import fr.cemagref.observation.kernel.ObservablesHandler;
import fr.cemagref.observation.kernel.ObserverListener;
import fr.cemagref.ohoui.annotations.Description;
import fr.cemagref.ohoui.annotations.NoRecursive;
import fr.cemagref.ohoui.filters.NoTransientField;
import fr.cemagref.ohoui.swing.OhOUI;
import fr.cemagref.ohoui.swing.OhOUIDialog;
import fr.cemagref.simaqualife.pilot.Pilot;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.GeneralPath;
import java.awt.geom.Point2D;
import java.awt.geom.Path2D;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import javax.swing.JComponent;
import org.geotools.data.FileDataStore;
import org.geotools.data.FileDataStoreFinder;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.map.FeatureLayer;
import org.geotools.map.Layer;
......@@ -27,35 +36,23 @@ import org.geotools.map.MapContent;
import org.geotools.styling.SLD;
import org.geotools.swing.JMapFrame;
import org.opengis.style.Style;
import pikelake.pikes.Pike;
import pikelake.pikes.PikesGroup;
import fr.cemagref.observation.gui.Configurable;
import fr.cemagref.observation.gui.Drawable;
import fr.cemagref.observation.kernel.ObservablesHandler;
import fr.cemagref.observation.kernel.ObserverListener;
import fr.cemagref.ohoui.annotations.Description;
import fr.cemagref.ohoui.annotations.NoRecursive;
import fr.cemagref.ohoui.filters.NoTransientField;
import fr.cemagref.ohoui.swing.OhOUI;
import fr.cemagref.ohoui.swing.OhOUIDialog;
import fr.cemagref.simaqualife.kernel.AquaNism;
import fr.cemagref.simaqualife.kernel.AquaNismsGroup;
import fr.cemagref.simaqualife.pilot.Pilot;
@SuppressWarnings({ "serial" })
@SuppressWarnings({"serial"})
@NoRecursive
public class Movement2DWithinShapeObserver extends ObserverListener implements Configurable, Drawable {
private Pilot pilot;
// private transient FileChooserField modulesChooser;
private transient JComponent display;
// private String generalPathS;
// private String generalPathS;
private transient GeneralPath generalPath;
private transient List<AquaNismsGroup<? extends AquaNism<? extends Point2D,?>,?>> groups;
private transient List<PikesGroup> groups;
private String title;
// TODO supress transient when list will be supported by AutOUI
@Description (name="Groups colors",tooltip="Colors af aquanisms groups")
private transient List<Color> groupsColors;
......@@ -65,7 +62,7 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C
private Color pikeColor;
@Description (name="River color",tooltip="River color")
private Color shapeColor;
private int margin;
private int sizeOfDisplayedIndividuals;
// use for determine if generalPath must be rescaled
......@@ -74,26 +71,26 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C
private transient double repositioningTranslateX,repositioningTranslateY;
private transient double shapeOriginalWidth, shapeOriginalHeight;
private transient double shapeAspectRatio;
private transient double rescaleFactorWithOriginal;
private transient double rescaleFactorWithOriginal;
public Movement2DWithinShapeObserver(int margin) {
this(margin,Color.BLACK,Color.BLUE);
}
public Movement2DWithinShapeObserver() {
this(Color.BLACK,Color.BLUE);
}
public Movement2DWithinShapeObserver(Color bgColor,Color shapeColor) {
this(0,bgColor,shapeColor);
}
public Movement2DWithinShapeObserver(int margin,Color bgColor,Color shapeColor) {
this.margin = margin;
this.bgColor = bgColor;
this.shapeColor = shapeColor;
}
public String getTitle() {
return title;
}
......@@ -101,50 +98,53 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C
public JComponent getDisplay() {
return display;
}
public void valueChanged(ObserverListener clObservable, Object instance, int t) {
display.repaint();
}
@SuppressWarnings({ "unchecked" })
public void init() {
Pilot pilot = new Pilot();
display = new DisplayComponent();
@SuppressWarnings({"unchecked"})
public void init() {
display = new DisplayComponent();
display.setVisible(false);
display.setDoubleBuffered(true);
displayWidthBak = 0;
displayHeightBak = 0;
/////////////////////////// init shape ////////////////////////////////////////////////////////////
File file = new File("/Users/guillaume.garbay/workspace/PikeLake/data/input/shape/hsi_BROPRINTEMPS513_5.shp");
File file = new File("data/input/shape/hsi_BROAUTOMNE507_hull.shp");
FileDataStore store;
try {
store = FileDataStoreFinder.getDataStore(file);
SimpleFeatureSource featureSource = store.getFeatureSource();
MapContent map = new MapContent();
map.setTitle("Bariousses");
try {
store = FileDataStoreFinder.getDataStore(file);
SimpleFeatureSource featureSource = store.getFeatureSource();
Style style = SLD.createSimpleStyle(featureSource.getSchema());
Layer layer = new FeatureLayer(featureSource, (org.geotools.styling.Style) style);
map.addLayer(layer);
/*MapContent map = new MapContent();
map.setTitle("Bariousses");
JMapFrame.showMap(map);
Style style = SLD.createSimpleStyle(featureSource.getSchema());
Layer layer = new FeatureLayer(featureSource, (org.geotools.styling.Style) style);
map.addLayer(layer);
JMapFrame.showMap(map);*/
this.generalPath = new GeneralPath((Shape) map);
//this.generalPath = new GeneralPath(((AsShapeConvertible) pilot.getAquaticWorld().getEnvironment()).getShape());
SimpleFeatureIterator iterator = featureSource.getFeatures().features();
MultiPolygon p = (MultiPolygon) iterator.next().getDefaultGeometry();
iterator.close();
Path2D.Double shape = new Path2D.Double();
shape.moveTo(p.getCoordinates()[0].x, p.getCoordinates()[0].y);
for (int i = 1; i < p.getCoordinates().length; i++) {
Coordinate coord = p.getCoordinates()[i];
shape.lineTo(coord.x, coord.y);
}
this.generalPath = new GeneralPath(shape);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// original dimension storage
this.shapeOriginalWidth = this.generalPath.getBounds().getWidth();
this.shapeOriginalHeight = this.generalPath.getBounds().getHeight();
......@@ -156,11 +156,8 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C
// vertical flip
this.generalPath.transform(AffineTransform.getScaleInstance(1,-1));
this.generalPath.transform(AffineTransform.getTranslateInstance(0,shapeOriginalHeight));
groups = new ArrayList<AquaNismsGroup<? extends AquaNism<? extends Point2D,?>,?>>((Collection<? extends AquaNismsGroup<? extends AquaNism<? extends Point2D, ?>, ?>>)pilot.getAquaticWorld().getAquaNismsGroupsList());
if (groups!=null) {
display.setVisible(true);
}
this.groups = new ArrayList<PikesGroup>();
groupsColors = new ArrayList<Color>();
groupsColors.add(Color.RED);
groupsColors.add(Color.GREEN);
......@@ -168,8 +165,9 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C
groupsColors.add(Color.CYAN);
groupsColors.add(Color.GRAY);
display.repaint();
display.setVisible(true);
}
public void disable() {
display.setVisible(false);
}
......@@ -181,9 +179,12 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C
@Override
public void valueChanged(ObservablesHandler clObservable, Object instance, long t) {
if (groups == null && instance != null) {
groups.add((PikesGroup) instance);
}
display.repaint();
}
public static interface AsShapeConvertible {
public Shape getShape();
}
......@@ -228,7 +229,7 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C
generalPath.transform(
AffineTransform.getScaleInstance(rescaleFactor,rescaleFactor)
);
}
// Draw Background
g.setColor(bgColor);
......@@ -239,14 +240,17 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C
//g.setColor(aquanismsColor);
Iterator<Color> colorsIterator = groupsColors.iterator();
// Draw aquanisms
for (AquaNismsGroup<? extends AquaNism<? extends Point2D,?>,?> group : groups) {
if (colorsIterator.hasNext()) g.setColor(colorsIterator.next());
for (AquaNism<? extends Point2D,?> aquanism : group.getAquaNismsList()) {
Rectangle rect=new Rectangle((int)((aquanism.getPosition().getX()+repositioningTranslateX) * rescaleFactorWithOriginal),
(int)(generalPath.getBounds().getHeight() /*flip vertically*/ - (aquanism.getPosition().getY()+repositioningTranslateY) * rescaleFactorWithOriginal),
sizeOfDisplayedIndividuals,sizeOfDisplayedIndividuals);
for (PikesGroup group : groups) {
if (colorsIterator.hasNext()) {
g.setColor(colorsIterator.next());
}
for (Pike aquanism : group.getAquaNismsList()) {
// TODO get the cell position
//Rectangle rect = new Rectangle((int) ((aquanism.getPosition().getX() + repositioningTranslateX) * rescaleFactorWithOriginal),
// (int) (generalPath.getBounds().getHeight() /*flip vertically*/ - (aquanism.getPosition().getY() + repositioningTranslateY) * rescaleFactorWithOriginal),
// sizeOfDisplayedIndividuals, sizeOfDisplayedIndividuals);
// draw the individuals after repositioning and rescaling the position
g2d.fill(rect);
//g2d.fill(rect);
}
}
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment