ViSP
 All Classes Functions Variables Enumerations Enumerator Friends Groups Pages
vpSimulator Class Reference

#include <vpSimulator.h>

+ Inheritance diagram for vpSimulator:
+ Collaboration diagram for vpSimulator:

Public Types

enum  vpImageType { grayImage, colorImage }
enum  vpSimulatorViewType { INTERNAL, EXTERNAL }

Public Member Functions

 vpSimulator ()
virtual ~vpSimulator ()
virtual void mainLoop ()
virtual void initInternalViewer (const unsigned int nlig, const unsigned int ncol)
void initExternalViewer (const unsigned int nlig, const unsigned int ncol)
void initApplication (void *(*start_routine)(void *))
void initApplication (void *(*start_routine)(void *), void *data)
void initMainApplication ()
void closeMainApplication ()
unsigned int getInternalWidth () const
unsigned int getInternalHeight () const
void addObject (SoSeparator *newObject, const vpHomogeneousMatrix &fMo)
void redraw ()
void load (const char *file_name)
void load (const char *iv_filename, const vpHomogeneousMatrix &fMo)
void save (const char *name, bool binary=false)
void addAbsoluteFrame (float zoom=1)
void addFrame (const vpHomogeneousMatrix &fMo, float zoom=1)
void setZoomFactor (const float zoom)
void setCameraPosition (vpHomogeneousMatrix &cMf)
void getCameraPosition (vpHomogeneousMatrix &_cMf)
void moveInternalCamera (vpHomogeneousMatrix &cMf)
void setInternalCameraParameters (vpCameraParameters &cam)
void setExternalCameraParameters (vpCameraParameters &cam)
void getExternalCameraPosition (vpHomogeneousMatrix &cMf)
void getInternalImage (vpImage< unsigned char > &I)
void getInternalImage (vpImage< vpRGBa > &I)
void changeZoomFactor (const float zoom, const int index)
void write (const char *fileName)
unsigned char * getBufferedOffScreenRenderer ()
void getSizeInternalView (int &width, int &height)
void getCameraParameters (vpCameraParameters &cam)

Public Attributes

vpImageType typeImage
GLubyte * image_background
unsigned char * bufferView
int get

Protected Member Functions

void init ()
void kill ()
void initSoApplication ()
void initSceneGraph ()
void addObject (SoSeparator *object, const vpHomogeneousMatrix &fMo, SoSeparator *root)
void offScreenRendering (vpSimulatorViewType view=vpSimulator::EXTERNAL, int *width=NULL, int *height=NULL)

Protected Attributes

HWND mainWindow
bool mainWindowInitialized
vpViewerinternalView
vpViewerexternalView
SbThread * mainThread
unsigned int internal_width
unsigned int internal_height
unsigned int external_width
unsigned int external_height
SoSeparator * scene
SoSeparator * internalRoot
SoSeparator * externalRoot
SoPerspectiveCamera * internalCamera
SoPerspectiveCamera * externalCamera
SoTransform * internalCameraPosition
SoTransform * extrenalCameraPosition
SoSeparator * internalCameraObject
float zoomFactor
bool cameraPositionInitialized
vpHomogeneousMatrix cMf
vpCameraParameters internalCameraParameters
vpCameraParameters externalCameraParameters
SbTime * realtime
SoOffscreenRenderer * offScreenRenderer

Detailed Description

Implementation of a simulator based on Coin3d (www.coin3d.org).

The simulator uses the vpViewer class.

Warning
This class is only available if Coin3D and one of the GUI (SoWin, SoXT, SoQt) are installed.
Examples:
manSimu4Dots.cpp, manSimu4Points.cpp, simulateCircle2DCamVelocity.cpp, simulateFourPoints2DCartesianCamVelocity.cpp, and simulateFourPoints2DPolarCamVelocity.cpp.

Definition at line 102 of file vpSimulator.h.

Member Enumeration Documentation

Enumerator:
grayImage 
colorImage 

Definition at line 131 of file vpSimulator.h.

Enumerator:
INTERNAL 
EXTERNAL 

Definition at line 274 of file vpSimulator.h.

Constructor & Destructor Documentation

vpSimulator::vpSimulator ( )

constructor

Definition at line 308 of file vpSimulator.cpp.

References init().

vpSimulator::~vpSimulator ( )
virtual

Definition at line 313 of file vpSimulator.cpp.

References kill().

Member Function Documentation

void vpSimulator::addAbsoluteFrame ( float  zoom = 1)

Add the representation of the absolute frame.

Parameters
zoom: Zoom factor.
Examples:
simulateCircle2DCamVelocity.cpp.

Definition at line 743 of file vpSimulator.cpp.

References scene.

void vpSimulator::addFrame ( const vpHomogeneousMatrix fMo,
float  zoom = 1 
)

Add the representation of a frame.

Add the representation of a frame.

Parameters
fMo: desired position of the frame
zoom: Zoom factor.

Definition at line 723 of file vpSimulator.cpp.

References addObject(), and externalRoot.

void vpSimulator::addObject ( SoSeparator *  object,
const vpHomogeneousMatrix fMo,
SoSeparator *  root 
)
protected

Add a new object in the scene graph ad a given location.

Add an object in a sub scene graph.

Parameters
object: pointer toward the new object
fMo: position of the object wrt the reference frame
root: pointer toward the subscene graph

Definition at line 815 of file vpSimulator.cpp.

References vpTRACE.

Referenced by addFrame(), addObject(), and load().

+ Here is the caller graph for this function:

void vpSimulator::addObject ( SoSeparator *  newObject,
const vpHomogeneousMatrix fMo 
)

Add a new object in the scene graph ad a given location.

Add a new object in the scene graph.

Parameters
newObject: pointer toward the new object
fMo: position of the object wrt the reference frame

Definition at line 790 of file vpSimulator.cpp.

References addObject(), scene, and vpERROR_TRACE.

void vpSimulator::changeZoomFactor ( const float  zoomFactor,
const int  index 
)

Change the zoom factor associated to the child given by index. In order to create multiple zoom factor for multiple object to display, objects loaded the load() function, you have to know the index of the scale object associated to.

Usually, if you define the main zoom factor (for example for the frames) and then load two differents objects, You can change the zoom factor of all the objects using: changeZoomFactor(newZoom, 0)

If you want to change the zoom factor of the first object, use changeZoomFactor(newZoom, 1)

And for the second object, use changeZoomFactor(newZoom, 3)

Parameters
zoomFactor: the new zoom use to specify the apparent size of the object
index: the index of the Scale object to modify (see comments)

Definition at line 429 of file vpSimulator.cpp.

References scene.

void vpSimulator::closeMainApplication ( )

performed some thread destruction in the main program thread should be locate at the end of the main program

Examples:
manSimu4Dots.cpp, manSimu4Points.cpp, simulateCircle2DCamVelocity.cpp, simulateFourPoints2DCartesianCamVelocity.cpp, and simulateFourPoints2DPolarCamVelocity.cpp.

Definition at line 899 of file vpSimulator.cpp.

unsigned char* vpSimulator::getBufferedOffScreenRenderer ( )
inline

get the image corresponding to the internal view

Definition at line 290 of file vpSimulator.h.

void vpSimulator::getCameraParameters ( vpCameraParameters cam)
inline

get the intrinsic parameters of the camera

Examples:
manSimu4Dots.cpp, and manSimu4Points.cpp.

Definition at line 299 of file vpSimulator.h.

void vpSimulator::getCameraPosition ( vpHomogeneousMatrix _cMf)
inline

get the camera position (from an homogeneous matrix)

Examples:
simulateFourPoints2DCartesianCamVelocity.cpp, and simulateFourPoints2DPolarCamVelocity.cpp.

Definition at line 256 of file vpSimulator.h.

void vpSimulator::getExternalCameraPosition ( vpHomogeneousMatrix cMf)

get the external camera position

Definition at line 542 of file vpSimulator.cpp.

References externalCamera, and vpHomogeneousMatrix::inverse().

unsigned int vpSimulator::getInternalHeight ( ) const
inline

Return the height of the internal view.

Returns
The height of the internal view.
Examples:
manSimu4Dots.cpp.

Definition at line 186 of file vpSimulator.h.

Referenced by vpViewer::actualRedraw().

+ Here is the caller graph for this function:

void vpSimulator::getInternalImage ( vpImage< unsigned char > &  I)

get an Image of the internal view

Make a copy of the current internal view

Parameters
I: destination image
Examples:
manSimu4Dots.cpp.

Definition at line 1052 of file vpSimulator.cpp.

References vpImage< Type >::bitmap, bufferView, internal_height, internal_width, vpImage< Type >::resize(), and vpImageConvert::RGBToGrey().

void vpSimulator::getInternalImage ( vpImage< vpRGBa > &  I)

get an Image of the internal view

Make a copy of the current internal view

Parameters
I: destination image

Definition at line 1038 of file vpSimulator.cpp.

References vpImage< Type >::bitmap, bufferView, internal_height, internal_width, vpImage< Type >::resize(), and vpImageConvert::RGBToRGBa().

unsigned int vpSimulator::getInternalWidth ( ) const
inline

Return the width of the internal view.

Returns
The width of the internal view.
Examples:
manSimu4Dots.cpp.

Definition at line 180 of file vpSimulator.h.

Referenced by vpViewer::actualRedraw().

+ Here is the caller graph for this function:

void vpSimulator::getSizeInternalView ( int &  width,
int &  height 
)

get the size of the internal view

Definition at line 1025 of file vpSimulator.cpp.

void vpSimulator::init ( void  )
protected

perform some initialization

Definition at line 274 of file vpSimulator.cpp.

References bufferView, cameraPositionInitialized, external_height, external_width, externalView, image_background, internal_height, internal_width, internalView, mainWindowInitialized, offScreenRenderer, realtime, and zoomFactor.

Referenced by initSoApplication(), and vpSimulator().

+ Here is the caller graph for this function:

void vpSimulator::initApplication ( void *(*)(void *)  start_routine)

begin the main program

init the main program thread

Examples:
manSimu4Dots.cpp, manSimu4Points.cpp, simulateCircle2DCamVelocity.cpp, simulateFourPoints2DCartesianCamVelocity.cpp, and simulateFourPoints2DPolarCamVelocity.cpp.

Definition at line 866 of file vpSimulator.cpp.

References mainThread.

void vpSimulator::initApplication ( void *(*)(void *)  start_routine,
void *  data 
)

Set the function used for the simulation loop and the data to pass to this function. As the data are represented using a generic pointer, care should be taken to ensure there is no memory corruption.

Parameters
start_routine: A pointer to the function used as a main simulation loop for the simulation.
data: The data to pass to the main loop.

Definition at line 882 of file vpSimulator.cpp.

References mainThread.

void vpSimulator::initMainApplication ( )

perform some initialization in the main program thread

performed some initialization in the main program thread should be locate at the beginning of the main program

Examples:
manSimu4Dots.cpp, manSimu4Points.cpp, simulateCircle2DCamVelocity.cpp, simulateFourPoints2DCartesianCamVelocity.cpp, and simulateFourPoints2DPolarCamVelocity.cpp.

Definition at line 890 of file vpSimulator.cpp.

References vpTime::wait().

void vpSimulator::initSceneGraph ( )
protected

initialize the scene graph

Definition at line 326 of file vpSimulator.cpp.

References externalCamera, externalRoot, internalCamera, internalCameraObject, internalCameraPosition, internalRoot, realtime, scene, and zoomFactor.

Referenced by initExternalViewer(), and initInternalViewer().

+ Here is the caller graph for this function:

void vpSimulator::initSoApplication ( )
protected

open the SoGui application

Definition at line 319 of file vpSimulator.cpp.

References init(), mainWindow, and mainWindowInitialized.

Referenced by initExternalViewer(), and initInternalViewer().

+ Here is the caller graph for this function:

void vpSimulator::kill ( )
protected

perform some destruction

Definition at line 296 of file vpSimulator.cpp.

References bufferView, externalView, image_background, and internalView.

Referenced by vpAR::~vpAR(), and ~vpSimulator().

+ Here is the caller graph for this function:

void vpSimulator::load ( const char *  file_name)
void vpSimulator::load ( const char *  iv_filename,
const vpHomogeneousMatrix fMo 
)

load an iv file, set the location of this scene

Add a new object in the scene graph.

Parameters
iv_filename: name of.iv file to load
fMo: position of the object wrt the reference frame

Definition at line 754 of file vpSimulator.cpp.

References addObject(), and vpERROR_TRACE.

void vpSimulator::moveInternalCamera ( vpHomogeneousMatrix cMf)

modify the position of the camera in the scene graph

Definition at line 583 of file vpSimulator.cpp.

References internalCamera, internalCameraPosition, and vpHomogeneousMatrix::inverse().

Referenced by redraw().

+ Here is the caller graph for this function:

void vpSimulator::offScreenRendering ( vpSimulatorViewType  view = vpSimulator::EXTERNAL,
int *  width = NULL,
int *  height = NULL 
)
protected

Definition at line 920 of file vpSimulator.cpp.

References INTERNAL, offScreenRenderer, and vpERROR_TRACE.

void vpSimulator::redraw ( )

display the scene (handle with care)

this function MUST NOT be called from a thread where the vpSimulator and its mainloop are not

Definition at line 618 of file vpSimulator.cpp.

References cMf, externalView, internalView, and moveInternalCamera().

void vpSimulator::save ( const char *  name,
bool  binary = false 
)

save the scene in an iv file

Definition at line 703 of file vpSimulator.cpp.

References scene.

void vpSimulator::setCameraPosition ( vpHomogeneousMatrix cMf)
void vpSimulator::setExternalCameraParameters ( vpCameraParameters cam)
void vpSimulator::setZoomFactor ( const float  zoom)

set the size of the camera/frame

Define the zoom factor used to define the size of the objects (frame, camera, ...)

Parameters
zoom,:zoom factor of the objects. By default, 1.
Examples:
simulateCircle2DCamVelocity.cpp, simulateFourPoints2DCartesianCamVelocity.cpp, and simulateFourPoints2DPolarCamVelocity.cpp.

Definition at line 395 of file vpSimulator.cpp.

References scene, and zoomFactor.

Member Data Documentation

unsigned char* vpSimulator::bufferView

image of the internal view

Definition at line 284 of file vpSimulator.h.

Referenced by vpViewer::actualRedraw(), getInternalImage(), init(), initInternalViewer(), kill(), and write().

bool vpSimulator::cameraPositionInitialized
protected

Definition at line 244 of file vpSimulator.h.

Referenced by init(), and setCameraPosition().

vpHomogeneousMatrix vpSimulator::cMf
protected

internal camera position

Definition at line 246 of file vpSimulator.h.

Referenced by redraw(), and setCameraPosition().

unsigned int vpSimulator::external_height
protected

Definition at line 172 of file vpSimulator.h.

Referenced by init(), initExternalViewer(), and setExternalCameraParameters().

unsigned int vpSimulator::external_width
protected

Definition at line 171 of file vpSimulator.h.

Referenced by init(), initExternalViewer(), and setExternalCameraParameters().

SoPerspectiveCamera* vpSimulator::externalCamera
protected

external camera

Definition at line 200 of file vpSimulator.h.

Referenced by getExternalCameraPosition(), initSceneGraph(), and setExternalCameraParameters().

vpCameraParameters vpSimulator::externalCameraParameters
protected

internal camera parameters

Definition at line 250 of file vpSimulator.h.

Referenced by setExternalCameraParameters().

SoSeparator* vpSimulator::externalRoot
protected

root node of the external view

Definition at line 195 of file vpSimulator.h.

Referenced by addFrame(), initExternalViewer(), and initSceneGraph().

vpViewer* vpSimulator::externalView
protected

view from an external camera

Definition at line 145 of file vpSimulator.h.

Referenced by init(), initExternalViewer(), kill(), and redraw().

SoTransform* vpSimulator::extrenalCameraPosition
protected

external camera position

Definition at line 206 of file vpSimulator.h.

int vpSimulator::get

Flag to protect the read and write of the framebuffer (between the simulator and the viewer).

Definition at line 287 of file vpSimulator.h.

Referenced by vpViewer::actualRedraw().

GLubyte* vpSimulator::image_background
unsigned int vpSimulator::internal_height
protected
unsigned int vpSimulator::internal_width
protected
SoPerspectiveCamera* vpSimulator::internalCamera
protected

internal camera

Definition at line 198 of file vpSimulator.h.

Referenced by initSceneGraph(), moveInternalCamera(), and setInternalCameraParameters().

SoSeparator* vpSimulator::internalCameraObject
protected

representation of the camera in the external view

Definition at line 209 of file vpSimulator.h.

Referenced by initSceneGraph().

vpCameraParameters vpSimulator::internalCameraParameters
protected

internal camera parameters

Definition at line 248 of file vpSimulator.h.

Referenced by setInternalCameraParameters().

SoTransform* vpSimulator::internalCameraPosition
protected

internal camera position

Definition at line 203 of file vpSimulator.h.

Referenced by initSceneGraph(), and moveInternalCamera().

SoSeparator* vpSimulator::internalRoot
protected

root node of the internal view

Definition at line 193 of file vpSimulator.h.

Referenced by initInternalViewer(), and initSceneGraph().

vpViewer* vpSimulator::internalView
protected

view from the camera

Definition at line 143 of file vpSimulator.h.

Referenced by init(), initInternalViewer(), kill(), and redraw().

SbThread* vpSimulator::mainThread
protected

thread with the main program

Definition at line 155 of file vpSimulator.h.

Referenced by initApplication().

HWND vpSimulator::mainWindow
protected

main Widget

Definition at line 118 of file vpSimulator.h.

Referenced by initExternalViewer(), initInternalViewer(), and initSoApplication().

bool vpSimulator::mainWindowInitialized
protected
SoOffscreenRenderer* vpSimulator::offScreenRenderer
protected

Definition at line 278 of file vpSimulator.h.

Referenced by init(), and offScreenRendering().

SbTime* vpSimulator::realtime
protected

Definition at line 277 of file vpSimulator.h.

Referenced by init(), and initSceneGraph().

SoSeparator* vpSimulator::scene
protected

root node of the scene : contains everything except stuff specific to each view

Definition at line 191 of file vpSimulator.h.

Referenced by addAbsoluteFrame(), addObject(), changeZoomFactor(), initSceneGraph(), load(), save(), and setZoomFactor().

vpImageType vpSimulator::typeImage

Definition at line 135 of file vpSimulator.h.

Referenced by vpViewer::actualRedraw(), and vpAR::initInternalViewer().

float vpSimulator::zoomFactor
protected

Definition at line 240 of file vpSimulator.h.

Referenced by init(), initSceneGraph(), load(), and setZoomFactor().