43 #include <visp3/robot/vpWireFrameSimulator.h>
49 #include "vpClipping.h"
54 #include "vpKeyword.h"
58 #include "vpRfstack.h"
59 #include "vpVwstack.h"
60 #include "vpTmstack.h"
61 #include "vpCoreDisplay.h"
63 #include "vpProjection.h"
66 #include <visp3/core/vpException.h>
67 #include <visp3/core/vpPoint.h>
68 #include <visp3/core/vpCameraParameters.h>
69 #include <visp3/core/vpMeterPixelConversion.h>
70 #include <visp3/core/vpPoint.h>
71 #include <visp3/core/vpIoTools.h>
73 extern Point2i *point2i;
74 extern Point2i *listpoint2i;
87 Byte b = (Byte) *get_rfstack ();
91 memmove((
char *) m, (
char *) mat,
sizeof (Matrix));
92 View_to_Matrix (get_vwstack (), *(get_tmstack ()));
93 postmult_matrix (m, *(get_tmstack ()));
95 bend = bp + sc.bound.nbr;
96 for (; bp < bend; bp++)
98 if ((clip = clipping_Bound (bp, m)) != NULL)
100 Face *fp = clip->face.ptr;
101 Face *fend = fp + clip->face.nbr;
103 set_Bound_face_display (clip, b);
105 point_3D_2D (clip->point.ptr, clip->point.nbr,(
int)I.
getWidth(),(int)I.
getHeight(),point2i);
106 for (; fp < fend; fp++)
110 wireframe_Face (fp, point2i);
111 Point2i *pt = listpoint2i;
112 for (
int i = 1; i < fp->vertex.nbr; i++)
117 if (fp->vertex.nbr > 2)
137 Byte b = (Byte) *get_rfstack ();
141 memmove((
char *) m, (
char *) mat,
sizeof (Matrix));
142 View_to_Matrix (get_vwstack (), *(get_tmstack ()));
143 postmult_matrix (m, *(get_tmstack ()));
145 bend = bp + sc.bound.nbr;
146 for (; bp < bend; bp++)
148 if ((clip = clipping_Bound (bp, m)) != NULL)
150 Face *fp = clip->face.ptr;
151 Face *fend = fp + clip->face.nbr;
153 set_Bound_face_display (clip, b);
155 point_3D_2D (clip->point.ptr, clip->point.nbr,(
int)I.
getWidth(),(int)I.
getHeight(),point2i);
156 for (; fp < fend; fp++)
160 wireframe_Face (fp, point2i);
161 Point2i *pt = listpoint2i;
162 for (
int i = 1; i < fp->vertex.nbr; i++)
167 if (fp->vertex.nbr > 2)
188 : scene(), desiredScene(), camera(), objectImage(), fMo(), fMc(), camMf(),
189 refMo(), cMo(), cdMo(), object(PLATE), desiredObject(D_STANDARD),
191 desColor(
vpColor::red), sceneInitialized(false), displayCameraTrajectory(true),
192 cameraTrajectory(), poseList(), fMoList(), nbrPtLimit(1000), old_iPr(), old_iPz(),
193 old_iPt(), blockedr(false), blockedz(false), blockedt(false), blocked(false),
194 camMf2(), f2Mf(), px_int(1), py_int(1), px_ext(1), py_ext(1), displayObject(false),
195 displayDesiredObject(false), displayCamera(false), displayImageSimulator(false),
196 cameraFactor(1.), camTrajType(CT_LINE), extCamChanged(false), rotz(), thickness_(1), scene_dir()
200 std::vector<std::string> scene_dirs =
vpIoTools::splitChain(std::string(VISP_SCENES_DIR), std::string(
";"));
201 bool sceneDirExists =
false;
202 for(
size_t i=0; i < scene_dirs.size(); i++)
204 scene_dir = scene_dirs[i];
205 sceneDirExists =
true;
208 if (! sceneDirExists) {
211 std::cout <<
"The simulator uses data from VISP_SCENES_DIR=" << scene_dir << std::endl;
214 std::cout <<
"Cannot get VISP_SCENES_DIR environment variable" << std::endl;
228 scene.bound.ptr = NULL;
249 free_Bound_scene (&(this->
scene));
251 free_Bound_scene (&(this->
camera));
277 char name_cam[FILENAME_MAX];
278 char name[FILENAME_MAX];
283 const char *scene_dir_ = scene_dir.c_str();
284 if (strlen(scene_dir_) >= FILENAME_MAX) {
286 "Not enough memory to intialize the camera name"));
289 strcpy(name_cam, scene_dir_);
292 strcat(name_cam,
"/camera.bnd");
297 strcat(name_cam,
"/tool.bnd");
298 set_scene(name_cam,&(this->
camera),1.0);
301 strcpy(name, scene_dir_);
304 case THREE_PTS : {strcat(name,
"/3pts.bnd");
break; }
305 case CUBE : { strcat(name,
"/cube.bnd");
break; }
306 case PLATE : { strcat(name,
"/plate.bnd");
break; }
307 case SMALL_PLATE : { strcat(name,
"/plate_6cm.bnd");
break; }
308 case RECTANGLE : { strcat(name,
"/rectangle.bnd");
break; }
309 case SQUARE_10CM : { strcat(name,
"/square10cm.bnd");
break; }
310 case DIAMOND : { strcat(name,
"/diamond.bnd");
break; }
311 case TRAPEZOID : { strcat(name,
"/trapezoid.bnd");
break; }
312 case THREE_LINES : { strcat(name,
"/line.bnd");
break; }
313 case ROAD : { strcat(name,
"/road.bnd");
break; }
314 case TIRE : { strcat(name,
"/circles2.bnd");
break; }
315 case PIPE : { strcat(name,
"/pipe.bnd");
break; }
316 case CIRCLE : { strcat(name,
"/circle.bnd");
break; }
317 case SPHERE : { strcat(name,
"/sphere.bnd");
break; }
318 case CYLINDER : { strcat(name,
"/cylinder.bnd");
break; }
319 case PLAN: { strcat(name,
"/plan.bnd");
break; }
320 case POINT_CLOUD: { strcat(name,
"/point_cloud.bnd");
break; }
322 set_scene(name,&(this->
scene),1.0);
324 scene_dir_ = scene_dir.c_str();
325 if (strlen(scene_dir_) >= FILENAME_MAX) {
327 "Not enough memory to intialize the desired object name"));
334 strcpy(name, scene_dir_);
335 strcat(name,
"/circle_sq2.bnd");
338 strcpy(name, scene_dir_);
339 strcat(name,
"/tool.bnd");
344 if (obj ==
PIPE) load_rfstack(IS_INSIDE);
345 else add_rfstack(IS_BACK);
347 add_vwstack (
"start",
"depth", 0.0, 100.0);
348 add_vwstack (
"start",
"window", -0.1,0.1,-0.1,0.1);
349 add_vwstack (
"start",
"type", PERSPECTIVE);
391 char name_cam[FILENAME_MAX];
392 char name[FILENAME_MAX];
397 const char *scene_dir_ = scene_dir.c_str();
398 if (strlen(scene_dir_) >= FILENAME_MAX) {
400 "Not enough memory to intialize the camera name"));
403 strcpy(name_cam, scene_dir_);
404 strcat(name_cam,
"/camera.bnd");
407 if (strlen(obj) >= FILENAME_MAX) {
409 "Not enough memory to intialize the name"));
414 model = getExtension(obj);
415 if (model == BND_MODEL)
416 set_scene(name,&(this->
scene),1.0);
417 else if (model == WRL_MODEL)
418 set_scene_wrl(name,&(this->
scene),1.0);
419 else if (model == UNKNOWN_MODEL)
424 if (strlen(desired_object) >= FILENAME_MAX) {
426 "Not enough memory to intialize the camera name"));
429 strcpy(name,desired_object);
430 model = getExtension(desired_object);
431 if (model == BND_MODEL)
433 else if (model == WRL_MODEL)
435 else if (model == UNKNOWN_MODEL)
440 add_rfstack(IS_BACK);
442 add_vwstack (
"start",
"depth", 0.0, 100.0);
443 add_vwstack (
"start",
"window", -0.1,0.1,-0.1,0.1);
444 add_vwstack (
"start",
"type", PERSPECTIVE);
483 char name_cam[FILENAME_MAX];
484 char name[FILENAME_MAX];
488 const char *scene_dir_ = scene_dir.c_str();
489 if (strlen(scene_dir_) >= FILENAME_MAX) {
491 "Not enough memory to intialize the camera name"));
494 strcpy(name_cam, scene_dir_);
495 strcat(name_cam,
"/camera.bnd");
498 strcpy(name, scene_dir_);
501 case THREE_PTS : {strcat(name,
"/3pts.bnd");
break; }
502 case CUBE : { strcat(name,
"/cube.bnd");
break; }
503 case PLATE : { strcat(name,
"/plate.bnd");
break; }
504 case SMALL_PLATE : { strcat(name,
"/plate_6cm.bnd");
break; }
505 case RECTANGLE : { strcat(name,
"/rectangle.bnd");
break; }
506 case SQUARE_10CM : { strcat(name,
"/square10cm.bnd");
break; }
507 case DIAMOND : { strcat(name,
"/diamond.bnd");
break; }
508 case TRAPEZOID : { strcat(name,
"/trapezoid.bnd");
break; }
509 case THREE_LINES : { strcat(name,
"/line.bnd");
break; }
510 case ROAD : { strcat(name,
"/road.bnd");
break; }
511 case TIRE : { strcat(name,
"/circles2.bnd");
break; }
512 case PIPE : { strcat(name,
"/pipe.bnd");
break; }
513 case CIRCLE : { strcat(name,
"/circle.bnd");
break; }
514 case SPHERE : { strcat(name,
"/sphere.bnd");
break; }
515 case CYLINDER : { strcat(name,
"/cylinder.bnd");
break; }
516 case PLAN: { strcat(name,
"/plan.bnd");
break; }
517 case POINT_CLOUD: { strcat(name,
"/point_cloud.bnd");
break; }
519 set_scene(name,&(this->
scene),1.0);
521 if (obj ==
PIPE) load_rfstack(IS_INSIDE);
522 else add_rfstack(IS_BACK);
524 add_vwstack (
"start",
"depth", 0.0, 100.0);
525 add_vwstack (
"start",
"window", -0.1,0.1,-0.1,0.1);
526 add_vwstack (
"start",
"type", PERSPECTIVE);
566 char name_cam[FILENAME_MAX];
567 char name[FILENAME_MAX];
571 const char *scene_dir_ = scene_dir.c_str();
572 if (strlen(scene_dir_) >= FILENAME_MAX) {
574 "Not enough memory to intialize the camera name"));
577 strcpy(name_cam, scene_dir_);
578 strcat(name_cam,
"/camera.bnd");
581 if (strlen(obj) >= FILENAME_MAX) {
583 "Not enough memory to intialize the name"));
588 model = getExtension(obj);
589 if (model == BND_MODEL)
590 set_scene(name,&(this->
scene),1.0);
591 else if (model == WRL_MODEL)
592 set_scene_wrl(name,&(this->
scene),1.0);
593 else if (model == UNKNOWN_MODEL)
598 add_rfstack(IS_BACK);
600 add_vwstack (
"start",
"depth", 0.0, 100.0);
601 add_vwstack (
"start",
"window", -0.1,0.1,-0.1,0.1);
602 add_vwstack (
"start",
"type", PERSPECTIVE);
657 float o44c[4][4],o44cd[4][4],x,y,z;
658 Matrix
id = IDENTITY_MATRIX;
677 add_vwstack (
"start",
"cop", o44c[3][0],o44c[3][1],o44c[3][2]);
678 x = o44c[2][0] + o44c[3][0];
679 y = o44c[2][1] + o44c[3][1];
680 z = o44c[2][2] + o44c[3][2];
681 add_vwstack (
"start",
"vrp", x,y,z);
682 add_vwstack (
"start",
"vpn", o44c[2][0],o44c[2][1],o44c[2][2]);
683 add_vwstack (
"start",
"vup", o44c[1][0],o44c[1][1],o44c[1][2]);
684 add_vwstack (
"start",
"window", -u, u, -v, v);
689 add_vwstack (
"start",
"cop", o44cd[3][0],o44cd[3][1],o44cd[3][2]);
690 x = o44cd[2][0] + o44cd[3][0];
691 y = o44cd[2][1] + o44cd[3][1];
692 z = o44cd[2][2] + o44cd[3][2];
693 add_vwstack (
"start",
"vrp", x,y,z);
694 add_vwstack (
"start",
"vpn", o44cd[2][0],o44cd[2][1],o44cd[2][2]);
695 add_vwstack (
"start",
"vup", o44cd[1][0],o44cd[1][1],o44cd[1][2]);
696 add_vwstack (
"start",
"window", -u, u, -v, v);
716 bool changed =
false;
720 if (std::fabs(displacement[2][3]) > std::numeric_limits<double>::epsilon() )
743 float w44o[4][4],w44cext[4][4],w44c[4][4],x,y,z;
746 vp2jlc_matrix(
fMc,w44c);
747 vp2jlc_matrix(
fMo,w44o);
750 add_vwstack (
"start",
"cop", w44cext[3][0],w44cext[3][1],w44cext[3][2]);
751 x = w44cext[2][0] + w44cext[3][0];
752 y = w44cext[2][1] + w44cext[3][1];
753 z = w44cext[2][2] + w44cext[3][2];
754 add_vwstack (
"start",
"vrp", x,y,z);
755 add_vwstack (
"start",
"vpn", w44cext[2][0],w44cext[2][1],w44cext[2][2]);
756 add_vwstack (
"start",
"vup", w44cext[1][0],w44cext[1][1],w44cext[1][2]);
757 add_vwstack (
"start",
"window", -u, u, -v, v);
760 add_vwstack (
"start",
"type", PERSPECTIVE);
795 std::list<vpHomogeneousMatrix>::const_iterator iter_poseList =
poseList.begin();
796 std::list<vpHomogeneousMatrix>::const_iterator iter_fMoList =
fMoList.begin();
798 while ((iter_poseList !=
poseList.end()) && (iter_fMoList !=
fMoList.end()))
859 float w44o[4][4],w44cext[4][4],w44c[4][4],x,y,z;
879 vp2jlc_matrix(camMft.
inverse(),w44cext);
881 vp2jlc_matrix(
fMo,w44o);
883 add_vwstack (
"start",
"cop", w44cext[3][0],w44cext[3][1],w44cext[3][2]);
884 x = w44cext[2][0] + w44cext[3][0];
885 y = w44cext[2][1] + w44cext[3][1];
886 z = w44cext[2][2] + w44cext[3][2];
887 add_vwstack (
"start",
"vrp", x,y,z);
888 add_vwstack (
"start",
"vpn", w44cext[2][0],w44cext[2][1],w44cext[2][2]);
889 add_vwstack (
"start",
"vup", w44cext[1][0],w44cext[1][1],w44cext[1][2]);
890 add_vwstack (
"start",
"window", -u, u, -v, v);
942 float o44c[4][4],o44cd[4][4],x,y,z;
943 Matrix
id = IDENTITY_MATRIX;
962 add_vwstack (
"start",
"cop", o44c[3][0],o44c[3][1],o44c[3][2]);
963 x = o44c[2][0] + o44c[3][0];
964 y = o44c[2][1] + o44c[3][1];
965 z = o44c[2][2] + o44c[3][2];
966 add_vwstack (
"start",
"vrp", x,y,z);
967 add_vwstack (
"start",
"vpn", o44c[2][0],o44c[2][1],o44c[2][2]);
968 add_vwstack (
"start",
"vup", o44c[1][0],o44c[1][1],o44c[1][2]);
969 add_vwstack (
"start",
"window", -u, u, -v, v);
974 add_vwstack (
"start",
"cop", o44cd[3][0],o44cd[3][1],o44cd[3][2]);
975 x = o44cd[2][0] + o44cd[3][0];
976 y = o44cd[2][1] + o44cd[3][1];
977 z = o44cd[2][2] + o44cd[3][2];
978 add_vwstack (
"start",
"vrp", x,y,z);
979 add_vwstack (
"start",
"vpn", o44cd[2][0],o44cd[2][1],o44cd[2][2]);
980 add_vwstack (
"start",
"vup", o44cd[1][0],o44cd[1][1],o44cd[1][2]);
981 add_vwstack (
"start",
"window", -u, u, -v, v);
1001 bool changed =
false;
1005 if (std::fabs(displacement[2][3]) > std::numeric_limits<double>::epsilon() )
1028 float w44o[4][4],w44cext[4][4],w44c[4][4],x,y,z;
1031 vp2jlc_matrix(
fMc,w44c);
1032 vp2jlc_matrix(
fMo,w44o);
1035 add_vwstack (
"start",
"cop", w44cext[3][0],w44cext[3][1],w44cext[3][2]);
1036 x = w44cext[2][0] + w44cext[3][0];
1037 y = w44cext[2][1] + w44cext[3][1];
1038 z = w44cext[2][2] + w44cext[3][2];
1039 add_vwstack (
"start",
"vrp", x,y,z);
1040 add_vwstack (
"start",
"vpn", w44cext[2][0],w44cext[2][1],w44cext[2][2]);
1041 add_vwstack (
"start",
"vup", w44cext[1][0],w44cext[1][1],w44cext[1][2]);
1042 add_vwstack (
"start",
"window", -u, u, -v, v);
1045 add_vwstack (
"start",
"type", PERSPECTIVE);
1078 std::list<vpHomogeneousMatrix>::const_iterator iter_poseList =
poseList.begin();
1079 std::list<vpHomogeneousMatrix>::const_iterator iter_fMoList =
fMoList.begin();
1081 while ((iter_poseList!=
poseList.end()) && (iter_fMoList!=
fMoList.end()) )
1142 float w44o[4][4],w44cext[4][4],w44c[4][4],x,y,z;
1162 vp2jlc_matrix(camMft.
inverse(),w44cext);
1164 vp2jlc_matrix(
fMo,w44o);
1166 add_vwstack (
"start",
"cop", w44cext[3][0],w44cext[3][1],w44cext[3][2]);
1167 x = w44cext[2][0] + w44cext[3][0];
1168 y = w44cext[2][1] + w44cext[3][1];
1169 z = w44cext[2][2] + w44cext[3][2];
1170 add_vwstack (
"start",
"vrp", x,y,z);
1171 add_vwstack (
"start",
"vpn", w44cext[2][0],w44cext[2][1],w44cext[2][2]);
1172 add_vwstack (
"start",
"vup", w44cext[1][0],w44cext[1][1],w44cext[1][2]);
1173 add_vwstack (
"start",
"window", -u, u, -v, v);
1207 if (list_cMo.size() != list_fMo.size())
1214 std::list<vpHomogeneousMatrix>::const_iterator it_cMo = list_cMo.begin();
1215 std::list<vpHomogeneousMatrix>::const_iterator it_fMo = list_fMo.begin();
1217 while ((it_cMo != list_cMo.end()) && (it_fMo != list_fMo.end()))
1247 if (list_cMo.size() != list_fMo.size())
1254 std::list<vpHomogeneousMatrix>::const_iterator it_cMo = list_cMo.begin();
1255 std::list<vpHomogeneousMatrix>::const_iterator it_fMo = list_fMo.begin();
1257 while ((it_cMo != list_cMo.end()) && (it_fMo != list_fMo.end()))
1283 bool clicked =
false;
1284 bool clickedUp =
false;
1334 double anglei = diffi*360/width;
1335 double anglej = diffj*360/width;
1355 mov.
buildFrom(diffj*0.01,diffi*0.01,0,0,0,0);
1374 bool clicked =
false;
1375 bool clickedUp =
false;
1427 double anglei = diffi*360/width;
1428 double anglej = diffj*360/width;
1448 mov.
buildFrom(diffj*0.01,diffi*0.01,0,0,0,0);
bool displayImageSimulator
The object displayed at the desired position is the same than the scene object defined in vpSceneObje...
A cylinder of 80cm length and 10cm radius.
static bool getPointerPosition(const vpImage< unsigned char > &I, vpImagePoint &ip)
static bool getClick(const vpImage< unsigned char > &I, bool blocking=true)
A tire represented by 2 circles with radius 10cm and 15cm.
unsigned int getWidth() const
Three parallel lines with equation y=-5, y=0, y=5.
A plane represented by a 56cm by 56cm plate with a grid of 49 squares inside.
Implementation of an homogeneous matrix and operations on such kind of matrices.
A plate with 8 points at coordinates (0.05,0,0), (0.15,0.05,0), (0.2,0.2,0), (-0.05,0.2,0), (-0.15,-0.1,0), (-0.1,-0.1,0), (-0.05,0.05,0) and (0.5,0,0). ach point is represented by a circle with 2cm radius.
void getImage(vpImage< unsigned char > &I, const vpCameraParameters &cam)
A 40cm by 40cm plate with 4 points at coordinates (-0.1,-0.1,0), (0.1,-0.1,0), (0.1,0.1,0), (0.1,0.1,0). Each point is represented by a circle with 2cm radius.
static void convertPoint(const vpCameraParameters &cam, const double &x, const double &y, double &u, double &v)
Point coordinates conversion from normalized coordinates in meter to pixel coordinates ...
Class to define colors available for display functionnalities.
A cylindrical tool is attached to the camera.
static bool getClickUp(const vpImage< unsigned char > &I, vpImagePoint &ip, vpMouseButton::vpMouseButtonType &button, bool blocking=true)
std::list< vpImageSimulator > objectImage
error that can be emited by ViSP classes.
std::list< vpImagePoint > cameraTrajectory
static void displayPoint(const vpImage< unsigned char > &I, const vpImagePoint &ip, const vpColor &color, unsigned int thickness=1)
void track(const vpHomogeneousMatrix &cMo)
double get_y() const
Get the point y coordinate in the image plane.
A 40cm by 40cm plate with 4 points at coordinates (-0.05,0.05,0), (0.05,0.05,0), (0.05,-0.05,0), (-0.05,-0.05,0). Each point is represented by a circle with 2cm radius.
virtual ~vpWireFrameSimulator()
std::list< vpHomogeneousMatrix > fMoList
Class that defines what is a point.
static Type maximum(const Type &a, const Type &b)
4 points at coordinates (-0.03,-0.03,0), (0.03,-0.03,0), (0.03,0.03,0), (0.03,0.03,0). Each point is represented by a circle with 1cm radius.
vpCameraParameters getExternalCameraParameters(const vpImage< unsigned char > &I) const
void setCameraPosition(const vpHomogeneousMatrix &cMt)
The object displayed at the desired position is a circle.
A 40cm by 40cm plate with 4 points at coordinates (-0.025,-0.05,0), (-0.075,0.05,0), (0.075,0.05,0), (0.025,-0.05,0). Each point is represented by a circle with 2cm radius.
static void display(const vpImage< unsigned char > &I)
Class which enables to project an image in the 3D space and get the view of a virtual camera...
void initScene(const vpSceneObject &obj, const vpSceneDesiredObject &desiredObject)
bool displayDesiredObject
double get_x() const
Get the point x coordinate in the image plane.
static Type minimum(const Type &a, const Type &b)
A 40cm by 40cm plate with 3 points at coordinates (0,0,0), (0.1,0,0), (0,0.1,0). Each point is repres...
void getExternalImage(vpImage< unsigned char > &I)
void buildFrom(const vpTranslationVector &t, const vpRotationMatrix &R)
vpCameraParameters getInternalCameraParameters(const vpImage< unsigned char > &I) const
static double rad(double deg)
void displayTrajectory(const vpImage< unsigned char > &I, const std::list< vpHomogeneousMatrix > &list_cMo, const std::list< vpHomogeneousMatrix > &list_fMo, const vpHomogeneousMatrix &camMf)
vpCameraTrajectoryDisplayType camTrajType
A 40cm by 40cm plate with 4 points at coordinates (-0.07,-0.05,0), (0.07,0.05,0), (0...
vpSceneDesiredObject desiredObject
A 40cm by 40cm plate with 4 points at coordinates (0,-0.1,0), (0.1,0,0), (0,0.1,0), (-0.1,0,0). Each point is represented by a circle with 2cm radius.
void getInternalImage(vpImage< unsigned char > &I)
void display_scene(Matrix mat, Bound_scene &sc, const vpImage< vpRGBa > &I, const vpColor &color)
bool displayCameraTrajectory
vpHomogeneousMatrix camMf
vpHomogeneousMatrix navigation(const vpImage< vpRGBa > &I, bool &changed)
Three parallel lines representing a road.
void setWorldCoordinates(const double oX, const double oY, const double oZ)
vpImagePoint projectCameraTrajectory(const vpImage< vpRGBa > &I, const vpHomogeneousMatrix &cMo, const vpHomogeneousMatrix &fMo)
vpHomogeneousMatrix inverse() const
A pipe represented by a cylinder of 25 cm length and 15cm radius.
unsigned int getHeight() const
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
static void displayLine(const vpImage< unsigned char > &I, const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color, unsigned int thickness=1)
std::list< vpHomogeneousMatrix > poseList
vpHomogeneousMatrix camMf2