MFC读取obj格式文件2

前文读取了obj格式文件中顶点相关的数量信息,下面读取显示obj格式文件中顶点相关的坐标信息;使用前面的立方体obj文件;

cpp 复制代码
void CObjtest2View::OnDraw(CDC* pDC)
{
	CObjtest2Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here

	CStdioFile file;
	CString strline;
	CString str1;
	int row=0,col=0;
 
	if(NULL != file.Open("cube1.obj", CFile::modeRead))
	{
		while (file.ReadString(strline))
		{
			if (strline[0] == 'v') {
				if (strline[1] == 'n') {//vn
					pDC->TextOut(75, 230, "法线:");
					for (int i=1; i<5; i++)
					{
						 AfxExtractSubString(str1, strline, i, ' ');
						 pDC->TextOut(50+(col+1)*100, 90 + row*20, str1);
						 col = col + 1;
					}
					row = row + 1;
					col = 0;
				}
				else if (strline[1] == 't') {//vt
					pDC->TextOut(75, 390, "UV坐标:");
					for (int i=1; i<5; i++)
					{
						 AfxExtractSubString(str1, strline, i, ' ');
						 pDC->TextOut(50+(col+1)*100, 130 + row*20, str1);
						 col = col + 1;
					}
					row = row + 1;
					col = 0;
				}
				else {//v
					pDC->TextOut(75, 30, "位置:");
					for (int i=1; i<5; i++)
					{
						 AfxExtractSubString(str1, strline, i, ' ');
						 pDC->TextOut(50+col*100, 50 + row*20, str1);
						 col = col + 1;
					}
					row = row + 1;
					col = 0;
				}
			}
 
			if (strline[0] == 'f') {
				//fNum++;
			}
		}
		file.Close();
	}
	else
	{
		AfxMessageBox("文件打开失败!");
	}
}

还是使用CStdioFile类打开文件;循环每次读取一行;根据一行的开头字符为 v/vt/vn ,分别进行处理;

使用 AfxExtractSubString(str1, strline, i, ' ') 从一行中取出单个字符串;第一个参数是本次取到的字符串,第二个参数是待分割的字符串,第三个参数是取的位置,第四个参数是分割用的字符,这里是用空格来分割;

运行如下;

相关推荐
肆忆_9 小时前
# 用 5 个问题学懂 C++ 虚函数(入门级)
c++
不想写代码的星星13 小时前
虚函数表:C++ 多态背后的那个男人
c++
端平入洛2 天前
delete又未完全delete
c++
端平入洛3 天前
auto有时不auto
c++
哇哈哈20214 天前
信号量和信号
linux·c++
多恩Stone4 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
蜡笔小马4 天前
21.Boost.Geometry disjoint、distance、envelope、equals、expand和for_each算法接口详解
c++·算法·boost
超级大福宝4 天前
N皇后问题:经典回溯算法的一些分析
数据结构·c++·算法·leetcode
weiabc4 天前
printf(“%lf“, ys) 和 cout << ys 输出的浮点数格式存在细微差异
数据结构·c++·算法
问好眼4 天前
《算法竞赛进阶指南》0x01 位运算-3.64位整数乘法
c++·算法·位运算·信息学奥赛