65 #include <osg/Geometry> 68 #ifdef CHECK_MEMORY_LEAKS 70 #endif // CHECK_MEMORY_LEAKS 79 MSEdge*
const edge,
int numericalID,
82 MSLane(id, maxSpeed, length, edge, numericalID, shape, width, permissions, index),
93 int e = (int)
myShape.size() - 1;
94 for (
int i = 0; i < e; ++i) {
117 const MSLane::VehCont::iterator& at,
197 int noLinks = (int)
myLinks.size();
215 for (
int i = noLinks; --i >= 0;) {
225 int noLinks = (int)
myLinks.size();
245 for (
int i = noLinks; --i >= 0;) {
263 glTranslated(end.
x(), end.
y(), 0);
264 glRotated(rot, 0, 0, 1);
272 int noLinks = (int)
myLinks.size();
290 for (
int i = 0; i < noLinks; ++i) {
306 glTranslated(end.
x(), end.
y(), 0);
307 glRotated(rot, 0, 0, 1);
317 glTranslated(end.
x(), end.
y(), 0);
318 glRotated(rot, 0, 0, 1);
365 glTranslated(end.
x(), end.
y(), 0);
366 glRotated(rot, 0, 0, 1);
370 for (std::vector<MSLink*>::const_iterator i =
myLinks.begin(); i !=
myLinks.end(); ++i) {
423 for (std::vector<MSLink*>::const_iterator i =
myLinks.begin(); i !=
myLinks.end(); ++i) {
424 const MSLane* connected = (*i)->getLane();
425 if (connected == 0) {
432 glVertex2f(p1.
x(), p1.
y());
433 glVertex2f(p2.
x(), p2.
y());
447 bool mustDrawMarkings =
false;
455 const bool drawDetails = s.
scale * exaggeration > 5;
456 if (isCrossing || isWalkingArea) {
461 glTranslated(0, 0,
getType() - 0.2);
470 const std::vector<RGBColor>& segmentColors =
static_cast<const GUIEdge*
>(
myEdge)->getSegmentColors();
471 if (segmentColors.size() > 0) {
474 for (
int ii = 0; ii < (int)
myShape.size() - 1; ++ii) {
481 glGetFloatv(GL_CURRENT_COLOR, color);
485 if (s.
scale * exaggeration < 1.) {
496 const SUMOReal halfRailWidth = 0.725 * exaggeration;
503 glTranslated(0, 0, .1);
508 drawCrossties(0.3 * exaggeration, 1 * exaggeration, 1 * exaggeration);
509 }
else if (isCrossing) {
514 glColor3d(0.9, 0.9, 0.9);
516 glColor3d(0.1, 0.1, 0.1);
518 glTranslated(0, 0, .2);
520 glTranslated(0, 0, -.2);
522 }
else if (isWalkingArea) {
524 glTranslated(0, 0, .2);
525 if (s.
scale * exaggeration < 20.) {
530 glTranslated(0, 0, -.2);
531 #ifdef GUILane_DEBUG_DRAW_WALKING_AREA_VERTICES 538 const int cornerDetail = drawDetails && !isInternal ? s.
scale * exaggeration : 0;
546 #ifdef GUILane_DEBUG_DRAW_VERTICES 551 if ((!isInternal || isCrossing) && drawDetails) {
554 glTranslated(0, 0, .5);
576 glTranslated(0, 0, .1);
599 for (MSLane::VehCont::const_iterator v = vehicles.begin(); v != vehicles.end(); ++v) {
600 if ((*v)->getLane() ==
this) {
606 for (std::set<const MSVehicle*>::const_iterator v = parking.begin(); v != parking.end(); ++v) {
626 int e = (int)
getShape().size() - 1;
627 for (
int i = 0; i < e; ++i) {
635 glVertex2d(-mw, -t - length);
658 int e = (int)
getShape().size() - 1;
660 for (
int i = 0; i < e; ++i) {
666 for (
int side = -1; side <= 1; side += 2) {
668 glVertex2d(side * mw, -t);
669 glVertex2d(side * mw, -t - 0.35);
683 glTranslated(0, 0, 0.1);
684 int e = (int)
getShape().size() - 1;
685 for (
int i = 0; i < e; ++i) {
691 glVertex2d(-halfWidth, -t);
692 glVertex2d(-halfWidth, -t - length);
693 glVertex2d(halfWidth, -t - length);
694 glVertex2d(halfWidth, -t);
705 glColor3d(0.3, 0.3, 0.3);
708 int e = (int)
getShape().size() - 1;
709 for (
int i = 0; i < e; ++i) {
715 glBegin(GL_TRIANGLES);
716 glVertex2d(0, -t - length);
743 new FXMenuCommand(ret, (
"pos: " +
toString(pos) +
" height: " +
toString(height)).c_str(), 0, 0, 0);
744 new FXMenuSeparator(ret);
746 new FXMenuSeparator(ret);
749 new FXMenuCommand(ret,
"Reopen lane", 0, &parent,
MID_CLOSE_LANE);
750 new FXMenuCommand(ret,
"Reopen edge", 0, &parent,
MID_CLOSE_EDGE);
752 new FXMenuCommand(ret,
"Reopen lane (override rerouter)", 0, &parent,
MID_CLOSE_LANE);
753 new FXMenuCommand(ret,
"Reopen edge (override rerouter)", 0, &parent,
MID_CLOSE_EDGE);
812 const std::vector<SUMOReal>&
818 const std::vector<SUMOReal>&
873 switch (activeScheme) {
889 switch (activeScheme) {
891 for (PositionVector::const_iterator ii =
myShape.begin(); ii !=
myShape.end() - 1; ++ii) {
896 for (
int ii = 1; ii < (int)
myShape.size(); ++ii) {
909 switch (activeScheme) {
1012 switch (activeScheme) {
1097 osg::Vec4ubArray* colors =
dynamic_cast<osg::Vec4ubArray*
>(myGeom->getColorArray());
1099 myGeom->setColorArray(colors);
1114 if (rebuildAllowed) {
1127 for (
int i = 0; i < no; ++i) {
std::vector< int > myShapeSegments
the meso segment index for each geometry segment
SUMOReal getWidth() const
Returns the lane's width.
virtual void incorporateVehicle(MSVehicle *veh, SUMOReal pos, SUMOReal speed, SUMOReal posLat, const MSLane::VehCont::iterator &at, MSMoveReminder::Notification notification=MSMoveReminder::NOTIFICATION_DEPARTED)
Inserts the vehicle into this lane, and informs it about entering the network.
The link is a partial left direction.
The link has green light, may pass.
SVCPermissions myPermissions
The vClass permissions for this lane.
MSLane * getLogicalPredecessorLane() const
get the most likely precedecessor lane (sorted using by_connections_to_sorter). The result is cached ...
SUMOReal getLength() const
Returns the lane's length.
std::vector< RGBColor > myShapeColors
The color of the shape parts (cached)
VehCont myVehicles
The lane's vehicles. This container holds all vehicles that have their front (longitudinally) and the...
void setColor(const GUIVisualizationSettings &s) const
sets the color according to the currente settings
MSEdge & getEdge() const
Returns the lane's edge.
Representation of a vehicle in the micro simulation.
void resetPermissions(long transientID)
int getPriority() const
Returns the priority of the edge.
SUMOReal getPMxEmissions() const
Returns the sum of last step PMx emissions.
const SUMOReal SUMO_const_laneWidth
void resetPartialOccupation(MSVehicle *v)
Removes the information about a vehicle lapping into this lane.
static RGBColor fromHSV(SUMOReal h, SUMOReal s, SUMOReal v)
Converts the given hsv-triplet to rgb.
void drawLinkRules(const GUIVisualizationSettings &s, const GUINet &net) const
void buildNameCopyPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds entries which allow to copy the name / typed name into the clipboard.
static const long CHANGE_PERMISSIONS_GUI
int getLinkTLID(MSLink *link) const
int indexOfClosest(const Position &p) const
index of the closest position to p
static void debugVertices(const PositionVector &shape, SUMOReal size, SUMOReal layer=256)
draw vertex numbers for the given shape (in a random color)
SUMOReal distanceTo(const Position &p2) const
returns the euclidean distance in 3 dimension
bool knowsEffort(const MSEdge *const e) const
Returns the information whether any effort is known for the given edge.
Copy edge name (for lanes only)
SUMOReal length() const
Returns the length.
void closeTraffic(bool rebuildAllowed=true)
close this lane for traffic
unsigned char alpha() const
Returns the alpha-amount of the color.
SUMOReal getScaleValue(int activeScheme) const
gets the scaling value according to the current scheme index
GUIColorer laneColorer
The lane colorer.
SUMOReal laneWidthExaggeration
The lane exaggeration (upscale thickness)
The link has green light, has to brake.
Stores the information about how to visualize structures.
SUMOReal minSize
The minimum size to draw this object.
PositionVector splitAtSegments(const PositionVector &shape)
add intermediate points at segment borders
int myIndex
The lane index.
virtual bool integrateNewVehicle(SUMOTime t)
Insert buffered vehicle into the real lane.
bool showRails
Information whether rails shall be drawn.
void drawTLSLinkNo(const GUIVisualizationSettings &s, const GUINet &net) const
The link is a 180 degree turn.
const RGBColor & getLinkColor(const LinkState &ls)
Notification
Definition of a vehicle state.
virtual MSVehicle * removeVehicle(MSVehicle *remVehicle, MSMoveReminder::Notification notification, bool notify=true)
Position positionAtOffset(SUMOReal pos, SUMOReal lateralOffset=0) const
Returns the position at the given length.
static void drawBoxLines(const PositionVector &geom, const std::vector< SUMOReal > &rots, const std::vector< SUMOReal > &lengths, SUMOReal width, int cornerDetail=0, SUMOReal offset=0)
Draws thick lines.
void buildCenterPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to center to the object.
bool knowsTravelTime(const MSEdge *const e) const
Returns the information whether any travel time is known for the given edge.
void drawCrossties(SUMOReal length, SUMOReal spacing, SUMOReal halfWidth) const
draw crossties for railroads or pedestrian crossings
const std::vector< MSLane * > & getLanes() const
Returns this edge's lanes.
SUMOReal getSpeedLimit() const
Returns the lane's maximum allowed speed.
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
static void drawBoxLine(const Position &beg, SUMOReal rot, SUMOReal visLength, SUMOReal width, SUMOReal offset=0)
Draws a thick line.
bool isSelected(GUIGlObjectType type, GUIGlID id)
Returns the information whether the object with the given type and id is selected.
static void drawFilledPoly(const PositionVector &v, bool close)
Draws a filled polygon described by the list of points.
const PositionVector & getShape() const
Returns this lane's shape.
bool showLaneDirection
Whether to show direction indicators for lanes.
PositionVector reverse() const
reverse position vector
unsigned char blue() const
Returns the blue-amount of the color.
const std::vector< SUMOReal > & getShapeLengths() const
bool laneShowBorders
Information whether lane borders shall be drawn.
This is an uncontrolled, right-before-left link.
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
std::map< long, SVCPermissions > myPermissionChanges
static void drawText(const std::string &text, const Position &pos, const SUMOReal layer, const SUMOReal size, const RGBColor &col=RGBColor::BLACK, const SUMOReal angle=0)
draw Text with given parameters
void buildShowParamsPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to open the parameter window.
const SUMOReal SUMO_const_laneOffset
bool isRailway(SVCPermissions permissions)
Returns whether an edge with the given permission is a railway edge.
const SUMOReal myWidth
Lane width [m].
bool showLinkRules
Information whether link rules (colored bars) shall be drawn.
A storage for edge travel times and efforts.
The link is controlled by a tls which is off, not blinking, may pass.
SUMOReal interpolateGeometryPosToLanePos(SUMOReal geometryPos) const
bool setMultiColor(const GUIColorer &c) const
sets multiple colors according to the current scheme index and some lane function ...
void buildPositionCopyEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to copy the cursor position if geo projection is used, also builds an entry for copying the geo-position.
SUMOReal myMaxSpeed
Lane-wide speedlimit [m/s].
static void drawTriangleAtEnd(const Position &p1, const Position &p2, SUMOReal tLength, SUMOReal tWidth)
Draws a triangle at the end of the given line.
bool integrateNewVehicle(SUMOTime t)
A class that stores a 2D geometrical boundary.
bool drawAsWaterway(const GUIVisualizationSettings &s) const
whether to draw this lane as a waterway
The link is a (hard) left direction.
PositionVector myShape
The shape of the lane.
bool retrieveExistingEffort(const MSEdge *const e, const SUMOReal t, SUMOReal &value) const
Returns an effort for an edge and time if stored.
static OptionsCont & getOptions()
Retrieves the options.
SUMOReal scale
information about a lane's width (temporary, used for a single view)
const std::set< const MSVehicle * > & getParkingVehicles(const MSLane *lane) const
return parking vehicles on the given lane
LinkState getState() const
Returns the current state of the link.
SUMOReal nearest_offset_to_point2D(const Position &p, bool perpendicular=true) const
return the nearest offest to point 2D
const std::string & getEdgeType() const
Returns the type of the edge.
LinkDirection
The different directions a link between two lanes may take (or a stream between two edges)...
SUMOReal beginEndAngle() const
returns the angle in radians of the line connecting the first and the last position ...
The link is a straight direction.
SUMOReal distanceTo2D(const Position &p2) const
returns the euclidean distance in the x-y-plane
virtual void incorporateVehicle(MSVehicle *veh, SUMOReal pos, SUMOReal speed, SUMOReal posLat, const MSLane::VehCont::iterator &at, MSMoveReminder::Notification notification=MSMoveReminder::NOTIFICATION_DEPARTED)
Inserts the vehicle into this lane, and informs it about entering the network.
virtual void detectCollisions(SUMOTime timestep, const std::string &stage)
Check if vehicles are too close.
static void drawFilledPolyTesselated(const PositionVector &v, bool close)
Draws a filled polygon described by the list of points.
A road/street connecting two junctions (gui-version)
std::vector< SUMOReal > myShapeRotations
The rotations of the shape parts.
A road/street connecting two junctions.
void rebuildAllowedLanes()
int getIndex() const
Returns the lane's index.
bool executeMovements(SUMOTime t, std::vector< MSLane *> &into)
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
SUMOReal getNettoOccupancy() const
Returns the netto (excluding minGaps) occupancy of this lane during the last step (including minGaps)...
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
void drawLinkNo(const GUIVisualizationSettings &s) const
helper methods
virtual void resetPartialOccupation(MSVehicle *v)
Removes the information about a vehicle lapping into this lane.
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
MFXMutex myLock
The mutex used to avoid concurrent updates of the vehicle buffer.
SUMOReal getNOxEmissions() const
Returns the sum of last step NOx emissions.
SUMOReal getFuelConsumption() const
Returns the sum of last step fuel consumption.
SUMOReal z() const
Returns the z-position.
static int numSegmentsFor(const SUMOReal length, const SUMOReal slength)
Compute number of segments per edge (best value stay close to the configured segment length) ...
This is an uncontrolled, minor link, has to brake.
A point in 2D or 3D with translation and scaling methods.
SUMOReal getHCEmissions() const
Returns the sum of last step HC emissions.
SUMOReal getHarmonoise_NoiseEmissions() const
Returns the sum of last step noise emissions.
void planMovements(const SUMOTime t)
void drawBikeMarkings() const
bike lane markings on top of an intersection
bool isWaterway(SVCPermissions permissions)
Returns whether an edge with the given permission is a waterway edge.
bool showSublanes
Whether to show sublane boundaries.
std::vector< SUMOReal > myShapeLengths
The lengths of the shape parts.
SUMOReal getRoutingSpeed() const
Returns the averaged speed used by the routing device.
bool havePriority() const
Returns whether this link is a major link.
SUMOReal setPartialOccupation(MSVehicle *v)
Sets the information about a vehicle lapping into this lane.
SUMOReal firstWaitingTime() const
void drawTextAtEnd(const std::string &text, const PositionVector &shape, SUMOReal x, const GUIVisualizationTextSettings &settings) const
LinkState
The right-of-way state of a link between two lanes used when constructing a NBTrafficLightLogic, in MSLink and GNEInternalLane.
SUMOReal getElectricityConsumption() const
Returns the sum of last step electricity consumption.
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
GUIVisualizationTextSettings drawLinkTLIndex
SUMOReal x() const
Returns the x-position.
The link is a (hard) right direction.
const PositionVector & getShape() const
virtual bool executeMovements(SUMOTime t, std::vector< MSLane *> &lanesWithVehiclesToIntegrate)
Executes planned vehicle movements with regards to right-of-way.
bool setFunctionalColor(int activeScheme) const
sets the color according to the current scheme index and some lane function
const VehCont & getVehiclesSecure() const
Returns the vehicles container; locks it for microsimulation.
MSVehicle * removeVehicle(MSVehicle *remVehicle, MSMoveReminder::Notification notification, bool notify)
SUMOReal myLength
Lane length [m].
int insertAtClosest(const Position &p)
inserts p between the two closest positions and returns the insertion index
const T getColor(const SUMOReal value) const
EdgeBasicFunction getPurpose() const
Returns the edge type (EdgeBasicFunction)
virtual SUMOReal setPartialOccupation(MSVehicle *v)
Sets the information about a vehicle lapping into this lane.
bool drawAsRailway(const GUIVisualizationSettings &s) const
whether to draw this lane as a railway
virtual void swapAfterLaneChange(SUMOTime t)
moves myTmpVehicles int myVehicles after a lane change procedure
std::string toString(const T &t, std::streamsize accuracy=OUTPUT_ACCURACY)
GUIScaler edgeScaler
The mesoscopic edge scaler.
The link is a partial right direction.
std::string getVehicleClassNames(SVCPermissions permissions)
Returns the ids of the given classes, divided using a ' '.
bool lefthand() const
return whether the network was built for lefthand traffic
std::vector< MSVehicle * > VehCont
Container for vehicles.
vehicle is a passenger car (a "normal" car)
const std::string & getStreetName() const
Returns the street name of the edge.
static SUMOReal naviDegree(const SUMOReal angle)
SUMOReal getBruttoOccupancy() const
Returns the brutto (including minGaps) occupancy of this lane during the last step.
const SUMOReal myLengthGeometryFactor
precomputed myShape.length / myLength
static MSVehicleTransfer * getInstance()
Returns the instance of this object.
void unlock()
release mutex lock
SUMOReal getMeanSpeed() const
Returns the mean speed on this lane.
void swapAfterLaneChange(SUMOTime t)
moves myTmpVehicles int myVehicles after a lane change procedure
SUMOReal getEdgeLaneNumber() const
The edge is a pedestrian walking area (a special type of internal edge)
void drawMarkings(const GUIVisualizationSettings &s, SUMOReal scale) const
draw lane borders and white markings
void setPermissions(SVCPermissions permissions, long transientID)
Sets the permissions to the given value. If a transientID is given, the permissions are recored as te...
SUMOReal getScaleValue(int activeScheme) const
gets the scaling value according to the current scheme index
Boundary & grow(SUMOReal by)
extends the boundary by the given amount
void drawLane2LaneConnections() const
bool showLinkDecals
Information whether link textures (arrows) shall be drawn.
SUMOReal getCO2Emissions() const
Returns the sum of last step CO2 emissions.
A MSNet extended by some values for usage within the gui.
void add(SUMOReal x, SUMOReal y, SUMOReal z=0)
Makes the boundary include the given coordinate.
The link has yellow light, may pass.
static MSLink * getConnectingLink(const MSLane &from, const MSLane &to)
Returns the link connecting both lanes Both lanes have to be non-internal; 0 may be returned if no co...
MSInsertionControl & getInsertionControl()
Returns the insertion control.
GUILane(const std::string &id, SUMOReal maxSpeed, SUMOReal length, MSEdge *const edge, int numericalID, const PositionVector &shape, SUMOReal width, SVCPermissions permissions, int index)
Constructor.
unsigned char green() const
Returns the green-amount of the color.
The link is controlled by a tls which is off and blinks, has to brake.
A mutex encapsulator which locks/unlocks the given mutex on construction/destruction, respectively.
MSEdge *const myEdge
The lane's edge, for routing only.
void drawLinkRule(const GUIVisualizationSettings &s, const GUINet &net, MSLink *link, const PositionVector &shape, SUMOReal x1, SUMOReal x2) const
The edge is a pedestrian crossing (a special type of internal edge)
void detectCollisions(SUMOTime timestep, const std::string &stage)
SUMOReal getCOEmissions() const
Returns the sum of last step CO emissions.
The link has red light (must brake)
static SUMOReal gLateralResolution
SUMOReal getColorValue(int activeScheme) const
gets the color value according to the current scheme index
SUMOReal myHalfLaneWidth
Half of lane width, for speed-up.
This is an uncontrolled, major link, may pass.
void buildSelectionPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to (de)select the object.
SUMOReal getLoadedEdgeWeight() const
Returns the loaded weight (effort) for the edge of this lane.
int getIndex() const
Returns the respond index (for visualization)
bool drawCrossingsAndWalkingareas
whether crosings and walkingareas shall be drawn
bool myAmClosed
state for dynamic lane closings
SUMOReal myQuarterLaneWidth
Quarter of lane width, for speed-up.
void drawDirectionIndicators() const
direction indicators for lanes
GUIGlID getGlID() const
Returns the numerical id of the object.
Position positionAtOffset2D(SUMOReal pos, SUMOReal lateralOffset=0) const
Returns the position at the given length.
unsigned char red() const
Returns the red-amount of the color.
The link is a 180 degree turn (left-hand network)
static void drawLine(const Position &beg, SUMOReal rot, SUMOReal visLength)
Draws a thin line.
bool showLane2Lane
Information whether lane-to-lane arrows shall be drawn.
Position getPositionInformation() const
Returns the cursor's x/y position within the network.
GUIVisualizationSizeSettings vehicleSize
const std::vector< SUMOReal > & getShapeRotations() const
SUMOReal getExaggeration(const GUIVisualizationSettings &s, SUMOReal factor=20) const
return the drawing size including exaggeration and constantSize values
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
The link has yellow light, has to brake anyway.
SUMOReal getStoredEdgeTravelTime() const
Returns the stored traveltime for the edge of this lane.
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
SUMOReal laneMinSize
The minimum visual lane width for drawing.
The edge is an internal edge.
SUMOReal y() const
Returns the y-position.
GUIScaler laneScaler
The lane scaler.
void mkItem(const char *name, bool dynamic, ValueSource< unsigned > *src)
Adds a row which obtains its value from an unsigned-ValueSource.
GUISelectedStorage gSelected
A global holder of selected objects.
void closeBuilding()
Closes the building of the table.
Representation of a lane in the micro simulation.
void releaseVehicles() const
Allows to use the container for microsimulation again.
int getLinkTLIndex(MSLink *link) const
A window containing a gl-object's parameter.
The link has red light (must brake) but indicates upcoming green.
GUIVisualizationTextSettings drawLinkJunctionIndex
bool retrieveExistingTravelTime(const MSEdge *const e, const SUMOReal t, SUMOReal &value) const
Returns a travel time for an edge and time if stored.
int getPendingEmits(const MSLane *lane)
return the number of pending emits for the given lane
void extrapolate(const SUMOReal val, const bool onlyFirst=false)
extrapolate position vector
void buildPopupHeader(GUIGLObjectPopupMenu *ret, GUIMainWindow &app, bool addSeparator=true)
Builds the header.
virtual void planMovements(const SUMOTime t)
Compute safe velocities for all vehicles based on positions and speeds from the last time step...
The link has no direction (is a dead end link)
MSEdgeWeightsStorage & getWeightsStorage()
Returns the net's internal edge travel times/efforts container.
static RGBColor getColor()
gets the gl-color
A MSVehicle extended by some values for usage within the gui.