opencascade AIS_LightSource 光源的交互对象 源码学习 opencascade AIS_KindOfInteractive 交互式对象类型 源码学习

前言

光源的交互对象。每种类型的光源都有自己的表示方式:

  • 环境光以球形在视图角落显示;
  • 定位光源由球形或标记表示;
  • 聚光灯由圆锥表示;
  • 定向光由箭头集合在视图角落表示。此外,可以显示光源名称,并且单击表示将启用/禁用光源。
  • 在这里插入图片描述

方法

AIS_LightSource(AIS光源)类用于初始化光源,并通过复制Graphic3d_CLight的设置来实现。该类提供了一系列成员函数用于设置和获取光源的属性,以及计算光源的显示和选择。

  • AcceptDisplayMode():虚拟函数,用于确定指定的显示模式是否受支持。
  • ArcSize():返回灵敏球弧的大小,默认为20像素。
  • Compute():计算光源的显示模式。
  • computeAmbient():计算环境光源的显示。
  • computeDirectional():计算定向光源的显示。
  • computePositional():计算定位光源的显示。
  • ComputeSelection():填充选择。
  • computeSpot():计算聚光灯光源的显示。
  • IsZoomable():返回是否允许缩放。
  • Light():返回光源。
  • MarkerImage():返回光源图标。
  • MarkerType():返回光源图标的类型。
  • NbArrows():返回要显示的定向光源箭头的数量,默认为5。
  • NbSplitsArrow():返回箭头的镶嵌级别,默认为20。
  • NbSplitsQuadric():返回二次曲面的镶嵌级别,默认为30。
  • ProcessDragging():拖动对象。
  • SetArcSize():设置灵敏球弧的大小。
  • SetDisplayName():显示/隐藏光源名称。
  • SetDisplayRange():显示/隐藏光源范围。
  • SetDraggable():设置是否允许拖动。
  • SetLight():设置光源。
  • setLocalTransformation():设置本地转换。
  • SetMarkerImage():设置光源图标。
  • SetMarkerType():设置光源图标的类型。
  • SetNbArrows():设置要显示的箭头数量。
  • SetNbSplitsArrow():设置箭头的镶嵌级别。
  • SetNbSplitsQuadric():设置二次曲面的镶嵌级别。
  • SetSize():设置显示的大小。
  • SetSwitchOnClick():设置点击鼠标是否开关灯光。
  • SetZoomable():设置是否允许缩放。
  • Size():返回显示的大小。
  • ToDisplayName():返回是否显示光源名称。
  • ToDisplayRange():返回是否显示光源范围。
  • ToSwitchOnClick():返回是否点击鼠标开关灯光。
  • Type():返回对象的类型。
  • updateLightAspects():更新光源的颜色。
  • updateLightLocalTransformation():基于光源类型更新本地转换。
  • updateLightTransformPersistence():基于光源类型更新转换持久性。

示例

下面是使用AIS_LightSource的简单示例:

#include <AIS_LightSource.hxx>
#include <Graphic3d_CLight.hxx>

int main() {
    // 创建光源对象
    Handle(Graphic3d_CLight) lightSource = new Graphic3d_CLight();

    // 初始化AIS_LightSource对象
    Handle(AIS_LightSource) aisLight = new AIS_LightSource(lightSource);

    // 设置光源大小
    aisLight->SetSize(50.0);

    // 设置光源是否可拖动
    aisLight->SetDraggable(true);

    // 设置光源名称是否显示
    aisLight->SetDisplayName(true);

    // 设置光源范围是否显示
    aisLight->SetDisplayRange(true);

    // 设置点击鼠标是否开关灯光
    aisLight->SetSwitchOnClick(true);

    // 设置光源图标
    // 注意:这里的图标类型和图标文件路径需要根据实际情况设置
    Handle(Graphic3d_MarkerImage) markerImage = ...; // 设置图标
    aisLight->SetMarkerImage(markerImage, true); // 设置启用状态的图标

    // 设置光源的其他属性...

    // 在视图中显示光源
    // 注意:这里的View是指的OpenCASCADE的3D视图
    Handle(V3d_View) view = ...; // 获取视图对象
    view->SetLightOn(); // 打开光源
    view->Viewer()->AddLight(aisLight); // 将光源添加到视图中

    // 进行视图更新或者重绘等操作

    return 0;
}

这个示例演示了如何创建和初始化AIS_LightSource对象,并设置其属性,然后将其添加到3D视图中显示。在实际应用中,您需要根据您的需求和具体情况来设置光源的属性和图标。

AIS_KindOfInteractive 前言

AIS_KindOfInteractive 是 OpenCASCADE 应用程序框架(Application Interactive Services, AIS)中的一个枚举类型,用于定义交互对象的类型。这些交互对象在 3D 场景中用于表示几何形状、注释和其他可视元素。不同类型的交互对象具有不同的行为和属性。
在这里插入图片描述

枚举值

以下是 AIS_KindOfInteractive 枚举类型的常见值及其用途:

  • AIS_KOI_None

    • 表示没有指定交互对象类型。
  • AIS_KOI_Datum

    • 表示基准元素,如坐标系、点、线或平面。
  • AIS_KOI_Shape

    • 表示几何形状,如点、边、面、体等。
  • AIS_KOI_Object

    • 表示一般对象,可以是几何形状的组合或复杂的图元。
  • AIS_KOI_Relation

    • 表示几何关系,如对齐、约束等。
  • AIS_KOI_Dimension

    • 表示尺寸标注,如长度、角度等。
  • AIS_KOI_Attribute

    • 表示对象的属性或元数据。
  • AIS_KOI_Unknown

    • 表示未知类型的交互对象。

用法示例

以下示例展示了如何使用 AIS_KindOfInteractive 枚举类型来创建和处理不同类型的交互对象。

#include <AIS_Shape.hxx>
#include <AIS_Point.hxx>
#include <AIS_InteractiveContext.hxx>
#include <AIS_KindOfInteractive.hxx>
#include <BRepPrimAPI_MakeBox.hxx>
#include <gp_Pnt.hxx>

void CreateInteractiveObjects(const Handle(AIS_InteractiveContext)& context)
{
    // 创建一个几何形状(立方体)
    TopoDS_Shape box = BRepPrimAPI_MakeBox(10.0, 10.0, 10.0).Shape();
    Handle(AIS_Shape) aisBox = new AIS_Shape(box);
    aisBox->SetColor(Quantity_NOC_RED);

    // 将几何形状添加到交互上下文
    context->Display(aisBox, Standard_True);

    // 创建一个点
    gp_Pnt point(5.0, 5.0, 5.0);
    Handle(AIS_Point) aisPoint = new AIS_Point(new Geom_CartesianPoint(point));
    aisPoint->SetColor(Quantity_NOC_BLUE);

    // 将点添加到交互上下文
    context->Display(aisPoint, Standard_True);
    
    // 检查对象类型
    if (aisBox->Type() == AIS_KOI_Shape) {
        std::cout << "The object is a shape." << std::endl;
    }
    if (aisPoint->Type() == AIS_KOI_Datum) {
        std::cout << "The object is a datum." << std::endl;
    }
}

int main()
{
    // 创建一个交互上下文(具体的初始化略)
    Handle(V3d_Viewer) viewer = ...;
    Handle(AIS_InteractiveContext) context = new AIS_InteractiveContext(viewer);

    // 创建和显示交互对象
    CreateInteractiveObjects(context);

    return 0;
}

总结

AIS_KindOfInteractive 枚举类型在 OpenCASCADE 中用于定义交互对象的类型,以便在 3D 场景中管理和操作这些对象。通过使用不同的枚举值,可以创建和处理各种交互对象,从而实现复杂的 3D 应用程序功能。

  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值