Measure
NIVIOBIM测量功能模块,提供完整的3D测量工具集。包括距离测量、角度测量、面积测量、体积测量、标高测量等功能。
类定义
class Measure extends Plugin构造函数
constructor(viewer3D, options)
创建测量插件实例,初始化测量工具,根据设备类型自动选择计算模式(桌面端使用ComputedMode,移动端使用TouchMode)。设置事件监听器,当测量状态更新时自动分发update事件。
参数:
viewer3D{Viewer3D} - 三维视图实例,提供场景管理器和渲染器访问options{Object} - 插件配置选项name{string} [可选] - 插件名称,默认为'Measure'enabled{boolean} [可选] - 是否启用插件,默认为false
示例:
// 创建测量插件
const measure = new Measure(viewer3D, {
name: 'Measure',
enabled: false
});
// 启用测量功能
measure.enabled = true;静态属性
MODE
测量模式枚举,定义所有可用的测量模式类型。
类型: {Object}
静态: true
只读: true
属性:
NONE{number} - 无测量模式DISTANCE{number} - 距离测量模式LEVEL{number} - 标高测量模式ANGEL{number} - 角度测量模式CLOSED_LINE_AREA{number} - 闭合线面积测量模式MESH_SURFACE_AREA{number} - 网格表面积测量模式MESH_VOLUME{number} - 网格体积测量模式
UNIT
测量单位枚举,定义所有可用的测量单位类型。
类型: {Object}
静态: true
只读: true
属性:
KM{number} - 千米M{number} - 米DM{number} - 分米CM{number} - 厘米MM{number} - 毫米
PRECISION
测量精度枚举,定义测量结果的小数位数精度。
类型: {Object}
静态: true
只读: true
属性:
ZERO{number} - 0位小数ONE{number} - 1位小数TWO{number} - 2位小数THREE{number} - 3位小数FOUR{number} - 4位小数
属性
enabled
测量功能是否启用,控制测量功能是否处于活动状态。启用后可以进行测量交互,禁用后停止所有测量操作。
类型: {boolean}
默认值: false
示例:
// 启用测量功能
measure.enabled = true;
// 禁用测量功能
measure.enabled = false;
// 检查测量功能是否启用
if (measure.enabled) {
console.log('测量功能已启用');
}currentMode
当前测量模式,返回当前激活的测量模式,如距离测量、角度测量、面积测量等。
类型: {number}
只读: true
默认值: Measure.MODE.DISTANCE
示例:
// 获取当前测量模式
const mode = measure.currentMode;
console.log('当前测量模式:', mode);
// 判断是否为距离测量模式
if (measure.currentMode === Measure.MODE.DISTANCE) {
console.log('当前为距离测量模式');
}currentUnit
当前测量单位,返回当前测量结果的显示单位,如米、厘米、毫米等。
类型: {number}
只读: true
默认值: Measure.UNIT.M
示例:
// 获取当前测量单位
const unit = measure.currentUnit;
console.log('当前测量单位:', unit);
// 判断是否为米单位
if (measure.currentUnit === Measure.UNIT.M) {
console.log('当前单位为米');
}currentPrecision
当前测量精度,返回当前测量结果的小数位数精度设置。
类型: {number}
只读: true
默认值: Measure.PRECISION.TWO
示例:
// 获取当前测量精度
const precision = measure.currentPrecision;
console.log('当前测量精度:', precision);
// 判断是否为2位小数精度
if (measure.currentPrecision === Measure.PRECISION.TWO) {
console.log('当前精度为2位小数');
}方法
clear()
清除所有测量结果,清空当前场景中的所有测量数据,包括测量线、测量标签和测量缓存。调用后所有已完成的测量结果将被移除。
示例:
// 清除所有测量结果
measure.clear();
console.log('所有测量结果已清除');setModel(model)
设置要测量的3D模型,指定测量操作的目标模型,设置后测量功能将针对该模型进行交互。
参数:
model{Object3D} - 要测量的3D模型对象
示例:
// 设置测量模型
measure.setModel(modelGroup);
console.log('测量模型已设置');setCurrentMode(mode)
设置当前测量模式,激活指定的测量功能,支持距离、角度、面积、体积、标高等多种测量模式。设置后用户可以通过交互进行相应类型的测量操作。
参数:
mode{number} - 测量模式(使用Measure.MODE枚举)
示例:
// 设置距离测量模式
measure.setCurrentMode(Measure.MODE.DISTANCE);
// 设置角度测量模式
measure.setCurrentMode(Measure.MODE.ANGEL);
// 设置面积测量模式
measure.setCurrentMode(Measure.MODE.CLOSED_LINE_AREA);
// 设置体积测量模式
measure.setCurrentMode(Measure.MODE.MESH_VOLUME);
// 设置标高测量模式
measure.setCurrentMode(Measure.MODE.LEVEL);setCurrentUnit(unit)
设置当前测量单位,更改测量结果的显示单位,支持千米、米、分米、厘米、毫米等多种长度单位。设置后所有测量结果将按新单位显示。
参数:
unit{number} - 测量单位(使用Measure.UNIT枚举)
示例:
// 设置单位为米
measure.setCurrentUnit(Measure.UNIT.M);
// 设置单位为厘米
measure.setCurrentUnit(Measure.UNIT.CM);
// 设置单位为毫米
measure.setCurrentUnit(Measure.UNIT.MM);
// 设置单位为千米
measure.setCurrentUnit(Measure.UNIT.KM);setCurrentPrecision(precision)
设置当前测量精度,控制测量结果的小数位数精度,支持1-5位小数精度设置。设置后所有测量结果将按新精度显示。
参数:
precision{number} - 测量精度(使用Measure.PRECISION枚举)
示例:
// 设置精度为1位小数
measure.setCurrentPrecision(Measure.PRECISION.ONE);
// 设置精度为2位小数
measure.setCurrentPrecision(Measure.PRECISION.TWO);
// 设置精度为3位小数
measure.setCurrentPrecision(Measure.PRECISION.THREE);
// 设置精度为4位小数
measure.setCurrentPrecision(Measure.PRECISION.FOUR);
// 设置精度为5位小数
measure.setCurrentPrecision(Measure.PRECISION.FIVE);dispose()
销毁测量插件,清理插件资源,移除所有事件监听器,销毁计算模式和测量工具。调用后插件将无法使用,需要重新创建实例。
示例:
// 销毁测量插件
measure.dispose();
console.log('测量插件已销毁');事件
update
测量状态更新时触发,当测量模式、单位、精度或测量结果发生变化时触发。
示例:
measure.addEventListener('update', () => {
console.log('测量状态已更新');
});使用场景
距离测量
- 测量两点之间的距离
- 测量点到线的距离
- 测量点到面的距离
角度测量
- 测量两条线之间的夹角
- 测量三个点形成的角度
- 测量面与面之间的夹角
面积测量
- 测量闭合区域的面积
- 测量网格表面的面积
- 测量投影面积
体积测量
- 测量网格的体积
- 测量复杂几何体的体积
- 测量建筑空间的体积
标高测量
- 测量点的高程
- 测量相对标高
- 测量标高差