Revision: 8607 http://playerstage.svn.sourceforge.net/playerstage/?rev=8607&view=rev Author: natepak Date: 2010-04-10 21:07:58 +0000 (Sat, 10 Apr 2010)
Log Message: ----------- Cleaned up the deletion of models Modified Paths: -------------- code/gazebo/trunk/CMakeLists.txt code/gazebo/trunk/benchmarks/CMakeLists.txt code/gazebo/trunk/benchmarks/box_pile_benchmark.cc code/gazebo/trunk/benchmarks/camera_benchmark.cc code/gazebo/trunk/benchmarks/laser_benchmark.cc code/gazebo/trunk/libgazebo/CMakeLists.txt code/gazebo/trunk/libgazebo/Iface.cc code/gazebo/trunk/libgazebo/Server.cc code/gazebo/trunk/libgazebo/SimIface.cc code/gazebo/trunk/libgazebo/gz.h code/gazebo/trunk/server/Entity.cc code/gazebo/trunk/server/Entity.hh code/gazebo/trunk/server/GazeboConfig.cc code/gazebo/trunk/server/Model.cc code/gazebo/trunk/server/Model.hh code/gazebo/trunk/server/Simulator.cc code/gazebo/trunk/server/World.cc code/gazebo/trunk/server/main.cc code/gazebo/trunk/server/physics/Body.cc code/gazebo/trunk/server/physics/Body.hh code/gazebo/trunk/server/physics/Geom.cc code/gazebo/trunk/server/physics/Geom.hh code/gazebo/trunk/server/physics/RayShape.cc code/gazebo/trunk/server/physics/Shape.cc code/gazebo/trunk/server/physics/ode/ODEBody.cc code/gazebo/trunk/server/physics/ode/ODEMultiRayShape.cc code/gazebo/trunk/server/physics/ode/ODERayShape.cc code/gazebo/trunk/server/rendering/OgreAdaptor.cc code/gazebo/trunk/server/rendering/RTShaderSystem.cc code/gazebo/trunk/server/rendering/RTShaderSystem.hh code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc Modified: code/gazebo/trunk/CMakeLists.txt =================================================================== --- code/gazebo/trunk/CMakeLists.txt 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/CMakeLists.txt 2010-04-10 21:07:58 UTC (rev 8607) @@ -16,6 +16,8 @@ message (STATUS "${PROJECT_NAME} version ${GAZEBO_VERSION}") +set (CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON) + set (BUILD_GAZEBO ON CACHE INTERNAL "Build Gazebo" FORCE) set (gazeboserver_sources_desc "List of server sources" @@ -104,6 +106,7 @@ message (STATUS "Cmake C Flags:${CMAKE_C_FLAGS}") if (BUILD_GAZEBO) + include (libgazebo) if (use_internal_assimp) add_subdirectory(3rd_party) @@ -112,6 +115,7 @@ add_subdirectory(libgazebo) add_subdirectory(server) add_subdirectory(worlds) + add_subdirectory(tools) add_subdirectory(Media) if (INCLUDE_PLAYER) Modified: code/gazebo/trunk/benchmarks/CMakeLists.txt =================================================================== --- code/gazebo/trunk/benchmarks/CMakeLists.txt 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/benchmarks/CMakeLists.txt 2010-04-10 21:07:58 UTC (rev 8607) @@ -1,4 +1,4 @@ -project(factory) +project(benchmarks) cmake_minimum_required( VERSION 2.4 FATAL_ERROR ) @@ -21,7 +21,11 @@ include_directories(.) -set (sources laser_benchmark.cc box_grid_benchmark.cc box_pile_benchmark.cc joint_chain_benchmark.cc) +set (sources laser_benchmark.cc + box_grid_benchmark.cc + box_pile_benchmark.cc + joint_chain_benchmark.cc + camera_benchmark.cc) set_source_files_properties(${sources} PROPERTIES COMPILE_FLAGS "-ggdb -g2 -Wall") @@ -29,8 +33,10 @@ add_executable(box_pile_benchmark box_pile_benchmark.cc) add_executable(box_grid_benchmark box_grid_benchmark.cc) add_executable(joint_chain_benchmark joint_chain_benchmark.cc) +add_executable(camera_benchmark camera_benchmark.cc) target_link_libraries(laser_benchmark ${LINK_LIBS} ) target_link_libraries(box_grid_benchmark ${LINK_LIBS} ) target_link_libraries(box_pile_benchmark ${LINK_LIBS} ) target_link_libraries(joint_chain_benchmark ${LINK_LIBS} ) +target_link_libraries(camera_benchmark ${LINK_LIBS} ) Modified: code/gazebo/trunk/benchmarks/box_pile_benchmark.cc =================================================================== --- code/gazebo/trunk/benchmarks/box_pile_benchmark.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/benchmarks/box_pile_benchmark.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -9,7 +9,7 @@ gazebo::FactoryIface *factoryIface = NULL; int laser_count = 0; -std::string test_name="Boxes Benchmark"; +std::string test_name="Box Pile Benchmark"; std::string xlabel = "Box Count"; std::string ylabel = "Simtime / Realtime"; std::string data_filename = "/tmp/" + test_name + ".data"; @@ -106,7 +106,7 @@ double simTime = 0; double realTime = 0; - for (unsigned int i=0; i < 50; i++) + for (unsigned int i=0; i < 30; i++) { simTime += simIface->data->simTime; realTime += simIface->data->realTime; Modified: code/gazebo/trunk/benchmarks/camera_benchmark.cc =================================================================== --- code/gazebo/trunk/benchmarks/camera_benchmark.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/benchmarks/camera_benchmark.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -31,13 +31,13 @@ std::cerr << "Error\n"; } -void spawn_box(double x, double y, double z=10) +void spawn_camera(double x, double y, double z=1) { std::ostringstream model; model << "<model:physical name='camera" << camera_count++ << "'>"; model << " <xyz>" << x << " " << y << " " << z << "</xyz>"; - model << " <rpy>30 40 0</rpy>"; + model << " <static>true</static>"; model << " <body:box name='body'>"; model << " <geom:box name='geom'>"; @@ -50,9 +50,13 @@ model << " </visual>"; model << " </geom:box>"; - model << " <sensor:camera name='camera'>"; + model << " <sensor:camera name='camera" << camera_count << "'>"; + model << " <alwaysActive>true</alwaysActive>"; model << " <imageSize>640 480</imageSize>"; - model << " + model << " <hfov>60</hfov>"; + model << " <nearClip>0.1</nearClip>"; + model << " <farClip>50</farClip>"; + model << " </sensor:camera>"; model << " </body:box>"; model << "</model:physical>"; @@ -103,24 +107,28 @@ FILE *out = fopen(data_filename.c_str(), "w"); - for (unsigned int j=0; j < 100; j++) + for (int y=-10; y < 10; y++) { - spawn_box(j+1, 0); + for ( int x=-10; x < 10; x++) + { + spawn_camera(x, y); - double simTime = 0; - double realTime = 0; + double simTime = 0; + double realTime = 0; - for (unsigned int i=0; i < 50; i++) - { - simTime += simIface->data->simTime; - realTime += simIface->data->realTime; + for (unsigned int i=0; i < 50; i++) + { + simTime += simIface->data->simTime; + realTime += simIface->data->realTime; - /// Wait .1 seconds - usleep(100000); + /// Wait .1 seconds + usleep(100000); + } + + double percent = simTime / realTime; + fprintf(out,"%f\n",percent); + } - - double percent = simTime / realTime; - fprintf(out,"%f\n",percent); } fclose(out); Modified: code/gazebo/trunk/benchmarks/laser_benchmark.cc =================================================================== --- code/gazebo/trunk/benchmarks/laser_benchmark.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/benchmarks/laser_benchmark.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -114,9 +114,9 @@ if (!out) std::cerr << "Unable to open log file"; - for (int y = -5; y < 5; y++) + for (int y = -10; y < 10; y++) { - for (int x = -5; x < 5; x++) + for (int x = -10; x < 10; x++) { spawn_laser(x,y); Modified: code/gazebo/trunk/libgazebo/CMakeLists.txt =================================================================== --- code/gazebo/trunk/libgazebo/CMakeLists.txt 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/libgazebo/CMakeLists.txt 2010-04-10 21:07:58 UTC (rev 8607) @@ -1,31 +1,30 @@ -SET (sources Server.cc +set (sources Server.cc Client.cc Iface.cc IfaceFactory.cc + FactoryIface.cc SimIface.cc Graphics3dIface.cc ) -SET (headers gz.h IfaceFactory.hh) +set (headers gz.h IfaceFactory.hh) -INCLUDE_DIRECTORIES( - ${boost_include_dirs} -) +include_directories(${boost_include_dirs}) -IF (${ENABLE_BINDINGS}) - ADD_SUBDIRECTORY(bindings) -ENDIF (${ENABLE_BINDINGS}) +if (${ENABLE_BINDINGS}) + add_subdirectory(bindings) +endif (${ENABLE_BINDINGS}) -LINK_DIRECTORIES(${boost_library_dirs}) +link_directories(${boost_library_dirs}) -ADD_LIBRARY(gazeboshm SHARED ${sources}) -SET_TARGET_PROPERTIES(gazeboshm PROPERTIES OUTPUT_NAME "gazebo" VERSION ${GAZEBO_VERSION}) +add_library(gazeboshm SHARED ${sources}) +set_target_properties(gazeboshm PROPERTIES OUTPUT_NAME "gazebo" VERSION ${GAZEBO_VERSION}) -TARGET_LINK_LIBRARIES( gazeboshm ${boost_libraries}) +target_link_libraries( gazeboshm ${boost_libraries}) -INSTALL (TARGETS gazeboshm DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) -INSTALL (FILES ${headers} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/gazebo) +install (TARGETS gazeboshm DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) +install (FILES ${headers} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/gazebo) -CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/cmake/libgazebo_pkgconfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/libgazebo.pc @ONLY) +configure_file(${CMAKE_SOURCE_DIR}/cmake/libgazebo_pkgconfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/libgazebo.pc @ONLY) -INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libgazebo.pc DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/pkgconfig COMPONENT pkgconfig) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libgazebo.pc DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/pkgconfig COMPONENT pkgconfig) Modified: code/gazebo/trunk/libgazebo/Iface.cc =================================================================== --- code/gazebo/trunk/libgazebo/Iface.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/libgazebo/Iface.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -240,7 +240,7 @@ this->mmapFd = 0; // Delete the file - std::cout << "deleting "<< this->filename << "\n"; + //std::cout << "deleting "<< this->filename << "\n"; if (unlink(this->filename.c_str()) < 0) { @@ -310,7 +310,7 @@ throw(stream.str()); } - std::ios_base::fmtflags origFlags = std::cout.flags(); + /*std::ios_base::fmtflags origFlags = std::cout.flags(); // Print the name, version info std::cout << "opening " << this->filename.c_str() << " " @@ -320,6 +320,7 @@ << ((GazeboData*) this->mMap)->size << "\n"; std::cout.setf(origFlags); + */ this->Lock(1); ((GazeboData*)this->mMap)->openCount++; Modified: code/gazebo/trunk/libgazebo/Server.cc =================================================================== --- code/gazebo/trunk/libgazebo/Server.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/libgazebo/Server.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -174,7 +174,7 @@ { char cmd[1024]; - std::cout << "deleting " << this->filename << "\n"; + //std::cout << "deleting " << this->filename << "\n"; // unlink the pid file std::string pidfn = this->filename + "/gazebo.pid"; Modified: code/gazebo/trunk/libgazebo/SimIface.cc =================================================================== --- code/gazebo/trunk/libgazebo/SimIface.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/libgazebo/SimIface.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -169,14 +169,14 @@ //////////////////////////////////////////////////////////////////////////////// /// Get the 3d pose of a model -bool SimulationIface::GetPose3d(const char *modelName, Pose &pose) +bool SimulationIface::GetPose3d(const std::string &modelName, Pose &pose) { this->Lock(1); this->data->responseCount = 0; SimulationRequestData *request = &(this->data->requests[this->data->requestCount++]); request->type = SimulationRequestData::GET_POSE3D; memset(request->modelName, 0, 512); - strncpy(request->modelName, modelName, 512); + strncpy(request->modelName, modelName.c_str(), 512); request->modelName[511] = '\0'; this->Unlock(); @@ -192,14 +192,14 @@ //////////////////////////////////////////////////////////////////////////////// /// Get the 2d pose of a model -bool SimulationIface::GetPose2d(const char *modelName, Pose &pose) +bool SimulationIface::GetPose2d(const std::string &modelName, Pose &pose) { this->Lock(1); this->data->responseCount = 0; SimulationRequestData *request = &(this->data->requests[this->data->requestCount++]); request->type = SimulationRequestData::GET_POSE2D; memset(request->modelName, 0, 512); - strncpy(request->modelName, modelName, 512); + strncpy(request->modelName, modelName.c_str(), 512); request->modelName[511] = '\0'; this->Unlock(); @@ -216,7 +216,8 @@ //////////////////////////////////////////////////////////////////////////////// /// Set the 3d pose of a model -void SimulationIface::SetPose3d(const char *modelName, const Pose &modelPose) +void SimulationIface::SetPose3d(const std::string &modelName, + const Pose &modelPose) { this->Lock(1); this->data->responseCount = 0; @@ -226,7 +227,7 @@ request->modelPose = modelPose; memset(request->modelName, 0, 512); - strncpy(request->modelName, modelName, 512); + strncpy(request->modelName, modelName.c_str(), 512); request->modelName[511] = '\0'; this->Unlock(); @@ -234,7 +235,8 @@ //////////////////////////////////////////////////////////////////////////////// /// Set the 2d pose of a model -void SimulationIface::SetPose2d(const char *modelName, float x, float y, float yaw) +void SimulationIface::SetPose2d(const std::string &modelName, + float x, float y, float yaw) { this->Lock(1); this->data->responseCount = 0; @@ -243,7 +245,7 @@ request->type = gazebo::SimulationRequestData::SET_POSE2D; memset(request->modelName, 0, 512); - strncpy(request->modelName, modelName, 512); + strncpy(request->modelName, modelName.c_str(), 512); request->modelName[511] = '\0'; request->modelPose.pos.x = x; @@ -255,7 +257,7 @@ //////////////////////////////////////////////////////////////////////////////// /// Set the complete state of a model -void SimulationIface::SetState(const char *modelName, Pose &modelPose, +void SimulationIface::SetState(const std::string &modelName, Pose &modelPose, Vec3 &linearVel, Vec3 &angularVel, Vec3 &linearAccel, Vec3 &angularAccel ) { @@ -265,7 +267,7 @@ request->type = gazebo::SimulationRequestData::SET_STATE; memset(request->modelName, 0, 512); - strncpy(request->modelName, modelName, 512); + strncpy(request->modelName, modelName.c_str(), 512); request->modelName[511] = '\0'; if (isnan(linearVel.x)) linearVel.x = 0.0; @@ -293,7 +295,7 @@ } ////////////////////////////////////////////////////////////////////////////////// /// Get then children of a model -void SimulationIface::GetChildInterfaces(const char *modelName) +void SimulationIface::GetChildInterfaces(const std::string &modelName) { this->Lock(1); @@ -302,7 +304,7 @@ request->type = gazebo::SimulationRequestData::GET_MODEL_INTERFACES; memset(request->modelName, 0, 512); - strncpy(request->modelName, modelName, 512); + strncpy(request->modelName, modelName.c_str(), 512); request->modelName[511] = '\0'; this->Unlock(); @@ -310,7 +312,7 @@ } /////////////////////////////////////////////////////////////////////////////////// /// \brief Get the Type of a model e.g. "laser" "model" "fiducial" -void SimulationIface::GetInterfaceType(const char *modelName) +void SimulationIface::GetInterfaceType(const std::string &modelName) { this->Lock(1); SimulationRequestData *request = &(this->data->requests[this->data->requestCount++]); @@ -318,14 +320,14 @@ request->type = gazebo::SimulationRequestData::GET_INTERFACE_TYPE; memset(request->modelName, 0, 512); - strncpy(request->modelName, modelName, 512); + strncpy(request->modelName, modelName.c_str(), 512); request->modelName[511] = '\0'; this->Unlock(); } /////////////////////////////////////////////////////////////////////////////// /// Get the complete state of a model -bool SimulationIface::GetState(const char *modelName, Pose &modelPose, +bool SimulationIface::GetState(const std::string &modelName, Pose &modelPose, Vec3 &linearVel, Vec3 &angularVel, Vec3 &linearAccel, Vec3 &angularAccel ) { @@ -335,7 +337,7 @@ request->type = gazebo::SimulationRequestData::GET_STATE; memset(request->modelName, 0, 512); - strncpy(request->modelName, modelName, 512); + strncpy(request->modelName, modelName.c_str(), 512); request->modelName[511] = '\0'; this->Unlock(); @@ -385,7 +387,8 @@ //////////////////////////////////////////////////////////////////////////////// /// Get the type of this model -bool SimulationIface::GetModelType(const char *modelName, std::string &type) +bool SimulationIface::GetModelType(const std::string &modelName, + std::string &type) { this->Lock(1); this->data->responseCount = 0; @@ -395,7 +398,7 @@ request = &(this->data->requests[this->data->requestCount++]); request->type = SimulationRequestData::GET_MODEL_TYPE; memset(request->modelName, 0, 512); - strncpy(request->modelName, modelName, 512); + strncpy(request->modelName, modelName.c_str(), 512); request->modelName[511] = '\0'; this->Unlock(); @@ -435,7 +438,8 @@ //////////////////////////////////////////////////////////////////////////////// /// Get the number of children a model has -bool SimulationIface::GetNumChildren(const char *modelName, unsigned int &num) +bool SimulationIface::GetNumChildren(const std::string &modelName, + unsigned int &num) { this->Lock(1); this->data->responseCount = 0; @@ -445,7 +449,7 @@ request = &(this->data->requests[this->data->requestCount++]); request->type = SimulationRequestData::GET_NUM_CHILDREN; memset(request->modelName, 0, 512); - strncpy(request->modelName, modelName, 512); + strncpy(request->modelName, modelName.c_str(), 512); request->modelName[511] = '\0'; this->Unlock(); @@ -485,7 +489,8 @@ //////////////////////////////////////////////////////////////////////////////// /// Get the name of a child -bool SimulationIface::GetChildName(const char *modelName, unsigned int child, +bool SimulationIface::GetChildName(const std::string &modelName, + unsigned int child, std::string &childName) { this->Lock(1); @@ -497,7 +502,7 @@ request = &(this->data->requests[this->data->requestCount++]); request->type = SimulationRequestData::GET_CHILD_NAME; memset(request->modelName, 0, 512); - strncpy(request->modelName, modelName, 512); + strncpy(request->modelName, modelName.c_str(), 512); request->modelName[511] = '\0'; request->uintValue = child; this->Unlock(); @@ -514,7 +519,7 @@ //////////////////////////////////////////////////////////////////////////////// /// Get the extents of a model -bool SimulationIface::GetModelExtent(const char *modelName, Vec3 &ext) +bool SimulationIface::GetModelExtent(const std::string &modelName, Vec3 &ext) { this->Lock(1); this->data->responseCount = 0; @@ -522,7 +527,7 @@ request->type = SimulationRequestData::GET_MODEL_EXTENT; memset(request->modelName, 0, 512); - strncpy(request->modelName, modelName, 512); + strncpy(request->modelName, modelName.c_str(), 512); request->modelName[511] = '\0'; this->Unlock(); @@ -536,7 +541,8 @@ } //////////////////////////////////////////////////////////////////////////////// /// Get the Fiducial ID of this model -bool SimulationIface::GetModelFiducialID(const char *modelName, unsigned int &id) +bool SimulationIface::GetModelFiducialID(const std::string &modelName, + unsigned int &id) { this->Lock(1); @@ -547,7 +553,7 @@ request->type = SimulationRequestData::GET_MODEL_FIDUCIAL_ID; memset(request->modelName, 0, 512); - strncpy(request->modelName, modelName, 512); + strncpy(request->modelName, modelName.c_str(), 512); request->modelName[511] = '\0'; this->Unlock(); Modified: code/gazebo/trunk/libgazebo/gz.h =================================================================== --- code/gazebo/trunk/libgazebo/gz.h 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/libgazebo/gz.h 2010-04-10 21:07:58 UTC (rev 8607) @@ -544,54 +544,56 @@ public: void Run(double simTime); /// \brief Get the 3d pose of a model - public: bool GetPose3d(const char *modelName, Pose &pose); + public: bool GetPose3d(const std::string &modelName, Pose &pose); /// \brief Get the 2d pose of a model - public: bool GetPose2d(const char *modelName, Pose &pose); + public: bool GetPose2d(const std::string &modelName, Pose &pose); /// \brief Set the 3d pose of a model - public: void SetPose3d(const char *modelName, const Pose &modelPose); + public: void SetPose3d(const std::string &modelName, const Pose &modelPose); /// \brief Set the 2d pose of a model - public: void SetPose2d(const char *modelName, float x, float y, float yaw); + public: void SetPose2d(const std::string &modelName, float x, float y, + float yaw); /// \brief Set the complete state of a model - public: void SetState(const char *modelName, Pose &modelPose, + public: void SetState(const std::string &modelName, Pose &modelPose, Vec3 &linearVel, Vec3 &angularVel, Vec3 &linearAccel, Vec3 &angularAccel ); /// \brief Get the complete state of a model - public: bool GetState(const char *modelName, Pose &modelPose, + public: bool GetState(const std::string &modelName, Pose &modelPose, Vec3 &linearVel, Vec3 &angularVel, Vec3 &linearAccel, Vec3 &angularAccel ); /// \brief Get the child interfaces of a model - public: void GetChildInterfaces(const char *modelName); + public: void GetChildInterfaces(const std::string &modelName); /// \brief Get the Type of an interface e.g. "laser" "model" "fiducial" - public: void GetInterfaceType(const char *modelName); + public: void GetInterfaceType(const std::string &modelName); /// \brief Get the type of this model - public: bool GetModelType(const char *modelName, std::string &type); + public: bool GetModelType(const std::string &modelName, std::string &type); /// \brief Get the number of models public: bool GetNumModels(unsigned int &num); /// \brief Get the number of children a model has - public: bool GetNumChildren(const char *modelName, unsigned int &num); + public: bool GetNumChildren(const std::string &modelName, unsigned int &num); /// \brief Get the name of a model - public: bool GetModelName(unsigned int child, std::string &name); + public: bool GetModelName(unsigned int model, std::string &name); /// \brief Get the name of a child - public: bool GetChildName(const char *modelName, unsigned int child, + public: bool GetChildName(const std::string &modelName, unsigned int child, std::string &name); /// \brief Get the extents of a model - public: bool GetModelExtent(const char *modelName, Vec3 &ext); + public: bool GetModelExtent(const std::string &modelName, Vec3 &ext); /// \brief Get the model Fiducial ID (if one global ID was set) - public: bool GetModelFiducialID(const char *modelName, unsigned int &id); + public: bool GetModelFiducialID(const std::string &modelName, + unsigned int &id); public: void GoAckWait(); public: void GoAckPost(); @@ -1209,6 +1211,9 @@ this->data = (FactoryData*)this->mMap; } + /// \brief Delete a model by name + public: bool DeleteModel(const std::string &model_name); + /// Pointer to the factory data public: FactoryData *data; }; Modified: code/gazebo/trunk/server/Entity.cc =================================================================== --- code/gazebo/trunk/server/Entity.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/server/Entity.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -80,10 +80,33 @@ // Destructor Entity::~Entity() { + if (this->parent) + this->parent->RemoveChild(this); + delete this->staticP; + std::vector<Entity*>::iterator iter; + World::Instance()->GetPhysicsEngine()->RemoveEntity(this); + for (iter = this->children.begin(); iter != this->children.end(); iter++) + { + if (*iter) + { + (*iter)->SetParent(NULL); + + World::Instance()->GetPhysicsEngine()->RemoveEntity(*iter); + + Model *m = dynamic_cast<Model*>(*iter); + if (m) + { + m->Detach(); + } + + //delete *iter; + } + } + if (Simulator::Instance()->GetRenderEngineEnabled()) { if (this->visualNode) @@ -92,6 +115,7 @@ } } this->visualNode = NULL; + } //////////////////////////////////////////////////////////////////////////////// @@ -127,6 +151,21 @@ } //////////////////////////////////////////////////////////////////////////////// +/// Remove a child from this entity +void Entity::RemoveChild(Entity *child) +{ + std::vector<Entity*>::iterator iter; + for (iter = this->children.begin(); iter != this->children.end(); iter++) + { + if ((*iter)->GetName() == child->GetName()) + { + this->children.erase(iter); + break; + } + } +} + +//////////////////////////////////////////////////////////////////////////////// // Get all children std::vector< Entity* > &Entity::GetChildren() { Modified: code/gazebo/trunk/server/Entity.hh =================================================================== --- code/gazebo/trunk/server/Entity.hh 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/server/Entity.hh 2010-04-10 21:07:58 UTC (rev 8607) @@ -74,6 +74,10 @@ /// \brief Add a child to this entity /// \param child Child entity public: void AddChild(Entity *child); + + /// \brief Remove a child from this entity + /// \param child Child to remove + public: void RemoveChild(Entity *child); /// \brief Get all children /// \return Vector of children entities Modified: code/gazebo/trunk/server/GazeboConfig.cc =================================================================== --- code/gazebo/trunk/server/GazeboConfig.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/server/GazeboConfig.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -100,7 +100,7 @@ node = rc.GetRootNode()->GetChild("gazeboPath"); while (node) { - gzmsg(2) << "Gazebo Path[" << node->GetValue() << "]\n"; + gzmsg(5) << "Gazebo Path[" << node->GetValue() << "]\n"; this->gazeboPaths.push_back(node->GetValue()); node = node->GetNext("gazeboPath"); } @@ -112,7 +112,7 @@ node = rc.GetRootNode()->GetChild("ogrePath"); while (node) { - gzmsg(2) << "Ogre Path[" << node->GetValue() << "]\n"; + gzmsg(5) << "Ogre Path[" << node->GetValue() << "]\n"; this->ogrePaths.push_back( node->GetValue() ); node = node->GetNext("ogrePath"); } Modified: code/gazebo/trunk/server/Model.cc =================================================================== --- code/gazebo/trunk/server/Model.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/server/Model.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -113,13 +113,10 @@ this->graphicsHandler = NULL; } - for (biter=this->bodies.begin(); biter != this->bodies.end(); biter++) + for (biter = this->bodies.begin(); biter != this->bodies.end(); biter++) { if (biter->second) - { - delete biter->second; - biter->second = NULL; - } + delete (biter->second); } this->bodies.clear(); @@ -547,6 +544,17 @@ this->graphicsHandler = NULL; } + std::vector< Entity* >::iterator iter; + for (iter = this->children.begin(); iter != this->children.end(); iter++) + { + if (*iter) + { + Model *m = dynamic_cast<Model*>(*iter); + if (m) + m->Fini(); + } + } + this->FiniChild(); } @@ -939,7 +947,17 @@ return NULL; } + //////////////////////////////////////////////////////////////////////////////// +// Detach from parent model +void Model::Detach() +{ + if (this->joint) + delete this->joint; + this->joint = NULL; +} + +//////////////////////////////////////////////////////////////////////////////// // Attach this model to its parent void Model::Attach(XMLConfigNode *node) { Modified: code/gazebo/trunk/server/Model.hh =================================================================== --- code/gazebo/trunk/server/Model.hh 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/server/Model.hh 2010-04-10 21:07:58 UTC (rev 8607) @@ -174,7 +174,10 @@ /// \brief Get a geom by name public: Geom *GetGeom(const std::string &name) const; - + + /// \brief Detach from parent model + public: void Detach(); + /// \brief Attach this model to its parent public: void Attach(XMLConfigNode *node); Modified: code/gazebo/trunk/server/Simulator.cc =================================================================== --- code/gazebo/trunk/server/Simulator.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/server/Simulator.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -108,12 +108,6 @@ this->model_delete_mutex = NULL; } - if (this->gui) - { - delete this->gui; - this->gui = NULL; - } - if (this->physicsThread) { delete this->physicsThread; @@ -129,7 +123,15 @@ if (!this->loaded) return; + if (this->gui) + { + delete this->gui; + this->gui = NULL; + } + + gazebo::World::Instance()->Close(); + if (this->renderEngineEnabled) gazebo::OgreAdaptor::Instance()->Close(); } Modified: code/gazebo/trunk/server/World.cc =================================================================== --- code/gazebo/trunk/server/World.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/server/World.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -96,6 +96,7 @@ { if (*miter) { + (*miter)->Fini(); delete (*miter); (*miter) = NULL; } @@ -530,10 +531,7 @@ for (miter=this->toDeleteModels.begin(); miter!=this->toDeleteModels.end(); miter++) { - //std::cerr << "ProcessEngitiesToDelete " << (*miter)->GetName() << std::endl; (*miter)->Fini(); - this->models.erase( - std::remove(this->models.begin(), this->models.end(), *miter) ); delete (*miter); } @@ -551,10 +549,10 @@ // Update all the models for (miter=this->models.begin(); miter!=this->models.end(); miter++) { - if ((*miter)->GetName() == name) + if ((*miter)->GetCompleteScopedName() == name) { - (*miter)->Fini(); this->toDeleteModels.push_back(*miter); + this->models.erase( std::remove(this->models.begin(), this->models.end(), *miter)); } } } @@ -574,9 +572,6 @@ // Set the model's pose (relative to parent) //this->SetModelPose(model, model->GetInitPose()); - // Add the model to our list - this->models.push_back(model); - // If calling LoadEntity()->LoadModel()from Simulator::Load()->World::Load() // GetWorldInitialized() is false, in this case, model->Init() is // called later directly from main.cc through Simulator::Init() @@ -588,6 +583,9 @@ if (parent != NULL) model->Attach(node->GetChild("attach")); + else + // Add the model to our list + this->models.push_back(model); return model; } @@ -645,7 +643,7 @@ for (iter = models.begin(); iter != models.end(); iter++) { - if ((*iter)->GetName() == modelName) + if ((*iter)->GetCompleteScopedName() == modelName) return (*iter); } @@ -962,7 +960,7 @@ Model *model = this->models[index]; memset(response->modelName, 0, 512); - strncpy(response->modelName, model->GetName().c_str(), 512); + strncpy(response->modelName, model->GetCompleteScopedName().c_str(), 512); response->strValue[511] = '\0'; response++; @@ -990,7 +988,7 @@ if (ent) { memset(response->strValue, 0, 512); - strncpy(response->modelName, ent->GetName().c_str(), 512); + strncpy(response->modelName, ent->GetCompleteScopedName().c_str(), 512); response->strValue[511] = '\0'; response++; @@ -1389,21 +1387,7 @@ this->simIface->Unlock(); - // lock so models is not used - boost::recursive_mutex::scoped_lock lock(*Simulator::Instance()->GetMDMutex()); - - // Remove and delete all models that are marked for deletion - std::vector< Model* >::iterator miter; - for (miter=this->toDeleteModels.begin(); - miter!=this->toDeleteModels.end(); miter++) - { -// (*miter)->Fini(); - this->models.erase( - std::remove(this->models.begin(), this->models.end(), *miter) ); - delete *miter; - } - - this->toDeleteModels.clear(); + //this->ProcessEntitiesToDelete(); } void World::GetInterfaceNames(Entity* en, std::vector<std::string>& list) Modified: code/gazebo/trunk/server/main.cc =================================================================== --- code/gazebo/trunk/server/main.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/server/main.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -327,6 +327,6 @@ return -1; } - printf("Done.\n"); + printf("Gazebo done.\n"); return 0; } Modified: code/gazebo/trunk/server/physics/Body.cc =================================================================== --- code/gazebo/trunk/server/physics/Body.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/server/physics/Body.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -56,6 +56,7 @@ : Entity(parent) { this->comEntity = new Entity(this); + this->comEntity->SetName("COM Entity"); this->physicsEngine = World::Instance()->GetPhysicsEngine(); @@ -101,26 +102,35 @@ Body::~Body() { std::map< std::string, Geom* >::iterator giter; + std::vector<Entity*>::iterator iter; std::vector< Sensor* >::iterator siter; + if (this->cgVisual) + { + OgreCreator::Instance()->DeleteVisual( this->cgVisual ); + this->cgVisual = NULL; + } + + /*if (this->comEntity) + delete this->comEntity; + this->comEntity = NULL; + */ + + /*for (iter = this->children.begin(); iter != this->children.end(); iter++) + if (*iter) + { + std::cout << "Deleting[" << *iter << "]\n"; + delete *iter; + } + */ for (giter = this->geoms.begin(); giter != this->geoms.end(); giter++) - { if (giter->second) delete giter->second; - giter->second = NULL; - } this->geoms.clear(); for (siter = this->sensors.begin(); siter != this->sensors.end(); siter++) SensorManager::Instance()->RemoveSensor(*siter); - - if (this->cgVisual) - { - OgreCreator::Instance()->DeleteVisual( this->cgVisual ); - this->cgVisual = NULL; - } - delete this->xyzP; delete this->rpyP; delete this->dampingFactorP; @@ -139,9 +149,6 @@ delete this->ixzP; delete this->iyzP; - if (this->comEntity) - delete this->comEntity; - this->comEntity = NULL; } //////////////////////////////////////////////////////////////////////////////// @@ -262,8 +269,13 @@ void Body::Fini() { std::vector< Sensor* >::iterator siter; + std::map< std::string, Geom* >::iterator giter; + for (siter = this->sensors.begin(); siter != this->sensors.end(); siter++) (*siter)->Fini(); + + for (giter = this->geoms.begin(); giter != this->geoms.end(); giter++) + giter->second->Fini(); } //////////////////////////////////////////////////////////////////////////////// @@ -399,7 +411,7 @@ } } - + this->enabled = true; } //////////////////////////////////////////////////////////////////////////////// @@ -418,7 +430,13 @@ // Apply our angular accel this->SetTorque(this->angularAccel); + if (this->GetEnabled() != this->enabled) { + this->enabled = this->GetEnabled(); + this->enabledSignal(this->enabled); + } + + { //DiagnosticTimer timer("Body[" + this->GetName() +"] Update Geoms"); for (geomIter=this->geoms.begin(); Modified: code/gazebo/trunk/server/physics/Body.hh =================================================================== --- code/gazebo/trunk/server/physics/Body.hh 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/server/physics/Body.hh 2010-04-10 21:07:58 UTC (rev 8607) @@ -211,6 +211,15 @@ public: Entity *GetCoMEntity() { return this->comEntity; } + /// \brief Connect a boost::slot the the add entity signal + public: template<typename T> + boost::signals::connection ConnectEnabledSignal( T subscriber ) + { return enabledSignal.connect(subscriber); } + + public: template<typename T> + void DisconnectEnabledSignal( T subscriber ) + { enabledSignal.disconnect(subscriber); } + /// List of geometries attached to this body protected: std::map< std::string, Geom* > geoms; @@ -262,12 +271,17 @@ protected: ParamT<double> *iyzP; protected: Mass customMass; + /// \brief if this is the canonical :ody of a model, point back protected: Model* canonicalModel; /// \brief this is how you set canonical body from the model public: void SetCanonicalModel(Model* model); + private: boost::signal<void (bool)> enabledSignal; + + /// This flag is used to trigger the enabledSignal + private: bool enabled; }; /// \} Modified: code/gazebo/trunk/server/physics/Geom.cc =================================================================== --- code/gazebo/trunk/server/physics/Geom.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/server/physics/Geom.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -80,17 +80,16 @@ World::Instance()->ConnectShowPhysicsSignal( boost::bind(&Geom::ShowPhysics, this, _1) ); World::Instance()->ConnectShowJointsSignal( boost::bind(&Geom::ShowJoints, this, _1) ); World::Instance()->ConnectShowBoundingBoxesSignal( boost::bind(&Geom::ShowBoundingBox, this, _1) ); + + this->body->ConnectEnabledSignal( boost::bind(&Geom::EnabledCB, this, _1) ); } //////////////////////////////////////////////////////////////////////////////// // Destructor Geom::~Geom() { - World::Instance()->DisconnectShowPhysicsSignal( boost::bind(&Geom::ShowPhysics, this, _1) ); - World::Instance()->DisconnectShowJointsSignal( boost::bind(&Geom::ShowJoints, this, _1) ); - World::Instance()->DisconnectShowBoundingBoxesSignal( boost::bind(&Geom::ShowBoundingBox, this, _1) ); - - for (std::vector<OgreVisual*>::iterator iter = this->visuals.begin(); iter != this->visuals.end(); iter++) + for (std::vector<OgreVisual*>::iterator iter = this->visuals.begin(); + iter != this->visuals.end(); iter++) { if (*iter) { @@ -111,10 +110,29 @@ delete this->laserFiducialIdP; delete this->laserRetroP; - delete this->shape; + if (this->shape) + delete this->shape; + this->shape = NULL; + } //////////////////////////////////////////////////////////////////////////////// +/// Finalize the geom +void Geom::Fini() +{ + this->body->DisconnectEnabledSignal(boost::bind(&Geom::EnabledCB, this, _1)); + + World::Instance()->DisconnectShowPhysicsSignal( + boost::bind(&Geom::ShowPhysics, this, _1) ); + + World::Instance()->DisconnectShowJointsSignal( + boost::bind(&Geom::ShowJoints, this, _1) ); + + World::Instance()->DisconnectShowBoundingBoxesSignal( + boost::bind(&Geom::ShowBoundingBox, this, _1) ); +} + +//////////////////////////////////////////////////////////////////////////////// // First step in the loading process void Geom::Load(XMLConfigNode *node) { @@ -265,14 +283,6 @@ // Update void Geom::Update() { - if (this->body && this->bbVisual) - { - if (this->body->GetEnabled()) - this->bbVisual->SetBoundingBoxMaterial("Gazebo/GreenTransparent"); - else - this->bbVisual->SetBoundingBoxMaterial("Gazebo/RedTransparent"); - } - this->ClearContacts(); } @@ -507,3 +517,16 @@ return Contact(); } + +//////////////////////////////////////////////////////////////////////////////// +/// Enable callback: Called when the body changes +void Geom::EnabledCB(bool enabled) +{ + if (this->bbVisual) + { + if (enabled) + this->bbVisual->SetBoundingBoxMaterial("Gazebo/GreenTransparent"); + else + this->bbVisual->SetBoundingBoxMaterial("Gazebo/RedTransparent"); + } +} Modified: code/gazebo/trunk/server/physics/Geom.hh =================================================================== --- code/gazebo/trunk/server/physics/Geom.hh 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/server/physics/Geom.hh 2010-04-10 21:07:58 UTC (rev 8607) @@ -61,6 +61,9 @@ /// \brief Destructor public: virtual ~Geom(); + /// \brief Finalize the geom + public: void Fini(); + /// \brief Load the geom public: virtual void Load(XMLConfigNode *node); @@ -170,7 +173,10 @@ { contactSignal.connect( boost::bind(func, c, _1) ); } - + + /// \brief Enable callback: Called when the body changes + private: void EnabledCB(bool enabled); + /// \brief Create the bounding box for the geom private: void CreateBoundingBox(); Modified: code/gazebo/trunk/server/physics/RayShape.cc =================================================================== --- code/gazebo/trunk/server/physics/RayShape.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/server/physics/RayShape.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -134,8 +134,6 @@ this->relativeEndPos = dir * len + this->relativeStartPos; - //std::cout << "Len[" << len << "] St[" << this->relativeStartPos << "] End[" << this->relativeEndPos << "] dir[" << dir << "]\n"; - if (this->line) { this->line->SetPoint(1, this->relativeEndPos); Modified: code/gazebo/trunk/server/physics/Shape.cc =================================================================== --- code/gazebo/trunk/server/physics/Shape.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/server/physics/Shape.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -19,6 +19,8 @@ // Destructor Shape::~Shape() { + if (this->parent) + this->parent->SetShape(NULL); } //////////////////////////////////////////////////////////////////////////////// Modified: code/gazebo/trunk/server/physics/ode/ODEBody.cc =================================================================== --- code/gazebo/trunk/server/physics/ode/ODEBody.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/server/physics/ode/ODEBody.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -98,6 +98,7 @@ // Move callback. Use this to move the visuals void ODEBody::MoveCallback(dBodyID id) { + Pose3d pose; const dReal *p; const dReal *r; Modified: code/gazebo/trunk/server/physics/ode/ODEMultiRayShape.cc =================================================================== --- code/gazebo/trunk/server/physics/ode/ODEMultiRayShape.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/server/physics/ode/ODEMultiRayShape.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -12,6 +12,8 @@ ODEMultiRayShape::ODEMultiRayShape(Geom *parent) : MultiRayShape(parent) { + this->SetName("ODE Multiray Shape"); + // Create a space to contain the ray space this->superSpaceId = dSimpleSpaceCreate( 0 ); @@ -141,8 +143,10 @@ void ODEMultiRayShape::AddRay(const Vector3 &start, const Vector3 &end ) { MultiRayShape::AddRay(start,end); + ODEGeom *odeGeom = new ODEGeom(parent->GetBody()); + odeGeom->SetName("ODE Ray Geom"); - ODERayShape *ray = new ODERayShape( new ODEGeom(parent->GetBody()), **this->displayTypeP == "lines"); + ODERayShape *ray = new ODERayShape(odeGeom, **this->displayTypeP == "lines" ); ray->SetPoints(start,end); this->rays.push_back(ray); Modified: code/gazebo/trunk/server/physics/ode/ODERayShape.cc =================================================================== --- code/gazebo/trunk/server/physics/ode/ODERayShape.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/server/physics/ode/ODERayShape.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -38,6 +38,8 @@ ODERayShape::ODERayShape( Geom *parent, bool displayRays ) : RayShape(parent, displayRays) { + this->SetName("ODE Ray Shape"); + ODEGeom *geom = (ODEGeom*)this->parent; // Create default ray with unit length Modified: code/gazebo/trunk/server/rendering/OgreAdaptor.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/server/rendering/OgreAdaptor.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -104,6 +104,7 @@ delete this->drawGridP; delete this->skyMaterialP; + RTShaderSystem::Instance()->Fini(); } //////////////////////////////////////////////////////////////////////////////// Modified: code/gazebo/trunk/server/rendering/RTShaderSystem.cc =================================================================== --- code/gazebo/trunk/server/rendering/RTShaderSystem.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/server/rendering/RTShaderSystem.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -154,6 +154,29 @@ #endif } +void RTShaderSystem::Fini() +{ +#if OGRE_VERSION_MAJOR >= 1 && OGRE_VERSION_MINOR >= MINOR_VERSION + // Restore default scheme. + Ogre::MaterialManager::getSingleton().setActiveScheme(Ogre::MaterialManager::DEFAULT_SCHEME_NAME); + + // Unregister the material manager listener. + if (this->materialMgrListener != NULL) + { + Ogre::MaterialManager::getSingleton().removeListener( + this->materialMgrListener); + this->materialMgrListener = NULL; + } + + // Finalize RTShader system. + if (this->shaderGenerator != NULL) + { + Ogre::RTShader::ShaderGenerator::finalize(); + this->shaderGenerator = NULL; + } +#endif +} + //////////////////////////////////////////////////////////////////////////////// // Set an Ogre::Entity to use RT shaders void RTShaderSystem::AttachEntity(OgreVisual *vis) Modified: code/gazebo/trunk/server/rendering/RTShaderSystem.hh =================================================================== --- code/gazebo/trunk/server/rendering/RTShaderSystem.hh 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/server/rendering/RTShaderSystem.hh 2010-04-10 21:07:58 UTC (rev 8607) @@ -61,6 +61,9 @@ /// \brief Init the run time shader system public: void Init(); + /// \brief Finalize the shader system + public: void Fini(); + /// \brief Update the shaders public: void UpdateShaders(); Modified: code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc =================================================================== --- code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc 2010-04-02 15:07:45 UTC (rev 8606) +++ code/gazebo/trunk/server/sensors/camera/MonoCameraSensor.cc 2010-04-10 21:07:58 UTC (rev 8607) @@ -156,15 +156,20 @@ if (!Simulator::Instance()->GetRenderEngineEnabled()) return; + if (this->active || **this->alwaysActiveP || **this->saveFramesP) + this->UpdateCam(); + + // Only continue if the controller has an active interface. Or frames need // to be saved - if ( (this->controller && !this->controller->IsConnected()) && + /*if ( (this->controller && !this->controller->IsConnected()) && !this->saveFramesP->GetValue()) return; // Or skip if user sets camera to inactive if (this->active) this->UpdateCam(); + */ } //////////////////////////////////////////////////////////////////////////////// This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ Playerstage-commit mailing list Playerstage-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/playerstage-commit