void MLMenu::Node::dump(int level) { std::list<std::string>::const_iterator it; for(it = index.begin(); it != index.end(); it++) { const std::string& name = *it; StringToMenuNodeMapT::const_iterator it2 = map.find(name); NodePtr node = it2->second; for(int i=0; i<level*4; ++i) { debug() << " "; } debug() << name << " #" << node->mItemNumber << ", (" << node->index.size() << ")\n"; node->dump(level + 1); } debug() << "\n"; }
int main (int argc, char **argv) { osgInit(argc,argv); // GLUT init glutInit(&argc, argv); glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); int winid = glutCreateWindow("OpenSG"); glutKeyboardFunc(key); glutVisibilityFunc(vis); glutReshapeFunc(reshape); glutDisplayFunc(display); glutMouseFunc(mouse); glutMotionFunc(motion); glutIdleFunc(display); if ( argc > 1 && isdigit(argv[1][0]) ) { nhviewports = atoi( argv[1] ); argv++; argc--; } if ( argc > 1 && isdigit(argv[1][0]) ) { nvviewports = atoi( argv[1] ); argv++; argc--; } else nvviewports = nhviewports; // glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); glEnable( GL_DEPTH_TEST ); glEnable( GL_LIGHTING ); glEnable( GL_LIGHT0 ); // OSG SceneFileHandler::the().print(); // create the graph // beacon for camera and light NodePtr b1n = Node::create(); GroupPtr b1 = Group::create(); beginEditCP(b1n); b1n->setCore( b1 ); endEditCP(b1n); // transformation NodePtr t1n = Node::create(); TransformPtr t1 = Transform::create(); beginEditCP(t1n); t1n->setCore( t1 ); t1n->addChild( b1n ); endEditCP(t1n); cam_trans = t1; // light NodePtr dlight = Node::create(); DirectionalLightPtr dl = DirectionalLight::create(); beginEditCP(dlight); dlight->setCore( dl ); endEditCP(dlight); beginEditCP(dl); dl->setAmbient( .3, .3, .3, 1 ); dl->setDiffuse( 1, 1, 1, 1 ); dl->setDirection(0,0,1); dl->setBeacon( b1n); endEditCP(dl); // root root = Node::create(); GroupPtr gr1 = Group::create(); beginEditCP(root); root->setCore( gr1 ); root->addChild( t1n ); root->addChild( dlight ); endEditCP(root); // Load the file NodePtr file = NullFC; if ( argc > 1 ) file = SceneFileHandler::the().read(argv[1]); if ( file == NullFC ) { std::cerr << "Couldn't load file, ignoring" << std::endl; file = makeTorus( .5, 2, 16, 16 ); file = makeBox( 1,1,1, 1,1,1 ); } file->updateVolume(); Vec3f min,max; file->getVolume().getBounds( min, max ); std::cout << "Volume: from " << min << " to " << max << std::endl; beginEditCP(dlight); dlight->addChild( file ); endEditCP(dlight); std::cerr << "Tree: " << std::endl; root->dump(); // Camera cam = PerspectiveCamera::create(); cam->setBeacon( b1n ); cam->setFov( deg2rad( 90 ) ); cam->setNear( 0.1 ); cam->setFar( 100 ); // Background #if 1 // doesn't work right now SkyBackgroundPtr sbkgnd = SkyBackground::create(); sbkgnd->editMFSkyColor()->push_back(Color4f(1, 0, 0,0.5)); sbkgnd->editMFSkyAngle()->push_back(Pi / 2); sbkgnd->editMFSkyColor()->push_back(Color4f(0, 1, 0,0.5)); sbkgnd->editMFSkyAngle()->push_back(Pi); sbkgnd->editMFSkyColor()->push_back(Color4f(0, 0, 1,0.5)); #else SolidBackgroundPtr sbkgnd = SolidBackground::create(); sbkgnd->setColor( Color3f(.5, .5, 1) ); #endif // Window std::cout << "GLUT winid: " << winid << std::endl; GLUTWindowPtr gwin; GLint glvp[4]; glGetIntegerv( GL_VIEWPORT, glvp ); gwin = GLUTWindow::create(); gwin->setId(winid); gwin->setSize( glvp[2], glvp[3] ); win = gwin; // Viewports & Decorators vp = new ViewportPtr [ nhviewports * nvviewports ]; deco = new TileCameraDecoratorPtr [ nhviewports * nvviewports ]; for ( int i = 0; i < nhviewports; i++ ) { for ( int j = 0; j < nvviewports; j++ ) { int ind = i * nvviewports + j; vp[ind] = Viewport::create(); vp[ind]->setBackground( sbkgnd ); vp[ind]->setRoot( root ); vp[ind]->setSize( 1./nhviewports * i,1./nvviewports * j, 1./nhviewports * (i+1),1./nvviewports * (j+1) ); deco[ind] = TileCameraDecorator::create(); deco[ind]->setDecoratee( cam ); deco[ind]->setSize( 1./nhviewports * i,1./nvviewports * j, 1./nhviewports * (i+1),1./nvviewports * (j+1) ); deco[ind]->setFullSize( 800, 800 ); vp[ind]->setCamera( deco[ind] ); // for debugging: vp[ind]->setCamera( cam ); win->addPort( vp[ind] ); } } win->init(); #if 0 // Test write, to check generic access ofstream outFileStream( "test.osg" ); if( !outFileStream ) { std::cerr << "Can not open output stream to file" << std::endl; return -1; } OSGWriter writer( outFileStream, 4 ); writer.write( win ); #endif // Action ract = DrawAction::create(); ract->setFrustumCulling( false ); // tball Vec3f pos( 0, 0, max[2] + ( max[2] - min[2] ) * 1.5 ); tball.setMode( Trackball::OSGObject ); tball.setStartPosition( pos, true ); tball.setSum( true ); tball.setTranslationMode( Trackball::OSGFree ); // run... glutMainLoop(); return 0; }
// Initialize GLUT & OpenSG and set up the scene int main(int argc, char **argv) { cout << "Testing screen aligned text generation and file-IO." << endl; if(argc == 1) { FFATAL(("Need *.txf or *.ttf font file\n")); return -1; } // OSG init osgInit(argc, argv); // GLUT init int winid = setupGLUT(&argc, argv); // the connection between GLUT and OpenSG GLUTWindowPtr gwin = GLUTWindow::create(); gwin->setId(winid); gwin->init(); PathHandler paths; paths.push_backPath("."); //paths.push_backPath("/home/elmi/wrk/development/texFont"); // create the scene FontStyle *fontStyle = FontStyleFactory::the().create( paths, argv[1], 0.25); cout << fontStyle->getFontName() << endl; // create the scene NodePtr pTorus = makeTorus( 0.02, 0.55, 16, 16); ChunkMaterialPtr mat = ChunkMaterial::create(); MaterialChunkPtr pmc = MaterialChunk::create(); pmc->setDiffuse( Color4f( 1,0,0,0.5 ) ); pmc->setAmbient( Color4f( 0,1,0,0.5 ) ); pmc->setSpecular( Color4f( 0,0,1,0.5 ) ); pmc->setLit( true ); pmc->setShininess( 20 ); beginEditCP(mat); { mat->addChunk( pmc ); } endEditCP(mat); scene = Node::create(); GroupPtr group = Group::create(); beginEditCP( scene ); { scene->setCore( group ); } endEditCP( scene ); SharedFontStylePtr sfs = SharedFontStyle::create(); sfs->setContainedFontStyle( fontStyle ); for( int x=0; x<100; x += 20 ) { for( int y=0; y<100; y += 20 ) { for( int z=0; z<100; z += 20 ) { ScreenAlignedTextPtr scaText = ScreenAlignedText::create(); if( scaText == NullFC ) { exit (2); } SharedFontStyleWrapperPtr pFSWrapper = SharedFontStyleWrapper::create(); pFSWrapper->setFStyleContainer( sfs ); ostringstream cString; cString << '(' << x << ',' << y << ',' << z << ')' << endl; beginEditCP(scaText); { scaText->setPosition( Vec3f ( x, y, z ) ); scaText->setFont( pFSWrapper ); scaText->setVerticalLineDistance( 0.20 ); scaText->setAlignment( 0 ); scaText->editMFText()->push_back( cString.str() ); scaText->setMaterial( mat ); } endEditCP(scaText); NodePtr pTextNode = Node::create(); beginEditCP( pTextNode ); { pTextNode->setCore( scaText ); } beginEditCP( scene ); { scene->addChild( pTextNode ); } endEditCP( scene ); cout << "Erzeugt : " << cString.str() << endl; } } } //NodePtr pCopied = scene; #if 1 { ofstream outFileStream( "/tmp/text.osg" ); if( !outFileStream ) { cerr << "cannot open file" << endl; exit(2); } //FILE *pFile = fopen( "isolinien.osg","w" ); //BINWriter writer( pFile ); OSGWriter writer( outFileStream ); writer.write( scene ); } #endif #if 0 VRMLWriteAction *pWriter = VRMLWriteAction::create(); scene->dump(); pWriter->open("allesscheisse.wrl"); pWriter->write( scene); pWriter->close(); delete pWriter; #endif // create the SimpleSceneManager helper mgr = new SimpleSceneManager; // tell the manager what to manage mgr->setWindow(gwin); mgr->setRoot( scene ); // show the whole scene mgr->showAll(); // GLUT main loop glutMainLoop(); return 0; }
int main( int argc, char **argv ) { Int32 i, retVal; // OSG init osgInit(argc, argv); basetime = getSystemTime(); gThreadManager = ThreadManager::the(); SceneFileHandler::the().print(); // create the graph // beacon for camera and light NodePtr b1n = Node::create(); GroupPtr b1 = Group::create(); beginEditCP(b1n); b1n->setCore( b1 ); endEditCP(b1n); // transformation NodePtr t1n = Node::create(); TransformPtr t1 = Transform::create(); beginEditCP(t1n); t1n->setCore( t1 ); t1n->addChild( b1n ); endEditCP(t1n); cam_trans = t1; // light NodePtr dlight = Node::create(); DirectionalLightPtr dl = DirectionalLight::create(); beginEditCP(dlight); dlight->setCore( dl ); endEditCP(dlight); beginEditCP(dl); dl->setAmbient( .3, .3, .3, 1 ); dl->setDiffuse( 1, 1, 1, 1 ); dl->setDirection(0,0,1); dl->setBeacon( b1n); endEditCP(dl); // root root = Node::create(); GroupPtr gr1 = Group::create(); beginEditCP(root); root->setCore( gr1 ); root->addChild( t1n ); root->addChild( dlight ); endEditCP(root); // Load the file NodePtr file = NullFC; if ( argc > 1 ) file = SceneFileHandler::the().read(argv[1]); if ( file == NullFC ) { std::cerr << "Couldn't load file, ignoring" << std::endl; file = makePlane( 2,2,2,2 ); } file->updateVolume(); Vec3f min,max; file->getVolume().getBounds( min, max ); std::cout << "Volume: from " << min << " to " << max << std::endl; beginEditCP(dlight); dlight->addChild( file ); endEditCP(dlight); std::cerr << "Tree: " << std::endl; root->dump(); // Camera PerspectiveCameraPtr cam = PerspectiveCamera::create(); cam->setBeacon( b1n ); cam->setFov( deg2rad( 60 ) ); cam->setNear( 0.1 ); cam->setFar( 10000 ); // Background GradientBackgroundPtr bkgnd = GradientBackground::create(); bkgnd->addLine( Color3f( 0,0,0 ), 0 ); bkgnd->addLine( Color3f( 0,0,1 ), 0 ); // Action // QT init QApplication::setColorSpec( QApplication::CustomColor ); a = new QApplication( argc, argv ); if ( !QGLFormat::hasOpenGL() ) { qWarning( "This system has no OpenGL support. Exiting." ); return -1; } Vec3f pos( 0, 0, max[2] + ( max[2] - min[2] ) * 1.5 ); tball.setMode( Trackball::OSGObject ); tball.setStartPosition( pos, true ); tball.setSum( true ); tball.setTranslationMode( Trackball::OSGFree ); // Create Windows QGLFormat::setDefaultFormat(QGLFormat(QGL::DirectRendering | QGL::DoubleBuffer | QGL::DepthBuffer | QGL::Rgba )); for ( i = 0; i < NUM_THREADS; i++ ) { glWidget[i] = new MyOSGQGLWidget(); // Viewport vp = Viewport::create(); vp->setCamera( cam ); vp->setBackground( bkgnd ); vp->setRoot( root ); vp->setSize( 0,0, 1,1 ); glWidget[i]->_osgWin = QTWindow::create(); glWidget[i]->_osgWin->setGlWidget( glWidget[i] ); glWidget[i]->_osgWin->addPort( vp ); glWidget[i]->_osgWin->init(); if ( i == 0 ) { a->setMainWidget( glWidget[0] ); } glWidget[i]->show(); } for (i = 0; i < NUM_THREADS; i++) { drawThread[i] = dynamic_cast<Thread *>(gThreadManager->getThread(NULL)); if ( drawThread[i] != NULL ) { drawThreadID[i] = i; drawThread[i]->runFunction( drawThreadProc, 0, (void *) &(drawThreadID[i]) ); } } drawBarrier = gThreadManager->getBarrier( "drawBarrier" ); // glWidget[0]->paintGL(); retVal = a->exec(); // execute QT main loop // stop th ethreads for ( i=0; i<NUM_THREADS; i++ ) glWidget[i]->_stop = true; drawBarrier->enter( NUM_THREADS + 1 ); for ( i=0; i<NUM_THREADS; i++ ) Thread::join( drawThread[i] ); return (retVal); }