第三周工作总结

# 第三周工作总结

这种的任务是实现两个表的对接:一个表的是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; //name
		if (temp.empty())
		{
			break;
		}
		M.Aname = temp;
		//cout << "name:" << M.Name << endl;

		testFile >> sizeIntTemp;	//unKnow
								
		testFile >> sizeIntTemp;	//size
		M.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文件(包含草图的顶点信息)
				 }
				 
			 }
			
		 }
		
	 }


 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值