LCOV - code coverage report
Current view: top level - src/guisim - GUIPerson.h (source / functions) Coverage Total Hit
Test: lcov.info Lines: 0.0 % 2 0
Test Date: 2024-11-22 15:46:21 Functions: 0.0 % 1 0

            Line data    Source code
       1              : /****************************************************************************/
       2              : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3              : // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
       4              : // This program and the accompanying materials are made available under the
       5              : // terms of the Eclipse Public License 2.0 which is available at
       6              : // https://www.eclipse.org/legal/epl-2.0/
       7              : // This Source Code may also be made available under the following Secondary
       8              : // Licenses when the conditions for such availability set forth in the Eclipse
       9              : // Public License 2.0 are satisfied: GNU General Public License, version 2
      10              : // or later which is available at
      11              : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
      12              : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
      13              : /****************************************************************************/
      14              : /// @file    GUIPerson.h
      15              : /// @author  Daniel Krajzewicz
      16              : /// @author  Jakob Erdmann
      17              : /// @author  Sascha Krieg
      18              : /// @author  Michael Behrisch
      19              : /// @date    Sept 2002
      20              : ///
      21              : // A MSVehicle extended by some values for usage within the gui
      22              : /****************************************************************************/
      23              : #pragma once
      24              : #include <config.h>
      25              : 
      26              : #include <vector>
      27              : #include <set>
      28              : #include <string>
      29              : #include <utils/foxtools/fxheader.h>
      30              : #include <utils/gui/globjects/GUIGlObject.h>
      31              : #include <utils/common/RGBColor.h>
      32              : #include <microsim/transportables/MSPerson.h>
      33              : #include <utils/gui/globjects/GUIGLObjectPopupMenu.h>
      34              : #include <utils/gui/settings/GUIPropertySchemeStorage.h>
      35              : #include "GUIBaseVehicle.h"
      36              : 
      37              : 
      38              : // ===========================================================================
      39              : // class declarations
      40              : // ===========================================================================
      41              : class GUISUMOAbstractView;
      42              : class GUIGLObjectPopupMenu;
      43              : class MSDevice_Vehroutes;
      44              : 
      45              : 
      46              : // ===========================================================================
      47              : // class definitions
      48              : // ===========================================================================
      49              : /**
      50              :  * @class GUIPerson
      51              :  */
      52              : class GUIPerson : public MSPerson, public GUIGlObject {
      53              : 
      54              : public:
      55              :     /// @brief Constructor
      56              :     GUIPerson(const SUMOVehicleParameter* pars, MSVehicleType* vtype, MSTransportable::MSTransportablePlan* plan, const double speedFactor);
      57              : 
      58              :     /// @brief destructor
      59              :     ~GUIPerson();
      60              : 
      61              :     /// @name inherited from GUIGlObject
      62              :     /// @{
      63              :     /** @brief Returns an own popup-menu
      64              :      *
      65              :      * @param[in] app The application needed to build the popup-menu
      66              :      * @param[in] parent The parent window needed to build the popup-menu
      67              :      * @return The built popup-menu
      68              :      * @see GUIGlObject::getPopUpMenu
      69              :      */
      70              :     GUIGLObjectPopupMenu* getPopUpMenu(GUIMainWindow& app, GUISUMOAbstractView& parent) override;
      71              : 
      72              :     /** @brief Returns an own parameter window
      73              :      *
      74              :      * @param[in] app The application needed to build the parameter window
      75              :      * @param[in] parent The parent window needed to build the parameter window
      76              :      * @return The built parameter window
      77              :      * @see GUIGlObject::getParameterWindow
      78              :      */
      79              :     GUIParameterTableWindow* getParameterWindow(GUIMainWindow& app, GUISUMOAbstractView& parent) override;
      80              : 
      81              :     /** @brief Returns an own type parameter window
      82              :      *
      83              :      * @param[in] app The application needed to build the parameter window
      84              :      * @param[in] parent The parent window needed to build the parameter window
      85              :      * @return The built parameter window
      86              :      */
      87              :     GUIParameterTableWindow* getTypeParameterWindow(GUIMainWindow& app, GUISUMOAbstractView& parent) override;
      88              : 
      89              :     /// @brief return exaggeration associated with this GLObject
      90              :     double getExaggeration(const GUIVisualizationSettings& s) const override;
      91              : 
      92              :     /** @brief Returns the boundary to which the view shall be centered in order to show the object
      93              :      *
      94              :      * @return The boundary the object is within
      95              :      * @see GUIGlObject::getCenteringBoundary
      96              :      */
      97              :     Boundary getCenteringBoundary() const override;
      98              : 
      99              :     /** @brief Draws the object
     100              :      * @param[in] s The settings for the current view (may influence drawing)
     101              :      * @see GUIGlObject::drawGL
     102              :      */
     103              :     void drawGL(const GUIVisualizationSettings& s) const override;
     104              : 
     105              :     /** @brief Draws additionally triggered visualisations
     106              :      * @param[in] parent The view
     107              :      * @param[in] s The settings for the current view (may influence drawing)
     108              :      */
     109              :     virtual void drawGLAdditional(GUISUMOAbstractView* const parent, const GUIVisualizationSettings& s) const override;
     110              :     //* @}
     111              : 
     112              :     /* @brief proceeds to the next step of the route,
     113              :      * @return Whether the transportables plan continues  */
     114              :     bool proceed(MSNet* net, SUMOTime time, const bool vehicleArrived = false) override;
     115              : 
     116              :     /* @brief set the position of a person while riding in a vehicle
     117              :      * @note This must be called by the vehicle before the call to drawGl */
     118              :     void setPositionInVehicle(const GUIBaseVehicle::Seat& pos);
     119              : 
     120              :     /// @name inherited from MSPerson with added locking
     121              :     /// @{
     122              :     /// @brief return the offset from the start of the current edge
     123              :     double getEdgePos() const override;
     124              : 
     125              :     /// @brief Return the movement directon on the edge
     126              :     int getDirection() const override;
     127              : 
     128              :     /// @brief return the Network coordinate of the person
     129              :     // @note overrides the base method and returns myPositionInVehicle while in driving stage
     130              :     Position getPosition() const override;
     131              : 
     132              :     /// @brief return the Network coordinate of the person (only for drawing centering and tracking)
     133              :     Position getGUIPosition(const GUIVisualizationSettings* s = nullptr) const;
     134              : 
     135              :     /// @brief return the angle of the person (only for drawing centering and tracking)
     136              :     double getGUIAngle() const;
     137              : 
     138              :     /// @brief return the current angle of the person
     139              :     double getNaviDegree() const;
     140              : 
     141              :     /// @brief the time this person spent waiting in seconds
     142              :     double getWaitingSeconds() const override;
     143              : 
     144              :     /// @brief the current speed of the person
     145              :     double getSpeed() const override;
     146              : 
     147              :     /// @brief get stage index description
     148              :     std::string getStageIndexDescription() const;
     149              : 
     150              :     /// @brief get edge ID
     151              :     std::string getEdgeID() const;
     152              : 
     153              :     /// @brief ger from edge ID
     154              :     std::string getFromEdgeID() const;
     155              : 
     156              :     /// @brief get destination edge ID
     157              :     std::string getDestinationEdgeID() const;
     158              : 
     159              :     /// @brief get destination stop ID
     160              :     std::string getDestinationStopID() const;
     161              : 
     162              :     /// @brief get current vehicle id if applicable
     163              :     std::string getVehicleID() const;
     164              : 
     165              :     /// @brief get remaining duration of current stop or -1
     166              :     double getStopDuration() const;
     167              : 
     168              :     /// @brief get stage arrival position
     169              :     double getStageArrivalPos() const;
     170              : 
     171              :     //@}
     172              : 
     173              :     /// @brief whether this person is selected in the GUI
     174              :     bool isSelected() const override;
     175              : 
     176              :     /// @brief sets the color according to the current scheme index and some vehicle function
     177              :     static bool setFunctionalColor(int activeScheme, const MSPerson* person, RGBColor& col);
     178              : 
     179              :     /// @brief gets the color value according to the current scheme index
     180              :     double getColorValue(const GUIVisualizationSettings& s, int activeScheme) const override;
     181              : 
     182              :     /**
     183              :      * @class GUIPersonPopupMenu
     184              :      *
     185              :      * A popup-menu for vehicles. In comparison to the normal popup-menu, this one
     186              :      *  also allows to trigger further visualisations and to track the vehicle.
     187              :      */
     188              :     class GUIPersonPopupMenu : public GUIGLObjectPopupMenu {
     189            0 :         FXDECLARE(GUIPersonPopupMenu)
     190              : 
     191              :     public:
     192              :         /** @brief Constructor
     193              :          * @param[in] app The main window for instantiation of other windows
     194              :          * @param[in] parent The parent view for changing it
     195              :          * @param[in] o The object of interest
     196              :          */
     197              :         GUIPersonPopupMenu(GUIMainWindow& app, GUISUMOAbstractView& parent, GUIGlObject& o);
     198              : 
     199              :         /// @brief Destructor
     200              :         ~GUIPersonPopupMenu();
     201              : 
     202              :         /// @brief Called if the current route of the person shall be shown
     203              :         long onCmdShowCurrentRoute(FXObject*, FXSelector, void*);
     204              : 
     205              :         /// @brief Called if the current route of the person shall be hidden
     206              :         long onCmdHideCurrentRoute(FXObject*, FXSelector, void*);
     207              : 
     208              :         /// @brief Called if the walkingarea path of the person shall be shown
     209              :         long onCmdShowWalkingareaPath(FXObject*, FXSelector, void*);
     210              : 
     211              :         /// @brief Called if the walkingarea path of the person shall be hidden
     212              :         long onCmdHideWalkingareaPath(FXObject*, FXSelector, void*);
     213              : 
     214              :         /// @brief Called if the plan shall be shown
     215              :         long onCmdShowPlan(FXObject*, FXSelector, void*);
     216              : 
     217              :         /// @brief Called if the person shall be tracked
     218              :         long onCmdStartTrack(FXObject*, FXSelector, void*);
     219              : 
     220              :         /// @brief Called if the person shall not be tracked any longer
     221              :         long onCmdStopTrack(FXObject*, FXSelector, void*);
     222              : 
     223              :         /// @brief Called when removing the person
     224              :         long onCmdRemoveObject(FXObject*, FXSelector, void*);
     225              : 
     226              :     protected:
     227              :         /// @brief default constructor needed by FOX
     228            0 :         FOX_CONSTRUCTOR(GUIPersonPopupMenu)
     229              :     };
     230              : 
     231              :     /// @brief Additional visualisation feature ids
     232              :     enum VisualisationFeatures {
     233              :         /// @brief show the current walkingarea path
     234              :         VO_SHOW_WALKINGAREA_PATH = 1,
     235              :         /// @brief show persons's current route
     236              :         VO_SHOW_ROUTE = 2,
     237              :         /// @brief track person
     238              :         VO_TRACKED = 8
     239              :     };
     240              : 
     241              :     /// @name Additional visualisations
     242              :     /// @{
     243              :     /** @brief Returns whether the named feature is enabled in the given view
     244              :      * @param[in] parent The view for which the feature may be enabled
     245              :      * @param[in] which The visualisation feature
     246              :      * @return see comment
     247              :      */
     248              :     bool hasActiveAddVisualisation(GUISUMOAbstractView* const parent, int which) const;
     249              : 
     250              :     /** @brief Adds the named visualisation feature to the given view
     251              :      * @param[in] parent The view for which the feature shall be enabled
     252              :      * @param[in] which The visualisation feature to enable
     253              :      * @see GUISUMOAbstractView::addAdditionalGLVisualisation
     254              :      */
     255              :     void addActiveAddVisualisation(GUISUMOAbstractView* const parent, int which);
     256              : 
     257              :     /** @brief Adds the named visualisation feature to the given view
     258              :      * @param[in] parent The view for which the feature shall be enabled
     259              :      * @param[in] which The visualisation feature to enable
     260              :      * @see GUISUMOAbstractView::removeAdditionalGLVisualisation
     261              :      */
     262              :     void removeActiveAddVisualisation(GUISUMOAbstractView* const parent, int which) override;
     263              : 
     264              :     /// @}
     265              : 
     266              : private:
     267              :     /// @brief sets the color according to the currente settings
     268              :     void setColor(const GUIVisualizationSettings& s) const;
     269              : 
     270              :     /// @brief draw walking area path
     271              :     void drawAction_drawWalkingareaPath(const GUIVisualizationSettings& s) const;
     272              : 
     273              :     /// The mutex used to avoid concurrent updates of the vehicle buffer
     274              :     mutable FXMutex myLock;
     275              : 
     276              :     /// The position of a person while riding a vehicle
     277              :     GUIBaseVehicle::Seat myPositionInVehicle;
     278              : 
     279              :     /// @brief Enabled visualisations, per view
     280              :     std::map<GUISUMOAbstractView*, int> myAdditionalVisualizations;
     281              : };
        

Generated by: LCOV version 2.0-1