Loading VadereGui/resources/messages.properties +3 −1 Original line number Diff line number Diff line Loading @@ -242,7 +242,8 @@ OnlineVis.msgDialogShowPotentialfield.target=Target Potential Field OnlineVis.msgDialogShowPotentialfield.overall=Potential Field (OSM only) OnlineVis.msgDialogShowPotentialfield.none=None TopographyBoundDialog.title = Set Topography Bounds TopographyBoundDialog.title=Width x Height TopographyBoundDialog.tooltip=Set topography bounds InformationDialogError.title=Internal Error InformationDialogFileError=Could not load file! Loading @@ -267,6 +268,7 @@ SettingsDialog.lblPedestrianNoTarget.text=Without Target (-1) ProjectView.menuOpenFloorFieldFile.title=Add Floor Field File... ProjectView.btnDrawVoronoiDiagram.tooltip=Draw and display a Voronoi Diagram ProjectView.btnDrawMesh.tooltip=Draw and display a mesh SettingsDialog.chbLogo.text=Show the Vadere logo ProjectView.btnShowWalkingDirection.tooltip=Show the walking direction of all pedestrians ProjectView.btnShowGroupInformation.tooltip=Draw pedestrians within one group with same shape and color Loading VadereGui/resources/messages_de_DE.properties +4 −1 Original line number Diff line number Diff line Loading @@ -237,7 +237,8 @@ OnlineVis.msgDialogShowPotentialfield.target=Zielpotential OnlineVis.msgDialogShowPotentialfield.overall=Potential (OSM only) OnlineVis.msgDialogShowPotentialfield.none=Keines TopographyBoundDialog.title = Setze Topographie Grenzen TopographyBoundDialog.title=Breite x H\u00F6he TopographyBoundDialog.tooltip=Setze Topographie-Gr\u00F6\u00DFe InformationDialogError.title=Interner Fehelr InformationDialogFileError=Datei konnte nicht geladen werden! Loading Loading @@ -273,6 +274,8 @@ ProjectView.btnShowDensity.tooltip=Dichte anzeigen ProjectView.btnSettings.tooltip=Einstellungen ProjectView.btnOk=OK ProjectView.btnCancel=Abbrechen ProjectView.btnDrawVoronoiDiagram.tooltip=Voronoi-Diagramm zeichnen und anzeigen ProjectView.btnDrawMesh.tooltip=Mesh zeichnen und anzeigen TopographyCreator.btnMergeObstacles.tooltip=Hindernisse zusammenf\u00fchren TopographyCreator.btnMinimizeTopography.tooltip=Select Viewport area Loading VadereGui/src/org/vadere/gui/components/model/DefaultModel.java +0 −138 Original line number Diff line number Diff line Loading @@ -6,40 +6,17 @@ import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.vadere.gui.components.control.*; import org.vadere.gui.components.view.ISelectScenarioElementListener; import org.vadere.simulator.models.potential.fields.IPotentialField; import org.vadere.simulator.models.potential.fields.PotentialFieldDistancesBruteForce; import org.vadere.simulator.utils.TexGraphGenerator; import org.vadere.state.attributes.models.AttributesFloorField; import org.vadere.state.scenario.Obstacle; import org.vadere.state.scenario.ScenarioElement; import org.vadere.state.scenario.Topography; import org.vadere.state.types.ScenarioElementType; import org.vadere.util.geometry.shapes.VPoint; import org.vadere.util.geometry.shapes.VRectangle; import org.vadere.util.geometry.shapes.VShape; import org.vadere.meshing.mesh.gen.PFace; import org.vadere.meshing.mesh.gen.PHalfEdge; import org.vadere.meshing.mesh.gen.PVertex; import org.vadere.meshing.mesh.inter.IIncrementalTriangulation; import org.vadere.util.geometry.shapes.IPoint; import org.vadere.util.geometry.shapes.VPolygon; import org.vadere.util.geometry.shapes.VTriangle; import org.vadere.util.data.cellgrid.CellGrid; import org.vadere.util.data.cellgrid.CellState; import org.vadere.util.data.cellgrid.PathFindingTag; import org.vadere.util.math.DistanceFunction; import org.vadere.util.math.IDistanceFunction; import org.vadere.meshing.mesh.triangulation.improver.eikmesh.EikMeshPoint; import org.vadere.meshing.mesh.triangulation.improver.eikmesh.impl.PEikMesh; import org.vadere.util.voronoi.VoronoiDiagram; import java.awt.*; import java.awt.geom.Rectangle2D; import java.util.*; import java.util.List; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.stream.StreamSupport; Loading @@ -63,8 +40,6 @@ public abstract class DefaultModel<T extends DefaultConfig> extends Observable i private boolean showVoroniDiagram; private boolean showTriangulation; private VPoint cursorWorldPosition; private VPoint startSelectionPoint; Loading @@ -87,12 +62,6 @@ public abstract class DefaultModel<T extends DefaultConfig> extends Observable i public T config; private IIncrementalTriangulation<EikMeshPoint, PVertex<EikMeshPoint>, PHalfEdge<EikMeshPoint>, PFace<EikMeshPoint>> triangulation; private Collection<VTriangle> triangles; protected boolean triangulationTriggered = false; public DefaultModel(final T config) { this.config = config; this.scaleFactor = 50; Loading @@ -101,13 +70,11 @@ public abstract class DefaultModel<T extends DefaultConfig> extends Observable i this.cursorWorldPosition = VPoint.ZERO; this.selectScenarioElementListener = new LinkedList<>(); this.voronoiDiagram = null; this.showTriangulation = false; this.showVoroniDiagram = true; this.showSelection = false; this.mouseSelectionMode = new DefaultSelectionMode(this); this.viewportChangeListeners = new ArrayList<>(); this.scaleChangeListeners = new ArrayList<>(); this.triangulation = null; } @Override Loading Loading @@ -192,10 +159,6 @@ public abstract class DefaultModel<T extends DefaultConfig> extends Observable i } } public boolean isTriangulationVisible() { return showTriangulation; } @Override public void notifyScaleListeners() { for (IScaleChangeListener listener : scaleChangeListeners) { Loading Loading @@ -385,18 +348,6 @@ public abstract class DefaultModel<T extends DefaultConfig> extends Observable i setChanged(); } @Override public void showTriangulation() { showTriangulation = true; setChanged(); } @Override public void hideTriangulation() { showTriangulation = false; setChanged(); } @Override public void showSelection() { showSelection = true; Loading Loading @@ -543,95 +494,6 @@ public abstract class DefaultModel<T extends DefaultConfig> extends Observable i return config; } /* * returns the adaptive triangulation (see persson-2004 'A Simple Mesh Generator in MATLAB.') */ public void startTriangulation() { if(!triangulationTriggered) { triangulationTriggered = true; VRectangle bound = new VRectangle(getTopographyBound()); Collection<Obstacle> obstacles = Topography.createObstacleBoundary(getTopography()); obstacles.addAll(getTopography().getObstacles()); List<VShape> shapes = obstacles.stream().map(obstacle -> obstacle.getShape()).collect(Collectors.toList()); IPotentialField distanceField = new PotentialFieldDistancesBruteForce( getTopography().getObstacles().stream().map(obs -> obs.getShape()).collect(Collectors.toList()), new VRectangle(getTopography().getBounds()), new AttributesFloorField()); Function<IPoint, Double> obstacleDistance = p -> distanceField.getPotential(p, null); IDistanceFunction distanceFunc = new DistanceFunction(bound, shapes); CellGrid cellGrid = new CellGrid(bound.getWidth(), bound.getHeight(), 0.1, new CellState(), bound.getMinX(), bound.getMinY()); cellGrid.pointStream().forEach(p -> cellGrid.setValue(p, new CellState(distanceFunc.apply(cellGrid.pointToCoord(p)), PathFindingTag.Reachable))); Function<IPoint, Double> interpolationFunction = cellGrid.getInterpolationFunction(); IDistanceFunction approxDistance = p -> interpolationFunction.apply(p); /*PPSMeshing meshImprover = new PPSMeshing( distanceFunc, p -> Math.min(1.0 + Math.pow(Math.max(-distanceFunc.apply(p), 0)*0.8, 2), 6.0), 0.3, bound, getTopography().getObstacles().stream().map(obs -> obs.getShape()).collect(Collectors.toList()));*/ PEikMesh meshImprover = new PEikMesh( distanceFunc, p -> Math.min(1.0 + Math.max(approxDistance.apply(p)*approxDistance.apply(p), 0)*0.3, 5.0), 0.35, bound, getTopography().getObstacles().stream().map(obs -> obs.getShape()).collect(Collectors.toList())); /*PPSMeshing meshImprover = new PPSMeshing( distanceFunc, p -> 1.0, 1.0, bound, getTopography().getObstacles().stream().map(obs -> obs.getShape()).collect(Collectors.toList()));*/ triangulation = meshImprover.getTriangulation(); Thread t = new Thread(() -> { while(!meshImprover.isFinished()) { meshImprover.improve(); /*try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); }*/ setChanged(); notifyObservers(); } //meshImprover.improve(); Function<PFace<EikMeshPoint>, Color> colorFunction = f -> { float grayScale = (float) meshImprover.faceToQuality(f); return triangulation.isValid(f) ? new Color(grayScale, grayScale, grayScale) : Color.RED; }; log.info(TexGraphGenerator.toTikz(meshImprover.getMesh(), colorFunction, 1.0f)); log.info("number of points = " + meshImprover.getMesh().getVertices().size()); log.info("number of triangle = " + meshImprover.getMesh().getFaces().size()); log.info("avg-quality = " + meshImprover.getQuality()); log.info("min-quality = " + meshImprover.getMinQuality()); }); t.start(); } } public Collection<VTriangle> getTriangles() { if(triangulation == null) { return Collections.EMPTY_LIST; } synchronized (triangulation.getMesh()) { return triangulation.streamTriangles().collect(Collectors.toList()); } } public Collection<VPolygon> getHoles() { if(triangulation == null) { return Collections.EMPTY_LIST; } synchronized (triangulation.getMesh()) { return triangulation.getMesh().streamHoles().map(f -> triangulation.getMesh().toPolygon(f)).collect(Collectors.toList()); } } /*public void startTriangulation() { if(!triangulationTriggered) { triangulationTriggered = true; Loading VadereGui/src/org/vadere/gui/components/model/DefaultSimulationConfig.java +11 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ public class DefaultSimulationConfig extends DefaultConfig { private boolean showPedestrians = true; private boolean showWalkdirection = false; private boolean showTargetPotentialField = false; private boolean showTargetPotentielFieldMesh = false; private boolean showPotentialField = false; private boolean showTrajectories = false; private boolean showGrid = false; Loading Loading @@ -64,6 +65,7 @@ public class DefaultSimulationConfig extends DefaultConfig { this.showStairs = config.showStairs; this.showGroups = config.showGroups; this.showPotentialField = config.showPotentialField; this.showTargetPotentielFieldMesh = config.showTargetPotentielFieldMesh; } public boolean isShowGroups() { Loading Loading @@ -110,6 +112,15 @@ public class DefaultSimulationConfig extends DefaultConfig { return showTargets; } public void setShowTargetPotentielFieldMesh(final boolean showTargetPotentielFieldMesh) { this.showTargetPotentielFieldMesh = showTargetPotentielFieldMesh; setChanged(); } public boolean isShowTargetPotentielFieldMesh() { return showTargetPotentielFieldMesh; } public void setShowTargets(boolean showTargets) { this.showTargets = showTargets; setChanged(); Loading VadereGui/src/org/vadere/gui/components/model/IDefaultModel.java +0 −4 Original line number Diff line number Diff line Loading @@ -297,9 +297,5 @@ public interface IDefaultModel<T extends DefaultConfig> extends Iterable<Scenari */ void notifyObservers(final Object args); void hideTriangulation(); void showTriangulation(); T getConfig(); } Loading
VadereGui/resources/messages.properties +3 −1 Original line number Diff line number Diff line Loading @@ -242,7 +242,8 @@ OnlineVis.msgDialogShowPotentialfield.target=Target Potential Field OnlineVis.msgDialogShowPotentialfield.overall=Potential Field (OSM only) OnlineVis.msgDialogShowPotentialfield.none=None TopographyBoundDialog.title = Set Topography Bounds TopographyBoundDialog.title=Width x Height TopographyBoundDialog.tooltip=Set topography bounds InformationDialogError.title=Internal Error InformationDialogFileError=Could not load file! Loading @@ -267,6 +268,7 @@ SettingsDialog.lblPedestrianNoTarget.text=Without Target (-1) ProjectView.menuOpenFloorFieldFile.title=Add Floor Field File... ProjectView.btnDrawVoronoiDiagram.tooltip=Draw and display a Voronoi Diagram ProjectView.btnDrawMesh.tooltip=Draw and display a mesh SettingsDialog.chbLogo.text=Show the Vadere logo ProjectView.btnShowWalkingDirection.tooltip=Show the walking direction of all pedestrians ProjectView.btnShowGroupInformation.tooltip=Draw pedestrians within one group with same shape and color Loading
VadereGui/resources/messages_de_DE.properties +4 −1 Original line number Diff line number Diff line Loading @@ -237,7 +237,8 @@ OnlineVis.msgDialogShowPotentialfield.target=Zielpotential OnlineVis.msgDialogShowPotentialfield.overall=Potential (OSM only) OnlineVis.msgDialogShowPotentialfield.none=Keines TopographyBoundDialog.title = Setze Topographie Grenzen TopographyBoundDialog.title=Breite x H\u00F6he TopographyBoundDialog.tooltip=Setze Topographie-Gr\u00F6\u00DFe InformationDialogError.title=Interner Fehelr InformationDialogFileError=Datei konnte nicht geladen werden! Loading Loading @@ -273,6 +274,8 @@ ProjectView.btnShowDensity.tooltip=Dichte anzeigen ProjectView.btnSettings.tooltip=Einstellungen ProjectView.btnOk=OK ProjectView.btnCancel=Abbrechen ProjectView.btnDrawVoronoiDiagram.tooltip=Voronoi-Diagramm zeichnen und anzeigen ProjectView.btnDrawMesh.tooltip=Mesh zeichnen und anzeigen TopographyCreator.btnMergeObstacles.tooltip=Hindernisse zusammenf\u00fchren TopographyCreator.btnMinimizeTopography.tooltip=Select Viewport area Loading
VadereGui/src/org/vadere/gui/components/model/DefaultModel.java +0 −138 Original line number Diff line number Diff line Loading @@ -6,40 +6,17 @@ import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.vadere.gui.components.control.*; import org.vadere.gui.components.view.ISelectScenarioElementListener; import org.vadere.simulator.models.potential.fields.IPotentialField; import org.vadere.simulator.models.potential.fields.PotentialFieldDistancesBruteForce; import org.vadere.simulator.utils.TexGraphGenerator; import org.vadere.state.attributes.models.AttributesFloorField; import org.vadere.state.scenario.Obstacle; import org.vadere.state.scenario.ScenarioElement; import org.vadere.state.scenario.Topography; import org.vadere.state.types.ScenarioElementType; import org.vadere.util.geometry.shapes.VPoint; import org.vadere.util.geometry.shapes.VRectangle; import org.vadere.util.geometry.shapes.VShape; import org.vadere.meshing.mesh.gen.PFace; import org.vadere.meshing.mesh.gen.PHalfEdge; import org.vadere.meshing.mesh.gen.PVertex; import org.vadere.meshing.mesh.inter.IIncrementalTriangulation; import org.vadere.util.geometry.shapes.IPoint; import org.vadere.util.geometry.shapes.VPolygon; import org.vadere.util.geometry.shapes.VTriangle; import org.vadere.util.data.cellgrid.CellGrid; import org.vadere.util.data.cellgrid.CellState; import org.vadere.util.data.cellgrid.PathFindingTag; import org.vadere.util.math.DistanceFunction; import org.vadere.util.math.IDistanceFunction; import org.vadere.meshing.mesh.triangulation.improver.eikmesh.EikMeshPoint; import org.vadere.meshing.mesh.triangulation.improver.eikmesh.impl.PEikMesh; import org.vadere.util.voronoi.VoronoiDiagram; import java.awt.*; import java.awt.geom.Rectangle2D; import java.util.*; import java.util.List; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.stream.StreamSupport; Loading @@ -63,8 +40,6 @@ public abstract class DefaultModel<T extends DefaultConfig> extends Observable i private boolean showVoroniDiagram; private boolean showTriangulation; private VPoint cursorWorldPosition; private VPoint startSelectionPoint; Loading @@ -87,12 +62,6 @@ public abstract class DefaultModel<T extends DefaultConfig> extends Observable i public T config; private IIncrementalTriangulation<EikMeshPoint, PVertex<EikMeshPoint>, PHalfEdge<EikMeshPoint>, PFace<EikMeshPoint>> triangulation; private Collection<VTriangle> triangles; protected boolean triangulationTriggered = false; public DefaultModel(final T config) { this.config = config; this.scaleFactor = 50; Loading @@ -101,13 +70,11 @@ public abstract class DefaultModel<T extends DefaultConfig> extends Observable i this.cursorWorldPosition = VPoint.ZERO; this.selectScenarioElementListener = new LinkedList<>(); this.voronoiDiagram = null; this.showTriangulation = false; this.showVoroniDiagram = true; this.showSelection = false; this.mouseSelectionMode = new DefaultSelectionMode(this); this.viewportChangeListeners = new ArrayList<>(); this.scaleChangeListeners = new ArrayList<>(); this.triangulation = null; } @Override Loading Loading @@ -192,10 +159,6 @@ public abstract class DefaultModel<T extends DefaultConfig> extends Observable i } } public boolean isTriangulationVisible() { return showTriangulation; } @Override public void notifyScaleListeners() { for (IScaleChangeListener listener : scaleChangeListeners) { Loading Loading @@ -385,18 +348,6 @@ public abstract class DefaultModel<T extends DefaultConfig> extends Observable i setChanged(); } @Override public void showTriangulation() { showTriangulation = true; setChanged(); } @Override public void hideTriangulation() { showTriangulation = false; setChanged(); } @Override public void showSelection() { showSelection = true; Loading Loading @@ -543,95 +494,6 @@ public abstract class DefaultModel<T extends DefaultConfig> extends Observable i return config; } /* * returns the adaptive triangulation (see persson-2004 'A Simple Mesh Generator in MATLAB.') */ public void startTriangulation() { if(!triangulationTriggered) { triangulationTriggered = true; VRectangle bound = new VRectangle(getTopographyBound()); Collection<Obstacle> obstacles = Topography.createObstacleBoundary(getTopography()); obstacles.addAll(getTopography().getObstacles()); List<VShape> shapes = obstacles.stream().map(obstacle -> obstacle.getShape()).collect(Collectors.toList()); IPotentialField distanceField = new PotentialFieldDistancesBruteForce( getTopography().getObstacles().stream().map(obs -> obs.getShape()).collect(Collectors.toList()), new VRectangle(getTopography().getBounds()), new AttributesFloorField()); Function<IPoint, Double> obstacleDistance = p -> distanceField.getPotential(p, null); IDistanceFunction distanceFunc = new DistanceFunction(bound, shapes); CellGrid cellGrid = new CellGrid(bound.getWidth(), bound.getHeight(), 0.1, new CellState(), bound.getMinX(), bound.getMinY()); cellGrid.pointStream().forEach(p -> cellGrid.setValue(p, new CellState(distanceFunc.apply(cellGrid.pointToCoord(p)), PathFindingTag.Reachable))); Function<IPoint, Double> interpolationFunction = cellGrid.getInterpolationFunction(); IDistanceFunction approxDistance = p -> interpolationFunction.apply(p); /*PPSMeshing meshImprover = new PPSMeshing( distanceFunc, p -> Math.min(1.0 + Math.pow(Math.max(-distanceFunc.apply(p), 0)*0.8, 2), 6.0), 0.3, bound, getTopography().getObstacles().stream().map(obs -> obs.getShape()).collect(Collectors.toList()));*/ PEikMesh meshImprover = new PEikMesh( distanceFunc, p -> Math.min(1.0 + Math.max(approxDistance.apply(p)*approxDistance.apply(p), 0)*0.3, 5.0), 0.35, bound, getTopography().getObstacles().stream().map(obs -> obs.getShape()).collect(Collectors.toList())); /*PPSMeshing meshImprover = new PPSMeshing( distanceFunc, p -> 1.0, 1.0, bound, getTopography().getObstacles().stream().map(obs -> obs.getShape()).collect(Collectors.toList()));*/ triangulation = meshImprover.getTriangulation(); Thread t = new Thread(() -> { while(!meshImprover.isFinished()) { meshImprover.improve(); /*try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); }*/ setChanged(); notifyObservers(); } //meshImprover.improve(); Function<PFace<EikMeshPoint>, Color> colorFunction = f -> { float grayScale = (float) meshImprover.faceToQuality(f); return triangulation.isValid(f) ? new Color(grayScale, grayScale, grayScale) : Color.RED; }; log.info(TexGraphGenerator.toTikz(meshImprover.getMesh(), colorFunction, 1.0f)); log.info("number of points = " + meshImprover.getMesh().getVertices().size()); log.info("number of triangle = " + meshImprover.getMesh().getFaces().size()); log.info("avg-quality = " + meshImprover.getQuality()); log.info("min-quality = " + meshImprover.getMinQuality()); }); t.start(); } } public Collection<VTriangle> getTriangles() { if(triangulation == null) { return Collections.EMPTY_LIST; } synchronized (triangulation.getMesh()) { return triangulation.streamTriangles().collect(Collectors.toList()); } } public Collection<VPolygon> getHoles() { if(triangulation == null) { return Collections.EMPTY_LIST; } synchronized (triangulation.getMesh()) { return triangulation.getMesh().streamHoles().map(f -> triangulation.getMesh().toPolygon(f)).collect(Collectors.toList()); } } /*public void startTriangulation() { if(!triangulationTriggered) { triangulationTriggered = true; Loading
VadereGui/src/org/vadere/gui/components/model/DefaultSimulationConfig.java +11 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ public class DefaultSimulationConfig extends DefaultConfig { private boolean showPedestrians = true; private boolean showWalkdirection = false; private boolean showTargetPotentialField = false; private boolean showTargetPotentielFieldMesh = false; private boolean showPotentialField = false; private boolean showTrajectories = false; private boolean showGrid = false; Loading Loading @@ -64,6 +65,7 @@ public class DefaultSimulationConfig extends DefaultConfig { this.showStairs = config.showStairs; this.showGroups = config.showGroups; this.showPotentialField = config.showPotentialField; this.showTargetPotentielFieldMesh = config.showTargetPotentielFieldMesh; } public boolean isShowGroups() { Loading Loading @@ -110,6 +112,15 @@ public class DefaultSimulationConfig extends DefaultConfig { return showTargets; } public void setShowTargetPotentielFieldMesh(final boolean showTargetPotentielFieldMesh) { this.showTargetPotentielFieldMesh = showTargetPotentielFieldMesh; setChanged(); } public boolean isShowTargetPotentielFieldMesh() { return showTargetPotentielFieldMesh; } public void setShowTargets(boolean showTargets) { this.showTargets = showTargets; setChanged(); Loading
VadereGui/src/org/vadere/gui/components/model/IDefaultModel.java +0 −4 Original line number Diff line number Diff line Loading @@ -297,9 +297,5 @@ public interface IDefaultModel<T extends DefaultConfig> extends Iterable<Scenari */ void notifyObservers(final Object args); void hideTriangulation(); void showTriangulation(); T getConfig(); }