diff --git a/simgear/canvas/elements/CanvasElement.cxx b/simgear/canvas/elements/CanvasElement.cxx index 7ae32494..2c5c36a3 100644 --- a/simgear/canvas/elements/CanvasElement.cxx +++ b/simgear/canvas/elements/CanvasElement.cxx @@ -640,6 +640,27 @@ namespace canvas _scissor->_coord_reference = rf; } + //---------------------------------------------------------------------------- + void Element::setRotation(unsigned int index, double r) + { + _node->getChild(NAME_TRANSFORM, index, true)->setDoubleValue("rot", r); + } + + //---------------------------------------------------------------------------- + void Element::setTranslation(unsigned int index, double x, double y) + { + SGPropertyNode* tf = _node->getChild(NAME_TRANSFORM, index, true); + tf->getChild("t", 0, true)->setDoubleValue(x); + tf->getChild("t", 1, true)->setDoubleValue(y); + } + + //---------------------------------------------------------------------------- + void Element::setTransformEnabled(unsigned int index, bool enabled) + { + SGPropertyNode* tf = _node->getChild(NAME_TRANSFORM, index, true); + tf->setBoolValue("enabled", enabled); + } + //---------------------------------------------------------------------------- osg::BoundingBox Element::getBoundingBox() const { @@ -701,6 +722,9 @@ namespace canvas continue; SGPropertyNode* tf_node = _node->getChild("tf", i, true); + if (!tf_node->getBoolValue("enabled", true)) { + continue; // skip disabled transforms + } // Build up the matrix representation of the current transform node osg::Matrix tf; diff --git a/simgear/canvas/elements/CanvasElement.hxx b/simgear/canvas/elements/CanvasElement.hxx index 09b6b421..8782362b 100644 --- a/simgear/canvas/elements/CanvasElement.hxx +++ b/simgear/canvas/elements/CanvasElement.hxx @@ -172,6 +172,22 @@ namespace canvas */ void setClipFrame(ReferenceFrame rf); + /** + * + */ + void setRotation(unsigned int index, double r); + + /** + * + */ + void setTranslation(unsigned int index, double x, double y); + + /** + * + * + */ + void setTransformEnabled(unsigned int index, bool enabled); + /** * Get bounding box (may not be as tight as bounding box returned by * #getTightBoundingBox)