Open CASCADE Technology (OCCT) 是一个功能强大的开源 C++ 库,由数千个类组
成,并提供以下领域的解决方案:
您可以通过以下方式获取 Open CASCADE Technology:
从源码构建 OCCT 涉及几个步骤:
对象库分为模块:
使用不同 GUI 的编程示例:
必修知识:
一些算法具有并行模式:
使用简单的对象可以获得更好的性能:
利用数据共享。这种技术称为实例化:
尽量保持渲染批次的数量尽可能少:
Draw 是OCCT的基本测试工具。它提供:
DRAWEXE 提供了一个用于从插件库加载新命令的接口。技术模块中定义的绘
制命令被组织到此类插件中,并且可以通过运行 pload 命令加载到 DRAWEXE。
pload [-PluginResourceFile] [Key1] [key2] …
Draw 插件的默认资源文件是 %CASROOT%/src/DrawResources/DrawPlugin,它
收集所有标准插件的定义。为了加载所有标准绘图命令,请运行:
Draw[1]> pload ALL
命令由一个或多个单词组成:第一个单词是命令的名称,其他单词是参数。单词之间用空格或制表符分隔。以下命令构造一个盒子:
Draw[1]> box b 10 10 10
命令由换行符或分号分隔:
Draw[1]> box b 10 10 10; fit
可以使用 source命令从文件中读取命令:
Draw[1]> source myscript.txt
help 命令提供有关命令的帮助:
Draw[1]> help [command]
exit命令终止程序执行:
Draw[1]> exit
source 命令从文件中读取命令:
Draw[1]> source box
directory 命令用于返回与模式匹配的所有绘制全局变量的列表:
Draw[1]> directory [command]
Whatis 命令获取有关Draw变量的信息:
Draw[1]> whatis
dump 命令获取有关Draw变量的长信息:
Draw[1]> dump
save 将Draw变量的值放入文件中
Draw[1]> save
restore 将文件的内容放入Draw变量中:
Draw[1]> restore
Draw 提供了一组标准的屏幕布局命令:
Draw[1]> axo; pers; top; bottom; left; right; front; back; mu4; v2d; av2d
wzoom 命令允许用鼠标选择要缩放的区域:
Draw[1]> wzoom
平移视图的命令:
Draw[1]> pu; pd; pr; pl; 2pdu; 2dpd; 2dpr; 2dpl
向上、向下、向右、向左旋转视图的命令:
Draw[1]> u; d; l; r;
display 命令使对象可见:
Draw[1]> display
donly 命令使对象可见并删除所有其他对象:
Draw[1]> donly
erase 命令从所有视图中擦除对象:
Draw[1]> erase
从视图中清除对象的命令:
Draw[1]> clear; 2dclear
vinit 命令初始化 3D 视图:
Draw[1]> vinit
vdisplay 命令使对象可见:
Draw[1]> vdisplay
从视图中清除对象的命令:
Draw[1]> vclear [varname] [ … ]
设置背景颜色:
Draw[1]> vsetcolorrbg
设置相机选项:
Draw[1]> vcamera [options]
设置视图参数
Draw[1]> vviewparams [options]
设置光照参数:
Draw[1]> vlight [options]
DrawTrSurf 包用于连接 C++ 几何实体与 Draw 实例。该包的方法允许:
DBRep包用于连接C++拓扑实体与Draw实例。该包的方法允许:
要编写 Draw 程序,必须遵守以下结构:
当运行Draw时,系统调用函数Draw_InitAppli。该函数必须定义在可执行文件,并且必须在该函数内的 Draw 命令解释器中添加(注册)命令。
或者,新的 Draw 命令可以组合到一些动态库中并加载到 DRAWEXE 中具有插件接口的可执行文件。插件的入口点应实现为静态方法某个类的 Factory() 应该用宏 DPLUGIN 声明,例如:
OCCT 与位于 $CASROOT/src/DrawResources 目录中的 DrawPlugin 资源文件一起提供。该文件的格式符合标准 OCCT 资源文件(有关详细信息,请参阅Resource_Manager.hxx 文件)。每个键定义了一系列其他(嵌套)键或动态库的名
称。键可以嵌套到任意级别。但是,不会检查键之间的循环依赖关系。例子:
OCCT 定义了一组基本数据类型的别名,在整个库中使用中这些别名替代纯 C++ 数据类型名称:
handle是整个 OCCT 中使用的智能指针。一般来说,handle机制基于两种要素:
每次删除对象的handle时,该对象的引用计数器就会递减。一旦引用计数器达到 0,该对象就会被自动删除。
这样,引用计数器就保证了删除功能。handle不能像通常的指针那样引用任何东西。
从C++11标准开始就有内置的智能指针。 OCСТ handle和智能指针有什么区别?
很容易看出 OCCT 的handle与 C++11 中的共享指针完全等效。 OCCT 可以不包含其他智能指针类型的等效项。
本节介绍如何实现由 OCCT handle机制包装的新类。新类应该继承自 Standard_Transient 类或其后代:
完整的示例可以在 OCCT 源代码中找到 \src\BRepAdaptor\BRepAdaptor_HCurve.hxx
OCCT 为 OSD 包中的低级操作系统设施提供独立于平台的接口。该包类似“python”编程语言中的“os”模块。提供以下功能:
TCollection 包在 1998 年标准化之前用于模拟模板。从 OССТ 开始7.0 中,它被相应的 NCollection 实例取代。
NCollection 包是一个较新的基于模板的包,提供现代容器。应该使用它尽可能代替 TCollection 类。
OCCT 中索引从 1 开始,NCollection_Vector 除外(其中索引从 0 开始)。这样做是为了与基于 STL 的算法兼容。
容器类通过值进行操作;还为大多数实例提供了由 Handle 操作的版本,请参见 TCollection_HArray1。
OCCT中有很多容器;将它们与 STL 集合进行比较是富有成效的,因为它们是 C++ 语言的通用参考点。与往常一样,与 STL 相比,有几个优点和缺点。
接口,OCCT 容器的设计和实现是为了人类可读。以下代码段演示了 OCCT 的 Seek() map方法的 STL 等效项:
内存效率,OCCT 容器旨在提高内存效率。例如,当一个新元素添加到NCollection_Vector 并需要重新打包时;将分配固定大小的新块,而不是完全重新分配内存。新的元素将被添加到新的块中,而不是内存复制和元素移动。
按照惯例,Open CASCADE 库中使用的所有异常类均继承自Standard_Failure 类。从它派生的异常类的层次结构在 Standard 包中定义。
为了在数值不稳定的情况下 OCCT 算法稳健工作,有必要调用该方OSD::SetSignal() 在应用程序中的某处(一次;在 Windows 上 - 每个执行线程一次)。
之后,标准C++异常和软件信号都可以在通常的C++中以统一的方式处理方式:
Message Package 为 OCCT 和应用程序级算法提供了以抽象且可定制的方式与用户沟通:
进度指示器是一个实体,允许跟踪下游算法的进度并报告它。Message_ProgressIndicator 类为复杂算法提供了一个接口,以告知其在运行时的当前执行状态,并有可能根据用户命令中断。目前(OCCT7.4.0),不支持在多线程应用程序中使用并发进度指示器。进度指示器的典型封装如下所示: