Hi Elekis,

class SimpleViewerQT : public osgViewer::Viewer, public GraphicsWindowQT

osgViewer::Viewer isn't meant to be used like these, one attaches
GraphicsWindow's to the Camera's that the Viewer maintains.  See the
osgcamera example if you want to know how.


Robert.


On 2/27/07, elekis <[EMAIL PROTECTED]> wrote:
thanks, I found something.
but I raised a other trouble(it's not my month, all that for a teacher :-(
),

with QT, I can't use osgViewer , I have to use osgSimpleViewer . if I use
osgViewer --> core dumped (see code below) . (I duno if it's normal)

but in osgSimpleViewer I haven't  computeIntersection function.

so what I have to do make my own viewer?? or implement compute intersection
in my subclass of SimpleViewer.??

______________________________________________________________________________
(for the impatient, I ve just changing that line)
class SimpleViewerQT : public osgViewer::Viewer, public GraphicsWindowQT
______________________________________________________________________________


 // C++ source file - (C) 2003 Robert Osfield, released under the OSGPL.
// (C) 2005 Mike Weiblen http://mew.cx/ released under the OSGPL.
// Simple example using GLUT to create an OpenGL window and OSG for
rendering.
// Derived from osgGLUTsimple.cpp and osgkeyboardmouse.cpp

#include <osgViewer/Viewer>
#include <osgGA/TrackballManipulator>
#include <osgDB/ReadFile>

#include <QtCore/QTimer>
#include <QtGui/QKeyEvent>
#include <QtGui/QApplication>
#include <QtOpenGL/QGLWidget>

#include <iostream>

class GraphicsWindowQT : public QGLWidget,  virtual
osgViewer::GraphicsWindow
{
public:

    GraphicsWindowQT( QWidget * parent = 0, const char * name = 0, const
QGLWidget * shareWidget = 0, Qt::WFlags f = 0 );
    virtual ~GraphicsWindowQT() {}

protected:

    virtual void resizeGL( int width, int height );
    virtual void keyPressEvent( QKeyEvent* event );
    virtual void keyReleaseEvent( QKeyEvent* event );
    virtual void mousePressEvent( QMouseEvent* event );
    virtual void mouseReleaseEvent( QMouseEvent* event );
    virtual void mouseMoveEvent( QMouseEvent* event );

    QTimer _timer;
};

GraphicsWindowQT::GraphicsWindowQT( QWidget * parent, const
char * /*name*/, const QGLWidget * shareWidget, Qt::WFlags f):
     QGLWidget(parent, shareWidget, f)
{
    connect(&_timer, SIGNAL(timeout()), this, SLOT(updateGL()));
    _timer.start(10);
}

void GraphicsWindowQT::resizeGL( int width, int height )
{
    getEventQueue()->windowResize(0, 0, width, height );
}

void GraphicsWindowQT::keyPressEvent( QKeyEvent* event )
{
    getEventQueue()->keyPress(
(osgGA::GUIEventAdapter::KeySymbol) event->key() );
}

void GraphicsWindowQT::keyReleaseEvent( QKeyEvent* event )
{
    getEventQueue()->keyRelease(
(osgGA::GUIEventAdapter::KeySymbol) event->key() );
}

void GraphicsWindowQT::mousePressEvent( QMouseEvent* event
)
{
    int button = 0;
    switch(event->button())
    {
        case(Qt::LeftButton): button = 1; break;
        case(Qt::MidButton): button = 2; break;
        case(Qt::RightButton): button = 3; break;
        case(Qt::NoButton): button = 0; break;
        default: button = 0; break;
    }
    getEventQueue()->mouseButtonPress(event->x(),
event->y(), button);
}

void GraphicsWindowQT::mouseReleaseEvent( QMouseEvent*
event )
{
    int button = 0;
    switch(event->button())
    {
        case(Qt::LeftButton): button = 1; break;
        case(Qt::MidButton): button = 2; break;
        case(Qt::RightButton): button = 3; break;
        case(Qt::NoButton): button = 0; break;
        default: button = 0; break;
    }
    getEventQueue()->mouseButtonRelease(event->x(),
event->y(), button);
}

void GraphicsWindowQT::mouseMoveEvent( QMouseEvent* event )
{
    getEventQueue()->mouseMotion(event->x(), event->y());
}


class SimpleViewerQT : public osgViewer::Viewer, public GraphicsWindowQT
{
    public:

        SimpleViewerQT( QWidget * parent = 0, const char * name = 0, const
QGLWidget * shareWidget = 0, Qt::WFlags f = 0 ):
            GraphicsWindowQT(parent, name, shareWidget, f) {}

        virtual void initializeGL()
        {
            QGLWidget::initializeGL();
        }

        virtual void paintGL()
         {
            frame();
        }

};


int main( int argc, char **argv )
{
    QApplication a( argc, argv );

    if (argc<2)
    {
        std::cout << argv[0] <<": requires filename argument." << std::endl;
        return 1;
    }

    // load the scene.
    osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFile(argv[1]);
    if (!loadedModel)
    {
        std::cout << argv[0] <<": No data loaded." << std::endl;
        return 1;
    }


    SimpleViewerQT* viewerWindow = new SimpleViewerQT;

    viewerWindow->setSceneData(loadedModel.get());
    viewerWindow->setCameraManipulator(new
osgGA::TrackballManipulator);

    viewerWindow->show();
    a.connect( &a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()) );

    return a.exec();
}

/*EOF*/















On 2/27/07, Robert Osfield < [EMAIL PROTECTED]> wrote:
> HI Elekis,
>
> The difference is simply in the data structure used to store the
> intersection hits.  The osgViewer is based on the new
> IntersectionVisitor rather than the old IntersectVistor.  For the new
> viewer you'll just need to use the LinerIntersector::Intersections
> structure.  Have a look at the interface.  As check the picking code
> in osgpick or osgmanipulator.
>
> Robert.
>
> On 2/27/07, elekis <[EMAIL PROTECTED]> wrote:
> > hi all, always trying to pass to OSGViewer,
> > I try to use computeIntersections (as with osg::Producer)
> >
> > in Producer I made that
> >
> >  osgUtil::IntersectVisitor::HitList hlist;
> >                         if (
> > CGeneral::instance().viewer.computeIntersections(
> > ea.getX(), ea.getY (), hlist))
> >                         {
> >
> > for(osgUtil::IntersectVisitor::HitList::iterator
> > hitr=hlist.begin();hitr!=hlist.end(); ++hitr)
> >                                 {
> >                                         if
> > (hitr->_geode.valid()){
> >
> >
> > with viewer, I tried the same thing, (execpt the ea changing with event)
> >
> > but I have that error.
> >
> > INTERFACE/Interface.cpp:44: error: no matching function for call to
> > 'SimpleViewerQT::computeIntersections(float, float,
> > std::vector<osgUtil::Hit, std::allocator<osgUtil::Hit> >&)'
> >
> > /usr/local/include/osgViewer/View:117: note: candidates
> > are: bool osgViewer::View::computeIntersections(float,
> > float,
> >
std::multiset<osgUtil::LineSegmentIntersector::Intersection,
> >
std::less<osgUtil::LineSegmentIntersector::Intersection>,
> >
std::allocator<osgUtil::LineSegmentIntersector::Intersection>
> > >&, unsigned int)
> >
> > /usr/local/include/osgViewer/View:120: note:
> >  bool osgViewer::View::computeIntersections(float,
float,
> > osg::NodePath&,
> >
std::multiset<osgUtil::LineSegmentIntersector::Intersection,
> >
std::less<osgUtil::LineSegmentIntersector::Intersection>,
> >
std::allocator<osgUtil::LineSegmentIntersector::Intersection>
> > >&, unsigned int)
> >
> >
> > I ve tried google code search, and other search but all example are with
> > osgProducer. (event is the nme is not correct, I use viewer and not
> > simpleViewer.)
> >
> > thanks
> >
> > a+++
> >
> > _______________________________________________
> > osg-users mailing list
> > osg-users@openscenegraph.net
> > http://openscenegraph.net/mailman/listinfo/osg-users
> > http://www.openscenegraph.org/
> >
> _______________________________________________
> osg-users mailing list
> osg-users@openscenegraph.net
> http://openscenegraph.net/mailman/listinfo/osg-users
> http://www.openscenegraph.org/
>


_______________________________________________
osg-users mailing list
osg-users@openscenegraph.net
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

_______________________________________________
osg-users mailing list
osg-users@openscenegraph.net
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

Reply via email to