#include <simgear/compiler.h>
#include <simgear/scene/util/SGSceneUserData.hxx>
-
-#include "placementtrans.hxx"
+#include <simgear/scene/util/SGUpdateVisitor.hxx>
#include "placement.hxx"
// The orientation, composed from the horizontal local orientation and the
// orientation wrt the horizontal local frame
SGQuatd orient = SGQuatd::fromLonLat(_position);
- orient *= SGQuatd::fromAngleAxisDeg(180, SGVec3d(0, 1, 0));
- orient *= SGQuatd::fromYawPitchRollDeg(-_heading_deg, _pitch_deg, -_roll_deg);
- SGMatrixd rotation(inverse(orient));
- _transform->setTransform(position, rotation);
+ orient *= SGQuatd::fromYawPitchRollDeg(_heading_deg, _pitch_deg, _roll_deg);
+ // Convert to the scenegraph orientation where we just rotate around
+ // the y axis 180 degrees.
+ orient *= SGQuatd::fromRealImag(0, SGVec3d(0, 1, 0));
+
+ _transform->setTransform(position, orient);
}
bool
orientation.getEulerDeg(_heading_deg, _pitch_deg, _roll_deg);
}
+void
+SGModelPlacement::setReferenceTime(const double& referenceTime)
+{
+ SGSceneUserData* userData;
+ userData = SGSceneUserData::getOrCreateSceneUserData(_transform);
+ SGSceneUserData::Velocity* vel = userData->getOrCreateVelocity();
+ vel->referenceTime = referenceTime;
+}
+
void
SGModelPlacement::setBodyLinearVelocity(const SGVec3d& linear)
{
SGSceneUserData* userData;
userData = SGSceneUserData::getOrCreateSceneUserData(_transform);
SGSceneUserData::Velocity* vel = userData->getOrCreateVelocity();
- SGQuatd orientation = SGQuatd::fromAngleAxisDeg(180, SGVec3d(0, 1, 0));
- vel->linear = orientation.backTransform(linear);
+ vel->linear = SGVec3d(-linear[0], linear[1], -linear[2]);
}
void
SGSceneUserData* userData;
userData = SGSceneUserData::getOrCreateSceneUserData(_transform);
SGSceneUserData::Velocity* vel = userData->getOrCreateVelocity();
- SGQuatd orientation = SGQuatd::fromAngleAxisDeg(180, SGVec3d(0, 1, 0));
- vel->angular = orientation.backTransform(angular);
+ vel->angular = SGVec3d(-angular[0], angular[1], -angular[2]);
}
// end of model.cxx