主入口
判断文件是否有效
以及文件为文本或二进制

read(const char *chFile)
{bool bRet = false;FILE* fStl = fopen(chFile, "r");if (fStl == nullptr){return bRet;}unsigned long long nNumWhiteSpace = 0;unsigned char nWhiteSpace;if (fread(&nWhiteSpace, 1, 1, fStl) != 1){fclose(fStl);return bRet;}while(isspace(nWhiteSpace)){nNumWhiteSpace++;if (fread(&nWhiteSpace, 1, 1, fStl) != 1){fclose(fStl);return bRet;}}fseek(fStl, nNumWhiteSpace, SEEK_SET);char chBuffer[6];if (fread(chBuffer, 5, 1, fStl) != 1){fclose(fStl);return bRet;}fclose(fStl);chBuffer[5] = '\0';std::vector<SC_TRIANGLE> m_vecEmpty;m_vecEmpty.resize(0);m_vecTriangle.swap(m_vecEmpty);m_vecTriangle.clear();if (stringcasecompare(chBuffer, "solid") == 0){bool bLoadSuccess = readVertexTXT(chFile);if (!bLoadSuccess)return bRet;if (m_vecTriangle.size() < 1){bRet = readVertexBinary(chFile);return bRet;}return true;}bRet = readVertexBinary(chFile);return bRet;
}

读取文本格式

    FILE *fStl;int nRes = fopen_s(&fStl, chFile, "r");if (0 != nRes){return false;}char chGet[1024] = { '\0' };while (!feof(fStl)){fgets(chGet, 1024, fStl);if (sscanf_s(chGet, " vertex %f %f %f", &pointGet.x, &pointGet.y, &pointGet.z) == 3){n++;switch(n){case 1:pt1 = pointGet;break;case 2:pt2 = pointGet;break;case 3:pt3 = pointGet;break;}}}fclose(fStl);

读取二进制格式

{FILE *fStl = nullptr;int nRes = fopen_s(&fStl, chFile, "rb");if (0 != nRes){return false;}fseek(fStl, 0L, SEEK_END);long long file_size = ftell(fStl);rewind(fStl);size_t face_count = (file_size - 80 - sizeof(uint32_t)) / 50;char buffer[80];// Skip the headerif (fread(buffer, 80, 1, fStl) != 1){fclose(fStl);return false;}uint32_t nReportedFaceCount;// Read the face count. We'll use it as a sort of redundancy code to check for file corruption.if (fread(&nReportedFaceCount, sizeof(uint32_t), 1, fStl) != 1){fclose(fStl);return false;}if (nReportedFaceCount != face_count){//std::to_string(nReportedFaceCount).c_str(), std::to_string(face_count).c_str());}//For each face read://float(x,y,z) = normal, float(X,Y,Z)*3 = vertexes, uint16_t = flags// Every Face is 50 Bytes: Normal(3*float), Vertices(9*float), 2 Bytes Spacer//mesh->faces.reserve(face_count);//mesh->vertices.reserve(face_count);for (unsigned int i = 0; i < face_count; i++){if (fread(buffer, 50, 1, fStl) != 1){fclose(fStl);return false;}float *v= ((float*)buffer)+3;triangle.pt1.x = v[0];triangle.pt1.y = v[1];triangle.pt1.z = v[2];triangle.pt2.x = v[3];triangle.pt2.y = v[4];triangle.pt2.z = v[5];triangle.pt3.x = v[6];triangle.pt3.y = v[7];triangle.pt3.z = v[8];//Point3 v0 = matrix.apply(FPoint3(v[0], v[1], v[2]));//Point3 v1 = matrix.apply(FPoint3(v[3], v[4], v[5]));//Point3 v2 = matrix.apply(FPoint3(v[6], v[7], v[8]));//mesh->addFace(v0, v1, v2);m_vecTriangle.push_back(triangle);}fclose(fStl);return true;
}

STL 格式解析--文本以及二进制格式相关推荐

  1. mysql write rows_解析MYSQL BINLOG 二进制格式(5)--WRITE_ROW_EVENT

    展开阅读全文 原创:转载请说明出处谢谢! 上接 http://blog.itpub.net/7728585/viewspace-2133188/ 解析MYSQL BINLOG 二进制格式(1)--准备 ...

  2. mysql binlog解析 c_解析MYSQL BINLOG二进制格式(9)--infobin解析binlog帮助文档

    原创:转载请说明出处谢谢! 上接 http://blog.itpub.net/7728585/viewspace-2133188/ 解析MYSQL BINLOG 二进制格式(1)--准备工作 http ...

  3. 解析MYSQL BINLOG二进制格式(10)--问题解答

    原创转发请注明出处 上接 http://blog.itpub.net/7728585/viewspace-2133188/ 解析MYSQL BINLOG 二进制格式(1)--准备工作  http:// ...

  4. mysql binlog xid_解析MYSQL BINLOG 二进制格式(7)--Xid_log_event/XID_EVENT

    原创:转载请说明出处谢谢! 上接 http://blog.itpub.net/7728585/viewspace-2133188/ 解析MYSQL BINLOG 二进制格式(1)--准备工作 http ...

  5. mysql xid_解析MYSQL BINLOG 二进制格式(7)--Xid_log_event/XID_EVENT

    原创:转载请说明出处谢谢! 上接 http://blog.itpub.net/7728585/viewspace-2133188/ 解析MYSQL BINLOG 二进制格式(1)--准备工作 http ...

  6. 利用opengl+MFC读取并显示文本与二进制格式的stl

    一. 配置opengl与vs2015 参考:https://blog.csdn.net/qq_24990189/article/details/89631111 二.所有代码: // OpenGLVi ...

  7. mysql 二进制 存储格式化_解析MYSQL BINLOG 二进制格式(2)--FORMAT_DESCRIPTION_EVENT

    原创:转载请说明出处谢谢! 上接 http://blog.itpub.net/7728585/viewspace-2133188/ 参考源: 1.源码log_event.h log_event.cc ...

  8. 怎么把html格式转换成数字,Excel文本格式怎么转化成数字格式 excel文本转化数字格式教程...

    怎么将excel表格中的文本转化为数字格式呢?我们在使用excel表格的时候,数字格式的数据会更方便用户编辑,所以很多用户都会选择把文本格式转换为数字格式,具体如何操作大家请看下方的excel文本转化 ...

  9. mysql 二进制格式_解析MYSQL BINLOG 二进制格式(3)--QUERY_EVENT

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 FORMAT_DESCRIPTION_EVENT class:Query_log_event event:QUERY_EVENT event_code:0 ...

  10. mysql bin log 255_解析MYSQL BINLOG 二进制格式(4)--TABLE_MAP_EVENT

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 class:Table_map_log_event event:TABLE_MAP_EVENT event_code:19 本event只用于 row模式 ...

最新文章

  1. Docker是个啥?
  2. 应用程序文件Android安全分析挑战:运行时篡改Dalvik字节码
  3. 统计学习方法第十六章作业:PCA主成分分析算法 代码实现
  4. [Database] 数据库完整性
  5. 并行开发 —— 第六篇 异步编程模型
  6. 嵌入式Linux系统编程学习之三vi编辑器
  7. 是否有任何python库可以从自然语言中解析日期和时间?
  8. linux gd结构体,U-Boot中gd的定义和使用
  9. 解决树莓派的gpio口不能读取ds18b20的设备文件
  10. 阶段3 3.SpringMVC·_07.SSM整合案例_01.ssm整合说明
  11. 永磁直驱风机matlab模型,直驱永磁最大功率捕捉matlab仿真建模模型(风力发电)...
  12. c语言编写简单实用的小程序,C语言编写一个小程序
  13. RiskCloud-基于Markov算法精准的FTA、 JSA、FMEA软件
  14. R:应用时间序列分析--基于R(1)第一章 时间序列分析简介
  15. 【译文】人工智能给伦敦带来了它的大脑和经济收益
  16. java使用微博开发者api步骤
  17. 小鹤双拼鹤形教程-by小鹤双拼输入法QQ群友-45℃的回忆
  18. 如何让大学的青春少些遗憾!
  19. springboot找不到对象(自动注入失败)
  20. can差分线阻抗_为什么要进行阻抗匹配?

热门文章

  1. 模式识别与机器学习第四章特征选择和提取
  2. 6.11 如何在Excel自选图形中显示公式的数值 [原创Excel教程]
  3. WPF实现选项卡效果(1)——使用AvalonDock
  4. GP数据库(Greenplum)单机版安装
  5. Echarts绘制中国地图
  6. layui表格点击复制到剪切板
  7. 采集摄像头RGB565数据并转为bmp图像
  8. mac pdf去水印_mac如何去除视频水印
  9. 桌面图标整理工具(Fences Pro)
  10. 思科九年(转载自Internet)