42 #ifndef vpRobotWireFrameSimulator_HH
43 #define vpRobotWireFrameSimulator_HH
50 #include <visp/vpConfig.h>
54 #if defined(WIN32) || defined(VISP_HAVE_PTHREAD)
59 #elif defined(VISP_HAVE_PTHREAD)
63 #include <visp/vpWireFrameSimulator.h>
64 #include <visp/vpRobot.h>
65 #include <visp/vpRobotSimulator.h>
66 #include <visp/vpDisplayOpenCV.h>
67 #include <visp/vpDisplayX.h>
68 #include <visp/vpDisplayGTK.h>
69 #include <visp/vpDisplayGDI.h>
70 #include <visp/vpDisplayD3D.h>
131 #elif defined(VISP_HAVE_PTHREAD)
134 pthread_mutex_t mutex_fMi;
135 pthread_mutex_t mutex_artVel;
136 pthread_mutex_t mutex_artCoord;
137 pthread_mutex_t mutex_velocity;
138 pthread_mutex_t mutex_display;
155 #if defined VISP_HAVE_X11
157 #elif defined VISP_HAVE_GDI
159 #elif defined VISP_HAVE_OPENCV
161 #elif defined VISP_HAVE_D3D9
163 #elif defined VISP_HAVE_GTK
189 if( (std::fabs(px_ext-1.) >
vpMath::maximum(px_ext,1.)*std::numeric_limits<double>::epsilon())
190 && (std::fabs(py_ext-1) >
vpMath::maximum(py_ext,1.)*std::numeric_limits<double>::epsilon()))
220 void initScene(vpSceneObject obj, vpSceneDesiredObject desiredObject);
221 void initScene(
const char* obj,
const char* desiredObject);
241 constantSamplingTimeMode = _constantSamplingTimeMode;
298 this->delta_t_ = delta_t;
316 static DWORD WINAPI launcher( LPVOID lpParam )
321 #elif defined(VISP_HAVE_PTHREAD)
322 static void* launcher(
void *arg)
333 virtual void updateArticularPosition() = 0;
335 virtual int isInJointLimit () = 0;
337 virtual void computeArticularVelocity() = 0;
341 virtual void initArms() = 0;
345 WaitForSingleObject(mutex_artCoord,INFINITE);
347 artCoordTmp = artCoord;
348 ReleaseMutex(mutex_artCoord);
351 WaitForSingleObject(mutex_artCoord,INFINITE);
353 ReleaseMutex(mutex_artCoord);}
356 WaitForSingleObject(mutex_artVel,INFINITE);
358 ReleaseMutex(mutex_artVel);
361 WaitForSingleObject(mutex_artVel,INFINITE);
363 ReleaseMutex(mutex_artVel);}
366 WaitForSingleObject(mutex_velocity,INFINITE);
368 ReleaseMutex(mutex_velocity);
371 WaitForSingleObject(mutex_velocity,INFINITE);
373 ReleaseMutex(mutex_velocity);}
376 WaitForSingleObject(mutex_display,INFINITE);
377 displayBusy = status;
378 ReleaseMutex(mutex_display);}
380 WaitForSingleObject(mutex_display,INFINITE);
381 bool status = displayBusy;
382 if (!displayBusy) displayBusy =
true;
383 ReleaseMutex(mutex_display);
386 #elif defined(VISP_HAVE_PTHREAD)
388 pthread_mutex_lock (&mutex_artCoord);
390 artCoordTmp = artCoord;
391 pthread_mutex_unlock (&mutex_artCoord);
394 pthread_mutex_lock (&mutex_artCoord);
396 pthread_mutex_unlock (&mutex_artCoord);}
399 pthread_mutex_lock (&mutex_artVel);
401 pthread_mutex_unlock (&mutex_artVel);
404 pthread_mutex_lock (&mutex_artVel);
406 pthread_mutex_unlock (&mutex_artVel);}
409 pthread_mutex_lock (&mutex_velocity);
411 pthread_mutex_unlock (&mutex_velocity);
414 pthread_mutex_lock (&mutex_velocity);
416 pthread_mutex_unlock (&mutex_velocity);}
418 void set_displayBusy (
const bool &status) {
419 pthread_mutex_lock (&mutex_display);
420 displayBusy = status;
421 pthread_mutex_unlock (&mutex_display);}
422 bool get_displayBusy () {
423 pthread_mutex_lock (&mutex_display);
424 bool status = displayBusy;
425 if (!displayBusy) displayBusy =
true;
426 pthread_mutex_unlock (&mutex_display);