Changeset 15 in flair-src for trunk/lib/FlairSimulator/src/SimuLaserGL.cpp
- Timestamp:
- 04/08/16 15:40:57 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/lib/FlairSimulator/src/SimuLaserGL.cpp
r10 r15 36 36 using namespace flair::simulator; 37 37 38 namespace flair 39 { 40 namespace sensor 41 { 42 SimuLaserGL::SimuLaserGL(const Model* parent,std::string name,int dev_id) :SimuLaser(parent,name,dev_id),SensorGL(parent) 43 { 44 Tab* setup_tab=new Tab(parent->GetTabWidget(),name); 45 position=new Vector3DSpinBox(setup_tab->NewRow(),"position",-2,2,.01); 46 direction=new Vector3DSpinBox(setup_tab->NewRow(),"direction",-2,2,.01); 47 range=new DoubleSpinBox(setup_tab->NewRow(),"range:",0,30,1); 38 namespace flair { 39 namespace sensor { 40 SimuLaserGL::SimuLaserGL(const Model *parent, std::string name, int dev_id) 41 : SimuLaser(parent, name, dev_id), SensorGL(parent) { 42 Tab *setup_tab = new Tab(parent->GetTabWidget(), name); 43 position = new Vector3DSpinBox(setup_tab->NewRow(), "position", -2, 2, .01); 44 direction = new Vector3DSpinBox(setup_tab->NewRow(), "direction", -2, 2, .01); 45 range = new DoubleSpinBox(setup_tab->NewRow(), "range:", 0, 30, 1); 48 46 } 49 47 50 SimuLaserGL::~SimuLaserGL() 51 { 48 SimuLaserGL::~SimuLaserGL() {} 52 49 53 } 50 void SimuLaserGL::UpdateFrom(const io_data *data) { 51 float value[360]; 54 52 55 void SimuLaserGL::UpdateFrom(const io_data *data) 56 { 57 float value[360]; 53 if (noGui() == false && data == NULL) { 54 for (int i = 0; i < 360; i++) { 55 line3d<f32> ray_laser; // rayon provenant de l'ultra son 56 vector3df intersection_laser; // point intersection us avec le sol 57 triangle3df hitTriangle_laser; // triangle intersection us avec le sol 58 58 59 if(noGui()==false && data==NULL) 60 { 61 for (int i=0; i<360; i++) 62 { 63 line3d<f32> ray_laser;//rayon provenant de l'ultra son 64 vector3df intersection_laser;//point intersection us avec le sol 65 triangle3df hitTriangle_laser;//triangle intersection us avec le sol 59 // get rotation matrix of node - Zeuss must be getRotation not 60 // getRelativeTransformation 61 matrix4 m; 62 matrix4 M; 63 m.setRotationDegrees(Node()->getRotation()); 66 64 67 //get rotation matrix of node - Zeuss must be getRotation not getRelativeTransformation 68 matrix4 m; 69 matrix4 M; 70 m.setRotationDegrees(Node()->getRotation()); 65 // Matrice de rotation pour balayage du laser, angle i 66 M.setRotationDegrees(vector3df(0, 0, i)); 67 // transform forward vector of us 68 vector3df frv = ToIrrlichtCoordinates(direction->Value()); 69 M.transformVect(frv); 70 m.transformVect(frv); 71 frv.normalize(); 71 72 72 //Matrice de rotation pour balayage du laser, angle i 73 M.setRotationDegrees(vector3df(0,0,i)); 74 // transform forward vector of us 75 vector3df frv =ToIrrlichtCoordinates(direction->Value()); 76 M.transformVect(frv); 77 m.transformVect(frv); 78 frv.normalize(); 73 // transform pos vector of us 74 vector3df pos = ToIrrlichtCoordinates(position->Value()); 75 m.transformVect(pos); 79 76 77 ray_laser.start = Node()->getPosition() + pos; 78 ray_laser.end = ray_laser.start + ToIrrlichtScale(range->Value()) * frv; 80 79 81 // transform pos vector of us 82 vector3df pos =ToIrrlichtCoordinates(position->Value()); 83 m.transformVect(pos); 84 85 ray_laser.start =Node()->getPosition() + pos; 86 ray_laser.end = ray_laser.start + ToIrrlichtScale(range->Value())*frv; 87 88 scene::ISceneNode * selectedSceneNode = 89 CollMan()->getSceneNodeAndCollisionPointFromRay(ray_laser,intersection_laser,hitTriangle_laser); 90 // ////////////////////////////////////////// 91 if(selectedSceneNode) // 92 { 93 value[i]=ToSimulatorScale(ray_laser.start.getDistanceFrom(intersection_laser)); 94 } 95 else 96 { 97 value[i]=-1; 98 } 99 100 } 101 shmem->Write((char*)value,360*sizeof(float)); 80 scene::ISceneNode *selectedSceneNode = 81 CollMan()->getSceneNodeAndCollisionPointFromRay( 82 ray_laser, intersection_laser, hitTriangle_laser); 83 // ////////////////////////////////////////// 84 if (selectedSceneNode) // 85 { 86 value[i] = ToSimulatorScale( 87 ray_laser.start.getDistanceFrom(intersection_laser)); 88 } else { 89 value[i] = -1; 90 } 102 91 } 92 shmem->Write((char *)value, 360 * sizeof(float)); 93 } 103 94 } 104 95
Note:
See TracChangeset
for help on using the changeset viewer.