diff --git a/SimDynamics/DynamicsEngine/BulletEngine/BulletCoinQtViewer.cpp b/SimDynamics/DynamicsEngine/BulletEngine/BulletCoinQtViewer.cpp index a83c0a639182823060855531212053abed483415..97bd39df142c059d7e13427a29a540e4834a65e3 100644 --- a/SimDynamics/DynamicsEngine/BulletEngine/BulletCoinQtViewer.cpp +++ b/SimDynamics/DynamicsEngine/BulletEngine/BulletCoinQtViewer.cpp @@ -7,6 +7,7 @@ #include <VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h> #include <VirtualRobot/Visualization/CoinVisualization/CoinVisualizationNode.h> +#include <VirtualRobot/Visualization/CoinVisualization/CoinVisualization.h> #include <boost/foreach.hpp> @@ -201,6 +202,39 @@ void BulletCoinQtViewer::viewAll() //viewer->viewAll(); } +void BulletCoinQtViewer::addVisualization(RobotPtr robot, VirtualRobot::SceneObject::VisualizationType visuType) +{ + boost::recursive_mutex::scoped_lock scoped_lock(engineMutex); + VR_ASSERT(so); + removeVisualization(robot); + + boost::shared_ptr<VirtualRobot::CoinVisualization> visualization = robot->getVisualization<CoinVisualization>(visuType); + SoNode* n = visualization->getCoinVisualization(); + + if (n) + { + sceneGraph->addChild(n); + sceneGraph->addSelectionCallback( selectionCB, this ); + sceneGraph->addDeselectionCallback( deselectionCB, this ); + addedSpriteRobotVisualizations[robot] = n; + } +} + +void BulletCoinQtViewer::addVisualization(SceneObjectPtr so, VirtualRobot::SceneObject::VisualizationType visuType) +{ + boost::recursive_mutex::scoped_lock scoped_lock(engineMutex); + VR_ASSERT(so); + removeVisualization(so); + SoNode * n = CoinVisualizationFactory::getCoinVisualization(so, visuType); + if (n) + { + sceneGraph->addChild(n); + sceneGraph->addSelectionCallback( selectionCB, this ); + sceneGraph->addDeselectionCallback( deselectionCB, this ); + addedSpriteVisualizations[so] = n; + } +} + void BulletCoinQtViewer::addVisualization(DynamicsObjectPtr o, VirtualRobot::SceneObject::VisualizationType visuType) { boost::recursive_mutex::scoped_lock scoped_lock(engineMutex); @@ -255,6 +289,28 @@ void BulletCoinQtViewer::addVisualization(DynamicsRobotPtr r, VirtualRobot::Scen }*/ } +void BulletCoinQtViewer::removeVisualization( RobotPtr o ) +{ + boost::recursive_mutex::scoped_lock scoped_lock(engineMutex); + VR_ASSERT(o); + if (addedSpriteRobotVisualizations.find(o) != addedSpriteRobotVisualizations.end()) + { + sceneGraph->removeChild(addedSpriteRobotVisualizations[o]); + addedSpriteRobotVisualizations.erase(o); + } +} + +void BulletCoinQtViewer::removeVisualization( SceneObjectPtr o ) +{ + boost::recursive_mutex::scoped_lock scoped_lock(engineMutex); + VR_ASSERT(o); + if (addedSpriteVisualizations.find(o) != addedSpriteVisualizations.end()) + { + sceneGraph->removeChild(addedSpriteVisualizations[o]); + addedSpriteVisualizations.erase(o); + } +} + void BulletCoinQtViewer::removeVisualization( DynamicsObjectPtr o ) { boost::recursive_mutex::scoped_lock scoped_lock(engineMutex); diff --git a/SimDynamics/DynamicsEngine/BulletEngine/BulletCoinQtViewer.h b/SimDynamics/DynamicsEngine/BulletEngine/BulletCoinQtViewer.h index 26c239726f76fd83da4ebfe8819b0c8920ae3fe3..8429f886a15d9a71360808459af797b13e19ec18 100644 --- a/SimDynamics/DynamicsEngine/BulletEngine/BulletCoinQtViewer.h +++ b/SimDynamics/DynamicsEngine/BulletEngine/BulletCoinQtViewer.h @@ -63,12 +63,16 @@ public: /*! Visualize dynamics object. */ + void addVisualization(VirtualRobot::RobotPtr o, VirtualRobot::SceneObject::VisualizationType visuType = VirtualRobot::SceneObject::Full); + void addVisualization(VirtualRobot::SceneObjectPtr o, VirtualRobot::SceneObject::VisualizationType visuType = VirtualRobot::SceneObject::Full); void addVisualization(DynamicsObjectPtr o, VirtualRobot::SceneObject::VisualizationType visuType = VirtualRobot::SceneObject::Full); void addVisualization(DynamicsRobotPtr r, VirtualRobot::SceneObject::VisualizationType visuType = VirtualRobot::SceneObject::Full); /*! Remove visualization of dynamics object. */ + void removeVisualization(VirtualRobot::RobotPtr o); + void removeVisualization(VirtualRobot::SceneObjectPtr o); void removeVisualization(DynamicsObjectPtr o); void removeVisualization(DynamicsRobotPtr r); @@ -159,6 +163,8 @@ protected: BulletEnginePtr bulletEngine; btClock m_clock; + std::map<VirtualRobot::RobotPtr,SoNode*> addedSpriteRobotVisualizations; + std::map<VirtualRobot::SceneObjectPtr,SoNode*> addedSpriteVisualizations; std::map<DynamicsObjectPtr,SoNode*> addedVisualizations; std::map<DynamicsRobotPtr,SoNode*> addedRobotVisualizations;