#include #include #include "graft_cv_api.h" #include "data_def.h" #include "data_def_api.h" #include "config.h" #include "optimal_angle.h" #include "cut_point_rs.h" #include "cut_point_sc.h" #include "logger.h" #include "utils.h" #include "imstorage_manager.h" extern CRITICAL_SECTION g_cs; namespace graft_cv { char *g_version_str = "0.5.9.20"; //configure string g_conf_file = "./gcv_conf.yml"; ConfigParam g_cp; //logger ofstream g_logger_ofs; CGcvLogger g_logger = CGcvLogger( g_logger_ofs, CGcvLogger::file_and_terminal, CGcvLogger::debug, "./gcv.log"); //image saver CImStoreManager* g_pImStore=0; //implement COptimalAnglePart g_oa = COptimalAnglePart(g_cp,&g_logger); CRootStockCutPoint g_rs_cp = CRootStockCutPoint(g_cp,&g_logger); CScionCutPoint g_sc_cp = CScionCutPoint(g_cp,&g_logger); //0 log path int cv_set_logpath(char*lpath) { try{ string mp = g_logger.getPath(); string np(lpath); if(mp==np){ return 0; } g_logger_ofs.close(); g_logger_ofs.open(lpath,ofstream::out | ofstream::app); string tmp = currTime() +" [WELCOME] ===========start logger===========\n"; g_logger_ofs<3){ g_logger.ERRORINFO("log level error: should in [0,1,2,3] 0-debug, 1-info, 2-warning, 3-error"); return 1; } try{ switch(lev){ case 0: g_logger.setLevel(CGcvLogger::debug); break; case 1: g_logger.setLevel(CGcvLogger::info); break; case 2: g_logger.setLevel(CGcvLogger::warning); break; case 3: g_logger.setLevel(CGcvLogger::error); break; default: g_logger.ERRORINFO("log level error: should in [0,1,2,3] 0-debug, 1-info, 2-warning, 3-error"); return 1; } return 0; } catch(...){ g_logger.ERRORINFO("set log level failed"); return 1; } } int cv_init_image_saver() { if( g_cp.image_save){ if(g_pImStore){ string folder; g_pImStore->getStoreDir(folder); if(folder!=g_cp.image_depository){ delete g_pImStore; g_pImStore = new CImStoreManager(); g_pImStore->setStoreDir(g_cp.image_depository); g_pImStore->setStoreDays(g_cp.image_backup_days); } } else{ g_pImStore = new CImStoreManager(); g_pImStore->setStoreDir(g_cp.image_depository); g_pImStore->setStoreDays(g_cp.image_backup_days); } } else{ if(g_pImStore){ delete g_pImStore; g_pImStore=0; } } g_oa.set_image_saver(&g_pImStore); g_rs_cp.set_image_saver(&g_pImStore); g_sc_cp.set_image_saver(&g_pImStore); return 0; } GCV_API int cv_release() { if(g_pImStore){ delete g_pImStore; g_pImStore = 0; } //DeleteCriticalSection(&g_cs); return 0; } //1 int cv_init(char*conf) { //InitializeCriticalSection(&g_cs); CGCvConfig conf_contrainer = CGCvConfig(); conf_contrainer.setConfParam(&g_cp); if(conf){ //read configures ifstream ifs(conf); if(!ifs.good()){return 1;} ifs.close(); memset(&g_cp,0,sizeof(ConfigParam)); FileStorage fs(conf, FileStorage::READ); conf_contrainer.read(fs["conf_parameters"]); fs.release(); g_conf_file = conf; } else{ ifstream ifs(g_conf_file); if(!ifs.good()){return 1;} ifs.close(); memset(&g_cp,0,sizeof(ConfigParam)); //read configures FileStorage fs(g_conf_file, FileStorage::READ); conf_contrainer.read(fs["conf_parameters"]); fs.release(); } string pinfo = get_cparam_info(&g_cp); g_logger.INFO(string("lib version: ")+string(g_version_str)); g_logger.INFO(string("load parameters:\n")+pinfo); return 0; }; //2 void cv_set_param(ConfigParam&cp) { g_cp = cp; string pinfo = get_cparam_info(&g_cp); g_logger.INFO(string("set parameters:\n")+pinfo); }; //3 void cv_save_param(char* conf_file/*=0*/) { //save configures CGCvConfig conf_contrainer = CGCvConfig(); conf_contrainer.setConfParam(&g_cp); if(conf_file){ FileStorage fs( conf_file, FileStorage::WRITE ); fs<<"conf_parameters"; fs<