Commit 123457aa authored by Zoennchen, Benedikt's avatar Zoennchen, Benedikt
Browse files

add feature: it is now possible to display the target potential field of a...

add feature: it is now possible to display the target potential field of a specific agent if the main model is a potential field model.
parent 16e03511
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -205,6 +205,8 @@ PostVis.menuRecentFiles.title=Recent Files
PostVis.menuOpenFile.title=Open File...
PostVis.menuCloseFloorFieldFile.title=Remove Floor Field File

OnlineVis.btnShowPotentialfield.tooltip=Show the Target Potential Field for the selected Agent

InformationDialogError.title=Internal Error
InformationDialogFileError=Could not load file!
LoadingDialog.title=Loading...
+2 −1
Original line number Diff line number Diff line
@@ -86,7 +86,6 @@ ProjectView.mntmNew_1.text=Neu
ProjectView.mntmNew_1.shortcut=C
ProjectView.mntmGenerateScenario.text=Scenario aus Output generieren
ProjectView.mntmGenerateScenario.shortcut=G
ProjectView.pauseTests.shortcut=P
ProjectView.mntmRename.text=Umbenennen
ProjectView.mntmSaveAs.text=Speichern unter...
ProjectView.mntmSaveAs.shortcut=S
@@ -205,6 +204,8 @@ PostVis.menuRecentFiles.title=K\u00FCrzlich verwendete Dateien
PostVis.menuOpenFile.title=Datei \u00F6ffnen...
PostVis.menuCloseFloorFieldFile.title=Floor Field-Datei l\u00F6schen

OnlineVis.btnShowPotentialfield.tooltip=Zeigt das Zielpotenzialfeld des ausgew\u00E4hlten Agenten

InformationDialogError.title=Interner Fehelr
InformationDialogFileError=Datei konnte nicht geladen werden!
LoadingDialog.title=Lade...
+32 −28
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ package org.vadere.gui.components.model;
import java.awt.Point;
import java.util.Collection;
import java.util.Optional;
import java.util.function.Function;

import org.vadere.state.scenario.Agent;
import org.vadere.util.geometry.shapes.VPoint;
@@ -24,7 +25,7 @@ public abstract class SimulationModel<T extends DefaultSimulationConfig> extends

	public abstract double getSimTimeInSec();

	public abstract Optional<CellGrid> getPotentialField();
	public abstract Function<VPoint, Double> getPotentialField();

	public abstract boolean isFloorFieldAvailable();

@@ -33,12 +34,16 @@ public abstract class SimulationModel<T extends DefaultSimulationConfig> extends
	}

	public double getPotential(final int x, final int y) {
		return getPotentialField().apply(pixelToWorld(new VPoint(x, y)));
	}

    /*public double getPotential(final int x, final int y) {
        double result = 0.0;

        VPoint pos = pixelToWorld(new VPoint(x, y));
        // VPoint pos = new VPoint(x,y);

		Optional<CellGrid> optPotentialField = getPotentialField();
        Optional<Function<VPoint, Double>> optPotentialField = getPotentialField();

        if (optPotentialField.isPresent()) {
            CellGrid potentialField = optPotentialField.get();
@@ -66,12 +71,11 @@ public abstract class SimulationModel<T extends DefaultSimulationConfig> extends
            double t = (pos.x - gridPointCoord.x) / potentialField.getResolution();
            double u = (pos.y - gridPointCoord.y) / potentialField.getResolution();

			/* Interpolate the known (potential < Double.MAX_VALUE) values. */
            result = InterpolationUtil.bilinearInterpolation(z1, z2, z3, z4, t, u);
        }

        return result;
	}
    }*/

	@Override
	public void notifyObservers() {
+74 −0
Original line number Diff line number Diff line
@@ -13,11 +13,14 @@ import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.util.Collection;
import java.util.function.Function;

import org.vadere.gui.components.model.IDefaultModel;
import org.vadere.simulator.models.potential.fields.PotentialFieldTarget;
import org.vadere.state.scenario.Agent;
import org.vadere.state.scenario.Pedestrian;
import org.vadere.state.scenario.ScenarioElement;
import org.vadere.util.geometry.shapes.VPoint;
import org.vadere.util.geometry.shapes.VRectangle;
import org.vadere.util.math.MathUtil;
import org.vadere.util.potential.CellGrid;
@@ -226,6 +229,77 @@ public abstract class DefaultRenderer {
		return (float) (2.0 / defaultModel.getScaleFactor());
	}

    /*protected void paintPotentialField(final Graphics2D g, final Function<VPoint, Double> potentialField, final VRectangle bound) {
        float norm;

        if (potentialField == null) {
            return;
        }

        double pixToW = 1.0 / defaultModel.getScaleFactor();
        double potOld, maxPotential = 0, invPotential;
        double maxBorder = Math.max(bound.getWidth(), bound.getHeight());



        for (double y = bound.getMinY(); y < bound.getMaxY(); y += pixToW) {
            for (double x = bound.getMinX(); x < bound.getMaxX(); x += pixToW) {
                potOld = potentialField.apply(new VPoint(x,y));

                if ((potOld > maxPotential) && (potOld != Double.MAX_VALUE)) {
                    maxPotential = potOld;
                }
            }
        }

        for (double y = bound.getMinY(); y < bound.getMaxY(); y += pixToW) {
            for (double x = bound.getMinX(); x < bound.getMaxX(); x += pixToW) {
                double contourDist = 0.02f;
                boolean isContourLine = false;
                double potential[] = new double[3];

                if (!isContourLine) {
                    invPotential = 1 - potential[0];

                    if (invPotential < 1 / 7.0) {
                        norm = (float) (invPotential * 6.0);
                        g.setColor(new Color(0.14285f - norm * 7 / 6.0f * 0.14285f, 0.14285f - norm * 7 / 6.0f
                                * 0.14285f, norm + 0.14285f));
                    }
                    else if (invPotential < 2 / 7.0) {
                        norm = (float) ((invPotential - 1.0 / 7.0) * 6.0 + 0.14285f);
                        g.setColor(new Color(norm, 0, 1.0f));
                    }
                    else if (invPotential < 3 / 7.0) {
                        norm = (float) ((invPotential - 2.0 / 7.0) * 7.0);
                        g.setColor(new Color(1.0f, 0, 1.0f - norm));
                    }
                    else if (invPotential < 4 / 7.0) {
                        norm = (float) ((invPotential - 3.0 / 7.0) * 7.0);
                        g.setColor(new Color(1.0f, norm, 0));
                    }
                    else if (invPotential < 5 / 7.0) {
                        norm = (float) ((invPotential - 4.0 / 7.0) * 7.0);
                        g.setColor(new Color(1.0f - norm, 1.0f, 0));
                    }
                    else if (invPotential < 6 / 7.0) {
                        norm = (float) ((invPotential - 5.0 / 7.0) * 7.0);
                        g.setColor(new Color(0, 1.0f, norm));
                    }
                    else {
                        norm = (float) ((invPotential - 6.0 / 7.0) * 7.0);
                        g.setColor(new Color(norm, 1.0f, 1.0f));
                    }
                }
                else {
                    g.setColor(new Color(0.3f, 0.3f, 0.3f));
                }

                g.fill(new Rectangle2D.Double(x, y, pixToW, pixToW));
            }
        }
    }*/

	protected void paintPotentialField(final Graphics2D g, final CellGrid potentialField) {
		float norm;

+14 −2
Original line number Diff line number Diff line
@@ -2,11 +2,15 @@ package org.vadere.gui.onlinevisualization;

import javax.swing.JPanel;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.vadere.gui.onlinevisualization.model.OnlineVisualizationModel;
import org.vadere.gui.onlinevisualization.view.MainPanel;
import org.vadere.gui.onlinevisualization.view.OnlineVisualisationWindow;
import org.vadere.gui.onlinevisualization.view.OnlinevisualizationRenderer;
import org.vadere.simulator.control.PassiveCallback;
import org.vadere.simulator.models.potential.fields.PotentialFieldTarget;
import org.vadere.simulator.models.potential.fields.PotentialFieldTargetGrid;
import org.vadere.state.scenario.Topography;

public class OnlineVisualization implements PassiveCallback {
@@ -20,10 +24,12 @@ public class OnlineVisualization implements PassiveCallback {
	public class ObservationAreaSnapshotData {
		public final double simTimeInSec;
		public final Topography scenario;
		public final PotentialFieldTarget potentialFieldTarget;

		public ObservationAreaSnapshotData(double simTimeInSec, Topography scenario) {
		public ObservationAreaSnapshotData(double simTimeInSec, @NotNull Topography scenario, @Nullable PotentialFieldTarget potentialFieldTarget) {
			this.simTimeInSec = simTimeInSec;
			this.scenario = scenario;
			this.potentialFieldTarget = potentialFieldTarget;
		}
	}

@@ -31,6 +37,7 @@ public class OnlineVisualization implements PassiveCallback {
	private OnlineVisualisationWindow onlineVisualisationPanel;
	private OnlineVisualizationModel model;
	private Topography scenario;
	private PotentialFieldTarget potentialFieldTarget;
	private boolean enableVisualization;

	public OnlineVisualization(boolean enableVisualization) {
@@ -48,6 +55,11 @@ public class OnlineVisualization implements PassiveCallback {
		this.scenario = scenario;
	}

    @Override
	public void setPotentialFieldTarget(final PotentialFieldTarget potentialFieldTarget) {
	    this.potentialFieldTarget = potentialFieldTarget;
    }

	@Override
	public void preLoop(double simTimeInSec) {
		onlineVisualisationPanel.setVisible(this.enableVisualization);
@@ -80,7 +92,7 @@ public class OnlineVisualization implements PassiveCallback {
		synchronized (model.getDataSynchronizer()) {
			/* Push new snapshot of the observation area to the draw thread. */
			model.pushObersavtionAreaSnapshot(
					new ObservationAreaSnapshotData(simTimeInSec, scenario.clone()));
					new ObservationAreaSnapshotData(simTimeInSec, scenario.clone(), model.config.isShowPotentialField() ? potentialFieldTarget.clone() : null));
		}
	}

Loading