/** \brief parse legacy nfd-status command line, and show usage if necessary * \return if first item is -1, caller should retrieve and display StatusReport; * otherwise, caller should immediately exit with the specified exit code */ static std::tuple<int, StatusReportOptions> parseCommandLine(const std::vector<std::string>& args) { StatusReportOptions options; namespace po = boost::program_options; po::options_description cmdOptions("StatusReportOptions"); cmdOptions.add_options() ("help,h", "print this help message") ("version,V", "show program version") ("general,v", po::bool_switch(&options.wantForwarderGeneral), "show general status") ("channels,c", po::bool_switch(&options.wantChannels), "show channels") ("faces,f", po::bool_switch(&options.wantFaces), "show faces") ("fib,b", po::bool_switch(&options.wantFib), "show FIB entries") ("rib,r", po::bool_switch(&options.wantRib), "show RIB routes") ("sc,s", po::bool_switch(&options.wantStrategyChoice), "show strategy choice entries") ("xml,x", "output as XML instead of text (implies -vcfbrs)"); po::variables_map vm; try { po::store(po::command_line_parser(args).options(cmdOptions).run(), vm); po::notify(vm); } catch (const po::error& e) { std::cerr << e.what() << "\n"; showUsage(std::cerr, cmdOptions); return std::make_tuple(2, options); } if (vm.count("help") > 0) { showUsage(std::cout, cmdOptions); return std::make_tuple(0, options); } if (vm.count("version") > 0) { std::cout << "nfd-status " << NFD_VERSION_BUILD_STRING << "\n"; return std::make_tuple(0, options); } if (vm.count("xml") > 0) { options.output = ReportFormat::XML; } if (options.output == ReportFormat::XML || (!options.wantForwarderGeneral && !options.wantChannels && !options.wantFaces && !options.wantFib && !options.wantRib && !options.wantStrategyChoice)) { options.wantForwarderGeneral = options.wantChannels = options.wantFaces = options.wantFib = options.wantRib = options.wantStrategyChoice = true; } return std::make_tuple(-1, options); }
int main(int argc, char** argv) { try { int cudaDevice; std::string lsystemFile; int screenWidth; int screenHeight; CmdOptions cmdOptions(argc, argv); cmdOptions.read("device", cudaDevice, 0); cmdOptions.read<std::string>("lsystemFile", lsystemFile, ""); cmdOptions.read("screenWidth", screenWidth, DEFAULT_SCREEN_WIDTH); cmdOptions.read("screenHeight", screenHeight, DEFAULT_SCREEN_HEIGHT); if (lsystemFile == "") { printUsage(); exit(EXIT_FAILURE); } Framework::GLWindow window("LSystem", screenWidth, screenHeight, true, false); if (gl3wInit()) { throw std::runtime_error("gl3wInit() failed"); } cudaDeviceProp deviceProperties; cudaGetDeviceProperties(&deviceProperties, cudaDevice); cudaSetDevice(cudaDevice); LSystem lsystem(lsystemFile); /********************************/ /* CENTER L-SYSTEM ON SCREEN */ /********************************/ float width = lsystem.getBounds().extents().x; float height = lsystem.getBounds().extents().y; float screenDiagonal = sqrt(pow(width, 2) + pow(height, 2) + 1); float distance = min((screenDiagonal / 2.0f) / tan(HALF_FOV_RAD), ZFAR); float aspectRatio = screenWidth / (float)screenHeight; math::float3 cameraCenter(lsystem.getBounds().center().x, lsystem.getBounds().center().y, -distance); math::float3 cameraForward = cameraCenter + math::float3(0, 0, -1); math::float3 cameraUp(0, 1, 0); ////////////////////////////////////////////////////////////////////////// SimpleCamera camera(FOV_RAD, aspectRatio, ZNEAR, ZFAR, cameraCenter, cameraForward, cameraUp); LSystemRenderer renderer(window, lsystem, camera); window.attach(&renderer); FirstPersonCameraNavigator navigator(&camera); LSystemInputHandler inputHandler(renderer, navigator); window.attach(static_cast<Framework::MouseInputHandler*>(&inputHandler)); window.attach(static_cast<Framework::KeyboardInputHandler*>(&inputHandler)); Framework::run(renderer, &inputHandler); return 0; } catch (std::exception& e) { std::cout << "Error: " << e.what() << std::endl; } catch (...) { std::cout << "Unknown error" << std::endl; } // DEBUG: system("pause"); return -1; }
int main(int argc, char** argv) { try { int cudaDevice; int treeDepth; int screenWidth; int screenHeight; CmdOptions cmdOptions(argc, argv); cmdOptions.read("device", cudaDevice, 0); cmdOptions.read("treeDepth", treeDepth, 0); cmdOptions.read("screenWidth", screenWidth, DEFAULT_SCREEN_WIDTH); cmdOptions.read("screenHeight", screenHeight, DEFAULT_SCREEN_HEIGHT); if (treeDepth < 1) { printUsage(); exit(EXIT_FAILURE); } Framework::GLWindow window("SimpleWorkQueue", screenWidth, screenHeight, true, false); if (gl3wInit()) { throw std::runtime_error("gl3wInit() failed"); } cudaDeviceProp deviceProperties; cudaGetDeviceProperties(&deviceProperties, cudaDevice); cudaSetDevice(cudaDevice); Tree tree; tree.setDepth((unsigned int)treeDepth); SimpleCamera camera(FOV_RAD, screenWidth / (float)screenHeight, ZNEAR, ZFAR); TreeRenderer renderer(window, camera, tree); window.attach(&renderer); FirstPersonCameraNavigator navigator(&camera); centerTreeOnCamera(navigator, tree); InputHandler inputHandler(renderer, navigator, camera, tree); window.attach(static_cast<Framework::MouseInputHandler*>(&inputHandler)); window.attach(static_cast<Framework::KeyboardInputHandler*>(&inputHandler)); Framework::run(renderer, &inputHandler); return 0; } catch (std::exception& e) { std::cout << "Error: " << e.what() << std::endl; } catch (...) { std::cout << "Unknown error" << std::endl; } // DEBUG: system("pause"); return -1; }