OCC 显示笔记

图形对象的显示:
在屏幕上显示一个对象需要由三种实体协作完成,即:可显像的交互对象、浏览器和交互环境,在OCC 中分别由三种类实现,AIS_InteractiveObject、Viewer和AIS_InteractiveContext. 
1.可显像的交互对象类:
可显像的交互对象类的用途就是提供给要显示对象的Graphic2d 或Graphic3d 图形结构。首先,根据显示请求,可显像的交互对象类会调用合适的算法来产生这种结构并保持结构框架,为显示做好准备。在StdPrs 和Prs3d 包中已提供了标准的显示算法。然而,我们也可以自定义一些具体的显示算法,然后在Graphic2d 或Graphic3d 包中创建对象的结构。我们也可以为单个可显像的交互对象创建一些显示算法,但对于每一个可视化模式的算法是一定要支持应用程序的。当然,显示的对象要具有可显像的特性或与可显像的交互对象相关。
2、浏览器类:允许用户交互地管理对象的视图。当在一个视图中进行缩放、转换或旋转等操作时,浏览器不关心所应用的数据模型,只考虑可显像对象的Graphic2d 和Graphic3d 图形结构。在OCC 中,2D 和3D 浏览器就是用来对显示算法产生的Graphic2d 和Graphic3d 图形结构进行操作的。
3、交互环境类:通常,交互环境类会接受一个高级的API 信号,然后对整个显示过程进行控制。当应用程序请求显示一个对象时,交互环境的作用就是请求将可显像的交互对象的图形结构发送给浏览器,用以对象的显示。


4、显示包:显示包有AIS、PrsMgr、StdPrs、V3d 和V2d,另外,如果需要执行自定义的显示算法,还需要Prs3d、Graphic3d 和Graphic2d 等包。
5、选取包:选取包有SelectBasics、Select2D、Select3D、SelectMgr 和StdSelect。
SelectBasics 包含了选取的基础类,其中,SensitiveEntity 类定义感知图元,EntityOwner 类定义感知图元的所有者,SortAlgo 类中定义用于分类包围框的算法。
Select2D 包包含了2D 中感知图元的基础类,例如:点、线段和圆,它是从SensitiveEntity 类中继承来的,从动态选取的角度来看,它用来显示2D 中可选取的对象。
Select3D 包含了所有3D 中标准的感知图元,例如:点、曲线、面等,所有这些类是从3D 的SensitiveEntry 类中派生来的,如果需要的话,可以用于对2D图形选取空间中包围框的恢复,这个包还包含3D-2D 放映机。
SelectMgr 包用来管理整个动态选取的过程, 包含SelectableObject 、Selection、SelectionManager 和ViewSelector 等类。
StdSelect 包提供了以上所述所有类的标准用法和主要工具,以此来防止开发者重定义选取的对象。ViewSelector2D 类定义了V2d 包中的一个视图选择器,用来对视图操作。
6、应用程序交互服务(AIS)包,提供了显示和选取3D 对象时所需的各种类。
7 、PrsMgr 包, 提供显示过程中需要的所有类, 即Presentation 和PresentableObject 的抽象类,以及2D 和3D 显示的具体类。
8、StdPrs 包,提供实时使用的标准显示算法,这些算法是对几何和拓扑工具箱中点、曲线、形状的描述。
9、V2d 和V3d 包,提供支持2D 和3D 浏览器的所有服务。
10、Prs3d 包,提供一些通用的显示算法,例如:线框、阴影和隐藏线消除与绘图器类的关系。绘图器类控制显示过程中需要创建的一些特性,例如:色彩、线型、线宽等。
11、Graphic2d 和Graphic3d 包,提供创建2D 和3D 图形结构的所有资源。
12、Aspect 包,用来对图形对象的属性设置进行管理。Aspect 包提供用于图形元件的所有类,包括所有通用的2D 和3D 浏览器—— 屏幕背景、窗口、边界、图形属性组等的内容,常用来描述2D 和3D 对象。
   
图形对象的动态拾取:
OCC给2D图形空间提供了感知区域,当我们执行选取操作的时候,这些区域会根据鼠标在屏幕上移动的位置又被划分为不同的区域,从而实现精确选取。鼠标的位置与感知区域是紧密相关,当在窗口内移动鼠标时,计算机会分析两者接触的程度,然后感知区域内的实体所有者就会处于高亮状态或对象相关信息被高亮显示在一个清单里。这样就实现了对元件身份的检测。

猜你喜欢

转载自blog.csdn.net/eric_e/article/details/80799831