示例#1
0
/** \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);
}
示例#2
0
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;
}
示例#3
0
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;
}