opencascade AIS_PointCloud源码学习 原创

AIS_PointCloud

前言

在这里插入图片描述

交互对象用于一组点。
表示支持两种显示模式:
点。
用于高亮显示的边界框。
表示通过边界框提供选择。
选择和高亮显示可以通过将默认选择模式设置为 -1 来禁用。
这样在交互视图中将无法选择对象。任何调用
AIS_InteractiveContext::AddOrRemoveSelected 的操作也应被禁止,
以避免程序化高亮显示(解决方法是设置不支持的高亮模式,例如 100)。

方法

//! 此点云对象支持的显示模式
enum DisplayMode
{
  DM_Points = 0, //!< 作为普通点显示,默认表示
  DM_BndBox = 2  //!< 作为边界框显示,默认用于高亮显示
};

//! 此点云对象支持的选择模式
enum SelectionMode
{
  SM_Points         = 0, //!< 通过点检测
  SM_SubsetOfPoints = 1, //!< 检测点云中的点而不是整个对象
  SM_BndBox         = 2, //!< 通过边界框检测
};

public:

1.

构造函数。
Standard_EXPORT AIS_PointCloud();

2.

从点数组中设置点。
该方法不会复制输入数据 - 数组将作为句柄存储。
@param thePoints [in] 点数组
Standard_EXPORT virtual void SetPoints (const Handle(Graphic3d_ArrayOfPoints)& thePoints);

3.

设置带有可选颜色的点。

输入数据将被复制到内部缓冲区中。

输入数组应具有相同的长度,否则表示将无法计算和显示。
@param theCoords [in] 坐标数组
@param theColors [in] 可选的颜色数组
@param theNormals [in] 可选的法线数组
Standard_EXPORT virtual void SetPoints (const Handle(TColgp_HArray1OfPnt)& theCoords,
const Handle(Quantity_HArray1OfColor)& theColors = NULL,
const Handle(TColgp_HArray1OfDir)& theNormals = NULL);

4.

获取点数组。
方法可以被重写以动态填充来自应用程序数据结构的点数组。
@return 点数组
Standard_EXPORT virtual const Handle(Graphic3d_ArrayOfPoints) GetPoints() const;

5. //! 获取表示的边界框。

Standard_EXPORT virtual Bnd_Box GetBoundingBox() const;

6.

设置自定义颜色。仅在未分配每点颜色属性时影响表示。
Standard_EXPORT virtual void SetColor (const Quantity_Color& theColor) Standard_OVERRIDE;

7.

恢复默认颜色。
Standard_EXPORT virtual void UnsetColor() Standard_OVERRIDE;

8.

设置自定义材质。仅在定义了法线时影响表示。
Standard_EXPORT virtual void SetMaterial (const Graphic3d_MaterialAspect& theMat) Standard_OVERRIDE;

9.

恢复默认材质。
Standard_EXPORT virtual void UnsetMaterial() Standard_OVERRIDE;

protected:

10.

为此对象准备表示。
Standard_EXPORT virtual void Compute (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
const Handle(Prs3d_Presentation)& thePrs,
const Standard_Integer theMode) Standard_OVERRIDE;

11.

为此对象准备选择。
Standard_EXPORT virtual void ComputeSelection (const Handle(SelectMgr_Selection)& theSelection,
const Standard_Integer theMode) Standard_OVERRIDE;

用法示例

AIS_PointCloud 类在 OpenCascade 中用于表示和管理点云数据。下面是一个简单的用法示例,展示如何创建和显示点云对象:

#include <AIS_PointCloud.hxx>
#include <Graphic3d_ArrayOfPoints.hxx>
#include <V3d_View.hxx>
#include <AIS_InteractiveContext.hxx>
#include <Quantity_Color.hxx>

void CreateAndDisplayPointCloud(const Handle(AIS_InteractiveContext)& aContext)
{
  // 创建点云对象
  Handle(AIS_PointCloud) aPointCloud = new AIS_PointCloud();

  // 创建点数组
  Handle(Graphic3d_ArrayOfPoints) aPoints = new Graphic3d_ArrayOfPoints(3);
  
  // 添加点到点数组
  aPoints->AddVertex(gp_Pnt(0.0, 0.0, 0.0));
  aPoints->AddVertex(gp_Pnt(10.0, 0.0, 0.0));
  aPoints->AddVertex(gp_Pnt(0.0, 10.0, 0.0));

  // 设置点云对象的点
  aPointCloud->SetPoints(aPoints);

  // 设置点云对象的颜色
  aPointCloud->SetColor(Quantity_NOC_RED);

  // 将点云对象添加到上下文中
  aContext->Display(aPointCloud, Standard_True);
}

int main()
{
  // 初始化OpenCascade的Viewer和Context
  Handle(Aspect_DisplayConnection) aDisplayConnection = new Aspect_DisplayConnection();
  Handle(OpenGl_GraphicDriver) aGraphicDriver = new OpenGl_GraphicDriver(aDisplayConnection);
  Handle(V3d_Viewer) aViewer = new V3d_Viewer(aGraphicDriver);
  Handle(V3d_View) aView = aViewer->CreateView();
  Handle(AIS_InteractiveContext) aContext = new AIS_InteractiveContext(aViewer);

  // 创建和显示点云
  CreateAndDisplayPointCloud(aContext);

  // 设置视图参数并开始交互
  aView->SetBackgroundColor(Quantity_NOC_BLACK);
  aView->MustBeResized();
  aView->TriedronDisplay(Aspect_TOTP_LEFT_LOWER, Quantity_NOC_WHITE, 0.1, V3d_ZBUFFER);

  // 在此添加其他交互逻辑或视图更新逻辑
  aView->Redraw();
  
  return 0;
}

这个示例展示了如何在 OpenCascade 中创建一个点云对象并将其显示在视图中。代码的主要步骤包括:

  1. 创建 AIS_PointCloud 对象。
  2. 创建 Graphic3d_ArrayOfPoints 对象,并向其中添加点。
  3. 使用 SetPoints 方法将点数组设置到 AIS_PointCloud 对象中。
  4. 使用 SetColor 方法设置点云的颜色。
  5. 使用 AIS_InteractiveContext 对象将点云对象显示出来。

此示例还包括 OpenCascade Viewer 和 Context 的初始化,以及基本的视图设置。

参考

posted @ 2024-07-28 19:32  一点灯  阅读(0)  评论(0编辑  收藏  举报  来源