diff --git a/data/Info.txt b/data/Info.txt new file mode 100644 index 0000000000000000000000000000000000000000..842a68b7701cc76b5765d2ea7c92b9f656f5b83b --- /dev/null +++ b/data/Info.txt @@ -0,0 +1,40 @@ + + Entrées + + - Marnage + - HSI (marnage, saison) + - Rayon max déplacement (saison, phase jour) + + Initialisations + - Lac (marnage, HSI) + - Population (nbr individus, position initiale, sexe...) + - Date début de la simulation + - Horloge interne par individus + + Sorties + + - Déplacements de chaque individus (historique : id_maille, HSI, saison, phase journée...) + - Distances parcourue (par jour, heure, saison...) + - Angles de déplacement + + + + Process + + 1 - Temps phase journée : aube, jour, crep, nuit + saison : période de reproduction ? + + 2 - Marnage modification HSI + + Brochet + + 3 - Ordre de déplacements aléatoire + + 4 - Calcul des mailles accessibles (Rayon max déplacement, marnage, HSI...) | + | + 5 - Mouvement (Période repro ?, phase jour) | + + 6 - Enregistrement des positions de chaque individu + HSI, id_maille, saison, phase jour... + + Calcul => Distance parcourue (saison, phase jour, marnage...) + Angles de déplacements diff --git a/data/input/fishLight.xml b/data/input/fishLight.xml index 9c9e557bf6953045061cf4bfe5b7854e61db8d54..4730e91f47ba53faf16ffb9113d5400040f28801 100644 --- a/data/input/fishLight.xml +++ b/data/input/fishLight.xml @@ -7,7 +7,7 @@ <processes> <processesAtBegin> <pikelake.pikes.PikesPopulateProcess> - <initialNumberOfPikes>20</initialNumberOfPikes> + <initialNumberOfPikes>4</initialNumberOfPikes> </pikelake.pikes.PikesPopulateProcess> </processesAtBegin> <processesEachStep> diff --git a/src/main/java/pikelake/Grid.java b/src/main/java/pikelake/Grid.java index d6370fe9ccf98316b2504258920f360b78bd4020..785f3df195313c37bd5f1aba4a51700c8339c7b3 100644 --- a/src/main/java/pikelake/Grid.java +++ b/src/main/java/pikelake/Grid.java @@ -22,21 +22,20 @@ public class Grid extends Grid2D<Cell, Individual> { @InitTransientParameters public void initTransientParameters(Pilot pilot) throws FileNotFoundException { - //System.out.println("Init Grid"); - + int idLigne = 0; double hsiMoy = 0, hsiStd = 0; - StringTokenizer sLigne; + // TODO empty grid grid = new Cell[gridWidth * gridHeight]; - + // Initialisation de toutes les mailles - int cptCell = 1; + int cptCell = 0; while (cptCell != gridWidth * gridHeight) { grid[cptCell] = new Cell(cptCell, -1); cptCell = cptCell + 1; - } + } cptCell = 0; // Lecture fichier contenant les HSI de toutes les mailles diff --git a/src/main/java/pikelake/environment/Movement2DWithinShapeObserver.java b/src/main/java/pikelake/environment/Movement2DWithinShapeObserver.java index 80782c59d1a3b414d14a194ed0eb253af843ddea..912686ea1869f451a9b23b6900a460dc317046ed 100644 --- a/src/main/java/pikelake/environment/Movement2DWithinShapeObserver.java +++ b/src/main/java/pikelake/environment/Movement2DWithinShapeObserver.java @@ -8,7 +8,11 @@ import fr.cemagref.ohoui.annotations.Description; 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 java.awt.Color; +import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; @@ -16,6 +20,8 @@ import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.GeneralPath; import java.awt.geom.Path2D; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; import java.io.File; import java.io.IOException; import java.util.ArrayList; @@ -29,8 +35,11 @@ import org.geotools.data.FileDataStoreFinder; import org.geotools.data.simple.SimpleFeatureIterator; import org.geotools.data.simple.SimpleFeatureSource; +import com.itextpdf.awt.geom.Rectangle; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.MultiPolygon; + +import pikelake.Grid; import pikelake.pikes.Pike; import pikelake.pikes.PikesGroup; @@ -93,8 +102,6 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C public void init() { - //System.out.println("Init Shape"); - display = new DisplayComponent(); display.setVisible(false); display.setDoubleBuffered(true); @@ -123,7 +130,6 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C // TODO Auto-generated catch block e.printStackTrace(); } - // original dimension storage this.shapeOriginalWidth = this.generalPath.getBounds().getWidth(); this.shapeOriginalHeight = this.generalPath.getBounds().getHeight(); @@ -145,8 +151,7 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C groupsColors.add(Color.GRAY); display.repaint(); display.setVisible(true); - - //System.out.println("Fin IS"); + } public void disable() { @@ -159,10 +164,10 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C } public void valueChanged(ObservablesHandler clObservable, Object instance, long t) { - if (groups == null && instance != null) { - groups.add((PikesGroup) instance); + if (groups.isEmpty() && instance != null) { + groups.add((PikesGroup) instance); } - System.out.println(groups.isEmpty()); + display.repaint(); display.setVisible(true); } @@ -212,10 +217,7 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C rescaleFactorWithOriginal = displayHeightBak / shapeOriginalHeight; } // rescale the generalPath - generalPath.transform( - AffineTransform.getScaleInstance(rescaleFactor,rescaleFactor) - ); - + generalPath.transform (AffineTransform.getScaleInstance (rescaleFactor, rescaleFactor)); } // Draw Background g.setColor(bgColor); @@ -225,30 +227,38 @@ public class Movement2DWithinShapeObserver extends ObserverListener implements C g2d.fill(generalPath); //g.setColor(aquanismsColor); Iterator<Color> colorsIterator = groupsColors.iterator(); - + // Draw aquanisms - //System.out.println(groups.isEmpty()); - if(groups.isEmpty()) { - //PikesGroup pikeGroup = PikesGroup.this.getAquaNismsList(); - //groups.add((PikesGroup) ((AquaNismsGroup<Pike, Grid>) groups).getAquaNismsList()); - //groups.add(PikesGroup.class.getAquaNismsList() ); - //groups.add(PikesGroup.getAquaNismsList()); - } + g.setColor(pikeColor); + double widthMax = 0, heightMax = 0; + double xPike = 0, yPike = 0, xPike2 = 0, yPike2 = 0; + widthMax = generalPath.getBounds().getWidth(); + heightMax = generalPath.getBounds().getHeight(); + + //g2d.fillRect(widthMax, heightMax, 1, 1); + //System.out.println(generalPath.getBounds2D()); + //System.out.println(widthMax); + //System.out.println(heightMax); + for (PikesGroup group : groups) { - if (colorsIterator.hasNext()) { - g.setColor(colorsIterator.next()); - - } - for (Pike aquanism : group.getAquaNismsList()) { - // TODO get the cell position - System.out.println(aquanism.getPosition()); - //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); - } + if (colorsIterator.hasNext()) + g.setColor(colorsIterator.next()); + for (Pike aquanism : group.getAquaNismsList() ) { + // Calcul de la maille occupée sur une grille de 216*244 + yPike = (aquanism.getPosition().getIndex() / 216); + xPike = (aquanism.getPosition().getIndex() - (yPike * 216)); + // Calcul dela maille occupée sur la grille redimensionnee (dynamique) + xPike2 = xPike * (widthMax / 216); + yPike2 = yPike * (heightMax / 244); + // Affichage de chaque individu + g2d.drawRect((int) xPike2, (int) yPike2, 1, 1); + + //System.out.println(aquanism.getPosition().getIndex()); + //System.out.println(" X = " + xPike + " Y = " + yPike); + //System.out.println(" X = " + xPike2 + " Y = " + yPike2 + "\n"); + + } } } }