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, ' ') 从一行中取出单个字符串;第一个参数是本次取到的字符串,第二个参数是待分割的字符串,第三个参数是取的位置,第四个参数是分割用的字符,这里是用空格来分割;

运行如下;

相关推荐
.千余34 分钟前
【C++】手写双向链表:list容器模拟实现
开发语言·c++·笔记·学习·其他
liulilittle1 小时前
过冲:拥塞控制的呼吸与盲行
linux·网络·c++·tcp/ip·计算机网络·tcp·通信
小欣加油1 小时前
leetcode2574 左右元素和的差值
数据结构·c++·算法·leetcode·职场和发展
weixin_461769402 小时前
通过数组和队列构造二叉树方法(用于算法测试),C++ vector不能直接使用null
数据结构·c++·算法·vector·nullptr·null
千寻girling2 小时前
一周没跑步了 ,今日跑步 5KM , 哑铃+健身 20min , 俯卧撑 30 个 ;
数据结构·c++·python·算法·leetcode·职场和发展·线性回归
坚果派·白晓明2 小时前
鸿蒙PC三方库使用:使用 AtomCode + Skills 自动完成鸿蒙化三方库spdlog集成
c++·华为·ai编程·harmonyos·skills·atomcode·c/c++三方库
玖玥拾2 小时前
C/C++ 基础笔记(九)联合、枚举及文件操作
c语言·c++·文件操作·枚举·联合
liulilittle2 小时前
拥塞控制:公平性的不可能三角
网络·c++·网络协议·tcp/ip·计算机网络·tcp·通信
姚愚谦4 小时前
C++中的push_back与emplace_back的区别?
c++
青春:一叶知秋5 小时前
【C++】protobuf序列化与反序列化
开发语言·c++