opencascade AIS_SignatureFilter源码学习 原创

opencascade AIS_SignatureFilter

前言

//! 通过它们的类型和签名选择交互对象。签名为对象的类型提供了额外的特征描述,采用索引的形式。过滤器在本地上下文中查询每个交互对象,以确定其是否具有非空的所有者,并且如果有的话,是否具有所需的签名。如果对象在每种情况下返回true,则保留该对象。否则,将其拒绝。

//! 默认情况下,交互对象具有None类型和签名0。如果您想要为您的交互对象指定特定的类型和签名,必须重新定义两个虚拟方法:Type和Signature。

//! 此过滤器仅在开放的本地上下文中使用。在Collector查看器中,只有当本地上下文打开时,才能定位到积极响应定位过滤器的交互对象。

//! 警告
//! 一些签名已经被AIS中提供的标准对象使用:
//! - 签名0 - 形状(Shape)
//! - 签名1 - 点(Point)
//! - 签名2 - 轴(Axis)
//! - 签名3 - 三轴标识(Trihedron)
//! - 签名4 - 平面三轴标识(PlaneTrihedron)
//! - 签名5 - 线(Line)
//! - 签名6 - 圆(Circle)
//! - 签名7 - 平面(Plane)
在这里插入图片描述

方法

1

初始化签名过滤器,将给定类型aGivenKind和给定签名aGivenSignature添加到AIS_TypeFilter中的签名规范中。
Standard_EXPORT AIS_SignatureFilter(const AIS_KindOfInteractive aGivenKind, const Standard_Integer aGivenSignature);

2

//! 如果临时对象不是AIS_InteractiveObject,则返回False。
//! 如果交互对象的签名与过滤器中存储的签名不同,则返回False…
Standard_EXPORT Standard_Boolean IsOk (const Handle(SelectMgr_EntityOwner)& anobj) const Standard_OVERRIDE;

用法

在OpenCascade中,AIS_SignatureFilter用于根据交互对象的类型和签名进行过滤。以下是一个简单的用例,展示如何使用AIS_SignatureFilter来筛选特定类型和签名的交互对象。

#include <AIS_SignatureFilter.hxx>
#include <AIS_InteractiveContext.hxx>
#include <AIS_InteractiveObject.hxx>
#include <AIS_KindOfInteractive.hxx>
#include <SelectMgr_Selection.hxx>
#include <SelectMgr_EntityOwner.hxx>

void filterInteractiveObjects()
{
    // 创建一个AIS_SignatureFilter来过滤类型为AIS_KOI_Shape并且签名为1的交互对象
    AIS_SignatureFilter filter(AIS_KOI_Shape, 1);

    // 创建一个交互上下文
    Handle(AIS_InteractiveContext) context = new AIS_InteractiveContext();

    // 获取选择集
    Handle(SelectMgr_Selection) selection = context->MainSelector()->Selection();

    // 遍历选择集中的所有实体所有者,检查是否符合过滤器条件
    for (Standard_Integer i = 1; i <= selection->NbPicked(); ++i)
    {
        Handle(SelectMgr_EntityOwner) entityOwner = selection->Picked(i);
        if (filter.IsOk(entityOwner))
        {
            // 如果符合条件,则获取交互对象并进行相应处理
            Handle(AIS_InteractiveObject) interactiveObj = Handle(AIS_InteractiveObject)::DownCast(entityOwner->Selectable());
            if (!interactiveObj.IsNull())
            {
                // 在这里可以对符合条件的交互对象进行进一步操作
                // 例如打印其信息、修改其属性等
                // interactiveObj->...
            }
        }
    }
}
示例解释:
  1. 创建AIS_SignatureFilter对象
    使用AIS_SignatureFilter类的构造函数,创建一个过滤器来筛选类型为AIS_KOI_Shape(形状)并且签名为1的交互对象。

  2. 创建交互上下文
    使用AIS_InteractiveContext类创建一个交互上下文对象,用于管理和显示交互对象。

  3. 获取选择集
    使用MainSelector()方法获取主选择器,然后从中获取选择集。

  4. 遍历选择集
    使用NbPicked()方法获取选择集中选中对象的数量,并使用Picked()方法逐个获取实体所有者。

  5. 过滤交互对象
    对每个实体所有者,使用IsOk()方法检查是否符合过滤器条件。如果符合条件,则获取其对应的交互对象。

  6. 处理符合条件的交互对象
    对于符合条件的交互对象,可以进行进一步的操作,例如打印其信息或修改其属性。

在实际应用中,可以根据具体的需求和场景,调整过滤器的类型和签名,以便精确地筛选和操作交互对象。
参考

拾取类型

enum AIS_StatusOfPick
{
AIS_SOP_Error,//拾取错误
AIS_SOP_NothingSelected,//无拾取
AIS_SOP_Removed,
AIS_SOP_OneSelected,//拾取一个
AIS_SOP_SeveralSelected
};

AIS_SelectionModesConcurrency

//! 模式指定在激活新的选择模式时如何处理多个活动选择模式。
enum AIS_SelectionModesConcurrency
{
AIS_SelectionModesConcurrency_Single, //!< 同一时间只能激活一个选择模式 - 先前激活的模式应被停用
AIS_SelectionModesConcurrency_GlobalOrLocal, //!< 全局(AIS_InteractiveObject::GlobalSelectionMode())或本地(多个)选择模式可以同时处于活动状态
AIS_SelectionModesConcurrency_Multiple, //!< 可以激活任意组合的选择模式
};

AIS_Triangulation

前言

在这里插入图片描述

//! 交互对象,从Poly_Triangulation绘制数据,可选择性地使用与每个三角形顶点相关联的颜色。
//! 为了最大效率,颜色以32位整数表示,而不是经典的Quantity_Color值。
//! 目前尚未实现三角形和顶点的交互选择。

方法

1

构造三角化显示对象
Standard_EXPORT AIS_Triangulation(const Handle(Poly_Triangulation)& aTriangulation);

2

//! 设置每个节点的颜色。
//! 每个32位颜色为 Alpha << 24 + Blue << 16 + Green << 8 + Red
//! 颜色组件的顺序对OpenGL进一步使用是至关重要的
Standard_EXPORT void SetColors(const Handle(TColStd_HArray1OfInteger)& aColor);

3

//! 获取每个节点的颜色。
//! 每个32位颜色为 Alpha << 24 + Blue << 16 + Green << 8 + Red
Standard_EXPORT Handle(TColStd_HArray1OfInteger) GetColors() const;

4

//! 如果三角化具有顶点颜色,则返回true。
Standard_Boolean HasVertexColors() const‘’

5

//! 设置三角化对象。
Standard_EXPORT void SetTriangulation(const Handle(Poly_Triangulation)& aTriangulation);

6

//! 返回 Poly_Triangulation 对象。
Standard_EXPORT Handle(Poly_Triangulation) GetTriangulation() const;

7

//! 设置透明度值 aValue 到重构复合形状中。
Standard_EXPORT virtual void SetTransparency(const Standard_Real aValue = 0.6) Standard_OVERRIDE;

8

//! 移除重构复合形状中的透明度设置。
Standard_EXPORT virtual void UnsetTransparency() Standard_OVERRIDE;

9

//! 更新显示内容。
Standard_EXPORT void updatePresentation();

用法用例

在OpenCascade中,AIS_Triangulation用于显示和管理三角化数据,并可以选择性地处理顶点颜色。以下是一个简单的用例,展示如何使用AIS_Triangulation类来创建并显示三角化对象。

#include <AIS_Triangulation.hxx>
#include <AIS_InteractiveContext.hxx>
#include <Poly_Triangulation.hxx>
#include <TColgp_Array1OfPnt.hxx>
#include <TColStd_HArray1OfInteger.hxx>

void displayTriangulation()
{
    // 创建一个 Poly_Triangulation 对象并添加顶点
    Handle(Poly_Triangulation) triangulation = new Poly_Triangulation();
    TColgp_Array1OfPnt nodes(1, 3);
    nodes(1) = gp_Pnt(0, 0, 0);
    nodes(2) = gp_Pnt(1, 0, 0);
    nodes(3) = gp_Pnt(0, 1, 0);
    triangulation->SetNodes(nodes);

    // 设置顶点颜色
    Handle(TColStd_HArray1OfInteger) colors = new TColStd_HArray1OfInteger(1, 3);
    colors->SetValue(1, 0xFF0000); // Red
    colors->SetValue(2, 0x00FF00); // Green
    colors->SetValue(3, 0x0000FF); // Blue

    // 创建 AIS_Triangulation 对象并设置三角化数据和顶点颜色
    Handle(AIS_Triangulation) aisTriangulation = new AIS_Triangulation(triangulation);
    aisTriangulation->SetColors(colors);

    // 创建交互上下文并将 AIS_Triangulation 对象添加到上下文中
    Handle(AIS_InteractiveContext) context = new AIS_InteractiveContext();
    context->Display(aisTriangulation, Standard_True); // 将对象显示在视图中

    // 设置视图方向和比例
    context->SetCurrentV3dView(context->CurrentViewer()->CreateView());
    context->SetDisplayMode(AIS_Shaded, Standard_True); // 设置显示模式为Shaded
    context->Redisplay(aisTriangulation, Standard_True, Standard_True); // 重新显示对象
}
示例解释:
  1. 创建 Poly_Triangulation 对象
    使用Poly_Triangulation类创建一个三角化对象,并设置三个顶点。

  2. 设置顶点颜色
    创建一个 TColStd_HArray1OfInteger 数组来表示顶点的颜色,每个颜色以32位整数表示(如红色0xFF0000)。

  3. 创建 AIS_Triangulation 对象
    使用AIS_Triangulation类创建一个交互对象,并将之前创建的 Poly_Triangulation 对象和顶点颜色设置添加到其中。

  4. 创建交互上下文并显示对象
    使用AIS_InteractiveContext类创建一个交互上下文,并将 AIS_Triangulation 对象添加到上下文中,然后显示在视图中。

  5. 设置显示属性
    设置视图的显示模式为Shaded,并根据需要进行重新显示。

在实际应用中,可以根据具体需求进一步操作和修改AIS_Triangulation对象,例如添加交互性、更改颜色、调整透明度等。

参考

posted @ 2024-08-01 09:00  一点灯  阅读(0)  评论(0编辑  收藏  举报  来源