root/OpenSceneGraph/trunk/examples/osgstaticviewer/osgstaticviewer.cpp @ 10282

Revision 10282, 7.6 kB (checked in by robert, 6 years ago)

Fixed warnings

Line 
1/* OpenSceneGraph example, osgstaticviewer.
2*
3*  Permission is hereby granted, free of charge, to any person obtaining a copy
4*  of this software and associated documentation files (the "Software"), to deal
5*  in the Software without restriction, including without limitation the rights
6*  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7*  copies of the Software, and to permit persons to whom the Software is
8*  furnished to do so, subject to the following conditions:
9*
10*  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
11*  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
12*  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
13*  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
14*  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
15*  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
16*  THE SOFTWARE.
17*/
18
19#include <osgDB/ReadFile>
20#include <osgUtil/Optimizer>
21#include <osg/CoordinateSystemNode>
22
23#include <osg/Switch>
24#include <osgText/Text>
25
26#include <osgViewer/Viewer>
27#include <osgViewer/ViewerEventHandlers>
28
29#include <osgGA/TrackballManipulator>
30#include <osgGA/FlightManipulator>
31#include <osgGA/DriveManipulator>
32#include <osgGA/KeySwitchMatrixManipulator>
33#include <osgGA/StateSetManipulator>
34#include <osgGA/AnimationPathManipulator>
35#include <osgGA/TerrainManipulator>
36
37#include <iostream>
38
39// include the plugins we need
40USE_OSGPLUGIN(ive)
41USE_OSGPLUGIN(freetype)
42USE_OSGPLUGIN(osg)
43USE_OSGPLUGIN(rgb)
44USE_OSGPLUGIN(OpenFlight)
45
46// include the platform specific GraphicsWindow implementation.
47USE_GRAPHICSWINDOW()
48
49int main(int argc, char** argv)
50{
51    // use an ArgumentParser object to manage the program arguments.
52    osg::ArgumentParser arguments(&argc,argv);
53
54    arguments.getApplicationUsage()->setApplicationName(arguments.getApplicationName());
55    arguments.getApplicationUsage()->setDescription(arguments.getApplicationName()+" is the standard OpenSceneGraph example which loads and visualises 3d models.");
56    arguments.getApplicationUsage()->setCommandLineUsage(arguments.getApplicationName()+" [options] filename ...");
57    arguments.getApplicationUsage()->addCommandLineOption("--image <filename>","Load an image and render it on a quad");
58    arguments.getApplicationUsage()->addCommandLineOption("--dem <filename>","Load an image/DEM and render it on a HeightField");
59    arguments.getApplicationUsage()->addCommandLineOption("-h or --help","Display command line parameters");
60    arguments.getApplicationUsage()->addCommandLineOption("--help-env","Display environmental variables available");
61    arguments.getApplicationUsage()->addCommandLineOption("--help-keys","Display keyboard & mouse bindings available");
62    arguments.getApplicationUsage()->addCommandLineOption("--help-all","Display all command line, env vars and keyboard & mouse bindings.");
63    arguments.getApplicationUsage()->addCommandLineOption("--SingleThreaded","Select SingleThreaded threading model for viewer.");
64    arguments.getApplicationUsage()->addCommandLineOption("--CullDrawThreadPerContext","Select CullDrawThreadPerContext threading model for viewer.");
65    arguments.getApplicationUsage()->addCommandLineOption("--DrawThreadPerContext","Select DrawThreadPerContext threading model for viewer.");
66    arguments.getApplicationUsage()->addCommandLineOption("--CullThreadPerCameraDrawThreadPerContext","Select CullThreadPerCameraDrawThreadPerContext threading model for viewer.");
67
68    // if user request help write it out to cout.
69    bool helpAll = arguments.read("--help-all");
70    unsigned int helpType = ((helpAll || arguments.read("-h") || arguments.read("--help"))? osg::ApplicationUsage::COMMAND_LINE_OPTION : 0 ) |
71                            ((helpAll ||  arguments.read("--help-env"))? osg::ApplicationUsage::ENVIRONMENTAL_VARIABLE : 0 ) |
72                            ((helpAll ||  arguments.read("--help-keys"))? osg::ApplicationUsage::KEYBOARD_MOUSE_BINDING : 0 );
73    if (helpType)
74    {
75        arguments.getApplicationUsage()->write(std::cout, helpType);
76        return 1;
77    }
78
79    // report any errors if they have occurred when parsing the program arguments.
80    if (arguments.errors())
81    {
82        arguments.writeErrorMessages(std::cout);
83        return 1;
84    }
85   
86    if (arguments.argc()<=1)
87    {
88        arguments.getApplicationUsage()->write(std::cout,osg::ApplicationUsage::COMMAND_LINE_OPTION);
89        return 1;
90    }
91
92    osgViewer::Viewer viewer;
93   
94    // set up the camera manipulators.
95    {
96        osg::ref_ptr<osgGA::KeySwitchMatrixManipulator> keyswitchManipulator = new osgGA::KeySwitchMatrixManipulator;
97
98        keyswitchManipulator->addMatrixManipulator( '1', "Trackball", new osgGA::TrackballManipulator() );
99        keyswitchManipulator->addMatrixManipulator( '2', "Flight", new osgGA::FlightManipulator() );
100        keyswitchManipulator->addMatrixManipulator( '3', "Drive", new osgGA::DriveManipulator() );
101        keyswitchManipulator->addMatrixManipulator( '4', "Terrain", new osgGA::TerrainManipulator() );
102
103        std::string pathfile;
104        char keyForAnimationPath = '5';
105        while (arguments.read("-p",pathfile))
106        {
107            osgGA::AnimationPathManipulator* apm = new osgGA::AnimationPathManipulator(pathfile);
108            if (apm || !apm->valid())
109            {
110                unsigned int num = keyswitchManipulator->getNumMatrixManipulators();
111                keyswitchManipulator->addMatrixManipulator( keyForAnimationPath, "Path", apm );
112                keyswitchManipulator->selectMatrixManipulator(num);
113                ++keyForAnimationPath;
114            }
115        }
116
117        viewer.setCameraManipulator( keyswitchManipulator.get() );
118    }
119
120    // add the state manipulator
121    viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) );
122   
123    // add the thread model handler
124    viewer.addEventHandler(new osgViewer::ThreadingHandler);
125
126    // add the window size toggle handler
127    viewer.addEventHandler(new osgViewer::WindowSizeHandler);
128       
129    // add the stats handler
130    viewer.addEventHandler(new osgViewer::StatsHandler);
131
132    // add the help handler
133    viewer.addEventHandler(new osgViewer::HelpHandler(arguments.getApplicationUsage()));
134
135    while (arguments.read("--SingleThreaded")) viewer.setThreadingModel(osgViewer::Viewer::SingleThreaded);
136    while (arguments.read("--CullDrawThreadPerContext")) viewer.setThreadingModel(osgViewer::Viewer::CullDrawThreadPerContext);
137    while (arguments.read("--DrawThreadPerContext")) viewer.setThreadingModel(osgViewer::Viewer::DrawThreadPerContext);
138    while (arguments.read("--CullThreadPerCameraDrawThreadPerContext")) viewer.setThreadingModel(osgViewer::Viewer::CullThreadPerCameraDrawThreadPerContext);
139
140    unsigned int screenNum;
141    while (arguments.read("--screen",screenNum))
142    {
143        viewer.setUpViewOnSingleScreen(screenNum);
144    }
145
146    // load the data
147    osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFiles(arguments);
148    if (!loadedModel)
149    {
150        std::cout << arguments.getApplicationName() <<": No data loaded" << std::endl;
151        return 1;
152    }
153
154    // any option left unread are converted into errors to write out later.
155    arguments.reportRemainingOptionsAsUnrecognized();
156
157    // report any errors if they have occurred when parsing the program arguments.
158    if (arguments.errors())
159    {
160        arguments.writeErrorMessages(std::cout);
161        return 1;
162    }
163
164
165    // optimize the scene graph, remove redundant nodes and state etc.
166    osgUtil::Optimizer optimizer;
167    optimizer.optimize(loadedModel.get());
168
169    viewer.setSceneData( loadedModel.get() );
170
171    return viewer.run();
172}
Note: See TracBrowser for help on using the browser.