Currently job artifacts in CI/CD pipelines on LRZ GitLab never expire. Starting from Wed 26.1.2022 the default expiration time will be 30 days (GitLab default). Currently existing artifacts in already completed jobs will not be affected by the change. The latest artifacts for all jobs in the latest successful pipelines will be kept. More information: https://gitlab.lrz.de/help/user/admin_area/settings/continuous_integration.html#default-artifacts-expiration

Commit 7ecc4813 authored by Benedikt Zoennchen's avatar Benedikt Zoennchen
Browse files

resolve merge conflict.

parents 4846b945 145f1026
Pipeline #59614 passed with stage
in 48 seconds
......@@ -145,7 +145,7 @@ public class ScenarioElementView extends JPanel implements ISelectScenarioElemen
} else {
try {
Attributes attributes = StateJsonConverter.deserializeScenarioElementType(json, element.getType());
ReflectionAttributeModifier.setAttributes(element, attributes);
element.setAttributes(attributes); // Replaces previous AttributeModifier.setAttributes (see #91)
ScenarioPanel.removeJsonParsingErrorMsg();
ProjectView.getMainWindow().refreshScenarioNames();
jsonValidIndicator.setValid();
......@@ -187,7 +187,7 @@ public class ScenarioElementView extends JPanel implements ISelectScenarioElemen
this.txtrTextfiletextarea.setText(StateJsonConverter.serializeObject(scenarioElement));
} else {
this.txtrTextfiletextarea.setText(StateJsonConverter
.serializeObject(ReflectionAttributeModifier.getAttributes(scenarioElement)));
.serializeObject(scenarioElement.getAttributes()));
}
}
}
......
......@@ -3,18 +3,20 @@ package org.vadere.gui.topographycreator.control;
import java.lang.reflect.Field;
import org.vadere.gui.topographycreator.model.AgentWrapper;
import org.vadere.simulator.projects.Scenario;
import org.vadere.state.attributes.Attributes;
import org.vadere.state.attributes.AttributesEmbedShape;
import org.vadere.state.scenario.ScenarioElement;
import org.vadere.util.geometry.shapes.VPoint;
import org.vadere.util.geometry.shapes.VShape;
/**
* Setter and getter implementation to modify Attributes. This class uses use of reflection.
* Setter implementation to modify shape of Attributes.
* Do not use this class outside of the topographycreator package, or even not outside this
* control-package!
*
*/
public class ReflectionAttributeModifier {
public class AttributeModifier {
/**
* Sets the shape to the attributes of an topography element. Use this method only in the
* control!
......@@ -24,19 +26,15 @@ public class ReflectionAttributeModifier {
*/
static void setShapeToAttributes(final ScenarioElement element, final VShape shape) {
try {
Field field;
if (element instanceof AgentWrapper) {
double x = shape.getBounds2D().getCenterX();
double y = shape.getBounds2D().getCenterY();
((AgentWrapper) element).getAgentInitialStore().setPosition(new VPoint(x, y));
} else {
Attributes attributes =
org.vadere.simulator.entrypoints.ReflectionAttributeModifier.getAttributes(element);
field = attributes.getClass().getDeclaredField("shape");
field.setAccessible(true);
field.set(attributes, shape);
AttributesEmbedShape attributes = (AttributesEmbedShape) element.getAttributes();
attributes.setShape(shape);
}
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
} catch (ClassCastException e) {
e.printStackTrace();
}
}
......
......@@ -26,14 +26,14 @@ public class EditUpdateElementShape extends AbstractUndoableEdit {
@Override
public void undo() throws CannotUndoException {
ReflectionAttributeModifier.setShapeToAttributes(element, oldShape);
AttributeModifier.setShapeToAttributes(element, oldShape);
panelModel.setSelectedElement(element);
panelModel.notifyObservers();
}
@Override
public void redo() throws CannotRedoException {
ReflectionAttributeModifier.setShapeToAttributes(element, newShape);
AttributeModifier.setShapeToAttributes(element, newShape);
panelModel.setSelectedElement(element);
panelModel.notifyObservers();
}
......
......@@ -77,7 +77,7 @@ public class SelectElementMode extends DefaultSelectionMode {
VShape newShape =
panelModel.translate(new Point(e.getPoint().x - startPoint.x, e.getPoint().y - startPoint.y));
ReflectionAttributeModifier.setShapeToAttributes(element, newShape);
AttributeModifier.setShapeToAttributes(element, newShape);
// tell the panelModel that the selected element has changed!
panelModel.setSelectedElement(element);
......
......@@ -71,6 +71,11 @@ public final class AgentWrapper extends ScenarioElement {
return agent.getAttributes();
}
@Override
public void setAttributes(Attributes attributes){
this.agent.setAttributes(attributes);
}
@Override
public AgentWrapper clone() {
return new AgentWrapper((Agent) agent.clone());
......
......@@ -184,8 +184,8 @@
"maxSpawnNumberTotal" : -1,
"startTime" : 0.0,
"endTime" : 50.0,
"spawnAtRandomPositions" : false,
"useFreeSpaceOnly" : false,
"spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : true,
"targetIds" : [ 1 ],
"dynamicElementType" : "PEDESTRIAN"
} ],
......
......@@ -184,8 +184,8 @@
"maxSpawnNumberTotal" : -1,
"startTime" : 0.0,
"endTime" : 50.0,
"spawnAtRandomPositions" : false,
"useFreeSpaceOnly" : false,
"spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : true,
"targetIds" : [ 1 ],
"dynamicElementType" : "PEDESTRIAN"
} ],
......
......@@ -184,8 +184,8 @@
"maxSpawnNumberTotal" : -1,
"startTime" : 0.0,
"endTime" : 50.0,
"spawnAtRandomPositions" : false,
"useFreeSpaceOnly" : false,
"spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : true,
"targetIds" : [ 1 ],
"dynamicElementType" : "PEDESTRIAN"
} ],
......
......@@ -184,8 +184,8 @@
"maxSpawnNumberTotal" : -1,
"startTime" : 0.0,
"endTime" : 50.0,
"spawnAtRandomPositions" : false,
"useFreeSpaceOnly" : false,
"spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : true,
"targetIds" : [ 1 ],
"dynamicElementType" : "PEDESTRIAN"
} ],
......
......@@ -184,8 +184,8 @@
"maxSpawnNumberTotal" : -1,
"startTime" : 0.0,
"endTime" : 50.0,
"spawnAtRandomPositions" : false,
"useFreeSpaceOnly" : false,
"spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : true,
"targetIds" : [ 1 ],
"dynamicElementType" : "PEDESTRIAN"
} ],
......
......@@ -184,8 +184,8 @@
"maxSpawnNumberTotal" : -1,
"startTime" : 0.0,
"endTime" : 50.0,
"spawnAtRandomPositions" : false,
"useFreeSpaceOnly" : false,
"spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : true,
"targetIds" : [ 1 ],
"dynamicElementType" : "PEDESTRIAN"
} ],
......
......@@ -184,8 +184,8 @@
"maxSpawnNumberTotal" : -1,
"startTime" : 0.0,
"endTime" : 50.0,
"spawnAtRandomPositions" : false,
"useFreeSpaceOnly" : false,
"spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : true,
"targetIds" : [ 1 ],
"dynamicElementType" : "PEDESTRIAN"
} ],
......
......@@ -103,7 +103,7 @@
"shape" : {
"x" : 1.0,
"y" : 0.0,
"width" : 0.9,
"width" : 1.0,
"height" : 20.0,
"type" : "RECTANGLE"
},
......@@ -157,8 +157,8 @@
"maxSpawnNumberTotal" : -1,
"startTime" : 0.0,
"endTime" : 50.0,
"spawnAtRandomPositions" : false,
"useFreeSpaceOnly" : false,
"spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : true,
"targetIds" : [ 1 ],
"dynamicElementType" : "PEDESTRIAN"
} ],
......
......@@ -103,7 +103,7 @@
"shape" : {
"x" : 1.0,
"y" : 0.0,
"width" : 0.9,
"width" : 1.0,
"height" : 20.0,
"type" : "RECTANGLE"
},
......@@ -157,8 +157,8 @@
"maxSpawnNumberTotal" : -1,
"startTime" : 0.0,
"endTime" : 50.0,
"spawnAtRandomPositions" : false,
"useFreeSpaceOnly" : false,
"spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : true,
"targetIds" : [ 1 ],
"dynamicElementType" : "PEDESTRIAN"
} ],
......
......@@ -103,7 +103,7 @@
"shape" : {
"x" : 1.0,
"y" : 0.0,
"width" : 0.9,
"width" : 1.0,
"height" : 20.0,
"type" : "RECTANGLE"
},
......@@ -157,8 +157,8 @@
"maxSpawnNumberTotal" : -1,
"startTime" : 0.0,
"endTime" : 50.0,
"spawnAtRandomPositions" : false,
"useFreeSpaceOnly" : false,
"spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : true,
"targetIds" : [ 1 ],
"dynamicElementType" : "PEDESTRIAN"
} ],
......
......@@ -157,8 +157,8 @@
"maxSpawnNumberTotal" : -1,
"startTime" : 0.0,
"endTime" : 50.0,
"spawnAtRandomPositions" : false,
"useFreeSpaceOnly" : false,
"spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : true,
"targetIds" : [ 1 ],
"dynamicElementType" : "PEDESTRIAN"
} ],
......
......@@ -252,7 +252,12 @@ public class ScenarioBuilder {
AttributesBuilder<Attributes> attBuilder = new AttributesBuilder<>(element.getAttributes());
attBuilder.setField(fieldName, value);
E clone = (E) element.clone();
reflectionAttributeModifier.setAttributes(clone, attBuilder.build());
//NOTE see issue #91:
//This class is not tested - revert change by uncommenting reflextion and comment in
//clone.setAttributes
//reflectionAttributeModifier.setAttributes(clone, attBuilder.build());
clone.setAttributes(attBuilder.build());
return clone;
}
......
......@@ -18,6 +18,9 @@ import org.vadere.util.geometry.Vector2D;
import org.vadere.util.geometry.shapes.VCircle;
import org.vadere.util.geometry.shapes.VPoint;
// This potential is explained in seitz-2015 (The effect of stepping on pedestrians trajectories)
// p. 596, eq. 1
public class PotentialFieldPedestrianCompact implements PotentialFieldAgent {
class DistanceComparator implements Comparator<Agent> {
......
......@@ -19,12 +19,15 @@ import org.vadere.util.geometry.shapes.VCircle;
import org.vadere.util.geometry.shapes.VPoint;
import org.vadere.util.math.MathUtil;
// Implementation of the soft shell repulsive potential of pedestrians according to sivers-2016b.
// page 46, eq. 4.1
public class PotentialFieldPedestrianCompactSoftshell implements PotentialFieldAgent {
private AttributesPotentialCompactSoftshell attributes;
private double intimateWidth;
private double personalWidth;
private double height;
private double intimateWidth; // radius of intimate zone \delta_{int}
private double personalWidth; // radius of personal width \delta_{per}
private double height; // intensity of repulsion \mu_p
public PotentialFieldPedestrianCompactSoftshell() {}
......@@ -49,26 +52,29 @@ public class PotentialFieldPedestrianCompactSoftshell implements PotentialFieldA
public double getAgentPotential(VPoint pos, Agent pedestrian,
Agent otherPedestrian) {
double radii = pedestrian.getRadius() + otherPedestrian.getRadius();
double radii = pedestrian.getRadius() + otherPedestrian.getRadius(); // 2* r_p (sivers-2016b)
double potential = 0;
double distnaceSq = otherPedestrian.getPosition().distanceSq(pos);
double distanceSq = otherPedestrian.getPosition().distanceSq(pos);
double maxDistanceSq = (Math.max(personalWidth, intimateWidth) + radii) * (Math.max(personalWidth, intimateWidth) + radii);
if(distnaceSq < maxDistanceSq) {
double distance = otherPedestrian.getPosition().distance(pos);
if(distanceSq < maxDistanceSq) {
double distance = otherPedestrian.getPosition().distance(pos); // Euclidean distance d_j(x) between agent j and position x
int intPower = this.attributes.getIntimateSpacePower();
int perPower = this.attributes.getPersonalSpacePower();
double factor = this.attributes.getIntimateSpaceFactor();
int intPower = this.attributes.getIntimateSpacePower(); // b_p
int perPower = this.attributes.getPersonalSpacePower(); // not defined in sivers-2016b (perPower = 1)
double factor = this.attributes.getIntimateSpaceFactor(); // a_p
if (distance < personalWidth + radii) {
// implementation differs from sivers-2016b here: \delta_{per} + r_p (note: radii = 2*r_p)
potential += this.height * Math.exp(4 / (Math.pow(distance / (personalWidth + radii), (2 * perPower)) - 1));
}
if (distance < this.intimateWidth + radii) {
// implementation differs from sivers-2016b here: \delta_{int} + r_p (note: radii = 2*r_p)
potential += this.height / factor
* Math.exp(4 / (Math.pow(distance / (this.intimateWidth + radii), (2 * intPower)) - 1));
}
if (distance < radii) {
// implementations differs from sivers-2016b here : Math.power(distance / (radii),2)
potential += 1000 * Math.exp(1 / (Math.pow(distance / radii, 4) - 1));
}
}
......@@ -94,7 +100,7 @@ public class PotentialFieldPedestrianCompactSoftshell implements PotentialFieldA
public Vector2D getAgentPotentialGradient(VPoint pos,
Vector2D velocity, Agent pedestrian,
Collection<? extends Agent> otherPedestrians) {
throw new UnsupportedOperationException("not jet implemented.");
throw new UnsupportedOperationException("not yet implemented.");
/*double epsilon = 0.001;
double dx = 0;
double dy = 0;
......
package org.vadere.state.attributes;
import org.vadere.util.geometry.shapes.VShape;
/**
* Abstract Base Class for {@link Attributes} that also consist of a {@link VShape}. The shape can be changed and
* 'undo' and 'redo' operations can be carried out in EditUpdateElementShape in package
* org.vadere.gui.topographycreator.control.
*/
public abstract class AttributesEmbedShape extends Attributes {
public abstract void setShape(VShape shape);
public abstract VShape getShape();
}
Markdown is supported
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