Exemple #1
0
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;
}
Exemple #3
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;
		}
	}
}