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/