back to the text
/*----------------------------------------------------
*
* NAVIGATION.c - navigation function
*
*--------------------------------------------------*/
#include "INCLUDES.h"
// navigation data
struct NAV_DATA
{
float G400pos[3] , G400rot;
};
// pointer to navigation data type
static NAV_DATA *myNav ;
/*--------------------------------------------------*/
// allocate navigation data from shared memory
void setup_navigation()
{
myNav = (NAV_DATA*)CAVEMalloc(sizeof(NAV_DATA));
}
/*--------------------------------------------------*/
// reset navigation data (which resides in shared memory) this
// function is accessible to all processes in app
void reset_navigation_to(float Nx, float Ny, float Nz, float Nrot)
{
myNav->G400pos[0] = Nx;
myNav->G400pos[1] = Ny;
myNav->G400pos[2] = Nz;
myNav->G400rot = Nrot ;
}
/*--------------------------------------------------*/
void do_navigation()
{
float jx=CAVE_JOYSTICK_X,jy=CAVE_JOYSTICK_Y;
float cw[3], ww[3];
CAVEGetVector(CAVE_WAND_FRONT,cw);
CAVENavConvertVectorCAVEToWorld(cw,ww);
if (fabs(jy) > 0.2)
{
myNav->G400pos[0] += ww[0]*jy/30.0;
myNav->G400pos[1] += ww[1]*jy/30.0;
myNav->G400pos[2] += ww[2]*jy/30.0;
}
if (fabs(jx) > 0.2)myNav->G400rot -= 0.50*jx;
if (*App_in_use == 0)
{
if( myNav->G400pos[0] > 15 ) myNav->G400pos[0] = 15;
if( myNav->G400pos[0] < -15 ) myNav->G400pos[0] = -15;
if( myNav->G400pos[1] > 10 ) myNav->G400pos[1] = 10;
if( myNav->G400pos[1] < 0 ) myNav->G400pos[1] = 0;
if( myNav->G400pos[2] > 60 ) myNav->G400pos[2] = 60;
if( myNav->G400pos[2] < -50 ) myNav->G400pos[2] = -50;
}
if (*App_in_use == 6)
{
if( myNav->G400pos[0] > 80 ) myNav->G400pos[0] = 80;
if( myNav->G400pos[0] < -80 ) myNav->G400pos[0] = -80;
if( myNav->G400pos[1] > 10 ) myNav->G400pos[1] = 10;
if( myNav->G400pos[1] < 0 ) myNav->G400pos[1] = 0;
if( myNav->G400pos[2] > 50 ) myNav->G400pos[2] = 50;
if( myNav->G400pos[2] < -50 ) myNav->G400pos[2] = -50;
}
CAVENavLock();
CAVENavLoadIdentity();
CAVENavTranslate(myNav->G400pos[0], 0, myNav->G400pos[2]);
CAVENavRot(myNav->G400rot,'y');
CAVENavUnlock();
printf("app = %d POS X = %f POS Y = %f POS Z = %f \n\n\n\n" ,
*App_in_use, myNav->G400pos[0], myNav->G400pos[1], myNav->G400pos[2]);
}
/*--------------------------------------------------*/