void Parser::Parse(const char * filepath) { std::ifstream in(filepath); std::ostringstream oss; oss << in.rdbuf(); buffer = oss.str(); in.close(); index = 0; while (HasNextTag()) { std::string tag = NextTag(); if (tag == "camera") { ParseCamera(); } else if (tag == "renderer") { ParseRenderer(); } else if (tag == "scene") { ParseScene(); } } }
int main (int argc, char** argv) { FbxManager* fbxManager = NULL; FbxScene* lScene = NULL; // Prepare the FBX SDK. InitializeSdkObjects(fbxManager); std::vector<std::string> fileNamesForImport = GetFbxFileNamesForImport(); bool EXPORT_ALL_TO_ONE_FOLDER = true; for (unsigned int i = 0; i < fileNamesForImport.size(); ++i) { std::string fbxFileName = fileNamesForImport[i]; Scene* scene = ParseScene(fbxManager, IMPORT_PATH + fbxFileName); scene->DEBUG_ExportNamesOfAllObjectsInScene(); if (!EXPORT_ALL_TO_ONE_FOLDER) { std::string exportFolderName = fbxFileName.substr(0, fbxFileName.find(".")); FileUtilities::CreateFolder(EXPORT_PATH_BASE + exportFolderName); FileUtilities::CreateFolder(EXPORT_PATH_BASE + exportFolderName + "/" EXPORT_FOLDER_MODELS); FileUtilities::CreateFolder(EXPORT_PATH_BASE + exportFolderName + "/" EXPORT_FOLDER_ANIMCLIPS); ExportSceneToModelFiles(scene, EXPORT_PATH_BASE + exportFolderName + "/"); } else { FileUtilities::CreateFolder(EXPORT_PATH_BASE); FileUtilities::CreateFolder(EXPORT_PATH_BASE EXPORT_FOLDER_MODELS); FileUtilities::CreateFolder(EXPORT_PATH_BASE EXPORT_FOLDER_ANIMCLIPS); ExportSceneToModelFiles(scene, EXPORT_PATH_BASE); } } //Destroy all objects created by the FBX SDK. DestroySdkObjects(fbxManager, true); std::cin.get(); return 0; }
int main(int argc, char *argv[]) { if (argc <= 1) { return 0; } try { DptInit(); bool compilePathLib = false; bool compileBidirPathLib = false; int maxDervDepth = 6; std::vector<std::string> filenames; for (int i = 1; i < argc; ++i) { if (std::string(argv[i]) == "--compile-pathlib") { compilePathLib = true; } else if (std::string(argv[i]) == "--compile-bidirpathlib") { compileBidirPathLib = true; } else if (std::string(argv[i]) == "--max-derivatives-depth") { maxDervDepth = std::stoi(std::string(argv[++i])); } else { filenames.push_back(std::string(argv[i])); } } if (compilePathLib) { CompilePathFuncLibrary(false, maxDervDepth); } if (compileBidirPathLib) { CompilePathFuncLibrary(true, maxDervDepth); } std::string cwd = getcwd(NULL, 0); for (std::string filename : filenames) { if (filename.rfind('/') != std::string::npos && chdir(filename.substr(0, filename.rfind('/')).c_str()) != 0) { Error("chdir failed"); } if (filename.rfind('/') != std::string::npos) { filename = filename.substr(filename.rfind('/') + 1); } std::unique_ptr<const Scene> scene = ParseScene(filename); std::string integrator = scene->options->integrator; if (integrator == "mc") { std::shared_ptr<const PathFuncLib> library = BuildPathFuncLibrary(scene->options->bidirectional, maxDervDepth); PathTrace(scene.get(), library); } else if (integrator == "mcmc") { std::shared_ptr<const PathFuncLib> library = BuildPathFuncLibrary(scene->options->bidirectional, maxDervDepth); MLT(scene.get(), library); } else { Error("Unknown integrator"); } WriteImage(scene->outputName, GetFilm(scene->camera.get()).get()); if (chdir(cwd.c_str()) != 0) { Error("chdir failed"); } } DptCleanup(); } catch (std::exception &ex) { std::cerr << ex.what() << std::endl; } return 0; }
void CASEFile::Parse() { if (m_file == NULL) { return; } CAlertErrHandler errhandler; CTokenizer* tokenizer = CTokenizer::Create(TKF_USES_EOL | TKF_NUMERICIDENTIFIERSTART); tokenizer->SetErrHandler(&errhandler); tokenizer->SetKeywords(s_keywords); tokenizer->SetSymbols(s_symbols); tokenizer->AddParseFile(m_file, 16 * 1024); int tokType = TK_UNDEFINED; while(tokType != TK_EOF) { CToken* curToken = tokenizer->GetToken(); if (curToken->GetType() == TK_EOF) { curToken->Delete(); tokType = TK_EOF; break; } if (curToken->GetType() == TK_EOL) { curToken->Delete(); continue; } if (curToken->GetType() != TK_ASE_ASTERISK) { tokenizer->Error(TKERR_UNEXPECTED_TOKEN); curToken->Delete(); tokenizer->GetToEndOfLine()->Delete(); continue; } curToken->Delete(); curToken = tokenizer->GetToken(); tokType = curToken->GetType(); curToken->Delete(); switch(tokType) { case TK_EOF: break; case TK_GEOMOBJECT: ParseGeomObject(tokenizer); break; case TK_SCENE: ParseScene(tokenizer); break; case TK_MATERIAL_LIST: ParseMaterialList(tokenizer); break; case TK_ASE_COMMENT: ParseComment(tokenizer); break; case TK_3DSMAX_ASCIIEXPORT: ParseAsciiExport(tokenizer); break; default: tokenizer->Error(TKERR_UNEXPECTED_TOKEN); tokenizer->GetToEndOfLine()->Delete(); break; } } }