From: Oliver O. <fr...@us...> - 2007-06-17 12:20:24
|
Update of /cvsroot/simspark/simspark/spark/plugin/rubysceneimporter In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv15262 Modified Files: Tag: projectx rubysceneimporter.cpp rubysceneimporter.h rubysceneimporter_c.cpp Log Message: merged from HEAD Index: rubysceneimporter.h =================================================================== RCS file: /cvsroot/simspark/simspark/spark/plugin/rubysceneimporter/rubysceneimporter.h,v retrieving revision 1.2.2.2 retrieving revision 1.2.2.2.2.1 diff -C2 -d -r1.2.2.2 -r1.2.2.2.2.1 *** rubysceneimporter.h 14 Feb 2007 12:34:09 -0000 1.2.2.2 --- rubysceneimporter.h 17 Jun 2007 12:03:00 -0000 1.2.2.2.2.1 *************** *** 57,60 **** --- 57,63 ---- typedef std::list<ParamEnv> TParameterStack; + //! mapping from abbreviations to key words + typedef std::map<std::string, std::string> TTranslationTable; + public: RubySceneImporter(); *************** *** 76,79 **** --- 79,85 ---- void SetUnlinkOnCompleteScenes(bool unlink); + /** registers all created nodes in the RubySceneDict */ + void EnableSceneDictionary(bool enable); + protected: virtual bool ParseScene(const char* scene, int size, *************** *** 103,106 **** --- 109,117 ---- ParamEnv& GetParamEnv(); + void InitTranslationTable(); + + std::string Lookup(const std::string& key); + + protected: /** true if a scene is automatically unlinked before a new scene *************** *** 111,114 **** --- 122,128 ---- bool mDeltaScene; + /** true, if all created nodes are registered in the RubySceneDict */ + bool mUpdateSceneDict; + /** the major version of the scen graph file */ int mVersionMajor; *************** *** 122,125 **** --- 136,142 ---- /** a stack of parameter environments */ TParameterStack mParameterStack; + + /** the abbreviaton table */ + TTranslationTable mTranslationTable; }; Index: rubysceneimporter.cpp =================================================================== RCS file: /cvsroot/simspark/simspark/spark/plugin/rubysceneimporter/rubysceneimporter.cpp,v retrieving revision 1.2.2.3 retrieving revision 1.2.2.3.2.1 diff -C2 -d -r1.2.2.3 -r1.2.2.3.2.1 *** rubysceneimporter.cpp 18 Feb 2007 12:05:52 -0000 1.2.2.3 --- rubysceneimporter.cpp 17 Jun 2007 12:03:00 -0000 1.2.2.3.2.1 *************** *** 25,28 **** --- 25,29 ---- #include <zeitgeist/scriptserver/scriptserver.h> #include <oxygen/sceneserver/transform.h> + #include <oxygen/sceneserver/scenedict.h> #include <boost/scoped_array.hpp> *************** *** 74,77 **** --- 75,81 ---- mDeltaScene = false; mAutoUnlink = false; + mUpdateSceneDict = false; + + InitTranslationTable(); } *************** *** 85,88 **** --- 89,130 ---- } + void + RubySceneImporter::InitTranslationTable() + { + mTranslationTable.clear(); + + // + mTranslationTable["nd"] = S_NODE; + mTranslationTable["sel"] = S_SELECT; + mTranslationTable["pwd"] = S_PWD; + mTranslationTable["templ"] = S_TEMPLATE; + mTranslationTable["def"] = S_DEFINE; + mTranslationTable["att"] = S_ATTACH; + mTranslationTable["RDS"] = S_DELTASCENE; + mTranslationTable["RSG"] = S_SCENEGRAPH; + mTranslationTable["SLT"] = "setLocalTransform"; + } + + + string RubySceneImporter::Lookup(const std::string& key) + { + return ((mTranslationTable.find(key) != mTranslationTable.end()) ? + mTranslationTable[key] : key); + // if (mTranslationTable.find(key) != mTranslationTable.end()) + // { + // return mTranslationTable[key]; + // } else { + // GetLog()->Debug() << "DEBUG: " << key << " not in TranslationTable\n"; + // return key; + // } + } + + + void + RubySceneImporter::EnableSceneDictionary(bool enable) + { + mUpdateSceneDict = enable; + } + bool RubySceneImporter::ImportScene(const std::string& fileName, shared_ptr<BaseNode> root, *************** *** 99,102 **** --- 141,145 ---- } + std::string oldFileName = mFileName; mFileName = fileName; *************** *** 106,110 **** buffer[file->Size()] = 0; ! return ParseScene(buffer.get(), file->Size(), root, parameter); } --- 149,156 ---- buffer[file->Size()] = 0; ! bool ok = ParseScene(buffer.get(), file->Size(), root, parameter); ! mFileName = oldFileName; ! ! return ok; } *************** *** 144,147 **** --- 190,203 ---- sexp = iparse_sexp(const_cast<char*>(scene),size,pcont); + if (sexp == 0) + { + GetLog()->Error() + << "(RubySceneImporter) ERROR: failed to parse S-Expressions. " + << "Last read line was " << pcont->line << "\n"; + root->UnlinkChildren(); + return false; + + } + if ( (! mDeltaScene) && *************** *** 214,220 **** return false; } ! ! string val(sexp->val); ! mDeltaScene = false; if (val == S_DELTASCENE) --- 270,276 ---- return false; } ! ! string val = Lookup(string(sexp->val)); ! mDeltaScene = false; if (val == S_DELTASCENE) *************** *** 298,302 **** } ! string className(sexp->val); // create a class instance --- 354,358 ---- } ! string className(Lookup(sexp->val)); // create a class instance *************** *** 322,325 **** --- 378,390 ---- } + if ( + (mUpdateSceneDict) && + (mSceneDict != 0) + ) + { + mSceneDict->Insert + (node, SceneDict::FileRef(mFileName,sexp->line)); + } + return node; } *************** *** 391,395 **** } ! string pred = sexp->val; if (pred != "eval") { --- 456,460 ---- } ! string pred = Lookup(sexp->val); if (pred != "eval") { *************** *** 409,413 **** if (sexp->ty == SEXP_VALUE) { ! atom = sexp->val; if ( (atom[0] == '$') && --- 474,478 ---- if (sexp->ty == SEXP_VALUE) { ! atom = sexp->val; //todo: use TranslationTable here? if ( (atom[0] == '$') && *************** *** 550,554 **** // read the method name ! string method = sexp->val; sexp = sexp->next; --- 615,619 ---- // read the method name ! string method = Lookup(sexp->val); sexp = sexp->next; *************** *** 571,575 **** } else { ! param = sexp->val; if ( --- 636,640 ---- } else { ! param = sexp->val; //Todo: use TranslationTable here? if ( *************** *** 592,596 **** bool RubySceneImporter::ParseDefine(sexp_t* sexp) { ! string varname = sexp->val; sexp = sexp->next; --- 657,661 ---- bool RubySceneImporter::ParseDefine(sexp_t* sexp) { ! string varname = sexp->val; //Todo: use TranslationTable here? sexp = sexp->next; *************** *** 675,679 **** ) { ! string param = sexp->val; if (param.size() == 0) --- 740,744 ---- ) { ! string param = sexp->val; //todo: use abbrevTable here? if (param.size() == 0) *************** *** 724,729 **** case SEXP_VALUE: { - string name(sexp->val); if (name == S_NODE) { --- 789,795 ---- case SEXP_VALUE: { + string name = Lookup(string(sexp->val)); + if (name == S_NODE) { *************** *** 750,754 **** if ( (sub->ty == SEXP_VALUE) && ! (string(sub->val) == S_NODE) ) { --- 816,820 ---- if ( (sub->ty == SEXP_VALUE) && ! (Lookup(string(sub->val)) == S_NODE) ) { *************** *** 787,792 **** case SEXP_VALUE: { ! string name(sexp->val); ! if (name == S_NODE) { --- 853,859 ---- case SEXP_VALUE: { ! ! string name = Lookup(string(sexp->val)); ! if (name == S_NODE) { *************** *** 805,809 **** { sexp = sexp->next; ! string name(sexp->val); shared_ptr<BaseNode> node = --- 872,876 ---- { sexp = sexp->next; ! string name(sexp->val); //todo: use abbrevTable here? shared_ptr<BaseNode> node = Index: rubysceneimporter_c.cpp =================================================================== RCS file: /cvsroot/simspark/simspark/spark/plugin/rubysceneimporter/rubysceneimporter_c.cpp,v retrieving revision 1.1 retrieving revision 1.1.4.1 diff -C2 -d -r1.1 -r1.1.4.1 *** rubysceneimporter_c.cpp 13 Dec 2005 21:48:50 -0000 1.1 --- rubysceneimporter_c.cpp 17 Jun 2007 12:03:00 -0000 1.1.4.1 *************** *** 23,26 **** --- 23,42 ---- #include "rubysceneimporter.h" + FUNCTION(RubySceneImporter,enableSceneDictionary) + { + bool enable; + + if ( + (in.GetSize() != 1) || + (! in.GetValue(in[0], enable)) + ) + { + return false; + } + + obj->EnableSceneDictionary(enable); + return true; + } + FUNCTION(RubySceneImporter,setUnlinkOnCompleteScenes) { *************** *** 43,46 **** --- 59,63 ---- DEFINE_BASECLASS(oxygen/SceneImporter); DEFINE_FUNCTION(setUnlinkOnCompleteScenes); + DEFINE_FUNCTION(enableSceneDictionary); } |