本文简单介绍 Open Cascade Technology(OCCT),提供了下载地址和文档地址。通过OCCT的测试工具Draw,展示了OCCT的一些功能特性。介绍了OCCT集成开发的演示代码,提供了源代码下载地址和编译过程文件。
一、简介
Open Cascade Technology(OCCT),原名CAS.CADE,是由Open Cascade SAS开发和支持的三维CAD、CAM、CAE等的开源软件开发平台。自1999年作为开源CAD软件内核发布以来,OCCT已成功应用于从建筑、建筑到航空航天和汽车等众多项目。
OCCT是唯一一个开源的全尺寸三维几何库,是一个面向对象C++类库,用于快速开发设计领域的专业应用程序。OCCT致力于成为最好的免费cad软件内核之一。OCCT在LGPL-2.1许可证下可用,允许在开源和专有应用程序中使用。
OCCT主要用于开发二维和三维几何建模应用程序,是一个全面的B-Rep(边界表达)建模工具包。OCCT是为CAD、CAM、CAE快速开发程序而设计的面向对象的C++类库。可以使用OCCT来开发二维和三维的通用几何造型的计算机辅助设计程序CAD(Computer Aided Design),计算机辅助制造程序CAM(Computer Aided Manufacturing)和计算机辅助分析程序CAA(Computer Aided Analysis);仿真程序和绘图程序。OCCT库可以明显加快程序的开发进度。
一、OCCT的特点
开源性:OCCT是一个开源项目,其源代码公开且可自由使用、修改和分发。这使得开发者能够灵活地使用和定制,以满足特定的工程需求。
跨平台性:支持多种操作系统,包括Windows、Linux和Mac OS等。这使得开发者可以在不同的平台上开发和部署CAD应用程序,提高了软件的灵活性和可移植性。
模块化设计:采用模块化设计,将不同的功能划分为独立的模块。这种设计使得开发者可以根据需要选择使用哪些模块,降低了软件开发的复杂性和成本。
二、OCCT的功能
1、2D和3D几何造型工具箱,可对任何物体造型;
- 创建基本图元,如prism,cylinder, cone, torus;
- 对实体进行布尔操作,addition, subtraction and intersection;
- 根据倒圆、倒角、草图拉伸出几何实体;
- 使用偏移offsets、成壳shelling、挖空hollowing和挤压sweeps构造几何实体;
- 计算几何实体属性,如表面积、体积、重心、曲率半径;
- 使用插值interpolation、逼近approximation、投影projection计算出几何体;
2、 可视化功能提供对几何实体的显示、控制功能,例如:
- 三维旋转3D rotation;
- 缩放Zoom;
- 着色Shading;
3、 程序框架提供如下功能:
将非几何数据与几何实体关联;
- 参数化模型;
二、下载地址
最新代码及编译包: Download - Open CASCADE Technology
2025年6月最新版发布版 7.9.1
选择 Windows package and 3rd-party VC++ 2022 64 bit: occt-vc14-64-combined.zip
文档地址:
Open CASCADE Technology: Introduction
三、功能体验
下载occt-vc14-64-combined.zip后,解压。
在occt_vc14-64目录下有draw.bat、env.bat。
1、修改env.bat
在开头,添加一行代码
set PATH=%PATH%;E:\rep\occlib\3rdparty-vc14-64\tcltk-8.6.15-x64\bin
修改后env.bat如下:
echo off
set PATH=%PATH%;E:\rep\occlib\3rdparty-vc14-64\tcltk-8.6.15-x64\bin
set "SCRIPTROOT=%~dp0"
set "SCRIPTROOT=%SCRIPTROOT:~0,-1%"
rem ----- Reset values to defaults -----
set "VCVER=vc14"
set "ARCH=64"
set "CASDEB="
if not ["%1"] == [""] set "VCVER=%1"
if not ["%2"] == [""] set "ARCH=%2"
if /I ["%ARCH%"] == ["win32"] set "ARCH=32"
if /I ["%ARCH%"] == ["win64"] set "ARCH=64"
if /I ["%3"] == ["debug"] set "CASDEB=d"
if /I ["%3"] == ["d"] set "CASDEB=d"
if /I ["%3"] == ["i"] set "CASDEB=i"
if /I ["%3"] == ["relwithdeb"] set "CASDEB=i"
rem ----- Decode VCVER variable and define related ones -----
rem
rem VCFMT - "vc" followed by full version number of Visual Studio toolset
rem (same as VCVER without optional suffix "-uwp")
rem VCLIB - name of folder containing binaries
rem (same as VCVER except without third version in number)
rem VCPROP - name of required Visual Studion Workload (starting with VS 2017)
rem
rem Note that for VS before 2015 (vc14) always
rem VCFMT=VCLIB=VCVER and VCPROP=NativeDesktop
rem Since VS 2017, environment variables like VS100COMNTOOLS are not defined
rem any more, we can only use vswhere.exe tool to find Visual Studio.
rem Add path to vswhere.exe
if /I not "%VCFMT%" == "gcc" (
set "PATH=%PATH%;%ProgramFiles(x86)%\Microsoft Visual Studio\Installer"
)
rem for vc10-12, interpretation is trivial
set VCFMT=%VCVER%
set VCLIB=%VCVER:~0,4%
set VCPROP=NativeDesktop
rem vc14 and later can have optional suffix "-uwp"
if "%VCVER:~-4%" == "-uwp" (
set VCFMT=%VCVER:~0,-4%
set VCLIB=%VCLIB%-uwp
set VCPROP=Universal
)
rem echo VCVER=%VCVER% VCFMT=%VCFMT% VCLIB=%VCLIB% VCPROP=%VCPROP%
rem ----- Parsing of Visual Studio platform -----
set "VisualStudioExpressName=VCExpress"
if not "%DevEnvDir%" == "" (
rem If DevEnvDir is already defined (e.g. in custom.bat), use that value
) else if /I "%VCFMT%" == "vc9" (
set "DevEnvDir=%VS90COMNTOOLS%..\IDE"
) else if /I "%VCFMT%" == "vc10" (
set "DevEnvDir=%VS100COMNTOOLS%..\IDE"
) else if /I "%VCFMT%" == "vc11" (
set "DevEnvDir=%VS110COMNTOOLS%..\IDE"
rem Visual Studio Express starting from VS 2012 is called "for Windows Desktop"
rem and has a new name for executable - WDExpress
set "VisualStudioExpressName=WDExpress"
) else if /I "%VCFMT%" == "vc12" (
set "DevEnvDir=%VS120COMNTOOLS%..\IDE"
set "VisualStudioExpressName=WDExpress"
) else if /I "%VCFMT%" == "vc14" (
set "DevEnvDir=%VS140COMNTOOLS%..\IDE"
) else if /I "%VCFMT%" == "vc141" (
for /f "usebackq delims=" %%i in (`vswhere.exe -version "[15.0,15.99]" -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
set "DevEnvDir=%%i\Common7\IDE\"
)
) else if /I "%VCFMT%" == "vc142" (
for /f "usebackq delims=" %%i in (`vswhere.exe -version "[16.0,16.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
set "DevEnvDir=%%i\Common7\IDE\"
)
) else if /I "%VCFMT%" == "vc143" (
for /f "usebackq delims=" %%i in (`vswhere.exe -version "[17.0,17.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
set "DevEnvDir=%%i\Common7\IDE\"
)
) else if /I "%VCFMT%" == "gcc" (
rem MinGW
) else if /I "%VCFMT%" == "clang" (
rem clang
) else (
echo Error: wrong VS identifier
exit /B
)
rem ----- Parsing vcvarsall for qt samples and define PlatformToolset -----
if /I "%VCFMT%" == "vc9" (
set "VCVARS=%VS90COMNTOOLS%..\..\VC\vcvarsall.bat"
set "VCPlatformToolSet=v90"
) else if /I "%VCFMT%" == "vc10" (
set "VCVARS=%VS100COMNTOOLS%..\..\VC\vcvarsall.bat"
set "VCPlatformToolSet=v100"
) else if /I "%VCFMT%" == "vc11" (
set "VCVARS=%VS110COMNTOOLS%..\..\VC\vcvarsall.bat"
set "VCPlatformToolSet=v110"
) else if /I "%VCFMT%" == "vc12" (
set "VCVARS=%VS120COMNTOOLS%..\..\VC\vcvarsall.bat"
set "VCPlatformToolSet=v120"
) else if /I "%VCFMT%" == "vc14" (
set "VCVARS=%VS140COMNTOOLS%..\..\VC\vcvarsall.bat"
set "VCPlatformToolSet=v140"
) else if /I "%VCFMT%" == "vc141" (
for /f "usebackq delims=" %%i in (`vswhere.exe -version "[15.0,15.99]" -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
set "VCVARS=%%i\VC\Auxiliary\Build\vcvarsall.bat"
)
set "VCPlatformToolSet=v141"
) else if /I "%VCFMT%" == "vc142" (
for /f "usebackq delims=" %%i in (`vswhere.exe -version "[16.0,16.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
set "VCVARS=%%i\VC\Auxiliary\Build\vcvarsall.bat"
)
set "VCPlatformToolSet=v142"
) else if /I "%VCFMT%" == "vc143" (
for /f "usebackq delims=" %%i in (`vswhere.exe -version "[17.0,17.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
set "VCVARS=%%i\VC\Auxiliary\Build\vcvarsall.bat"
)
set "VCPlatformToolSet=v142"
) else if /I "%VCFMT%" == "gcc" (
rem MinGW
) else if /I "%VCFMT%" == "clang" (
rem clang
) else (
echo Error: first argument ^(%VCVER%^) should specify supported version of Visual C++,
echo one of: vc10 ^(VS 2010 SP3^), vc11 ^(VS 2012 SP3^), vc12 ^(VS 2013^) or vc14 ^(VS 2015^)
exit
)
rem ----- For compatibility with external application using CASROOT -----
if ["%CASROOT%"] == [""] set "CASROOT=%SCRIPTROOT%"
rem ----- Define path to 3rdparty products -----
if ["%THIRDPARTY_DIR%"] == [""] set "THIRDPARTY_DIR=../3rdparty-vc14-64"
if ["%ARCH%"] == ["32"] set VCARCH=x86
if ["%ARCH%"] == ["64"] set VCARCH=amd64
if /I ["%1"] == ["vc141"] set "VCVER=vc14"
if /I ["%1"] == ["vc142"] set "VCVER=vc14"
if /I ["%1"] == ["vc143"] set "VCVER=vc14"
if exist "%CASROOT%\custom.bat" (
call "%CASROOT%\custom.bat" %VCVER% %ARCH% %CASDEB%
)
if not ["%QTDIR%"] == [""] (
set "PATH=%QTDIR%/bin;%PATH%"
set "QT_PLUGIN_PATH=%QTDIR%/plugins"
)
if not ["%TCL_DIR%"] == [""] set "PATH=%TCL_DIR%;%PATH%"
if not ["%TK_DIR%"] == [""] set "PATH=%TK_DIR%;%PATH%"
if not ["%FREETYPE_DIR%"] == [""] set "PATH=%FREETYPE_DIR%;%PATH%"
if not ["%FREEIMAGE_DIR%"] == [""] set "PATH=%FREEIMAGE_DIR%;%PATH%"
if not ["%EGL_DIR%"] == [""] set "PATH=%EGL_DIR%;%PATH%"
if not ["%GLES2_DIR%"] == [""] set "PATH=%GLES2_DIR%;%PATH%"
if not ["%TBB_DIR%"] == [""] set "PATH=%TBB_DIR%;%PATH%"
if not ["%VTK_DIR%"] == [""] set "PATH=%VTK_DIR%;%PATH%"
if not ["%FFMPEG_DIR%"] == [""] set "PATH=%FFMPEG_DIR%;%PATH%"
if not ["%JEMALLOC_DIR%"] == [""] set "PATH=%JEMALLOC_DIR%;%PATH%"
if not ["%OPENVR_DIR%"] == [""] set "PATH=%OPENVR_DIR%;%PATH%"
rem ----- Set path to 3rd party and OCCT libraries -----
if not "%CSF_OCCTBinPath%" == "" (
set "PATH=%CSF_OCCTBinPath%;%PATH%"
)
if not ["%TK_DIR%"] == ["%TCL_DIR%"] (
if not ["%TK_DIR%"] == [""] set "TK_LIBRARY=%TK_DIR%/../lib/tk%TK_VERSION_WITH_DOT%"
if not ["%TCL_DIR%"] == [""] set "TCL_LIBRARY=%TCL_DIR%/../lib/tcl%TCL_VERSION_WITH_DOT%"
)
rem ----- Set envoronment variables used by OCCT -----
set CSF_LANGUAGE=us
set MMGT_CLEAR=1
set "CSF_SHMessage=%CSF_OCCTResourcePath%\SHMessage"
set "CSF_MDTVTexturesDirectory=%CSF_OCCTResourcePath%\Textures"
set "CSF_ShadersDirectory=%CSF_OCCTResourcePath%\Shaders"
set "CSF_XSMessage=%CSF_OCCTResourcePath%\XSMessage"
set "CSF_TObjMessage=%CSF_OCCTResourcePath%\TObj"
set "CSF_StandardDefaults=%CSF_OCCTResourcePath%\StdResource"
set "CSF_PluginDefaults=%CSF_OCCTResourcePath%\StdResource"
set "CSF_XCAFDefaults=%CSF_OCCTResourcePath%\StdResource"
set "CSF_TObjDefaults=%CSF_OCCTResourcePath%\StdResource"
set "CSF_StandardLiteDefaults=%CSF_OCCTResourcePath%\StdResource"
set "CSF_IGESDefaults=%CSF_OCCTResourcePath%\XSTEPResource"
set "CSF_STEPDefaults=%CSF_OCCTResourcePath%\XSTEPResource"
set "CSF_XmlOcafResource=%CSF_OCCTResourcePath%\XmlOcafResource"
set "CSF_MIGRATION_TYPES=%CSF_OCCTResourcePath%\StdResource\MigrationSheet.txt"
rem ----- Draw Harness special stuff -----
if exist "%CSF_OCCTResourcePath%\DrawResources" (
set "DRAWHOME=%CSF_OCCTResourcePath%\DrawResources"
set "CSF_DrawPluginDefaults=%CSF_OCCTResourcePath%\DrawResources"
if exist "%CSF_OCCTResourcePath%\DrawResources\DrawDefault" (
set "DRAWDEFAULT=%CSF_OCCTResourcePath%\DrawResources\DrawDefault"
)
)
2、执行draw.bat
draw 是OCCT的功能测试工具。启动后有两个窗口,如下图所示:
执行“View samples”
选择“Dimensions in 3d viewer”
点击按钮“Run sample”
其它功能:
四、集成开发示例
1、下载源代码
刘星老师开发的演示代码,Imgui+OCCT。
https://gitee.com/stoneold/OcctImgui
2、下载依赖包
选择 Windows package and 3rd-party VC++ 2022 64 bit: occt-vc14-64-combined.zip
解压路径:
OCCT 库: E:\rep\occlib\occt_vc14-64
OCCT 依赖的第三方库:E:/rep/occlib/3rdparty-vc14-64
3、CMake创建编译工程
修改CMakeList.txt
cmake_minimum_required(VERSION 3.15)
# Project configuration
project(OcctImgui LANGUAGES CXX)
# Set output directories
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/${CMAKE_BUILD_TYPE})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/${CMAKE_BUILD_TYPE})
# Include directories
find_package(OpenCASCADE REQUIRED PATHS E:/rep/occlib/occt_vc14-64/cmake)
file(GLOB_RECURSE SOURCES
"${CMAKE_SOURCE_DIR}/*.cpp"
"${CMAKE_SOURCE_DIR}/*.h"
)
# Exclude CMake-generated files from the SOURCES list
list(FILTER SOURCES EXCLUDE REGEX ".*CMakeFiles.*")
include_directories(E:/rep/occlib/3rdparty-vc14-64/glfw-3.4-x64/include)
# Add executable target
add_executable(OcctImgui ${SOURCES})
# Link libraries
target_link_libraries(OcctImgui
PRIVATE TKernel TKMath TKG2d TKG3d TKGeomBase TKGeomAlgo TKBRep TKTopAlgo TKPrim TKMesh TKService TKOpenGl TKV3d
)
target_link_libraries(OcctImgui
PRIVATE
E:/rep/occlib/3rdparty-vc14-64/glfw-3.4-x64/lib-vc2022/glfw3.lib
)
target_compile_options(OcctImgui PRIVATE
$<$<CONFIG:Debug>:-g>
$<$<CONFIG:Release>:-O3>
)
target_link_directories(OcctImgui PRIVATE
$<$<CONFIG:Debug>:${DEBUG_LIBS}>
$<$<CONFIG:Release>:${RELEASE_LIBS}>
)
# Debug environment variables (for Windows)
if(MSVC)
set(DEBUG_ENVS "PATH=%PATH%;E:/rep/occlib/occt_vc14-64/win64/vc14/bin;E:/rep/occlib/3rdparty-vc14-64/freeimage-3.18.0-x64/bin;E:/rep/occlib/3rdparty-vc14-64/openvr-1.14.15-64/bin/win64;E:/rep/occlib/3rdparty-vc14-64/ffmpeg-3.3.4-64/bin;E:/rep/occlib/3rdparty-vc14-64/tbb-2021.13.0-x64/bin;E:/rep/occlib/3rdparty-vc14-64/jemalloc-vc14-64/bin")
set_target_properties(OcctImgui PROPERTIES VS_DEBUGGER_ENVIRONMENT "${DEBUG_ENVS}")
endif()
注意:路径要正确
include_directories(E:/rep/occlib/3rdparty-vc14-64/glfw-3.4-x64/include)
target_link_libraries(OcctImgui
PRIVATE
E:/rep/occlib/3rdparty-vc14-64/glfw-3.4-x64/lib-vc2022/glfw3.lib
)
PATH=%PATH%;E:\rep\occlib\occt_vc14-64\win64\vc14\bin;E:\rep\occlib\3rdparty-vc14-64\freeimage-3.18.0-x64\bin;E:\rep\occlib\3rdparty-vc14-64\openvr-1.14.15-64\bin\win64;E:\rep\occlib\3rdparty-vc14-64\ffmpeg-3.3.4-64\bin;E:\rep\occlib\3rdparty-vc14-64\tbb-2021.13.0-x64\bin;E:\rep\occlib\3rdparty-vc14-64\jemalloc-vc14-64\bin
执行CMake-Gui.exe
4、配置vs 2022
五、参考资料
OCCT源代码 在gitee的镜像,不定期同步github。
https://gitee.com/stoneold/OCCT
刘星老师开发的演示代码,Imgui+OCCT。
https://gitee.com/stoneold/OcctImgui
https://zhuanlan.zhihu.com/p/448986691
【全网最完整】Open CASCADE Technology (OCCT) 构建项目,QT可视化操作,添加自定义测试内容-CSDN博客
有刘星老师推荐的学习教程