第三周工作总结

来源:互联网 发布:合肥市行知学校前身 编辑:程序博客网 时间:2024/05/14 07:40

# 第三周工作总结

这种的任务是实现两个表的对接:一个表的是SHREC13_SBR_Model.cla,一个表是SHREC13_SBR_Sketch_Test.cla,

两个表之间的连接点在于模型的名字,也是两者的共同点。-

**1.先将各自的数据都存入在结构体中**-

void getModelTraining(string filepath, std::vector<std::string>& p){ifstream testFile(filepath);if (!testFile){cout << "eorr:" << filepath << endl;}float feature;//存储每行的数据int sizeIntTemp;string temp;getline(testFile, temp);getline(testFile, temp);stringstream  stringin;while (!testFile.eof()){//m M;modelNode M;getline(testFile, temp);testFile >> temp; //nameif (temp.empty()){break;}M.Aname = temp;//cout << "name:" << M.Name << endl;testFile >> sizeIntTemp;//unKnowtestFile >> sizeIntTemp;//sizeM.Asize = sizeIntTemp;//cout << "size:" << M.msize << endl;for (int i = 0; i < sizeIntTemp; i++){testFile >> feature;M.Adata.push_back(feature);}for (vector<int>::size_type i = 0; i != (M.Adata.size() - 1); i++){//cout << "M.data:" << M.data[i] << endl;}oneModelTab.oneModel.push_back(M);}testFile.close();


**2.使用迭代器遍历结构体**-

typedef struct modelNode {string Aname;int Asize;vector<int> Adata;}Amodel;typedef struct ModelTable{vector<modelNode> oneModel;};ModelTable oneModelTab;ModelTable skecthTab;


**3.数据对接,如名字相同时,得到结构体内的数据**

        string model_name ;cout << "input your want model_name:" << endl;while (cin >> model_name){auto iter = skecthTab.oneModel.begin();for (; iter != skecthTab.oneModel.end(); ++iter){if (model_name == iter->Aname){cout << "model_name对应的图集:" << endl;for (int i = 0; i < iter->Asize; i++){cout << iter->Adata[i] << endl;}break;}}if (iter == skecthTab.oneModel.end()){cout << "没找到相同名字,重新输入:" << endl;continue;}break;}


**4.实现通过m.off找到它对应模型的草图**-

void  getTrainingSetImage( const string targetmesh, std::vector<std::string>& r){string AssetName ;string s1;//cout << targetmesh << "的图集是: " << endl;auto iter = skecthTab.oneModel.begin();for (; iter != skecthTab.oneModel.end(); ++iter){AssetName = iter->Aname;if (AssetName == targetmesh){for (int i = 0; i < iter->Asize; i++){//GetModelPng(sketchTesr);int aa = iter->Adata[i];char c[8];sprintf_s(c, "%d", aa);s1 = c;string imagePath = "F:/Sketch3D/Sketch3DToolkit-master/matlab/dataset/others/SHREC13_SBR_TESTING_SKETCHES/" + targetmesh + "/test/" + s1 + ".png" ;r.push_back(imagePath);//cout << "F:/Sketch3D/Sketch3DToolkit-master/matlab/dataset/others/SHREC13_SBR_TESTING_SKETCHES/" + targetmesh + "/test/" + s1 + ".png" << endl;//cout << imagePath << endl;}}}}

**5.实现单个模型分别存储得到的草图**-

这个函数跟下面的存储全部模型草图的方法差不多,只不过是模型名字不一致,一开始是通过模型的mxx.off来找到模型,再通过模型名字找到草图表中的对应模型的png图片

**6.存储全部模型的草图**

ViewIndexer view_indexer;unique_ptr<BatchMeshWindow> main_window_ptr = initGLContext();vector<ViewInfo> view_info_vector;
GetModelPng(sketchTesr);//sketchTesr是草图表
string target_mesh;std::vector<std::string> target;vector<std::string> target_sketch_vector; getModelTraining(ModelCla,target);//遍历SHREC13_SBR_Sketch_Test.cla,输入模型名字,便能得到模型名字对应的.png文件, for (auto i = target.begin(); i != target.end(); ++i) {  target_mesh = *i;//得到的所有模型的名字 getTrainingSetImage(target_mesh, target_sketch_vector);//将得到的模型路径传给target_sketch_vector for (auto iter = oneModelTab.oneModel.begin(); iter != oneModelTab.oneModel.end(); ++iter) { if (target_mesh == iter->Aname)  { for (int i = 0; i < iter->Asize; i++) { char c[8]; int aa = iter->Adata[i]; sprintf_s(c, "%d", aa);  s1 = c; target_mesh = "F:/Sketch3D/Sketch3DToolkit-master/matlab/dataset/SHREC13_SBR_TARGET_MODELS/models/m" + s1 + ".off"; cout << "[info]: Sampling mesh viewpoints." << endl; vector<ViewInfo> view_info_vector = sampleMeshViewpoints(target_mesh, *main_window_ptr); //生成草图的png图片和.xf文件(包含草图的顶点信息) }  } } }