]> git.mxchange.org Git - simgear.git/blobdiff - simgear/scene/model/placement.cxx
Make return type from loadPagedModel explicit.
[simgear.git] / simgear / scene / model / placement.cxx
index cd38181e212c611cee2ab8fb53a9921f0f697ca2..c1a7d83badf1a4000dcad9e6df4f1b450949f1f4 100644 (file)
@@ -10,6 +10,7 @@
 #include "placement.hxx"
 
 #include <simgear/compiler.h>
+#include <simgear/scene/util/OsgMath.hxx>
 #include <simgear/scene/util/SGSceneUserData.hxx>
 
 \f
@@ -25,6 +26,7 @@ SGModelPlacement::SGModelPlacement () :
     _selector(new osg::Switch),
     _transform(new osg::PositionAttitudeTransform)
 {
+    _selector->addChild(_transform.get());
 }
 
 SGModelPlacement::~SGModelPlacement ()
@@ -34,13 +36,28 @@ SGModelPlacement::~SGModelPlacement ()
 void
 SGModelPlacement::init( osg::Node * model )
 {
+  // remove previous models (in case of reinit)
+  _transform->removeChild(0, _transform->getNumChildren());
   if (model != 0) {
       _transform->addChild(model);
   }
-  _selector->addChild(_transform.get());
   _selector->setValue(0, 1);
 }
 
+void
+SGModelPlacement::add( osg::Node* model )
+{
+    if (model != 0) {
+        _transform->addChild(model);
+    }
+}
+
+void SGModelPlacement::clear()
+{
+    _selector = NULL;
+    _transform = NULL;
+}
+
 void
 SGModelPlacement::update()
 {
@@ -71,30 +88,6 @@ SGModelPlacement::setVisible (bool visible)
   _selector->setValue(0, visible);
 }
 
-void
-SGModelPlacement::setLongitudeDeg (double lon_deg)
-{
-  _position.setLongitudeDeg(lon_deg);
-}
-
-void
-SGModelPlacement::setLatitudeDeg (double lat_deg)
-{
-  _position.setLatitudeDeg(lat_deg);
-}
-
-void
-SGModelPlacement::setElevationFt (double elev_ft)
-{
-  _position.setElevationFt(elev_ft);
-}
-
-void
-SGModelPlacement::setPosition (double lon_deg, double lat_deg, double elev_ft)
-{
-  _position = SGGeod::fromDegFt(lon_deg, lat_deg, elev_ft);
-}
-
 void
 SGModelPlacement::setPosition(const SGGeod& position)
 {
@@ -138,7 +131,7 @@ void
 SGModelPlacement::setReferenceTime(const double& referenceTime)
 {
   SGSceneUserData* userData;
-  userData = SGSceneUserData::getOrCreateSceneUserData(_transform);
+  userData = SGSceneUserData::getOrCreateSceneUserData(_transform.get());
   SGSceneUserData::Velocity* vel = userData->getOrCreateVelocity();
   vel->referenceTime = referenceTime;
 }
@@ -147,7 +140,7 @@ void
 SGModelPlacement::setBodyLinearVelocity(const SGVec3d& linear)
 {
   SGSceneUserData* userData;
-  userData = SGSceneUserData::getOrCreateSceneUserData(_transform);
+  userData = SGSceneUserData::getOrCreateSceneUserData(_transform.get());
   SGSceneUserData::Velocity* vel = userData->getOrCreateVelocity();
   vel->linear = SGVec3d(-linear[0], linear[1], -linear[2]);
 }
@@ -156,7 +149,7 @@ void
 SGModelPlacement::setBodyAngularVelocity(const SGVec3d& angular)
 {
   SGSceneUserData* userData;
-  userData = SGSceneUserData::getOrCreateSceneUserData(_transform);
+  userData = SGSceneUserData::getOrCreateSceneUserData(_transform.get());
   SGSceneUserData::Velocity* vel = userData->getOrCreateVelocity();
   vel->angular = SGVec3d(-angular[0], angular[1], -angular[2]);
 }