From: Alexander Schmidt Date: Wed, 20 Jul 2016 22:14:50 +0000 (+0200) Subject: Added basic command line arguments X-Git-Url: http://git.treefish.org/~alex/seamulator.git/commitdiff_plain/b23099025e3db2682b0260c0cef3a807fad136a8 Added basic command line arguments --- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 75b9bcb..f859744 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,14 +3,15 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14") find_package(OpenGL REQUIRED) find_package(GLUT REQUIRED) find_package(fftw3 REQUIRED) +find_package(Boost 1.40 COMPONENTS program_options REQUIRED) include_directories(${seamulator_SOURCE_DIR}/include ${OPENGL_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS} - ${FFTW_INCLUDES}) + ${FFTW_INCLUDES} ${Boost_INCLUDE_DIR}) add_executable(seamulator seamulator.cpp sea.cpp watersurface.cpp surfacepoint.cpp seaview.cpp) target_link_libraries(seamulator ${OPENGL_LIBRARIES} ${GLUT_LIBRARY} - ${FFTW_LIBRARIES}) + ${FFTW_LIBRARIES} ${Boost_LIBRARIES}) diff --git a/src/seamulator.cpp b/src/seamulator.cpp index 92dfac6..98e92df 100644 --- a/src/seamulator.cpp +++ b/src/seamulator.cpp @@ -1,20 +1,19 @@ #include #include +#include #include +#include #include #include "sea.h" #include "seaview.h" #include "watersurface.h" -const int LATTICE_SIZE{128}; -const double LATTICE_EXTEND{10}; const int INIT_WINDOW_POS_X{50}; const int INIT_WINDOW_POS_Y{50}; const int INIT_WINDOW_WIDTH{800}; const int INIT_WINDOW_HEIGHT{600}; -const double INIT_VIEW_DISTANCE{LATTICE_EXTEND * 1.5}; const double INIT_VIEW_AZIMUTH{0}; const double INIT_VIEW_ALTITUDE{M_PI / 4}; const char WINDOW_TITLE[]{"seamulator"}; @@ -23,18 +22,44 @@ SeaPtr sea; WaterSurfacePtr surface; std::unique_ptr seaView; +struct Settings { + double windSpeed; + int latticeSize; + double latticeExtend; + double amplitudeFactor; +}; + +namespace po = boost::program_options; + void glDisplayFunc(); void glReshapeFunc(int width, int height); void glMouseFunc(int button, int state, int x, int y); void glMotionFunc(int x, int y); +Settings parseArguments(int argc, char** argv, po::options_description desc); int main(int argc, char** argv) { - std::srand(std::time(0)); + po::options_description desc("Available options"); + desc.add_options() + ("help,h", "produce help message") + ("windspeed,w", po::value()->default_value(10), + "wind speed given in m/s") + ("size,s", po::value()->default_value("small"), + "lattice size (small/large)") + ("amplitude,a", po::value()->default_value(1), + "amplitude multiplicator") + ; + + Settings settings = parseArguments(argc, argv, desc); - surface = std::make_shared(LATTICE_SIZE, LATTICE_EXTEND); - sea = std::make_shared(surface, 10, 0.0000001); - seaView = std::make_unique(INIT_VIEW_DISTANCE, INIT_VIEW_AZIMUTH, + std::srand(std::time(0)); + surface = std::make_shared(settings.latticeSize, + settings.latticeExtend); + sea = std::make_shared(surface, + settings.windSpeed, + settings.amplitudeFactor); + seaView = std::make_unique(settings.latticeExtend * 1.5, + INIT_VIEW_AZIMUTH, INIT_VIEW_ALTITUDE); glutInit(&argc, argv); @@ -54,6 +79,35 @@ int main(int argc, char** argv) return 0; } +Settings parseArguments(int argc, char** argv, po::options_description desc) +{ + po::variables_map vm; + po::store(po::parse_command_line(argc, argv, desc), vm); + po::notify(vm); + + if (vm.count("help")) { + std::cout << desc << "\n"; + exit(1); + } + + Settings settings; + + settings.windSpeed = vm["windspeed"].as(); + + if (vm["size"].as() == "large") { + settings.latticeSize = 256; + settings.latticeExtend = 20; + settings.amplitudeFactor = vm["amplitude"].as() * 0.00000004; + } + else { + settings.latticeSize = 128; + settings.latticeExtend = 10; + settings.amplitudeFactor = vm["amplitude"].as() * 0.0000001; + } + + return settings; +} + void glDisplayFunc() { glClear(GL_COLOR_BUFFER_BIT);