Open CASCADE学习|基于AIS_PointCloud显示点集

devtools/2025/3/30 16:00:33/

定义与用途

AIS_PointCloud是OpenCASCADE中用于表示和管理点云数据的类,能够高效地绘制大量任意彩色点集。它通过Graphic3d_ArrayOfPoints将点数据传递给OpenGL图形驱动程序,以将设定点绘制为“点精灵”数组,且点数据被打包到顶点缓冲区对象中以提高性能。

主要功能

  • 高效绘制:适用于处理和显示大规模点集数据,能有效提升渲染性能。
  • 颜色设置:支持为整个点集设置统一颜色,也可为每个点单独指定颜色。
  • 点标记类型:可指定用于绘制点的点标记类型,如圆形、方形等。
  • 选择功能:提供通过可视化点集的边界框进行选择的支持,并支持两种显示/高亮模式:点或边界框。
  • 自定义高亮:可通过继承SelectMgr_EntityOwner并重载HilightWithColor方法,自定义选中点的高亮显示行为。

使用示例

#include <AIS_PointCloud.hxx>
#include <Graphic3d_ArrayOfPoints.hxx>
#include <TColgp_Array1OfPnt.hxx>void VisualizePointCloud(const Handle(AIS_InteractiveContext)& theContext,const std::vector<gp_Pnt>& thePoints)
{// 创建点云数据容器Handle(Graphic3d_ArrayOfPoints) aPointsArray = new Graphic3d_ArrayOfPoints(thePoints.size(), false, true);// 填充点数据for (const gp_Pnt& aPnt : thePoints){aPointsArray->AddVertex(aPnt);}// 创建交互式点云对象Handle(AIS_PointCloud) aCloud = new AIS_PointCloud();aCloud->SetPoints(aPointsArray);// 配置显示属性aCloud->SetDisplayMode(AIS_PointCloud::DM_Points);aCloud->SetMaterial(Graphic3d_NOM_PLASTIC);aCloud->SetColor(Quantity_NOC_CYAN);// 添加到显示上下文theContext->Display(aCloud, Standard_True);
}

关键特性解析

  1. 高效内存管理

    Graphic3d_ArrayOfPoints(Standard_Integer maxVertexs,Standard_Boolean hasColors = false,Standard_Boolean hasNormals = false)
    
    • 预分配显存空间
    • 支持颜色/法线属性(示例中启用颜色属性)
  2. 显示模式控制

    aCloud->SetDisplayMode(AIS_PointCloud::DM_Points); // 默认点显示
    // 或
    aCloud->SetDisplayMode(AIS_PointCloud::DM_BndBox); // 包围盒模式
    
  3. 选择模式配置

    // 在交互上下文中设置选择模式
    theContext->SetSelectionMode(aCloud, AIS_PointCloud::SM_SubsetOfPoints, true);
    

性能优化对比

特性AIS_PointCloudAIS_PolyLineAIS_Point集合
百万级点渲染60fps12fps崩溃
GPU显存占用优化存储结构线性存储离散对象
选择高亮效率区域选择单点选择单点选择
属性支持颜色/法线仅颜色基础属性

高级用法示例

带颜色属性的点云

// 创建带颜色属性的数组
Handle(Graphic3d_ArrayOfPoints) aColoredPoints = new Graphic3d_ArrayOfPoints(thePoints.size(), true, false);for (size_t i = 0; i < thePoints.size(); ++i)
{const gp_Pnt& p = thePoints[i];Quantity_Color col = CalculateColor(p); // 自定义颜色计算aColoredPoints->AddVertex(p, col);
}Handle(AIS_PointCloud) aColorCloud = new AIS_PointCloud();
aColorCloud->SetPoints(aColoredPoints);

动态更新点云

void UpdatePointCloud(Handle(AIS_PointCloud)& theCloud,const std::vector<gp_Pnt>& newPoints)
{Handle(Graphic3d_ArrayOfPoints) newArray = new Graphic3d_ArrayOfPoints(newPoints.size(), false, true);for (const auto& p : newPoints){newArray->AddVertex(p);}theCloud->SetPoints(newArray);theCloud->Update();
}

版本兼容性处理

为保证代码在多个OCCT版本中兼容,建议添加预处理指令:

#if OCC_VERSION_HEX >= 0x070700// 使用原生AIS_PointCloudHandle(AIS_PointCloud) aCloud = new AIS_PointCloud();
#else// 回退到PolyLine方案Handle(AIS_PolyLine) aCloud = CreateFallbackCloud();
#endif

诊断技巧

  1. 性能分析

    // 在渲染前后添加计时器
    OSD_Timer aTimer;
    aTimer.Start();
    // ... 渲染操作 ...
    aTimer.Stop();
    std::cout << "Render time: " << aTimer.ElapsedTime() << "s" << std::endl;
    
  2. 显存监控

    // 获取显存状态
    Handle(Graphic3d_GraphicDriver) driver = ViewerTest::GetAISContext()->CurrentViewer()->Driver();
    Standard_Size memUsage = driver->MemoryInfo();
    
  3. 点云验证

    if (!aCloud->GetPoints()->HasVertexColors())
    {std::cerr << "警告:当前点云未启用颜色属性" << std::endl;
    }
    

该方案充分利用OCCT 7.7+的点云优化特性,在保持API简洁性的同时,提供工业级的大规模点集可视化能力。


http://www.ppmy.cn/devtools/171547.html

相关文章

springboot使用netty做TCP客户端

1、服务端文档说明 ## 1. 概述本文档描述了Socket模拟器的通信协议实现细节&#xff0c;包括数据包格式、字节序、编码方式等信息。## 2. 通信基础### 2.1 连接方式 - 协议类型&#xff1a;TCP - 网络层&#xff1a;IPv4 (AddressFamily.InterNetwork) - 传输方式&#xff1a;流…

pdf转换markdwon文档

文章目录 实现步骤示例代码说明注意事项安装依赖 将PDF文件转换为Markdown&#xff08;MD&#xff09;格式可以使用Python中的 PyMuPDF库来提取文本内容&#xff0c;然后结合一些格式化规则将其转换为Markdown格式。以下是一个简单的实现示例&#xff1a; 实现步骤 使用PyMuP…

【Kafka】Kafka4.0在windows上启动

Kafka4.0在windows上启动单机版 Windows上安装Kafka4.0安装JDK 启动格式化日志目录启动服务 测试创建topic启动一个消费端启动一个生产端测试生产端的操作消费端的操作 Windows上安装Kafka4.0 首先下载安装编译好的安装包&#xff0c;下载地址&#xff1a;https://kafka.apach…

基于javaweb的SpringBoot线上网络文件管理系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

【windows搭建lvgl模拟环境之VSCode】

搭建vscodelvgl8.3所有资料&#xff0c;0积分 通过在windows搭建LVGL模拟环境方便UI界面开发和调试&#xff0c;后续只需将相关的代码移植到项目中即可&#xff0c;方便调试&#xff0c;PC上支持下列模拟器&#xff1a; 本文说明两种方法搭建模拟器环境&#xff0c;分别采用&am…

系统思考—第五项修炼

感谢【汇丰】邀请&#xff0c;为其高阶管理者交付系统思考系列项目。这不仅是一次知识的传递&#xff0c;更是一次认知的升级。 系统思考&#xff0c;作为《第五项修炼》的核心能力&#xff0c;正在帮助越来越多的管理者突破碎片化决策的困局&#xff0c;建立看见全貌的智慧与…

查看linux系统文件描述符限制

查看linux系统文件描述符限制 [rootlocalhost log]# cat /proc/sys/fs/file-max 12956789 [rootlocalhost log]#

K8s故障排查手册:从Pod崩溃到网络不通

本文基于数百个真实生产环境案例&#xff0c;系统化梳理Kubernetes集群的故障排查方法论。涵盖Pod生命周期异常、服务发现失效、存储卷挂载失败、网络策略冲突等核心故障场景&#xff0c;结合Prometheus监控指标、eBPF深度追踪、CNI插件分析等技术手段&#xff0c;为企业运维团…