OpenCasCade的撤销和重做机制
来源:互联网 发布:为什么要云计算 编辑:程序博客网 时间:2024/06/05 05:47
Open CASCADE(简称OCC)平台是由法国Matra Datavision公司开发的CAD/CAE/CAM软件平台,可以说是世界上最重要的几何造型基础软件平台之一。开源OCC对象库是一个面向对象C++类库,用于快速开发设计领域的专业应用程序。OCC主要用于开发二维和三维几何建模应用程序,包括通用的或专业的计算机辅助设计CAD系统、制造或分析领域的应用程序、仿真应用程序或图形演示工具。OCC通过有机组织的C++库文件提供了六个模块。可视化模块作为OCC的核心部分,是可视化技术的具体体现。
本文讲述用OpenCasCade开发CAD软件的建模过程中如何利用OCC本身的数据框架实现撤销和重做的机制,OCC提供的应用程序框架OCAF(OpenCasCade Application FrameWork)已经为用户提供了一个完整的撤销和重做的机制,这个机制由TDocStd_Document,也就是OCC称之为数据框架的一个文档类来提供的。在生成一个模型,比如一个三维的坐标点(gp_Pnt)时,我们向数据框架请求保存了这个三维点的名字,编号(此编号表示该三维点的索引),和x,y,z三个坐标的数据,以及功能属性和显示属性,要实现撤销和保存所有的这些数据的保存都应该开始于调用TDocStd_Document::NewCommand()函数而结束于TDocStd_Document::CommitCommand()函数,这两个函数记录了应用程序向OCC数据框架插入数据或者修改数据的历史,当我们发现生成的模型有误时,我们想返回上一步的创建,只要在应用程序的框架里调用TDocStd_Document::Undo()之后提交撤销TDocStd_Document::CommitCommand()就能实现撤销上一次CommitCommand()提交给OCC的数据插入或者数据修改操作了。有了这个机制,在我们的建模过程中把所有建模产生的模型边界数据都提交给OCC的数据框架来管理,并且在没一部细化的创建过程中实现撤销和重做。在用户需要模型数据进行处理时才从数据框架中取出数据组织处理,这样就省去了一开始自己保存模型数据然后在建模的过程中还要自己实现自己保存的那部分数据的撤销和重做机制,简化了建模的过程,提高了管理应用程序管理数据的可靠性。当然这其中也有天生不足的地方,那就是OCC的数据框架保存的都是永久存在的数据,不能对标签进行删除操作,所以为了自己在OCC的数据框架里实现模型数据的删除,就要对标签进行是否可用的标记。
截图(撤销后在数据框架中北标记为不可用的数据)
ps:第一次写技术博客,语言不通顺,表达不清楚,各位见笑了~~
- OpenCasCade的撤销和重做机制
- Android:基于EditText实现撤销和重做机制
- WPF和Silverlight的撤销和重做框架
- 重做(redo)和撤销(undo)的完整实现
- 撤销和重做(Undo和Redo)(2)
- 使用 NSUndoManager 来进行撤销和重做
- 应用STL做的撤销重做封装
- 涂鸦撤销与重做的功能实现
- Arcengine中Element的撤销重做
- oracle的回滚和撤销机制
- oracle的回滚和撤销机制
- oracle的回滚和撤销机制
- 图像的单步撤销和重做怎么实现,如何记录状态
- 撤销(undo)和重做(redo)的C++完美实现
- [Vim]撤销与重做
- 撤销重做(Undo/Redo)
- vim-撤销/重做/重复
- c语言夜未眠2——实现撤销和重做
- 输出1~100内前五个可以被3整除的数
- Using System.getProperty(String key) to retrieve system properties
- “AspNetPager1_PageChanging”的重载均与委托“System.EventHandler”不匹配
- vc2003 unable to start debugging 有效解决!
- delphi中如何在控件刷新之前禁止重画,更新了数据后再刷新?
- OpenCasCade的撤销和重做机制
- POJ1655 Balancing Act——树的重心,Dfs
- 关于Objective-c里的汉字占位长度问题
- dchp基本配置(maxidle maxActive removeAbandoned removeAbandonedTimeout)
- jQuery实现无刷新切换主题皮肤功能
- ffmpeg/ffplay vc6 源码剖析
- 各种方式对页面控件进行遍历
- jQuery分页插件jPage
- AM 命令行启动程序的方法