ViSP  2.8.0
vpSimulator Class Reference

#include <vpSimulator.h>

+ Inheritance 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().

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().

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().

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
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
void vpSimulator::initSoApplication ( )
protected

open the SoGui application

Definition at line 319 of file vpSimulator.cpp.

References mainWindow, and mainWindowInitialized.

Referenced by initExternalViewer(), and initInternalViewer().

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().

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().

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
zoomzoom 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().