/*************************************************************************** * Copyright (C) 2005 by the G System Team * * http://www.g-system.at * * * * Permission is hereby granted, free of charge, to any person obtaining * * a copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, sublicense, and/or sell copies of the Software, and to * * permit persons to whom the Software is furnished to do so, subject to * * the following conditions: * * * * The above copyright notice and this permission notice shall be * * included in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.* * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR * * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * * OTHER DEALINGS IN THE SOFTWARE. * ***************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void myMessageOutput( QtMsgType type, const char *msg ) //this one is from the Qt documentation, see QApplication { switch ( type ) { case QtDebugMsg: fprintf( stdout, "%s\n", msg ); break; case QtWarningMsg: // fprintf( stdout, "guniverse: Warning: %s\n", msg ); fprintf( stderr, "Warning: %s\n", msg ); break; case QtFatalMsg: // fprintf( stdout, "guniverse: Fatal: %s\n", msg ); fprintf( stderr, "Fatal: %s\n", msg ); abort(); // deliberately core dump /* // this produces core dumps... ?? case QtDebugMsg: fprintf( stdout, "guniverse, %s: %s\n", QDateTime::currentDateTime().toString().local8Bit(), msg ); break; case QtWarningMsg: fprintf( stdout, "guniverse, Warning: %s: %s\n", QDateTime::currentDateTime().toString().local8Bit(), msg ); fprintf( stderr, "guniverse, Warning: %s: %s\n", QDateTime::currentDateTime().toString().local8Bit(), msg ); break; case QtFatalMsg: fprintf( stdout, "guniverse, Fatal: %s: %s\n", QDateTime::currentDateTime().toString().local8Bit(), msg ); fprintf( stderr, "guniverse, Fatal: %s: %s\n", QDateTime::currentDateTime().toString().local8Bit(), msg ); abort(); // deliberately core dump */ } } int main(int argc, char** argv) { qInstallMsgHandler( myMessageOutput ); QApplication a(argc,argv,false); GWE::GWorldEngineFactory factory; //let's see if we can load some configuration... QString filename("/usr/local/etc/gweconfig.xml"); //default if (argc > 1) { filename=argv[1]; } else { qWarning(QString("no filename given, using ") + filename); qWarning(" note: you can specify a configuration filename as first parameter"); } if (filename.length() > 8000) { qFatal("filename too long!!!"); } QFile file(filename); if (file.open(IO_ReadOnly)) { qDebug(QString("file opened in read only mode: ") + filename); QDomDocument xml; QString error_msg; int line,col; if (!xml.setContent(&file,&error_msg,&line,&col)) { qWarning("failed to load XML data from file!"); qFatal(QString::number(line) + ":" + QString::number(col) + ": " + error_msg); } else { factory.getRootOption()->loadFromXml(xml.documentElement()); qDebug("GWE factory settings loaded from file"); } file.close(); } else { qWarning(QString("failed to load configuration file: ") + filename); return 1; } qDebug("updating factory options tree"); factory.getRootOption()->updateTree(); qDebug("initializing the GWE with the factory"); GWE::GweController* gwe = factory.init(); if (gwe == NULL) { qFatal("failed to initialize the GWE"); } QObject::connect(gwe,SIGNAL(quit()),&a,SLOT(quit())); GWE::GDataController* dc = gwe->getDataController(); try { GWE::GXmlDataController* xdc = dynamic_cast(dc); //if there is no master server, initialize free element IDs... if (xdc->isMasterServer()) { qDebug("This server is the MASTER server, creating galaxy object, with energy(10,100000,10) and an ellipsoid of (100000,100000,100000)!"); GCS::GElementID galaxy_id = GCS::GElementID::getFreeID(); GCS::GElement* galaxy = new GCS::GElement( new GCS::GObject(new GCS::GEnergy(10,100000,10), // NULL, //no form, we're boundless :-) new GCS::GForm(GCS::GVector3(0,0,0), GCS::GVector3(0,0,0), GCS::GVector3(100000,100000,100000)), GCS::GElementID(galaxy_id), //galaxy as parent GCS::GElementID(galaxy_id), //own ID GCS::GElementID(galaxy_id), //connect to the parent (connectionID is the same as ID of the galaxy element) new QDomDocument(), dc)); Q_CHECK_PTR(galaxy); //no agents for now... if (galaxy) { dc->add(galaxy); } } } catch (std::exception e) { } qDebug("starting the Qt event loop"); return a.exec(); }