当前位置: 首页 > news >正文

Occt几何内核快速入门

本文简单介绍 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=NativeDesktoprem 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%-uwpset 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 - WDExpressset "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 identifierexit /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=amd64if /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博客

有刘星老师推荐的学习教程

OpenCASCADE入门指南 - opencascade - 博客园

http://www.lqws.cn/news/465409.html

相关文章:

  • Duende Identity Server学习之一:认证服务器及一个Oidc/OAuth认证、用于Machine 2 Machine的客户端
  • 在Docker、KVM、K8S常见主要命令以及在Centos7.9中部署的关键步骤学习备存
  • stm32移植freemodbus
  • C++ - vector 的使用
  • 【转】如何画好架构图:架构思维的三大底层逻辑
  • 使用 R 处理图像
  • SQL Server基础语句2:表连接与集合操作、子查询与CET、高级查询
  • 计算机网络第九章——数据链路层《流量控制和可靠传输》
  • 为WIN10微软输入法的全角切换Bug禁用Shift+Space组合键
  • 在 MyBatis 的xml中,什么时候大于号和小于号可以不用转义
  • Nginx+Tomcat负载均衡、动静分离
  • keep-alive实现原理及Vue2/Vue3对比分析
  • 1.20.1 服务器系统(windows,Rocky 和 Ubuntu )体验
  • 语法糖:编程中的甜蜜简化 (附 Vue 3 Javascript 实战示例)
  • 服务发现与动态负载均衡的结合
  • Java、PHP、C++ 三种语言实现爬虫的核心技术对比与示例
  • day44-硬件学习之arm启动代码
  • css上下滚动文字
  • 博图SCL语言GOTO语句深度解析:精准跳转
  • 第三章 线性回归与感知机
  • FastGPT:开启大模型应用新时代(4/6)
  • 使用 Telegraf 向 TDengine 写入数据
  • 升级到 .NET 9 分步指南
  • 软件工程概述:核心概念、模型与方法全解析
  • 以智能管控削减能耗开支,楼宇自控系统激活建筑运营价值增量
  • MolyCamCCD复古胶片相机:复古质感,时尚出片
  • maxcomputer 和 hologres中的EXTERNAL TABLE 和 FOREIGN TABLE
  • LeetCode-2390. 从字符串中移除星号
  • 力扣网C语言编程题:多数元素
  • DAY 38 Dataset和Dataloader类