OCC 7.9.3 + VS2022 可编译、可运行的最简可视化窗口

背景

OCC 引擎Open CASCADE Technology(OCCT) ,是一款由法国 Matra Datavision 公司开发、开源的工业级三维几何建模 C++ 类库,广泛用于 CAD、CAE、CAM 及 3D 建模类软件开发。

核心定义与定位
  • 全称:Open CASCADE Technology(常简称为 OCC 或 OCCT)。
  • 本质 :面向对象的 C++ 软件库,非独立软件,是三维几何建模内核,为开发者提供底层几何与拓扑能力。
  • 定位:工业级开源几何引擎,曾为商用后开源,是 CAD/CAE/CAM 领域的核心基础组件。
核心功能
  1. 几何建模:支持 B-Rep(边界表示)建模、NURBS 曲线 / 曲面、基本几何体生成、布尔运算(加减交)、倒角 / 圆角 / 扫掠等高级操作。
  2. 数据交换:兼容 STEP、IGES、STL 等工业标准格式,实现跨软件模型互通。
  3. 可视化与网格:提供三维渲染显示,支持三角网格生成、离散化,适配仿真前处理与渲染需求。
  4. 拓扑处理:分离几何与拓扑结构,支持形状修复、精度控制,保障模型稳健性。
典型应用场景
  • CAD/CAM/CAE 软件:如 FreeCAD、Salome 等基于 OCC 构建。
  • 3D 打印:模型修复、布尔操作、切片处理。
  • 工业仿真:几何清理、网格生成、实体布尔运算。
  • 航空航天、汽车设计:复杂曲面与零件精准建模。
同类引擎简单对比
  • OCC(Open CASCADE):开源免费,功能强,生态大,C++
  • Parasolid:商用,非常强,UG、SolidWorks 内核,贵
  • ACIS:商用,C++,AutoCAD 系常用,贵
  • 其他轻量引擎:功能弱,不适合工业

结论:做工业 3D 开发,优先 OCC,成本最低、最稳。

(参考链接: https://blog.csdn.net/weixin_44153630/article/details/148479728

环境准备

首先进Open Cascade官网下载相关的开源库文件及三方库文件,最好直接下载最下面的包含 PCH(带调试功能)和第三方VC++ 2022 64 位版本的 Windows 软件包, 至少要下载Windows 软件包和第三方VC++ 2022 64 位版本,因为我们的电脑很可能缺少必须的三方库。

下载下来的是压缩包,直接免安装,马上直接在VS里面添加头文件、依赖库就可以了。

https://dev.opencascade.org/release

一、VS2022新建控制台运行程序,添加如下源码

cpp 复制代码
#pragma warning(disable:4996)

#include <windows.h>

#include <BRepPrimAPI_MakeBox.hxx>
#include <BRepPrimAPI_MakeCylinder.hxx>
#include <BRepAlgoAPI_Cut.hxx>
#include <TopoDS_Shape.hxx>
#include <gp_Pnt.hxx>
#include <gp_Ax2.hxx>

#include <AIS_InteractiveContext.hxx>
#include <AIS_Shape.hxx>
#include <V3d_View.hxx>
#include <V3d_Viewer.hxx>
#include <WNT_Window.hxx>
#include <Aspect_DisplayConnection.hxx>
#include <OpenGl_GraphicDriver.hxx>

TopoDS_Shape MakeShape()
{
    gp_Pnt pMin(0, 0, 0);
    gp_Pnt pMax(100, 100, 100);
    TopoDS_Shape box = BRepPrimAPI_MakeBox(pMin, pMax);

    gp_Ax2 cylAxis(gp_Pnt(50, 50, 0), gp_Dir(0, 0, 1));
    TopoDS_Shape cylinder = BRepPrimAPI_MakeCylinder(cylAxis, 20, 100);

    BRepAlgoAPI_Cut cut(box, cylinder);
    cut.Build();
    return cut.Shape();
}

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int)
{
    HWND hwnd = CreateWindowA("STATIC", "OCC 3D 窗口",
        WS_OVERLAPPEDWINDOW, 100, 100, 1000, 800, NULL, NULL, hInst, NULL);
    ShowWindow(hwnd, SW_SHOW);

    Handle(Aspect_DisplayConnection) disp = new Aspect_DisplayConnection();
    Handle(OpenGl_GraphicDriver) driver = new OpenGl_GraphicDriver(disp);

    Handle(V3d_Viewer) viewer = new V3d_Viewer(driver);
    Handle(V3d_View) view = viewer->CreateView();
    Handle(WNT_Window) wnd = new WNT_Window(hwnd);
    view->SetWindow(wnd);

    if (!wnd->IsMapped())
        wnd->Map();

    Handle(AIS_InteractiveContext) ctx = new AIS_InteractiveContext(viewer);
    Handle(AIS_Shape) shape = new AIS_Shape(MakeShape());
    ctx->Display(shape, Standard_True);
    view->FitAll();
    view->Redraw();

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
        view->Redraw();
    }
    return 0;
}

二、解决 "找不到 tbb12.dll"(最关键)

把下面两个目录里的 全部 DLL 复制到你的项目输出目录(如 x64\Debug):

  1. OCC 自身 DLL

    复制代码
    D:\soft\opencascade-7.9.3-vc14-64\opencascade-7.9.3\win64\vc14\bin\
  2. TBB 依赖 DLL(含 tbb12.dll)

    复制代码
    D:\soft\opencascade-7.9.3-vc14-64\tbb\vc14\bin\

复制完这两个文件夹的所有 .dll 到你的 .exe 旁边,F5 就不会再报缺少 tbb12.dll

三、VS 项目配置(你已经配过,再核对一遍)

  • C/C++ → 常规 → 附加包含目录

    复制代码
    D:\soft\opencascade-7.9.3-vc14-64\opencascade-7.9.3\inc
  • 链接器 → 常规 → 附加库目录

    复制代码
    D:\soft\opencascade-7.9.3-vc14-64\opencascade-7.9.3\win64\vc14\lib
  • 链接器 → 输入 → 附加依赖项(至少这些)

复制代码
  TKernel.lib
  TKMath.lib
  TKBRep.lib
  TKTopAlgo.lib
  TKGeomBase.lib
  TKGeomAlgo.lib
  TKPrim.lib
  TKBO.lib
  TKV3d.lib
  TKOpenGl.lib
  TKService.lib

四、那个 C4996 警告(Handle 废弃)

在你的 .cpp 最顶部加一行:

复制代码
#pragma warning(disable:4996)

就不会再报 Handle_Graphic3d_CLight 废弃警告。

五、现在 F5 运行

成功弹出 3D 窗口,但是说是可以进行如下操作,但是我的却没有反应,还不知道为什么。并且后续还可以给模型上色、做圆角、打开 STEP 文件等操作,先记录到这里。

  • 左键拖动:旋转模型
  • 滚轮:缩放
  • 右键拖动:平移
相关推荐
551只玄猫18 小时前
【数学建模 matlab 实验报告13】主成分分析
开发语言·数学建模·matlab·课程设计·主成分分析
热心网友俣先生1 天前
2026年认证杯赛题浅析
数学建模
Pelb1 天前
求导 z = (x + y)^2
人工智能·深度学习·数学建模
AI科技星1 天前
全维度相对论推导、光速螺旋时空与北斗 GEO 钟差的统一理论
开发语言·线性代数·算法·机器学习·数学建模
佳木逢钺1 天前
太宗多维评估模型:用50个变量数学建模唐太宗,探索历史与AI的跨界融合
人工智能·数学建模
嵌入式冰箱1 天前
2026 年“认证杯”数学中国数学建模网络挑战赛--C 题智能增材制造
c语言·数学建模·制造
551只玄猫1 天前
【数学建模 matlab 实验报告12】聚类分析和判别分析
开发语言·数学建模·matlab·课程设计·聚类·实验报告
Allen_LVyingbo2 天前
量子计算Dirac Notation基本教学—从零基础到读懂量子信息论文(下)
开发语言·人工智能·python·数学建模·量子计算
AI科技星2 天前
基于四维速率恒为c公设的北斗GEO卫星昼夜钟差模型修正与实测验证
开发语言·人工智能·线性代数·算法·数学建模