Revision: 6891 http://playerstage.svn.sourceforge.net/playerstage/?rev=6891&view=rev Author: natepak Date: 2008-07-21 05:27:12 +0000 (Mon, 21 Jul 2008)
Log Message: ----------- Fixed seg fault when closing. Removed stringvalue class. Stereocamera controller now outputs two images. Modified Paths: -------------- code/gazebo/trunk/libgazebo/Iface.cc code/gazebo/trunk/libgazebo/gazebo.h code/gazebo/trunk/server/GazeboMessage.cc code/gazebo/trunk/server/Model.cc code/gazebo/trunk/server/SConscript code/gazebo/trunk/server/Simulator.cc code/gazebo/trunk/server/XMLConfig.cc code/gazebo/trunk/server/XMLConfig.hh code/gazebo/trunk/server/controllers/camera/stereo/Stereo_Camera.cc code/gazebo/trunk/server/controllers/camera/stereo/Stereo_Camera.hh code/gazebo/trunk/server/controllers/position2d/differential/Differential_Position2d.cc code/gazebo/trunk/server/gui/GLWindow.cc code/gazebo/trunk/server/gui/Gui.cc code/gazebo/trunk/server/gui/Gui.hh code/gazebo/trunk/server/main.cc code/gazebo/trunk/server/physics/Body.cc code/gazebo/trunk/server/physics/Geom.cc code/gazebo/trunk/server/physics/MapGeom.cc code/gazebo/trunk/server/physics/ode/ODEPhysics.cc code/gazebo/trunk/server/rendering/OgreAdaptor.cc code/gazebo/trunk/server/rendering/OgreAdaptor.hh code/gazebo/trunk/server/rendering/OgreCreator.cc code/gazebo/trunk/server/rendering/OgreVisual.cc code/gazebo/trunk/worlds/models/bandit.model Removed Paths: ------------- code/gazebo/trunk/server/StringValue.cc code/gazebo/trunk/server/StringValue.hh Modified: code/gazebo/trunk/libgazebo/Iface.cc =================================================================== --- code/gazebo/trunk/libgazebo/Iface.cc 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/libgazebo/Iface.cc 2008-07-21 05:27:12 UTC (rev 6891) @@ -113,22 +113,24 @@ this->server = server; + this->id = id; + // Went cant have null id's - if (id.empty()) + if (this->id.empty()) { stream << "interface [" << this->type << "] id is NULL"; throw(stream.str()); } // We cannot have id with '.' - if (strchr(id.c_str(), '.')) + if (strchr(this->id.c_str(), '.')) { - stream << "invalid id [" << id << "] (must not contain '.')"; + stream << "invalid id [" << this->id << "] (must not contain '.')"; throw(stream.str()); } // Work out the filename - this->Filename(id); + this->Filename(this->id); // Create and open the file this->mmapFd = open(this->filename.c_str(), O_RDWR | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE); @@ -364,6 +366,13 @@ } ////////////////////////////////////////////////////////////////////////////// +/// Get the ID of the inteface +std::string Iface::GetId() const +{ + return this->id; +} + +////////////////////////////////////////////////////////////////////////////// /// Get the number of connections int Iface::GetOpenCount() { Modified: code/gazebo/trunk/libgazebo/gazebo.h =================================================================== --- code/gazebo/trunk/libgazebo/gazebo.h 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/libgazebo/gazebo.h 2008-07-21 05:27:12 UTC (rev 6891) @@ -297,6 +297,9 @@ /// \return The type of interface public: std::string GetType() const; + /// \brief Get the ID of the inteface + public: std::string GetId() const; + private: std::string Filename(std::string id); /// The server we are associated with @@ -317,6 +320,8 @@ /// type of interface protected: std::string type; + protected: std::string id; + private: bool creator; private: size_t size; Modified: code/gazebo/trunk/server/GazeboMessage.cc =================================================================== --- code/gazebo/trunk/server/GazeboMessage.cc 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/GazeboMessage.cc 2008-07-21 05:27:12 UTC (rev 6891) @@ -97,18 +97,17 @@ void GazeboMessage::Save(XMLConfigNode *node) { - node->SetValue("verbosity", this->level); + /*node->SetValue("verbosity", this->level); node->SetValue("logData", this->logData); - /* - node->NewElement("verbosity", String(this->level)); //std::ostringstream << this->level); + //node->NewElement("verbosity", String(this->level)); //std::ostringstream << this->level); - node->NewElement("logData", gazebo::String(this->logData)); + //node->NewElement("logData", gazebo::String(this->logData)); - if (this->logData) - node->NewElement("logData", std::ostringstream << "true"); - else - node->NewElement("logData", std::ostringstream << "true"); + //if (this->logData) + // node->NewElement("logData", std::ostringstream << "true"); + //else + // node->NewElement("logData", std::ostringstream << "true"); */ } Modified: code/gazebo/trunk/server/Model.cc =================================================================== --- code/gazebo/trunk/server/Model.cc 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/Model.cc 2008-07-21 05:27:12 UTC (rev 6891) @@ -181,7 +181,7 @@ void Model::Save() { - std::map<std::string, Body* >::iterator bodyIter; + /*std::map<std::string, Body* >::iterator bodyIter; std::map<std::string, Controller* >::iterator contIter; std::map<std::string, Joint* >::iterator jointIter; @@ -225,6 +225,7 @@ contIter->second->Save(); } + */ } //////////////////////////////////////////////////////////////////////////////// Modified: code/gazebo/trunk/server/SConscript =================================================================== --- code/gazebo/trunk/server/SConscript 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/SConscript 2008-07-21 05:27:12 UTC (rev 6891) @@ -19,7 +19,6 @@ 'GazeboMessage.cc', 'Model.cc', 'Simulator.cc', - 'StringValue.cc' ] headers.append( @@ -33,7 +32,6 @@ '#/server/Simulator.hh', '#/server/SingletonT.hh', '#/server/StaticPluginRegister.hh', - '#/server/StringValue.hh', '#/server/Time.hh', '#/server/Vector2.hh', '#/server/Vector3.hh', Modified: code/gazebo/trunk/server/Simulator.cc =================================================================== --- code/gazebo/trunk/server/Simulator.cc 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/Simulator.cc 2008-07-21 05:27:12 UTC (rev 6891) @@ -419,16 +419,16 @@ void Simulator::SaveGui(XMLConfigNode *node) { - Vector2<int> size; + /*Vector2<int> size; XMLConfigNode* childNode = node->GetChild("gui"); if (childNode && this->gui) { size.x = this->gui->GetWidth(); size.y = this->gui->GetHeight(); - childNode->SetValue("size", size); + //childNode->SetValue("size", size); //TODO: node->SetValue("pos", Vector2<int>(x,y)); - } + }*/ } Deleted: code/gazebo/trunk/server/StringValue.cc =================================================================== --- code/gazebo/trunk/server/StringValue.cc 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/StringValue.cc 2008-07-21 05:27:12 UTC (rev 6891) @@ -1,150 +0,0 @@ -/* - * Gazebo - Outdoor Multi-Robot Simulator - * Copyright (C) 2003 - * Nate Koenig & Andrew Howard - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -/* Desc: A helpfull StringValue class, mostly a converter - * Author: Jordi Polo - * Date: 3 Jan 2008 - * SVN: $Id:$ - */ - -#include "Vector3.hh" -#include "Vector2.hh" -#include "Quatern.hh" -#include <OgreColourValue.h> - -#include "StringValue.hh" - -using namespace gazebo; - -//////////////////////////////////////////////////////////////////////////////// -/// Copy Constructor -StringValue::StringValue(const StringValue& data) -{ - stream << data.GetStr(); -} - -//////////////////////////////////////////////////////////////////////////////// -/// Convert Vector3 to string -StringValue::StringValue(Vector3 data) -{ - stream << data; -} - -//////////////////////////////////////////////////////////////////////////////// -/// Convert Vector2<int> to string -StringValue::StringValue(Vector2<int> data) -{ - stream << data; -} - -//////////////////////////////////////////////////////////////////////////////// -/// Convert Vector2<double> to string -StringValue::StringValue(Vector2<double> data) -{ - stream << data; -} - -//////////////////////////////////////////////////////////////////////////////// -/// Convert Quatern to string -StringValue::StringValue(Quatern data) -{ - stream << data; -} - -//////////////////////////////////////////////////////////////////////////////// -/// Convert bool to string -StringValue::StringValue(bool data) -{ - if (data) - stream << "true"; - else - stream << "false"; -} - - -//////////////////////////////////////////////////////////////////////////////// -/// Convert int to string -StringValue::StringValue(int data) -{ - stream << data; -} - -//////////////////////////////////////////////////////////////////////////////// -/// Convert double to string -StringValue::StringValue(double data) -{ - stream << data; -} - -//////////////////////////////////////////////////////////////////////////////// -/// Convert float to string -StringValue::StringValue(float data) -{ - stream << data; -} - -//////////////////////////////////////////////////////////////////////////////// -/// Convert float to string -StringValue::StringValue(const char* data) -{ - stream << data; -} - -//////////////////////////////////////////////////////////////////////////////// -/// Ogre colour value to string -StringValue::StringValue(std::string data) -{ - stream << data; -} - -//////////////////////////////////////////////////////////////////////////////// -/// A std string -StringValue::StringValue(Ogre::ColourValue* data) -{ - stream << data->r << " " <<data->g <<" " << data->b << " " << data->a; -} - -//////////////////////////////////////////////////////////////////////////////// -/// destructor -StringValue::~StringValue() -{} - -//////////////////////////////////////////////////////////////////////////////// -/// True if the string is null -bool StringValue::IsNull() const -{ - bool null=false; - if (stream.str()==std::string()) - null=true; - return null; -} - -//////////////////////////////////////////////////////////////////////////////// -/// Get the value as a std string -std::string StringValue::GetStr() const -{ - return stream.str(); -} - -//////////////////////////////////////////////////////////////////////////////// -/// Get the value as a char string -const char* StringValue::GetCharStr() const -{ - return stream.str().c_str(); -} Deleted: code/gazebo/trunk/server/StringValue.hh =================================================================== --- code/gazebo/trunk/server/StringValue.hh 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/StringValue.hh 2008-07-21 05:27:12 UTC (rev 6891) @@ -1,106 +0,0 @@ -/* - * Gazebo - Outdoor Multi-Robot Simulator - * Copyright (C) 2003 - * Nate Koenig & Andrew Howard - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -/* Desc: A helpfull StringValue class, mostly a converter - * Author: Jordi Polo - * Date: 3 Jan 2008 - * SVN: $Id:$ - */ - -#ifndef STRING_HH -#define STRING_HH - -#include <iostream> -#include <sstream> -#include <string> - -#include "Vector3.hh" -#include "Vector2.hh" -#include "Quatern.hh" - -namespace Ogre -{ - class ColourValue; -} - -namespace gazebo -{ -/// \addtogroup gazebo_server -/// \brief StringValue conversions and tools -/// \{ - - class StringValue - { - /// \brief Copy Constructor - public: StringValue(const StringValue& data); - - /// \brief Convert Vector3 to string - public: StringValue(Vector3 data); - - /// \brief Convert Vector2<int> to string - public: StringValue(Vector2<int> data); - - /// \brief Convert Vector2<double> to string - public: StringValue(Vector2<double> data); - - /// \brief Convert Quatern to string - public: StringValue(Quatern data); - - /// \brief Convert bool to string - public: StringValue(bool data); - - /// \brief Convert int to string - public: StringValue(int data); - - /// \brief Convert double to string - public: StringValue(double data); - - /// \brief Convert float to string - public: StringValue(float data); - - /// \brief Convert float to string - public: StringValue(const char* data); - - /// \brief Ogre colour value to string - public: StringValue(Ogre::ColourValue* data); - - /// \brief A std string - public: StringValue(std::string data); - - /// \brief destructor - public: ~StringValue(); - - /// \brief True if the string is null - public: bool IsNull() const; - - /// \brief Get the value as a std string - public: std::string GetStr() const; - - /// \brief Get the value as a char string - public: const char* GetCharStr() const; - - //private: std::string str; - private: std::ostringstream stream; - }; - - -/// \} -} - -#endif Modified: code/gazebo/trunk/server/XMLConfig.cc =================================================================== --- code/gazebo/trunk/server/XMLConfig.cc 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/XMLConfig.cc 2008-07-21 05:27:12 UTC (rev 6891) @@ -836,7 +836,7 @@ //////////////////////////////////////////////////////////////////////////// // Set the value associated with a node. -void XMLConfigNode::SetValue(const std::string &key, const StringValue &data, int require, int type) +/*void XMLConfigNode::SetValue(const std::string &key, const StringValue &data, int require, int type) { bool success; @@ -847,7 +847,7 @@ this->NewNode(key.c_str(), data.GetCharStr(), type); } -} +}*/ //////////////////////////////////////////////////////////////////////////// Modified: code/gazebo/trunk/server/XMLConfig.hh =================================================================== --- code/gazebo/trunk/server/XMLConfig.hh 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/XMLConfig.hh 2008-07-21 05:27:12 UTC (rev 6891) @@ -35,7 +35,6 @@ #include "Vector2.hh" #include "Quatern.hh" #include "Time.hh" -#include "StringValue.hh" namespace gazebo { @@ -195,7 +194,7 @@ /// \param value : the name of the element or attribute to write /// \param require : Require=1 means that if not found a new node will be created /// \param type : Only if a new node is created, the type must be specified - public: void SetValue(const std::string &key, const StringValue &data, int require =0, int type=0); + //public: void SetValue(const std::string &key, const StringValue &data, int require =0, int type=0); /// \brief Get a node's value, which is either a attribute or child node value. protected: xmlChar* GetNodeValue( const std::string &key ) const; Modified: code/gazebo/trunk/server/controllers/camera/stereo/Stereo_Camera.cc =================================================================== --- code/gazebo/trunk/server/controllers/camera/stereo/Stereo_Camera.cc 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/controllers/camera/stereo/Stereo_Camera.cc 2008-07-21 05:27:12 UTC (rev 6891) @@ -70,9 +70,15 @@ if ((*iter)->GetType() == "stereo") this->stereoIface = dynamic_cast<StereoCameraIface*>(*iter); else if ((*iter)->GetType() == "camera") - this->cameraIface = dynamic_cast<CameraIface*>(*iter); + { + CameraIface *ciface = dynamic_cast<CameraIface*>(*iter); + this->cameraIfaces[ciface->GetId()] = ciface; + } } + this->leftCameraName = node->GetString("leftcamera","", 1); + this->rightCameraName = node->GetString("rightcamera","", 1); + if (!this->stereoIface) gzthrow("Stereo_Camera controller requires a StereoCameraIface"); } @@ -87,15 +93,23 @@ // Update the controller void Stereo_Camera::UpdateChild() { - if (this->cameraIface) + std::map< std::string, CameraIface*>::iterator iter; + + for (iter = this->cameraIfaces.begin(); + iter != this->cameraIfaces.end(); iter++) { - this->cameraIface->Lock(1); - if (this->cameraIface->data->head.openCount > 0) - this->PutCameraData(); - this->cameraIface->Unlock(); + iter->second->Lock(1); - // New data is available - this->cameraIface->Post(); + if (iter->second->data->head.openCount > 0) + { + if (this->leftCameraName == iter->first) + this->PutCameraData( iter->second->data, 0 ); + else + this->PutCameraData( iter->second->data, 1 ); + } + + iter->second->Unlock(); + iter->second->Post(); } if (this->stereoIface) @@ -175,9 +189,9 @@ //////////////////////////////////////////////////////////////////////////////// // Put camera data to the interface -void Stereo_Camera::PutCameraData() +void Stereo_Camera::PutCameraData(CameraData *camera_data, unsigned int camera) { - CameraData *camera_data = this->cameraIface->data; + //CameraData *camera_data = this->cameraIface->data; const unsigned char *rgb_src = NULL; unsigned char *rgb_dst = NULL; Pose3d cameraPose; @@ -202,10 +216,9 @@ camera_data->camera_pose.yaw = cameraPose.rot.GetYaw(); // Copy the pixel data to the interface - rgb_src = this->myParent->GetImageData(0); + rgb_src = this->myParent->GetImageData(camera); rgb_dst = camera_data->image; memcpy(rgb_dst, rgb_src, camera_data->image_size); - } Modified: code/gazebo/trunk/server/controllers/camera/stereo/Stereo_Camera.hh =================================================================== --- code/gazebo/trunk/server/controllers/camera/stereo/Stereo_Camera.hh 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/controllers/camera/stereo/Stereo_Camera.hh 2008-07-21 05:27:12 UTC (rev 6891) @@ -28,6 +28,8 @@ #ifndef STEREO_CAMERA_HH #define STEREO_CAMERA_HH +#include <map> + #include "Controller.hh" namespace gazebo @@ -93,12 +95,15 @@ private: void PutStereoData(); /// \brief Put camera data to the iface - private: void PutCameraData(); + private: void PutCameraData(CameraData *camera_data, unsigned int camera); /// The camera interface private: StereoCameraIface *stereoIface; - private: CameraIface *cameraIface; + private: std::map< std::string, CameraIface*> cameraIfaces; + private: std::string leftCameraName; + private: std::string rightCameraName; + /// The parent sensor private: StereoCameraSensor *myParent; Modified: code/gazebo/trunk/server/controllers/position2d/differential/Differential_Position2d.cc =================================================================== --- code/gazebo/trunk/server/controllers/position2d/differential/Differential_Position2d.cc 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/controllers/position2d/differential/Differential_Position2d.cc 2008-07-21 05:27:12 UTC (rev 6891) @@ -113,11 +113,12 @@ // Load the controller void Differential_Position2d::SaveChild(XMLConfigNode *node) { - node->SetValue("wheelSeparation",this->wheelSep); + /*node->SetValue("wheelSeparation",this->wheelSep); node->SetValue("wheelDiameter",this->wheelDiam); node->SetValue("torque",this->torque); // node->SetValue("leftJoint",this->XMLData["leftJointName"]); // node->SetValue("rightJoint",this->XMLData["rightJointName"]); +*/ } Modified: code/gazebo/trunk/server/gui/GLWindow.cc =================================================================== --- code/gazebo/trunk/server/gui/GLWindow.cc 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/gui/GLWindow.cc 2008-07-21 05:27:12 UTC (rev 6891) @@ -122,17 +122,6 @@ // Update function void GLWindow::Update() { - /*if (this->userCamera && this->userCamera->GetUserMovable()) - { - this->userCamera->Translate( - this->directionVec * (Simulator::Instance()->GetRealTime() - this->lastUpdateTime) ); - this->directionVec.Set(0,0,0); - } - - this->lastUpdateTime = Simulator::Instance()->GetRealTime(); - - this->userCamera->Update(); - */ if (this->activeCamera && this->activeCamera->GetUserMovable()) { this->activeCamera->Translate( @@ -216,17 +205,6 @@ /// Handle a mouse drag void GLWindow::HandleMouseDrag() { - /*if (this->userCamera && this->userCamera->GetUserMovable()) - { - if (this->leftMousePressed) - { - Vector2<int> d = this->mousePos - this->prevMousePos; - this->userCamera->RotateYaw(DTOR(-d.x * this->rotateAmount)); - this->userCamera->RotatePitch(DTOR(d.y * this->rotateAmount)); - } - } - */ - if (this->activeCamera && this->activeCamera->GetUserMovable()) { if (this->leftMousePressed) Modified: code/gazebo/trunk/server/gui/Gui.cc =================================================================== --- code/gazebo/trunk/server/gui/Gui.cc 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/gui/Gui.cc 2008-07-21 05:27:12 UTC (rev 6891) @@ -79,6 +79,8 @@ // Create a dummy rendering window. This creates a context, and allows Ogre // to initialize properly OgreCreator::CreateWindow(this, 1, 1); + + this->hasFocus = true; } //////////////////////////////////////////////////////////////////////////////// @@ -133,12 +135,18 @@ /// Handle an event int Gui::handle(int event) { - - switch (event) + switch(event) { + case FL_FOCUS: + this->hasFocus = true; + break; + case FL_UNFOCUS: + this->hasFocus = false; + break; case FL_HIDE: - Simulator::Instance()->SetUserQuit(); - return 1; + if (this->hasFocus) + Simulator::Instance()->SetUserQuit(); + break; } return Fl_Window::handle(event); Modified: code/gazebo/trunk/server/gui/Gui.hh =================================================================== --- code/gazebo/trunk/server/gui/Gui.hh 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/gui/Gui.hh 2008-07-21 05:27:12 UTC (rev 6891) @@ -76,6 +76,8 @@ private: Toolbar *toolbar; private: StatusBar *statusbar; private: GLFrameManager *frameMgr; + + private: bool hasFocus; }; } Modified: code/gazebo/trunk/server/main.cc =================================================================== --- code/gazebo/trunk/server/main.cc 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/main.cc 2008-07-21 05:27:12 UTC (rev 6891) @@ -311,5 +311,6 @@ return -1; } + printf("Done.\n"); return 0; } Modified: code/gazebo/trunk/server/physics/Body.cc =================================================================== --- code/gazebo/trunk/server/physics/Body.cc 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/physics/Body.cc 2008-07-21 05:27:12 UTC (rev 6891) @@ -127,7 +127,7 @@ // Save the body based on our XMLConfig node void Body::Save() { - std::vector< Geom* >::iterator giter; + /*std::vector< Geom* >::iterator giter; std::vector< Sensor* >::iterator siter; this->xmlNode->SetValue("name", this->GetName()); @@ -143,7 +143,7 @@ { //(*siter)->Save(); } - + */ } Modified: code/gazebo/trunk/server/physics/Geom.cc =================================================================== --- code/gazebo/trunk/server/physics/Geom.cc 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/physics/Geom.cc 2008-07-21 05:27:12 UTC (rev 6891) @@ -128,10 +128,10 @@ childNode = childNode->GetNext("visual"); } - if (this->IsStatic()) + /*if (this->IsStatic()) { this->visualNode->MakeStatic(); - } + }*/ // Create the bounding box if (this->geomId && dGeomGetClass(this->geomId) != dPlaneClass) @@ -161,7 +161,7 @@ // Save the body based on our XMLConfig node void Geom::Save() { - std::vector<OgreVisual*>::iterator iter; + /*std::vector<OgreVisual*>::iterator iter; Pose3d pose= this->GetPose(); this->xmlNode->SetValue("name", this->GetName()); @@ -176,8 +176,7 @@ { (*iter)->Save(); } - - + */ } //////////////////////////////////////////////////////////////////////////////// Modified: code/gazebo/trunk/server/physics/MapGeom.cc =================================================================== --- code/gazebo/trunk/server/physics/MapGeom.cc 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/physics/MapGeom.cc 2008-07-21 05:27:12 UTC (rev 6891) @@ -35,6 +35,7 @@ #include "OgreAdaptor.hh" #include "Simulator.hh" #include "OgreAdaptor.hh" +#include "OgreVisual.hh" #include "Global.hh" #include "Body.hh" #include "MapGeom.hh" @@ -110,6 +111,8 @@ } this->CreateBoxes(this->root); + + this->visualNode->MakeStatic(); } void MapGeom::CreateBoxes(QuadNode *node) Modified: code/gazebo/trunk/server/physics/ode/ODEPhysics.cc =================================================================== --- code/gazebo/trunk/server/physics/ode/ODEPhysics.cc 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/physics/ode/ODEPhysics.cc 2008-07-21 05:27:12 UTC (rev 6891) @@ -108,7 +108,7 @@ // Save the ODE engine void ODEPhysics::Save(XMLConfigNode *node) { - XMLConfigNode *cnode = node->GetChild("ode"); + /*XMLConfigNode *cnode = node->GetChild("ode"); if (cnode == NULL) gzthrow("No <physics:ode> node in the XML, can't write back the data"); @@ -116,6 +116,7 @@ cnode->SetValue("stepTime", this->stepTime); cnode->SetValue("cfm", this->globalCFM); cnode->SetValue("erp", this->globalERP); + */ } //////////////////////////////////////////////////////////////////////////////// Modified: code/gazebo/trunk/server/rendering/OgreAdaptor.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2008-07-21 05:27:12 UTC (rev 6891) @@ -67,6 +67,8 @@ this->root=NULL; this->updateRate = 0; + + this->dummyDisplay = false; } //////////////////////////////////////////////////////////////////////////////// @@ -269,12 +271,15 @@ this->root->addFrameListener(this->frameListener); this->updateRate = node->GetDouble("maxUpdateRate",0,0); + + this->raySceneQuery = this->sceneMgr->createRayQuery( Ogre::Ray() ); } //////////////////////////////////////////////////////////////////////////////// // Save void OgreAdaptor::Save(XMLConfigNode *node) { + /* //Video information is not modified so we don't need to rewrite it. //Sky is not modified, not rewritten XMLConfigNode *rnode; @@ -290,7 +295,7 @@ cnode = rnode->GetChild("fog"); if (cnode) OgreCreator::SaveFog(cnode); - + */ } @@ -460,6 +465,32 @@ } //////////////////////////////////////////////////////////////////////////////// +/// Get an entity at a pixel location using a camera. Used for mouse picking. +Entity *OgreAdaptor::GetEntityAt(OgreCamera *camera, int x, int y) +{ + /* + Ogre::Vector3 camPos = camera->getPosition(); + + Ogre::Ray mouseRay = camera->getCameraToViewportRay( + x/camera->GetViewportWidth(), y/camera->GetViewportHeight()); + + this->raySceneQuery->setRay( mouseRay ); + + // Perform the scene query + Ogre::RaySceneQueryResult &result = this->raySceneQuery->execute(); + Ogre::RaySceneQueryResult::iterator iter = result.begin(); + + // Get the results, set the camera height + if (iter != result.end() && iter->worldFragment) + { + Ogre::Real terrainHeight = iter->worldFragment->singleIntersection.y; + if ((terrainHeight + 10.0f) > camPos.y) + camera->setPosition( camPos.x, terrainHeight + 10.0f, camPos.z); + } + */ +} + +//////////////////////////////////////////////////////////////////////////////// /// Get the desired update rate double OgreAdaptor::GetUpdateRate() { Modified: code/gazebo/trunk/server/rendering/OgreAdaptor.hh =================================================================== --- code/gazebo/trunk/server/rendering/OgreAdaptor.hh 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/rendering/OgreAdaptor.hh 2008-07-21 05:27:12 UTC (rev 6891) @@ -51,6 +51,7 @@ class RenderTarget; class ColourValue; class RenderSystem; + class RaySceneQuery; } @@ -94,6 +95,10 @@ /// \brief Update a window public: void UpdateWindow(Ogre::RenderWindow *window, OgreCamera *camera); + /// \brief Get an entity at a pixel location using a camera. Used for + /// mouse picking. + public: Entity *GetEntityAt(OgreCamera *camera, int x, int y); + private: void LoadPlugins(); private: void SetupResources(); private: void SetupRenderSystem(bool create); @@ -116,6 +121,7 @@ private: std::string videoMode; + private: Ogre::RaySceneQuery *raySceneQuery; //bsp attributes saved to write XML file back private: int sceneType; @@ -145,6 +151,7 @@ /// GLX context used to render the scenes.Used for gui-less operation protected: GLXContext dummyContext; + }; Modified: code/gazebo/trunk/server/rendering/OgreCreator.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreCreator.cc 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/rendering/OgreCreator.cc 2008-07-21 05:27:12 UTC (rev 6891) @@ -258,7 +258,7 @@ //////////////////////////////////////////////////////////////////////////////// void OgreCreator::SaveFog(XMLConfigNode *node) { - Ogre::ColourValue color=OgreAdaptor::Instance()->sceneMgr->getFogColour(); + /*Ogre::ColourValue color=OgreAdaptor::Instance()->sceneMgr->getFogColour(); Ogre::Real start = OgreAdaptor::Instance()->sceneMgr->getFogStart(); Ogre::Real end = OgreAdaptor::Instance()->sceneMgr->getFogEnd(); //Ogre::Real density = OgreAdaptor::Instance()->sceneMgr->getFogDensity(); @@ -286,6 +286,7 @@ node->SetValue("linearEnd", end); //node->SetValue("density", density); + */ } //////////////////////////////////////////////////////////////////////////////// Modified: code/gazebo/trunk/server/rendering/OgreVisual.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreVisual.cc 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/server/rendering/OgreVisual.cc 2008-07-21 05:27:12 UTC (rev 6891) @@ -151,9 +151,10 @@ void OgreVisual::Save() { - this->xmlNode->SetValue("xyz", this->GetPosition()); + /*this->xmlNode->SetValue("xyz", this->GetPosition()); this->xmlNode->SetValue("rpy", this->GetRotation()); //TODO: A lot of information! + */ } Modified: code/gazebo/trunk/worlds/models/bandit.model =================================================================== --- code/gazebo/trunk/worlds/models/bandit.model 2008-07-18 23:57:33 UTC (rev 6890) +++ code/gazebo/trunk/worlds/models/bandit.model 2008-07-21 05:27:12 UTC (rev 6891) @@ -67,7 +67,11 @@ <controller:stereocamera name="stereo_camera_controller"> <interface:stereocamera name="bandit_stereo_iface" /> - <interface:camera name="bandit_stereo_camera_iface" /> + <interface:camera name="bandit_stereo_camera_left_iface" /> + <interface:camera name="bandit_stereo_camera_right_iface" /> + + <leftcamera>bandit_stereo_camera_left_iface</leftcamera> + <rightcamera>bandit_stereo_camera_right_iface</rightcamera> </controller:stereocamera> </sensor:stereocamera> </body:box> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Playerstage-commit mailing list Playerstage-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/playerstage-commit