Hi Brian,

In addition to Robert's comments, since you are setting the callback on g_pCyl, inside operator()( node, ....) node refers to the current node being traversed. In this case g_pCyl (of course when I use this, I do some testing to make sure I'm acting on the proper type eg. if (node->asGroup()){...} etc ...). Using this style properly encapsulates the callback.

Mihai

Robert Osfield wrote:
Hi Brian,

ShapeDrawable by defaults uses display lists so you'll need to call dirtyDisplayList() on it to force it to update.

Robert.

On 5/2/07, * Brian Sparks* <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:

    Hi All,

    I know this is a total newby question, sorry.  I want
    to change the length/width of a cylinder.  I noticed
    there are setHeight / setRadius functions, but they do
    not work as I thought.  The following code is very
    simple: it sets up a scene with one cylinder.  It sets
    a global pointer to the osg::Cylinder object, and then
    during an update callback, calls setHeight().  But the
    cylinder does not change on the screen.  If I do the
    appropriate rotation on the appropriate
    MatrixTransform object, it rotates.

    What am I doing wrong?

    Thanks in advance!
    -- Brian

    I hope this code comes out OK to the list:
    -----------------------------------------------

    float r = 0.01;
    float h = 1.0;
    MatrixTransform * g_pMtxXfrm = NULL;
    Cylinder * g_pCyl = NULL;

    class myMtxXfrmNodeCallback : public osg::NodeCallback

    {
    public:
       virtual void operator()(osg::Node* node,
    osg::NodeVisitor* nv)
       {
               g_pCyl->setHeight(h);
               g_pCyl->setRadius(h);
               h += 0.1;
               g_pMtxXfrm->postMult(osg::Matrixf::rotate(r,
    Y_AXIS));
          traverse(node, nv);
       }
    };

    class myCylNodeCallback : public osg::NodeCallback
    {
    public:
       virtual void operator()(osg::Node* node,
    osg::NodeVisitor* nv)
       {
               g_pCyl->setHeight(h);
               g_pCyl->setRadius(h);
               h += 0.1;
          traverse(node, nv);
       }
    };

    int main( int argc, char **argv )
    {
       osg::Group* root = new osg::Group();
       osgProducer::Viewer viewer;

            ref_ptr<TessellationHints> hints = new
    TessellationHints;
            hints->setDetailRatio(2.0f);
            ref_ptr<ShapeDrawable> shape;
            ref_ptr<Geode> geode = new Geode;
            ref_ptr<MatrixTransform> transform = g_pMtxXfrm = new
    MatrixTransform;

            transform->setUpdateCallback( new
    myMtxXfrmNodeCallback );

            transform->addChild(geode.get());
            root->addChild(transform.get());
            shape = new ShapeDrawable(g_pCyl = new
    Cylinder(Vec3(0.0f, 0.0f, 3.0f), 5., 2.),
    hints.get());
    //      g_pCyl->setUpdateCallback( new myCylNodeCallback );
            g_pCyl->setDataVariance(Object::DYNAMIC);
            shape->setColor(Vec4(1.0f , 0.3f, 0.3f, 1.0f));
            geode->addDrawable(shape.get());

       // add a viewport to the viewer and attach the
    scene graph.
       viewer.setSceneData( root );


    viewer.setUpViewer(osgProducer::Viewer::STANDARD_SETTINGS);
       viewer.setSceneData( root );
       viewer.realize();

       while( !viewer.done() )
       {
          // wait for all cull and draw threads to
    complete.
          viewer.sync();

          // update the scene by traversing it with the
    the update visitor which will
          // call all node update callbacks and
    animations.
          viewer.update();

          // fire off the cull and draw traversals of the
    scene.
          viewer.frame();

       }

       // wait for all cull and draw threads to complete
    before exit.
       viewer.sync();

       return 0;
    }


    __________________________________________________
    Do You Yahoo!?
    Tired of spam?  Yahoo! Mail has the best spam protection around
    http://mail.yahoo.com
    _______________________________________________
    osg-users mailing list
    [email protected] <mailto:[email protected]>
    http://openscenegraph.net/mailman/listinfo/osg-users
    http://www.openscenegraph.org/


------------------------------------------------------------------------

_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

Reply via email to