• 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

    安装完成后,把除了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

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include
    10. #define vtkNewMember(Var, Type) \
    11. if (Var) \
    12. { \
    13. Var->Delete(); \
    14. } \
    15. Var = Type::New();
    16. void MainWindow::on_pushButton_stp_clicked()
    17. {
    18. QString file = QFileDialog::getOpenFileName(this, QStringLiteral("打开IGES/STEP文件"), ".", "*.step;; *.iges");
    19. if (!file.isEmpty())
    20. {
    21. TopoDS_Shape shape;
    22. if (file.endsWith("step"))
    23. {
    24. STEPControl_Reader reader;
    25. IFSelect_ReturnStatus stat = reader.ReadFile(file.toUtf8().data());
    26. if (stat != IFSelect_RetDone)
    27. {
    28. return;
    29. }
    30. reader.TransferRoots();
    31. shape = reader.OneShape();
    32. }
    33. else if (file.endsWith("iges"))
    34. {
    35. IGESControl_Reader reader;
    36. reader.ReadFile(file.toUtf8().data());
    37. reader.TransferRoots();
    38. shape = reader.OneShape();
    39. }
    40. StlAPI_Writer writer;
    41. const Standard_Real deflection = 0.1;
    42. BRepMesh_IncrementalMesh(shape,deflection,Standard_True);
    43. Standard_Boolean ret = writer.Write(shape, "output.stl");
    44. if (!ret)
    45. {
    46. return;
    47. }
    48. vtkNewMember(mSTPSTLReader, vtkSTLReader);
    49. mSTPSTLReader->SetFileName("output.stl");
    50. mSTPSTLReader->Update();
    51. vtkNewMember(mSTPSTLMapper, vtkPolyDataMapper);
    52. mSTPSTLMapper->SetInputData(mSTPSTLReader->GetOutput());
    53. if (mSTPSTLRenderer && mSTPSTLActor)
    54. {
    55. mSTPSTLRenderer->RemoveActor(mSTPSTLActor);
    56. ui->widget_stp->GetRenderWindow()->RemoveRenderer(mSTPSTLRenderer);
    57. }
    58. vtkNewMember(mSTPSTLActor, vtkActor);
    59. mSTPSTLActor->SetMapper(mSTPSTLMapper);
    60. vtkNewMember(mSTPSTLRenderer, vtkRenderer);
    61. mSTPSTLRenderer->AddActor(mSTPSTLActor);
    62. mSTPSTLRenderer->SetBackground(0.1, 0.2, 0.3);
    63. ui->widget_stp->GetRenderWindow()->AddRenderer(mSTPSTLRenderer);
    64. ui->widget_stp->GetRenderWindow()->Render();
    65. }
    66. }
  • 相关阅读:
    粒子群算法求解0-1背包问题
    ISC技术分享:从BAS视角看积极防御体系实践
    rust从0开始写项目-读取配置文件
    PHP 服装销售管理系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp
    MySQL表的增删改查初阶(上篇)
    【炫丽】从0开始做一个WPF+Blazor对话小程序
    【Java 进阶篇】创建 HTML 注册页面
    <leetcode>35.搜索插入位置——二分法
    人工智能知识全面讲解:线性支持向量机
    Spring【IOC+AOP】待完善....勿看
  • 原文地址:https://blog.csdn.net/mabing993/article/details/132943125