Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
We have upgraded GitLab to 15.1. Due to major code changes GitLab was down for some time.
Open sidebar
vadere
vadere
Commits
843993c6
Commit
843993c6
authored
Nov 15, 2018
by
Stefan Schuhbaeck
Browse files
Merge branch 'master' into 151_diff_origin
parents
6a64416d
ecb24671
Changes
68
Hide whitespace changes
Inline
Side-by-side
VadereGui/resources/messages.properties
View file @
843993c6
...
...
@@ -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!
...
...
@@ -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
...
...
VadereGui/resources/messages_de_DE.properties
View file @
843993c6
...
...
@@ -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
\u
00F6he
TopographyBoundDialog.tooltip
=
Setze Topographie-Gr
\u
00F6
\u
00DFe
InformationDialogError.title
=
Interner Fehelr
InformationDialogFileError
=
Datei konnte nicht geladen werden!
...
...
@@ -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
\u
00fchren
TopographyCreator.btnMinimizeTopography.tooltip
=
Select Viewport area
...
...
VadereGui/src/org/vadere/gui/components/model/DefaultModel.java
View file @
843993c6
...
...
@@ -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
;
...
...
@@ -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
;
...
...
@@ -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
;
...
...
@@ -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
...
...
@@ -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
)
{
...
...
@@ -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
;
...
...
@@ -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;
...
...
VadereGui/src/org/vadere/gui/components/model/DefaultSimulationConfig.java
View file @
843993c6
...
...
@@ -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
;
...
...
@@ -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
()
{
...
...
@@ -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
();
...
...
VadereGui/src/org/vadere/gui/components/model/IDefaultModel.java
View file @
843993c6
...
...
@@ -297,9 +297,5 @@ public interface IDefaultModel<T extends DefaultConfig> extends Iterable<Scenari
*/
void
notifyObservers
(
final
Object
args
);
void
hideTriangulation
();
void
showTriangulation
();
T
getConfig
();
}
VadereGui/src/org/vadere/gui/components/model/SimulationModel.java
View file @
843993c6
...
...
@@ -4,7 +4,11 @@ package org.vadere.gui.components.model;
import
java.util.Collection
;
import
java.util.function.Function
;
import
org.vadere.meshing.mesh.gen.PMesh
;
import
org.vadere.meshing.mesh.inter.IMesh
;
import
org.vadere.simulator.models.potential.solver.calculators.mesh.PotentialPoint
;
import
org.vadere.state.scenario.Agent
;
import
org.vadere.util.data.cellgrid.IPotentialPoint
;
import
org.vadere.util.geometry.shapes.IPoint
;
import
org.vadere.util.geometry.shapes.VPoint
;
import
org.vadere.util.geometry.shapes.VRectangle
;
...
...
@@ -38,8 +42,8 @@ public abstract class SimulationModel<T extends DefaultSimulationConfig> extends
return
config
;
}
public
double
getPotential
(
final
int
x
,
final
int
y
)
{
return
getPotentialField
().
apply
(
pixelToWorld
(
new
V
Point
(
x
,
y
)
));
public
IMesh
<?
extends
IPotentialPoint
,
?,
?,
?>
getDiscretization
(
)
{
return
new
PMesh
<
IPotentialPoint
>((
x
,
y
)
->
new
Potential
Point
(
x
,
y
));
}
/*public double getPotential(final int x, final int y) {
...
...
VadereGui/src/org/vadere/gui/components/view/DefaultRenderer.java
View file @
843993c6
...
...
@@ -2,9 +2,12 @@ package org.vadere.gui.components.view;
import
org.jetbrains.annotations.NotNull
;
import
org.vadere.gui.components.model.IDefaultModel
;
import
org.vadere.meshing.mesh.gen.MeshRenderer
;
import
org.vadere.meshing.mesh.inter.IMesh
;
import
org.vadere.state.scenario.Agent
;
import
org.vadere.state.scenario.ScenarioElement
;
import
org.vadere.state.scenario.Stairs
;
import
org.vadere.util.data.cellgrid.IPotentialPoint
;
import
org.vadere.util.geometry.shapes.Vector2D
;
import
org.vadere.util.geometry.shapes.VCircle
;
import
org.vadere.util.geometry.shapes.VLine
;
...
...
@@ -63,7 +66,6 @@ public abstract class DefaultRenderer {
targetGraphics2D
.
dispose
();
}
public
void
renderGraphics
(
final
Graphics2D
targetGraphics2D
,
final
int
width
,
final
int
height
)
{
targetGraphics2D
.
setRenderingHint
(
RenderingHints
.
KEY_ANTIALIASING
,
RenderingHints
.
VALUE_ANTIALIAS_ON
);
...
...
@@ -594,6 +596,14 @@ public abstract class DefaultRenderer {
}
}
protected
void
renderMesh
(
@NotNull
final
Graphics2D
g
,
@NotNull
final
IMesh
<?
extends
IPotentialPoint
,
?,
?,
?>
mesh
,
@NotNull
final
VRectangle
bound
)
{
MeshRenderer
<?
extends
IPotentialPoint
,
?,
?,
?>
meshRenderer
=
new
MeshRenderer
<>(
mesh
);
meshRenderer
.
renderGraphics
(
g
,
bound
);
}
protected
void
renderVoronoiDiagram
(
final
Graphics2D
g
,
final
VoronoiDiagram
voronoiDiagram
)
{
synchronized
(
voronoiDiagram
)
{
if
(
voronoiDiagram
!=
null
)
{
...
...
VadereGui/src/org/vadere/gui/components/view/SimulationRenderer.java
View file @
843993c6
...
...
@@ -99,6 +99,10 @@ public abstract class SimulationRenderer extends DefaultRenderer {
renderVoronoiDiagram
(
graphics
,
model
.
getVoronoiDiagram
());
}
if
(
model
.
config
.
isShowTargetPotentielFieldMesh
())
{
renderMesh
(
graphics
,
model
.
getDiscretization
(),
new
VRectangle
(
model
.
getTopographyBound
()));
}
renderSimulationContent
(
graphics
);
if
(
model
.
isElementSelected
())
{
...
...
@@ -177,7 +181,7 @@ public abstract class SimulationRenderer extends DefaultRenderer {
private
void
renderPotentialFieldOnViewport
(
final
Graphics2D
g
,
final
int
xPos
,
final
int
yPos
,
final
int
width
,
final
int
height
)
{
logger
.
info
(
"resolution = "
+
width
+
", "
+
height
);
//
logger.info("resolution = " + width + ", " + height);
/*
* This calculation we need since the viewport.y = 0 if the user scrolls to the bottom
*/
...
...
VadereGui/src/org/vadere/gui/onlinevisualization/OnlineVisualization.java
View file @
843993c6
...
...
@@ -7,13 +7,17 @@ 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.meshing.mesh.inter.IMesh
;
import
org.vadere.simulator.control.PassiveCallback
;
import
org.vadere.simulator.models.potential.fields.IPotentialField
;
import
org.vadere.simulator.models.potential.fields.IPotentialFieldTarget
;
import
org.vadere.state.scenario.Agent
;
import
org.vadere.state.scenario.Topography
;
import
org.vadere.util.data.cellgrid.IPotentialPoint
;
import
org.vadere.util.geometry.shapes.VRectangle
;
import
java.util.function.Function
;
public
class
OnlineVisualization
implements
PassiveCallback
{
/**
...
...
@@ -28,18 +32,21 @@ public class OnlineVisualization implements PassiveCallback {
public
final
IPotentialField
potentialFieldTarget
;
public
final
Agent
selectedAgent
;
public
final
IPotentialField
potentialField
;
public
final
Function
<
Agent
,
IMesh
<?
extends
IPotentialPoint
,
?,
?,
?>>
discretizations
;
public
ObservationAreaSnapshotData
(
final
double
simTimeInSec
,
@NotNull
final
Topography
scenario
,
@Nullable
final
IPotentialField
potentialFieldTarget
,
@Nullable
final
IPotentialField
potentialField
,
@Nullable
final
Agent
selectedAgent
)
{
@Nullable
final
Agent
selectedAgent
,
@Nullable
final
Function
<
Agent
,
IMesh
<?
extends
IPotentialPoint
,
?,
?,
?>>
discretizations
)
{
this
.
simTimeInSec
=
simTimeInSec
;
this
.
scenario
=
scenario
;
this
.
potentialFieldTarget
=
potentialFieldTarget
;
this
.
potentialField
=
potentialField
;
this
.
selectedAgent
=
selectedAgent
;
this
.
discretizations
=
discretizations
;
}
}
...
...
@@ -117,15 +124,19 @@ public class OnlineVisualization implements PassiveCallback {
synchronized
(
model
.
getDataSynchronizer
())
{
/* Push new snapshot of the observation area to the draw thread. */
IPotentialField
pft
=
(
model
.
config
.
isShowTargetPotentialField
()
&&
potentialFieldTarget
!=
null
)
?
potentialFieldTarget
.
getSolution
()
:
null
;
Function
<
Agent
,
IMesh
<?
extends
IPotentialPoint
,
?,
?,
?>>
discretizations
=
(
model
.
config
.
isShowTargetPotentielFieldMesh
()
&&
potentialFieldTarget
!=
null
)
?
potentialFieldTarget
.
getDiscretization
()
:
null
;
IPotentialField
pedPotentialField
=
null
;
Agent
selectedAgent
=
null
;
if
(
model
.
config
.
isShowPotentialField
()
&&
model
.
getSelectedElement
()
instanceof
Agent
&&
potentialField
!=
null
)
{
if
(
model
.
getSelectedElement
()
instanceof
Agent
)
{
selectedAgent
=
(
Agent
)
model
.
getSelectedElement
();
}
if
(
model
.
config
.
isShowPotentialField
()
&&
selectedAgent
!=
null
&&
potentialField
!=
null
)
{
pedPotentialField
=
IPotentialField
.
copyAgentField
(
potentialField
,
selectedAgent
,
new
VRectangle
(
model
.
getTopographyBound
()),
0.1
);
}
ObservationAreaSnapshotData
data
=
new
ObservationAreaSnapshotData
(
simTimeInSec
,
scenario
.
clone
(),
pft
,
pedPotentialField
,
selectedAgent
);
ObservationAreaSnapshotData
data
=
new
ObservationAreaSnapshotData
(
simTimeInSec
,
scenario
.
clone
(),
pft
,
pedPotentialField
,
selectedAgent
,
discretizations
);
model
.
pushObservationAreaSnapshot
(
data
);
}
}
...
...
VadereGui/src/org/vadere/gui/onlinevisualization/control/ActionShowMesh.java
0 → 100644
View file @
843993c6
package
org.vadere.gui.onlinevisualization.control
;
import
org.apache.log4j.LogManager
;
import
org.apache.log4j.Logger
;
import
org.vadere.gui.components.control.simulation.ActionVisualization
;
import
org.vadere.gui.components.model.DefaultSimulationConfig
;
import
org.vadere.gui.components.model.SimulationModel
;
import
java.awt.event.ActionEvent
;
import
javax.swing.*
;
public
class
ActionShowMesh
extends
ActionVisualization
{
private
static
Logger
logger
=
LogManager
.
getLogger
(
ActionShowMesh
.
class
);
public
ActionShowMesh
(
final
String
name
,
Icon
icon
,
final
SimulationModel
<?
extends
DefaultSimulationConfig
>
model
)
{
super
(
name
,
icon
,
model
);
}
@Override
public
void
actionPerformed
(
final
ActionEvent
e
)
{
model
.
config
.
setShowTargetPotentielFieldMesh
(!
model
.
config
.
isShowTargetPotentielFieldMesh
());
model
.
notifyObservers
();
super
.
actionPerformed
(
e
);
}
}
VadereGui/src/org/vadere/gui/onlinevisualization/model/OnlineVisualizationModel.java
View file @
843993c6
...
...
@@ -11,8 +11,12 @@ import java.util.stream.Collectors;
import
org.vadere.gui.components.model.DefaultSimulationConfig
;
import
org.vadere.gui.components.model.SimulationModel
;
import
org.vadere.gui.onlinevisualization.OnlineVisualization
;
import
org.vadere.meshing.mesh.gen.PMesh
;
import
org.vadere.meshing.mesh.inter.IMesh
;
import
org.vadere.simulator.models.potential.fields.IPotentialField
;
import
org.vadere.simulator.models.potential.solver.calculators.mesh.PotentialPoint
;
import
org.vadere.state.scenario.*
;
import
org.vadere.util.data.cellgrid.IPotentialPoint
;
import
org.vadere.util.geometry.shapes.IPoint
;
import
org.vadere.util.voronoi.VoronoiDiagram
;
...
...
@@ -33,6 +37,8 @@ public class OnlineVisualizationModel extends SimulationModel<DefaultSimulationC
private
IPotentialField
potentialField
=
null
;
private
Function
<
Agent
,
IMesh
<?
extends
IPotentialPoint
,
?,
?,
?>>
discretizations
=
null
;
private
Agent
agent
=
null
;
/**
...
...
@@ -112,6 +118,7 @@ public class OnlineVisualizationModel extends SimulationModel<DefaultSimulationC
potentialFieldTarget
=
observationAreaSnapshot
.
potentialFieldTarget
;
potentialField
=
observationAreaSnapshot
.
potentialField
;
agent
=
observationAreaSnapshot
.
selectedAgent
;
discretizations
=
observationAreaSnapshot
.
discretizations
;
/*
* if(topography == null ||
...
...
@@ -188,7 +195,7 @@ public class OnlineVisualizationModel extends SimulationModel<DefaultSimulationC
public
Function
<
IPoint
,
Double
>
getPotentialField
()
{
Function
<
IPoint
,
Double
>
f
=
pos
->
0.0
;
if
(
potentialField
!=
null
&&
config
.
isShowPotentialField
()
&&
agent
.
equals
(
getSelectedElement
()))
{
if
(
agent
!=
null
&&
potentialField
!=
null
&&
config
.
isShowPotentialField
()
&&
agent
.
equals
(
getSelectedElement
()))
{
f
=
pos
->
potentialField
.
getPotential
(
pos
,
agent
);
}
else
if
(
potentialFieldTarget
!=
null
&&
config
.
isShowTargetPotentialField
())
{
...
...
@@ -201,6 +208,15 @@ public class OnlineVisualizationModel extends SimulationModel<DefaultSimulationC
return
f
;
}
@Override
public
IMesh
<?
extends
IPotentialPoint
,
?,
?,
?>
getDiscretization
()
{
if
(
agent
!=
null
&&
discretizations
!=
null
&&
config
.
isShowTargetPotentielFieldMesh
()
&&
agent
.
equals
(
getSelectedElement
()))
{
return
discretizations
.
apply
(
agent
);
}
return
new
PMesh
<
IPotentialPoint
>((
x
,
y
)
->
new
PotentialPoint
(
x
,
y
));
}
@Override
public
double
getGridResolution
()
{
return
config
.
getGridWidth
();
...
...
VadereGui/src/org/vadere/gui/onlinevisualization/view/OnlineVisualisationWindow.java
View file @
843993c6
...
...
@@ -17,6 +17,7 @@ import org.vadere.gui.components.control.simulation.ActionGeneratePNG;
import
org.vadere.gui.components.control.simulation.ActionGenerateSVG
;
import
org.vadere.gui.components.control.simulation.ActionGenerateTikz
;
import
org.vadere.gui.onlinevisualization.control.ActionOnlineVisMenu
;
import
org.vadere.gui.onlinevisualization.control.ActionShowMesh
;
import
org.vadere.gui.onlinevisualization.control.ActionShowPotentialField
;
import
org.vadere.gui.onlinevisualization.model.OnlineVisualizationModel
;
import
org.vadere.gui.components.control.simulation.ActionSwapSelectionMode
;
...
...
@@ -126,6 +127,9 @@ public class OnlineVisualisationWindow extends JPanel implements Observer {
AbstractAction
drawVoronoiDiagram
=
new
ActionSwapSelectionMode
(
"draw_voronoi_diagram"
,
resources
.
getIcon
(
"voronoi.png"
,
iconWidth
,
iconHeight
),
model
);
AbstractAction
drawMesh
=
new
ActionShowMesh
(
"draw_mesh"
,
resources
.
getIcon
(
"triangulation.png"
,
iconWidth
,
iconHeight
),
model
);
AbstractAction
paintGridAction
=
new
AbstractAction
(
"paintGridAction"
,
resources
.
getIcon
(
"grid.png"
,
iconWidth
,
iconHeight
))
{
...
...
@@ -204,7 +208,8 @@ public class OnlineVisualisationWindow extends JPanel implements Observer {
Messages
.
getString
(
"ProjectView.btnShowGroupInformation.tooltip"
));
SwingUtils
.
addActionToToolbar
(
toolbar
,
drawVoronoiDiagram
,
Messages
.
getString
(
"ProjectView.btnDrawVoronoiDiagram.tooltip"
));
SwingUtils
.
addActionToToolbar
(
toolbar
,
drawMesh
,
Messages
.
getString
(
"ProjectView.btnDrawMesh.tooltip"
));
toolbar
.
addSeparator
();
...
...
VadereGui/src/org/vadere/gui/postvisualization/model/PostvisualizationModel.java
View file @
843993c6
...
...
@@ -145,10 +145,6 @@ public class PostvisualizationModel extends SimulationModel<PostvisualizationCon
}
public
void
init
(
final
Scenario
vadere
,
final
String
projectPath
)
{
// avoid the long computation
this
.
hideTriangulation
();
this
.
triangulationTriggered
=
false
;
this
.
vadere
=
vadere
;
this
.
agentsByStep
=
new
HashMap
<>();
this
.
steps
=
new
ArrayList
<>();
...
...
VadereGui/src/org/vadere/gui/postvisualization/utils/TikzGenerator.java
View file @
843993c6
...
...
@@ -81,7 +81,7 @@ public class TikzGenerator {
tikzCode
+=
generateTikzColorDefinitions
(
model
);
tikzCode
+=
convertScenarioElementsToTikz
();
String
output
=
(
generateCompleteDocument
)
?
String
.
format
(
texTemplate
,
tikzCode
)
:
tikzCode
;
String
output
=
(
generateCompleteDocument
)
?
String
.
format
(
Locale
.
US
,
texTemplate
,
tikzCode
)
:
tikzCode
;
// TODO: maybe uses Java's resources notation (in general, writing the file should be done by the caller not here).
try
{
...
...
@@ -102,19 +102,19 @@ public class TikzGenerator {
String
colorTextPattern
=
"\\definecolor{%s}{RGB}{%d,%d,%d}\n"
;
Color
sourceColor
=
model
.
getConfig
().
getSourceColor
();
colorDefinitions
+=
String
.
format
(
colorTextPattern
,
"SourceColor"
,
sourceColor
.
getRed
(),
sourceColor
.
getGreen
(),
sourceColor
.
getBlue
());
colorDefinitions
+=
String
.
format
(
Locale
.
US
,
colorTextPattern
,
"SourceColor"
,
sourceColor
.
getRed
(),
sourceColor
.
getGreen
(),
sourceColor
.
getBlue
());
Color
targetColor
=
model
.
getConfig
().
getTargetColor
();
colorDefinitions
+=
String
.
format
(
colorTextPattern
,
"TargetColor"
,
targetColor
.
getRed
(),
targetColor
.
getGreen
(),
targetColor
.
getBlue
());
colorDefinitions
+=
String
.
format
(
Locale
.
US
,
colorTextPattern
,
"TargetColor"
,
targetColor
.
getRed
(),
targetColor
.
getGreen
(),
targetColor
.
getBlue
());
Color
obstacleColor
=
model
.
getConfig
().
getObstacleColor
();
colorDefinitions
+=
String
.
format
(
colorTextPattern
,
"ObstacleColor"
,
obstacleColor
.
getRed
(),
obstacleColor
.
getGreen
(),
obstacleColor
.
getBlue
());
colorDefinitions
+=
String
.
format
(
Locale
.
US
,
colorTextPattern
,
"ObstacleColor"
,
obstacleColor
.
getRed
(),
obstacleColor
.
getGreen
(),
obstacleColor
.
getBlue
());
Color
stairColor
=
model
.
getConfig
().
getStairColor
();
colorDefinitions
+=
String
.
format
(
colorTextPattern
,
"StairColor"
,
stairColor
.
getRed
(),
stairColor
.
getGreen
(),
stairColor
.
getBlue
());
colorDefinitions
+=
String
.
format
(
Locale
.
US
,
colorTextPattern
,
"StairColor"
,
stairColor
.
getRed
(),
stairColor
.
getGreen
(),
stairColor
.
getBlue
());
Color
agentColor
=
model
.
getConfig
().
getPedestrianDefaultColor
();