occt关键内容摘要(五)-AIS包摘要

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值