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
191 if( (std::fabs(px_ext-1.) >
vpMath::maximum(px_ext,1.)*std::numeric_limits<double>::epsilon())
192 && (std::fabs(py_ext-1) >
vpMath::maximum(py_ext,1.)*std::numeric_limits<double>::epsilon()))
222 void initScene(
const vpSceneObject &obj,
const vpSceneDesiredObject &desiredObject);
223 void initScene(
const char* obj,
const char* desiredObject);
224 void initScene (
const vpSceneObject &obj);
243 constantSamplingTimeMode = _constantSamplingTimeMode;
290 this->thickness_ = thickness;
307 this->delta_t_ = delta_t;
318 this->verbose_ = verbose;
338 #elif defined(VISP_HAVE_PTHREAD)
339 static void* launcher(
void *arg)
350 virtual void updateArticularPosition() = 0;
352 virtual int isInJointLimit () = 0;
354 virtual void computeArticularVelocity() = 0;
358 virtual void initArms() = 0;
362 WaitForSingleObject(mutex_artCoord,INFINITE);
364 artCoordTmp = artCoord;
365 ReleaseMutex(mutex_artCoord);
368 WaitForSingleObject(mutex_artCoord,INFINITE);
370 ReleaseMutex(mutex_artCoord);}
373 WaitForSingleObject(mutex_artVel,INFINITE);
375 ReleaseMutex(mutex_artVel);
378 WaitForSingleObject(mutex_artVel,INFINITE);
380 ReleaseMutex(mutex_artVel);}
383 WaitForSingleObject(mutex_velocity,INFINITE);
385 ReleaseMutex(mutex_velocity);
388 WaitForSingleObject(mutex_velocity,INFINITE);
390 ReleaseMutex(mutex_velocity);}
393 WaitForSingleObject(mutex_display,INFINITE);
394 displayBusy = status;
395 ReleaseMutex(mutex_display);}
397 WaitForSingleObject(mutex_display,INFINITE);
398 bool status = displayBusy;
399 if (!displayBusy) displayBusy =
true;
400 ReleaseMutex(mutex_display);
403 #elif defined(VISP_HAVE_PTHREAD)
405 pthread_mutex_lock (&mutex_artCoord);
407 artCoordTmp = artCoord;
408 pthread_mutex_unlock (&mutex_artCoord);
411 pthread_mutex_lock (&mutex_artCoord);
413 pthread_mutex_unlock (&mutex_artCoord);}
416 pthread_mutex_lock (&mutex_artVel);
418 pthread_mutex_unlock (&mutex_artVel);
421 pthread_mutex_lock (&mutex_artVel);
423 pthread_mutex_unlock (&mutex_artVel);}
426 pthread_mutex_lock (&mutex_velocity);
428 pthread_mutex_unlock (&mutex_velocity);
431 pthread_mutex_lock (&mutex_velocity);
433 pthread_mutex_unlock (&mutex_velocity);}
435 void set_displayBusy (
const bool &status) {
436 pthread_mutex_lock (&mutex_display);
437 displayBusy = status;
438 pthread_mutex_unlock (&mutex_display);}
439 bool get_displayBusy () {
440 pthread_mutex_lock (&mutex_display);
441 bool status = displayBusy;
442 if (!displayBusy) displayBusy =
true;
443 pthread_mutex_unlock (&mutex_display);