Menge
Modular Pedestrian Simulation Framework for Research and Development
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
BaseAgentContext.h
Go to the documentation of this file.
1 /*
2 
3 License
4 
5 Menge
6 Copyright and trademark 2012-14 University of North Carolina at Chapel Hill.
7 All rights reserved.
8 
9 Permission to use, copy, modify, and distribute this software and its documentation
10 for educational, research, and non-profit purposes, without fee, and without a
11 written agreement is hereby granted, provided that the above copyright notice,
12 this paragraph, and the following four paragraphs appear in all copies.
13 
14 This software program and documentation are copyrighted by the University of North
15 Carolina at Chapel Hill. The software program and documentation are supplied "as is,"
16 without any accompanying services from the University of North Carolina at Chapel
17 Hill or the authors. The University of North Carolina at Chapel Hill and the
18 authors do not warrant that the operation of the program will be uninterrupted
19 or error-free. The end-user understands that the program was developed for research
20 purposes and is advised not to rely exclusively on the program for any reason.
21 
22 IN NO EVENT SHALL THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL OR THE AUTHORS
23 BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
24 DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
25 DOCUMENTATION, EVEN IF THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL OR THE
26 AUTHORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 
28 THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL AND THE AUTHORS SPECIFICALLY
29 DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
30 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AND ANY STATUTORY WARRANTY
31 OF NON-INFRINGEMENT. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND
32 THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL AND THE AUTHORS HAVE NO OBLIGATIONS
33 TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
34 
35 Any questions or comments should be sent to the authors {menge,geom}@cs.unc.edu
36 
37 */
38 
45 #ifndef __BASE_AGENT_CONTEXT_H__
46 #define __BASE_AGENT_CONTEXT_H__
47 
48 #include "CoreConfig.h"
49 #include "Context.h"
50 #include <string>
51 
52 namespace Menge {
53 
54  namespace SceneGraph {
55  class GLScene;
56  class GLCamera;
57  }
58 
59  namespace BFSM {
60  class FsmContext;
61  };
62 
63  namespace Agents {
64  class BaseAgent;
65  }
66 
67  class VisAgent;
68 
73  class MENGE_API BaseAgentContext : public SceneGraph::SelectContext {
74  public:
78  enum BACState {
80  TYPE_AGENT_ID_ST
81  };
82 
90  BaseAgentContext( VisAgent ** agents, size_t agtCount, BFSM::FsmContext * fsmCtx=0x0 );
91 
95  virtual ~BaseAgentContext();
96 
102  void setFSMContext( BFSM::FsmContext * ctx ) { _fsmCtx = ctx; }
103 
112  virtual SceneGraph::ContextResult handleKeyboard( SDL_Event & e );
113 
120  virtual void drawGL( int vWidth, int vHeight );
121 
134  virtual bool selectGL( const SceneGraph::GLScene * scene, const SceneGraph::GLCamera & camera, int vWidth, int vHeight, int * selectPoint );
135 
139  virtual void activate();
140 
141  protected:
150  virtual void drawUIGL( int vWidth, int vHeight, bool select=false );
151 
158  virtual void draw3DGL( bool select=false );
159 
165  virtual std::string contextName() const { return "BaseAgent"; }
166 
174  virtual std::string agentText( const Agents::BaseAgent * agent ) const;
175 
179  static const float Y;
180 
185 
190 
195 
199  void drawNbrRadius( const Agents::BaseAgent * agt );
200 
204  bool _showNbr;
205 
209  void drawNeighbors( const Agents::BaseAgent * agt );
210 
215 
219  void drawMaxSpeed( const Agents::BaseAgent * agt );
220 
224  bool _showVel;
225 
229  void drawVelocity( const Agents::BaseAgent * agt );
230 
235 
239  void drawPrefVelocity( const Agents::BaseAgent * agt );
240 
245 
249  void drawOrientation( const Agents::BaseAgent * agt );
250 
255 
259  size_t _agtCount;
260 
264  static const unsigned int MAX_TYPE_DIGITS = 10;
265 
269  char _digits[ MAX_TYPE_DIGITS + 1 ];
270 
274  unsigned int _digitCount;
275 
279  void beginIDTyping();
280 
284  void finishIDTyping();
285 
289  void cancelIDTyping();
290 
294  void drawIDTyping();
295 
299  void addIDDigit( const char digit );
300 
306  };
307 
308 } // namespace Menge
309 
310 #endif // __BASE_AGENT_CONTEXT_H__
The default operating state.
Definition: BaseAgentContext.h:79
bool _showOrient
Determines if the orientation of the agent is displayed.
Definition: BaseAgentContext.h:244
SDL_Event SDL_Event
Forward declaration of the SDL event type.
Definition: Context.h:53
The core namespace. All elements of Menge are contained in this namespace.
Definition: AgentGenerator.cpp:43
Sets up the proper compiler directives for platform and dll export/import.
void setFSMContext(BFSM::FsmContext *ctx)
Sets the fsm context.
Definition: BaseAgentContext.h:102
BACState _state
The state of the context.
Definition: BaseAgentContext.h:189
A context that performs object selection by directly clicking on selectable entities in the OpenGL co...
Definition: Context.h:352
The SceneGraph (SceneGraph) name space, containing all elements to use in a SceneGraph.
BFSM::FsmContext * _fsmCtx
An optional finite state machine context to visualize the computation of agent behavior.
Definition: BaseAgentContext.h:305
BACState
Definition of the state of the context.
Definition: BaseAgentContext.h:78
Base context for finite state machine elements.
Definition: FsmContext.h:71
unsigned int _digitCount
Number of typed digits.
Definition: BaseAgentContext.h:274
size_t _agtCount
The number of agents in the scene.
Definition: BaseAgentContext.h:259
Context class for displaying various characteristics of the Agents::BaseAgent class.
Definition: BaseAgentContext.h:73
The class which contains the entire drawable scene.
Definition: GLScene.h:72
VisAgent * _selected
The currently selected visualization agent.
Definition: BaseAgentContext.h:184
bool _showNbr
Determines if the neighbors are indicated in the view.
Definition: BaseAgentContext.h:204
Defines the result of the context's consideration of user input.
Definition: Context.h:74
The basic agent visualization class: a selectable cylinder.
Definition: VisAgent.h:66
The namespace contains the Behavior Finite State Machine (BFSM) definition.
bool _showNbrRadius
Determines if the neighbor distance is rendered.
Definition: BaseAgentContext.h:194
The class for controlling the view camera: it's position, orientation field of view, projection matrix, etc.
Definition: GLCamera.h:57
virtual std::string contextName() const
Returns the name of the context for display.
Definition: BaseAgentContext.h:165
Defines the basic agent properties and functionality that all simulation agents share.
Definition: BaseAgent.h:123
bool _showMaxSpd
Determines if the circle of maximum speed is displayed.
Definition: BaseAgentContext.h:214
The namespace that contains the basic simulation mechanisms.
bool _showPrefVel
Determines if the preferred velocity is displayed.
Definition: BaseAgentContext.h:234
VisAgent ** _visAgents
A pointer to the agents in the scene.
Definition: BaseAgentContext.h:254
static const float Y
The drawing depth for the 3D elements.
Definition: BaseAgentContext.h:179
bool _showVel
Determines if the current velocity is displayed.
Definition: BaseAgentContext.h:224
Defines a context for handling user interaction (mouse and keyboard input).