Changeset 12290

Show
Ignore:
Timestamp:
04/19/11 11:54:14 (4 years ago)
Author:
robert
Message:

Improved the handling of unitialized bounding box

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/src/osgText/TextBase.cpp

    r12241 r12290  
    277277        for(unsigned int i=0;i<_autoTransformCache.size();++i) 
    278278        { 
    279             if (_autoTransformCache[i]._traversalNumber<0 && (_characterSizeMode!=OBJECT_COORDS || _autoRotateToScreen)) 
    280             { 
    281                 // _autoTransformCache is not valid so don't take it into accoumt when compute bounding volume. 
    282 #if 1 
    283                 // so fallback to estimating the bounding box size by assuming a scale of 1 
    284                 // but might cause problems due to small feature culling... 
     279            if (_autoTransformCache[i]._traversalNumber>=0) 
     280            { 
     281                osg::Matrix& matrix = _autoTransformCache[i]._matrix; 
     282                bbox.expandBy(osg::Vec3(_textBB.xMin(),_textBB.yMin(),_textBB.zMin())*matrix); 
     283                bbox.expandBy(osg::Vec3(_textBB.xMax(),_textBB.yMax(),_textBB.zMax())*matrix); 
     284            } 
     285        } 
     286 
     287 
     288        if (!bbox.valid()) 
     289        { 
     290            // provide a fallback in cases where no bounding box has been been setup so far 
     291            if (_characterSizeMode!=OBJECT_COORDS || _autoRotateToScreen) 
     292            { 
     293                // default to a zero size. 
     294                bbox.set(_position, _position); 
     295            } 
     296            else 
     297            { 
    285298                osg::Matrix matrix; 
    286299                matrix.makeTranslate(_position); 
    287300                bbox.expandBy(osg::Vec3(_textBB.xMin(),_textBB.yMin(),_textBB.zMin())*matrix); 
    288301                bbox.expandBy(osg::Vec3(_textBB.xMax(),_textBB.yMax(),_textBB.zMax())*matrix); 
    289 #endif 
    290             } 
    291             else 
    292             {             
    293                 osg::Matrix& matrix = _autoTransformCache[i]._matrix; 
    294                 bbox.expandBy(osg::Vec3(_textBB.xMin(),_textBB.yMin(),_textBB.zMin())*matrix); 
    295                 bbox.expandBy(osg::Vec3(_textBB.xMax(),_textBB.yMax(),_textBB.zMax())*matrix); 
    296302            } 
    297303        } 
    298304    } 
    299      
     305 
    300306    return bbox; 
    301307}