OpenCascade & VTK STEP/IGES文件读取显示

OpenCascade & VTK STEP/IGES文件读取显示,OpenCascade读取转成STL,VTK显示STL。

Download - Open CASCADE Technology
https://dev.opencascade.org/release

下载exe并安装,可以把source下载下来学习,官网速度慢,可到网盘下载

链接:https://pan.baidu.com/s/1_ARH9jRMPxO_GWNWXT64fw 
提取码:zyes

OpenCascade & VTK STEP/IGES文件读取显示_第1张图片

安装完成后,把除了qt和vtk的文件夹的bin都加到环境变量,在不同的电脑有可能openvr没被自动安装,需要下载然后win64的bin加环境变量

GitHub - ValveSoftware/openvr: OpenVR SDK
https://github.com/ValveSoftware/openvr

OpenCascade & VTK STEP/IGES文件读取显示_第2张图片

OpenCascade & VTK STEP/IGES文件读取显示_第3张图片

pro添加

INCLUDEPATH += C:/OpenCASCADE-7.7.0-vc14-64/opencascade-7.7.0/inc
LIBS += C:/OpenCASCADE-7.7.0-vc14-64/opencascade-7.7.0/win64/vc14/lib/*.lib

基于OCC,将IGES模型文件转换为STL,进而在VTK中显示。网上别的一般都是错的。-CSDN博客
https://blog.csdn.net/hbwhzc/article/details/131571397

GitHub - Jelatine/JellyCAD: The simple CAD software which is based on OCC.
https://github.com/Jelatine/JellyCAD

Open Cascade Data Exchange --- STL - eryar - C++博客
http://www.cppblog.com/eryar/archive/2013/05/01/199882.aspx

OpenCascade & VTK STEP/IGES文件读取显示_第4张图片

OpenCascade & VTK STEP/IGES文件读取显示_第5张图片

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define vtkNewMember(Var, Type) \
    if (Var) \
    { \
        Var->Delete(); \
    } \
    Var = Type::New();

void MainWindow::on_pushButton_stp_clicked()
{
    QString file = QFileDialog::getOpenFileName(this, QStringLiteral("打开IGES/STEP文件"), ".", "*.step;; *.iges");
    if (!file.isEmpty())
    {
        TopoDS_Shape shape;
        if (file.endsWith("step"))
        {
            STEPControl_Reader reader;
            IFSelect_ReturnStatus stat = reader.ReadFile(file.toUtf8().data());
            if (stat != IFSelect_RetDone)
            {
                return;
            }
            reader.TransferRoots();
            shape = reader.OneShape();
        }
        else if (file.endsWith("iges"))
        {
            IGESControl_Reader reader;
            reader.ReadFile(file.toUtf8().data());
            reader.TransferRoots();
            shape = reader.OneShape();
        }

        StlAPI_Writer writer;
        const Standard_Real deflection = 0.1;
        BRepMesh_IncrementalMesh(shape,deflection,Standard_True);
        Standard_Boolean ret = writer.Write(shape, "output.stl");
        if (!ret)
        {
            return;
        }

        vtkNewMember(mSTPSTLReader, vtkSTLReader);
        mSTPSTLReader->SetFileName("output.stl");
        mSTPSTLReader->Update();

        vtkNewMember(mSTPSTLMapper, vtkPolyDataMapper);
        mSTPSTLMapper->SetInputData(mSTPSTLReader->GetOutput());

        if (mSTPSTLRenderer && mSTPSTLActor)
        {
            mSTPSTLRenderer->RemoveActor(mSTPSTLActor);
            ui->widget_stp->GetRenderWindow()->RemoveRenderer(mSTPSTLRenderer);
        }
        vtkNewMember(mSTPSTLActor, vtkActor);
        mSTPSTLActor->SetMapper(mSTPSTLMapper);

        vtkNewMember(mSTPSTLRenderer, vtkRenderer);
        mSTPSTLRenderer->AddActor(mSTPSTLActor);
        mSTPSTLRenderer->SetBackground(0.1, 0.2, 0.3);
        ui->widget_stp->GetRenderWindow()->AddRenderer(mSTPSTLRenderer);
        ui->widget_stp->GetRenderWindow()->Render();
    }
}

你可能感兴趣的:(qt)