Skip to content
目录

巡检组件Roaming

巡检组件 Roaming 是一个相对复杂的组件,涉及较多交互操作。 Roaming 组件一般挂载在 楼层Floor 或者 园区Campus

typescript
roaming = app.levelMgr.current.addComponent(GLOW.Roaming); //添加巡检组件

绘制巡检路径

绘制巡检路径分3步走。 [绘制巡检路径示例]

绘制巡检路径

开启路径绘制

通过调用 startPathEdit 方法来开启路径绘制功能。开启后,鼠标指针变成画笔,在场景中点击左键可以绘制路径。

typescript
roaming.startPathEdit(); //开启路径绘制

结束路径绘制

可以手动调用 endPathEdit 方法来结束路径绘制。另外,在绘制过程中,点击鼠标右键,会自动调用 endPathEdit 方法来结束路径绘制。

typescript
roaming.endPathEdit(); //手动结束路径绘制

获取路径数据

需要在 endPathEdit 方法调用后,获取路径数据。 Roaming 组件有一个 EVENT_ENDPATHEDIT 事件,是在 endPathEdit 方法被调用后触发,可以在该事件回调函数中获取路径数据。路径数据可以通过属性 points 来获取。

typescript
roaming.on('EVENT_ENDPATHEDIT', () => {
    //在这里获取路径数据,并保存起来供以后使用
    console.log(JSON.stringify(roaming.points));
});

加载路径数据

将路径点数据添加到属性 points 即可。 [加载路径数据示例]

typescript
for (let p of points) {
    roaming.points.push(p); //添加路径点数据
}

加载路径数据

显示/隐藏巡检路径

巡检路径默认是显示,可以通过属性 pathVisible 来控制它的可见性。

typescript
roaming.pathVisible = false; //隐藏巡检路径

路径点微调

已经绘制好的路径,允许对每个路径点的位置进行再次调整。 roaming 组件对象内部有一个 _path 属性,它是 Path 类型,可以通过它来完成此操作。 [路径点微调示例]

路径点微调

开启路径点微调

通过调用 path 对象的 attachDrag 方法来开启路径点微调。开启后,可以通过鼠标拖动路径点进行位置调整。

typescript
path.attachDrag();

退出路径点微调

通过调用 path 对象的 detachDrag 来退出路径点微调。

typescript
path.detachDrag();

重新获取路径数据

在调整路径点位置后,需要重新获取路径数据,可以在 path 对象的 POINT_DRAG_END 事件的回调函数中执行该操作。

typescript
path.on('POINT_DRAG_END', () => {
    //在这里重新获取路径数据,并保存起来供以后使用
    console.log(JSON.stringify(roaming.points));
});

巡检设备绑定

我们期望,在巡检漫游时,当到达某个路径点时,可以检查指定设备的告警状态,这需要把路径点和设备进行关联。 roaming 组件提供了一个 EVENT_POINTCLICK 事件,可以在该事件的回调函数中来绑定巡检设备。 [巡检设备绑定示例]

typescript
roaming.on('EVENT_POINTCLICK', ev => {
    let pointIndex: number = ev.data; //当前点击的路径点索引,让这个索引与你的设备数据进行关联
    alert(`您点击了索引为 ${pointIndex} 的路径点。`);
});

巡检设备绑定

巡检演示

通过调用 roaming 组件对象的 startToRoam 方法来启动巡检。可以以 第一人称 或者 第三人称 进行漫游,参数 person 表示人称,true 表示第一人称, false 表示第三人称。 [巡检演示示例]

巡检演示

第三人称巡检

参数 person 传递 false

typescript
roaming.startToRoam(false);

第一人称巡检

参数 person 传递 true

typescript
roaming.startToRoam(true);

结束巡检

巡检默认会循环执行,因此需要手动结束巡检。结束巡检需要调用 roaming 组件对象的 endToRoam 方法。

typescript
roaming.endToRoam();

路径点到达

roaming 组件对象有一个 EVENT_ARRIVE 事件,可以在该事件的回调函数中处理路径点到达逻辑。

typescript
roaming.on('EVENT_ARRIVE', ev => {
    let pointIndex: number = ev.data; //到达的路径点索引
    //假定索引1、3、6绑定了巡检设备
    if ([1, 3, 6].includes(pointIndex)) {
        //暂停5秒,模拟检查设备告警状态
        roaming.pause = true; //暂停巡检
        let alarmState: string = Math.random() > 0.5 ? '正常' : '告警';
        alert(`到达索引为 ${pointIndex} 的路径点,设备状态为:${alarmState}`);
        setTimeout(() => {
            roaming.pause = false; //继续巡检
        }, 5000);
    }
});

暂停/继续巡检

通过属性 pause 来暂停或继续巡检, true 表示暂停, false 表示继续。

typescript
roaming.pause = true; //暂停巡检
roaming.pause = false; //继续巡检

技术支持:13352865103(柯工,微信同号);18688783852(柯工)