Open CASCADE学习| 打开文件

实现打开*.step;*.iges;*.stl;*.brep等格式文件。

这段代码定义了一个名为Open_File的函数,该函数接受一个QString类型的参数filename,并返回一个TopoDS_Shape类型的对象。

函数首先创建一个空的TopoDS_Shape对象shape,然后根据文件名的后缀名调用不同的读取器来读取文件内容,并将读取到的形状数据存储在shape中。

如果文件名以"step"结尾,则使用STEPControl_Reader类来读取文件内容。如果读取失败(即stat不等于IFSelect_RetDone),则函数直接返回一个空的TopoDS_Shape对象。否则,调用TransferRoots()方法和OneShape()方法获取读取到的形状数据,并将其存储在shape中。

如果文件名以"iges"结尾,则使用IGESControl_Reader类来读取文件内容。同样地,如果读取失败,则函数直接返回一个空的TopoDS_Shape对象。否则,调用TransferRoots()方法和OneShape()方法获取读取到的形状数据,并将其存储在shape中。

如果文件名以"stl"结尾,则使用StlAPI_Reader类来读取文件内容。调用Read()方法将读取到的形状数据存储在shape中。

如果文件名以"brep"结尾,则使用BRep_Builder类和BRepTools::Read()函数来读取文件内容。调用Read()方法将读取到的形状数据存储在shape中。

最后,函数返回shape对象。

cpp 复制代码
TopoDS_Shape Open_File(const QString filename)
{
    TopoDS_Shape shape;
    if (filename.endsWith("step"))
    {
        STEPControl_Reader reader;
        IFSelect_ReturnStatus stat = reader.ReadFile(filename.toUtf8().data());
        if (stat != IFSelect_RetDone)
        {
            //return;
        }
        reader.TransferRoots();
        shape = reader.OneShape();
    }
    else if (filename.endsWith("iges"))
    {
        IGESControl_Reader reader;
        reader.ReadFile(filename.toUtf8().data());
        reader.TransferRoots();
        shape = reader.OneShape();
    }
    else if (filename.endsWith("stl"))
    {
        StlAPI_Reader reader;
        reader.Read(shape, filename.toUtf8().data());
    }
    else  if (filename.endsWith("brep"))
    {
        BRep_Builder builder_Brep;
        BRepTools::Read(shape, filename.toUtf8().data(), builder_Brep);
    }
    return shape;
}
相关推荐
愚润求学5 分钟前
【专题刷题】二分查找(一):深度解刨二分思想和二分模板
开发语言·c++·笔记·leetcode·刷题
tanyongxi668 分钟前
手撕C++STL list:深入理解双向链表的实现
开发语言·c++·链表
岩中竹8 分钟前
力扣热题100题解(c++)—矩阵
数据结构·c++·程序人生·算法·leetcode·矩阵
YuforiaCode8 分钟前
第十五届蓝桥杯 2024 C/C++组 拼正方形
c语言·c++·蓝桥杯
啊阿狸不会拉杆10 分钟前
数据结构-图
java·c语言·数据结构·c++·python·算法·图论
努力奋斗的小杨44 分钟前
学习MySQL的第十一天
数据库·笔记·sql·学习·mysql·navicat
双叶8361 小时前
(51单片机)LCD展示动画(延时函数)(LLCD1602教程)
c语言·数据库·c++·单片机·嵌入式硬件·51单片机
愚润求学1 小时前
【数据结构】哈希表
数据结构·c++·笔记·散列表
weixin_457885821 小时前
Discuz!+DeepSeek:传统论坛的智能化蜕变之路
人工智能·学习·discuz·deepseek
倔强的石头1062 小时前
【C++指南】位运算知识详解
java·开发语言·c++