Hi Elekis,

osgViewer::SimpleViewer does not have the computeIntersection method,
so far I've tried to keep the API simple.  We potentially can add one
along the lines of the one now added to osgViewer::View/Viewer.

osgViewer::Viewer does have a computeIntersections method albiet with
slightly different calling parameters.  The osgpick example in SVN
shows this off, so please use it as a refernce not the website which
is based on OSG-1.2 and osgProducer.

Robert.


On 2/27/07, elekis <[EMAIL PROTECTED]> wrote:
hi

sorry but,
...
I m totally lost,

What I trying to do is is using QT with OSG.

like I said before, I try to get the geode that I ve just clicked (x, y).

like you said, I m now using Intersections. like that I suppose

 osgUtil::LineSegmentIntersector::Intersections inter;

if(CGeneral::instance().viewer->computeIntersections((float)event->x(),
(float)event->y(), inter))
                {

for(osgUtil::LineSegmentIntersector::Intersections::iterator
hitr= inter.begin();hitr!=inter.end(); ++hitr)
                        {

but I have an error

Interface.cpp:66: error: 'class SimpleViewerQT' has no member named
'computeIntersections'
SimpleViewerQT are like that declared like that

class SimpleViewerQT : public osgViewer::SimpleViewer, public
GraphicsWindowQT


I looked
http://www.openscenegraph.net/documentation/OpenSceneGraph/examples/osgpick/osgpick.cpp
and on osgCamera

but he use osgProducer (exacly like that I used too)

is it possible do get intersections with osgSimpleViewer??

there certainly something wrong with me but I don't know what


thanks for all



On 2/27/07, Robert Osfield < [EMAIL PROTECTED] > wrote:
> 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
> > > > [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/
> >
> _______________________________________________
> 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/

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

Reply via email to