cli-anything-cloudcompare 是做什么的?
面向 AI 智能体的 CloudCompare 命令行封装工具——CloudCompare,开源 3D 点云和网格处理软件。
41 个命令,涵盖 9 个功能组。
安装
pip install cli-anything-cloudcompare
前置条件:
- Python 3.10+
- 系统中已安装 CloudCompare
- Linux (Flatpak):
flatpak install flathub org.cloudcompare.CloudCompare - macOS/Windows:从 https://cloudcompare.org 下载
- Linux (Flatpak):
测试环境: CloudCompare 2.13.2 (Flatpak, Linux)
全局选项
这些选项必须放在子命令之前:
cli-anything-cloudcompare [--project FILE] [--json] COMMAND [ARGS]...
| 选项 | 说明 |
|---|---|
-p, --project TEXT | 项目 JSON 文件路径 |
--json | 以 JSON 格式输出结果(便于智能体程序解析) |
命令组
1. project — 项目管理(3 个命令)
project new
创建新的空项目文件。
# 使用默认名称创建项目
cli-anything-cloudcompare project new -o myproject.json
# 使用自定义名称创建项目
cli-anything-cloudcompare project new -o myproject.json -n "大桥勘测 2024"
# 为智能体生成的 JSON 输出
cli-anything-cloudcompare --json project new -o myproject.json
选项:-o/--output TEXT(必需),-n/--name TEXT
project info
显示项目信息和已加载的实体。
cli-anything-cloudcompare --project myproject.json project info
# JSON 输出
cli-anything-cloudcompare --project myproject.json --json project info
project status
快速显示项目状态(点云数、网格数、上次操作)。
cli-anything-cloudcompare --project myproject.json project status
2. session — 会话管理(4 个命令)
session save
将当前项目状态保存到磁盘。
cli-anything-cloudcompare --project myproject.json session save
session history
显示最近的操作历史。
# 显示最近 10 个操作(默认)
cli-anything-cloudcompare --project myproject.json session history
# 显示最近 5 个操作
cli-anything-cloudcompare --project myproject.json session history -n 5
选项:-n/--last INTEGER
session set-format
更新后续操作的默认导出格式。
# 将点云默认导出格式设置为 LAS
cli-anything-cloudcompare --project myproject.json session set-format --cloud-fmt LAS --cloud-ext las
# 将网格默认导出格式设置为 OBJ
cli-anything-cloudcompare --project myproject.json session set-format --mesh-fmt OBJ --mesh-ext obj
# 同时设置点云和网格的默认格式
cli-anything-cloudcompare --project myproject.json session set-format \
--cloud-fmt PLY --cloud-ext ply \
--mesh-fmt STL --mesh-ext stl
选项:--cloud-fmt TEXT,--cloud-ext TEXT,--mesh-fmt TEXT,--mesh-ext TEXT
session undo
移除最后一次操作记录(软撤销——不删除输出文件)。
cli-anything-cloudcompare --project myproject.json session undo
3. cloud — 点云操作(21 个命令)
所有点云命令都需要提供 CLOUD_INDEX(从 cloud list 获取的从 0 开始的整数),并且大多数支持 --add-to-project 选项,用于将输出结果注册回项目。
cloud add
将点云文件添加到项目。
# 添加 LAS 文件
cli-anything-cloudcompare --project myproject.json cloud add /data/scan.las
# 添加并指定标签
cli-anything-cloudcompare --project myproject.json cloud add /data/scan.las -l "屋顶扫描"
选项:-l/--label TEXT
cloud list
列出当前项目中的所有点云。
cli-anything-cloudcompare --project myproject.json cloud list
# 用于解析索引的 JSON 输出
cli-anything-cloudcompare --project myproject.json --json cloud list
cloud convert
将点云从一种格式转换为另一种格式(格式由文件扩展名确定)。
# LAS → PLY
cli-anything-cloudcompare cloud convert /data/scan.las /data/scan.ply
# PCD → LAS
cli-anything-cloudcompare cloud convert /data/cloud.pcd /data/cloud.las
cloud subsample
使用 RANDOM、SPATIAL 或 OCTREE 方法减少点数量。
# 随机:保留 100,000 个点
cli-anything-cloudcompare --project myproject.json cloud subsample 0 \
-o /data/sub_random.las -m random -n 100000
# 空间:点间最小距离 0.05 米
cli-anything-cloudcompare --project myproject.json cloud subsample 0 \
-o /data/sub_spatial.las -m spatial -n 0.05
# 八叉树:级别 8
cli-anything-cloudcompare --project myproject.json cloud subsample 0 \
-o /data/sub_octree.las -m octree -n 8 --add-to-project
选项:-o/--output TEXT(必需),-m/--method [random|spatial|octree],-n/--param FLOAT,--add-to-project
cloud crop
使用轴对齐包围盒裁剪点云。
# 保留框内的点
cli-anything-cloudcompare --project myproject.json cloud crop 0 \
-o /data/cropped.las \
--xmin 0.0 --ymin 0.0 --zmin 0.0 \
--xmax 10.0 --ymax 10.0 --zmax 5.0
# 保留框外的点
cli-anything-cloudcompare --project myproject.json cloud crop 0 \
-o /data/exterior.las \
--xmin 0.0 --ymin 0.0 --zmin 0.0 \
--xmax 10.0 --ymax 10.0 --zmax 5.0 --outside
选项:-o/--output TEXT(必需),--xmin/ymin/zmin/xmax/ymax/zmax FLOAT(全部必需),--outside,--add-to-project
cloud normals
通过八叉树方法计算表面法向量。
# 在八叉树级别 6 计算法向量
cli-anything-cloudcompare --project myproject.json cloud normals 0 \
-o /data/with_normals.ply --level 6
# 计算朝向 +Z 的法向量
cli-anything-cloudcompare --project myproject.json cloud normals 0 \
-o /data/with_normals.ply --level 6 --orientation plus_z --add-to-project
选项:-o/--output TEXT(必需),--level INTEGER(1–10),--orientation [plus_x|plus_y|plus_z|minus_x|minus_y|minus_z],--add-to-project
cloud invert-normals
翻转点云中所有法向量。
cli-anything-cloudcompare --project myproject.json cloud invert-normals 0 \
-o /data/flipped_normals.ply --add-to-project
选项:-o/--output TEXT(必需),--add-to-project
cloud filter-sor
统计离群点移除——去除孤立的噪声点。
# 默认参数(k=6 个邻居,1.0 标准差系数)
cli-anything-cloudcompare --project myproject.json cloud filter-sor 0 \
-o /data/denoised.las
# 自定义参数
cli-anything-cloudcompare --project myproject.json cloud filter-sor 0 \
-o /data/denoised.las --nb-points 12 --std-ratio 2.0 --add-to-project
选项:-o/--output TEXT(必需),--nb-points INTEGER,--std-ratio FLOAT,--add-to-project
cloud noise-filter
使用 PCL 噪声滤波器去除噪声点(KNN 或半径模式)。
# KNN 模式(默认)
cli-anything-cloudcompare --project myproject.json cloud noise-filter 0 \
-o /data/clean.las --knn 8 --noisiness 1.0
# 半径模式
cli-anything-cloudcompare --project myproject.json cloud noise-filter 0 \
-o /data/clean.las --radius 0.1 --use-radius --add-to-project
选项:-o/--output TEXT(必需),--knn INTEGER,--noisiness FLOAT,--radius FLOAT,--use-radius,--absolute,--add-to-project
cloud filter-csf
使用布料模拟滤波器(CSF)算法进行地面滤波。将地面点与非地面点(建筑物、植被)分离。
# 仅提取地面——混合地形
cli-anything-cloudcompare --project myproject.json cloud filter-csf 0 \
--ground /data/ground.las --scene relief
# 分离地面 + 非地面——城市场景
cli-anything-cloudcompare --project myproject.json cloud filter-csf 0 \
--ground /data/ground.las \
--offground /data/buildings.las \
--scene flat --cloth-resolution 0.5 --class-threshold 0.3
# 陡峭森林坡地,带坡度后处理
cli-anything-cloudcompare --project myproject.json cloud filter-csf 0 \
--ground /data/terrain.las --scene slope --proc-slope --add-to-project
选项:-g/--ground TEXT(必需),-u/--offground TEXT,--scene [slope|relief|flat],--cloth-resolution FLOAT,--class-threshold FLOAT,--max-iteration INTEGER,--proc-slope,--add-to-project
cloud filter-sf
根据标量场值范围过滤点云(保留 SF 值在 [min, max] 内的点)。
# 保留 SF 值在 10 到 50 之间的点
cli-anything-cloudcompare --project myproject.json cloud filter-sf 0 \
-o /data/filtered.las --min 10.0 --max 50.0
# 使用指定 SF 索引进行过滤
cli-anything-cloudcompare --project myproject.json cloud filter-sf 0 \
-o /data/filtered.las --min 0.0 --max 1.5 --sf-index 2 --add-to-project
选项:-o/--output TEXT(必需),--min FLOAT(必需),--max FLOAT(必需),--sf-index INTEGER,--add-to-project
cloud sf-from-coord
将坐标轴(X/Y/Z)转换为标量场。常用于创建高度(Z)标量场。
# 创建 Z 标量场(高度)
cli-anything-cloudcompare --project myproject.json cloud sf-from-coord 0 \
-o /data/with_z_sf.las --dim z --add-to-project
# 创建 X 标量场并指定活动索引
cli-anything-cloudcompare --project myproject.json cloud sf-from-coord 0 \
-o /data/with_x_sf.las --dim x --sf-index 0
选项:-o/--output TEXT(必需),--dim [x|y|z](默认:z),--sf-index INTEGER,--add-to-project
cloud sf-filter-z
便捷命令:一步完成 Z → 标量场转换并按高度范围过滤。
# 提取 z=1.0 米到 z=2.5 米之间的点
cli-anything-cloudcompare --project myproject.json cloud sf-filter-z 0 \
-o /data/slice.las --min 1.0 --max 2.5 --add-to-project
# 仅使用上限
cli-anything-cloudcompare --project myproject.json cloud sf-filter-z 0 \
-o /data/below_5m.las --max 5.0
选项:-o/--output TEXT(必需),--min FLOAT,--max FLOAT,--add-to-project
cloud sf-to-rgb
将活动的标量场转换为 RGB 颜色。
cli-anything-cloudcompare --project myproject.json cloud sf-to-rgb 0 \
-o /data/coloured.ply --add-to-project
选项:-o/--output TEXT(必需),--add-to-project
cloud rgb-to-sf
将 RGB 颜色转换为标量场(亮度值)。
cli-anything-cloudcompare --project myproject.json cloud rgb-to-sf 0 \
-o /data/luminance.las --add-to-project
选项:-o/--output TEXT(必需),--add-to-project
cloud curvature
计算曲率标量场(MEAN 或 GAUSS)。
# 平均曲率,半径 0.5 米
cli-anything-cloudcompare --project myproject.json cloud curvature 0 \
-o /data/curvature.las --type mean --radius 0.5
# 高斯曲率
cli-anything-cloudcompare --project myproject.json cloud curvature 0 \
-o /data/curvature.las --type gauss --radius 0.5 --add-to-project
选项:-o/--output TEXT(必需),--type [mean|gauss],-r/--radius FLOAT,--add-to-project
cloud roughness
计算粗糙度标量场(相对于局部最佳拟合平面的偏差)。
cli-anything-cloudcompare --project myproject.json cloud roughness 0 \
-o /data/roughness.las --radius 0.2 --add-to-project
选项:-o/--output TEXT(必需),-r/--radius FLOAT,--add-to-project
cloud density
计算点密度标量场。
# KNN 密度
cli-anything-cloudcompare --project myproject.json cloud density 0 \
-o /data/density.las --type knn --radius 0.5
# 表面密度
cli-anything-cloudcompare --project myproject.json cloud density 0 \
-o /data/density.las --type surface --radius 1.0 --add-to-project
选项:-o/--output TEXT(必需),-r/--radius FLOAT,--type [knn|surface|volume],--add-to-project
cloud segment-cc
将点云分割成连通分量(聚类)。每个分量保存为单独文件。
# 使用八叉树级别 8,每个分量最少 100 个点进行分割
cli-anything-cloudcompare --project myproject.json cloud segment-cc 0 \
-o /data/components/ --octree-level 8 --min-points 100
# 保存为 PLY 文件
cli-anything-cloudcompare --project myproject.json cloud segment-cc 0 \
-o /data/components/ --octree-level 6 --min-points 50 --fmt ply
选项:-o/--output-dir TEXT(必需),--octree-level INTEGER,--min-points INTEGER,--fmt TEXT
cloud merge
将项目中的所有点云合并为一个点云。
cli-anything-cloudcompare --project myproject.json cloud merge \
-o /data/merged.las --add-to-project
选项:-o/--output TEXT(必需),--add-to-project
cloud mesh-delaunay
从点云构建 2.5 维 Delaunay 三角剖分网格。
# 基本 Delaunay 网格
cli-anything-cloudcompare --project myproject.json cloud mesh-delaunay 0 \
-o /data/surface.obj
# 最佳拟合平面,并限制最大边长
cli-anything-cloudcompare --project myproject.json cloud mesh-delaunay 0 \
-o /data/surface.ply --best-fit --max-edge-length 2.0 --add-to-project
选项:-o/--output TEXT(必需),--best-fit,--max-edge-length FLOAT,--add-to-project
4. mesh — 网格操作(3 个命令)
mesh add
将网格文件添加到项目。
cli-anything-cloudcompare --project myproject.json mesh add /data/model.obj
# 添加并指定标签
cli-anything-cloudcompare --project myproject.json mesh add /data/model.ply -l "建筑模型"
选项:-l/--label TEXT
mesh list
列出项目中的所有网格。
cli-anything-cloudcompare --project myproject.json mesh list
# JSON 输出
cli-anything-cloudcompare --project myproject.json --json mesh list
mesh sample
从网格表面采样点云。
# 从索引 0 的网格中采样 50,000 个点
cli-anything-cloudcompare --project myproject.json mesh sample 0 \
-o /data/sampled.las -n 50000
# 将采样的点云添加回项目
cli-anything-cloudcompare --project myproject.json mesh sample 0 \
-o /data/sampled.las -n 100000 --add-to-project
选项:-o/--output TEXT(必需),-n/--count INTEGER(必需),--add-to-project