28 #include <boost/enable_shared_from_this.hpp>
29 #include <boost/shared_ptr.hpp>
47 class recursive_mutex;
65 class World :
public boost::enable_shared_from_this<World>
71 public:
World(
const std::string &_name =
"");
86 public:
void Save(
const std::string &_filename);
109 public:
void Clear();
113 public: std::string
GetName()
const;
135 public: std::list<ModelPtr>
GetModels()
const;
148 public:
void Reset();
266 public: std::string
StripWorldName(
const std::string &_name)
const;
288 public:
void LoadPlugin(
const std::string &_filename,
289 const std::string &_name,
299 {
return this->setWorldPoseMutex;}
304 {
return this->enablePhysicsEngine;}
309 {this->enablePhysicsEngine = _enable;}
317 private:
ModelPtr GetModelById(
unsigned int _id);
322 private:
void LoadPlugins();
348 private:
void RunLoop();
351 private:
void Step();
354 private:
void Update();
358 private:
void OnPause(
bool _p);
361 private:
void OnStep();
365 private:
void OnControl(ConstWorldControlPtr &_data);
369 private:
void OnRequest(ConstRequestPtr &_msg);
373 private:
void SetSelectedEntityCB(
const std::string &_name);
379 private:
void BuildSceneMsg(msgs::Scene &_scene,
BasePtr _entity);
383 private:
void JointLog(ConstJointPtr &_msg);
387 private:
void OnFactoryMsg(ConstFactoryPtr &_data);
391 private:
void OnModelMsg(ConstModelPtr &_msg);
394 private:
void ModelUpdateTBB();
397 private:
void ModelUpdateSingleLoop();
406 private:
void FillModelMsg(msgs::Model &_msg,
ModelPtr _model);
409 private:
void ProcessEntityMsgs();
412 private:
void ProcessRequestMsgs();
415 private:
void ProcessFactoryMsgs();
418 private:
void ProcessModelMsgs();
421 private:
void UpdateStateSDF();
425 private:
void UpdateSDFFromState(
const WorldState &_state);
437 private: boost::thread *thread;
446 private: std::vector<google::protobuf::Message> messages;
449 private: std::string name;
464 private:
int stepInc;
506 private: msgs::WorldStatistics worldStatsMsg;
509 private: msgs::Scene sceneMsg;
512 private: void (
World::*modelUpdateFunc)();
527 private: boost::mutex *receiveMutex;
530 private: boost::mutex *loadModelMutex;
537 private: boost::mutex *setWorldPoseMutex;
545 private: boost::recursive_mutex *worldUpdateMutex;
551 private: std::vector<WorldPluginPtr> plugins;
554 private: std::list<std::string> deleteEntity;
562 private: std::list<msgs::Request> requestMsgs;
565 private: std::list<msgs::Factory> factoryMsgs;
568 private: std::list<msgs::Model> modelMsgs;
571 private:
bool needsReset;
574 private:
bool resetAll;
577 private:
bool resetTimeOnly;
580 private:
bool resetModelOnly;
583 private:
bool initialized;
586 private:
bool enablePhysicsEngine;
592 private:
bool pluginsLoaded;