Skip to content

Measure

NIVIOBIM测量功能的主插件类,继承自Plugin。提供完整的3D测量工具集,支持多种测量模式和设备适配。

主要功能包括:

  • 多种测量模式:距离、角度、面积、体积、标高测量
  • 设备适配:自动检测移动端并使用触控模式
  • 单位精度管理:支持多种测量单位和精度设置
  • 模型管理:设置和管理要测量的3D模型
  • 事件分发:分发测量相关事件
  • 资源管理:管理测量相关的资源

类定义

javascript
class Measure extends Plugin

构造函数

constructor(viewer3D, options)

创建测量插件实例。

初始化测量插件,根据设备类型自动选择计算模式(桌面端使用SmartMeasureSystem,移动端使用TouchMode)。设置事件监听器,当测量状态更新时自动分发update事件。

参数:

  • viewer3D {Viewer3D} - 三维视图实例,提供场景管理器和渲染器访问
  • options {Object} - 插件配置选项
  • options.name {string} [可选] - 插件名称,默认值为 Measure
  • options.enabled {boolean} [可选] - 是否启用插件,默认值为 false

示例:

javascript
// 创建测量插件
const measure = new Measure(viewer3D, {
    name: 'Measure',
    enabled: false
});

// 启用测量功能
measure.enabled = true;

静态属性

UNIT

测量单位枚举。

定义所有可用的测量单位类型,用于控制测量结果的显示单位。

类型: {Object}
静态: true
只读: true

属性:

  • KM {number} - 千米,值为2000
  • M {number} - 米,值为2001
  • DM {number} - 分米,值为2002
  • CM {number} - 厘米,值为2003
  • MM {number} - 毫米,值为2004

示例:

javascript
// 使用测量单位枚举
console.log(Measure.UNIT.KM); // 2000
console.log(Measure.UNIT.M);  // 2001
console.log(Measure.UNIT.CM); // 2003

// 设置测量单位
measure.setCurrentUnit(Measure.UNIT.M);

// 判断当前单位
if (measure.currentUnit === Measure.UNIT.M) {
    console.log('当前单位为米');
}

PRECISION

测量精度枚举。

定义测量结果的小数位数精度,用于控制测量结果的显示精度。

类型: {Object}
静态: true
只读: true

属性:

  • ONE {number} - 1位小数,值为1
  • TWO {number} - 2位小数,值为2
  • THREE {number} - 3位小数,值为3
  • FOUR {number} - 4位小数,值为4
  • FIVE {number} - 5位小数,值为5

示例:

javascript
// 使用测量精度枚举
console.log(Measure.PRECISION.ONE);   // 1
console.log(Measure.PRECISION.TWO);   // 2
console.log(Measure.PRECISION.THREE); // 3

// 设置测量精度
measure.setCurrentPrecision(Measure.PRECISION.TWO);

// 判断当前精度
if (measure.currentPrecision === Measure.PRECISION.TWO) {
    console.log('当前精度为2位小数');
}

MODE

测量模式枚举。

定义所有可用的测量模式类型,用于控制测量功能的操作模式。

类型: {Object}
静态: true
只读: true

属性:

  • NONE {number} - 无测量模式,值为1000
  • DISTANCE {number} - 距离测量模式,值为1001
  • LEVEL {number} - 标高测量模式,值为1002
  • ANGEL {number} - 角度测量模式,值为1003
  • CLOSED_LINE_AREA {number} - 闭合线面积测量模式,值为1004
  • MESH_SURFACE_AREA {number} - 网格表面积测量模式,值为1005
  • MESH_VOLUME {number} - 网格体积测量模式,值为1006

示例:

javascript
// 使用测量模式枚举
console.log(Measure.MODE.DISTANCE); // 1001
console.log(Measure.MODE.ANGEL);    // 1003
console.log(Measure.MODE.LEVEL);    // 1002

// 设置测量模式
measure.setCurrentMode(Measure.MODE.DISTANCE);

// 判断当前模式
if (measure.currentMode === Measure.MODE.DISTANCE) {
    console.log('当前为距离测量模式');
}

LEVEL_MODE

标高模式枚举。

定义标高测量的两种模式:

  • ABSOLUTE: 绝对标高模式,显示相对于绝对零点(Y=0)的高度
  • RELATIVE: 相对标高模式,显示相对于参考点的高度差

类型: {Object}
静态: true
只读: true

属性:

  • ABSOLUTE {number} - 绝对标高模式,值为3000
  • RELATIVE {number} - 相对标高模式,值为3001

示例:

javascript
// 使用标高模式枚举
console.log(Measure.LEVEL_MODE.ABSOLUTE); // 3000
console.log(Measure.LEVEL_MODE.RELATIVE); // 3001

// 判断当前标高模式
if (currentMode === Measure.LEVEL_MODE.ABSOLUTE) {
    console.log('当前为绝对标高模式');
} else if (currentMode === Measure.LEVEL_MODE.RELATIVE) {
    console.log('当前为相对标高模式');
}

属性

enabled

获取测量功能是否启用。

返回当前测量功能的启用状态,控制测量交互是否处于活动状态。

类型: {boolean}
只读: false

示例:

javascript
// 检查测量功能是否启用
if (measure.enabled) {
    console.log('测量功能已启用');
}

currentMode

获取当前测量模式。

返回当前激活的测量模式,如距离测量、角度测量、面积测量等。

类型: {number}
只读: true

示例:

javascript
// 获取当前测量模式
const mode = measure.currentMode;
console.log('当前测量模式:', mode);

// 判断是否为距离测量模式
if (measure.currentMode === Measure.MODE.DISTANCE) {
    console.log('当前为距离测量模式');
}

currentUnit

获取当前测量单位。

返回当前测量结果的显示单位,如米、厘米、毫米等。

类型: {number}
只读: true

示例:

javascript
// 获取当前测量单位
const unit = measure.currentUnit;
console.log('当前测量单位:', unit);

// 判断是否为米单位
if (measure.currentUnit === Measure.UNIT.M) {
    console.log('当前单位为米');
}

constraintEnable

获取约束功能启用状态。

返回当前约束功能的启用状态,控制测量时是否启用智能约束功能。智能约束功能包括端点吸附、中点吸附、边缘吸附等。

类型: {boolean}
只读: false

示例:

javascript
// 检查约束功能是否启用
if (measure.constraintEnable) {
    console.log('智能约束功能已启用');
}

currentPrecision

获取当前测量精度。

返回当前测量结果的小数位数精度设置。

类型: {number}
只读: true

示例:

javascript
// 获取当前测量精度
const precision = measure.currentPrecision;
console.log('当前测量精度:', precision);

// 判断是否为2位小数精度
if (measure.currentPrecision === Measure.PRECISION.TWO) {
    console.log('当前精度为2位小数');
}

方法

clear()

清除所有测量结果。

清空当前场景中的所有测量数据,包括测量线、测量标签和测量缓存。调用后所有已完成的测量结果将被移除。

示例:

javascript
// 清除所有测量结果
measure.clear();
console.log('所有测量结果已清除');

setModel(model)

设置要测量的3D模型。

指定测量操作的目标模型,设置后测量功能将针对该模型进行交互。

参数:

  • model {Object3D} - 要测量的3D模型对象

示例:

javascript
// 设置测量模型
measure.setModel(modelGroup);
console.log('测量模型已设置');

setCurrentMode(mode)

设置当前测量模式。

激活指定的测量功能,支持距离、角度、面积、体积、标高等多种测量模式。设置后用户可以通过交互进行相应类型的测量操作。

参数:

  • mode {number} - 测量模式(使用Measure.MODE枚举)

示例:

javascript
// 设置距离测量模式
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);

setCurrentLevelMode(levelMode)

设置当前标高模式。

根据传入模式切换标高测量方式,并取消当前进行中的测量,以避免旧模式下的状态影响新模式。

参数:

  • levelMode {number} - 要设置的标高模式(LEVEL_MODE.ABSOLUTE 或 LEVEL_MODE.RELATIVE)

示例:

javascript
// 设置为绝对标高模式
measure.setCurrentLevelMode(Measure.LEVEL_MODE.ABSOLUTE);

// 设置为相对标高模式
measure.setCurrentLevelMode(Measure.LEVEL_MODE.RELATIVE);

setCurrentUnit(unit)

设置当前测量单位。

更改测量结果的显示单位,支持千米、米、分米、厘米、毫米等多种长度单位。设置后所有测量结果将按新单位显示。

参数:

  • unit {number} - 测量单位(使用Measure.UNIT枚举)

示例:

javascript
// 设置单位为米
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枚举)

示例:

javascript
// 设置精度为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()

销毁测量插件。

清理插件资源,移除所有事件监听器,销毁计算模式和测量工具。调用后插件将无法使用,需要重新创建实例。

示例:

javascript
// 销毁测量插件
measure.dispose();
console.log('测量插件已销毁');

事件

update

测量状态更新事件。

当测量状态发生变化时触发,如测量点更新、测量完成等。

相关链接

逆维悦动 智建未来