From 0c3dc88652000a5dab31849470bdaeeb86656218 Mon Sep 17 00:00:00 2001 From: frohlich Date: Wed, 3 Jun 2009 19:31:59 +0000 Subject: [PATCH] Add some camera manipulators to the viewer. Set up more of the flightgear internal environment. Modified Files: utils/fgviewer/fgviewer.cxx --- utils/fgviewer/fgviewer.cxx | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/utils/fgviewer/fgviewer.cxx b/utils/fgviewer/fgviewer.cxx index 43c630037..6851dbd5f 100644 --- a/utils/fgviewer/fgviewer.cxx +++ b/utils/fgviewer/fgviewer.cxx @@ -5,6 +5,11 @@ #include #include #include +#include +#include +#include +#include +#include #include #include @@ -48,6 +53,21 @@ main(int argc, char** argv) // ... for some reason, get rid of that FIXME! viewer.setThreadingModel(osgViewer::Viewer::SingleThreaded); + // set up the camera manipulators. + osgGA::KeySwitchMatrixManipulator* keyswitchManipulator; + keyswitchManipulator = new osgGA::KeySwitchMatrixManipulator; + + osgGA::MatrixManipulator* mm = new osgGA::TrackballManipulator; + keyswitchManipulator->addMatrixManipulator('1', "Trackball", mm); + mm = new osgGA::FlightManipulator; + keyswitchManipulator->addMatrixManipulator('2', "Flight", mm); + mm = new osgGA::DriveManipulator; + keyswitchManipulator->addMatrixManipulator('3', "Drive", mm); + mm = new osgGA::TerrainManipulator; + keyswitchManipulator->addMatrixManipulator('4', "Terrain", mm); + + viewer.setCameraManipulator(keyswitchManipulator); + // Usefull stats viewer.addEventHandler(new osgViewer::HelpHandler); viewer.addEventHandler(new osgViewer::StatsHandler); @@ -63,6 +83,9 @@ main(int argc, char** argv) else fg_root = "."; + osgDB::FilePathList filePathList; + filePathList.push_back(fg_root); + const char *fg_scenery_env = std::getenv("FG_SCENERY"); string_list path_list; if (fg_scenery_env) { @@ -72,7 +95,6 @@ main(int argc, char** argv) path.append("Scenery"); path_list.push_back(path.str()); } - osgDB::FilePathList filePathList; for (unsigned i = 0; i < path_list.size(); ++i) { SGPath pt(path_list[i]), po(path_list[i]); pt.append("Terrain"); @@ -93,6 +115,9 @@ main(int argc, char** argv) std::cerr << "Problems loading FlightGear materials.\n" << "Probably FG_ROOT is not properly set." << std::endl; } + + // The file path list must be set in the registry. + osgDB::Registry::instance()->getDataFilePathList() = filePathList; SGReaderWriterBTGOptions* btgOptions = new SGReaderWriterBTGOptions; btgOptions->getDatabasePathList() = filePathList;