OCC 可视化的应用程序交互服务AIS
应用交互服务 AIS 包提供的服务是 OCC 可视化的核心内容,这些服务与数据结构和交互对象是紧密相关的,实现对图形对象的显示、检测及选择等过程的管理。
1.AIS包
AIS 包是一个高级的界面,可以访问底层的显示和选择服务。AIS 扩展了在GUI 视图中自定义的标准三维的选择属性、显示处理及显示属性等优越的功能并对它们进行管理。为了实现这些服务,AIS 包包含了交互对象、交互环境、图形属性管理器、选择过滤器类。
a.交互对象(AIS_InteractiveObject)。所谓的实体就是被选择和可视的交互对象。在 AIS 中,已经定义好了标准交互对象类的功能函数,我们只需要遵守一定的规定和协议就可以利用它来执行自定义的交互对象类。
b.交互环境/当前环境(AIS_InteractiveContext)引导实体的选取和可视化的中央控制单元就是交互环境。它能连接到主要的视图实现以下两种操作模:Neutral Point、当前可视化和选取的环境。
c.图形属性管理器或绘图器。列如:Prs3d_Drawer 类派生了AIS_Drawer 类。交互对象本身来说好像就是具体的图形属性(如可视化模式、色彩、材质等),交互环境中有一个绘图器在默认状态下是有效的,用它来对对像的控制。当交互对象被可视化时,图形属性就会要求自身的绘图器来检查在当前环境下是否有效。
d.选择过滤器。
2.交互对象的管理
交互对象是个虚的实体,但可以对它进行显示和选取操作 。它也有自己可视化特性,例如色彩、材质和可视化模式。
a.交互服务协定
(1)在 2D 或 3D 中,一个交互对象可能被创建了许多次,而创建的时候就赋予了不同的意义。
(2) 3D 显 示 由 PresentationManager3D 管 理 ; 2D 显 示 是 由PresentationManager2D 管理。
(3) 显示管理器中,一种显示已经由一种标志和参数确定好了。在协定中已经规定,交互对象的默认显示模式是标志 0。
(4)虚函数:交互对象的不同显示计算是由 Compute 函数来实现的。它继承于PrsMgr_PresentableObject::Compute函数。
b.基本算法
视图有两种状态:衰退模式(通常的模式)和不衰退模式(隐藏线式)。
AIS 中交互对象有四种类型:构建的元件或数据、关系(尺寸和约束)、对像、无类型的对象。
3.选取算法
a.选取协定
(1)交互对象可以有不确定的选取模式,它们都被保存在 SelectMgr_Selection中。在 AIS 中,用感知图元来描述对象,每个图元都有自身的所有者(SelectMgr_EntityOwner);用标志来指定选取模式,使感知图元与给定选取模式相呼应。这种一对一的映射方式提高了检测实体时的准确性。协定规定,默认选取模式是 0。
(2)感知图元的选取计算由虚函数来实现,即 ComputeSelection.。以下函数是对每个交互对象类执行不同的选取操作时需要使用。AIS_ConnectedInteractive::ComputeSelection
(3)正如使用最频繁的实体是 TopoDS_Shape 类型一样,频繁使用的交互对象是 AIS_Shape 类型。为了创建与 AIS_Shape 类成员行为一样的交互对象的新类如顶点、边等,需重定义虚函数:AIS_ConnectedInteractive::AcceptShapeDecomposition
b.基本算法
c.交互对象的图像属性
每个交互对象可能有自身的可视化属性。在默认方式下,交互对象的图形属性是从交互环境的图形管理器中获取的,用来设置可视化模式、显示计算的偏差值、参量的数目、色彩、线型、材质等。
这些虚函数允许我们对色彩、线宽、材质及透明度进行设置。可能用到的函还有:
AIS_InteractiveObject::UnsetColor
AIS_InteractiveObject::SetWidth
AIS_InteractiveObject::UnsetWidth
AIS_InteractiveObject::SetMaterial(const Graphic3d_NameOfPhysicalMaterial & aName)
AIS_InteractiveObject::SetMaterial(const Graphic3d_MaterialAspect & aMat)
AIS_InteractiveObject::UnsetMaterial
AIS_InteractiveObject::SetTransparency
AIS_InteractiveObject::UnsetTransparency
对于其它的属性类型设置,若需要改变交互对象的绘图器可以直接使用以下函数: AIS_InteractiveObject::SetAttributes
AIS_InteractiveObject::UnsetAttributes
d.属性管理
一些虚函数的功能可能已经暗指了显示对象的循环算法,我们需要它的用法。 要 想 更 新 交 互 对 象 的 显 示 模 式 , 需 要 指 明 一 个 包 括 在PrsMgr_PresentableObject类中的标记。虚函数允许我们在视图环境中不用重复计算就可以临时转化到对交互对象的选取和显示操作。合适的实体与交互对象联系时执行以下的函数:
AIS_InteractiveContext::SetLocation
AIS_InteractiveContext::ResetLocation
AIS_InteractiveContext::HasLocation
AIS_InteractiveContext::Location
定义每一个交互对象都需要由相应的函数来实现,这样临时与对象的所有者取得联系也变得很容易,交互对象能否与合适的实体所有者联系到一起,需要以下的函数来执行它的行为。
AIS_InteractiveObject::SetOwner
AIS_InteractiveObject::HasOwner
AIS_InteractiveObject::Owner
4.交互环境
a.基本规定
交互环境以一种清晰的方式允许用户以一种或多种视图来管理交互对象的图像或可选取的属性。在交互环境中一定要区分以下两种情况:
(1)没有打开当前环境;就要作为在 Neutral Point 中来使用。
(2)虽然打开了一个或几个环境,但每个环境表示的只是选取和显示的一个临时状态而已。一些函数只能在打开的当前环境中使用;一些只能在关闭的当前环境中使用;另一些在同一种状态下就与其它的有不同的行为。交互环境由许多的函数组成,这些函数是根据某种需要才组合在一起。
b.交互环境的管理
交互环境由一个主要的视图、一个随意的 trash bin 或一个“Collector”视图组成。它有一组可调整的设置允许对选取和显示的行为个性化设置。
5.当前环境的管理
打开或关闭一个当前环境用以下的函数来实现。
AIS_InteractiveContext::OpenLocalContext
AIS_InteractiveContext::CloseLocalContext
AIS_InteractiveContext::CloseAllContexts
在 Neutral Point 中的要被可视化的对象导入或移除当前环境则使用以下函数:
AIS_InteractiveContext::UseDisplayedObjects
AIS_InteractiveContext::NotUseDisplayedObjects
获得当前环境的标记,使用以下函数:
AIS_InteractiveContext::IndexOfCurrentLocal
虽然大多数可视化函数可能被使用在 Neutral Point 和打开的当前环境两种状态中,但一定要区分开这两者间的关系。毕竟它们的行为方式是不同的。操作模式 Neutral Point 被用在可视化交互对象的过程中,用以显示和选取一个合适的实体,实现移除、清除等的功能函数如下:
在 Neutral Point 中的显示算法
AIS_InteractiveContext::Display
AIS_InteractiveContext::Erase
AIS_InteractiveContext::EraseMode
AIS_InteractiveContext::ClearPrs
AIS_InteractiveContext::Redisplay
AIS_InteractiveContext::Remove
AIS_InteractiveContext::EraseAll
AIS_InteractiveContext::Hilight
AIS_InteractiveContext::HilightWithColor
在当前环境中的显示算法
使标准模式活动,则使用此函数:
AIS_InteractiveContext::ActivateStandardMode
如果只打开了一个当前环境,则使用以下函数:
AIS_InteractiveContext::DeactivateStandardMode
AIS_InteractiveContext::ActivatedStandardModes
AIS_InteractiveContext::SetShapeDecomposition
在当前环境中,这种活动的效果对所有的对象与选取模式相一致。它负责将对象分解成 sub-shapes。每个被导入到交互环境中的新对象会根据这些模式自动响应标准的分解活动。
导入一个交互对象的函数如下:
AIS_InteractiveContext::Load
在一个对象上直接启动或不启动选取模式用以下的函数来实现:
AIS_InteractiveContext::Activate
AIS_InteractiveContext::Deactivate
滤波器的根类是 SelectMgr_Filter,添加后就可以实现其功能了。过滤器会在当前环境检查鼠标所处的位置是否已经检测到所有者(SelectMgr_EntityOwner)
在 SelectMgr 中有过滤器的组件:
StdSelect_EdgeFilter —— 作用到像线、圆这样的边缘上。
StdSelect_FaceFilter —— 作用到像柱体、球这样的面上。
StdSelect_ShapeTypeFilter —— 针对复合体、体、壳、线等。
AIS_TypeFilter —— 作用到交互对象的类型上的。
AIS_SignatureFilter —— 作用到交互对象的标记类型上的。
AIS_AttributeFilter —— 作用到交互对象的属性如色彩、线宽等。
由于对象的形状上有一些具体的行为要实现,因此需要给每个新的过滤器类重定义一个函数,以此来通知当前环境是否执行 sub-shapes 类型。
AIS_LocalContext::ActsOn —— 默认下,这个函数的响应是错误的。
在 Neutral Point 中只有类型滤波器是活动的,这样就可以识别出可视化对象的具体类型。要使滤波器起作用,必须启动一个或更多的对象选模式。
AIS_InteractiveContext::AddFilter —— 添加过滤器
AIS_InteractiveContext::RemoveFilter —— 移除所有过滤器
当前环境的使用
1、清除已选取的对象。
2、显示已选取的对象。
3、将已选取的对象放入选取列表中。则,执行以下函数:
AIS_InteractiveContext::EraseSelected
AIS_InteractiveContext::DisplaySelected
AIS_InteractiveContext::SetSelected
1、从一个当前环境中获得已选取的对象的清单。将目前的对象的清单放进Neutral Point 中。
2、在已选取的实体的清单中添加或移除一个对象。
3、高亮显示。
4、移除一个已选取对象的高亮显示。
5、清空已选取对象的列表。则,执行以下函数:
AIS_InteractiveContext::SetSelectedCurrent
AIS_InteractiveContext::AddOrRemoveSelected'
AIS_InteractiveContext::HilightSelected
AIS_InteractiveContext::UnhilightSelected
AIS_InteractiveContext::ClearSelected
如果对当前的对象进行高亮显示、移除高亮显示以及清空当前对象的列表,
则执行以下函数:
AIS_InteractiveContext::HilightCurrents
AIS_InteractiveContext::UnhilightCurrents
AIS_InteractiveContext::ClearCurrents
当在一个打开的当前环境中要保持临时的交互对象时,需要执行以下函数:
AIS_InteractiveContext::KeepTemporary
AIS_InteractiveContext::SetSelectedCurrent
如果想在继续一个操作(清空对象、移除过滤器、标准活动模式)之前以通常的方式修改当前环境的状态,那么需要执行以下函数:
AIS_InteractiveContext::ClearLocalContext
6.AIS 标准交互对象类
a.基本类:包括 AIS_Point、AIS_Axis、AIS_Line、AIS_Circle、AIS_Plane 、
AIS_Trihedron ,这些类包含于 AIS_Shape 类。
b.AIS_ConnectedInteractive 类:功能是使一个交互对象与另一个引用的交互对象联系起来,并在视图中确定它们的位置。这样做就不用再对引用的对象进行显示和选取计算,但需要知道所引用对象的出处。
c.AIS_ConnectedShape 类:用来对与交互对象联系的对象指定一个形状,这个类和 AIS_Shape 一样可以被分解来使用。除此之外,它还允许对对象的隐藏部分进行显示,这系统会根据形状的参数自动计算它。
d.AIS_MultipleConnectedInteractive 类:功用是将对象与交互对象的列表联系起来(也可以是对象之间联系)。实现这一过程不需要占用内存空间就可以进行显示计算)。
e.AIS_MultipleConnectedShape 类:用来对与交互对象列表联系的交互对象给定一个形 状 ( 可以是AIS_Shape,AIS_ConnectedShape,AIS_MultipleConnectedShape),隐藏部分的显示计算由系统自动完成。
f.关系类
(1)AIS_ConcentricRelation、AIS_FixRelation
(2)AIS_IdenticRelation、AIS_ParallelRelation
(3)AIS_PerpendicularRelation、AIS_Relation
(4)AIS_ SymmetricRelation、AIS_TangentRelation
注:这只是其中的一部分。
g.尺寸类
(1)AIS_AngleDimension、AIS_Chamf2dDimension
(2)AIS_Chamf3dDimension、AIS_DiameterDimension
(3)AIS_DimensionOwner、AIS_LengthDimension
(4)AIS_OffsetDimension、AIS_RadiusDimensio