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

运行如下;

相关推荐
汉克老师1 小时前
GESP2025年3月认证C++五级( 第三部分编程题(1、平均分配))
c++·算法·贪心算法·排序·gesp5级·gesp五级
智者知已应修善业4 小时前
【51单片机2个按键控制流水灯运行与暂停】2023-9-6
c++·经验分享·笔记·算法·51单片机
云泽8085 小时前
C++11 核心特性全解:列表初始化、右值引用与移动语义实战
开发语言·c++
AI进化营-智能译站6 小时前
ROS2 C++开发系列12-用多态与虚函数构建可扩展的ROS2机器人行为模块
开发语言·c++·ai·机器人
Morwit6 小时前
QML组件之间的通信方案(暴露子组件)
c++·qt·职场和发展
qeen876 小时前
【数据结构】建堆的时间复杂度讨论与TOP-K问题
c语言·数据结构·c++·学习·
图码7 小时前
如何用多种方法判断字符串是否为回文?
开发语言·数据结构·c++·算法·阿里云·线性回归·数字雕刻
handler017 小时前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
zhouwy1137 小时前
Linux进程与线程编程详解
linux·c++
A7bert7778 小时前
【YOLOv8pose部署至RDK X5】模型训练→转换bin→Sunrise 5部署
c++·python·深度学习·yolo·目标检测