diff --git a/Make/dependencies b/Make/dependencies index 47051b6ce..63b0a9de4 100644 --- a/Make/dependencies +++ b/Make/dependencies @@ -13,6 +13,8 @@ COMPILE_EXAMPLES ?= no # follows are dependenices on the various plugins. COLLADA_INSTALLED ?= no +COLLADA_DAE_HOME ?= /usr/local +COLLADA_DEBUG_LIBS ?= yes GDAL_INSTALLED ?= no JASPER_INSTALLED ?= no @@ -23,6 +25,9 @@ XINE_INSTALLED ?= no QT3_INSTALLED ?= no +QT4_INSTALLED ?= no +QT4_ROOT ?= /usr/local/ + SDL_INSTALLED ?= no ifeq ($(OS),Darwin) diff --git a/Make/makedirdefs b/Make/makedirdefs index 8c84c0cb3..04fafd18a 100644 --- a/Make/makedirdefs +++ b/Make/makedirdefs @@ -291,6 +291,10 @@ ifeq ($(QT3_INSTALLED),yes) EXAMPLE_DIRS += osgsimpleviewerQT3 endif +ifeq ($(QT4_INSTALLED),yes) + EXAMPLE_DIRS += osgsimpleviewerQT4 +endif + ifeq ($(SDL_INSTALLED),yes) EXAMPLE_DIRS += osgsimpleviewerSDL endif diff --git a/examples/osgsimpleviewerQT4/GNUmakefile b/examples/osgsimpleviewerQT4/GNUmakefile new file mode 100644 index 000000000..c48dcd7ca --- /dev/null +++ b/examples/osgsimpleviewerQT4/GNUmakefile @@ -0,0 +1,18 @@ +TOPDIR = ../.. +include $(TOPDIR)/Make/makedefs + +CXXFILES =\ + osgsimpleviewerQT4.cpp\ + +LIBS += -losgGA -losgDB -losgUtil -losg -lQtOpenGL -lQtGui -lQtCore $(GL_LIBS) $(OTHER_LIBS) + +INSTFILES = \ + $(CXXFILES)\ + GNUmakefile.inst=GNUmakefile + +EXEC = osgsimpleviewerQT4 + +INC += -I$(QT4_ROOT)/include +LDFLAGS += -L$(QT4_ROOT)/lib + +include $(TOPDIR)/Make/makerules diff --git a/examples/osgsimpleviewerQT4/GNUmakefile.inst b/examples/osgsimpleviewerQT4/GNUmakefile.inst new file mode 100644 index 000000000..f0377de38 --- /dev/null +++ b/examples/osgsimpleviewerQT4/GNUmakefile.inst @@ -0,0 +1,14 @@ +TOPDIR = ../.. +include $(TOPDIR)/Make/makedefs + +CXXFILES =\ + osgsimpleviewerQT4.cpp\ + +LIBS += -losgDB -losgUtil -losg -lqt-mt $(GL_LIBS) $(X_LIBS) $(OTHER_LIBS) + +EXEC = osgsimpleviewerQT4 + +INC += -I$(QT4_ROOT)/include +LDFLAGS += -L$(QT4_ROOT)/lib + +include $(TOPDIR)/Make/makerules diff --git a/examples/osgsimpleviewerQT4/osgsimpleviewerQT4.cpp b/examples/osgsimpleviewerQT4/osgsimpleviewerQT4.cpp new file mode 100644 index 000000000..d6b973cc7 --- /dev/null +++ b/examples/osgsimpleviewerQT4/osgsimpleviewerQT4.cpp @@ -0,0 +1,134 @@ +// 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 +#include +#include + +#include +#include +#include +#include + +#include + +class OSGWidget : public QGLWidget, public osgGA::SimpleViewer +{ +public: + + OSGWidget( QWidget * parent = 0, const char * name = 0, const QGLWidget * shareWidget = 0, Qt::WFlags f = 0 ); + virtual ~OSGWidget() {} + +protected: + + virtual void initializeGL(); + virtual void paintGL(); + + 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; +}; + +OSGWidget::OSGWidget( 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 OSGWidget::initializeGL() +{ + QGLWidget::initializeGL(); +} + +void OSGWidget::paintGL() +{ + frame(); +} + +void OSGWidget::resizeGL( int width, int height ) +{ + getEventQueue()->windowResize(0, 0, width, height ); +} + +void OSGWidget::keyPressEvent( QKeyEvent* event ) +{ + getEventQueue()->keyPress( (osgGA::GUIEventAdapter::KeySymbol) event->key() ); +} + +void OSGWidget::keyReleaseEvent( QKeyEvent* event ) +{ + getEventQueue()->keyRelease( (osgGA::GUIEventAdapter::KeySymbol) event->key() ); +} + +void OSGWidget::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 OSGWidget::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 OSGWidget::mouseMoveEvent( QMouseEvent* event ) +{ + getEventQueue()->mouseMotion(event->x(), event->y()); +} + +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 loadedModel = osgDB::readNodeFile(argv[1]); + if (!loadedModel) + { + std::cout << argv[0] <<": No data loaded." << std::endl; + return 1; + } + + + OSGWidget* viewerWindow = new OSGWidget; + + viewerWindow->setSceneData(loadedModel.get()); + viewerWindow->setCameraManipulator(new osgGA::TrackballManipulator); + + viewerWindow->show(); + a.connect( &a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()) ); + + return a.exec(); +} + +/*EOF*/