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;
}
相关推荐
码匠许师傅13 分钟前
【设计模式精讲】29.行为型模式总结与对比(Behavioral Patterns Summary)
c++·设计模式·uml
啦啦啦啦啦zzzz1 小时前
Logger的组装(c++20)
c++·算法·c++20
彧azz2 小时前
Java学习语法篇:变量
java·学习
Yanjun2i2 小时前
Agent学习记录五:Pydantic验证
人工智能·python·学习
繁星蓝雨2 小时前
C++的设计与演进大纲(如何从C语言一步步成长为C++)
c语言·开发语言·c++·c++历史·c++演进
蒸蒸yyyyzwd3 小时前
机试学习笔记
c++·求职招聘
xqqxqxxq4 小时前
AI Agent学习:Agent协作工具技术笔记(李博杰《深入理解 AI Agent》4.6观后总结)
笔记·学习
白猫不黑4 小时前
大学网安方向学习路线:零基础与有基础的学习顺序整理
学习·web安全·计算机·网络安全·信息安全·编程·src漏洞
handler014 小时前
【Linux】线程与虚拟内存的底层世界
linux·运维·服务器·c++·线程·虚拟地址空间·共享内存
郝学胜-神的一滴4 小时前
C++11 工程级应用 09:告别无谓拷贝,解锁高性能移动语义
开发语言·数据结构·c++·vscode·软件工程·visual studio