opencascade AIS_PointCloud源码学习

news2024/11/17 3:40:22

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 的初始化,以及基本的视图设置。

参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1956146.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Lua编程

文章目录 概述lua数据类型元表注意 闭包表现 实现 lua/c 接口编程skynet中调用层次虚拟栈C闭包注册表userdatalightuserdata 小结 概述 这次是skynet&#xff0c;需要一些lua/c相关的。写一篇博客&#xff0c;记录下。希望有所收获。 lua数据类型 boolean , number , string…

【一图学技术】2.API测试9种方法图解

9种API测试方法 冒烟测试&#xff1a;冒烟测试是一种快速的表面级测试&#xff0c;用于验证软件的基本功能是否正常工作&#xff0c;以确定是否值得进行更详细的测试。功能测试&#xff1a;功能测试是验证软件是否符合预期功能要求的测试类型。它涉及对每个功能进行测试&#…

[C++进阶]对于多态的底层逻辑

上回我们了解到了多态的定义,概念以及实现,对于多态如何使用和使用条件进行了了解,本篇我们将了解多态的原理。 一、虚函数表 首先我们看看如下代码&#xff1a; #include<iostream> using namespace std; class Base { public:virtual void Func1(){cout << &qu…

动手学深度学习V2每日笔记(权重衰退+Dropout)

本文主要参考沐神的视频教程 https://www.bilibili.com/video/BV1UK4y1o7dy/vd_sourcec7bfc6ce0ea0cbe43aa288ba2713e56d 文档教程 https://zh-v2.d2l.ai/ 本文的主要内容对沐神提供的代码中个人不太理解的内容进行笔记记录&#xff0c;内容不会特别严谨仅供参考。 1.函数目录…

百某应JS逆向

https://ying.baichuan-ai.com/ 目录 一、发起提问 二、观察发现有两个加密参数&#xff1a;X-Bc-Sig和X-Bc-Ts ​三、观察JS调用栈 四、从JS中搜索 X-Bc-Sig和X-Bc-Ts 五、断点并分析参数的生成方式 六、分析入参 七、发现关键的o方法调用了一个i()方法 八、验证结果 …

sqlilabs解题方法

Lass1 查询id为1的用户名和密码 查询id为2的用户名和密码 没有回显&#xff0c;不含id-1的行 判断字段数&#xff0c;字段数为3 查询数据库用户名&#xff0c;和数据库名 查询时id必须超出数据库以外&#xff0c;一般用-1 用户名&#xff1a;user() 数据库名&#xff1a;databa…

VulnHub:colddbox easy

靶机下载地址 信息收集 主机发现 攻击机网段192.168.31.0/24&#xff0c;扫描同网段存活主机。 nmap 192.168.31.0/24 -Pn -T4 发现靶机&#xff0c;IP为192.168.31.176。 端口扫描 扫描靶机开放端口。 nmap 192.168.31.176 -A -p- -T4 开放了80,4512端口&#xff0c;注…

[H并查集] lc100347. 判断矩形的两个角落是否可达(并查集+高质量+周赛408_4)

文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接&#xff1a;100347. 判断矩形的两个角落是否可达 参考&#xff1a; 灵神视频题解&#xff1a;筛质数 巧妙枚举 并查集【力扣周赛 408】 这一期周赛很不错。 2. 题目解析 十分不错的题目哈&#xff0c;关键是题意的转换…

哈希 Hash(闭散列、开散列介绍及其实现)

目录 unordered 系列关联式容器unordered_mapunordered_map 的介绍unordered_map 的接口说明构造函数容量函数迭代器元素访问查询操作修改操作桶操作 unordered_setunordered_set 的介绍unordered_set 的接口说明构造函数容量函数迭代器查询操作修改操作桶操作 底层结构哈希概念…

Catalyst优化器:让你的Spark SQL查询提速10倍

目录 1 逻辑优化阶段 2.1 逻辑计划解析 2.2 逻辑计划优化 2.2.1 Catalys的优化过程 2.2.2 Cache Manager优化 2 物理优化阶段 2.1 优化 Spark Plan 2.1.1 Catalyst 的 Join 策略 2.1.2 如何决定选择哪一种 Join 策略 2.2 Physical Plan 2.2.1 EnsureRequirements 规则 3 相关文…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十七章 Linux中断实验

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

python 裁剪图片

情况&#xff1a; 有时候看视频&#xff0c;看到一个漂亮的妹子&#xff0c;按下 Alt PrintScreen 进行截图之后&#xff0c;会把整个屏幕都截图。 需要适当剪裁一下。 每次打开 PS &#xff0c; 也太慢了。 所以写个代码&#xff0c; 快速处理。 效果对比&#xff1a; 原始…

个人定制化形象生成,FaceChain最新模型部署

FaceChain是阿里巴巴达摩院推出的一个开源的人物写真和个人数字形象的AI生成框架。 FaceChain利用了Stable Diffusion模型的文生图功能&#xff0c;并结合人像风格化LoRA模型训练及人脸相关感知理解模型&#xff0c;将输入的图片进行训练后推理输出生成个人写真图像。 FaceCh…

【redis】对hash类型和list类型的常用命令,应用场景,内部编码的总结

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

初识c++:vector全方面讲解及其代码模拟实现

本节大纲&#xff1a; vector全方面讲解及其代码模拟实现 1.学习vector方法 2.vector的使用 2.1 vector的定义 2.2 vector iterator 的使用 2.3 vector 空间增长问题 2.4 vector 增删查改 2.5 vector 迭代器失效问题&#xff08;重点&#xff09; 3.vector 深度刨析 4…

【Vulnhub系列】Vulnhub_Raven2靶场渗透(原创)

【Vulnhub系列靶场】Vulnhub_Raven2 渗透 原文转载已经过授权 原文链接&#xff1a;Lusen的小窝 - 学无止尽&#xff0c;不进则退 (lusensec.github.io) 一、环境准备 从网盘下载该靶机&#xff0c;在vm中选择【打开】 然后设置好存储路径&#xff0c;开机后检查靶机的网络连…

主宰生物进化的 “魔咒” —— 制约生物在特殊环境下进化方式的线索

一些神秘的法则制约着生物在特殊环境下的进化方式。它们还为动物将如何适应气候变暖提供了线索。 一些奇特的进化现象 一艘装满大象和老鼠的 “诺亚方舟” 搁浅在一座偏远的小岛上。动物们都幸存下来并繁衍后代。但是&#xff0c;随着世代相传&#xff0c;奇怪的事情发生了&a…

【Matlab】快速傅里叶变换fft代码(单边谱)

单边谱&#xff0c;横纵坐标还原代码 参考链接 主代码 function main() clc clear close all %% %仿真时间 dt0.01; t_end10; timedt:dt:t_end;%注意&#xff0c;length(time)会对fft结果的精度有影响 %对应振幅&#xff0c;频率&#xff1a;10、5、2Hz Z20*sin(2*pi*20*time…

使用abpcli创建项目时提示数据库迁移失败

问题描述 使用abpcli创建项目时提示数据库迁移失败&#xff01; 解决方案&#xff1a; 1、检查数据库连接字符串 {"ConnectionStrings": {"Default": "serverlocalhost;port3306;databaseAcmeBookStore;userroot;passwordyour_password;"} }2、…

盗梦空间续集(InceptionNeXt):使用Inception优化加速ConvNeXt实现ImageNet-1K的最佳精度

Abstract 灵感来自ViT的长距离建模能力&#xff0c;大核卷积最近被广泛研究和采用&#xff0c;以扩大感受野并提高模型性能&#xff0c;例如显著的工作ConvNeXt采用77深度卷积。虽然这种深度算子只消耗少量的FLOPs&#xff0c;但由于高内存访问成本&#xff0c;它在强大计算设…