当前位置: 首页 > news >正文

CloudCompare (CC)中ccHObject详解

ccHObject 是 CloudCompare (CC) 的核心类之一,作为所有可视化和数据管理对象的基类。它支持层次结构管理,并能包含各种点云、网格、体素、标签等类型的子对象。


1. ccHObject 主要功能

  • 层次结构管理 (可以添加子对象,形成树状结构)
  • 可视化支持 (控制显示、颜色、选中状态)
  • 数据管理 (存储点云、网格等对象)
  • 文件存储 (支持 CloudCompare .bin 文件格式)
  • 变换支持 (平移、旋转、缩放)

2. ccHObject 关键 API

(1) 构造 & 基础操作

#include <ccHObject.h>

// 创建一个 ccHObject
ccHObject* obj = new ccHObject("MyObject");

// 获取 ID
int id = obj->getUniqueID();

// 获取名称
QString name = obj->getName();
  • ccHObject(const QString& name = QString())
    创建对象,并指定名称(默认空)

  • int getUniqueID() const
    返回对象的唯一 ID

  • void setName(const QString& name)
    设置对象名称

  • QString getName() const
    获取对象名称


(2) 层次结构管理

ccHObject* parent = new ccHObject("Parent");
ccHObject* child = new ccHObject("Child");

// 添加子对象
parent->addChild(child);

// 获取子对象数量
int childCount = parent->getChildrenNumber();

// 获取指定索引的子对象
ccHObject* firstChild = parent->getChild(0);
  • void addChild(ccHObject* obj, int insertIndex = -1)
    添加子对象(insertIndex 指定插入位置,-1 代表末尾)

  • ccHObject* getParent()
    获取当前对象的父对象

  • ccHObject* getChild(int index) const
    获取索引为 index 的子对象

  • int getChildrenNumber() const
    返回子对象的数量

  • void removeChild(ccHObject* obj)
    移除子对象

  • void detachChild(ccHObject* obj)
    取消子对象的父子关系(但不删除对象)


(3) 可视化控制

// 设置是否可见
obj->setVisible(true);

// 检查对象是否可见
bool isVisible = obj->isVisible();

// 选中对象
obj->setSelected(true);

// 设置颜色(仅适用于支持颜色的对象)
ccColor::Rgb color(255, 0, 0);
obj->setTempColor(color);
  • void setVisible(bool state)
    设置对象是否可见

  • bool isVisible() const
    检查对象是否可见

  • void setSelected(bool state)
    设置对象是否被选中

  • void setTempColor(const ccColor::Rgb& col, bool autoActivate = false)
    设置临时颜色

  • void enableTempColor(bool state)
    启用临时颜色


(4) 变换操作

#include <ccGLMatrix.h>

// 创建一个旋转矩阵
ccGLMatrix rotation;
rotation.initFromParameters(30.0, CCVector3(0, 1, 0), CCVector3(0, 0, 0));

// 应用变换
obj->applyGLTransformation_recursive();
obj->setGLTransformation(rotation);

// 取消变换
obj->razGLTransformation();
  • void applyGLTransformation_recursive(bool applyChildren = true)
    递归应用 OpenGL 变换

  • void setGLTransformation(const ccGLMatrix& trans)
    设置变换矩阵

  • void razGLTransformation()
    取消当前变换


(5) 文件存储

#include <ccHObjectCaster.h>

// 保存到 .bin 文件
ccHObject* objectToSave = new ccHObject("SavedObject");
objectToSave->saveToFile("output.bin");

// 从文件加载
ccHObject* loadedObject = ccHObjectCaster::FromFile("output.bin");
  • bool saveToFile(QFile& out, short dataVersion) const
    保存当前对象到 .bin 文件

  • bool loadFromFile(QFile& in, short dataVersion, int flags)
    .bin 文件加载对象


3. ccHObject 继承类

CloudCompare 中有多个 ccHObject 的子类:

子类功能
ccPointCloud存储和管理点云数据
ccMesh存储和管理三角网格
ccPolyline存储和管理折线
ccScalarField存储标量字段(如高度值)
ccIndexedTransformationBuffer变换矩阵序列
ccQuadric存储二次曲面

4. 示例:ccHObject 可视化点云

#include <ccPointCloud.h>
#include <ccGLWindow.h>

int main() {
    // 创建一个点云对象
    ccPointCloud* cloud = new ccPointCloud("My Point Cloud");

    // 添加点
    cloud->reserve(5);
    cloud->addPoint(CCVector3(0, 0, 0));
    cloud->addPoint(CCVector3(1, 0, 0));
    cloud->addPoint(CCVector3(0, 1, 0));
    cloud->addPoint(CCVector3(0, 0, 1));
    cloud->addPoint(CCVector3(1, 1, 1));

    // 创建 ccHObject 根节点
    ccHObject* root = new ccHObject("Root");
    root->addChild(cloud);

    // 设置可视化
    cloud->setVisible(true);
    
    // 创建 CloudCompare 窗口
    ccGLWindow* window = new ccGLWindow();
    window->addToOwnDB(root);
    window->redraw();

    return 0;
}

说明:

  • ccPointCloud 继承自 ccHObject,可以存储点云。
  • ccGLWindow 是 CloudCompare 的 OpenGL 渲染窗口。

5. ccHObject 的应用场景

  1. 点云层次管理
    • 在 CloudCompare 组织多个点云数据
  2. 可视化处理
    • 控制点云、网格、标量场的显示
  3. 文件存储
    • .bin 格式存储复杂 3D 数据
  4. 变换操作
    • 旋转、平移、缩放对象

6. 结论

  • ccHObject 是 CloudCompare 的 核心基类,用于管理 3D 数据。
  • 通过继承 ccHObject,可以创建自定义数据结构。
  • 结合 ccGLWindow,可以在 CloudCompare 中进行 可视化渲染
  • 通过 saveToFile()loadFromFile(),可以存储 .bin 格式的 3D 数据。

如果想在 PCL 中使用 ccHObject 进行可视化,建议使用 ccPointCloud 进行转换。

相关文章:

  • 故障扭曲棱镜反射照片效果ps特效滤镜样机 Distorted Mirror Poster Effect
  • 日志打印级别定义
  • 高精度除法
  • SPI通信协议
  • uvm sequence
  • zsh安装以及安装配置oh-my-zsh安装zsh-autosuggestionszsh-syntax-highlighting
  • 条件变量与生产者-消费者模型
  • Unix/Linux 系统下的文件权限
  • D3524 PWM控制芯片详解:特性、参数与典型应用
  • arm非对齐访问编译器选项
  • vue(1-45)
  • GitHub美化个人主页3D图表显示配置操作
  • [力扣每日一练]关于MySQL和pandas的正则表达式应用
  • caddy常用配置
  • torchvision中数据集的使用
  • ros2 humble无法识别头文件<rclcpp/rclcpp.hpp>
  • 科技赋能建筑业变革:中建海龙创新引领高质量发展新路径
  • 深度解读:智能体2.0 AI Agent多推演进
  • 第七章:Python中pygame库的使用:开发小游戏
  • 【Java】注解
  • 付费的网站推广该怎么做/济南seo公司
  • 做国际贸易用什么网站/超级外链在线发布
  • 安徽网站建/泰州百度seo公司
  • 做logo专用的网站是哪个/某网站搜索引擎优化
  • 邢台做网站推广的地方/阿里云建站
  • 地方旅游网站开发/如何弄一个自己的网站