Robot Simulator of the Robotics Group for Self-Organization of Control: CameraManipulator Class Reference

# CameraManipulator Class Reference

CameraManipulator is a MatrixManipulator which provides a flying camera updating of the camera position & orientation. More...

`#include <cameramanipulator.h>`

Inherits Callbackable.

Inherited by CameraManipulatorFollow, CameraManipulatorRace, and CameraManipulatorTV.

Collaboration diagram for CameraManipulator:
[legend]

List of all members.

## Public Member Functions
| CameraManipulator (osg::Node *node, GlobalData &global, CameraHandle &cameraHandle)
virtual const char * | className () const
| returns the classname of the manipulator it's NECCESSARY to define this funtion, otherwise the new manipulator WON'T WORK! (but ask me not why)
virtual void | setByMatrix (const osg::Matrixd &matrix)
| set the position of the matrix manipulator using a 4x4 Matrix.
virtual void | setByInverseMatrix (const osg::Matrixd &matrix)
| set the position of the matrix manipulator using a 4x4 Matrix.
virtual osg::Matrixd | getMatrix () const
| get the position of the manipulator as 4x4 Matrix.
virtual osg::Matrixd | getInverseMatrix () const
| get the position of the manipulator as a inverse matrix of the manipulator, typically used as a model view matrix.
virtual void | setNode (osg::Node *)
| is called every time the draw is updated.
virtual const osg::Node * | getNode () const
virtual osg::Node * | getNode ()
virtual void | setHome (const osg::Vec3 &eye, const osg::Vec3 &view)
| set the home position of the camera. (and place it there)
virtual void | home (const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &us)
| place the camera at its home position
virtual void | init (const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &us)
virtual bool | handle (const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &us)
virtual void | getUsage (osg::ApplicationUsage &usage) const
| Get the keyboard and mouse usage of this manipulator.
virtual void | update ()
| updates the camera module at every drawstep should be called from the simulation loop
virtual void | manipulateAgent (OsgHandle &osgHandle)
| manipulate agent if Manipulation is active (should be called every simulation step)
virtual void | setWatchedAgent (OdeAgent *agent)
| Sets the agent to be watched with the camera.
virtual OdeAgent * | getWatchedAgent ()
| returns watched agent
virtual void | doOnCallBack (BackCaller *source, BackCaller::CallbackableType type=BackCaller::DEFAULT_CALLBACKABLE_TYPE)
| called if agents list changed
## Protected Member Functions
virtual | ~CameraManipulator ()
virtual void | flushMouseEventStack ()
| Reset the internal GUIEvent stack.
virtual void | addMouseEvent (const osgGA::GUIEventAdapter &ea)
| Add the current mouse GUIEvent to internal stack.
virtual void | computeMatrix ()
virtual bool | calcMovement ()
| For the give mouse movement calculate the movement of the camera.
virtual bool | isWatchingAgentDefined ()
| Checks if an agent is selected and if this agent is available.
virtual void | manageAgents (const int &fkey)
| This manages the robots, switching between them and so on Is normally called from handle(.
virtual void | calcMovementByAgent ()
| This handles robot movements, so that the camera movemenent is right affected.
virtual void | setHomeViewByAgent ()
| Sets the right view and eye if the robot has changed.
virtual void | setHomeEyeByAgent ()
virtual void | moveBehindAgent ()
| moves behind the robot which is actually watched
virtual void | centerOnAgent ()
| centers on the robot which is actually watched
virtual void | calcManipulationPointHorizontal (float x, float y)
| manipulates Agent by forces.
virtual void | calcManipulationPointVertical (float x, float y)
virtual void | calcManipulationPoint (float x, float y)
## Protected Attributes
osg::ref_ptr< const osgGA::GUIEventAdapter > | event_old
osg::ref_ptr< const osgGA::GUIEventAdapter > | event
osg::ref_ptr< osg::Node > | node
float | modelScale
osg::Matrixd | pose
CameraHandle & | camHandle
GlobalData & | globalData
double | degreeSmoothness
double | lengthSmoothness
double | degreeAccuracy
double | lengthAccuracy

## Detailed Description

CameraManipulator is a MatrixManipulator which provides a flying camera updating of the camera position & orientation.

Left mouse button: Pan and tilt Right mouse button: forward and sideways Middle mouse button: up and sideways

It also enables to manipulate agents with forces

## Constructor & Destructor Documentation

CameraManipulator | ( | osg::Node * | node,
|  | GlobalData & | global,
|  | CameraHandle & | cameraHandle |
| ) |  |  |

~CameraManipulator | ( |  | ) | `[protected, virtual]`

## Member Function Documentation

void addMouseEvent | ( | const osgGA::GUIEventAdapter & | ea | ) | `[protected, virtual]`

Add the current mouse GUIEvent to internal stack.

void calcManipulationPoint | ( | float | x,
|  | float | y |
| ) |  |  | `[protected, virtual]`

void calcManipulationPointHorizontal | ( | float | x,
|  | float | y |
| ) |  |  | `[protected, virtual]`

manipulates Agent by forces.

The given points are screen coords (-1 to 1) normalized.

void calcManipulationPointVertical | ( | float | x,
|  | float | y |
| ) |  |  | `[protected, virtual]`

bool calcMovement | ( |  | ) | `[protected, virtual]`

For the give mouse movement calculate the movement of the camera.

Return true is camera has moved and a redraw is required.

void calcMovementByAgent | ( |  | ) | `[protected, virtual]`

This handles robot movements, so that the camera movemenent is right affected.

should normally be overwritten by new cameramanipulator

Reimplemented in CameraManipulatorFollow, CameraManipulatorRace, and CameraManipulatorTV.

void centerOnAgent | ( |  | ) | `[protected, virtual]`

centers on the robot which is actually watched

virtual const char* className | ( |  | ) | const`[inline, virtual]`

returns the classname of the manipulator it's NECCESSARY to define this funtion, otherwise the new manipulator WON'T WORK! (but ask me not why)

Reimplemented in CameraManipulatorRace, and CameraManipulatorTV.

void computeMatrix | ( |  | ) | `[protected, virtual]`

void doOnCallBack | ( | BackCaller * | source,
|  | BackCaller::CallbackableType | type = `BackCaller::DEFAULT_CALLBACKABLE_TYPE` |
| ) |  |  | `[virtual]`

called if agents list changed

Implements Callbackable.

void flushMouseEventStack | ( |  | ) | `[protected, virtual]`

Reset the internal GUIEvent stack.

Matrixd getInverseMatrix | ( |  | ) | const`[virtual]`

get the position of the manipulator as a inverse matrix of the manipulator, typically used as a model view matrix.

Matrixd getMatrix | ( |  | ) | const`[virtual]`

get the position of the manipulator as 4x4 Matrix.

Node * getNode | ( |  | ) | `[virtual]`

const Node * getNode | ( |  | ) | const`[virtual]`

void getUsage | ( | osg::ApplicationUsage & | usage | ) | const`[virtual]`

Get the keyboard and mouse usage of this manipulator.

OdeAgent * getWatchedAgent | ( |  | ) | `[virtual]`

returns watched agent

bool handle | ( | const osgGA::GUIEventAdapter & | ea,
|  | osgGA::GUIActionAdapter & | us |
| ) |  |  | `[virtual]`

void home | ( | const osgGA::GUIEventAdapter & | ea,
|  | osgGA::GUIActionAdapter & | us |
| ) |  |  | `[virtual]`

place the camera at its home position

void init | ( | const osgGA::GUIEventAdapter & | ea,
|  | osgGA::GUIActionAdapter & | us |
| ) |  |  | `[virtual]`

bool isWatchingAgentDefined | ( |  | ) | `[protected, virtual]`

Checks if an agent is selected and if this agent is available.

This agent must be listed in the global agent list.

Returns:
  true if defined, otherwise false

void manageAgents | ( | const int & | fkey | ) | `[protected, virtual]`

This manages the robots, switching between them and so on Is normally called from handle(.

..)

void manipulateAgent | ( | OsgHandle & | osgHandle | ) | `[virtual]`

manipulate agent if Manipulation is active (should be called every simulation step)

void moveBehindAgent | ( |  | ) | `[protected, virtual]`

moves behind the robot which is actually watched

virtual void setByInverseMatrix | ( | const osg::Matrixd & | matrix | ) | `[inline, virtual]`

set the position of the matrix manipulator using a 4x4 Matrix.

void setByMatrix | ( | const osg::Matrixd & | matrix | ) | `[virtual]`

set the position of the matrix manipulator using a 4x4 Matrix.

normally called only when this manipulator is choosed

void setHome | ( | const osg::Vec3 & | eye,
|  | const osg::Vec3 & | view |
| ) |  |  | `[virtual]`

set the home position of the camera. (and place it there)

void setHomeEyeByAgent | ( |  | ) | `[protected, virtual]`

Reimplemented in CameraManipulatorTV.

void setHomeViewByAgent | ( |  | ) | `[protected, virtual]`

Sets the right view and eye if the robot has changed.

Is called from manageRobots(); should be overwritten by new cameramanipulator (if needed)

Reimplemented in CameraManipulatorFollow, and CameraManipulatorTV.

void setNode | ( | osg::Node * | node | ) | `[virtual]`

is called every time the draw is updated.

computes the movement of the camera, which is a difference between the desired pos and view and the actual pos and view.

void setWatchedAgent | ( | OdeAgent * | agent | ) | `[virtual]`

Sets the agent to be watched with the camera.

Parameters:

  | agent | to set

void update | ( |  | ) | `[virtual]`

updates the camera module at every drawstep should be called from the simulation loop

## Member Data Documentation

CameraHandle& camHandle`[protected]`

double degreeAccuracy`[protected]`

double degreeSmoothness`[protected]`

osg::ref_ptr<const osgGA::GUIEventAdapter> event`[protected]`

osg::ref_ptr<const osgGA::GUIEventAdapter> event_old`[protected]`

GlobalData& globalData`[protected]`

double lengthAccuracy`[protected]`

double lengthSmoothness`[protected]`

float modelScale`[protected]`

osg::ref_ptr<osg::Node> node`[protected]`

osg::Matrixd pose`[protected]`

The documentation for this class was generated from the following files:

- cameramanipulator.h
- cameramanipulator.cpp