From: Joschka B. <jos...@am...> - 2010-02-22 08:04:05
|
Hey Hedayat, On Feb 22, 2010, at 4:39 PM, Hedayat Vatankhah wrote: > Hi Andreas! > > On ۱۰/۰۲/۲۲ 10:49, ah...@un... wrote: >> Hi, >> >> >> I am now one step closer to having the ODE classes as a plugin. I use the >> PhysicsServer for testing for now, because this is a class that is >> actually used, as opposed to the AngularMotor, and thus obviously more >> suited for testing. PhysicsServerImp now shows up in the scenegraph; the >> key was to build odeimps not as a library, but as a module (which is the >> desired method anyway, as building it as a library was merely a >> workaround). >> >> I changed spark.rb a bit so that it imports the odeimps bundle at the very >> beginning. The relevant part now looks like this: >> >> ----- begin excerpt from spark.rb ----- >> # >> # setup spark >> # >> >> print "(spark.rb) setup\n" >> >> #import the implementations of the desired physics engine >> #currently supported: odeimps (uses Open Dynamics Engine) >> importBundle "odeimps" >> print "(spark.rb) using ODE, to change the physics engine go to line 559 >> in spark.rb\n" >> >> # >> # set up logging >> logServer = get($serverPath+'log') >> >> if (logServer != nil) >> logServer.addStream(':cerr', 'eError') >> end >> >> >> # >> # setup the PhysicsServer >> sparkGetPhysicsServer() >> ----- end excerpt from spark.rb ----- >> >> Here's a screenshot of rsgedit which proves that the odeimps bundle gets >> imported correctly, and also showcases that the PhysicsServerImp shows up >> at "/classes/PhysicsServerImp": >> >> http://www.uni-koblenz.de/~aheld/rsgeditscreen.png >> >> Since I can now be 100% sure that PhysicsServerImp is now registered at >> /classes/PhysicsServerImp _before_ the PhysicsServer is set up [as >> importbundle"odeimps" is called prior to sparkGetPhysicsServer()], I can >> now instanciate mPhysicsServerImp in the PhysicsServer's OnLink method >> like this: >> >> void PhysicsServer::OnLink(){ >> mPhysicsServerImp = shared_dynamic_cast<PhysicsServerInt> >> (GetCore()->New("/classes/PhysicsServerImp")); >> } >> >> This leads to the following console output: >> >> ----- begin inexplicable console output ---- >> (ScriptServer) Script ended OK /home/andreas/.simspark/kerosin.rb >> (ScriptServer) Running /usr/local/share/simspark//spark.rb... >> (spark.rb) setup >> (spark.rb) using ODE, to change the physics engine go to line 558 in spark.rb >> (Core::New) unkown class '/classes/PhysicsServerImp' >> (GeometryServer) MeshImporter 'oxygen/StdMeshImporter' registered >> ----- end inexplicable console output ----- >> >> As even a trained monkey could see, the odeimps bundle is imported, and >> thus PhysicsServerImp registered at /classes/PhysicsServerImp immediately >> before Zeitgeist complains that PhysicsServerImp is not registered at >> /classes/PhysicsServerImp. The RSGEdit screenshot proves that >> PhysicsServerImp is registered at /classes/PhysicsServerImp. >> >> Soemhow the PhysicsServer is set up before PhysicsServerImp is registered >> even though spark.rb registers PhysicsServerImp before the PhysicsServer >> is set up. This is a time paradoxon. Maybe I'm using a quantum computer >> without knowing it? >> >> Any ideas would be appreciated. >> > IMHO, you should simply use > > GetCore()->New("PhysicsServerImp") > > Instead of > > GetCore()->New("/classes/PhysicsServerImp") > > And it should work fine! That's it, thanks a bunch! :-) Cheers, Joschka |