From a7c1477b2eef8bd62b373f012043bbfe0a5054de Mon Sep 17 00:00:00 2001 From: yizhangss Date: Mon, 19 Apr 2021 16:33:07 +0800 Subject: [PATCH] update src --- src/CMakeLists.txt | 18 +- src/add_interface_block.cpp | 245 +++++++++++++-------------- src/add_models.cpp | 43 +++-- src/add_regular_block.cpp | 93 +++++----- src/add_sphere_block.cpp | 121 +++++++------ src/add_tilted_block.cpp | 131 +++++++------- src/build_regular_grid.cpp | 103 +++++------ src/cpoint_id.cpp | 20 +++ src/disp_help.cpp | 329 ------------------------------------ src/disp_help.h | 56 ------ src/forward_delta_t.cpp | 20 +-- src/forward_delta_tx.cpp | 20 +-- src/forward_delta_ty.cpp | 20 +-- src/forward_delta_tz.cpp | 20 +-- src/forward_hax.cpp | 16 +- src/forward_hay.cpp | 16 +- src/forward_vz.cpp | 28 +-- src/forward_vzx.cpp | 12 +- src/forward_vzy.cpp | 12 +- src/forward_vzz.cpp | 12 +- src/forward_za.cpp | 16 +- src/gm3d.h | 139 ++++++++++----- src/head_func.cpp | 95 ----------- src/head_func.h | 93 ---------- src/init_obs.cpp | 19 +-- src/main.cpp | 296 ++++++++++++-------------------- src/out_msh_file.cpp | 16 +- src/out_neighbor_file.cpp | 2 +- src/out_obs.cpp | 11 +- src/progress_bar.cpp | 114 ------------- src/progress_bar.h | 41 ----- src/read_model.cpp | 51 ++++-- src/registered_output.cpp | 4 +- 33 files changed, 767 insertions(+), 1465 deletions(-) create mode 100644 src/cpoint_id.cpp delete mode 100644 src/disp_help.cpp delete mode 100644 src/disp_help.h delete mode 100644 src/head_func.cpp delete mode 100644 src/head_func.h delete mode 100644 src/progress_bar.cpp delete mode 100644 src/progress_bar.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7c3dd3b..9ca2ceb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,19 +1,13 @@ -aux_source_directory(. SRC_DIR) +aux_source_directory(. DIR_SRC) set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) -add_executable(gm3d ${SRC_DIR}) +include_directories(/usr/local/include) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11 -O2") +add_executable(gm3d ${DIR_SRC}) -# 添加openmp的编译命令 设置编译选项 -find_package(OpenMP REQUIRED) -if (OpenMP_CXX_FOUND) - message(STATUS "OpenMP Found.") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") - set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") - target_link_libraries(gm3d PUBLIC OpenMP::OpenMP_CXX) -endif() +find_library(GCTL_LIBRARY gctl /usr/local/lib) +target_link_libraries(gm3d ${GCTL_LIBRARY}) -set(CMAKE_INSTALL_PREFIX /usr/local) +# 安装至${CMAKE_INSTALL_PREFIX}/sbin文件夹 install(TARGETS gm3d RUNTIME DESTINATION sbin) \ No newline at end of file diff --git a/src/add_interface_block.cpp b/src/add_interface_block.cpp index 51f3550..e5adc9e 100644 --- a/src/add_interface_block.cpp +++ b/src/add_interface_block.cpp @@ -1,6 +1,6 @@ #include "gm3d.h" //我们读入一个界面数据 插值计算每个块体中心位置的值 然后按情况赋值 -int GM3D::AddInterfaceBlock(modelist para_list){ +void GM3D::AddInterfaceBlock(modelist para_list){ int m, n, xnum, ynum; double xs,xe,xmin,xmax,dx; double ys,ye,ymin,ymax,dy; @@ -9,137 +9,134 @@ int GM3D::AddInterfaceBlock(modelist para_list){ string temp_str; stringstream temp_ss; - cpoint temp_topo; - cpointArray face_topo; + vertex temp_topo; + vertexVector face_topo; ifstream infile; - char filename[1024]; - if (1 == sscanf(para_list.mod_para,"%s",filename)){ - if (open_infile(infile,filename)) return -1; + gctl::open_infile(infile, para_list.mod_para); - while (getline(infile,temp_str)){ - //#range必须出现在数据之前 - if (*(temp_str.begin()) == '#'){ - if (6 == sscanf(temp_str.c_str(),"# range=%lf/%lf/%lf/%lf/%lf/%lf",&xs,&dx,&xe,&ys,&dy,&ye)){ - xmin = MIN(xs,xe); xmax = MAX(xs,xe); - ymin = MIN(ys,ye); ymax = MAX(ys,ye); - dx = fabs(dx); dy = fabs(dy); - xnum = round((xmax - xmin)/dx) + 1; - ynum = round((ymax - ymin)/dy) + 1; - } - else continue; - } - else{ - temp_ss = str2ss(temp_str); - temp_ss >> temp_topo.x >> temp_topo.y >> temp_topo.z; - face_topo.push_back(temp_topo); - } - } - infile.close(); - - if (!strcmp(para_list.val_type,"replace/top")){ - for (int i = 0; i < model_num_; i++){ - m = floor((model_cube_[i].cen.x - xmin)/dx); - n = floor((model_cube_[i].cen.y - ymin)/dy); - - temp_topo.z = grid_interpolate(xmin+dx*m,ymin+dy*n,dx,dy,model_cube_[i].cen.x,model_cube_[i].cen.y, - face_topo[xnum*n+m].z,face_topo[xnum*n+m+1].z,face_topo[xnum*(n+1)+m].z,face_topo[xnum*(n+1)+m+1].z); - - if (model_cube_[i].cen.z >= temp_topo.z){ - model_block_val_[i] = para_list.mod_value; - model_added = true; - } - } - } - else if (!strcmp(para_list.val_type,"replace/bot")){ - for (int i = 0; i < model_num_; i++){ - m = floor((model_cube_[i].cen.x - xmin)/dx); - n = floor((model_cube_[i].cen.y - ymin)/dy); - - temp_topo.z = grid_interpolate(xmin+dx*m,ymin+dy*n,dx,dy,model_cube_[i].cen.x,model_cube_[i].cen.y, - face_topo[xnum*n+m].z,face_topo[xnum*n+m+1].z,face_topo[xnum*(n+1)+m].z,face_topo[xnum*(n+1)+m+1].z); - - if (model_cube_[i].cen.z <= temp_topo.z){ - model_block_val_[i] = para_list.mod_value; - model_added = true; - } - } - } - else if (!strcmp(para_list.val_type,"add/top")){ - for (int i = 0; i < model_num_; i++){ - m = floor((model_cube_[i].cen.x - xmin)/dx); - n = floor((model_cube_[i].cen.y - ymin)/dy); - - temp_topo.z = grid_interpolate(xmin+dx*m,ymin+dy*n,dx,dy,model_cube_[i].cen.x,model_cube_[i].cen.y, - face_topo[xnum*n+m].z,face_topo[xnum*n+m+1].z,face_topo[xnum*(n+1)+m].z,face_topo[xnum*(n+1)+m+1].z); - - if (model_cube_[i].cen.z >= temp_topo.z){ - if (model_block_val_[i] == BDL_MAX) - model_block_val_[i] = para_list.mod_value; //注意重复赋值的块体会覆盖 - else - model_block_val_[i] += para_list.mod_value; - model_added = true; - } - } - } - else if (!strcmp(para_list.val_type,"add/bot")){ - for (int i = 0; i < model_num_; i++){ - m = floor((model_cube_[i].cen.x - xmin)/dx); - n = floor((model_cube_[i].cen.y - ymin)/dy); - - temp_topo.z = grid_interpolate(xmin+dx*m,ymin+dy*n,dx,dy,model_cube_[i].cen.x,model_cube_[i].cen.y, - face_topo[xnum*n+m].z,face_topo[xnum*n+m+1].z,face_topo[xnum*(n+1)+m].z,face_topo[xnum*(n+1)+m+1].z); - - if (model_cube_[i].cen.z <= temp_topo.z){ - if (model_block_val_[i] == BDL_MAX) - model_block_val_[i] = para_list.mod_value; //注意重复赋值的块体会覆盖 - else - model_block_val_[i] += para_list.mod_value; - model_added = true; - } - } - } - else if (!strcmp(para_list.val_type,"erase/top")){ - for (int i = 0; i < model_num_; i++){ - m = floor((model_cube_[i].cen.x - xmin)/dx); - n = floor((model_cube_[i].cen.y - ymin)/dy); - - temp_topo.z = grid_interpolate(xmin+dx*m,ymin+dy*n,dx,dy,model_cube_[i].cen.x,model_cube_[i].cen.y, - face_topo[xnum*n+m].z,face_topo[xnum*n+m+1].z,face_topo[xnum*(n+1)+m].z,face_topo[xnum*(n+1)+m+1].z); - - if (model_cube_[i].cen.z >= temp_topo.z){ - model_block_val_[i] = BDL_MAX; - model_added = true; - } - } - } - else if (!strcmp(para_list.val_type,"erase/bot")){ - for (int i = 0; i < model_num_; i++){ - m = floor((model_cube_[i].cen.x - xmin)/dx); - n = floor((model_cube_[i].cen.y - ymin)/dy); - - temp_topo.z = grid_interpolate(xmin+dx*m,ymin+dy*n,dx,dy,model_cube_[i].cen.x,model_cube_[i].cen.y, - face_topo[xnum*n+m].z,face_topo[xnum*n+m+1].z,face_topo[xnum*(n+1)+m].z,face_topo[xnum*(n+1)+m+1].z); - - if (model_cube_[i].cen.z <= temp_topo.z){ - model_block_val_[i] = BDL_MAX; - model_added = true; - } + while (getline(infile,temp_str)) + { + //#range必须出现在数据之前 + if (temp_str[0] == '#') + { + if (6 == sscanf(temp_str.c_str(),"# range=%lf/%lf/%lf/%lf/%lf/%lf", + &xs,&dx,&xe,&ys,&dy,&ye)){ + xmin = GCTL_MIN(xs,xe); xmax = GCTL_MAX(xs,xe); + ymin = GCTL_MIN(ys,ye); ymax = GCTL_MAX(ys,ye); + dx = fabs(dx); dy = fabs(dy); + xnum = round((xmax - xmin)/dx) + 1; + ynum = round((ymax - ymin)/dy) + 1; } + else continue; } else{ - cerr << BOLDRED << "error ==> " << RESET << "wrong value type: " << para_list.val_type << " of the model type: " << para_list.mod_type << endl; - return -1; + gctl::str2ss(temp_str, temp_ss); + temp_ss >> temp_topo.x >> temp_topo.y >> temp_topo.z; + face_topo.push_back(temp_topo); } } - else{ - cerr << BOLDRED << "error ==> " << RESET << "fail to add blocks with the parameter: " << para_list.mod_para << endl; - return -1; - } + infile.close(); - if (!model_added){ - cerr << BOLDYELLOW << "warning ==> " << RESET << "no block changed with the parameter: " << para_list.mod_para << endl; - return -1; + if (para_list.val_type == "replace/top") + { + for (int i = 0; i < model_num_; i++){ + m = floor((model_cube_[i].cen.x - xmin)/dx); + n = floor((model_cube_[i].cen.y - ymin)/dy); + + temp_topo.z = gctl::rect_interpolate(xmin+dx*m,ymin+dy*n,dx,dy,model_cube_[i].cen.x,model_cube_[i].cen.y, + face_topo[xnum*n+m].z,face_topo[xnum*n+m+1].z,face_topo[xnum*(n+1)+m].z,face_topo[xnum*(n+1)+m+1].z); + + if (model_cube_[i].cen.z >= temp_topo.z){ + model_block_val_[i] = para_list.mod_value; + model_added = true; + } + } } - return 0; + else if (para_list.val_type == "replace/bot") + { + for (int i = 0; i < model_num_; i++){ + m = floor((model_cube_[i].cen.x - xmin)/dx); + n = floor((model_cube_[i].cen.y - ymin)/dy); + + temp_topo.z = gctl::rect_interpolate(xmin+dx*m,ymin+dy*n,dx,dy,model_cube_[i].cen.x,model_cube_[i].cen.y, + face_topo[xnum*n+m].z,face_topo[xnum*n+m+1].z,face_topo[xnum*(n+1)+m].z,face_topo[xnum*(n+1)+m+1].z); + + if (model_cube_[i].cen.z <= temp_topo.z){ + model_block_val_[i] = para_list.mod_value; + model_added = true; + } + } + } + else if (para_list.val_type == "add/top") + { + for (int i = 0; i < model_num_; i++){ + m = floor((model_cube_[i].cen.x - xmin)/dx); + n = floor((model_cube_[i].cen.y - ymin)/dy); + + temp_topo.z = gctl::rect_interpolate(xmin+dx*m,ymin+dy*n,dx,dy,model_cube_[i].cen.x,model_cube_[i].cen.y, + face_topo[xnum*n+m].z,face_topo[xnum*n+m+1].z,face_topo[xnum*(n+1)+m].z,face_topo[xnum*(n+1)+m+1].z); + + if (model_cube_[i].cen.z >= temp_topo.z){ + if (model_block_val_[i] == GCTL_BDL_MAX) + model_block_val_[i] = para_list.mod_value; //注意重复赋值的块体会覆盖 + else + model_block_val_[i] += para_list.mod_value; + model_added = true; + } + } + } + else if (para_list.val_type == "add/bot") + { + for (int i = 0; i < model_num_; i++){ + m = floor((model_cube_[i].cen.x - xmin)/dx); + n = floor((model_cube_[i].cen.y - ymin)/dy); + + temp_topo.z = gctl::rect_interpolate(xmin+dx*m,ymin+dy*n,dx,dy,model_cube_[i].cen.x,model_cube_[i].cen.y, + face_topo[xnum*n+m].z,face_topo[xnum*n+m+1].z,face_topo[xnum*(n+1)+m].z,face_topo[xnum*(n+1)+m+1].z); + + if (model_cube_[i].cen.z <= temp_topo.z){ + if (model_block_val_[i] == GCTL_BDL_MAX) + model_block_val_[i] = para_list.mod_value; //注意重复赋值的块体会覆盖 + else + model_block_val_[i] += para_list.mod_value; + model_added = true; + } + } + } + else if (para_list.val_type == "erase/top") + { + for (int i = 0; i < model_num_; i++){ + m = floor((model_cube_[i].cen.x - xmin)/dx); + n = floor((model_cube_[i].cen.y - ymin)/dy); + + temp_topo.z = gctl::rect_interpolate(xmin+dx*m,ymin+dy*n,dx,dy,model_cube_[i].cen.x,model_cube_[i].cen.y, + face_topo[xnum*n+m].z,face_topo[xnum*n+m+1].z,face_topo[xnum*(n+1)+m].z,face_topo[xnum*(n+1)+m+1].z); + + if (model_cube_[i].cen.z >= temp_topo.z){ + model_block_val_[i] = GCTL_BDL_MAX; + model_added = true; + } + } + } + else if (para_list.val_type == "erase/bot") + { + for (int i = 0; i < model_num_; i++){ + m = floor((model_cube_[i].cen.x - xmin)/dx); + n = floor((model_cube_[i].cen.y - ymin)/dy); + + temp_topo.z = gctl::rect_interpolate(xmin+dx*m,ymin+dy*n,dx,dy,model_cube_[i].cen.x,model_cube_[i].cen.y, + face_topo[xnum*n+m].z,face_topo[xnum*n+m+1].z,face_topo[xnum*(n+1)+m].z,face_topo[xnum*(n+1)+m+1].z); + + if (model_cube_[i].cen.z <= temp_topo.z){ + model_block_val_[i] = GCTL_BDL_MAX; + model_added = true; + } + } + } + else throw GM3D_INVALID_MODEL_VAL_TYPE; + + if (!model_added) + throw GM3D_NOMODEL_ADDED; + return; } \ No newline at end of file diff --git a/src/add_models.cpp b/src/add_models.cpp index e594adf..b9f5370 100644 --- a/src/add_models.cpp +++ b/src/add_models.cpp @@ -1,45 +1,44 @@ #include "gm3d.h" -int GM3D::AddModels(char* filename){ +void GM3D::AddModels(std::string modentity_file){ string temp_str; stringstream temp_ss; modelist temp_list; ifstream infile; - if (open_infile(infile,filename)) return -1; - while(getline(infile,temp_str)){ - if (*(temp_str.begin()) == '#') continue; + gctl::open_infile(infile, modentity_file); + + while(getline(infile, temp_str)){ + if (temp_str[0] == '#') continue; else{ //按每行5个数据解析 初始化为含观测值与不确定度的观测点 - if (4 == sscanf(temp_str.c_str(),"%s %s %lf %s", - temp_list.mod_type,temp_list.val_type,&temp_list.mod_value,temp_list.mod_para)){ - model_list_.push_back(temp_list); - } - else{ - cerr << BOLDYELLOW << "ignored ==> " << RESET << "wrong input: " << temp_str << endl; - continue; - } + gctl::str2ss(temp_str, temp_ss); + temp_ss >> temp_list.mod_type >> temp_list.val_type >> temp_list.mod_value + >> temp_list.mod_para; + + if (temp_ss.fail()) + throw GM3D_MODEL_INIT_FAIL; + + model_list_.push_back(temp_list); } } infile.close(); - for (int i = 0; i < model_list_.size(); i++){ - if (!strcmp(model_list_[i].mod_type,"regular_block")){ + for (int i = 0; i < model_list_.size(); i++) + { + if (model_list_[i].mod_type == "regular_block"){ AddRegularBlock(model_list_[i]); } - else if (!strcmp(model_list_[i].mod_type,"tilted_block")){ + else if (model_list_[i].mod_type == "tilted_block"){ AddTiltedBlock(model_list_[i]); } - else if (!strcmp(model_list_[i].mod_type,"sphere")){ + else if (model_list_[i].mod_type == "sphere"){ AddSphereBlock(model_list_[i]); } - else if (!strcmp(model_list_[i].mod_type,"interface")){ + else if (model_list_[i].mod_type == "interface"){ AddInterfaceBlock(model_list_[i]); } - else{ - cerr << BOLDYELLOW << "ignored ==> " << RESET << "unknown model type: " << model_list_[i].mod_type << endl; - continue; - } + else throw GM3D_INVALID_MODEL_TYPE; } - return 0; + return; } \ No newline at end of file diff --git a/src/add_regular_block.cpp b/src/add_regular_block.cpp index 4834976..8b060d3 100644 --- a/src/add_regular_block.cpp +++ b/src/add_regular_block.cpp @@ -1,62 +1,61 @@ #include "gm3d.h" -int GM3D::AddRegularBlock(modelist para_list){ +void GM3D::AddRegularBlock(modelist para_list){ double xs,xe,xmin,xmax; double ys,ye,ymin,ymax; double zs,ze,zmin,zmax; bool model_added = false; - if (6 == sscanf(para_list.mod_para,"%lf/%lf/%lf/%lf/%lf/%lf",&xs,&xe,&ys,&ye,&zs,&ze)){ - xmin = MIN(xs,xe); xmax = MAX(xs,xe); - ymin = MIN(ys,ye); ymax = MAX(ys,ye); - zmin = MIN(zs,ze); zmax = MAX(zs,ze); + std::stringstream tmp_ss; + gctl::str2ss(para_list.mod_para, tmp_ss, "/"); + tmp_ss >> xs >> xe >> ys >> ye >> zs >> ze; - if (!strcmp(para_list.val_type,"replace")){ - for (int i = 0; i < model_num_; i++){ - if (model_cube_[i].cen.x >= xmin && model_cube_[i].cen.x <= xmax && - model_cube_[i].cen.y >= ymin && model_cube_[i].cen.y <= ymax && - model_cube_[i].cen.z >= zmin && model_cube_[i].cen.z <= zmax){ + if (tmp_ss.fail()) + throw GM3D_INVALID_MODEL_PARAMETER; + + xmin = GCTL_MIN(xs,xe); xmax = GCTL_MAX(xs,xe); + ymin = GCTL_MIN(ys,ye); ymax = GCTL_MAX(ys,ye); + zmin = GCTL_MIN(zs,ze); zmax = GCTL_MAX(zs,ze); + + if (para_list.val_type == "replace") + { + for (int i = 0; i < model_num_; i++){ + if (model_cube_[i].cen.x >= xmin && model_cube_[i].cen.x <= xmax && + model_cube_[i].cen.y >= ymin && model_cube_[i].cen.y <= ymax && + model_cube_[i].cen.z >= zmin && model_cube_[i].cen.z <= zmax){ + model_block_val_[i] = para_list.mod_value; //注意重复赋值的块体会覆盖 + model_added = true; + } + } + } + else if (para_list.val_type == "add") + { + for (int i = 0; i < model_num_; i++){ + if (model_cube_[i].cen.x >= xmin && model_cube_[i].cen.x <= xmax && + model_cube_[i].cen.y >= ymin && model_cube_[i].cen.y <= ymax && + model_cube_[i].cen.z >= zmin && model_cube_[i].cen.z <= zmax){ + if (model_block_val_[i] == GCTL_BDL_MAX) model_block_val_[i] = para_list.mod_value; //注意重复赋值的块体会覆盖 - model_added = true; - } + else + model_block_val_[i] += para_list.mod_value; + model_added = true; } } - else if (!strcmp(para_list.val_type,"add")){ - for (int i = 0; i < model_num_; i++){ - if (model_cube_[i].cen.x >= xmin && model_cube_[i].cen.x <= xmax && - model_cube_[i].cen.y >= ymin && model_cube_[i].cen.y <= ymax && - model_cube_[i].cen.z >= zmin && model_cube_[i].cen.z <= zmax){ - if (model_block_val_[i] == BDL_MAX) - model_block_val_[i] = para_list.mod_value; //注意重复赋值的块体会覆盖 - else - model_block_val_[i] += para_list.mod_value; - model_added = true; - } - } - } - else if (!strcmp(para_list.val_type,"erase")){ - for (int i = 0; i < model_num_; i++){ - if (model_cube_[i].cen.x >= xmin && model_cube_[i].cen.x <= xmax && - model_cube_[i].cen.y >= ymin && model_cube_[i].cen.y <= ymax && - model_cube_[i].cen.z >= zmin && model_cube_[i].cen.z <= zmax){ - model_block_val_[i] = BDL_MAX; //注意重复赋值的块体会覆盖 - model_added = true; - } - } - } - else{ - cerr << BOLDRED << "error ==> " << RESET << "wrong value type: " << para_list.val_type << " of the model type: " << para_list.mod_type << endl; - return -1; - } } - else{ - cerr << BOLDRED << "error ==> " << RESET << "fail to add blocks with the parameter: " << para_list.mod_para << endl; - return -1; + else if (para_list.val_type == "erase") + { + for (int i = 0; i < model_num_; i++){ + if (model_cube_[i].cen.x >= xmin && model_cube_[i].cen.x <= xmax && + model_cube_[i].cen.y >= ymin && model_cube_[i].cen.y <= ymax && + model_cube_[i].cen.z >= zmin && model_cube_[i].cen.z <= zmax){ + model_block_val_[i] = GCTL_BDL_MAX; //注意重复赋值的块体会覆盖 + model_added = true; + } + } } + else throw GM3D_INVALID_MODEL_VAL_TYPE; - if (!model_added){ - cerr << BOLDYELLOW << "warning ==> " << RESET << "no block changed with the parameter: " << para_list.mod_para << endl; - return -1; - } - return 0; + if (!model_added) + throw GM3D_NOMODEL_ADDED; + return; } \ No newline at end of file diff --git a/src/add_sphere_block.cpp b/src/add_sphere_block.cpp index 9bba9bf..2b4df89 100644 --- a/src/add_sphere_block.cpp +++ b/src/add_sphere_block.cpp @@ -1,82 +1,81 @@ #include "gm3d.h" -int GM3D::AddSphereBlock(modelist para_list){ +void GM3D::AddSphereBlock(modelist para_list){ double xc,yc,zc,rad_x,rad_y,rad_z; double dist,rad_limit; double rel_x,rel_y,rel_z,theta,phi; bool model_added = false; - if (6 == sscanf(para_list.mod_para,"%lf/%lf/%lf/%lf/%lf/%lf",&xc,&yc,&zc,&rad_x,&rad_y,&rad_z)){ - if (!strcmp(para_list.val_type,"replace")){ - for (int i = 0; i < model_num_; i++){ - rel_x = model_cube_[i].cen.x - xc; - rel_y = model_cube_[i].cen.y - yc; - rel_z = model_cube_[i].cen.z - zc; - dist = sqrt(rel_x*rel_x + rel_y*rel_y + rel_z*rel_z); + std::stringstream tmp_ss; + gctl::str2ss(para_list.mod_para, tmp_ss, "/"); + tmp_ss >> xc >> yc >> zc >> rad_x>> rad_y >> rad_z; - theta = acos(rel_z/dist); - phi = atan2(rel_y,rel_x); + if (tmp_ss.fail()) + throw GM3D_INVALID_MODEL_PARAMETER; - rad_limit = rad_x*rad_y*rad_z/sqrt(pow(rad_y*rad_z*sin(theta)*cos(phi),2) + pow(rad_x*rad_z*sin(theta)*sin(phi),2) + pow(rad_x*rad_y*cos(theta),2)); + if (para_list.val_type == "replace") + { + for (int i = 0; i < model_num_; i++){ + rel_x = model_cube_[i].cen.x - xc; + rel_y = model_cube_[i].cen.y - yc; + rel_z = model_cube_[i].cen.z - zc; + dist = sqrt(rel_x*rel_x + rel_y*rel_y + rel_z*rel_z); - if (dist <= rad_limit){ + theta = acos(rel_z/dist); + phi = atan2(rel_y,rel_x); + + rad_limit = rad_x*rad_y*rad_z/sqrt(pow(rad_y*rad_z*sin(theta)*cos(phi),2) + pow(rad_x*rad_z*sin(theta)*sin(phi),2) + pow(rad_x*rad_y*cos(theta),2)); + + if (dist <= rad_limit){ + model_block_val_[i] = para_list.mod_value; //注意重复赋值的块体会覆盖 + model_added = true; + } + } + } + else if (para_list.val_type == "add") + { + for (int i = 0; i < model_num_; i++){ + rel_x = model_cube_[i].cen.x - xc; + rel_y = model_cube_[i].cen.y - yc; + rel_z = model_cube_[i].cen.z - zc; + dist = sqrt(rel_x*rel_x + rel_y*rel_y + rel_z*rel_z); + + theta = acos(rel_z/dist); + phi = atan2(rel_y,rel_x); + + rad_limit = rad_x*rad_y*rad_z/sqrt(pow(rad_y*rad_z*sin(theta)*cos(phi),2) + pow(rad_x*rad_z*sin(theta)*sin(phi),2) + pow(rad_x*rad_y*cos(theta),2)); + + if (dist <= rad_limit){ + if (model_block_val_[i] == GCTL_BDL_MAX) model_block_val_[i] = para_list.mod_value; //注意重复赋值的块体会覆盖 - model_added = true; - } + else + model_block_val_[i] += para_list.mod_value; + model_added = true; } } - else if (!strcmp(para_list.val_type,"add")){ - for (int i = 0; i < model_num_; i++){ - rel_x = model_cube_[i].cen.x - xc; - rel_y = model_cube_[i].cen.y - yc; - rel_z = model_cube_[i].cen.z - zc; - dist = sqrt(rel_x*rel_x + rel_y*rel_y + rel_z*rel_z); + } + else if (para_list.val_type == "erase") + { + for (int i = 0; i < model_num_; i++){ + rel_x = model_cube_[i].cen.x - xc; + rel_y = model_cube_[i].cen.y - yc; + rel_z = model_cube_[i].cen.z - zc; + dist = sqrt(rel_x*rel_x + rel_y*rel_y + rel_z*rel_z); - theta = acos(rel_z/dist); - phi = atan2(rel_y,rel_x); + theta = acos(rel_z/dist); + phi = atan2(rel_y,rel_x); - rad_limit = rad_x*rad_y*rad_z/sqrt(pow(rad_y*rad_z*sin(theta)*cos(phi),2) + pow(rad_x*rad_z*sin(theta)*sin(phi),2) + pow(rad_x*rad_y*cos(theta),2)); + rad_limit = rad_x*rad_y*rad_z/sqrt(pow(rad_y*rad_z*sin(theta)*cos(phi),2) + pow(rad_x*rad_z*sin(theta)*sin(phi),2) + pow(rad_x*rad_y*cos(theta),2)); - if (dist <= rad_limit){ - if (model_block_val_[i] == BDL_MAX) - model_block_val_[i] = para_list.mod_value; //注意重复赋值的块体会覆盖 - else - model_block_val_[i] += para_list.mod_value; - model_added = true; - } + if (dist <= rad_limit){ + model_block_val_[i] = GCTL_BDL_MAX; //注意重复赋值的块体会覆盖 + model_added = true; } } - else if (!strcmp(para_list.val_type,"erase")){ - for (int i = 0; i < model_num_; i++){ - rel_x = model_cube_[i].cen.x - xc; - rel_y = model_cube_[i].cen.y - yc; - rel_z = model_cube_[i].cen.z - zc; - dist = sqrt(rel_x*rel_x + rel_y*rel_y + rel_z*rel_z); - - theta = acos(rel_z/dist); - phi = atan2(rel_y,rel_x); - - rad_limit = rad_x*rad_y*rad_z/sqrt(pow(rad_y*rad_z*sin(theta)*cos(phi),2) + pow(rad_x*rad_z*sin(theta)*sin(phi),2) + pow(rad_x*rad_y*cos(theta),2)); - - if (dist <= rad_limit){ - model_block_val_[i] = BDL_MAX; //注意重复赋值的块体会覆盖 - model_added = true; - } - } - } - else{ - cerr << BOLDRED << "error ==> " << RESET << "wrong value type: " << para_list.val_type << " of the model type: " << para_list.mod_type << endl; - return -1; - } - } - else{ - cerr << BOLDRED << "error ==> " << RESET << "fail to add blocks with the parameter: " << para_list.mod_para << endl; - return -1; } + else throw GM3D_INVALID_MODEL_VAL_TYPE; - if (!model_added){ - cerr << BOLDYELLOW << "warning ==> " << RESET << "no block changed with the parameter: " << para_list.mod_para << endl; - return -1; - } - return 0; + if (!model_added) + throw GM3D_NOMODEL_ADDED; + return; } \ No newline at end of file diff --git a/src/add_tilted_block.cpp b/src/add_tilted_block.cpp index 904548c..8093e73 100644 --- a/src/add_tilted_block.cpp +++ b/src/add_tilted_block.cpp @@ -1,6 +1,6 @@ #include "gm3d.h" -int GM3D::AddTiltedBlock(modelist para_list){ +void GM3D::AddTiltedBlock(modelist para_list){ double xs_1,xe_1,xmin_1,xmax_1; double xs_2,xe_2,xmin_2,xmax_2; double ys_1,ye_1,ymin_1,ymax_1; @@ -9,78 +9,77 @@ int GM3D::AddTiltedBlock(modelist para_list){ double zs,ze,zmin,zmax; bool model_added = false; - if (10 == sscanf(para_list.mod_para,"%lf/%lf/%lf/%lf/%lf/%lf/%lf/%lf/%lf/%lf", - &xs_1,&xe_1,&ys_1,&ye_1,&zs,&xs_2,&xe_2,&ys_2,&ye_2,&ze)){ - xmin_1 = MIN(xs_1,xe_1); xmax_1 = MAX(xs_1,xe_1); - ymin_1 = MIN(ys_1,ye_1); ymax_1 = MAX(ys_1,ye_1); - xmin_2 = MIN(xs_2,xe_2); xmax_2 = MAX(xs_2,xe_2); - ymin_2 = MIN(ys_2,ye_2); ymax_2 = MAX(ys_2,ye_2); - zmin = MIN(zs,ze); zmax = MAX(zs,ze); + std::stringstream tmp_ss; + gctl::str2ss(para_list.mod_para, tmp_ss, "/"); + tmp_ss >> xs_1 >> xe_1 >> ys_1 >> ye_1 >> zs + >> xs_2 >> xe_2 >> ys_2 >> ye_2 >> ze; - if (!strcmp(para_list.val_type,"replace")){ - for (int i = 0; i < model_num_; i++){ - //计算当前层的x与y范围 - layer_xmin = (model_cube_[i].cen.z - zmin)*(xmin_2 - xmin_1)/(zmax - zmin) + xmin_1; - layer_xmax = (model_cube_[i].cen.z - zmin)*(xmax_2 - xmax_1)/(zmax - zmin) + xmax_1; - layer_ymin = (model_cube_[i].cen.z - zmin)*(ymin_2 - ymin_1)/(zmax - zmin) + ymin_1; - layer_ymax = (model_cube_[i].cen.z - zmin)*(ymax_2 - ymax_1)/(zmax - zmin) + ymax_1; + if (tmp_ss.fail()) + throw GM3D_INVALID_MODEL_PARAMETER; - if (model_cube_[i].cen.x >= layer_xmin && model_cube_[i].cen.x <= layer_xmax && - model_cube_[i].cen.y >= layer_ymin && model_cube_[i].cen.y <= layer_ymax && - model_cube_[i].cen.z >= zmin && model_cube_[i].cen.z <= zmax){ + xmin_1 = GCTL_MIN(xs_1,xe_1); xmax_1 = GCTL_MAX(xs_1,xe_1); + ymin_1 = GCTL_MIN(ys_1,ye_1); ymax_1 = GCTL_MAX(ys_1,ye_1); + xmin_2 = GCTL_MIN(xs_2,xe_2); xmax_2 = GCTL_MAX(xs_2,xe_2); + ymin_2 = GCTL_MIN(ys_2,ye_2); ymax_2 = GCTL_MAX(ys_2,ye_2); + zmin = GCTL_MIN(zs,ze); zmax = GCTL_MAX(zs,ze); + + if (para_list.val_type == "replace") + { + for (int i = 0; i < model_num_; i++){ + //计算当前层的x与y范围 + layer_xmin = (model_cube_[i].cen.z - zmin)*(xmin_2 - xmin_1)/(zmax - zmin) + xmin_1; + layer_xmax = (model_cube_[i].cen.z - zmin)*(xmax_2 - xmax_1)/(zmax - zmin) + xmax_1; + layer_ymin = (model_cube_[i].cen.z - zmin)*(ymin_2 - ymin_1)/(zmax - zmin) + ymin_1; + layer_ymax = (model_cube_[i].cen.z - zmin)*(ymax_2 - ymax_1)/(zmax - zmin) + ymax_1; + + if (model_cube_[i].cen.x >= layer_xmin && model_cube_[i].cen.x <= layer_xmax && + model_cube_[i].cen.y >= layer_ymin && model_cube_[i].cen.y <= layer_ymax && + model_cube_[i].cen.z >= zmin && model_cube_[i].cen.z <= zmax){ + model_block_val_[i] = para_list.mod_value; //注意重复赋值的块体会覆盖 + model_added = true; + } + } + } + else if (para_list.val_type == "add") + { + for (int i = 0; i < model_num_; i++){ + //计算当前层的x与y范围 + layer_xmin = (model_cube_[i].cen.z - zmin)*(xmin_2 - xmin_1)/(zmax - zmin) + xmin_1; + layer_xmax = (model_cube_[i].cen.z - zmin)*(xmax_2 - xmax_1)/(zmax - zmin) + xmax_1; + layer_ymin = (model_cube_[i].cen.z - zmin)*(ymin_2 - ymin_1)/(zmax - zmin) + ymin_1; + layer_ymax = (model_cube_[i].cen.z - zmin)*(ymax_2 - ymax_1)/(zmax - zmin) + ymax_1; + + if (model_cube_[i].cen.x >= layer_xmin && model_cube_[i].cen.x <= layer_xmax && + model_cube_[i].cen.y >= layer_ymin && model_cube_[i].cen.y <= layer_ymax && + model_cube_[i].cen.z >= zmin && model_cube_[i].cen.z <= zmax){ + if (model_block_val_[i] == GCTL_BDL_MAX) model_block_val_[i] = para_list.mod_value; //注意重复赋值的块体会覆盖 - model_added = true; - } + else + model_block_val_[i] += para_list.mod_value; + model_added = true; } } - else if (!strcmp(para_list.val_type,"add")){ - for (int i = 0; i < model_num_; i++){ - //计算当前层的x与y范围 - layer_xmin = (model_cube_[i].cen.z - zmin)*(xmin_2 - xmin_1)/(zmax - zmin) + xmin_1; - layer_xmax = (model_cube_[i].cen.z - zmin)*(xmax_2 - xmax_1)/(zmax - zmin) + xmax_1; - layer_ymin = (model_cube_[i].cen.z - zmin)*(ymin_2 - ymin_1)/(zmax - zmin) + ymin_1; - layer_ymax = (model_cube_[i].cen.z - zmin)*(ymax_2 - ymax_1)/(zmax - zmin) + ymax_1; + } + else if (para_list.val_type == "erase") + { + for (int i = 0; i < model_num_; i++){ + //计算当前层的x与y范围 + layer_xmin = (model_cube_[i].cen.z - zmin)*(xmin_2 - xmin_1)/(zmax - zmin) + xmin_1; + layer_xmax = (model_cube_[i].cen.z - zmin)*(xmax_2 - xmax_1)/(zmax - zmin) + xmax_1; + layer_ymin = (model_cube_[i].cen.z - zmin)*(ymin_2 - ymin_1)/(zmax - zmin) + ymin_1; + layer_ymax = (model_cube_[i].cen.z - zmin)*(ymax_2 - ymax_1)/(zmax - zmin) + ymax_1; - if (model_cube_[i].cen.x >= layer_xmin && model_cube_[i].cen.x <= layer_xmax && - model_cube_[i].cen.y >= layer_ymin && model_cube_[i].cen.y <= layer_ymax && - model_cube_[i].cen.z >= zmin && model_cube_[i].cen.z <= zmax){ - if (model_block_val_[i] == BDL_MAX) - model_block_val_[i] = para_list.mod_value; //注意重复赋值的块体会覆盖 - else - model_block_val_[i] += para_list.mod_value; - model_added = true; - } + if (model_cube_[i].cen.x >= layer_xmin && model_cube_[i].cen.x <= layer_xmax && + model_cube_[i].cen.y >= layer_ymin && model_cube_[i].cen.y <= layer_ymax && + model_cube_[i].cen.z >= zmin && model_cube_[i].cen.z <= zmax){ + model_block_val_[i] = GCTL_BDL_MAX; //注意重复赋值的块体会覆盖 + model_added = true; } } - else if (!strcmp(para_list.val_type,"erase")){ - for (int i = 0; i < model_num_; i++){ - //计算当前层的x与y范围 - layer_xmin = (model_cube_[i].cen.z - zmin)*(xmin_2 - xmin_1)/(zmax - zmin) + xmin_1; - layer_xmax = (model_cube_[i].cen.z - zmin)*(xmax_2 - xmax_1)/(zmax - zmin) + xmax_1; - layer_ymin = (model_cube_[i].cen.z - zmin)*(ymin_2 - ymin_1)/(zmax - zmin) + ymin_1; - layer_ymax = (model_cube_[i].cen.z - zmin)*(ymax_2 - ymax_1)/(zmax - zmin) + ymax_1; + } + else throw GM3D_INVALID_MODEL_VAL_TYPE; - if (model_cube_[i].cen.x >= layer_xmin && model_cube_[i].cen.x <= layer_xmax && - model_cube_[i].cen.y >= layer_ymin && model_cube_[i].cen.y <= layer_ymax && - model_cube_[i].cen.z >= zmin && model_cube_[i].cen.z <= zmax){ - model_block_val_[i] = BDL_MAX; //注意重复赋值的块体会覆盖 - model_added = true; - } - } - } - else{ - cerr << BOLDRED << "error ==> " << RESET << "wrong value type: " << para_list.val_type << " of the model type: " << para_list.mod_type << endl; - return -1; - } - } - else{ - cerr << BOLDRED << "error ==> " << RESET << "fail to add blocks with the parameter: " << para_list.mod_para << endl; - return -1; - } - - if (!model_added){ - cerr << BOLDYELLOW << "warning ==> " << RESET << "no block changed with the parameter: " << para_list.mod_para << endl; - return -1; - } - return 0; + if (!model_added) + throw GM3D_NOMODEL_ADDED; + return; } \ No newline at end of file diff --git a/src/build_regular_grid.cpp b/src/build_regular_grid.cpp index 6d131ee..b199003 100644 --- a/src/build_regular_grid.cpp +++ b/src/build_regular_grid.cpp @@ -1,70 +1,77 @@ #include "gm3d.h" -int GM3D::BuildRegularGrid(char* space_para){ - cpoint temp_cp; +void GM3D::BuildRegularGrid(std::string modspace_para) +{ + vertex temp_cp; cube temp_cu; - string temp_id_str; double x,xs,dx,xe,xmin,xmax; double y,ys,dy,ye,ymin,ymax; double z,zs,dz,ze,zmin,zmax; double sign[8][3] = {{-0.5,-0.5,-0.5},{0.5,-0.5,-0.5},{0.5,0.5,-0.5},{-0.5,0.5,-0.5}, {-0.5,-0.5,0.5},{0.5,-0.5,0.5},{0.5,0.5,0.5},{-0.5,0.5,0.5}}; - _str2pointMap map_str_point; - _str2pointMap::iterator imsp; + str2vertMap map_str_point; + str2vertMap::iterator imsp; - if (9 == sscanf(space_para,"%lf/%lf/%lf/%lf/%lf/%lf/%lf/%lf/%lf", - &xs,&dx,&xe,&ys,&dy,&ye,&zs,&dz,&ze)){ - xmin = MIN(xs,xe); xmax = MAX(xs,xe); - ymin = MIN(ys,ye); ymax = MAX(ys,ye); - zmin = MIN(zs,ze); zmax = MAX(zs,ze); + string tmp_str; + string tmp_id_str; + stringstream tmp_ss; - temp_cu.dx = fabs(dx); temp_cu.dy = fabs(dy); temp_cu.dz = fabs(dz); - y = ys; - while(y >= ymin && y <= ymax){ - x = xs; - while(x >= xmin && x <= xmax){ - z = zs; - while(z >= zmin && z <= zmax){ - //添加denMod - temp_cu.cen.id = model_cube_.size(); - temp_cu.cen.x = x; temp_cu.cen.y = y; temp_cu.cen.z = z; - //添加mshVert - for (int i = 0; i < 8; i++){ - temp_cp.id = model_vert_.size(); //添加msh的顶点索引为mshVert的大小 - temp_cp.x = temp_cu.cen.x - sign[i][0]*temp_cu.dx; //左下底角 - temp_cp.y = temp_cu.cen.y - sign[i][1]*temp_cu.dy; - temp_cp.z = temp_cu.cen.z - sign[i][2]*temp_cu.dz; - temp_id_str = cpoint_id(temp_cp); - imsp = map_str_point.find(temp_id_str); - //利用map_vert查到当前顶点是否存在,这里需要注意,如果顶点已经存在则只需要将顶点索引置为已存在顶点的索引,不增加顶点计数 - if(imsp!=map_str_point.end()){ - temp_cu.ids[i] = imsp->second.id; - } - //若为新的顶点则将其增加到两个映射和一个链表中 - else{ - temp_cu.ids[i] = temp_cp.id;//新的顶点索引等于顶点集的数量 - model_vert_.push_back(temp_cp);//将新产生的顶点保存到顶点链表中 - map_str_point[temp_id_str] = temp_cp;//将新产生的顶点保存到顶点位置映射中 - } + gctl::str2ss(modspace_para, tmp_ss, "/"); + tmp_ss >> xs >> dx >> xe >> ys >> dy >> ye >> zs >> dz >> ze; + + if (tmp_ss.fail()) + throw GM3D_INVALID_MESH_PARAMETER; + + xmin = GCTL_MIN(xs,xe); xmax = GCTL_MAX(xs,xe); + ymin = GCTL_MIN(ys,ye); ymax = GCTL_MAX(ys,ye); + zmin = GCTL_MIN(zs,ze); zmax = GCTL_MAX(zs,ze); + temp_cu.dx = fabs(dx); + temp_cu.dy = fabs(dy); + temp_cu.dz = fabs(dz); + + y = ys; + while(y >= ymin && y <= ymax){ + x = xs; + while(x >= xmin && x <= xmax){ + z = zs; + while(z >= zmin && z <= zmax){ + //添加denMod + temp_cu.cen.id = model_cube_.size(); + temp_cu.cen.x = x; temp_cu.cen.y = y; temp_cu.cen.z = z; + //添加mshVert + for (int i = 0; i < 8; i++){ + temp_cp.id = model_vert_.size(); //添加msh的顶点索引为mshVert的大小 + temp_cp.x = temp_cu.cen.x - sign[i][0]*temp_cu.dx; //左下底角 + temp_cp.y = temp_cu.cen.y - sign[i][1]*temp_cu.dy; + temp_cp.z = temp_cu.cen.z - sign[i][2]*temp_cu.dz; + tmp_id_str = point_id(temp_cp); + imsp = map_str_point.find(tmp_id_str); + //利用map_vert查到当前顶点是否存在,这里需要注意,如果顶点已经存在则只需要将顶点索引置为已存在顶点的索引,不增加顶点计数 + if(imsp!=map_str_point.end()){ + temp_cu.ids[i] = imsp->second.id; + } + //若为新的顶点则将其增加到两个映射和一个链表中 + else{ + temp_cu.ids[i] = temp_cp.id;//新的顶点索引等于顶点集的数量 + model_vert_.push_back(temp_cp);//将新产生的顶点保存到顶点链表中 + map_str_point[tmp_id_str] = temp_cp;//将新产生的顶点保存到顶点位置映射中 } - model_cube_.push_back(temp_cu); - z += dz; } - x += dx; + model_cube_.push_back(temp_cu); + z += dz; } - y += dy; + x += dx; } + y += dy; } - if (model_cube_.empty()){ - cerr << BOLDRED << "error ==> " << RESET << "fail to initial model space with the parameter: " << space_para << endl; - return -1; - } + if (model_cube_.empty()) + throw GM3D_INVALID_MESH_PARAMETER; else{ vert_num_ = model_vert_.size(); model_num_ = model_cube_.size(); - model_block_val_.resize(model_num_,BDL_MAX); //初始化模型块体值为BDL_MAX + model_block_val_.resize(model_num_, GCTL_BDL_MAX); //初始化模型块体值为BDL_MAX } - return 0; + return; } \ No newline at end of file diff --git a/src/cpoint_id.cpp b/src/cpoint_id.cpp new file mode 100644 index 0000000..afde85e --- /dev/null +++ b/src/cpoint_id.cpp @@ -0,0 +1,20 @@ +#include "gm3d.h" + +//返回一个cpoint的位置id字符串 +string GM3D::point_id(vertex c){ + string vert_id, mid_id; + stringstream sstemp; + + sstemp.str(""); sstemp.clear(); sstemp<>vert_id; + + sstemp.str(""); sstemp.clear(); sstemp<>mid_id; + vert_id = vert_id + " " + mid_id; + + sstemp.str(""); sstemp.clear(); sstemp<>mid_id; + vert_id = vert_id + " " + mid_id; + + return vert_id; +} \ No newline at end of file diff --git a/src/disp_help.cpp b/src/disp_help.cpp deleted file mode 100644 index fa34431..0000000 --- a/src/disp_help.cpp +++ /dev/null @@ -1,329 +0,0 @@ -#include "disp_help.h" - -void DispHelp::addHeadInfo(string s1,string s2,string s3,string s4) -{ - ex_name = s1; version = s2; descript = s3; author = s4; - return; -} - -void DispHelp::addUsage(string usg) -{ - usages.push_back(usg); - return; -} - -void DispHelp::addOption(string msg,string sflag,string lflag) -{ - option tmp_option; - tmp_option.message = msg; tmp_option.flag_s = sflag; tmp_option.flag_l = lflag; - options.push_back(tmp_option); - return; -} - -void DispHelp::addOptionSec(string msg,int index) -{ - if (index < 0) - { - options.back().sec_message.push_back(msg); - } - else options[index].sec_message.push_back(msg); - return; -} - -void DispHelp::addExample(string ex) -{ - examples.push_back(ex); - return; -} - -void DispHelp::changeLayerOut(int left,int right) -{ - front_space = left; back_space = right; - return; -} - -void DispHelp::show() -{ - int line_length; - string segment,full_message; - stringstream ss_message; - //获取终端窗口的行列数 - struct winsize w; - ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); - //显示头信息 - full_message = ex_name + " " + version + " - " + descript; - ss_message.clear(); ss_message.str(full_message); - - line_length = front_space + back_space; - while(ss_message >> segment) - { - if ((line_length+segment.length()+1) <= w.ws_col) - { - if (line_length == (front_space + back_space)) - { - for (int i = 0; i < front_space; i++) clog << " "; - clog << segment << " "; - line_length += (segment.length()+1); - } - else - { - clog << segment << " "; - line_length += (segment.length()+1); - } - } - else - { - clog << endl; - for (int i = 0; i < front_space+4; i++) clog << " "; - clog << segment << " "; - line_length = (segment.length()+9+front_space+back_space); - } - } - clog << endl; - - ss_message.clear(); ss_message.str(author); - line_length = front_space + back_space;; - while(ss_message >> segment) - { - if ((line_length+segment.length()+1) <= w.ws_col) - { - if (line_length == (front_space + back_space)) - { - for (int i = 0; i < front_space; i++) clog << " "; - clog << "Author: " << segment << " "; - line_length += (segment.length()+9); - } - else - { - clog << segment << " "; - line_length += (segment.length()+1); - } - } - else - { - clog << endl; - for (int i = 0; i < front_space+4; i++) clog << " "; - clog << segment << " "; - line_length = (segment.length()+9+front_space+back_space); - } - } - clog << endl; - - if (!usages.empty()) - { - for (int i = 0; i < front_space; i++) clog << " "; - clog << "Usage:" << endl; - for (int i = 0; i < usages.size(); i++) - { - ss_message.clear(); ss_message.str(usages[i]); - - line_length = front_space + back_space + 4; - while(ss_message >> segment) - { - if ((line_length+segment.length()+1) <= w.ws_col) - { - if (line_length == (front_space+back_space+4)) - { - for (int i = 0; i < front_space+4; i++) clog << " "; - clog << segment << " "; - line_length += (segment.length()+1); - } - else - { - clog << segment << " "; - line_length += (segment.length()+1); - } - } - else - { - clog << endl; - for (int i = 0; i < front_space+9; i++) clog << " "; - clog << segment << " "; - line_length = (segment.length()+10+front_space+back_space); - } - } - clog << endl; - } - } - - if (!options.empty()) - { - for (int i = 0; i < front_space; i++) clog << " "; - clog << "Options:" << endl; - for (int i = 0; i < options.size(); i++) - { - if (options[i].flag_l == "") - { - full_message = options[i].flag_s+" : "+options[i].message; - ss_message.clear(); ss_message.str(full_message); - - line_length = front_space + back_space + 4; - while(ss_message >> segment) - { - if ((line_length+segment.length()+1) <= w.ws_col) - { - if (line_length == (front_space+back_space+4)) - { - for (int i = 0; i < front_space+4; i++) clog << " "; - clog << segment << " "; - line_length += (segment.length()+1); - } - else - { - clog << segment << " "; - line_length += (segment.length()+1); - } - } - else - { - clog << endl; - for (int i = 0; i < front_space+9; i++) clog << " "; - clog << segment << " "; - line_length = (segment.length()+10+front_space+back_space); - } - } - clog << endl; - - if (!options[i].sec_message.empty()) - { - for (int j = 0; j < options[i].sec_message.size(); j++) - { - ss_message.clear(); ss_message.str(options[i].sec_message[j]); - - line_length = front_space + back_space + 9; - while(ss_message >> segment) - { - if ((line_length+segment.length()+1) <= w.ws_col) - { - if (line_length == (front_space+back_space+9)) - { - for (int i = 0; i < front_space+9; i++) clog << " "; - clog << segment << " "; - line_length += (segment.length()+1); - } - else - { - clog << segment << " "; - line_length += (segment.length()+1); - } - } - else - { - clog << endl; - for (int i = 0; i < front_space+13; i++) clog << " "; - clog << segment << " "; - line_length = (segment.length()+14+front_space+back_space); - } - } - clog << endl; - } - } - } - else - { - full_message = options[i].flag_s+" | "+options[i].flag_l+" : "+options[i].message; - ss_message.clear(); ss_message.str(full_message); - - line_length = front_space + back_space + 4; - while(ss_message >> segment) - { - if ((line_length+segment.length()+1) <= w.ws_col) - { - if (line_length == (front_space+back_space+4)) - { - for (int i = 0; i < front_space+4; i++) clog << " "; - clog << segment << " "; - line_length += (segment.length()+1); - } - else - { - clog << segment << " "; - line_length += (segment.length()+1); - } - } - else - { - clog << endl; - for (int i = 0; i < front_space+9; i++) clog << " "; - clog << segment << " "; - line_length = (segment.length()+10+front_space+back_space); - } - } - clog << endl; - - if (!options[i].sec_message.empty()) - { - for (int j = 0; j < options[i].sec_message.size(); j++) - { - ss_message.clear(); ss_message.str(options[i].sec_message[j]); - - line_length = front_space + back_space + 9; - while(ss_message >> segment) - { - if ((line_length+segment.length()+1) <= w.ws_col) - { - if (line_length == (front_space+back_space+9)) - { - for (int i = 0; i < front_space+9; i++) clog << " "; - clog << segment << " "; - line_length += (segment.length()+1); - } - else - { - clog << segment << " "; - line_length += (segment.length()+1); - } - } - else - { - clog << endl; - for (int i = 0; i < front_space+13; i++) clog << " "; - clog << segment << " "; - line_length = (segment.length()+14+front_space+back_space); - } - } - clog << endl; - } - } - } - } - } - - if (!examples.empty()) - { - for (int i = 0; i < front_space; i++) clog << " "; - clog << "Examples:" << endl; - for (int i = 0; i < examples.size(); i++) - { - ss_message.clear(); ss_message.str(examples[i]); - - line_length = front_space + back_space + 4; - while(ss_message >> segment) - { - if ((line_length+segment.length()+1) <= w.ws_col) - { - if (line_length == (front_space+back_space+4)) - { - for (int i = 0; i < front_space+4; i++) clog << " "; - clog << segment << " "; - line_length += (segment.length()+1); - } - else - { - clog << segment << " "; - line_length += (segment.length()+1); - } - } - else - { - clog << endl; - for (int i = 0; i < front_space+9; i++) clog << " "; - clog << segment << " "; - line_length = (segment.length()+10+front_space+back_space); - } - } - clog << endl; - } - } - return; -} \ No newline at end of file diff --git a/src/disp_help.h b/src/disp_help.h deleted file mode 100644 index afa6ca3..0000000 --- a/src/disp_help.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef _DISPHELP_H -#define _DISPHELP_H -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "vector" - -using namespace std; - -typedef vector strArray; - -struct option -{ - string flag_s,flag_l; - string message; - strArray sec_message; - option() - { - flag_s = flag_l = message = ""; - } -}; -typedef vector