LCOV - code coverage report
Current view: top level - src/guisim - GUIPerson.h (source / functions) Hit Total Coverage
Test: lcov.info Lines: 0 2 0.0 %
Date: 2024-04-27 15:34:54 Functions: 0 1 0.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 1.14