As luck would have it, I found the bug right after sending this
email. It's not in the OSG at all. A call to std::string::substr was
going awry and sending OSG god knows what.
Thanks,
Alan.
On 12 Sep 2007, at 17:17, Alan Purvis wrote:
Hi,
I need to compute the bounds of an osgText::Text object in some
code of mine, with the caveat that I need these bounds before I
attach it to the scenegraph.
_geode = new osg::Geode();
_text = new osgText::Text();
_text->setPosition(POS);
_text->setLayout(osgText::Text::LEFT_TO_RIGHT);
_text->setAlignment(ALIGN);
_text->setText(STR);
_text->setColor(osg::Vec4(1, 1, 1, 1));
addChild(_geode.get());
_geode->addDrawable(_text.get());
----------------------------
_text->dirtyBound(); // this has no effect
osg::BoundingBox bounds = _text->computeBound(); // getBound
returns the same results!
return bounds;
----------------------------
osg::BoundingBox textbounds = text->bounds();
const float bottom = textbounds.yMin();
const float top = textbounds.yMax();
const float left = textbounds.xMin();
const float right = textbounds.xMax();
const float buttonsize = 75.0;
const float textoffset[2] = {-5.0, -55.0};
std::cout << "[" << left << ", " << bottom << "] -> [" << right
<< ", " << top << "]\n";
Running this code however does not return the same bounds every
time...
[Session started at 2007-09-12 16:27:25 +0100.]
[500, 1.50324e+11] -> [500, 1.50324e+11]
[Session started at 2007-09-12 16:29:54 +0100.]
[500, 475] -> [820, 557]
[Session started at 2007-09-12 16:30:28 +0100.]
[500, 475] -> [820, 557]
[Session started at 2007-09-12 16:31:25 +0100.]
[inf, 3.40282e+38] -> [-inf, -3.40282e+38]
[Session started at 2007-09-12 16:32:14 +0100.]
[500, 475] -> [820, 557]
[Session started at 2007-09-12 16:33:08 +0100.]
[3.40282e+38, 3.40282e+38] -> [-3.40282e+38, -3.40282e+38]
[Session started at 2007-09-12 16:33:59 +0100.]
[500, 475] -> [820, 557]
[Session started at 2007-09-12 16:34:26 +0100.]
[3.40282e+38, 3.40282e+38] -> [-3.40282e+38, -3.40282e+38]
[Session started at 2007-09-12 16:35:02 +0100.]
[500, 475] -> [820, 557]
[Session started at 2007-09-12 16:38:12 +0100.]
[3.40282e+38, 3.40282e+38] -> [-3.40282e+38, -3.40282e+38]
3.40282e+38 is the value of FLT_MAX unless I'm mistaken, these
appear to be the values of a freshly initialised bounding box (BB
Ctor sets these values by default). Does the fact I'm computing
these bounds before I'm attaching the node to the SG have any
importance here? The "osghud" example program doesn't appear to
attach its text objects to any kind of viewer before it extracts
the bounds, and it appears to get correct values.
Is there some function I need to manually call to force the text
object to construct its internals before I grab the bounds? Is the
creation of the text objects internal data happening in another
thread or somehow asynchronously with my calls to getBound()/
computeBound()?
I'm using osg 2.0, the standard release, if it helps to know.
Thanks a lot,
Alan
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-
openscenegraph.org
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org