Show
Ignore:
Timestamp:
03/18/10 18:10:48 (5 years ago)
Author:
robert
Message:

Added StateSet? event handler to osgfont and osgtext to aid with debugging

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/examples/osgfont/osgfont.cpp

    r9705 r11250  
    66#include <osgViewer/Viewer> 
    77#include <osgViewer/ViewerEventHandlers> 
     8#include <osgGA/StateSetManipulator> 
    89 
    910void textInfo(osgText::Text* text) 
    1011{ 
    11         const osgText::Text::TextureGlyphQuadMap& tgqm = text->getTextureGlyphQuadMap(); 
     12    const osgText::Text::TextureGlyphQuadMap& tgqm = text->getTextureGlyphQuadMap(); 
    1213 
    13         const osgText::Text::TextureGlyphQuadMap::const_iterator tgqmi = tgqm.begin(); 
     14    const osgText::Text::TextureGlyphQuadMap::const_iterator tgqmi = tgqm.begin(); 
    1415 
    15         const osgText::Text::GlyphQuads& gq = tgqmi->second; 
     16    const osgText::Text::GlyphQuads& gq = tgqmi->second; 
    1617 
    17         osgText::String& s = text->getText(); 
     18    osgText::String& s = text->getText(); 
    1819 
    19         for(unsigned int i = 0; i < s.size(); i++) 
    20         { 
    21                 osg::Vec2 ul = gq.getCoords()[0 + (i * 4)]; // upperLeft 
    22                 osg::Vec2 ll = gq.getCoords()[1 + (i * 4)]; // lowerLeft 
    23                 osg::Vec2 lr = gq.getCoords()[2 + (i * 4)]; // lowerRight 
    24                 osg::Vec2 ur = gq.getCoords()[3 + (i * 4)]; // upperRight 
     20    for(unsigned int i = 0; i < s.size(); i++) 
     21    { 
     22        osg::Vec2 ul = gq.getCoords()[0 + (i * 4)]; // upperLeft 
     23        osg::Vec2 ll = gq.getCoords()[1 + (i * 4)]; // lowerLeft 
     24        osg::Vec2 lr = gq.getCoords()[2 + (i * 4)]; // lowerRight 
     25        osg::Vec2 ur = gq.getCoords()[3 + (i * 4)]; // upperRight 
    2526 
    26                 /* 
    27                 osg::Vec3 ul = gq.getTransformedCoords(0)[0 + (i * 4)]; 
    28                 osg::Vec3 ll = gq.getTransformedCoords(0)[1 + (i * 4)]; 
    29                 osg::Vec3 lr = gq.getTransformedCoords(0)[2 + (i * 4)]; 
    30                 osg::Vec3 ur = gq.getTransformedCoords(0)[3 + (i * 4)]; 
    31                 */ 
     27        /* 
     28        osg::Vec3 ul = gq.getTransformedCoords(0)[0 + (i * 4)]; 
     29        osg::Vec3 ll = gq.getTransformedCoords(0)[1 + (i * 4)]; 
     30        osg::Vec3 lr = gq.getTransformedCoords(0)[2 + (i * 4)]; 
     31        osg::Vec3 ur = gq.getTransformedCoords(0)[3 + (i * 4)]; 
     32        */ 
    3233 
    33                 osg::notify(osg::NOTICE) 
    34                         << "'" << static_cast<char>(s[i]) << "':" 
    35                         << " width(" << lr.x() - ll.x() << ")" 
    36                         << " height(" << ul.y() - ll.y() << ")" << std::endl << "\t" 
    37                         << "ul(" << ul << "), " 
    38                         << "ll(" << ll << "), " 
    39                         << "lr(" << lr << "), " 
    40                         << "ur(" << ur << ")" 
    41                         << std::endl 
    42                 ; 
    43         } 
     34        osg::notify(osg::NOTICE) 
     35            << "'" << static_cast<char>(s[i]) << "':" 
     36            << " width(" << lr.x() - ll.x() << ")" 
     37            << " height(" << ul.y() - ll.y() << ")" << std::endl << "\t" 
     38            << "ul(" << ul << "), " 
     39            << "ll(" << ll << "), " 
     40            << "lr(" << lr << "), " 
     41            << "ur(" << ur << ")" 
     42            << std::endl 
     43        ; 
     44    } 
    4445} 
    4546 
    4647osg::Camera* createOrthoCamera(double width, double height) 
    4748{ 
    48         osg::Camera* camera = new osg::Camera(); 
     49    osg::Camera* camera = new osg::Camera(); 
    4950 
    50         camera->getOrCreateStateSet()->setMode( 
    51                 GL_LIGHTING, 
    52                 osg::StateAttribute::PROTECTED | osg::StateAttribute::OFF 
    53         ); 
     51    camera->getOrCreateStateSet()->setMode( 
     52        GL_LIGHTING, 
     53        osg::StateAttribute::PROTECTED | osg::StateAttribute::OFF 
     54    ); 
    5455 
    55         osg::Matrix m = osg::Matrix::ortho2D(0.0f, width, 0.0f, height); 
     56    osg::Matrix m = osg::Matrix::ortho2D(0.0f, width, 0.0f, height); 
    5657 
    57         camera->setProjectionMatrix(m); 
    58         camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF); 
    59         camera->setViewMatrix(osg::Matrix::identity()); 
    60         camera->setClearMask(GL_DEPTH_BUFFER_BIT); 
    61         camera->setRenderOrder(osg::Camera::POST_RENDER); 
     58    camera->setProjectionMatrix(m); 
     59    camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF); 
     60    camera->setViewMatrix(osg::Matrix::identity()); 
     61    camera->setClearMask(GL_DEPTH_BUFFER_BIT); 
     62    camera->setRenderOrder(osg::Camera::POST_RENDER); 
    6263 
    63         return camera; 
     64    return camera; 
    6465} 
    6566 
    6667osgText::Text* createLabel(const std::string& l, const char* f, unsigned int size) 
    6768{ 
    68         static osg::Vec3 pos(10.0f, 10.0f, 0.0f); 
     69    static osg::Vec3 pos(10.0f, 10.0f, 0.0f); 
    6970 
    70         osgText::Text* label = new osgText::Text(); 
    71         osgText::Font* font  = osgText::readFontFile(f); 
     71    osgText::Text* label = new osgText::Text(); 
     72    osgText::Font* font  = osgText::readFontFile(f); 
    7273 
    73         label->setFont(font); 
    74         label->setCharacterSize(size); 
    75         label->setFontResolution(size, size); 
    76         label->setColor(osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f)); 
    77         label->setPosition(pos); 
    78         label->setAlignment(osgText::Text::LEFT_BOTTOM); 
     74    label->setFont(font); 
     75    label->setCharacterSize(size); 
     76    label->setFontResolution(size, size); 
     77    label->setColor(osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f)); 
     78    label->setPosition(pos); 
     79    label->setAlignment(osgText::Text::LEFT_BOTTOM); 
    7980 
    80         // It seems to be important we do this last to get best results? 
    81         label->setText(l); 
     81    // It seems to be important we do this last to get best results? 
     82    label->setText(l); 
    8283 
    83         textInfo(label); 
     84    textInfo(label); 
    8485 
    85         pos.y() += size + 10.0f; 
     86    pos.y() += size + 10.0f; 
    8687 
    87         return label; 
     88    return label; 
    8889} 
    8990 
     
    9293int main(int argc, char** argv) 
    9394{ 
    94         osgViewer::Viewer   viewer; 
    95         osg::ArgumentParser args(&argc, argv); 
     95    osgViewer::Viewer   viewer; 
     96    osg::ArgumentParser args(&argc, argv); 
    9697 
    97         // Make sure we have the minimum args... 
    98         if(argc <= 2) 
    99         { 
    100                 osg::notify(osg::FATAL) << "usage: " << args[0] << " fontfile size1 [size2 ...]" << std::endl; 
     98    // Make sure we have the minimum args... 
     99    if(argc <= 2) 
     100    { 
     101        osg::notify(osg::FATAL) << "usage: " << args[0] << " fontfile size1 [size2 ...]" << std::endl; 
    101102 
    102                 return 1; 
    103         } 
     103        return 1; 
     104    } 
    104105 
    105         viewer.addEventHandler(new osgViewer::StatsHandler()); 
    106         viewer.addEventHandler(new osgViewer::WindowSizeHandler()); 
    107106 
    108         osg::Group*  group  = new osg::Group(); 
    109         osg::Camera* camera = createOrthoCamera(1280.0f, 1024.0f); 
     107    viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) ); 
     108    viewer.addEventHandler(new osgViewer::StatsHandler()); 
     109    viewer.addEventHandler(new osgViewer::WindowSizeHandler()); 
    110110 
    111         // Create the list of desired sizes. 
    112         Sizes sizes; 
     111    osg::Group*  group  = new osg::Group(); 
     112    osg::Camera* camera = createOrthoCamera(1280.0f, 1024.0f); 
    113113 
    114         for(int i = 2; i < argc; i++) 
    115         { 
    116                 if(!args.isNumber(i)) continue; 
     114    // Create the list of desired sizes. 
     115    Sizes sizes; 
    117116 
    118                 sizes.push_back(std::atoi(args[i])); 
    119         } 
     117    for(int i = 2; i < argc; i++) 
     118    { 
     119        if(!args.isNumber(i)) continue; 
    120120 
    121         osg::Geode* geode = new osg::Geode(); 
     121        sizes.push_back(std::atoi(args[i])); 
     122    } 
    122123 
    123         // Add all of our osgText drawables. 
    124         for(Sizes::const_iterator i = sizes.begin(); i != sizes.end(); i++) 
    125         { 
    126                 std::stringstream ss; 
     124    osg::Geode* geode = new osg::Geode(); 
    127125 
    128                 ss << *i << " 1234567890 abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
     126    // Add all of our osgText drawables. 
     127    for(Sizes::const_iterator i = sizes.begin(); i != sizes.end(); i++) 
     128    { 
     129        std::stringstream ss; 
    129130 
    130                 geode->addDrawable(createLabel(ss.str(), args[1], *i)); 
    131         } 
     131        ss << *i << " 1234567890 abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    132132 
    133         camera->addChild(geode); 
     133        geode->addDrawable(createLabel(ss.str(), args[1], *i)); 
     134    } 
    134135 
    135         group->addChild(camera); 
     136    camera->addChild(geode); 
    136137 
    137         viewer.setSceneData(group); 
     138    group->addChild(camera); 
    138139 
    139         return viewer.run(); 
     140    viewer.setSceneData(group); 
     141 
     142    return viewer.run(); 
    140143} 
    141144