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 @@ ...@@ -3,29 +3,30 @@
<hashtable> <hashtable>
<entry> <entry>
<java-class>pikelake.GridObserver</java-class> <java-class>pikelake.pikes.PikesGroup</java-class>
<fr.cemagref.observation.kernel.ObservablesHandler> <fr.cemagref.observation.kernel.ObservablesHandler>
<observers> <observers>
<pikelake.environment.Movement2DWithinShapeObserver> <pikelake.environment.Movement2DWithinShapeObserver>
<title>Bariousses</title> <title>Bariousses</title>
<bgColor> <bgColor>
<red>168</red> <red>230</red>
<green>0</green> <green>230</green>
<blue>0</blue> <blue>230</blue>
<alpha>255</alpha> <alpha>255</alpha>
</bgColor> </bgColor>
<pikeColor> <pikeColor>
<red>0</red> <red>255</red>
<green>0</green> <green>0</green>
<blue>255</blue> <blue>0</blue>
<alpha>255</alpha> <alpha>255</alpha>
</pikeColor> </pikeColor>
<shapeColor> <shapeColor>
<red>0</red> <red>51</red>
<green>0</green> <green>102</green>
<blue>255</blue> <blue>255</blue>
<alpha>255</alpha> <alpha>255</alpha>
</shapeColor> </shapeColor>
<margin>0</margin>
<!--shape>//data//input//shape//hsi_BROAUTOMNE507.shp</shape--> <!--shape>//data//input//shape//hsi_BROAUTOMNE507.shp</shape-->
</pikelake.environment.Movement2DWithinShapeObserver> </pikelake.environment.Movement2DWithinShapeObserver>
</observers> </observers>
......
package pikelake.environment; 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.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Shape; import java.awt.Shape;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.geom.GeneralPath; import java.awt.geom.GeneralPath;
import java.awt.geom.Point2D; import java.awt.geom.Path2D;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import javax.swing.JComponent; import javax.swing.JComponent;
import org.geotools.data.FileDataStore; import org.geotools.data.FileDataStore;
import org.geotools.data.FileDataStoreFinder; import org.geotools.data.FileDataStoreFinder;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.data.simple.SimpleFeatureSource; import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.map.FeatureLayer; import org.geotools.map.FeatureLayer;
import org.geotools.map.Layer; import org.geotools.map.Layer;
...@@ -27,35 +36,23 @@ import org.geotools.map.MapContent; ...@@ -27,35 +36,23 @@ import org.geotools.map.MapContent;
import org.geotools.styling.SLD; import org.geotools.styling.SLD;
import org.geotools.swing.JMapFrame; import org.geotools.swing.JMapFrame;
import org.opengis.style.Style; import org.opengis.style.Style;
import pikelake.pikes.Pike;
import pikelake.pikes.PikesGroup;
import fr.cemagref.observation.gui.Configurable; @SuppressWarnings({"serial"})
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" })
@NoRecursive @NoRecursive
public class Movement2DWithinShapeObserver extends ObserverListener implements Configurable, Drawable { public class Movement2DWithinShapeObserver extends ObserverListener implements Configurable, Drawable {
private Pilot pilot;
// private transient FileChooserField modulesChooser; // private transient FileChooserField modulesChooser;
private transient JComponent display; private transient JComponent display;
// private String generalPathS; // private String generalPathS;
private transient GeneralPath generalPath; private transient GeneralPath generalPath;
private transient List<AquaNismsGroup<? extends AquaNism<? extends Point2D,?>,?>> groups; private transient List<PikesGroup> groups;
private String title; private String title;
// TODO supress transient when list will be supported by AutOUI // TODO supress transient when list will be supported by AutOUI
@Description (name="Groups colors",tooltip="Colors af aquanisms groups") @Description (name="Groups colors",tooltip="Colors af aquanisms groups")
private transient List<Color> groupsColors; private transient List<Color> groupsColors;
...@@ -65,7 +62,7 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C ...@@ -65,7 +62,7 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C
private Color pikeColor; private Color pikeColor;
@Description (name="River color",tooltip="River color") @Description (name="River color",tooltip="River color")
private Color shapeColor; private Color shapeColor;
private int margin; private int margin;
private int sizeOfDisplayedIndividuals; private int sizeOfDisplayedIndividuals;
// use for determine if generalPath must be rescaled // use for determine if generalPath must be rescaled
...@@ -74,26 +71,26 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C ...@@ -74,26 +71,26 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C
private transient double repositioningTranslateX,repositioningTranslateY; private transient double repositioningTranslateX,repositioningTranslateY;
private transient double shapeOriginalWidth, shapeOriginalHeight; private transient double shapeOriginalWidth, shapeOriginalHeight;
private transient double shapeAspectRatio; private transient double shapeAspectRatio;
private transient double rescaleFactorWithOriginal; private transient double rescaleFactorWithOriginal;
public Movement2DWithinShapeObserver(int margin) { public Movement2DWithinShapeObserver(int margin) {
this(margin,Color.BLACK,Color.BLUE); this(margin,Color.BLACK,Color.BLUE);
} }
public Movement2DWithinShapeObserver() { public Movement2DWithinShapeObserver() {
this(Color.BLACK,Color.BLUE); this(Color.BLACK,Color.BLUE);
} }
public Movement2DWithinShapeObserver(Color bgColor,Color shapeColor) { public Movement2DWithinShapeObserver(Color bgColor,Color shapeColor) {
this(0,bgColor,shapeColor); this(0,bgColor,shapeColor);
} }
public Movement2DWithinShapeObserver(int margin,Color bgColor,Color shapeColor) { public Movement2DWithinShapeObserver(int margin,Color bgColor,Color shapeColor) {
this.margin = margin; this.margin = margin;
this.bgColor = bgColor; this.bgColor = bgColor;
this.shapeColor = shapeColor; this.shapeColor = shapeColor;
} }
public String getTitle() { public String getTitle() {
return title; return title;
} }
...@@ -101,50 +98,53 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C ...@@ -101,50 +98,53 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C
public JComponent getDisplay() { public JComponent getDisplay() {
return display; return display;
} }
public void valueChanged(ObserverListener clObservable, Object instance, int t) { public void valueChanged(ObserverListener clObservable, Object instance, int t) {
display.repaint(); display.repaint();
} }
@SuppressWarnings({ "unchecked" }) @SuppressWarnings({"unchecked"})
public void init() { public void init() {
Pilot pilot = new Pilot(); display = new DisplayComponent();
display = new DisplayComponent();
display.setVisible(false); display.setVisible(false);
display.setDoubleBuffered(true); display.setDoubleBuffered(true);
displayWidthBak = 0; displayWidthBak = 0;
displayHeightBak = 0; displayHeightBak = 0;
/////////////////////////// init shape //////////////////////////////////////////////////////////// /////////////////////////// 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; FileDataStore store;
try { try {
store = FileDataStoreFinder.getDataStore(file); store = FileDataStoreFinder.getDataStore(file);
SimpleFeatureSource featureSource = store.getFeatureSource(); SimpleFeatureSource featureSource = store.getFeatureSource();
MapContent map = new MapContent();
map.setTitle("Bariousses");
Style style = SLD.createSimpleStyle(featureSource.getSchema()); /*MapContent map = new MapContent();
Layer layer = new FeatureLayer(featureSource, (org.geotools.styling.Style) style); map.setTitle("Bariousses");
map.addLayer(layer);
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); SimpleFeatureIterator iterator = featureSource.getFeatures().features();
//this.generalPath = new GeneralPath(((AsShapeConvertible) pilot.getAquaticWorld().getEnvironment()).getShape()); 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 // original dimension storage
this.shapeOriginalWidth = this.generalPath.getBounds().getWidth(); this.shapeOriginalWidth = this.generalPath.getBounds().getWidth();
this.shapeOriginalHeight = this.generalPath.getBounds().getHeight(); this.shapeOriginalHeight = this.generalPath.getBounds().getHeight();
...@@ -156,11 +156,8 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C ...@@ -156,11 +156,8 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C
// vertical flip // vertical flip
this.generalPath.transform(AffineTransform.getScaleInstance(1,-1)); this.generalPath.transform(AffineTransform.getScaleInstance(1,-1));
this.generalPath.transform(AffineTransform.getTranslateInstance(0,shapeOriginalHeight)); 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()); this.groups = new ArrayList<PikesGroup>();
if (groups!=null) {
display.setVisible(true);
}
groupsColors = new ArrayList<Color>(); groupsColors = new ArrayList<Color>();
groupsColors.add(Color.RED); groupsColors.add(Color.RED);
groupsColors.add(Color.GREEN); groupsColors.add(Color.GREEN);
...@@ -168,8 +165,9 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C ...@@ -168,8 +165,9 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C
groupsColors.add(Color.CYAN); groupsColors.add(Color.CYAN);
groupsColors.add(Color.GRAY); groupsColors.add(Color.GRAY);
display.repaint(); display.repaint();
display.setVisible(true);
} }
public void disable() { public void disable() {
display.setVisible(false); display.setVisible(false);
} }
...@@ -181,9 +179,12 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C ...@@ -181,9 +179,12 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C
@Override @Override
public void valueChanged(ObservablesHandler clObservable, Object instance, long t) { public void valueChanged(ObservablesHandler clObservable, Object instance, long t) {
if (groups == null && instance != null) {
groups.add((PikesGroup) instance);
}
display.repaint(); display.repaint();
} }
public static interface AsShapeConvertible { public static interface AsShapeConvertible {
public Shape getShape(); public Shape getShape();
} }
...@@ -228,7 +229,7 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C ...@@ -228,7 +229,7 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C
generalPath.transform( generalPath.transform(
AffineTransform.getScaleInstance(rescaleFactor,rescaleFactor) AffineTransform.getScaleInstance(rescaleFactor,rescaleFactor)
); );
} }
// Draw Background // Draw Background
g.setColor(bgColor); g.setColor(bgColor);
...@@ -239,14 +240,17 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C ...@@ -239,14 +240,17 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C
//g.setColor(aquanismsColor); //g.setColor(aquanismsColor);
Iterator<Color> colorsIterator = groupsColors.iterator(); Iterator<Color> colorsIterator = groupsColors.iterator();
// Draw aquanisms // Draw aquanisms
for (AquaNismsGroup<? extends AquaNism<? extends Point2D,?>,?> group : groups) { for (PikesGroup group : groups) {
if (colorsIterator.hasNext()) g.setColor(colorsIterator.next()); if (colorsIterator.hasNext()) {
for (AquaNism<? extends Point2D,?> aquanism : group.getAquaNismsList()) { g.setColor(colorsIterator.next());
Rectangle rect=new Rectangle((int)((aquanism.getPosition().getX()+repositioningTranslateX) * rescaleFactorWithOriginal), }
(int)(generalPath.getBounds().getHeight() /*flip vertically*/ - (aquanism.getPosition().getY()+repositioningTranslateY) * rescaleFactorWithOriginal), for (Pike aquanism : group.getAquaNismsList()) {
sizeOfDisplayedIndividuals,sizeOfDisplayedIndividuals); // 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 // 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