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 应用程序功能。
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)