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

安装完成后,把除了qt和vtk的文件夹的bin都加到环境变量,在不同的电脑有可能openvr没被自动安装,需要下载然后win64的bin加环境变量
GitHub - ValveSoftware/openvr: OpenVR SDK
https://github.com/ValveSoftware/openvr


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


- #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();
- }
- }