当前位置: 代码网 > it编程>软件设计>交互 > opencascade AIS_LightSource 光源的交互对象 源码学习 opencascade AIS_KindOfInteractive 交互式对象类型 源码学习

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

2024年08月01日 交互 我要评论
光源的交互对象。环境光以球形在视图角落显示;定位光源由球形或标记表示;聚光灯由圆锥表示;定向光由箭头集合在视图角落表示。此外,可以显示光源名称,并且单击表示将启用/禁用光源。

前言

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

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

方法

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 应用程序功能。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com