三维场景在播放态提供五个触发器 + 一组专有动作,写在 scene-3d 的 options.interactions(与全平台交互系统同一套结构)。悬停描边、悬停名称气泡、点击选中描边由「后期效果」开关,免配交互。
| 触发器 | 时机 | payload |
|---|
scene3d-piece-click | 点击三维元素 | pieceUid / name / pieceType;几何拾取另含命中世界坐标 hitX/hitY/hitZ(值标签/标记/看板等 CSS2D 点击无坐标字段);命中模型内部命名部件时再含 objectName(最近命名节点)/ objectPath(命名链 a/b/c,同层重名段带 #N 序号,可精确到第 N 个重名件) |
scene3d-piece-dblclick | 双击三维元素 | 同点击 |
scene3d-piece-contextmenu | 右键三维元素 | 同点击 |
scene3d-piece-hover | 悬停进入/离开(各派发一次) | 同点击 + phase: enter/leave(enter 时悬停在模型部件上同样带 objectName/objectPath) |
scene3d-blank-click | 点击空白处(未命中元素) | 无 |
- 交互条目里加
"triggerTarget": "<piece uid>" 可精确到某个元素(如「只有点击 1# 泵才触发」)。 - payload 字段可在
changeOption 公式里用 {:name}、{:hitX} 等引用,或经 payload-field 传给写测点动作;三维动作的字符串选项支持 {{payload.字段}} 占位(如 {{payload.objectPath}})。 - 模型内部件名称在编辑器「场景图层」展开模型行即可查看/复制(点击子节点视口闪光定位)。
| 动作 | 别名 | 说明 |
|---|
scene3dFlyTo | 相机飞行 | view-uid 书签优先,否则 fly-position+fly-target;fly-transition 平滑 |
scene3dFocus | 聚焦元素 | 相机按包围盒自动取景(fitToBox,padding 留白);piece-uid 留空=用触发 payload 的 pieceUid → 配点击/双击触发器即「点谁聚焦谁」;object-name 填模型部件名称/路径(或 {{payload.objectPath}})时只聚焦该部件 |
scene3dWritePoint | 写测点值 | key + value 或 payload-field;写运行层覆盖绑定层 |
scene3dExplode | 爆炸分解 | piece-uid 留空=全部模型;object-name 填部件名称/路径(或 {{payload.objectPath}})=只炸开该部件子树;mode: explode/reset |
scene3dHighlight | 高亮元素 | effect: outline/bloom;mode: on/off/toggle;uid 留空=全部可高亮元素(整元素级) |
scene3dSubStyle | 子对象样式 | 模型内部部件级效果:object-name 名称/路径(* 通配、| 多选)留空=payload 的 objectPath →「点谁亮谁(部件级)」;mode: highlight 重涂+自发光 / clear 恢复 / show / hide / toggle;color + opacity(仅 highlight)。克隆材质替换、不动原模型 |
scene3dSetVisible | 显示隐藏 | mode: show/hide/toggle;运行态临时显隐 |
scene3dPlayAnim | 模型动画 | 骨骼动画 anim-index;mode: play/stop |
scene3dPathControl | 路径动画 | mode: play 续播/pause/reset 回配置位;uid 留空=全部配置路径的元素 |
scene3dPopup | 信息弹窗 | mode: open/close;piece-uid 留空=用 payload → 「点谁弹谁」;object-name(或 {{payload.objectPath}})= 弹窗锚到部件、标题留空自动用部件名;title/content 支持 {{payload.字段}} 占位;content 每行「标签=值」;弹窗悬浮在元素/部件包围盒顶部 |
scene3dSnapshot | 场景截图 | 截图并下载 png |
scene3dClip | 剖切分析 | mode: on/off/toggle/set/reset + axis/position/invert;配多个按钮做剖切面步进 |
scene3dSetOption | 万能改选项 | 运行时改任意元素任意选项:piece-uid + option + value(JSON 优先解析);日夜/换底图/开步行/换文案全靠它 |
scene3dTween | 补间动画 | 平移/旋转/缩放到目标值:property(position/rotation 度/scale) + to + relative(相对偏移);duration + easing 缓动;loop(once/yoyo 往返一次/yoyo-forever 往返循环=呼吸浮动/loop-forever);mode: start / toggle(原位↔目标值,抬杆、开合门) / stop;object-name 填模型部件名称/路径(* 通配、| 多选、{{payload.objectName}})=只动该部件;同元素同属性重复触发自动接管 |
scene3dPersonTrail | 人员轨迹回放 | 回放人员点位图层记录的历史轨迹:克隆替身沿路线行进;persons-uid 留空=全部人员图层;person-id 留空=payload.personId → 当前选中人员 → 轨迹最长/第一个人(侧栏按钮无需先点中某人);mode: toggle/play/stop;camera-follow 相机跟随;duration 0=按轨迹长度自动(每点约 0.8s,上限 20s) |
scene3dNetRoute | 最近出口路线 | 管网拓扑最短路径高亮(疏散指引):起点=指定/payload/选中/回退人员,终点=管网最近出口(人员先投影到折线再求最短路);net-uid 留空取场景内首个管网;persons-uid/person-id 同轨迹回放;mode: toggle/show/clear;route-color(#ffd700) |
| (通用动作) | changeOption 等 | 平台通用动作照常可用(信息条公式、开窗、切页……) |
| 想要的效果 | 配法 |
|---|
| 点谁弹谁 | scene3d-piece-click → scene3dPopup(piece-uid 留空) |
| 双击聚焦任意设备 | scene3d-piece-dblclick → scene3dFocus(piece-uid 留空),无需预设书签 |
| 点击查询模型部件 | scene3d-piece-click → scene3dPopup(object-name 填 {{payload.objectPath}},content 写 部件={{payload.objectName}});弹窗直接挂在被点部件上 |
| 点谁亮谁(部件级) | scene3d-piece-click → scene3dSubStyle(object-name 留空自动用 payload;mode=highlight) |
| 部件报警变红 | 模型「子对象样式」规则:match 填部件名 + color/blink + 测点门控 data-key+on-values |
| 右键菜单式详情 | scene3d-piece-contextmenu → scene3dPopup / scene3dHighlight |
| 悬停名称气泡 | 「后期效果」开 hover-tip(零配置);再开 hover-tip-sub 气泡附带模型部件名;要更复杂内容再用 hover 触发器 |
| 点击信息条显示命中坐标 | click 触发器 → changeOption 公式 已选中 {:name} · X {:hitX} / Z {:hitZ} |
| 点空白复位 | scene3d-blank-click → scene3dPopup(close) + scene3dFlyTo(总览) |
| 按钮切换工况 | 页面按钮 → scene3dWritePoint(配元素 state/blink/flow 规则联动全场) |
| 一键换风格/换模式 | 按钮 → scene3dSetOption(改天空/底图/雾密度/步行开关/聚字文案……) |
| 抬杆 / 开合门 | 按钮或点击 → scene3dTween(property=rotation、mode=toggle、object-name 填抬杆部件如 GZ*);连续过车模拟直接用「车流」元素 |
| 点击人员回放轨迹 | scene3d-piece-click → scene3dPersonTrail(person-id 留空自动用 payload 的 personId) |
| 应急疏散指引 | 告警按钮 → scene3dNetRoute(人员图层内自动取人,无需先点选) |
"interactions": {
"version": 2,
"groups": [
{
"trigger": { "name": "scene3d-piece-dblclick", "options": {} },
"interactions": [{
"alias": "双击聚焦",
"enable": true,
"trigger": { "name": "scene3d-piece-dblclick", "options": {} },
"actions": [{ "name": "scene3dFocus", "options": { "element": [], "piece-uid": "", "padding": 1.5, "fly-transition": true } }]
}]
}
]
}