diff --git a/fixtures/bridge-script-source/1.jpg b/fixtures/bridge-script-source/1.jpg
new file mode 100644
index 0000000..6fde9c4
Binary files /dev/null and b/fixtures/bridge-script-source/1.jpg differ
diff --git a/fixtures/bridge-script-source/10.jpg b/fixtures/bridge-script-source/10.jpg
new file mode 100644
index 0000000..5393864
Binary files /dev/null and b/fixtures/bridge-script-source/10.jpg differ
diff --git a/fixtures/bridge-script-source/2.jpg b/fixtures/bridge-script-source/2.jpg
new file mode 100644
index 0000000..a10d10a
Binary files /dev/null and b/fixtures/bridge-script-source/2.jpg differ
diff --git a/fixtures/bridge-script-source/3.jpg b/fixtures/bridge-script-source/3.jpg
new file mode 100644
index 0000000..f4a4f5f
Binary files /dev/null and b/fixtures/bridge-script-source/3.jpg differ
diff --git a/fixtures/bridge-script-source/4.jpg b/fixtures/bridge-script-source/4.jpg
new file mode 100644
index 0000000..ba82e4c
Binary files /dev/null and b/fixtures/bridge-script-source/4.jpg differ
diff --git a/fixtures/bridge-script-source/5.jpg b/fixtures/bridge-script-source/5.jpg
new file mode 100644
index 0000000..5018d21
Binary files /dev/null and b/fixtures/bridge-script-source/5.jpg differ
diff --git a/fixtures/bridge-script-source/6.jpg b/fixtures/bridge-script-source/6.jpg
new file mode 100644
index 0000000..d6fc7be
Binary files /dev/null and b/fixtures/bridge-script-source/6.jpg differ
diff --git a/fixtures/bridge-script-source/7.jpg b/fixtures/bridge-script-source/7.jpg
new file mode 100644
index 0000000..53ff661
Binary files /dev/null and b/fixtures/bridge-script-source/7.jpg differ
diff --git a/fixtures/bridge-script-source/8.jpg b/fixtures/bridge-script-source/8.jpg
new file mode 100644
index 0000000..62e690a
Binary files /dev/null and b/fixtures/bridge-script-source/8.jpg differ
diff --git a/fixtures/bridge-script-source/9.jpg b/fixtures/bridge-script-source/9.jpg
new file mode 100644
index 0000000..255f7ba
Binary files /dev/null and b/fixtures/bridge-script-source/9.jpg differ
diff --git a/fixtures/bridge-script-source/脚本Markdown/README.md b/fixtures/bridge-script-source/脚本Markdown/README.md
new file mode 100644
index 0000000..a6749bc
--- /dev/null
+++ b/fixtures/bridge-script-source/脚本Markdown/README.md
@@ -0,0 +1,65 @@
+# 四份桥梁脚本:图片原文与训练编排索引
+
+提取日期:2026-09-18。
+
+来源:本目录上一级的 `1.jpg`~`10.jpg`,已逐张查看。工作区实际路径为 `E:/work/edit_3d/文档/桥梁/文件2`。本批文档直接依据图片转录,不以 Excel 摘要替代原文。
+
+## 文档入口
+
+| 任务 | 原文文档 | 来源图片 | 原稿内容 |
+|---|---|---|---|
+| TASK-VIRTUAL-005 | [重型支援桥液压泵应急切换](TASK-VIRTUAL-005-液压泵应急切换.md) | [1](../1.jpg)、[2](../2.jpg)、[3](../3.jpg)、[4](../4.jpg) | 封面、故障背景、序幕、概念、供油原理、五项具体操作及末尾继续作业说明 |
+| TASK-VIRTUAL-006 | [重型支援桥液压泵应急替代](TASK-VIRTUAL-006-液压泵应急替代.md) | [5](../5.jpg)、[6](../6.jpg) | 故障背景、替代概念、互救概念、七项操作 |
+| TASK-VIRTUAL-007 | [重型支援桥前泵换件修复](TASK-VIRTUAL-007-前泵换件修复.md) | [7](../7.jpg)、[8](../8.jpg) | 故障背景、十一项操作;前置讲解区为空 |
+| TASK-VIRTUAL-008 | [重型支援桥平衡阀拆拼互换](TASK-VIRTUAL-008-平衡阀拆拼互换.md) | [9](../9.jpg)、[10](../10.jpg) | 四组各四项操作;故障背景未填写,没有独立前置讲解 |
+
+## 转录约定
+
+- 保留原稿的画面要求、解说词、操作顺序、数量、工具规格及相反表述;只整理换行、段落和标点间距。
+- 每份文档将原文和“整理说明/待核对”分开。标题中的讲解编号、内容 ID 和下表分段是便于编排的整理建议,不是原稿已有编号。
+- 图片中的空白明确记为“原稿未填写”,不自行推断故障背景、扭矩、压力合格范围、试车判据或新增操作。
+- 原稿要求展示的原理图、场景画面、视频并不包含在这些文字照片中;照片链接用于查阅来源,不自动当作产品讲解背景图。
+- 圈线不改变印刷正文。无法可靠辨认的手写批注只记录其存在,不作为操作要求。
+- 原文中的疑似错别字单独说明。生产界面与讲解文案应使用核定后的内容,不将整理说明和待确认问题自动放入学员口播。
+
+## 用户确认的页面流程
+
+进入任务 → 项目背景介绍 → 讲解1 → 讲解2 → … → 讲解N → 现有操作步骤。
+
+1. 左侧为一条连续目录:`背景`、`讲解1~N`、现有各操作步骤。
+2. 背景页展示项目背景介绍。
+3. 每个讲解节点支持两种展示形式:**背景图+文字**,或**视频**。
+4. 背景、讲解内容和顺序在**训练编排**中配置,运行页读取配置。
+5. 点击“下一步”按目录进入下一节点;最后一个讲解节点的“下一步”才进入现有操作阶段。
+6. 背景页和每一个讲解页均增加“**跳过讲解**”,直接进入现有操作阶段的起点,结束当前讲解媒体播放;不把操作步骤标记为已完成。
+7. 现有操作步骤的交互、准备记录、评分及提交保持原有含义。前置背景/讲解不作为已完成的模型操作。
+
+以上为本次需求记录;尚未在本批文档提取中修改页面或发布任务。
+
+## 根据原文建议的讲解分段
+
+| 任务 | 背景内容 | 前置讲解建议 | 接续操作 |
+|---|---|---|---|
+| 005 | `005-BG`:巨石撞击前泵、检查及0 MPa现象 | `005-L01` 液压泵作用与应急切换引入;`005-L02` 应急切换是什么;`005-L03` 双泵供油回路;`005-L04` 打开球阀后的回油问题;`005-L05` 自救阀与切换原理 | 现有五步,末尾继续作业说明单独保留 |
+| 006 | `006-BG`:原稿重复的前泵受损背景 | `006-L01` 替代是什么;`006-L02` 双车互救是什么 | 七步 |
+| 007 | `007-BG`:原稿前泵受损背景,存在一处疑似漏字 | 原稿无独立正文;不要凭空生成。需要增加时,可另写并标记“编写内容”,或将操作解说转为经确认的演示视频 | 十一步 |
+| 008 | 原稿背景空白,待补充 | 原稿无独立正文;不要套用005的事故背景。后续背景及前置讲解需另行编写或提供 | 十六步 |
+
+对于没有前置讲解的配置,建议允许讲解数量为0:有背景时从背景进入操作;背景也未配置时直接进入操作。不在学员页展示“原稿未填写”的空白讲解占位。此项是空配置处理建议。
+
+## 需要核定的原文问题
+
+| 位置 | 问题 | 本次处理 |
+|---|---|---|
+| 005,2.jpg,型号 | 转录为“GQZ009”,型号字母建议以清晰原件复核 | 在原文文档注明待核 |
+| 005,3.jpg,球阀原理 | 出现“是而是经打开的球阀”,疑为“而是” | 保留可见原文并说明 |
+| 005,3.jpg→4.jpg | 原理段跨页,4.jpg开头承接3.jpg最后一句 | 连续转录,并保留跨页标识 |
+| 005,4.jpg | 原理段要求打开自救阀,操作段仅列互救开关等五项 | 不擅自增删步骤或判定两者等同 |
+| 006,5.jpg | 背景是前泵受损,概念段是液压系统完全失效 | 两段分别保留,适用工况待核 |
+| 006,5.jpg,第4项 | “在辅助控制盒能够将”疑为病句 | 原文保留;产品文案可核定后改为“在辅助控制盒内将” |
+| 007,7.jpg,背景 | 写“所有执行机构动作”,同段稍后又写“均不动作”;005/006对应句为“不动作” | 保留差异,不能悄悄补“不” |
+| 007,7.jpg~8.jpg | 工具出现“板手/把手”等写法 | 原文保留,整理说明列出建议规范词 |
+| 008,9.jpg→10.jpg | 装配大腔第③项先写取袋旋紧,跨页后又写拧下并封袋 | 两句都保留,标记方向相反 |
+| 008,10.jpg | 装配小腔第③项也同时有装配和拆卸句 | 两句都保留,待核定 |
+| 008,9.jpg~10.jpg | 安装四颗固定螺栓后,又要求旋紧四颗阀体连接螺栓 | 是否同一组不得推定 |
+| 008,9.jpg | 故障背景未填写;原稿未明确文字写出两阀交换的具体来源/目标 | 保留空白与标题“互换”,不编造位置 |
diff --git a/fixtures/bridge-script-source/脚本Markdown/TASK-VIRTUAL-005-液压泵应急切换.md b/fixtures/bridge-script-source/脚本Markdown/TASK-VIRTUAL-005-液压泵应急切换.md
new file mode 100644
index 0000000..8c5d30f
--- /dev/null
+++ b/fixtures/bridge-script-source/脚本Markdown/TASK-VIRTUAL-005-液压泵应急切换.md
@@ -0,0 +1,160 @@
+# 重型支援桥液压泵应急切换
+
+任务对应:`TASK-VIRTUAL-005`。
+
+来源:[1.jpg](../1.jpg)、[2.jpg](../2.jpg)、[3.jpg](../3.jpg)、[4.jpg](../4.jpg)。提取日期:2026-09-18。
+
+> 本文为图片原文转录。`005-BG`、`005-L01~L05`为后续编排建议 ID。小节标题由整理时添加;原稿画面、解说词和操作正文分别保留。
+
+## 封面
+
+来源:[1.jpg](../1.jpg)。
+
+重型支援桥液压泵应急切换
+
+## 项目背景原文(005-BG)
+
+来源:[2.jpg](../2.jpg),表格上方“故障背景”。
+
+重型支援桥在将移动架推出至中间位置时,突遇山体滑坡,巨石滚落,飞入底盘车两副车架内,产生巨大撞击声,操作手随即停车检查,发现前泵被飞入巨石击中,导致泵体变形。而后桥梁分队分队长指挥操作手试车检查,驾驶员在接通取力器后,操作手按照规定程序试车,此时托架和架设架所有执行机构不动作,随即向分队长报告。而后分队长指挥操作手对装备进行动作检查,操作手在托架和架设架均不动作的状态下,手动将托架马达换向联手柄搬至“向前”位置,同时,分队长观察前泵出口处(托架多路换向阀M口)压力表,此时压力表显示0MPa。由此分队长判断前泵损坏。
+
+## 讲解1:液压泵作用与应急切换引入(005-L01)
+
+来源:[2.jpg](../2.jpg),内容栏“序幕”,画面第1~2项及对应解说。
+
+### 画面与字幕原文
+
+1. 字幕:重型支援桥液压泵应急切换修复。
+ - (1)画面显示受损重型支援桥;
+ - (2)画面依次显示重型支援桥架设环境、战场环境、抢修救灾场景。
+ - (3)画面显示重型支援桥液压系统原理图。
+2. 字幕:应急切换。
+
+### 解说词原文
+
+GQZ009型重型支援桥作为应急保障力量的重要组成部分,在抢险救灾中起到了关键作用。在架设与撤收中,液压系统作为装备的动力系统,特别是液压系统的心脏——液压泵,这一关键部件的可靠性直接关系到能否完成桥梁架设撤收作业,面对复杂的战场环境,一旦液压系统出现故障,就会导致桥梁架设撤收作业被迫中断,甚至引发危险状态。
+
+那在战时,如果液压泵损坏,该怎样快速完成架桥任务呢?
+
+通过对液压系统分析可知,重型支援桥液压系统采取了“双泵独立供油”的设计理念,因此,如果其中一个液压泵出现损伤,可以采取应急切换的方法,快速完成装备抢修。
+
+> 整理说明:型号暂录为“GQZ009”,建议以清晰原件核对,不由产品型号常识替换。图中只有上述画面要求,没有附上原理图及三类场景素材。
+
+## 讲解2:应急切换是什么(005-L02)
+
+来源:[2.jpg](../2.jpg),画面第3~4项及对应解说。
+
+### 画面与字幕原文
+
+3. 字幕:
+ - 一、应急切换是什么
+ - 二、应急切换怎么实现
+ - 三、应急切换该怎么做
+4. 画面:重型支援桥两个液压泵。
+
+### 解说词原文
+
+那什么是应急切换呢?
+
+在装备战场抢救抢修中,切换是一种应急修理方式,其是指通过回路转换或改接,脱开损伤部分,接通备用部分,或者将原来担负非基本功能的完好部分改换到基本功能回路中。
+
+针对重型支援桥,应急切换是指在单个液压泵或取力器出现故障时,通过切换到另一个液压泵继续完成架设或撤收作业的方法。
+
+## 讲解3:双泵供油回路(005-L03)
+
+来源:[3.jpg](../3.jpg),原理段开头。
+
+### 画面与字幕原文
+
+4. 字幕:
+ - 一、应急切换是什么
+ - 二、应急切换怎么实现
+ - 三、应急切换该怎么做
+
+画面:重型支援桥液压系统原理图(供油回路)。
+
+> 整理说明:原稿此处编号仍为“4.”,与上一页重复,转录保留。
+
+### 解说词原文
+
+重型支援桥是如何实现应急切换的?
+
+我们从原理上来寻找答案,根据液压系统原理,重型支援桥设置有2个供油回路,一个是前泵供油回路,由前泵提供动力,主要负责为托架液压系统和架设架液压系统提供动力,主要由液压油箱、前泵、前泵出油滤油器、托架多路换向阀连接块内的三通流量调节阀、回油滤油器等构成完成的液压回路;另一个是后泵供油回路,由后泵提供动力,主要负责为支腿液压系统和吊机液压系统提供动力,主要由液压油箱、后泵、后泵出油滤油器、支腿多路换向阀连接块内的三通流量调节阀、回油滤油器等构成完成的液压回路。
+
+> 整理说明:“构成完成的液压回路”按图片文字保留,疑为“构成完整的液压回路”。
+
+## 讲解4:打开球阀后的回油问题(005-L04)
+
+来源:[3.jpg](../3.jpg)至[4.jpg](../4.jpg)开头,连续原理段。
+
+### 画面提示原文
+
+(1)打开球阀。
+
+### 解说词原文
+
+此时,我们应该注意到在两个出油滤油器的出口处设置一球阀,在正常情况下,该球阀处于关闭状态。
+
+那如果将该球阀打开,会出现什么样的情况呢?
+
+此处以托架马达向前为例说明,当操作手操作托架马达向前时,来自负载侧的压力会将托架多路换向阀连接块内的三通流量调节阀关闭,此时来自前泵的液压油无法通过托架多路换向阀连接块内的三通流量调节阀返回液压油箱,应通过托架多路换向阀内部通道进入托架马达换向联,而后进入液压马达,推动液压马达旋转。
+
+但此时液压马达侧负载压力较大,液压油便不会进入液压马达,是而是经打开的球阀,进入支腿多路换向阀连接块内,通过支腿多路换向阀内的三通流量调节阀返回液压油箱。
+
+操作托架液压系统和架设架液压系统的任一执行机构时,均会出现上述现象。同理可分析,操作支腿液压系统和吊机液压系统的任一执行机构时,也会出现上述现象。
+
+那在前泵损坏的情况下,可否利用液压系统这一设计理念,完成重型支援桥的架设和撤收作业呢?
+
+通过上述分析,操作重型支援桥任一执行机构时,负载侧压力总会关闭相应的多路换向阀连接块内的三通流量调节阀,使得来自液压泵的液压油从另一多路换向阀连接块内的三通流量调节阀返回液压油箱,因此,如果提前关闭两个多路换向阀连接块内的三通流量调节阀,则无论来自哪个液压泵的液压油均不会返回液压油箱,那通过哪个元件关闭三通流量调节阀呢?
+
+> 整理说明:最后一段在3.jpg末行“负载侧压力总会”后跨页,4.jpg从“关闭相应的……”继续;已连为完整段落。“是而是”按可见原文保留,疑为“而是”。
+
+## 讲解5:自救阀与切换原理(005-L05)
+
+来源:[4.jpg](../4.jpg)上半部。
+
+### 画面提示原文
+
+(2)打开自救阀。
+
+### 解说词原文
+
+此时我们应注意到,托架多路换向阀和支腿多路换向阀的M口各串联一自救阀,如果将该自救阀打开,则在接通取力器时,来自液压泵的液压油便将三通流量调节阀关闭。
+
+因此,在实施切换时,还需打开自救阀。
+
+## 进入操作阶段的引导原文
+
+来源:[4.jpg](../4.jpg)下半部。
+
+### 画面与字幕原文
+
+4. 字幕:
+ - 一、应急切换是什么
+ - 二、应急切换怎么实现
+ - 三、应急切换该怎么做
+
+画面:重型支援桥实装,具体操作。
+
+### 引导解说原文
+
+以上就是应急切换的原理,那在前泵损坏的情况下,该如何操作呢?操作方法具体如下:
+
+## 具体操作原文
+
+来源:[4.jpg](../4.jpg),被手写圈线标出的操作段。以下分项编号为整理时添加,原稿使用“首先/而后/最后”衔接。
+
+1. 首先,根据故障现象确定是哪一个液压泵发生故障;
+2. 而后,断开架桥车取力器;
+3. 而后,将架桥车备胎斜上方连接两个红色滤油器的球阀打开;注意:手柄由垂直于管路方向旋转至平行于管路方向。
+4. 而后,重新接通取力器;
+5. 而后,打开辅助控制盒内的“互救”开关。
+
+最后,利用一个液压泵继续完成作业,作业时按照正常的装备操作要求进行操作即可。
+
+## 待核对与素材记录
+
+- 原理段“打开自救阀”与操作段“互救开关”的对应关系没有在图片中解释,不能据此认定为同一操作或自行增加一步。
+- 最后一段继续作业为原文内容,不能因当前系统只有五步就省略;具体后续作业动作未在本图展开。
+- 两个液压泵画面、液压原理图、环境与救灾画面均为原稿要求,需另行关联素材。
+- 4.jpg有圈线和手写批注;底部手写字迹无法可靠辨认,本次未作文字推定。
diff --git a/fixtures/bridge-script-source/脚本Markdown/TASK-VIRTUAL-006-液压泵应急替代.md b/fixtures/bridge-script-source/脚本Markdown/TASK-VIRTUAL-006-液压泵应急替代.md
new file mode 100644
index 0000000..9e82934
--- /dev/null
+++ b/fixtures/bridge-script-source/脚本Markdown/TASK-VIRTUAL-006-液压泵应急替代.md
@@ -0,0 +1,47 @@
+# 重型支援桥液压泵应急替代
+
+任务对应:`TASK-VIRTUAL-006`。
+
+来源:[5.jpg](../5.jpg)、[6.jpg](../6.jpg)。提取日期:2026-09-18。
+
+> 本文为图片原文转录。`006-BG`、`006-L01~L02`为编排建议 ID。原图概念讲解对应的内容/画面栏未填写,不能视为已有背景图或视频。
+
+## 项目背景原文(006-BG)
+
+来源:[5.jpg](../5.jpg),表格上方“故障背景”。
+
+重型支援桥在将移动架推出至中间位置时,突遇山体滑坡,巨石滚落,飞入底盘车两副车架内,产生巨大撞击声,操作手随即停车检查,发现前泵被飞入巨石击中,导致泵体变形。而后桥梁分队分队长指挥操作手试车检查,驾驶员在接通取力器后,操作手按照规定程序试车,此时托架和架设架所有执行机构不动作,随即向分队长报告。而后分队长指挥操作手对装备进行动作检查,操作手在托架和架设架均不动作的状态下,手动将托架马达换向联手柄搬至“向前”位置,同时,分队长观察前泵出口处(托架多路换向阀M口)压力表,此时压力表显示0MPa。由此分队长判断前泵损坏。
+
+## 讲解1:替代是什么(006-L01)
+
+来源:[5.jpg](../5.jpg),解说词第一段。
+
+替代是指使用性能相似或相近的单元或原材料、油液、仪表等暂时替换损伤或缺少的资源,以恢复工程装备的基本功能或能自救。
+
+## 讲解2:双车互救是什么(006-L02)
+
+来源:[5.jpg](../5.jpg),解说词第二段。
+
+互救是指在架桥车液压系统完全失效时,通过连接保障车的液压系统,利用保障车的液压泵为架桥车提供动力,完成桥梁的架设和撤收作业。
+
+## 操作步骤原文
+
+画面栏原文:操作步骤。
+
+来源:[5.jpg](../5.jpg)第(1)~(5)项,[6.jpg](../6.jpg)第(6)~(7)项。
+
+1. 确保架桥车的油泵取力器处于脱离状态并保持车辆启动;
+2. 连接液压油管,将保障车与架桥车的液压油管连接,架桥车端连接至液压油箱右侧的快速接头,保障车端连接至驾驶室外右下方的快速接头;
+3. 打开保障车液压油箱快速接头处的回油截止阀,保证回油油路畅通;
+4. 开启互救工作模式,在辅助控制盒能够将“互救作业”开关打开;
+5. 打开两出油滤油器出口处的球阀;
+6. 接通保障车液压泵取力器;
+7. 按正常操作步骤操作架桥车。
+
+## 待核对与素材记录
+
+- 项目背景描述前泵损坏,互救概念描述架桥车液压系统完全失效,原图没有交代工况如何衔接,两段均原样保留。
+- 第(4)项可见文字为“在辅助控制盒能够将”,疑为病句。建议核定的产品表述是“在辅助控制盒内将”,本次不替换原文。
+- “互救作业”与005的“互救”开关是否同一个,原图未作说明。
+- 第(7)项没有展开正常作业动作;后续演示配置应另有依据。
+- 原图未填写前置讲解画面要求。使用双车图或视频是后续制作选择,不是本次提取到的素材。
diff --git a/fixtures/bridge-script-source/脚本Markdown/TASK-VIRTUAL-007-前泵换件修复.md b/fixtures/bridge-script-source/脚本Markdown/TASK-VIRTUAL-007-前泵换件修复.md
new file mode 100644
index 0000000..6315460
--- /dev/null
+++ b/fixtures/bridge-script-source/脚本Markdown/TASK-VIRTUAL-007-前泵换件修复.md
@@ -0,0 +1,46 @@
+# 重型支援桥前泵换件修复
+
+任务对应:`TASK-VIRTUAL-007`。
+
+来源:[7.jpg](../7.jpg)、[8.jpg](../8.jpg)。提取日期:2026-09-18。
+
+> 本文为图片原文转录。`007-BG`为编排建议 ID。本稿有故障背景与操作步骤,表格前置讲解区为空,没有可直接提取的独立讲解1~N。
+
+## 项目背景原文(007-BG)
+
+来源:[7.jpg](../7.jpg),表格上方“故障背景”。
+
+重型支援桥在将移动架推出至中间位置时,突遇山体滑坡,巨石滚落,飞入底盘车两副车架内,产生巨大撞击声,操作手随即停车检查,发现前泵被飞入巨石击中,导致泵体变形。而后桥梁分队分队长指挥操作手试车检查,驾驶员在接通取力器后,操作手按照规定程序试车,此时托架和架设架所有执行机构动作,随即向分队长报告。而后分队长指挥操作手对装备进行动作检查,操作手在托架和架设架均不动作的状态下,手动将托架马达换向联手柄搬至“向前”位置,同时,分队长观察前泵出口处(托架多路换向阀M口)压力表,此时压力表显示0MPa。由此分队长判断前泵损坏。
+
+> 原文疑点:本图可见文字是“所有执行机构动作”,没有“不”字;但同段后文写“均不动作”,且2.jpg、5.jpg对应句均为“不动作”。疑为漏字,转录没有静默更正,产品文案采用前需核定。
+
+## 前置讲解原文
+
+原稿未填写。7.jpg表格上半部分的内容、画面及解说词区域均无正文。
+
+## 操作步骤原文
+
+画面栏原文:操作步骤。
+
+来源:[7.jpg](../7.jpg)第(1)~(6)项,[8.jpg](../8.jpg)第(7)~(11)项。
+
+1. 桥车熄火,按照前泵与取力器连接处形状裁切一块牛皮纸;
+2. 关闭液压油箱出口处的1号球阀,将操作手柄由平行于油管方向转至垂直于油管方向;
+3. 用大活动板手拆开前泵的进出油管接头,并用封口袋封住油管接头;
+4. 用开口板手拆下液压泵与取力器处的4颗固定螺栓;
+5. 取下前泵;
+6. 将事前裁切的牛皮纸,按照液压泵安装形式,继续裁剪,使其与取力器贴合完整;
+7. 将裁剪好的牛皮纸贴在取力口处;
+8. 装上新泵;
+9. 打开新泵注油口,注入液压油;
+10. 用大活动把手装上前泵进出油管,并拧紧。
+11. 起动装备,试车验证。
+
+## 待核对与素材记录
+
+- 第(1)项图片为“桥车熄火”,整理后的产品文案可核定为“架桥车熄火”。
+- 图片材料名称为“牛皮纸”,按原文保留,不自行更换成其他密封材料。
+- 第(3)、(4)项可见“板手”,第(10)项为“把手”,常用工具名称为“扳手”;工具写法可核定后统一。
+- 原稿未给出开口扳手号数、螺栓扭矩、液压油加注量、试车合格数值,不补造参数。
+- 原稿没有额外列出关注油口盖、恢复球阀等动作;若补充训练流程,应明确是经核定的补充内容。
+- 没有独立前置讲解原文时,不应将“原稿没有展开”等整理说明作为学员讲解内容。
diff --git a/fixtures/bridge-script-source/脚本Markdown/TASK-VIRTUAL-008-平衡阀拆拼互换.md b/fixtures/bridge-script-source/脚本Markdown/TASK-VIRTUAL-008-平衡阀拆拼互换.md
new file mode 100644
index 0000000..3d8f2b0
--- /dev/null
+++ b/fixtures/bridge-script-source/脚本Markdown/TASK-VIRTUAL-008-平衡阀拆拼互换.md
@@ -0,0 +1,71 @@
+# 重型支援桥平衡阀拆拼互换
+
+任务对应:`TASK-VIRTUAL-008`。
+
+来源:[9.jpg](../9.jpg)、[10.jpg](../10.jpg)。提取日期:2026-09-18。
+
+> 本文为图片原文转录。原稿有四组操作,每组四项。下方额外标出当前系统对应步骤号,便于查阅,不改变原稿分组。
+
+## 项目背景原文
+
+来源:[9.jpg](../9.jpg),“故障背景:”之后为空白,原稿未填写。
+
+## 前置讲解原文
+
+原稿没有独立前置讲解正文。表格画面栏仅写“操作步骤”,解说词栏直接进入拆装步骤。
+
+## 操作组一:拆卸小腔油口连接平衡阀
+
+来源:[9.jpg](../9.jpg),第(1)组。对应现有系统第1~4步。
+
+1. 用清洗液将平衡阀表面和各油管接头上的油污和灰尘进行清洗并用干净的抹布擦拭干净。
+2. 用19号的开口板手拧下平衡阀控制端的油管接头;并用封口袋封住管口,防止灰尘进入油管内;
+3. 用8号的内六角拧下平衡阀固定螺栓,取下平衡阀;
+4. 用2个油堵头将阀体座上的2个油口堵住并用干净的抹布将阀体座表面的油污擦拭干净。
+
+## 操作组二:拆卸大腔油口连接平衡阀
+
+来源:[9.jpg](../9.jpg),第(2)组。对应现有系统第5~8步。
+
+1. 用清洗液将平衡阀表面和各油管接头上的油污和灰尘进行清洗并用干净的抹布擦拭干净。
+2. 用19号的开口板手拧下平衡阀控制端的油管接头;并用封口袋封住管口,防止灰尘进入油管内;
+3. 用8号的内六角拧下平衡阀固定螺栓,取下平衡阀;
+4. 用2个油堵头将阀体座上的2个油口堵住并用干净的抹布将阀体座表面的油污擦拭干净。
+
+## 操作组三:装配大腔油口连接平衡阀
+
+来源:[9.jpg](../9.jpg)末部至[10.jpg](../10.jpg)开头,第(3)组。对应现有系统第9~12步。
+
+1. 对平衡阀、阀座表面进行擦拭,去除污渍,拆下阀座上的2个油堵头;
+2. 将平衡阀安装于阀座上,用8号的内六角装上平衡阀的4个固定螺栓;
+3. 将平衡阀控制端的油管接头封口袋取下并用板手将其旋紧;
+
+ **接续原文(10.jpg开头):** 用19号的开口板手拧下平衡阀控制端的油管接头;并用封口袋封住管口,防止灰尘进入油管内;
+
+4. 用内六角将阀体4个连接螺栓旋紧。
+
+> 原文疑点:第③项前半句是取袋并旋紧,接续句却是拧下并封袋,方向相反。两句均保留,没有选择其一作为核定步骤。
+
+## 操作组四:装配小腔油口连接平衡阀
+
+来源:[10.jpg](../10.jpg),第(4)组。对应现有系统第13~16步。
+
+1. 对平衡阀、阀座表面进行擦拭,去除污渍,拆下阀座上的2个油堵头;
+2. 将平衡阀安装于阀座上,用8号的内六角装上平衡阀的4个固定螺栓;
+3. 将平衡阀控制端的油管接头封口袋取下并用板手将其旋紧;
+
+ **同项接续原文:** 用19号的开口板手拧下平衡阀控制端的油管接头;并用封口袋封住管口,防止灰尘进入油管内;
+
+4. 用内六角将阀体4个连接螺栓旋紧。
+
+> 原文疑点:本组第③项同样同时出现装配与拆卸指令,需要核定。
+
+## 待核对与素材记录
+
+- 背景为空,不能把005/006/007的前泵撞击事故直接作为本项目背景原文。
+- 题名为“拆拼互换”,但操作正文未明确写出哪一个拆下的阀装到哪一处;两阀来源、目标位置及适用条件需核定。
+- 装配第②项的“四个固定螺栓”和第④项的“四个连接螺栓”是否同一组,图片没有说明。
+- 原图写“板手”,整理后的工具名称可核定为“扳手”;19号、8号规格按原文保留。
+- 原文“阀体座”和“阀座”两种称呼均保留,正式编排可在术语核定后统一。
+- 文本要求清洗阀体表面以及各油管接头,不能只表现阀体变色而遗漏接头。
+- 图片没有给出安装位置照片、背景图、讲解视频、油污贴图或互换后的试验判据;相关素材需另行配置。
diff --git a/reports/bridge-005-authoring-20260916/audit.json b/reports/bridge-005-authoring-20260916/audit.json
new file mode 100644
index 0000000..99da66a
--- /dev/null
+++ b/reports/bridge-005-authoring-20260916/audit.json
@@ -0,0 +1,80 @@
+{
+ "pass": true,
+ "checkedAt": "2026-09-16T17:12:05.890Z",
+ "fixture": {
+ "sceneId": "457",
+ "sceneVersionId": "544",
+ "trainingId": "458",
+ "mediaUploaded": true,
+ "trainingVersionId": "546",
+ "taskId": "116",
+ "taskStatus": "DRAFT",
+ "previewUrl": "/teaching/virtual-training/preview/116"
+ },
+ "originals": [
+ {
+ "id": "86",
+ "code": "TASK-VIRTUAL-005",
+ "versionId": "533",
+ "unchanged": true
+ },
+ {
+ "id": "87",
+ "code": "TASK-VIRTUAL-006",
+ "versionId": "534",
+ "unchanged": true
+ },
+ {
+ "id": "88",
+ "code": "TASK-VIRTUAL-007",
+ "versionId": "535",
+ "unchanged": true
+ },
+ {
+ "id": "89",
+ "code": "TASK-VIRTUAL-008",
+ "versionId": "536",
+ "unchanged": true
+ }
+ ],
+ "steps": 5,
+ "operations": 6,
+ "partTargets": 7,
+ "editedAngle": 75,
+ "restoredAngle": 90,
+ "media": [
+ {
+ "step": 1,
+ "video": "PILOT-005-1-VIDEO",
+ "audio": "PILOT-005-1-AUDIO"
+ },
+ {
+ "step": 2,
+ "video": "PILOT-005-2-VIDEO",
+ "audio": "PILOT-005-2-AUDIO"
+ },
+ {
+ "step": 3,
+ "video": "PILOT-005-3-VIDEO",
+ "audio": "PILOT-005-3-AUDIO"
+ },
+ {
+ "step": 4,
+ "video": "PILOT-005-4-VIDEO",
+ "audio": "PILOT-005-4-AUDIO"
+ },
+ {
+ "step": 5,
+ "video": "PILOT-005-5-VIDEO",
+ "audio": "PILOT-005-5-AUDIO"
+ }
+ ],
+ "evidence": [
+ "editor-result",
+ "editor-result-90",
+ "runtime-edited-75",
+ "runtime-final-90-lan",
+ "original-tasks-regression",
+ "original-005-full-regression"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-005-authoring-20260916/editor-error.json b/reports/bridge-005-authoring-20260916/editor-error.json
new file mode 100644
index 0000000..277320b
--- /dev/null
+++ b/reports/bridge-005-authoring-20260916/editor-error.json
@@ -0,0 +1,5 @@
+{
+ "error": "AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:\n\n400 !== 200\n\n at file:///E:/work/edit_3d/unreal_tran/ute2e/tools/bridge-005-authoring-editor-live.mjs:52:63",
+ "errors": [],
+ "body": "装备数字车间\n工作总览\n内容制作\n虚实训练\n资源智能\n系统管理\n内部维护\n内部维护 · 装备数字车间\n应用导航\n内容制作\n4\n模型制作\n场景制作\n训练编排\n作业指导\n工作总览\n数字场景编辑\n训练编排\n返回列表\n005 液压泵应急切换(编排验证)\n草稿\n有未保存修改\n回退\n前进\n更多\n校验\n保存草稿\n发布\n预览训练\n操作指引:\n1)\n选步骤\n→\n2)\n选目标与动作\n→\n3)\n配置判定规则\n→\n4)\n预览并发布\n编排模式\n基础编排\n高级编排\n虚拟仿真配置\n项目设置\n训练流程\n选择步骤\n新增步骤\n01\n根据故障现象确定是哪一个液压泵发生故障\n液压泵 · 状态判定\n状态检测\n20 分\n↑\n↓\n02\n断开架桥车取力器\n取力器开关 · 状态判定\n状态检测\n20 分\n↑\n↓\n03\n将架桥车备胎斜上方链接两个红色滤油器的球阀打开\n球阀开关 · 状态判定\n状态检测\n20 分\n↑\n↓\n04\n重新联通取力器\n取力器开关 · 状态判定\n状态检测\n20 分\n↑\n↓\n05\n打开辅助控制盒内的“互救”开关\n辅助控制盒盖 · 状态判定\n状态检测\n20 分\n↑\n↓\n选择场景\n加载模型\n环境与场景\n野外环境\n外部 GLB\n三维实时编辑\n当前场景\n室外综合训练场\n3 个场景对象 · 设备与物模型绑定已继承\n当前选中\n液压泵\n动作:等待配置\n步骤配置\n第 1 步 · 根据故障现象确定是哪一个液压泵发生故障\n目标与动作\n判定规则\n讲解设置\n配置目标与动作\n填写步骤说明 → 在三维场景点选目标 → 选择标准动作\n步骤内容\n学员端将按此顺序显示\n步骤名称\n操作说明\n引导提示\n目标位置 / 状态\n完成提示\n编排建议\n\n步骤标题使用动宾结构;操作说明只写本步动作,不提前泄露后续答案。\n\n配置本步工具 配置机构动作\n动作训练配置\n仅开放当前运行时可执行的动作\n拖\n三维拖拽\n沿受控路径完成拆卸、移动或复装\n判\n状态检测\n点击目标并按规则完成检查或测量\n语义目标\n液压泵\n取力器\n取力器开关\n球阀开关\n辅助控制盒\n辅助控制盒盖\n互救开关\n操作模式\n检查 / 确认\n标准动作时长\n毫秒\n空间容差\n状态检测无需空间容差\n步骤动画\n绑定后写入当前步骤与高级时间轴\n+\n尚未绑定动画\n从模型编辑器已发布的动画成果中选择\n绑定动画\n运行边界\n\n编辑器不会写入任意脚本;动作和目标均从经过验证的运行时白名单中选择。\n\n当前步骤\n1 / 5\n步骤分值\n20 分\n总分配置\n100 / 100\ni\n已加载发布场景:3 个对象,位姿与语义已恢复\n发布未通过\n\n教学实训发布校验未通过(5 项):steps[0].targetId 引用的对象 front-pump-hydraulic-pump 不在绑定场景的可操作对象中;steps[1].targetId 引用的对象 front-pump-pto-switch 不在绑定场景的可操作对象中;steps[2].targetId 引用的对象 front-pump-ball-valve-switch 不在绑定场景的可操作对象中;steps[3].targetId 引用的对象 front-pump-pto-switch 不在绑定场景的可操作对象中;steps[4].targetId 引用的对象 front-pump-aux-control-box-cover 不在绑定场景的可操作对象中\n\n知道了"
+}
\ No newline at end of file
diff --git a/reports/bridge-005-authoring-20260916/editor-failure.png b/reports/bridge-005-authoring-20260916/editor-failure.png
new file mode 100644
index 0000000..c90682f
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/editor-failure.png differ
diff --git a/reports/bridge-005-authoring-20260916/editor-result-90.json b/reports/bridge-005-authoring-20260916/editor-result-90.json
new file mode 100644
index 0000000..2ae7339
--- /dev/null
+++ b/reports/bridge-005-authoring-20260916/editor-result-90.json
@@ -0,0 +1,11 @@
+{
+ "pass": true,
+ "sceneObjects": 2,
+ "partTargets": 7,
+ "steps": 5,
+ "operations": 6,
+ "savedAngle": 90,
+ "originalPublishedVersion": "552",
+ "draftVersion": "552",
+ "errors": []
+}
\ No newline at end of file
diff --git a/reports/bridge-005-authoring-20260916/editor-result.json b/reports/bridge-005-authoring-20260916/editor-result.json
new file mode 100644
index 0000000..b0c794f
--- /dev/null
+++ b/reports/bridge-005-authoring-20260916/editor-result.json
@@ -0,0 +1,11 @@
+{
+ "pass": true,
+ "sceneObjects": 2,
+ "partTargets": 7,
+ "steps": 5,
+ "operations": 6,
+ "savedAngle": 75,
+ "originalPublishedVersion": "543",
+ "draftVersion": "543",
+ "errors": []
+}
\ No newline at end of file
diff --git a/reports/bridge-005-authoring-20260916/failure.png b/reports/bridge-005-authoring-20260916/failure.png
new file mode 100644
index 0000000..bd7924b
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/failure.png differ
diff --git a/reports/bridge-005-authoring-20260916/index.html b/reports/bridge-005-authoring-20260916/index.html
new file mode 100644
index 0000000..6c8fc4b
--- /dev/null
+++ b/reports/bridge-005-authoring-20260916/index.html
@@ -0,0 +1 @@
+
005 场景与编排验收005 液压泵应急切换:场景制作 → 训练编排 → 教学预览
验收时间:2026-09-16T17:12:05.890Z。独立验证工程,原四个已发布任务数据和版本完整对比一致。
验证结果
实际编辑场景并发布后,训练重新绑定已发布场景。球阀从 90° 改为 75°,保存、刷新、发布后,完成全部六次鼠标操作及服务端预览校验;随后恢复 90° 并在局域网完整复测。五段视频和五段语音已作为训练资产绑定。
原 005 完整流程回归、原四任务初始场景回归均通过。前端构建与合同测试、后端单元测试和打包通过。当前验证仅覆盖教员预览,不代表新增学员成绩验收。
场景制作

训练编排

球阀操作与互救开关

\ No newline at end of file
diff --git a/reports/bridge-005-authoring-20260916/model-placement.json b/reports/bridge-005-authoring-20260916/model-placement.json
new file mode 100644
index 0000000..eaf2c81
--- /dev/null
+++ b/reports/bridge-005-authoring-20260916/model-placement.json
@@ -0,0 +1,125 @@
+{
+ "objects": [
+ {
+ "name": "野外山地训练场",
+ "position": [
+ -3.1597256741842212,
+ 10.30528511389146,
+ -40.10715876774236
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1.7159231079037875,
+ 1.7159231079037875,
+ 1.7159231079037875
+ ]
+ },
+ {
+ "name": "架桥车前泵互救操作整车模型",
+ "position": [
+ 1.5698558846140135e-16,
+ 0.6112875194820317,
+ 0.13180482636746585
+ ],
+ "rotation": [
+ 3.0865583248298285e-17,
+ -3.96331642134641e-33,
+ -2.568113739801058e-16
+ ],
+ "scale": [
+ 0.9715696607300419,
+ 0.9715696607300419,
+ 0.9715696607300419
+ ]
+ }
+ ],
+ "camera": {
+ "position": [
+ 6.388234886169594,
+ 3.6955547610775583,
+ 7.955160424286662
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ]
+ },
+ "parts": [
+ {
+ "id": "front-pump-hydraulic-pump",
+ "front": [
+ 6.098689649701348e-32,
+ 2.5291018817332963e-16,
+ -1
+ ]
+ },
+ {
+ "id": "front-pump-power-take-off",
+ "front": [
+ 0.9805806756909202,
+ 0.1961161351381838,
+ 4.9599768641624273e-17
+ ]
+ },
+ {
+ "id": "front-pump-pto-switch",
+ "hinge": [
+ 0.0000152587890625,
+ -4.159996032714844,
+ 9.5367431640625e-7
+ ],
+ "front": [
+ 0.9805806756909202,
+ 0.1961161351381838,
+ 4.9599768641624273e-17
+ ]
+ },
+ {
+ "id": "front-pump-ball-valve-switch",
+ "front": [
+ 0.9805806756909202,
+ 0.1961161351381838,
+ 4.9599768641624273e-17
+ ]
+ },
+ {
+ "id": "front-pump-aux-control-box",
+ "front": [
+ -1,
+ 2.568113739801058e-16,
+ 3.96331642134641e-33
+ ]
+ },
+ {
+ "id": "front-pump-aux-control-box-cover",
+ "front": [
+ -1,
+ 2.568113739801058e-16,
+ 3.96331642134641e-33
+ ]
+ },
+ {
+ "id": "front-pump-rescue-switch",
+ "hinge": [
+ 0.549492597579949,
+ -0.0000010728836059570312,
+ 4.76837158203125e-7
+ ],
+ "front": [
+ -1,
+ 2.568113739801058e-16,
+ 3.96331642134641e-33
+ ],
+ "axis": [
+ 6.098689649701348e-32,
+ 2.5291018817332963e-16,
+ -1
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-005-authoring-20260916/original-005-full-regression.json b/reports/bridge-005-authoring-20260916/original-005-full-regression.json
new file mode 100644
index 0000000..76c0fcb
--- /dev/null
+++ b/reports/bridge-005-authoring-20260916/original-005-full-regression.json
@@ -0,0 +1,421 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 86 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 11.052363924053688,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 937.1159093565705,
+ "y": 510.8943121357542,
+ "localX": 678.1159093565705,
+ "localY": 322.3943121357542,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935024518472723,
+ 0.13537492625037484,
+ 0.19723593501664283
+ ],
+ "projected": {
+ "x": 670.919240275776,
+ "y": 316.01579133562,
+ "w": 14.309325962616413,
+ "h": 12.873100207788639
+ },
+ "pivot": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 6.098689649701348e-32,
+ 2.5291018817332963e-16,
+ -1
+ ],
+ "workflowCoverage": [
+ {
+ "name": "front-pump-hydraulic-pump",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 6.688026389433602,
+ 3.8228247388783156,
+ 8.328485692502216
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 881.0625,
+ "y": 533.375,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 86 step 1 operation 1",
+ "target": "front-pump-hydraulic-pump",
+ "drag": false,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 705.1374098658791,
+ "y": 222.81006115045116,
+ "w": 91.72518026824184,
+ "h": 113.44868046645237
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 86 internal target inspected with explicit translucent tool",
+ "targetId": "front-pump-pto-switch",
+ "pass": true
+ },
+ {
+ "name": "task 86 step 2 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 709.0006218750913,
+ "y": 263.03238137674134,
+ "w": 83.99875624981757,
+ "h": 33.023591730971475
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 86 step 3 operation 1",
+ "target": "front-pump-ball-valve-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 742.9515028622343,
+ "y": 259.69721416379815,
+ "w": 16.096994275529482,
+ "h": 40.44894573262036
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 86 step 4 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 706.5903063366927,
+ "y": 244.5697698769074,
+ "w": 88.81938732661342,
+ "h": 69.87239851232039
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 86 step 5 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 699.1228274926349,
+ "y": 249.2085662189188,
+ "w": 103.7543450147308,
+ "h": 60.65167032951712
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 86 step 5 operation 2",
+ "target": "front-pump-rescue-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 748.0136091802624,
+ "y": 276.397277651574,
+ "w": 5.972781639476352,
+ "h": 6.274247464206724
+ },
+ "labels": 4
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-005-authoring-20260916/original-assignments.json b/reports/bridge-005-authoring-20260916/original-assignments.json
new file mode 100644
index 0000000..b2c0507
--- /dev/null
+++ b/reports/bridge-005-authoring-20260916/original-assignments.json
@@ -0,0 +1,6827 @@
+{
+ "86": {
+ "id": "86",
+ "code": "TASK-VIRTUAL-005",
+ "name": "重型支援桥液压泵应急切换",
+ "description": "原稿:桥梁/文件2/4.jpg",
+ "channel": "VIRTUAL",
+ "assignmentKind": "TRAINING",
+ "executionMode": "PRACTICE",
+ "audienceType": "COMMON",
+ "collaborationMode": "INDIVIDUAL",
+ "digitalHumanAllowed": false,
+ "digitalInstructorAgentSlug": "",
+ "digitalInstructorAgentName": "",
+ "digitalInstructorKnowledgeSource": "AGENT",
+ "contentProjectId": "438",
+ "contentVersionId": "533",
+ "definitionSnapshot": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥液压泵应急切换",
+ "status": "published",
+ "trainingMode": "VIRTUAL",
+ "resources": {
+ "models": [
+ {
+ "id": "front-pump-step-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "name": "架桥车前泵互救操作整车模型",
+ "baseModelName": "架桥车前泵互救操作整车模型",
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "revision": 1,
+ "materialPreset": null,
+ "parts": [
+ {
+ "editorId": "",
+ "interactionId": "front-pump-hydraulic-pump",
+ "nodeName": "1液压泵",
+ "sourceNodeName": "1液压泵",
+ "nodePath": "",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-power-take-off",
+ "nodeName": "2取力器",
+ "sourceNodeName": "2取力器",
+ "nodePath": "",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-pto-switch",
+ "nodeName": "2取力器开关",
+ "sourceNodeName": "2取力器开关",
+ "nodePath": "",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-ball-valve-switch",
+ "nodeName": "3球阀开关",
+ "sourceNodeName": "3球阀开关",
+ "nodePath": "",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box",
+ "nodeName": "5辅助控制盒",
+ "sourceNodeName": "5辅助控制盒",
+ "nodePath": "",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "nodeName": "5辅助控制盒盖",
+ "sourceNodeName": "5辅助控制盒盖",
+ "nodePath": "",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-rescue-switch",
+ "nodeName": "5互救开关",
+ "sourceNodeName": "5互救开关",
+ "nodePath": "",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "animations": []
+ },
+ "task": {
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "code": "TR-FRONT-PUMP-RESCUE-001",
+ "title": "架桥车前泵故障互救处置训练(虚拟仿真)",
+ "categoryId": "minor-repair",
+ "difficulty": "标准",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "image": "/models/step-model-front-pump-thumb.png",
+ "equipment": "架桥车",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ]
+ },
+ "scenario": {
+ "id": "front-pump-rescue-scenario",
+ "publishedSceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "publishedSceneVersion": "1.0",
+ "baseVisualKey": "front-pump-rescue",
+ "visualKey": "front-pump-rescue",
+ "environmentName": "架桥车互救操作训练场",
+ "sceneLayout": "架桥车整车操作位",
+ "equipmentState": "前泵故障 · 待执行互救处置",
+ "tools": [],
+ "faults": [],
+ "environment": {
+ "type": "outdoor",
+ "mode": "builtin",
+ "sourceName": "内置架桥车互救操作训练场",
+ "resourceUrl": "",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "sceneResource": {
+ "sceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "version": "1.0",
+ "sourceKind": "published",
+ "status": "已发布",
+ "name": "架桥车前泵故障互救处置训练场景",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "objectCount": 2,
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "1.0",
+ "name": "架桥车前泵故障互救处置训练场景",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "environment": {
+ "presetId": "outdoor-1",
+ "type": "outdoor"
+ },
+ "rendering": {
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 70,
+ "far": 240
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.1,
+ "far": 800,
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ]
+ },
+ "assetReferences": [
+ {
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 32195288,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "training-content"
+ }
+ ]
+ },
+ "accent": "#2d86d8",
+ "background": 11062241,
+ "fog": 11062241,
+ "ground": 7110499,
+ "camera": {
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ },
+ "retainStoredParts": true,
+ "sceneTags": [
+ "真实整车步骤模型",
+ "前泵故障互救",
+ "机构顺序操作"
+ ],
+ "sensorFeeds": []
+ },
+ "tools": [],
+ "faults": [],
+ "steps": [
+ {
+ "id": "front-pump-step-01",
+ "code": "FRONT-PUMP-STEP-01",
+ "stepCode": "front-pump-step-01",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-01",
+ "number": 1,
+ "title": "根据故障现象确定是哪一个液压泵发生故障",
+ "targetId": "front-pump-hydraulic-pump",
+ "targetName": "液压泵",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "guidance": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "warning": "",
+ "destination": "液压泵",
+ "success": "根据故障现象确定是哪一个液压泵发生故障",
+ "cameraPolicy": "exterior",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-hydraulic-pump",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "identify",
+ "axisSpace": "world",
+ "highlightColor": "#e53935",
+ "steps": [
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-hydraulic-pump",
+ "targetNodeName": "1液压泵",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,确定故障液压泵。根据故障现象确定发生故障的液压泵。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_FF17FDE117E94B80BB30DF3E058821FD",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "53",
+ "videoName": "重型支援桥液压泵应急切换 · 1 根据故障现象确定是哪一个液压泵发生故障",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-02",
+ "code": "FRONT-PUMP-STEP-02",
+ "stepCode": "front-pump-step-02",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-02",
+ "number": 2,
+ "title": "断开架桥车取力器",
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "guidance": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "断开架桥车取力器",
+ "cameraPolicy": "exterior",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": -30,
+ "toleranceDegrees": 6,
+ "directionHint": "向断开方向摇动"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "2取力器开关",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,断开架桥车取力器。将架桥车取力器断开。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_6E75DADE9D0649DCA16A2499D1EE8776",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "54",
+ "videoName": "重型支援桥液压泵应急切换 · 2 断开架桥车取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-03",
+ "code": "FRONT-PUMP-STEP-03",
+ "stepCode": "front-pump-step-03",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-03",
+ "number": 3,
+ "title": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "targetId": "front-pump-ball-valve-switch",
+ "targetName": "球阀开关",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "guidance": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "warning": "",
+ "destination": "球阀开关",
+ "success": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-ball-valve-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "steps": [
+ {
+ "targetId": "front-pump-ball-valve-switch",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "由垂直与官道方向旋转至平行于管道方向"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-ball-valve-switch",
+ "targetNodeName": "3球阀开关",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,打开互救球阀。打开备胎上方两个红色滤油器之间的连通球阀,手柄由垂直管道转为平行管道。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_9A4629F90E614E60835441B5D0AAE86C",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "55",
+ "videoName": "重型支援桥液压泵应急切换 · 3 将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-04",
+ "code": "FRONT-PUMP-STEP-04",
+ "stepCode": "front-pump-step-04",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-04",
+ "number": 4,
+ "title": "重新联通取力器",
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "guidance": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "重新联通取力器",
+ "cameraPolicy": "exterior",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "按步骤2的相反方向摇回去"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "2取力器开关",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,重新接通取力器。将架桥车取力器重新接通。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_DA42FE5C995F4C67A559E6E94DB1C440",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "56",
+ "videoName": "重型支援桥液压泵应急切换 · 4 重新联通取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-05",
+ "code": "FRONT-PUMP-STEP-05",
+ "stepCode": "front-pump-step-05",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-05",
+ "number": 5,
+ "title": "打开辅助控制盒内的“互救”开关",
+ "targetId": "front-pump-aux-control-box-cover",
+ "targetName": "辅助控制盒盖",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "guidance": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "warning": "",
+ "destination": "辅助控制盒盖",
+ "success": "打开辅助控制盒内的“互救”开关",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-aux-control-box-cover",
+ "mode": "inspect",
+ "durationMs": 1600,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "sequence",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-aux-control-box"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-aux-control-box-cover",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 100,
+ "toleranceDegrees": 8,
+ "directionHint": "沿控制盒盖边缘铰链打开",
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ }
+ },
+ {
+ "targetId": "front-pump-rescue-switch",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "往上搬"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-aux-control-box-cover",
+ "targetNodeName": "5辅助控制盒盖",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,打开辅助控制盒互救开关。打开辅助控制盒盖,再打开互救开关,进入单泵作业状态。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D85C34259BB34E0C966C5A79569DBF10",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "57",
+ "videoName": "重型支援桥液压泵应急切换 · 5 打开辅助控制盒内的“互救”开关",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ }
+ ],
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "totalScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-pump-switch",
+ "scriptVersion": "2"
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/4.jpg"
+ },
+ "definitionChecksum": "18bc3f2472cbb125354438c2058f05bea45daa71cc352590b214c12894c51b27",
+ "ownerUserId": "99",
+ "ownerUsername": "root",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "departmentName": "",
+ "status": "PUBLISHED",
+ "scheduleStartAt": null,
+ "dueAt": null,
+ "publishedAt": 1789311584,
+ "withdrawnAt": 1789311583,
+ "archivedAt": null,
+ "lifecycleReason": "发布教学任务",
+ "version": 5,
+ "addTime": 1789309630,
+ "updateTime": "2026-09-13T22:27:11",
+ "serverNow": 1789566460,
+ "members": [
+ {
+ "id": "169",
+ "userId": "99",
+ "username": "root",
+ "displayName": "内部维护",
+ "departmentId": "1",
+ "departmentName": "",
+ "memberType": "LEARNER",
+ "roleCode": "LEARNER",
+ "teamCode": "NEUTRAL",
+ "groupCode": "INDIVIDUAL",
+ "positionCode": "LEARNER",
+ "stationCode": "",
+ "sortOrder": 0,
+ "version": 0
+ },
+ {
+ "id": "184",
+ "userId": "66",
+ "username": "baidengdeng",
+ "displayName": "白澄澄",
+ "departmentId": "25",
+ "departmentName": "",
+ "memberType": "LEARNER",
+ "roleCode": "LEARNER",
+ "teamCode": "NEUTRAL",
+ "groupCode": "INDIVIDUAL",
+ "positionCode": "LEARNER",
+ "stationCode": "",
+ "sortOrder": 0,
+ "version": 0
+ }
+ ],
+ "runCount": 2,
+ "pendingReviewCount": 0
+ },
+ "87": {
+ "id": "87",
+ "code": "TASK-VIRTUAL-006",
+ "name": "重型支援桥液压泵应急替代",
+ "description": "原稿:桥梁/文件2/5.jpg、6.jpg",
+ "channel": "VIRTUAL",
+ "assignmentKind": "TRAINING",
+ "executionMode": "PRACTICE",
+ "audienceType": "COMMON",
+ "collaborationMode": "INDIVIDUAL",
+ "digitalHumanAllowed": false,
+ "digitalInstructorAgentSlug": "",
+ "digitalInstructorAgentName": "",
+ "digitalInstructorKnowledgeSource": "AGENT",
+ "contentProjectId": "439",
+ "contentVersionId": "534",
+ "definitionSnapshot": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥液压泵应急替代",
+ "status": "published",
+ "trainingMode": "VIRTUAL",
+ "resources": {
+ "models": [
+ {
+ "id": "front-pump-step-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "name": "架桥车前泵互救操作整车模型",
+ "baseModelName": "架桥车前泵互救操作整车模型",
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "revision": 1,
+ "materialPreset": null,
+ "parts": [
+ {
+ "editorId": "",
+ "interactionId": "front-pump-hydraulic-pump",
+ "nodeName": "1液压泵",
+ "sourceNodeName": "1液压泵",
+ "nodePath": "",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-power-take-off",
+ "nodeName": "2取力器",
+ "sourceNodeName": "2取力器",
+ "nodePath": "",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-pto-switch",
+ "nodeName": "2取力器开关",
+ "sourceNodeName": "2取力器开关",
+ "nodePath": "",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-ball-valve-switch",
+ "nodeName": "3球阀开关",
+ "sourceNodeName": "3球阀开关",
+ "nodePath": "",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box",
+ "nodeName": "5辅助控制盒",
+ "sourceNodeName": "5辅助控制盒",
+ "nodePath": "",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "nodeName": "5辅助控制盒盖",
+ "sourceNodeName": "5辅助控制盒盖",
+ "nodePath": "",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-rescue-switch",
+ "nodeName": "5互救开关",
+ "sourceNodeName": "5互救开关",
+ "nodePath": "",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "animations": []
+ },
+ "task": {
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "code": "TR-FRONT-PUMP-RESCUE-001",
+ "title": "重型支援桥液压泵应急替代",
+ "categoryId": "minor-repair",
+ "difficulty": "标准",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "image": "/models/step-model-front-pump-thumb.png",
+ "equipment": "架桥车",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ]
+ },
+ "scenario": {
+ "id": "front-pump-rescue-scenario",
+ "publishedSceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "publishedSceneVersion": "1.0",
+ "baseVisualKey": "front-pump-rescue",
+ "visualKey": "front-pump-rescue",
+ "environmentName": "重型支援桥液压泵应急替代",
+ "sceneLayout": "架桥车整车操作位",
+ "equipmentState": "整车模型 · 补充拆装件为操作示意",
+ "tools": [],
+ "faults": [],
+ "environment": {
+ "type": "outdoor",
+ "mode": "builtin",
+ "sourceName": "桥梁脚本三维训练场",
+ "resourceUrl": "",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "sceneResource": {
+ "sceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "version": "1.0",
+ "sourceKind": "published",
+ "status": "已发布",
+ "name": "重型支援桥液压泵应急替代",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "objectCount": 2,
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "1.0",
+ "name": "重型支援桥液压泵应急替代",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "environment": {
+ "presetId": "outdoor-1",
+ "type": "outdoor"
+ },
+ "rendering": {
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 70,
+ "far": 240
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.1,
+ "far": 800,
+ "position": [
+ 11,
+ 8,
+ 16
+ ],
+ "target": [
+ 0,
+ 1.5,
+ 2
+ ]
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ]
+ },
+ "assetReferences": [
+ {
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 32195288,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "training-content"
+ }
+ ]
+ },
+ "accent": "#2d86d8",
+ "background": 11062241,
+ "fog": 11062241,
+ "ground": 7110499,
+ "camera": {
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ },
+ "retainStoredParts": true,
+ "sceneTags": [
+ "整车模型",
+ "补充操作示意",
+ "机构顺序操作"
+ ],
+ "sensorFeeds": [],
+ "name": "重型支援桥液压泵应急替代",
+ "title": "重型支援桥液压泵应急替代",
+ "operableParts": [
+ "bridge-engine",
+ "front-pump-pto-switch",
+ "bridge-hose-a",
+ "bridge-hose-b",
+ "bridge-return-valve",
+ "front-pump-aux-control-box-cover",
+ "front-pump-rescue-switch",
+ "front-pump-ball-valve-switch",
+ "bridge-support-pto",
+ "bridge-supply",
+ "bridge-normal-control"
+ ]
+ },
+ "tools": [],
+ "faults": [],
+ "steps": [
+ {
+ "id": "BRIDGE-STEP-1",
+ "stepCode": "BRIDGE-STEP-1",
+ "actionCode": "COMPLETE_BRIDGE-STEP-1",
+ "number": 1,
+ "title": "保持架桥车运行并断开取力器",
+ "targetId": "bridge-engine",
+ "targetName": "保持架桥车发动机运行",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "保持架桥车发动机运转,确保架桥车取力器处于断开状态。",
+ "guidance": "保持架桥车发动机运转,确保架桥车取力器处于断开状态。",
+ "warning": "",
+ "success": "保持架桥车运行并断开取力器:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-engine",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "保持架桥车发动机运行",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 2209160
+ }
+ ]
+ },
+ {
+ "targetId": "front-pump-pto-switch",
+ "kind": "rotate",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": -30,
+ "toleranceDegrees": 8,
+ "directionHint": "断开架桥车取力器"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,保持架桥车运行并断开取力器。保持架桥车发动机运转,确保架桥车取力器处于断开状态。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_5AEA5274E6664D43B8C53F55859D5717",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "58",
+ "videoName": "重型支援桥液压泵应急替代 · 1 保持架桥车运行并断开取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-2",
+ "stepCode": "BRIDGE-STEP-2",
+ "actionCode": "COMPLETE_BRIDGE-STEP-2",
+ "number": 2,
+ "title": "连接两车液压软管",
+ "targetId": "bridge-hose-a",
+ "targetName": "连接架桥车快速接头",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "连接支援车与架桥车液压软管。架桥车快接接头位于液压油箱右侧;支援车快接接头位于驾驶室外右下方。",
+ "guidance": "连接支援车与架桥车液压软管。架桥车快接接头位于液压油箱右侧;支援车快接接头位于驾驶室外右下方。",
+ "warning": "",
+ "success": "连接两车液压软管:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-hose-a",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-hose-a",
+ "kind": "identify",
+ "directionHint": "连接架桥车快速接头",
+ "effects": [
+ {
+ "targetId": "bridge-hose-a",
+ "offset": [
+ 0,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-hose-line",
+ "visible": true
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-hose-b",
+ "kind": "identify",
+ "directionHint": "连接保障车快速接头",
+ "effects": [
+ {
+ "targetId": "bridge-hose-b",
+ "offset": [
+ 0,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-return-line",
+ "visible": true
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,连接两车液压软管。连接支援车与架桥车液压软管。架桥车快接接头位于液压油箱右侧;支援车快接接头位于驾驶室外右下方。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_B9F2CBFE36274528825899153DB98195",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "59",
+ "videoName": "重型支援桥液压泵应急替代 · 2 连接两车液压软管",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-3",
+ "stepCode": "BRIDGE-STEP-3",
+ "actionCode": "COMPLETE_BRIDGE-STEP-3",
+ "number": 3,
+ "title": "打开支援车回油截止阀",
+ "targetId": "bridge-return-valve",
+ "targetName": "打开保障车回油截止阀",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开支援车液压油箱快接接头处的回油截止阀。",
+ "guidance": "打开支援车液压油箱快接接头处的回油截止阀。",
+ "warning": "",
+ "success": "打开支援车回油截止阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-return-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "rotate",
+ "steps": [
+ {
+ "targetId": "bridge-return-valve",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "打开保障车回油截止阀"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,打开支援车回油截止阀。打开支援车液压油箱快接接头处的回油截止阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_983218ACA84345B5B032A5DFA8F08E4E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "60",
+ "videoName": "重型支援桥液压泵应急替代 · 3 打开支援车回油截止阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-4",
+ "stepCode": "BRIDGE-STEP-4",
+ "actionCode": "COMPLETE_BRIDGE-STEP-4",
+ "number": 4,
+ "title": "打开互救作业开关",
+ "targetId": "front-pump-aux-control-box-cover",
+ "targetName": "打开辅助控制盒盖",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开辅助控制盒上的“互救作业”开关。",
+ "guidance": "打开辅助控制盒上的“互救作业”开关。",
+ "warning": "",
+ "success": "打开互救作业开关:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-aux-control-box-cover",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "front-pump-aux-control-box-cover",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "deltaDegrees": 100,
+ "toleranceDegrees": 8,
+ "directionHint": "打开辅助控制盒盖"
+ },
+ {
+ "targetId": "front-pump-rescue-switch",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 8,
+ "directionHint": "打开互救作业开关"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,打开互救作业开关。打开辅助控制盒上的“互救作业”开关。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_AC0F121CD04B44B5A373BE82D5083AE1",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "61",
+ "videoName": "重型支援桥液压泵应急替代 · 4 打开互救作业开关",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-5",
+ "stepCode": "BRIDGE-STEP-5",
+ "actionCode": "COMPLETE_BRIDGE-STEP-5",
+ "number": 5,
+ "title": "打开滤油器出口连通球阀",
+ "targetId": "front-pump-ball-valve-switch",
+ "targetName": "打开滤油器出口连通球阀",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开两个输油滤油器出口处的连通球阀。",
+ "guidance": "打开两个输油滤油器出口处的连通球阀。",
+ "warning": "",
+ "success": "打开滤油器出口连通球阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-ball-valve-switch",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "rotate",
+ "steps": [
+ {
+ "targetId": "front-pump-ball-valve-switch",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "打开滤油器出口连通球阀"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,打开滤油器出口连通球阀。打开两个输油滤油器出口处的连通球阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_774F7400E0B54F4696EBDAD800A289C3",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "62",
+ "videoName": "重型支援桥液压泵应急替代 · 5 打开滤油器出口连通球阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-6",
+ "stepCode": "BRIDGE-STEP-6",
+ "actionCode": "COMPLETE_BRIDGE-STEP-6",
+ "number": 6,
+ "title": "接通支援车液压取力器",
+ "targetId": "bridge-support-pto",
+ "targetName": "接通保障车取力器",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "接通支援车液压系统取力器,向架桥车供油。",
+ "guidance": "接通支援车液压系统取力器,向架桥车供油。",
+ "warning": "",
+ "success": "接通支援车液压取力器:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-support-pto",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-support-pto",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 8,
+ "directionHint": "接通保障车取力器"
+ },
+ {
+ "targetId": "bridge-supply",
+ "kind": "identify",
+ "directionHint": "观察供油示意",
+ "effects": [
+ {
+ "targetId": "bridge-hose-line",
+ "color": 15312947
+ },
+ {
+ "targetId": "bridge-return-line",
+ "color": 3325905
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第6步,接通支援车液压取力器。接通支援车液压系统取力器,向架桥车供油。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_64D9ECF315DA41568D936CFEBF28E403",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "63",
+ "videoName": "重型支援桥液压泵应急替代 · 6 接通支援车液压取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-7",
+ "stepCode": "BRIDGE-STEP-7",
+ "actionCode": "COMPLETE_BRIDGE-STEP-7",
+ "number": 7,
+ "title": "按正常步骤操作架桥车",
+ "targetId": "bridge-normal-control",
+ "targetName": "操作正常作业控制手柄",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "原图只概括“按正常操作步骤操作架桥车”,没有展开后续作业。",
+ "guidance": "原图只概括“按正常操作步骤操作架桥车”,没有展开后续作业。",
+ "warning": "该项为原稿概括项,本预演不代表后续正常作业已经完成。",
+ "success": "按正常步骤操作架桥车:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-normal-control",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-normal-control",
+ "kind": "identify",
+ "directionHint": "操作正常作业控制手柄",
+ "effects": [
+ {
+ "targetId": "bridge-normal-control",
+ "offset": [
+ 0,
+ 0,
+ -0.25
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第7步,按正常步骤操作架桥车。原图只概括“按正常操作步骤操作架桥车”,没有展开后续作业。该项为原稿概括项,本预演不代表后续正常作业已经完成。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_356ADFCC874448D28ADB2DF8067582E8",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "64",
+ "videoName": "重型支援桥液压泵应急替代 · 7 按正常步骤操作架桥车",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ }
+ ],
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "totalScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-pump-substitute",
+ "scriptVersion": "3"
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/5.jpg、6.jpg"
+ },
+ "definitionChecksum": "3f01d880c16bf9f93dcf0ddd076d57d7d4dafb824d84e4278310d579e4cd9b58",
+ "ownerUserId": "99",
+ "ownerUsername": "root",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "departmentName": "",
+ "status": "PUBLISHED",
+ "scheduleStartAt": null,
+ "dueAt": null,
+ "publishedAt": 1789395441,
+ "withdrawnAt": 1789395440,
+ "archivedAt": null,
+ "lifecycleReason": "发布教学任务",
+ "version": 8,
+ "addTime": 1789309631,
+ "updateTime": "2026-09-13T22:27:12",
+ "serverNow": 1789566461,
+ "members": [],
+ "runCount": 0,
+ "pendingReviewCount": 0
+ },
+ "88": {
+ "id": "88",
+ "code": "TASK-VIRTUAL-007",
+ "name": "重型支援桥前泵换件修复",
+ "description": "原稿:桥梁/文件2/7.jpg、8.jpg",
+ "channel": "VIRTUAL",
+ "assignmentKind": "TRAINING",
+ "executionMode": "PRACTICE",
+ "audienceType": "COMMON",
+ "collaborationMode": "INDIVIDUAL",
+ "digitalHumanAllowed": false,
+ "digitalInstructorAgentSlug": "",
+ "digitalInstructorAgentName": "",
+ "digitalInstructorKnowledgeSource": "AGENT",
+ "contentProjectId": "440",
+ "contentVersionId": "535",
+ "definitionSnapshot": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥前泵换件修复",
+ "status": "published",
+ "trainingMode": "VIRTUAL",
+ "resources": {
+ "models": [
+ {
+ "id": "front-pump-step-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "name": "架桥车前泵互救操作整车模型",
+ "baseModelName": "架桥车前泵互救操作整车模型",
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "revision": 1,
+ "materialPreset": null,
+ "parts": [
+ {
+ "editorId": "",
+ "interactionId": "front-pump-hydraulic-pump",
+ "nodeName": "1液压泵",
+ "sourceNodeName": "1液压泵",
+ "nodePath": "",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-power-take-off",
+ "nodeName": "2取力器",
+ "sourceNodeName": "2取力器",
+ "nodePath": "",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-pto-switch",
+ "nodeName": "2取力器开关",
+ "sourceNodeName": "2取力器开关",
+ "nodePath": "",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-ball-valve-switch",
+ "nodeName": "3球阀开关",
+ "sourceNodeName": "3球阀开关",
+ "nodePath": "",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box",
+ "nodeName": "5辅助控制盒",
+ "sourceNodeName": "5辅助控制盒",
+ "nodePath": "",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "nodeName": "5辅助控制盒盖",
+ "sourceNodeName": "5辅助控制盒盖",
+ "nodePath": "",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-rescue-switch",
+ "nodeName": "5互救开关",
+ "sourceNodeName": "5互救开关",
+ "nodePath": "",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "animations": []
+ },
+ "task": {
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "code": "TR-FRONT-PUMP-RESCUE-001",
+ "title": "重型支援桥前泵换件修复",
+ "categoryId": "minor-repair",
+ "difficulty": "标准",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "image": "/models/step-model-front-pump-thumb.png",
+ "equipment": "架桥车",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ]
+ },
+ "scenario": {
+ "id": "front-pump-rescue-scenario",
+ "publishedSceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "publishedSceneVersion": "1.0",
+ "baseVisualKey": "front-pump-rescue",
+ "visualKey": "front-pump-rescue",
+ "environmentName": "重型支援桥前泵换件修复",
+ "sceneLayout": "架桥车整车操作位",
+ "equipmentState": "整车模型 · 补充拆装件为操作示意",
+ "tools": [],
+ "faults": [],
+ "environment": {
+ "type": "outdoor",
+ "mode": "builtin",
+ "sourceName": "桥梁脚本三维训练场",
+ "resourceUrl": "",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "sceneResource": {
+ "sceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "version": "1.0",
+ "sourceKind": "published",
+ "status": "已发布",
+ "name": "重型支援桥前泵换件修复",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "objectCount": 2,
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "1.0",
+ "name": "重型支援桥前泵换件修复",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "environment": {
+ "presetId": "outdoor-1",
+ "type": "outdoor"
+ },
+ "rendering": {
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 70,
+ "far": 240
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.1,
+ "far": 800,
+ "position": [
+ 11,
+ 8,
+ 16
+ ],
+ "target": [
+ 0,
+ 1.5,
+ 2
+ ]
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ]
+ },
+ "assetReferences": [
+ {
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 32195288,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "training-content"
+ }
+ ]
+ },
+ "accent": "#2d86d8",
+ "background": 11062241,
+ "fog": 11062241,
+ "ground": 7110499,
+ "camera": {
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ },
+ "retainStoredParts": true,
+ "sceneTags": [
+ "整车模型",
+ "补充操作示意",
+ "机构顺序操作"
+ ],
+ "sensorFeeds": [],
+ "name": "重型支援桥前泵换件修复",
+ "title": "重型支援桥前泵换件修复",
+ "operableParts": [
+ "bridge-engine",
+ "bridge-paper",
+ "bridge-tank-valve",
+ "bridge-inlet",
+ "bridge-inlet-bag",
+ "bridge-outlet",
+ "bridge-outlet-bag",
+ "bridge-pump-bolt-1",
+ "bridge-pump-bolt-2",
+ "bridge-pump-bolt-3",
+ "bridge-pump-bolt-4",
+ "bridge-old-pump",
+ "bridge-gasket",
+ "bridge-new-pump",
+ "bridge-fill-cap",
+ "bridge-oil-can",
+ "bridge-test-control"
+ ]
+ },
+ "tools": [],
+ "faults": [],
+ "steps": [
+ {
+ "id": "BRIDGE-STEP-1",
+ "stepCode": "BRIDGE-STEP-1",
+ "actionCode": "COMPLETE_BRIDGE-STEP-1",
+ "number": 1,
+ "title": "停机并初裁牛皮纸",
+ "targetId": "bridge-engine",
+ "targetName": "关闭架桥车发动机",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "架桥车熄火;按液压泵与取力器结合面形状初步裁剪牛皮纸。",
+ "guidance": "架桥车熄火;按液压泵与取力器结合面形状初步裁剪牛皮纸。",
+ "warning": "",
+ "success": "停机并初裁牛皮纸:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-engine",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "关闭架桥车发动机",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 13195851
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-paper",
+ "kind": "identify",
+ "directionHint": "按结合面初裁牛皮纸",
+ "effects": [
+ {
+ "targetId": "bridge-paper",
+ "scale": [
+ 0.85,
+ 1,
+ 0.85
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,停机并初裁牛皮纸。架桥车熄火;按液压泵与取力器结合面形状初步裁剪牛皮纸。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_1CE71ECA76194F06B098A012B360BB06",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "65",
+ "videoName": "重型支援桥前泵换件修复 · 1 停机并初裁牛皮纸",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-2",
+ "stepCode": "BRIDGE-STEP-2",
+ "actionCode": "COMPLETE_BRIDGE-STEP-2",
+ "number": 2,
+ "title": "关闭液压油箱出油口一号球阀",
+ "targetId": "bridge-tank-valve",
+ "targetName": "关闭一号出油球阀",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将一号球阀手柄从平行管道转到垂直管道。",
+ "guidance": "将一号球阀手柄从平行管道转到垂直管道。",
+ "warning": "",
+ "success": "关闭液压油箱出油口一号球阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-tank-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "rotate",
+ "steps": [
+ {
+ "targetId": "bridge-tank-valve",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "关闭一号出油球阀"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,关闭液压油箱出油口一号球阀。将一号球阀手柄从平行管道转到垂直管道。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_34129B61FA1F4E628AF295E3EF714364",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "66",
+ "videoName": "重型支援桥前泵换件修复 · 2 关闭液压油箱出油口一号球阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-3",
+ "stepCode": "BRIDGE-STEP-3",
+ "actionCode": "COMPLETE_BRIDGE-STEP-3",
+ "number": 3,
+ "title": "拆开并包扎进出油管",
+ "targetId": "bridge-inlet",
+ "targetName": "拆开进油管",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用大活动扳手拆开液压泵进、出油管接头,用塑料袋包扎管口。",
+ "guidance": "用大活动扳手拆开液压泵进、出油管接头,用塑料袋包扎管口。",
+ "warning": "",
+ "success": "拆开并包扎进出油管:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-inlet",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-inlet",
+ "kind": "identify",
+ "directionHint": "拆开进油管",
+ "effects": [
+ {
+ "targetId": "bridge-inlet",
+ "offset": [
+ -0.6,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-inlet-bag",
+ "kind": "identify",
+ "directionHint": "包扎进油管口",
+ "effects": [
+ {
+ "targetId": "bridge-inlet-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet",
+ "kind": "identify",
+ "directionHint": "拆开出油管",
+ "effects": [
+ {
+ "targetId": "bridge-outlet",
+ "offset": [
+ 0.6,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet-bag",
+ "kind": "identify",
+ "directionHint": "包扎出油管口",
+ "effects": [
+ {
+ "targetId": "bridge-outlet-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,拆开并包扎进出油管。用大活动扳手拆开液压泵进、出油管接头,用塑料袋包扎管口。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_533EAE94D45D49A2BECD7E24E48835E6",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "67",
+ "videoName": "重型支援桥前泵换件修复 · 3 拆开并包扎进出油管",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-4",
+ "stepCode": "BRIDGE-STEP-4",
+ "actionCode": "COMPLETE_BRIDGE-STEP-4",
+ "number": 4,
+ "title": "拆下四个安装螺栓",
+ "targetId": "bridge-pump-bolt-1",
+ "targetName": "拆下第 1 个安装螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用开口扳手拆下液压泵与取力器之间的四个安装螺栓。",
+ "guidance": "用开口扳手拆下液压泵与取力器之间的四个安装螺栓。",
+ "warning": "",
+ "success": "拆下四个安装螺栓:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-pump-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 1 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 2 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 3 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 4 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,拆下四个安装螺栓。用开口扳手拆下液压泵与取力器之间的四个安装螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_787B4C212CF644AE9A3D8D49DEDCB65E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "68",
+ "videoName": "重型支援桥前泵换件修复 · 4 拆下四个安装螺栓",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-5",
+ "stepCode": "BRIDGE-STEP-5",
+ "actionCode": "COMPLETE_BRIDGE-STEP-5",
+ "number": 5,
+ "title": "取下旧前泵",
+ "targetId": "bridge-old-pump",
+ "targetName": "取下旧前泵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "取下原前泵。",
+ "guidance": "取下原前泵。",
+ "warning": "",
+ "success": "取下旧前泵:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-old-pump",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-old-pump",
+ "kind": "identify",
+ "directionHint": "取下旧前泵",
+ "effects": [
+ {
+ "targetId": "bridge-old-pump",
+ "offset": [
+ -2,
+ 0,
+ 0
+ ]
+ },
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "visible": false
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,取下旧前泵。取下原前泵。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_5672FD367E8F41A5A026E3C68E8C8726",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "69",
+ "videoName": "重型支援桥前泵换件修复 · 5 取下旧前泵",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-6",
+ "stepCode": "BRIDGE-STEP-6",
+ "actionCode": "COMPLETE_BRIDGE-STEP-6",
+ "number": 6,
+ "title": "修裁牛皮纸",
+ "targetId": "bridge-paper",
+ "targetName": "按安装面修裁纸垫",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "进一步裁剪牛皮纸,使其与液压泵安装面及取力器结合面吻合。",
+ "guidance": "进一步裁剪牛皮纸,使其与液压泵安装面及取力器结合面吻合。",
+ "warning": "",
+ "success": "修裁牛皮纸:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-paper",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-paper",
+ "kind": "identify",
+ "directionHint": "按安装面修裁纸垫",
+ "effects": [
+ {
+ "targetId": "bridge-gasket",
+ "visible": true
+ },
+ {
+ "targetId": "bridge-paper",
+ "visible": false
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第6步,修裁牛皮纸。进一步裁剪牛皮纸,使其与液压泵安装面及取力器结合面吻合。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_C0E73EC20FD44C608A795A03DE4F7401",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "70",
+ "videoName": "重型支援桥前泵换件修复 · 6 修裁牛皮纸",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-7",
+ "stepCode": "BRIDGE-STEP-7",
+ "actionCode": "COMPLETE_BRIDGE-STEP-7",
+ "number": 7,
+ "title": "放置牛皮纸垫",
+ "targetId": "bridge-gasket",
+ "targetName": "将纸垫放到取力器结合面",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将裁好的牛皮纸放在取力器接口处。",
+ "guidance": "将裁好的牛皮纸放在取力器接口处。",
+ "warning": "",
+ "success": "放置牛皮纸垫:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-gasket",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-gasket",
+ "kind": "identify",
+ "directionHint": "将纸垫放到取力器结合面",
+ "effects": [
+ {
+ "targetId": "bridge-gasket",
+ "offset": [
+ 2.3,
+ 0,
+ -0.4
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第7步,放置牛皮纸垫。将裁好的牛皮纸放在取力器接口处。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_17FAC41643804A22A8B71A2FF8DCBC28",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "71",
+ "videoName": "重型支援桥前泵换件修复 · 7 放置牛皮纸垫",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-8",
+ "stepCode": "BRIDGE-STEP-8",
+ "actionCode": "COMPLETE_BRIDGE-STEP-8",
+ "number": 8,
+ "title": "安装新液压泵",
+ "targetId": "bridge-new-pump",
+ "targetName": "安装新泵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "安装新的液压泵。原稿没有给出拧紧力矩。",
+ "guidance": "安装新的液压泵。原稿没有给出拧紧力矩。",
+ "warning": "",
+ "success": "安装新液压泵:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-new-pump",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-new-pump",
+ "kind": "identify",
+ "directionHint": "安装新泵",
+ "effects": [
+ {
+ "targetId": "bridge-new-pump",
+ "offset": [
+ -2,
+ 0,
+ 0
+ ]
+ },
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "visible": true
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 1 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 2 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 3 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 4 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第8步,安装新液压泵。安装新的液压泵。原稿没有给出拧紧力矩。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_2284ABD91F544E2EB7799E9FA1C4BCF6",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "72",
+ "videoName": "重型支援桥前泵换件修复 · 8 安装新液压泵",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-9",
+ "stepCode": "BRIDGE-STEP-9",
+ "actionCode": "COMPLETE_BRIDGE-STEP-9",
+ "number": 9,
+ "title": "向新泵加注液压油",
+ "targetId": "bridge-fill-cap",
+ "targetName": "打开加油口",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开新液压泵加油口,加注液压油。原稿没有给出定量值。",
+ "guidance": "打开新液压泵加油口,加注液压油。原稿没有给出定量值。",
+ "warning": "",
+ "success": "向新泵加注液压油:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-fill-cap",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-fill-cap",
+ "kind": "identify",
+ "directionHint": "打开加油口",
+ "effects": [
+ {
+ "targetId": "bridge-fill-cap",
+ "offset": [
+ 0,
+ 0.45,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-oil-can",
+ "kind": "identify",
+ "directionHint": "向新泵加注液压油",
+ "effects": [
+ {
+ "targetId": "bridge-oil-can",
+ "offset": [
+ -1.3,
+ 0.6,
+ -0.3
+ ]
+ },
+ {
+ "targetId": "bridge-oil-stream",
+ "visible": true
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第9步,向新泵加注液压油。打开新液压泵加油口,加注液压油。原稿没有给出定量值。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_BF468C49DDCB462E8E2C75CF8C6BD172",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "73",
+ "videoName": "重型支援桥前泵换件修复 · 9 向新泵加注液压油",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-10",
+ "stepCode": "BRIDGE-STEP-10",
+ "actionCode": "COMPLETE_BRIDGE-STEP-10",
+ "number": 10,
+ "title": "恢复进出油管连接",
+ "targetId": "bridge-inlet-bag",
+ "targetName": "取下进油管封口袋",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用大活动扳手连接并拧紧液压泵进、出油管。",
+ "guidance": "用大活动扳手连接并拧紧液压泵进、出油管。",
+ "warning": "",
+ "success": "恢复进出油管连接:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-inlet-bag",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-inlet-bag",
+ "kind": "identify",
+ "directionHint": "取下进油管封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-inlet-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-inlet",
+ "kind": "identify",
+ "directionHint": "连接并拧紧进油管",
+ "effects": [
+ {
+ "targetId": "bridge-inlet",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet-bag",
+ "kind": "identify",
+ "directionHint": "取下出油管封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-outlet-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet",
+ "kind": "identify",
+ "directionHint": "连接并拧紧出油管",
+ "effects": [
+ {
+ "targetId": "bridge-outlet",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第10步,恢复进出油管连接。用大活动扳手连接并拧紧液压泵进、出油管。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_88908FEBE6054EE99087F8653A8C5FAA",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "74",
+ "videoName": "重型支援桥前泵换件修复 · 10 恢复进出油管连接",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-11",
+ "stepCode": "BRIDGE-STEP-11",
+ "actionCode": "COMPLETE_BRIDGE-STEP-11",
+ "number": 11,
+ "title": "启动设备试验",
+ "targetId": "bridge-engine",
+ "targetName": "启动设备试验",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "启动设备进行试验。原稿没有展开具体试验项目和判定数值。",
+ "guidance": "启动设备进行试验。原稿没有展开具体试验项目和判定数值。",
+ "warning": "",
+ "success": "启动设备试验:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-engine",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "启动设备试验",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 2209160
+ },
+ {
+ "targetId": "bridge-oil-stream",
+ "visible": false
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-test-control",
+ "kind": "identify",
+ "directionHint": "操作试验手柄并观察",
+ "effects": [
+ {
+ "targetId": "bridge-test-control",
+ "offset": [
+ 0,
+ 0,
+ -0.25
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第11步,启动设备试验。启动设备进行试验。原稿没有展开具体试验项目和判定数值。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_4D873387CF324AAF9C6D3BE1A72C247E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "75",
+ "videoName": "重型支援桥前泵换件修复 · 11 启动设备试验",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ }
+ ],
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "totalScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-pump-replace",
+ "scriptVersion": "3"
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/7.jpg、8.jpg"
+ },
+ "definitionChecksum": "d269783f0e0314d11047cf82cf0d0d3bb3510d179c18e3dc281d9b12f9e80dd7",
+ "ownerUserId": "99",
+ "ownerUsername": "root",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "departmentName": "",
+ "status": "PUBLISHED",
+ "scheduleStartAt": null,
+ "dueAt": null,
+ "publishedAt": 1789395442,
+ "withdrawnAt": 1789395442,
+ "archivedAt": null,
+ "lifecycleReason": "发布教学任务",
+ "version": 8,
+ "addTime": 1789309632,
+ "updateTime": "2026-09-13T22:27:13",
+ "serverNow": 1789566461,
+ "members": [
+ {
+ "id": "183",
+ "userId": "66",
+ "username": "baidengdeng",
+ "displayName": "白澄澄",
+ "departmentId": "25",
+ "departmentName": "",
+ "memberType": "LEARNER",
+ "roleCode": "LEARNER",
+ "teamCode": "NEUTRAL",
+ "groupCode": "INDIVIDUAL",
+ "positionCode": "LEARNER",
+ "stationCode": "",
+ "sortOrder": 0,
+ "version": 0
+ }
+ ],
+ "runCount": 1,
+ "pendingReviewCount": 0
+ },
+ "89": {
+ "id": "89",
+ "code": "TASK-VIRTUAL-008",
+ "name": "重型支援桥平衡阀拆拼互换",
+ "description": "原稿:桥梁/文件2/9.jpg、10.jpg",
+ "channel": "VIRTUAL",
+ "assignmentKind": "TRAINING",
+ "executionMode": "PRACTICE",
+ "audienceType": "COMMON",
+ "collaborationMode": "INDIVIDUAL",
+ "digitalHumanAllowed": false,
+ "digitalInstructorAgentSlug": "",
+ "digitalInstructorAgentName": "",
+ "digitalInstructorKnowledgeSource": "AGENT",
+ "contentProjectId": "441",
+ "contentVersionId": "536",
+ "definitionSnapshot": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥平衡阀拆拼互换",
+ "status": "published",
+ "trainingMode": "VIRTUAL",
+ "resources": {
+ "models": [
+ {
+ "id": "front-pump-step-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "name": "架桥车前泵互救操作整车模型",
+ "baseModelName": "架桥车前泵互救操作整车模型",
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "revision": 1,
+ "materialPreset": null,
+ "parts": [
+ {
+ "editorId": "",
+ "interactionId": "front-pump-hydraulic-pump",
+ "nodeName": "1液压泵",
+ "sourceNodeName": "1液压泵",
+ "nodePath": "",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-power-take-off",
+ "nodeName": "2取力器",
+ "sourceNodeName": "2取力器",
+ "nodePath": "",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-pto-switch",
+ "nodeName": "2取力器开关",
+ "sourceNodeName": "2取力器开关",
+ "nodePath": "",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-ball-valve-switch",
+ "nodeName": "3球阀开关",
+ "sourceNodeName": "3球阀开关",
+ "nodePath": "",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box",
+ "nodeName": "5辅助控制盒",
+ "sourceNodeName": "5辅助控制盒",
+ "nodePath": "",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "nodeName": "5辅助控制盒盖",
+ "sourceNodeName": "5辅助控制盒盖",
+ "nodePath": "",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-rescue-switch",
+ "nodeName": "5互救开关",
+ "sourceNodeName": "5互救开关",
+ "nodePath": "",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "animations": []
+ },
+ "task": {
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "code": "TR-FRONT-PUMP-RESCUE-001",
+ "title": "重型支援桥平衡阀拆拼互换",
+ "categoryId": "minor-repair",
+ "difficulty": "标准",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "image": "/models/step-model-front-pump-thumb.png",
+ "equipment": "架桥车",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ]
+ },
+ "scenario": {
+ "id": "front-pump-rescue-scenario",
+ "publishedSceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "publishedSceneVersion": "1.0",
+ "baseVisualKey": "front-pump-rescue",
+ "visualKey": "front-pump-rescue",
+ "environmentName": "架桥车互救操作训练场",
+ "sceneLayout": "架桥车整车操作位",
+ "equipmentState": "整车模型 · 补充拆装件为操作示意",
+ "tools": [],
+ "faults": [],
+ "environment": {
+ "type": "outdoor",
+ "mode": "builtin",
+ "sourceName": "内置架桥车互救操作训练场",
+ "resourceUrl": "",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "sceneResource": {
+ "sceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "version": "1.0",
+ "sourceKind": "published",
+ "status": "已发布",
+ "name": "架桥车前泵故障互救处置训练场景",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "objectCount": 2,
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "1.0",
+ "name": "重型支援桥平衡阀拆拼互换",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "environment": {
+ "presetId": "outdoor-1",
+ "type": "outdoor"
+ },
+ "rendering": {
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 70,
+ "far": 240
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.1,
+ "far": 800,
+ "position": [
+ 11,
+ 8,
+ 16
+ ],
+ "target": [
+ 0,
+ 1.5,
+ 2
+ ]
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ]
+ },
+ "assetReferences": [
+ {
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 32195288,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "training-content"
+ }
+ ]
+ },
+ "accent": "#2d86d8",
+ "background": 11062241,
+ "fog": 11062241,
+ "ground": 7110499,
+ "camera": {
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ },
+ "retainStoredParts": true,
+ "sceneTags": [
+ "真实整车步骤模型",
+ "前泵故障互救",
+ "机构顺序操作"
+ ],
+ "sensorFeeds": [],
+ "name": "重型支援桥平衡阀拆拼互换",
+ "title": "重型支援桥平衡阀拆拼互换",
+ "operableParts": [
+ "bridge-small-cloth",
+ "bridge-small-pipe",
+ "bridge-small-bag",
+ "bridge-small-bolt-1",
+ "bridge-small-bolt-2",
+ "bridge-small-bolt-3",
+ "bridge-small-bolt-4",
+ "bridge-small-valve",
+ "bridge-small-plug-1",
+ "bridge-small-plug-2",
+ "bridge-small-seat",
+ "bridge-large-cloth",
+ "bridge-large-pipe",
+ "bridge-large-bag",
+ "bridge-large-bolt-1",
+ "bridge-large-bolt-2",
+ "bridge-large-bolt-3",
+ "bridge-large-bolt-4",
+ "bridge-large-valve",
+ "bridge-large-plug-1",
+ "bridge-large-plug-2",
+ "bridge-large-seat"
+ ]
+ },
+ "tools": [],
+ "faults": [],
+ "steps": [
+ {
+ "id": "BRIDGE-STEP-1",
+ "stepCode": "BRIDGE-STEP-1",
+ "actionCode": "COMPLETE_BRIDGE-STEP-1",
+ "number": 1,
+ "title": "清洗小腔平衡阀",
+ "targetId": "bridge-small-cloth",
+ "targetName": "清洗并擦净阀体",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "guidance": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "warning": "",
+ "success": "清洗小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-cloth",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-small-cloth",
+ "kind": "identify",
+ "directionHint": "清洗并擦净阀体",
+ "effects": [
+ {
+ "targetId": "bridge-small-cloth",
+ "offset": [
+ 0.7,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-small-valve",
+ "color": 8492701
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,清洗小腔平衡阀。用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_76F80444AA9C4C3183A0EEDF6E655C25",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "76",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 1 清洗小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-2",
+ "stepCode": "BRIDGE-STEP-2",
+ "actionCode": "COMPLETE_BRIDGE-STEP-2",
+ "number": 2,
+ "title": "拆开小腔控制油口管路",
+ "targetId": "bridge-small-pipe",
+ "targetName": "拆开控制油管",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "guidance": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "warning": "",
+ "success": "拆开小腔控制油口管路:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-pipe",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-pipe",
+ "kind": "identify",
+ "directionHint": "拆开控制油管",
+ "effects": [
+ {
+ "targetId": "bridge-small-pipe",
+ "offset": [
+ 0.55,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bag",
+ "kind": "identify",
+ "directionHint": "封袋包扎管口",
+ "effects": [
+ {
+ "targetId": "bridge-small-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,拆开小腔控制油口管路。用十九号开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_EAF5F0A89D454E6FBAFB061C93D2F760",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "77",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 2 拆开小腔控制油口管路",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-3",
+ "stepCode": "BRIDGE-STEP-3",
+ "actionCode": "COMPLETE_BRIDGE-STEP-3",
+ "number": 3,
+ "title": "拆下小腔平衡阀",
+ "targetId": "bridge-small-bolt-1",
+ "targetName": "拆下第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "guidance": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "warning": "",
+ "success": "拆下小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-valve",
+ "kind": "identify",
+ "directionHint": "取下平衡阀",
+ "effects": [
+ {
+ "targetId": "bridge-small-valve",
+ "offset": [
+ 0,
+ 0,
+ 1.2
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,拆下小腔平衡阀。用八号内六角扳手拆下安装螺栓,取下平衡阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_981034D69E3047C6B9D1DAE9BBF4F7D4",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "78",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 3 拆下小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-4",
+ "stepCode": "BRIDGE-STEP-4",
+ "actionCode": "COMPLETE_BRIDGE-STEP-4",
+ "number": 4,
+ "title": "封堵小腔油口",
+ "targetId": "bridge-small-plug-1",
+ "targetName": "封堵第 1 个油堵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "guidance": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "warning": "",
+ "success": "封堵小腔油口:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-plug-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-plug-1",
+ "kind": "identify",
+ "directionHint": "封堵第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-plug-2",
+ "kind": "identify",
+ "directionHint": "封堵第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-seat",
+ "kind": "identify",
+ "directionHint": "擦净阀座结合面",
+ "effects": [
+ {
+ "targetId": "bridge-small-seat",
+ "color": 12965080
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,封堵小腔油口。用两个油堵封住两个油口,擦净阀座结合面。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_60D40306A9E74E96ADD7641932934BE4",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "79",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 4 封堵小腔油口",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-5",
+ "stepCode": "BRIDGE-STEP-5",
+ "actionCode": "COMPLETE_BRIDGE-STEP-5",
+ "number": 5,
+ "title": "清洗大腔平衡阀",
+ "targetId": "bridge-large-cloth",
+ "targetName": "清洗并擦净阀体",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "guidance": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "warning": "",
+ "success": "清洗大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-cloth",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-large-cloth",
+ "kind": "identify",
+ "directionHint": "清洗并擦净阀体",
+ "effects": [
+ {
+ "targetId": "bridge-large-cloth",
+ "offset": [
+ 0.7,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-large-valve",
+ "color": 8492701
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,清洗大腔平衡阀。用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_A6EFEC7D339E4BA8994C525CA3709E2E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "80",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 5 清洗大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-6",
+ "stepCode": "BRIDGE-STEP-6",
+ "actionCode": "COMPLETE_BRIDGE-STEP-6",
+ "number": 6,
+ "title": "拆开大腔控制油口管路",
+ "targetId": "bridge-large-pipe",
+ "targetName": "拆开控制油管",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "guidance": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "warning": "",
+ "success": "拆开大腔控制油口管路:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-pipe",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-pipe",
+ "kind": "identify",
+ "directionHint": "拆开控制油管",
+ "effects": [
+ {
+ "targetId": "bridge-large-pipe",
+ "offset": [
+ 0.55,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bag",
+ "kind": "identify",
+ "directionHint": "封袋包扎管口",
+ "effects": [
+ {
+ "targetId": "bridge-large-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第6步,拆开大腔控制油口管路。用十九号开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D9E1BAFBD89D48019B9445B2A5752E68",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "81",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 6 拆开大腔控制油口管路",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-7",
+ "stepCode": "BRIDGE-STEP-7",
+ "actionCode": "COMPLETE_BRIDGE-STEP-7",
+ "number": 7,
+ "title": "拆下大腔平衡阀",
+ "targetId": "bridge-large-bolt-1",
+ "targetName": "拆下第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "guidance": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "warning": "",
+ "success": "拆下大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-valve",
+ "kind": "identify",
+ "directionHint": "取下平衡阀",
+ "effects": [
+ {
+ "targetId": "bridge-large-valve",
+ "offset": [
+ 0,
+ 0,
+ 1.2
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第7步,拆下大腔平衡阀。用八号内六角扳手拆下安装螺栓,取下平衡阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_E83DDAB19F774A418C82EBA7E8EDCF8A",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "82",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 7 拆下大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-8",
+ "stepCode": "BRIDGE-STEP-8",
+ "actionCode": "COMPLETE_BRIDGE-STEP-8",
+ "number": 8,
+ "title": "封堵大腔油口",
+ "targetId": "bridge-large-plug-1",
+ "targetName": "封堵第 1 个油堵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "guidance": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "warning": "",
+ "success": "封堵大腔油口:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-plug-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-plug-1",
+ "kind": "identify",
+ "directionHint": "封堵第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-plug-2",
+ "kind": "identify",
+ "directionHint": "封堵第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-seat",
+ "kind": "identify",
+ "directionHint": "擦净阀座结合面",
+ "effects": [
+ {
+ "targetId": "bridge-large-seat",
+ "color": 12965080
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第8步,封堵大腔油口。用两个油堵封住两个油口,擦净阀座结合面。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_4FE31068F3EB410BAC72E19F1D1BAF49",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "83",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 8 封堵大腔油口",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-9",
+ "stepCode": "BRIDGE-STEP-9",
+ "actionCode": "COMPLETE_BRIDGE-STEP-9",
+ "number": 9,
+ "title": "准备安装大腔平衡阀",
+ "targetId": "bridge-large-seat",
+ "targetName": "擦净安装结合面",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "guidance": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "warning": "",
+ "success": "准备安装大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-seat",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-seat",
+ "kind": "identify",
+ "directionHint": "擦净安装结合面",
+ "effects": [
+ {
+ "targetId": "bridge-large-seat",
+ "color": 14477797
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-plug-1",
+ "kind": "identify",
+ "directionHint": "取下第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-1",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-plug-2",
+ "kind": "identify",
+ "directionHint": "取下第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-2",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第9步,准备安装大腔平衡阀。擦净平衡阀及阀座结合面,取下两个油堵。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D0A3CAC5278C4A57AC9BEF13DA2690BC",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "84",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 9 准备安装大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-10",
+ "stepCode": "BRIDGE-STEP-10",
+ "actionCode": "COMPLETE_BRIDGE-STEP-10",
+ "number": 10,
+ "title": "安装大腔平衡阀",
+ "targetId": "bridge-small-valve",
+ "targetName": "将互换平衡阀装到阀座",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "guidance": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "warning": "",
+ "success": "安装大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-valve",
+ "kind": "identify",
+ "directionHint": "将互换平衡阀装到阀座",
+ "effects": [
+ {
+ "targetId": "bridge-small-valve",
+ "offset": [
+ 3.2,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第10步,安装大腔平衡阀。将平衡阀放置于阀座上,用八号内六角扳手安装四个安装螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_0F40DAF3E28F4FA088EA943D9470CAA7",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "85",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 10 安装大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-11",
+ "stepCode": "BRIDGE-STEP-11",
+ "actionCode": "COMPLETE_BRIDGE-STEP-11",
+ "number": 11,
+ "title": "核对大腔控制油口管路连接",
+ "targetId": "bridge-large-bag",
+ "targetName": "取下封口袋",
+ "mode": "measure",
+ "interaction": "mechanism-operation",
+ "instruction": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "guidance": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "warning": "请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "success": "核对大腔控制油口管路连接:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-bag",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-bag",
+ "kind": "identify",
+ "directionHint": "取下封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-large-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-pipe",
+ "kind": "identify",
+ "directionHint": "按记录的处理依据连接管路",
+ "effects": [
+ {
+ "targetId": "bridge-large-pipe",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第11步,核对大腔控制油口管路连接。原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用十九号开口扳手拆开管路并包扎”的相反描述。请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_F6427532AF5F40348CEB154F031F2AED",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "86",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 11 核对大腔控制油口管路连接",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-12",
+ "stepCode": "BRIDGE-STEP-12",
+ "actionCode": "COMPLETE_BRIDGE-STEP-12",
+ "number": 12,
+ "title": "紧固大腔阀体连接螺栓",
+ "targetId": "bridge-large-bolt-1",
+ "targetName": "紧固第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "guidance": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "warning": "",
+ "success": "紧固大腔阀体连接螺栓:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第12步,紧固大腔阀体连接螺栓。用内六角扳手拧紧四个阀体连接螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_F601DB08C8D44934AD3A1B1582E804DB",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "87",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 12 紧固大腔阀体连接螺栓",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-13",
+ "stepCode": "BRIDGE-STEP-13",
+ "actionCode": "COMPLETE_BRIDGE-STEP-13",
+ "number": 13,
+ "title": "准备安装小腔平衡阀",
+ "targetId": "bridge-small-seat",
+ "targetName": "擦净安装结合面",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "guidance": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "warning": "",
+ "success": "准备安装小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-seat",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-seat",
+ "kind": "identify",
+ "directionHint": "擦净安装结合面",
+ "effects": [
+ {
+ "targetId": "bridge-small-seat",
+ "color": 14477797
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-plug-1",
+ "kind": "identify",
+ "directionHint": "取下第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-1",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-plug-2",
+ "kind": "identify",
+ "directionHint": "取下第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-2",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第13步,准备安装小腔平衡阀。擦净平衡阀及阀座结合面,取下两个油堵。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_B1BBA42CE5F346228B6B39A51F190CB3",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "88",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 13 准备安装小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-14",
+ "stepCode": "BRIDGE-STEP-14",
+ "actionCode": "COMPLETE_BRIDGE-STEP-14",
+ "number": 14,
+ "title": "安装小腔平衡阀",
+ "targetId": "bridge-large-valve",
+ "targetName": "将互换平衡阀装到阀座",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "guidance": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "warning": "",
+ "success": "安装小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-valve",
+ "kind": "identify",
+ "directionHint": "将互换平衡阀装到阀座",
+ "effects": [
+ {
+ "targetId": "bridge-large-valve",
+ "offset": [
+ -3.2,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第14步,安装小腔平衡阀。将平衡阀放置于阀座上,用八号内六角扳手安装四个安装螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_2BCD762C693242FF8DA420BD9A5D4DF9",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "89",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 14 安装小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-15",
+ "stepCode": "BRIDGE-STEP-15",
+ "actionCode": "COMPLETE_BRIDGE-STEP-15",
+ "number": 15,
+ "title": "核对小腔控制油口管路连接",
+ "targetId": "bridge-small-bag",
+ "targetName": "取下封口袋",
+ "mode": "measure",
+ "interaction": "mechanism-operation",
+ "instruction": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "guidance": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "warning": "请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "success": "核对小腔控制油口管路连接:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-bag",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-bag",
+ "kind": "identify",
+ "directionHint": "取下封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-small-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-pipe",
+ "kind": "identify",
+ "directionHint": "按记录的处理依据连接管路",
+ "effects": [
+ {
+ "targetId": "bridge-small-pipe",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第15步,核对小腔控制油口管路连接。原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用十九号开口扳手拆开管路并包扎”的相反描述。请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_5F8309BF74344C568C2C9EEFDD9E74BF",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "90",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 15 核对小腔控制油口管路连接",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-16",
+ "stepCode": "BRIDGE-STEP-16",
+ "actionCode": "COMPLETE_BRIDGE-STEP-16",
+ "number": 16,
+ "title": "紧固小腔阀体连接螺栓",
+ "targetId": "bridge-small-bolt-1",
+ "targetName": "紧固第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "guidance": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "warning": "",
+ "success": "紧固小腔阀体连接螺栓:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第16步,紧固小腔阀体连接螺栓。用内六角扳手拧紧四个阀体连接螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D525E35EDA12402DA13302C2B3874CC3",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "91",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 16 紧固小腔阀体连接螺栓",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ }
+ ],
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "totalScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-balance-valve-swap",
+ "scriptVersion": "3"
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/9.jpg、10.jpg"
+ },
+ "definitionChecksum": "7756b28145b96ab712dc15dc4d6234dfd6e6278e726f69b564691ee4c8ee9b8b",
+ "ownerUserId": "99",
+ "ownerUsername": "root",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "departmentName": "",
+ "status": "PUBLISHED",
+ "scheduleStartAt": null,
+ "dueAt": null,
+ "publishedAt": 1789316083,
+ "withdrawnAt": 1789316082,
+ "archivedAt": null,
+ "lifecycleReason": "发布教学任务",
+ "version": 8,
+ "addTime": 1789309633,
+ "updateTime": "2026-09-13T22:27:14",
+ "serverNow": 1789566461,
+ "members": [],
+ "runCount": 0,
+ "pendingReviewCount": 0
+ }
+}
\ No newline at end of file
diff --git a/reports/bridge-005-authoring-20260916/original-tasks-regression.json b/reports/bridge-005-authoring-20260916/original-tasks-regression.json
new file mode 100644
index 0000000..50aee00
--- /dev/null
+++ b/reports/bridge-005-authoring-20260916/original-tasks-regression.json
@@ -0,0 +1,2110 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 86 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 11.052363924053688,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 937.1159093565705,
+ "y": 510.8943121357542,
+ "localX": 678.1159093565705,
+ "localY": 322.3943121357542,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935024518472723,
+ 0.13537492625037484,
+ 0.19723593501664283
+ ],
+ "projected": {
+ "x": 670.919240275776,
+ "y": 316.01579133562,
+ "w": 14.309325962616413,
+ "h": 12.873100207788639
+ },
+ "pivot": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 6.098689649701348e-32,
+ 2.5291018817332963e-16,
+ -1
+ ],
+ "workflowCoverage": [
+ {
+ "name": "front-pump-hydraulic-pump",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 6.688026389433602,
+ 3.8228247388783156,
+ 8.328485692502216
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 881.0625,
+ "y": 533.375,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 87 first view",
+ "state": {
+ "id": "bridge-engine",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 18.74530082917896,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 802.1258271375215,
+ "y": 489.1311049751384,
+ "localX": 543.1258271375215,
+ "localY": 300.6311049751384,
+ "visible": true
+ },
+ "bounds": [
+ 0.3501201177055142,
+ 0.29044535054327036,
+ 0.7553749591221814
+ ],
+ "projected": {
+ "x": 525.8451092307747,
+ "y": 289.8747758906051,
+ "w": 34.09957427464701,
+ "h": 21.94543461410774
+ },
+ "pivot": [
+ -2.999317882937463,
+ 1.2580267211289828,
+ 6.401647324786939
+ ],
+ "pickPoints": [
+ {
+ "x": 801.8948963680982,
+ "y": 489.347493197659
+ },
+ {
+ "x": 796.7799602269012,
+ "y": 489.347493197659
+ },
+ {
+ "x": 807.0098325092953,
+ "y": 489.347493197659
+ },
+ {
+ "x": 812.1247686504923,
+ "y": 489.347493197659
+ },
+ {
+ "x": 801.8948963680982,
+ "y": 486.0556780055428
+ },
+ {
+ "x": 796.7799602269012,
+ "y": 486.0556780055428
+ },
+ {
+ "x": 807.0098325092953,
+ "y": 486.0556780055428
+ },
+ {
+ "x": 812.1247686504923,
+ "y": 486.0556780055428
+ },
+ {
+ "x": 801.8948963680982,
+ "y": 492.6393083897751
+ },
+ {
+ "x": 796.7799602269012,
+ "y": 492.6393083897751
+ },
+ {
+ "x": 807.0098325092953,
+ "y": 492.6393083897751
+ },
+ {
+ "x": 812.1247686504923,
+ "y": 492.6393083897751
+ },
+ {
+ "x": 801.8948963680982,
+ "y": 495.9311235818913
+ }
+ ],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 0.0003647744232217721,
+ 0.6679845154427327,
+ 0.7441750829397326
+ ],
+ "workflowCoverage": [
+ {
+ "name": "bridge-engine",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "bridge-hose-a",
+ "glowing": true
+ },
+ {
+ "name": "bridge-hose-b",
+ "glowing": true
+ },
+ {
+ "name": "bridge-return-valve",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "bridge-support-pto",
+ "glowing": true
+ },
+ {
+ "name": "bridge-supply",
+ "glowing": true
+ },
+ {
+ "name": "bridge-normal-control",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 10.879297762405727,
+ 7.41203471823875,
+ 15.346405327132661
+ ],
+ "target": [
+ 0.0003545131983222482,
+ 0.9835682527980125,
+ 1.5004775554141494
+ ],
+ "outline": 3,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 架桥车发动机控制(示意)",
+ "x": 701.890625,
+ "y": 516.3125,
+ "w": 200,
+ "h": 30,
+ "id": "bridge-engine"
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "保持架桥车发动机运行",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 2209160
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ -3,
+ 1.1,
+ 1.2
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 88 first view",
+ "state": {
+ "id": "bridge-engine",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 12.042465133634778,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 913.4102219920421,
+ "y": 511.3825199485665,
+ "localX": 654.4102219920421,
+ "localY": 322.8825199485665,
+ "visible": true
+ },
+ "bounds": [
+ 0.062756887345643,
+ 0.051998564459097896,
+ 0.13537557144211787
+ ],
+ "projected": {
+ "x": 650.2204266738713,
+ "y": 319.83560990970796,
+ "w": 8.349220606546169,
+ "h": 6.126281661357268
+ },
+ "pivot": [
+ -0.6660927457083943,
+ 0.5878027287808987,
+ 1.861848146330254
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 0,
+ 0.6689647316224496,
+ 0.7432941462471662
+ ],
+ "workflowCoverage": [
+ {
+ "name": "bridge-engine",
+ "glowing": true
+ },
+ {
+ "name": "bridge-paper",
+ "glowing": true
+ },
+ {
+ "name": "bridge-tank-valve",
+ "glowing": true
+ },
+ {
+ "name": "bridge-inlet",
+ "glowing": true
+ },
+ {
+ "name": "bridge-inlet-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-outlet",
+ "glowing": true
+ },
+ {
+ "name": "bridge-outlet-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-3",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-4",
+ "glowing": true
+ },
+ {
+ "name": "bridge-old-pump",
+ "glowing": true
+ },
+ {
+ "name": "bridge-new-pump",
+ "glowing": true
+ },
+ {
+ "name": "bridge-fill-cap",
+ "glowing": true
+ },
+ {
+ "name": "bridge-oil-can",
+ "glowing": true
+ },
+ {
+ "name": "bridge-test-control",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 6.988913966397507,
+ 5.113381051123811,
+ 8.894981411778645
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 3,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 0.65,
+ "baseline": 0.65,
+ "side": 2
+ },
+ {
+ "opacity": 0.65,
+ "baseline": 0.65,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 架桥车发动机控制(示意)",
+ "x": 813.390625,
+ "y": 530.453125,
+ "w": 200,
+ "h": 30,
+ "id": "bridge-engine"
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "关闭架桥车发动机",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 13195851
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ -3,
+ 1.1,
+ 1.2
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 89 first view",
+ "state": {
+ "id": "bridge-small-cloth",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 18.74530082917896,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 825.346900451233,
+ "y": 494.36864763278925,
+ "localX": 566.346900451233,
+ "localY": 305.86864763278925,
+ "visible": true
+ },
+ "bounds": [
+ 0.3001091125469584,
+ 0.20019644975604534,
+ 0.025263652634544442
+ ],
+ "projected": {
+ "x": 561.946835396814,
+ "y": 300.7632182750632,
+ "w": 8.823313170200777,
+ "h": 10.249360431990738
+ },
+ "pivot": [
+ -2.299399785448256,
+ 1.1078425712343078,
+ 6.251449528772805
+ ],
+ "pickPoints": [
+ {
+ "x": 825.3584919819143,
+ "y": 494.38789849105854
+ },
+ {
+ "x": 824.0349950063843,
+ "y": 494.38789849105854
+ },
+ {
+ "x": 826.6819889574444,
+ "y": 494.38789849105854
+ },
+ {
+ "x": 822.7114980308542,
+ "y": 494.38789849105854
+ },
+ {
+ "x": 828.0054859329746,
+ "y": 494.38789849105854
+ },
+ {
+ "x": 825.3584919819143,
+ "y": 492.85049442625996
+ },
+ {
+ "x": 824.0349950063843,
+ "y": 492.85049442625996
+ },
+ {
+ "x": 826.6819889574444,
+ "y": 492.85049442625996
+ },
+ {
+ "x": 822.7114980308542,
+ "y": 492.85049442625996
+ },
+ {
+ "x": 828.0054859329746,
+ "y": 492.85049442625996
+ },
+ {
+ "x": 825.3584919819143,
+ "y": 495.9253025558572
+ },
+ {
+ "x": 824.0349950063843,
+ "y": 495.9253025558572
+ },
+ {
+ "x": 826.6819889574444,
+ "y": 495.9253025558572
+ },
+ {
+ "x": 822.7114980308542,
+ "y": 495.9253025558572
+ },
+ {
+ "x": 828.0054859329746,
+ "y": 495.9253025558572
+ },
+ {
+ "x": 825.3584919819143,
+ "y": 491.3130903614613
+ },
+ {
+ "x": 824.0349950063843,
+ "y": 491.3130903614613
+ },
+ {
+ "x": 826.6819889574444,
+ "y": 491.3130903614613
+ },
+ {
+ "x": 822.7114980308542,
+ "y": 491.3130903614613
+ },
+ {
+ "x": 825.3584919819143,
+ "y": 497.4627066206558
+ },
+ {
+ "x": 824.0349950063843,
+ "y": 497.4627066206558
+ },
+ {
+ "x": 826.6819889574444,
+ "y": 497.4627066206558
+ },
+ {
+ "x": 828.0054859329746,
+ "y": 497.4627066206558
+ }
+ ],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 0.00006465834627876286,
+ 0.11783665604487886,
+ 0.9930329895383433
+ ],
+ "workflowCoverage": [
+ {
+ "name": "bridge-small-cloth",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-pipe",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-3",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-4",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-valve",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-plug-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-plug-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-seat",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-cloth",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-pipe",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-3",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-4",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-valve",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-plug-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-plug-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-seat",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 10.879297762405727,
+ 7.41203471823875,
+ 15.346405327132661
+ ],
+ "target": [
+ 0.0003545131983222482,
+ 0.9835682527980125,
+ 1.5004775554141494
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 0.65,
+ "baseline": 0.65,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 0.65,
+ "baseline": 0.65,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 小腔清洗擦拭布",
+ "x": 755.34375,
+ "y": 515.5,
+ "w": 140,
+ "h": 30,
+ "id": "bridge-small-cloth"
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-small-cloth",
+ "kind": "identify",
+ "directionHint": "清洗并擦净阀体",
+ "effects": [
+ {
+ "targetId": "bridge-small-cloth",
+ "offset": [
+ 0.7,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-small-valve",
+ "color": 8492701
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ -2.3,
+ 1.1,
+ 1.05
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ }
+ ],
+ "errors": [],
+ "writes": []
+}
\ No newline at end of file
diff --git a/reports/bridge-005-authoring-20260916/pilot.json b/reports/bridge-005-authoring-20260916/pilot.json
new file mode 100644
index 0000000..9058f38
--- /dev/null
+++ b/reports/bridge-005-authoring-20260916/pilot.json
@@ -0,0 +1,10 @@
+{
+ "sceneId": "457",
+ "sceneVersionId": "551",
+ "trainingId": "458",
+ "mediaUploaded": true,
+ "trainingVersionId": "552",
+ "taskId": "116",
+ "taskStatus": "DRAFT",
+ "previewUrl": "/teaching/virtual-training/preview/116"
+}
\ No newline at end of file
diff --git a/reports/bridge-005-authoring-20260916/probe.json b/reports/bridge-005-authoring-20260916/probe.json
new file mode 100644
index 0000000..9f38ad2
--- /dev/null
+++ b/reports/bridge-005-authoring-20260916/probe.json
@@ -0,0 +1,288 @@
+{
+ "objects": [
+ {
+ "receiveShadow": true,
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "position": [
+ -3.1597256741842212,
+ 10.30528511389146,
+ -40.10715876774236
+ ],
+ "castShadow": true,
+ "semantic": "环境设施",
+ "visible": true,
+ "name": "野外山地训练场",
+ "mimeType": "model/gltf-binary",
+ "opacity": 1,
+ "contentUri": "/models/地形.glb",
+ "assetUrl": "/models/地形.glb",
+ "sourceName": "地形.glb",
+ "assetId": "front-pump-field-terrain",
+ "type": "imported",
+ "assetCode": "PILOT-TERRAIN",
+ "locked": false,
+ "scale": [
+ 1.7159231079037875,
+ 1.7159231079037875,
+ 1.7159231079037875
+ ],
+ "components": [],
+ "id": "front-pump-training-yard",
+ "sourceVersionId": "538",
+ "color": "#ffffff",
+ "modelId": "front-pump-field-terrain",
+ "modelOverrides": {},
+ "modelTimeline": null,
+ "sceneId": "front-pump-training-yard",
+ "assetKey": "",
+ "resourceUrl": "/models/地形.glb",
+ "assetRole": "environment",
+ "interactionId": "scene:front-pump-training-yard",
+ "operable": false,
+ "modelEditorAssetId": "content-model--538",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "fitToScene": false,
+ "apiManaged": true,
+ "modelPartTargets": []
+ },
+ {
+ "receiveShadow": true,
+ "rotation": [
+ 3.0865583248298285e-17,
+ -3.96331642134641e-33,
+ -2.568113739801058e-16
+ ],
+ "position": [
+ 1.5698558846140135e-16,
+ 0.6112875194820317,
+ 0.13180482636746585
+ ],
+ "castShadow": true,
+ "semantic": "实训装备",
+ "visible": true,
+ "name": "架桥车前泵互救操作整车模型",
+ "mimeType": "model/gltf-binary",
+ "opacity": 1,
+ "contentUri": "/models/步骤模型.glb",
+ "assetUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "assetId": "front-pump-step-vehicle",
+ "type": "imported",
+ "assetCode": "PILOT-VEHICLE",
+ "locked": false,
+ "scale": [
+ 0.9715696607300419,
+ 0.9715696607300419,
+ 0.9715696607300419
+ ],
+ "components": [],
+ "id": "front-pump-rescue-vehicle",
+ "sourceVersionId": "538",
+ "color": "#ffffff",
+ "modelId": "front-pump-step-vehicle",
+ "modelOverrides": {},
+ "modelTimeline": null,
+ "sceneId": "front-pump-rescue-vehicle",
+ "assetKey": "",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetRole": "equipment",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "operable": false,
+ "modelEditorAssetId": "content-model--538",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "fitToScene": false,
+ "apiManaged": true,
+ "modelPartTargets": [
+ {
+ "sceneId": "front-pump-hydraulic-pump",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "name": "液压泵",
+ "editorId": "",
+ "nodePath": "",
+ "sourceNodeName": "1液压泵",
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ {
+ "sceneId": "front-pump-power-take-off",
+ "interactionId": "front-pump-power-take-off",
+ "sourceInteractionId": "front-pump-power-take-off",
+ "name": "取力器",
+ "editorId": "",
+ "nodePath": "",
+ "sourceNodeName": "2取力器",
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ {
+ "sceneId": "front-pump-pto-switch",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "name": "取力器开关",
+ "editorId": "",
+ "nodePath": "",
+ "sourceNodeName": "2取力器开关",
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ {
+ "sceneId": "front-pump-ball-valve-switch",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "name": "球阀开关",
+ "editorId": "",
+ "nodePath": "",
+ "sourceNodeName": "3球阀开关",
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ {
+ "sceneId": "front-pump-aux-control-box",
+ "interactionId": "front-pump-aux-control-box",
+ "sourceInteractionId": "front-pump-aux-control-box",
+ "name": "辅助控制盒",
+ "editorId": "",
+ "nodePath": "",
+ "sourceNodeName": "5辅助控制盒",
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ {
+ "sceneId": "front-pump-aux-control-box-cover",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "name": "辅助控制盒盖",
+ "editorId": "",
+ "nodePath": "",
+ "sourceNodeName": "5辅助控制盒盖",
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ {
+ "sceneId": "front-pump-rescue-switch",
+ "interactionId": "front-pump-rescue-switch",
+ "sourceInteractionId": "front-pump-rescue-switch",
+ "name": "互救开关",
+ "editorId": "",
+ "nodePath": "",
+ "sourceNodeName": "5互救开关",
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ }
+ ]
+ }
+ ],
+ "parts": [
+ "scene:front-pump-rescue-vehicle/part/front-pump-hydraulic-pump",
+ "scene:front-pump-rescue-vehicle/part/front-pump-power-take-off",
+ "scene:front-pump-rescue-vehicle/part/front-pump-pto-switch",
+ "scene:front-pump-rescue-vehicle/part/front-pump-ball-valve-switch",
+ "scene:front-pump-rescue-vehicle/part/front-pump-aux-control-box",
+ "scene:front-pump-rescue-vehicle/part/front-pump-aux-control-box-cover",
+ "scene:front-pump-rescue-vehicle/part/front-pump-rescue-switch"
+ ],
+ "nodes": [
+ [
+ "野外山地训练场",
+ "野外山地训练场",
+ "DX",
+ "DX_1",
+ "DX_2",
+ "DX_3",
+ "DX_4",
+ "DX_5"
+ ],
+ [
+ "架桥车前泵互救操作整车模型",
+ "架桥车前泵互救操作整车模型",
+ "车",
+ "车_1",
+ "车_2",
+ "车_3",
+ "车_4",
+ "车_5",
+ "车_6",
+ "车_7",
+ "车_8",
+ "车_9",
+ "车_10",
+ "车_11",
+ "车_12",
+ "车_13",
+ "车_14",
+ "车_15",
+ "车_16",
+ "5辅助控制盒盖",
+ "2取力器",
+ "2取力器_1",
+ "2取力器_2",
+ "2取力器开关",
+ "2取力器开关_1",
+ "2取力器开关_2",
+ "training-pick-proxy:scene:front-pump-rescue-vehicle/part/front-pump-pto-switch",
+ "5互救开关",
+ "training-pick-proxy:scene:front-pump-rescue-vehicle/part/front-pump-rescue-switch",
+ "5辅助控制盒",
+ "5辅助控制盒_1",
+ "5辅助控制盒_2",
+ "5辅助控制盒_3",
+ "5辅助控制盒_4",
+ "5辅助控制盒_5",
+ "5辅助控制盒_6",
+ "5辅助控制盒_7",
+ "1液压泵",
+ "关键螺丝",
+ "Obj_关键螺丝",
+ "Obj_关键螺丝_1",
+ "Obj_关键螺丝_2",
+ "Obj_关键螺丝_3",
+ "3球阀开关",
+ "training-pick-proxy:scene:front-pump-rescue-vehicle/part/front-pump-ball-valve-switch"
+ ]
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-005-authoring-20260916/runtime-edited-75.json b/reports/bridge-005-authoring-20260916/runtime-edited-75.json
new file mode 100644
index 0000000..5710abe
--- /dev/null
+++ b/reports/bridge-005-authoring-20260916/runtime-edited-75.json
@@ -0,0 +1,511 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 116 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 11.026959938593922,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 933.2030379404363,
+ "y": 508.98653882111967,
+ "localX": 674.2030379404363,
+ "localY": 320.48653882111967,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935024518472723,
+ 0.13537492625037484,
+ 0.19723593501664283
+ ],
+ "projected": {
+ "x": 666.9159534482183,
+ "y": 314.22778469888664,
+ "w": 14.498295179786055,
+ "h": 12.630906367540888
+ },
+ "pivot": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "pickPoints": [
+ {
+ "x": 933.1651010381113,
+ "y": 509.0432378826571
+ },
+ {
+ "x": 930.9903567611434,
+ "y": 509.0432378826571
+ },
+ {
+ "x": 935.3398453150792,
+ "y": 509.0432378826571
+ },
+ {
+ "x": 928.8156124841755,
+ "y": 509.0432378826571
+ },
+ {
+ "x": 937.5145895920471,
+ "y": 509.0432378826571
+ },
+ {
+ "x": 933.1651010381113,
+ "y": 507.14860192752593
+ },
+ {
+ "x": 930.9903567611434,
+ "y": 507.14860192752593
+ },
+ {
+ "x": 935.3398453150792,
+ "y": 507.14860192752593
+ },
+ {
+ "x": 933.1651010381113,
+ "y": 510.93787383778823
+ },
+ {
+ "x": 930.9903567611434,
+ "y": 510.93787383778823
+ },
+ {
+ "x": 935.3398453150792,
+ "y": 510.93787383778823
+ },
+ {
+ "x": 928.8156124841755,
+ "y": 510.93787383778823
+ },
+ {
+ "x": 935.3398453150792,
+ "y": 505.25396597239484
+ },
+ {
+ "x": 933.1651010381113,
+ "y": 512.8325097929194
+ },
+ {
+ "x": 930.9903567611434,
+ "y": 512.8325097929194
+ },
+ {
+ "x": 928.8156124841755,
+ "y": 512.8325097929194
+ }
+ ],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 6.098689649701348e-32,
+ 2.5291018817332963e-16,
+ -1
+ ],
+ "workflowCoverage": [
+ {
+ "name": "front-pump-hydraulic-pump",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 7.138234886169582,
+ 3.695554761077557,
+ 7.955160424286649
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 877.15625,
+ "y": 531.34375,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 116 step 1 operation 1",
+ "target": "front-pump-hydraulic-pump",
+ "drag": false,
+ "distance": 2.5322004355743615,
+ "projected": {
+ "x": 705.1374098658791,
+ "y": 222.8100611504512,
+ "w": 91.72518026824184,
+ "h": 113.44868046645234
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 116 step 2 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 709.0006218750913,
+ "y": 263.03238137674134,
+ "w": 83.99875624981757,
+ "h": 33.023591730971475
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 116 step 3 operation 1",
+ "target": "front-pump-ball-valve-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 742.9515028622343,
+ "y": 259.69721416379815,
+ "w": 16.096994275529482,
+ "h": 40.44894573262036
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 116 step 4 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 706.5903063366927,
+ "y": 244.5697698769074,
+ "w": 88.81938732661342,
+ "h": 69.87239851232039
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 116 step 5 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 699.1228274926349,
+ "y": 249.2085662189188,
+ "w": 103.7543450147308,
+ "h": 60.65167032951712
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 116 step 5 operation 2",
+ "target": "front-pump-rescue-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 748.0136091802624,
+ "y": 276.397277651574,
+ "w": 5.972781639476352,
+ "h": 6.274247464206724
+ },
+ "labels": 4
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-005-authoring-20260916/runtime-final-90-lan.json b/reports/bridge-005-authoring-20260916/runtime-final-90-lan.json
new file mode 100644
index 0000000..02415b8
--- /dev/null
+++ b/reports/bridge-005-authoring-20260916/runtime-final-90-lan.json
@@ -0,0 +1,543 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 116 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 11.026959938593922,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 933.2030379404363,
+ "y": 508.98653882111967,
+ "localX": 674.2030379404363,
+ "localY": 320.48653882111967,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935024518472723,
+ 0.13537492625037484,
+ 0.19723593501664283
+ ],
+ "projected": {
+ "x": 666.9159534482183,
+ "y": 314.22778469888664,
+ "w": 14.498295179786055,
+ "h": 12.630906367540888
+ },
+ "pivot": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "pickPoints": [
+ {
+ "x": 933.1651010381113,
+ "y": 509.0432378826571
+ },
+ {
+ "x": 930.9903567611434,
+ "y": 509.0432378826571
+ },
+ {
+ "x": 935.3398453150792,
+ "y": 509.0432378826571
+ },
+ {
+ "x": 928.8156124841755,
+ "y": 509.0432378826571
+ },
+ {
+ "x": 937.5145895920471,
+ "y": 509.0432378826571
+ },
+ {
+ "x": 933.1651010381113,
+ "y": 507.14860192752593
+ },
+ {
+ "x": 930.9903567611434,
+ "y": 507.14860192752593
+ },
+ {
+ "x": 935.3398453150792,
+ "y": 507.14860192752593
+ },
+ {
+ "x": 933.1651010381113,
+ "y": 510.93787383778823
+ },
+ {
+ "x": 930.9903567611434,
+ "y": 510.93787383778823
+ },
+ {
+ "x": 935.3398453150792,
+ "y": 510.93787383778823
+ },
+ {
+ "x": 928.8156124841755,
+ "y": 510.93787383778823
+ },
+ {
+ "x": 935.3398453150792,
+ "y": 505.25396597239484
+ },
+ {
+ "x": 933.1651010381113,
+ "y": 512.8325097929194
+ },
+ {
+ "x": 930.9903567611434,
+ "y": 512.8325097929194
+ },
+ {
+ "x": 928.8156124841755,
+ "y": 512.8325097929194
+ }
+ ],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 6.098689649701348e-32,
+ 2.5291018817332963e-16,
+ -1
+ ],
+ "workflowCoverage": [
+ {
+ "name": "front-pump-hydraulic-pump",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 7.138234886169582,
+ 3.695554761077557,
+ 7.955160424286649
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 877.15625,
+ "y": 531.34375,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "narration": [
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 116 digital-human video playback",
+ "pass": true,
+ "media": {
+ "width": 480,
+ "height": 640,
+ "duration": 4.96,
+ "currentTime": 0.012821
+ }
+ },
+ {
+ "name": "task 116 step 1 operation 1",
+ "target": "front-pump-hydraulic-pump",
+ "drag": false,
+ "distance": 2.5322004355743615,
+ "projected": {
+ "x": 705.1374098658791,
+ "y": 222.8100611504512,
+ "w": 91.72518026824184,
+ "h": 113.44868046645234
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 116 step 2 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 709.0006218750913,
+ "y": 263.03238137674134,
+ "w": 83.99875624981757,
+ "h": 33.023591730971475
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 116 step 3 operation 1",
+ "target": "front-pump-ball-valve-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 742.9515028622343,
+ "y": 259.69721416379815,
+ "w": 16.096994275529482,
+ "h": 40.44894573262036
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 116 step 4 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 706.5903063366927,
+ "y": 244.5697698769074,
+ "w": 88.81938732661342,
+ "h": 69.87239851232039
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 116 step 5 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 699.1228274926349,
+ "y": 249.2085662189188,
+ "w": 103.7543450147308,
+ "h": 60.65167032951712
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 116 step 5 operation 2",
+ "target": "front-pump-rescue-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 748.0136091802624,
+ "y": 276.397277651574,
+ "w": 5.972781639476352,
+ "h": 6.274247464206724
+ },
+ "labels": 4
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/116/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-005-authoring-20260916/runtime-first.json b/reports/bridge-005-authoring-20260916/runtime-first.json
new file mode 100644
index 0000000..9bb28ba
--- /dev/null
+++ b/reports/bridge-005-authoring-20260916/runtime-first.json
@@ -0,0 +1,271 @@
+{
+ "pass": false,
+ "error": "The expression evaluated to a falsy value:\n\n assert.ok(state.outline>0)\n",
+ "checks": [],
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 10.556940520723852,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": null,
+ "bounds": null,
+ "projected": null,
+ "pivot": null,
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "workflowCoverage": [],
+ "camera": [
+ 6.388234886169593,
+ 3.6955547610775574,
+ 7.9551604242866585
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 0,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ }
+ },
+ "errors": [],
+ "writes": [],
+ "networkErrors": [
+ {
+ "path": "http://127.0.0.1:6180/14b2da40-8e59-4998-8ab4-cedb2d56e98f",
+ "error": "net::ERR_ABORTED"
+ }
+ ],
+ "pending": []
+}
\ No newline at end of file
diff --git a/reports/bridge-005-authoring-20260916/runtime.json b/reports/bridge-005-authoring-20260916/runtime.json
new file mode 100644
index 0000000..4f34e4d
--- /dev/null
+++ b/reports/bridge-005-authoring-20260916/runtime.json
@@ -0,0 +1,485 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 116 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 10.556940520723852,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 933.3103730673897,
+ "y": 513.1321797455187,
+ "localX": 674.3103730673897,
+ "localY": 324.6321797455186,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935024518472723,
+ 0.13537492625037484,
+ 0.19723593501664283
+ ],
+ "projected": {
+ "x": 666.7119490289721,
+ "y": 317.90271383869003,
+ "w": 15.10354286710276,
+ "h": 13.587830416252018
+ },
+ "pivot": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "pickPoints": [
+ {
+ "x": 933.2637204625235,
+ "y": 513.196629046816
+ },
+ {
+ "x": 930.9981890324581,
+ "y": 513.196629046816
+ },
+ {
+ "x": 935.5292518925888,
+ "y": 513.196629046816
+ },
+ {
+ "x": 928.7326576023926,
+ "y": 513.196629046816
+ },
+ {
+ "x": 937.7947833226543,
+ "y": 513.196629046816
+ },
+ {
+ "x": 933.2637204625235,
+ "y": 511.15845448437824
+ },
+ {
+ "x": 930.9981890324581,
+ "y": 511.15845448437824
+ },
+ {
+ "x": 935.5292518925888,
+ "y": 511.15845448437824
+ },
+ {
+ "x": 933.2637204625235,
+ "y": 515.2348036092538
+ },
+ {
+ "x": 930.9981890324581,
+ "y": 515.2348036092538
+ },
+ {
+ "x": 935.5292518925888,
+ "y": 515.2348036092538
+ },
+ {
+ "x": 928.7326576023926,
+ "y": 515.2348036092538
+ },
+ {
+ "x": 935.5292518925888,
+ "y": 509.12027992194044
+ },
+ {
+ "x": 933.2637204625235,
+ "y": 517.2729781716916
+ },
+ {
+ "x": 930.9981890324581,
+ "y": 517.2729781716916
+ },
+ {
+ "x": 935.5292518925888,
+ "y": 517.2729781716916
+ },
+ {
+ "x": 928.7326576023926,
+ "y": 517.2729781716916
+ }
+ ],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 6.098689649701348e-32,
+ 2.5291018817332963e-16,
+ -1
+ ],
+ "workflowCoverage": [
+ {
+ "name": "front-pump-hydraulic-pump",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 6.388234886169593,
+ 3.6955547610775574,
+ 7.9551604242866585
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 877.25,
+ "y": 535.984375,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 116 step 1 operation 1",
+ "target": "front-pump-hydraulic-pump",
+ "drag": false,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 705.1374098658791,
+ "y": 222.81006115045116,
+ "w": 91.72518026824184,
+ "h": 113.44868046645237
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 116 step 2 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 709.0006218750913,
+ "y": 263.03238137674134,
+ "w": 83.99875624981757,
+ "h": 33.023591730971475
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 116 step 3 operation 1",
+ "target": "front-pump-ball-valve-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 742.9515028622343,
+ "y": 259.69721416379815,
+ "w": 16.096994275529482,
+ "h": 40.44894573262036
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 116 step 4 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 706.5903063366927,
+ "y": 244.5697698769074,
+ "w": 88.81938732661342,
+ "h": 69.87239851232039
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 116 step 5 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 699.1228274926349,
+ "y": 249.2085662189188,
+ "w": 103.7543450147308,
+ "h": 60.65167032951712
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 116 step 5 operation 2",
+ "target": "front-pump-rescue-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 748.0136091802624,
+ "y": 276.397277651574,
+ "w": 5.972781639476352,
+ "h": 6.274247464206724
+ },
+ "labels": 4
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-005-authoring-20260916/scene-editor-roundtrip.json b/reports/bridge-005-authoring-20260916/scene-editor-roundtrip.json
new file mode 100644
index 0000000..17fb9e2
--- /dev/null
+++ b/reports/bridge-005-authoring-20260916/scene-editor-roundtrip.json
@@ -0,0 +1,442 @@
+{
+ "objects": [
+ {
+ "sceneId": "front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "deviceId": "front-pump-training-yard",
+ "modelId": "front-pump-field-terrain",
+ "semantic": "环境地形",
+ "assetRole": "environment",
+ "builtinAssetId": "front-pump-field-terrain",
+ "modelEditorAssetId": "",
+ "modelEditorModelId": "",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "partOverrides": {},
+ "interactionId": "scene:front-pump-training-yard",
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sourceNodeName": "",
+ "splitGroupId": "",
+ "visible": true,
+ "position": [
+ -3.1597256741842212,
+ 10.30528511389146,
+ -40.10715876774236
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1.7159231079037875,
+ 1.7159231079037875,
+ 1.7159231079037875
+ ],
+ "assetKey": "",
+ "resourceUrl": "/models/terrain-005-20260917.glb",
+ "sourceName": "terrain-005-20260917.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "enclosureMode": "",
+ "assetCode": "PILOT-TERRAIN-005",
+ "sourceAssetId": ""
+ },
+ {
+ "sceneId": "front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "deviceId": "front-pump-rescue-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "semantic": "实训装备",
+ "assetRole": "equipment",
+ "builtinAssetId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "bridge-erector-0916",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "sceneId": "front-pump-hydraulic-pump",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "bridge-0916-node-92",
+ "nodePath": "0/46/0",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-power-take-off",
+ "interactionId": "front-pump-power-take-off",
+ "sourceInteractionId": "front-pump-power-take-off",
+ "editorId": "bridge-0916-node-80",
+ "nodePath": "0/40/0",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-pto-switch",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-ball-valve-switch",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "bridge-0916-node-96",
+ "nodePath": "0/48/0",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-aux-control-box",
+ "interactionId": "front-pump-aux-control-box",
+ "sourceInteractionId": "front-pump-aux-control-box",
+ "editorId": "bridge-0916-node-84",
+ "nodePath": "0/42/0",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-aux-control-box-cover",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "bridge-0916-node-78",
+ "nodePath": "0/39/0",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-rescue-switch",
+ "interactionId": "front-pump-rescue-switch",
+ "sourceInteractionId": "front-pump-rescue-switch",
+ "editorId": "bridge-0916-node-86",
+ "nodePath": "0/43/0",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ }
+ ],
+ "partOverrides": {
+ "front-pump-hydraulic-pump": {
+ "sceneId": "front-pump-hydraulic-pump",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "bridge-0916-node-92",
+ "nodePath": "0/46/0",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "sceneDeleted": false,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-power-take-off": {
+ "sceneId": "front-pump-power-take-off",
+ "interactionId": "front-pump-power-take-off",
+ "sourceInteractionId": "front-pump-power-take-off",
+ "editorId": "bridge-0916-node-80",
+ "nodePath": "0/40/0",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "sceneDeleted": false,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-pto-switch": {
+ "sceneId": "front-pump-pto-switch",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "sceneDeleted": false,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-ball-valve-switch": {
+ "sceneId": "front-pump-ball-valve-switch",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "bridge-0916-node-96",
+ "nodePath": "0/48/0",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "sceneDeleted": false,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-aux-control-box": {
+ "sceneId": "front-pump-aux-control-box",
+ "interactionId": "front-pump-aux-control-box",
+ "sourceInteractionId": "front-pump-aux-control-box",
+ "editorId": "bridge-0916-node-84",
+ "nodePath": "0/42/0",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "sceneDeleted": false,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-aux-control-box-cover": {
+ "sceneId": "front-pump-aux-control-box-cover",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "bridge-0916-node-78",
+ "nodePath": "0/39/0",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "sceneDeleted": false,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-rescue-switch": {
+ "sceneId": "front-pump-rescue-switch",
+ "interactionId": "front-pump-rescue-switch",
+ "sourceInteractionId": "front-pump-rescue-switch",
+ "editorId": "bridge-0916-node-86",
+ "nodePath": "0/43/0",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "sceneDeleted": false,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ }
+ },
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sourceNodeName": "Group",
+ "splitGroupId": "",
+ "visible": true,
+ "position": [
+ 1.5698558846140135e-16,
+ 0.00012730681329620186,
+ 0.13180482636746585
+ ],
+ "rotation": [
+ 3.0865583248298285e-17,
+ -3.96331642134641e-33,
+ -2.568113739801058e-16
+ ],
+ "scale": [
+ 0.9715696607300419,
+ 0.9715696607300419,
+ 0.9715696607300419
+ ],
+ "assetKey": "",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "sourceName": "0916架桥车.glb",
+ "sizeBytes": 37160920,
+ "mimeType": "model/gltf-binary",
+ "enclosureMode": "",
+ "assetCode": "PILOT-VEHICLE-0916",
+ "sourceAssetId": ""
+ }
+ ],
+ "ready": 0
+}
\ No newline at end of file
diff --git a/reports/bridge-005-authoring-20260916/scene-editor.png b/reports/bridge-005-authoring-20260916/scene-editor.png
new file mode 100644
index 0000000..ef9015c
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/scene-editor.png differ
diff --git a/reports/bridge-005-authoring-20260916/task-116-fullscreen.png b/reports/bridge-005-authoring-20260916/task-116-fullscreen.png
new file mode 100644
index 0000000..5ea1ff5
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/task-116-fullscreen.png differ
diff --git a/reports/bridge-005-authoring-20260916/task-116-initial.png b/reports/bridge-005-authoring-20260916/task-116-initial.png
new file mode 100644
index 0000000..62ead36
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/task-116-initial.png differ
diff --git a/reports/bridge-005-authoring-20260916/task-116-rescue-moving.png b/reports/bridge-005-authoring-20260916/task-116-rescue-moving.png
new file mode 100644
index 0000000..9892ad1
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/task-116-rescue-moving.png differ
diff --git a/reports/bridge-005-authoring-20260916/task-116-step-1.png b/reports/bridge-005-authoring-20260916/task-116-step-1.png
new file mode 100644
index 0000000..f38fe8b
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/task-116-step-1.png differ
diff --git a/reports/bridge-005-authoring-20260916/task-116-step-2.png b/reports/bridge-005-authoring-20260916/task-116-step-2.png
new file mode 100644
index 0000000..8f9768a
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/task-116-step-2.png differ
diff --git a/reports/bridge-005-authoring-20260916/task-116-step-3.png b/reports/bridge-005-authoring-20260916/task-116-step-3.png
new file mode 100644
index 0000000..b301d9d
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/task-116-step-3.png differ
diff --git a/reports/bridge-005-authoring-20260916/task-116-step-4.png b/reports/bridge-005-authoring-20260916/task-116-step-4.png
new file mode 100644
index 0000000..201cddf
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/task-116-step-4.png differ
diff --git a/reports/bridge-005-authoring-20260916/task-116-step-5.png b/reports/bridge-005-authoring-20260916/task-116-step-5.png
new file mode 100644
index 0000000..c146a4c
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/task-116-step-5.png differ
diff --git a/reports/bridge-005-authoring-20260916/task-116-translucent.png b/reports/bridge-005-authoring-20260916/task-116-translucent.png
new file mode 100644
index 0000000..692db14
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/task-116-translucent.png differ
diff --git a/reports/bridge-005-authoring-20260916/task-86-fullscreen.png b/reports/bridge-005-authoring-20260916/task-86-fullscreen.png
new file mode 100644
index 0000000..aa0876c
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/task-86-fullscreen.png differ
diff --git a/reports/bridge-005-authoring-20260916/task-86-initial.png b/reports/bridge-005-authoring-20260916/task-86-initial.png
new file mode 100644
index 0000000..468176b
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/task-86-initial.png differ
diff --git a/reports/bridge-005-authoring-20260916/task-86-rescue-moving.png b/reports/bridge-005-authoring-20260916/task-86-rescue-moving.png
new file mode 100644
index 0000000..483e4a4
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/task-86-rescue-moving.png differ
diff --git a/reports/bridge-005-authoring-20260916/task-86-step-1.png b/reports/bridge-005-authoring-20260916/task-86-step-1.png
new file mode 100644
index 0000000..0bdbec2
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/task-86-step-1.png differ
diff --git a/reports/bridge-005-authoring-20260916/task-86-step-2.png b/reports/bridge-005-authoring-20260916/task-86-step-2.png
new file mode 100644
index 0000000..b5f6409
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/task-86-step-2.png differ
diff --git a/reports/bridge-005-authoring-20260916/task-86-step-3.png b/reports/bridge-005-authoring-20260916/task-86-step-3.png
new file mode 100644
index 0000000..5a2e7c3
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/task-86-step-3.png differ
diff --git a/reports/bridge-005-authoring-20260916/task-86-step-4.png b/reports/bridge-005-authoring-20260916/task-86-step-4.png
new file mode 100644
index 0000000..76fc9e8
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/task-86-step-4.png differ
diff --git a/reports/bridge-005-authoring-20260916/task-86-step-5.png b/reports/bridge-005-authoring-20260916/task-86-step-5.png
new file mode 100644
index 0000000..94bdb2d
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/task-86-step-5.png differ
diff --git a/reports/bridge-005-authoring-20260916/task-86-translucent.png b/reports/bridge-005-authoring-20260916/task-86-translucent.png
new file mode 100644
index 0000000..a57ec4b
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/task-86-translucent.png differ
diff --git a/reports/bridge-005-authoring-20260916/task-87-initial.png b/reports/bridge-005-authoring-20260916/task-87-initial.png
new file mode 100644
index 0000000..28dc78c
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/task-87-initial.png differ
diff --git a/reports/bridge-005-authoring-20260916/task-88-initial.png b/reports/bridge-005-authoring-20260916/task-88-initial.png
new file mode 100644
index 0000000..b7e4cd6
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/task-88-initial.png differ
diff --git a/reports/bridge-005-authoring-20260916/task-89-initial.png b/reports/bridge-005-authoring-20260916/task-89-initial.png
new file mode 100644
index 0000000..053c38b
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/task-89-initial.png differ
diff --git a/reports/bridge-005-authoring-20260916/training-editor-roundtrip.json b/reports/bridge-005-authoring-20260916/training-editor-roundtrip.json
new file mode 100644
index 0000000..dfa657a
--- /dev/null
+++ b/reports/bridge-005-authoring-20260916/training-editor-roundtrip.json
@@ -0,0 +1,1676 @@
+{
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "id": "458",
+ "name": "005 液压泵应急切换(编排验证)",
+ "status": "draft",
+ "trainingMode": "virtual",
+ "modeConfig": {
+ "renderMode": "三维实时仿真",
+ "interactionMode": "三维操作、动画引导与规则自动判定",
+ "assistance": "演示、训练与模拟考试"
+ },
+ "resources": {
+ "models": [],
+ "animations": []
+ },
+ "task": {
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "code": "BRIDGE-005-AUTHORING-PILOT",
+ "title": "005 液压泵应急切换(编排验证)",
+ "categoryId": "minor-repair",
+ "category": "小修",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "image": "/models/step-model-front-pump-thumb.png",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ]
+ },
+ "scenario": {
+ "id": "hydraulic-fault-scenario",
+ "publishedSceneId": "457@551",
+ "publishedSceneVersion": "7",
+ "sceneResource": {
+ "sceneId": "457@551",
+ "sourceProjectId": "457",
+ "sourceVersionId": "551",
+ "version": "7",
+ "sourceKind": "published",
+ "status": "已发布",
+ "publishedAt": "2026-09-17T14:33:41.000Z",
+ "objectCount": 2,
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "7",
+ "presetId": "terrain-1",
+ "name": "005 液压泵应急切换(编排验证)",
+ "type": "outdoor",
+ "rendering": {
+ "schema": "edit3dv4.scene-rendering",
+ "version": "1.0",
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 34,
+ "far": 88
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.05,
+ "far": 800,
+ "position": [
+ 7.138234886169582,
+ 3.695554761077557,
+ 7.955160424286649
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ]
+ },
+ "lights": {
+ "hemisphere": {
+ "skyColor": 15594743,
+ "groundColor": 6910582,
+ "intensity": 1.45
+ },
+ "directional": {
+ "color": 16777215,
+ "intensity": 2,
+ "position": [
+ 12,
+ 18,
+ 10
+ ],
+ "castShadow": true,
+ "shadowMapSize": 2048,
+ "shadowBounds": 82
+ }
+ }
+ },
+ "environment": {
+ "schema": "edit3dv4.scene-environment",
+ "version": "1.0",
+ "presetId": "terrain-1",
+ "type": "outdoor",
+ "floorOnly": false,
+ "useModelFloor": true
+ },
+ "objects": [
+ {
+ "sceneId": "front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "deviceId": "front-pump-training-yard",
+ "modelId": "front-pump-field-terrain",
+ "semantic": "环境地形",
+ "assetRole": "environment",
+ "builtinAssetId": "front-pump-field-terrain",
+ "modelEditorAssetId": "",
+ "modelEditorModelId": "",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "partOverrides": {},
+ "interactionId": "scene:front-pump-training-yard",
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sourceNodeName": "",
+ "splitGroupId": "",
+ "visible": true,
+ "position": [
+ -3.1597256741842212,
+ 10.30528511389146,
+ -40.10715876774236
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1.7159231079037875,
+ 1.7159231079037875,
+ 1.7159231079037875
+ ],
+ "assetKey": "",
+ "resourceUrl": "/models/terrain-005-20260917.glb",
+ "sourceName": "terrain-005-20260917.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "enclosureMode": "",
+ "assetCode": "PILOT-TERRAIN-005",
+ "sourceAssetId": ""
+ },
+ {
+ "sceneId": "front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "deviceId": "front-pump-rescue-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "semantic": "实训装备",
+ "assetRole": "equipment",
+ "builtinAssetId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "bridge-erector-0916",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "sceneId": "front-pump-hydraulic-pump",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "bridge-0916-node-92",
+ "nodePath": "0/46/0",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-power-take-off",
+ "interactionId": "front-pump-power-take-off",
+ "sourceInteractionId": "front-pump-power-take-off",
+ "editorId": "bridge-0916-node-80",
+ "nodePath": "0/40/0",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-pto-switch",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-ball-valve-switch",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "bridge-0916-node-96",
+ "nodePath": "0/48/0",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-aux-control-box",
+ "interactionId": "front-pump-aux-control-box",
+ "sourceInteractionId": "front-pump-aux-control-box",
+ "editorId": "bridge-0916-node-84",
+ "nodePath": "0/42/0",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-aux-control-box-cover",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "bridge-0916-node-78",
+ "nodePath": "0/39/0",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-rescue-switch",
+ "interactionId": "front-pump-rescue-switch",
+ "sourceInteractionId": "front-pump-rescue-switch",
+ "editorId": "bridge-0916-node-86",
+ "nodePath": "0/43/0",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ }
+ ],
+ "partOverrides": {
+ "front-pump-hydraulic-pump": {
+ "sceneId": "front-pump-hydraulic-pump",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "bridge-0916-node-92",
+ "nodePath": "0/46/0",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "sceneDeleted": false,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-power-take-off": {
+ "sceneId": "front-pump-power-take-off",
+ "interactionId": "front-pump-power-take-off",
+ "sourceInteractionId": "front-pump-power-take-off",
+ "editorId": "bridge-0916-node-80",
+ "nodePath": "0/40/0",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "sceneDeleted": false,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-pto-switch": {
+ "sceneId": "front-pump-pto-switch",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "sceneDeleted": false,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-ball-valve-switch": {
+ "sceneId": "front-pump-ball-valve-switch",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "bridge-0916-node-96",
+ "nodePath": "0/48/0",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "sceneDeleted": false,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-aux-control-box": {
+ "sceneId": "front-pump-aux-control-box",
+ "interactionId": "front-pump-aux-control-box",
+ "sourceInteractionId": "front-pump-aux-control-box",
+ "editorId": "bridge-0916-node-84",
+ "nodePath": "0/42/0",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "sceneDeleted": false,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-aux-control-box-cover": {
+ "sceneId": "front-pump-aux-control-box-cover",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "bridge-0916-node-78",
+ "nodePath": "0/39/0",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "sceneDeleted": false,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-rescue-switch": {
+ "sceneId": "front-pump-rescue-switch",
+ "interactionId": "front-pump-rescue-switch",
+ "sourceInteractionId": "front-pump-rescue-switch",
+ "editorId": "bridge-0916-node-86",
+ "nodePath": "0/43/0",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "sceneDeleted": false,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ }
+ },
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sourceNodeName": "Group",
+ "splitGroupId": "",
+ "visible": true,
+ "position": [
+ 1.5698558846140135e-16,
+ 0.00012730681329620186,
+ 0.13180482636746585
+ ],
+ "rotation": [
+ 3.0865583248298285e-17,
+ -3.96331642134641e-33,
+ -2.568113739801058e-16
+ ],
+ "scale": [
+ 0.9715696607300419,
+ 0.9715696607300419,
+ 0.9715696607300419
+ ],
+ "assetKey": "",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "sourceName": "0916架桥车.glb",
+ "sizeBytes": 37160920,
+ "mimeType": "model/gltf-binary",
+ "enclosureMode": "",
+ "assetCode": "PILOT-VEHICLE-0916",
+ "sourceAssetId": ""
+ }
+ ]
+ },
+ "assetReferences": [
+ {
+ "assetKey": "",
+ "resourceUrl": "/models/terrain-005-20260917.glb",
+ "sourceName": "terrain-005-20260917.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "environment",
+ "builtinAssetId": "front-pump-field-terrain"
+ },
+ {
+ "assetKey": "",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "sourceName": "0916架桥车.glb",
+ "sizeBytes": 37160920,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "equipment",
+ "builtinAssetId": "front-pump-step-vehicle"
+ }
+ ]
+ },
+ "baseVisualKey": "diagnostic-bay",
+ "environmentName": "005 液压泵应急切换(编排验证)",
+ "sceneLayout": "2 个场景对象 · 设备与物模型绑定已继承",
+ "equipmentState": "压力不足 · 内泄待定位",
+ "environment": {
+ "type": "outdoor",
+ "mode": "external",
+ "sourceName": "005 液压泵应急切换(编排验证) · 场景发布包",
+ "resourceUrl": "/models/terrain-005-20260917.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "accent": "#e98a2f",
+ "background": 12178915,
+ "fog": 12178915,
+ "ground": 6450803,
+ "camera": {
+ "position": [
+ 9.6,
+ 6.2,
+ 12.3
+ ],
+ "target": [
+ -0.25,
+ 2.45,
+ 0
+ ]
+ },
+ "retainStoredParts": false,
+ "visibleParts": [
+ "front-pump-hydraulic-pump",
+ "front-pump-pto-switch",
+ "front-pump-ball-valve-switch",
+ "front-pump-aux-control-box-cover"
+ ],
+ "operableParts": [
+ "front-pump-hydraulic-pump",
+ "front-pump-pto-switch",
+ "front-pump-ball-valve-switch",
+ "front-pump-aux-control-box-cover"
+ ],
+ "sceneTags": [],
+ "sensorFeeds": [
+ {
+ "id": "STATE",
+ "label": "装备状态",
+ "value": "就绪",
+ "unit": "",
+ "state": "ok"
+ },
+ {
+ "id": "STEP",
+ "label": "流程节点",
+ "value": "1 / 8",
+ "unit": "",
+ "state": "ready"
+ },
+ {
+ "id": "RULE",
+ "label": "规则判定",
+ "value": "等待操作",
+ "unit": "",
+ "state": "ready"
+ }
+ ]
+ },
+ "tools": [
+ {
+ "id": "pressure-gauge",
+ "name": "数字压力表",
+ "purpose": "卸压确认与压力复测",
+ "thumbnailKey": "pressure-gauge",
+ "modelKind": "pressure-gauge",
+ "defaultScale": 1
+ },
+ {
+ "id": "leak-detector",
+ "name": "泄漏检测灯",
+ "purpose": "油管与密封外泄检查",
+ "thumbnailKey": "leak-detector",
+ "modelKind": "leak-detector",
+ "defaultScale": 1
+ },
+ {
+ "id": "leakage-tester",
+ "name": "内泄保压仪",
+ "purpose": "压力衰减诊断",
+ "thumbnailKey": "leakage-tester",
+ "modelKind": "leakage-tester",
+ "defaultScale": 1
+ },
+ {
+ "id": "hose-wrench",
+ "name": "油管扳手",
+ "purpose": "接头拆装",
+ "thumbnailKey": "hose-wrench",
+ "modelKind": "hose-wrench",
+ "defaultScale": 1
+ },
+ {
+ "id": "pin-puller",
+ "name": "液压拔销器",
+ "purpose": "销轴同轴分离",
+ "thumbnailKey": "pin-puller",
+ "modelKind": "pin-puller",
+ "defaultScale": 1
+ },
+ {
+ "id": "lifting-sling",
+ "name": "起吊带与平衡梁",
+ "purpose": "液压缸总成吊运",
+ "thumbnailKey": "lifting-sling",
+ "modelKind": "lifting-sling",
+ "defaultScale": 1
+ },
+ {
+ "id": "seal-kit",
+ "name": "密封拆装工具",
+ "purpose": "密封组件更换",
+ "thumbnailKey": "seal-kit",
+ "modelKind": "seal-kit",
+ "defaultScale": 1
+ },
+ {
+ "id": "torque-wrench",
+ "name": "数字扭矩扳手",
+ "purpose": "规范力矩紧固",
+ "thumbnailKey": "torque-wrench",
+ "modelKind": "torque-wrench",
+ "defaultScale": 1
+ },
+ {
+ "id": "checklist-terminal",
+ "name": "数字点检终端",
+ "purpose": "路线签到与清单确认",
+ "thumbnailKey": "checklist-terminal",
+ "modelKind": "checklist-terminal",
+ "defaultScale": 1
+ },
+ {
+ "id": "feeler-gauge",
+ "name": "间隙规",
+ "purpose": "销轴配合间隙测量",
+ "thumbnailKey": "feeler-gauge",
+ "modelKind": "feeler-gauge",
+ "defaultScale": 1
+ },
+ {
+ "id": "lock-tool",
+ "name": "锁止件拆装钳",
+ "purpose": "解除与恢复锁止件",
+ "thumbnailKey": "lock-tool",
+ "modelKind": "lock-tool",
+ "defaultScale": 1
+ },
+ {
+ "id": "alignment-tool",
+ "name": "同轴装配导向器",
+ "purpose": "反向复装校准",
+ "thumbnailKey": "alignment-tool",
+ "modelKind": "alignment-tool",
+ "defaultScale": 1
+ }
+ ],
+ "faults": [],
+ "steps": [
+ {
+ "id": "front-pump-step-01",
+ "stepCode": "front-pump-step-01",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-01",
+ "cameraPolicy": "exterior",
+ "physicalEventRule": {},
+ "allowedPositions": [],
+ "number": 1,
+ "title": "根据故障现象确定是哪一个液压泵发生故障",
+ "summary": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "targetId": "front-pump-hydraulic-pump",
+ "targetName": "液压泵",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "bridge-0916-node-92",
+ "nodePath": "0/46/0",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "guidance": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "warning": "",
+ "destination": "液压泵",
+ "success": "根据故障现象确定是哪一个液压泵发生故障",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-hydraulic-pump",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "identify",
+ "axisSpace": "world",
+ "highlightColor": "#e53935",
+ "steps": [
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-hydraulic-pump",
+ "targetNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ },
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "training-narration-4418",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationText": "第1步,确定故障液压泵。根据故障现象确定发生故障的液压泵。",
+ "narrationAssetCode": "PILOT-005-1-AUDIO",
+ "narrationVideoAssetCode": "PILOT-005-1-VIDEO",
+ "safetyAssetCode": "",
+ "narrationUrl": "asset://training-narration-4418",
+ "safetyText": "安全提示:请按规定顺序操作并远离危险区域。",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-02",
+ "stepCode": "front-pump-step-02",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-02",
+ "cameraPolicy": "exterior",
+ "physicalEventRule": {},
+ "allowedPositions": [],
+ "number": 2,
+ "title": "断开架桥车取力器",
+ "summary": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "guidance": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "断开架桥车取力器",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": -30,
+ "toleranceDegrees": 6,
+ "directionHint": "向断开方向摇动"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ },
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "training-narration-4420",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationText": "第2步,断开架桥车取力器。将架桥车取力器断开。",
+ "narrationAssetCode": "PILOT-005-2-AUDIO",
+ "narrationVideoAssetCode": "PILOT-005-2-VIDEO",
+ "safetyAssetCode": "",
+ "narrationUrl": "asset://training-narration-4420",
+ "safetyText": "安全提示:请确认压力归零并可靠支承后再进行拆卸。",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-03",
+ "stepCode": "front-pump-step-03",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-03",
+ "cameraPolicy": "focus",
+ "physicalEventRule": {},
+ "allowedPositions": [],
+ "number": 3,
+ "title": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "summary": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "targetId": "front-pump-ball-valve-switch",
+ "targetName": "球阀开关",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "bridge-0916-node-96",
+ "nodePath": "0/48/0",
+ "sourceNodeName": "1_26球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "guidance": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "warning": "",
+ "destination": "球阀开关",
+ "success": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-ball-valve-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "steps": [
+ {
+ "targetId": "front-pump-ball-valve-switch",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "由垂直与官道方向旋转至平行于管道方向"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-ball-valve-switch",
+ "targetNodeName": "1_26球阀开关",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ },
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "training-narration-4422",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationText": "第3步,打开互救球阀。打开备胎上方两个红色滤油器之间的连通球阀,手柄由垂直管道转为平行管道。",
+ "narrationAssetCode": "PILOT-005-3-AUDIO",
+ "narrationVideoAssetCode": "PILOT-005-3-VIDEO",
+ "safetyAssetCode": "",
+ "narrationUrl": "asset://training-narration-4422",
+ "safetyText": "安全提示:请按规定顺序操作并远离危险区域。",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-04",
+ "stepCode": "front-pump-step-04",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-04",
+ "cameraPolicy": "exterior",
+ "physicalEventRule": {},
+ "allowedPositions": [],
+ "number": 4,
+ "title": "重新联通取力器",
+ "summary": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "guidance": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "重新联通取力器",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "按步骤2的相反方向摇回去"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ },
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "training-narration-4424",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationText": "第4步,重新接通取力器。将架桥车取力器重新接通。",
+ "narrationAssetCode": "PILOT-005-4-AUDIO",
+ "narrationVideoAssetCode": "PILOT-005-4-VIDEO",
+ "safetyAssetCode": "",
+ "narrationUrl": "asset://training-narration-4424",
+ "safetyText": "安全提示:请按规定顺序操作并远离危险区域。",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-05",
+ "stepCode": "front-pump-step-05",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-05",
+ "cameraPolicy": "focus",
+ "physicalEventRule": {},
+ "allowedPositions": [],
+ "number": 5,
+ "title": "打开辅助控制盒内的“互救”开关",
+ "summary": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "targetId": "front-pump-aux-control-box-cover",
+ "targetName": "辅助控制盒盖",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "bridge-0916-node-78",
+ "nodePath": "0/39/0",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "guidance": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "warning": "",
+ "destination": "辅助控制盒盖",
+ "success": "打开辅助控制盒内的“互救”开关",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-aux-control-box-cover",
+ "mode": "inspect",
+ "durationMs": 1600,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "sequence",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-aux-control-box"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-aux-control-box-cover",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 100,
+ "toleranceDegrees": 8,
+ "directionHint": "沿控制盒盖边缘铰链打开",
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ }
+ },
+ {
+ "targetId": "front-pump-rescue-switch",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "往上搬"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-aux-control-box-cover",
+ "targetNodeName": "1_28辅助控制盒盖",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ },
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "training-narration-4426",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationText": "第5步,打开辅助控制盒互救开关。打开辅助控制盒盖,再打开互救开关,进入单泵作业状态。",
+ "narrationAssetCode": "PILOT-005-5-AUDIO",
+ "narrationVideoAssetCode": "PILOT-005-5-VIDEO",
+ "safetyAssetCode": "",
+ "narrationUrl": "asset://training-narration-4426",
+ "safetyText": "安全提示:请确认压力归零并可靠支承后再进行拆卸。",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ }
+ ],
+ "authoring": {
+ "schema": "digital-workshop.training-authoring",
+ "version": 1,
+ "nodes": [
+ {
+ "id": "flow-start",
+ "type": "start",
+ "title": "训练开始",
+ "x": 32,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-01",
+ "type": "step",
+ "title": "根据故障现象确定是哪一个液压泵发生故障",
+ "stepId": "front-pump-step-01",
+ "x": 240,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-02",
+ "type": "step",
+ "title": "断开架桥车取力器",
+ "stepId": "front-pump-step-02",
+ "x": 500,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-03",
+ "type": "step",
+ "title": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "stepId": "front-pump-step-03",
+ "x": 760,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-04",
+ "type": "step",
+ "title": "重新联通取力器",
+ "stepId": "front-pump-step-04",
+ "x": 240,
+ "y": 270,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-05",
+ "type": "step",
+ "title": "打开辅助控制盒内的“互救”开关",
+ "stepId": "front-pump-step-05",
+ "x": 500,
+ "y": 270,
+ "config": {}
+ },
+ {
+ "id": "flow-end",
+ "type": "end",
+ "title": "训练结束",
+ "x": 760,
+ "y": 270,
+ "config": {}
+ }
+ ],
+ "edges": [
+ {
+ "id": "edge:flow-start:step-node:front-pump-step-01",
+ "from": "flow-start",
+ "to": "step-node:front-pump-step-01",
+ "label": "",
+ "kind": "base-sequence"
+ },
+ {
+ "id": "edge:step-node:front-pump-step-01:step-node:front-pump-step-02",
+ "from": "step-node:front-pump-step-01",
+ "to": "step-node:front-pump-step-02",
+ "label": "",
+ "kind": "base-sequence"
+ },
+ {
+ "id": "edge:step-node:front-pump-step-02:step-node:front-pump-step-03",
+ "from": "step-node:front-pump-step-02",
+ "to": "step-node:front-pump-step-03",
+ "label": "",
+ "kind": "base-sequence"
+ },
+ {
+ "id": "edge:step-node:front-pump-step-03:step-node:front-pump-step-04",
+ "from": "step-node:front-pump-step-03",
+ "to": "step-node:front-pump-step-04",
+ "label": "",
+ "kind": "base-sequence"
+ },
+ {
+ "id": "edge:step-node:front-pump-step-04:step-node:front-pump-step-05",
+ "from": "step-node:front-pump-step-04",
+ "to": "step-node:front-pump-step-05",
+ "label": "",
+ "kind": "base-sequence"
+ },
+ {
+ "id": "edge:step-node:front-pump-step-05:flow-end",
+ "from": "step-node:front-pump-step-05",
+ "to": "flow-end",
+ "label": "",
+ "kind": "base-sequence"
+ }
+ ],
+ "timeline": {
+ "currentTime": 0,
+ "tracks": {
+ "front-pump-step-01": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audio": "asset://training-narration-4418",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-02": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audio": "asset://training-narration-4420",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-03": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audio": "asset://training-narration-4422",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-04": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audio": "asset://training-narration-4424",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-05": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audio": "asset://training-narration-4426",
+ "animationAssetId": "",
+ "animationName": ""
+ }
+ }
+ },
+ "updatedAt": "2026-09-17T14:33:45.403Z"
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN"
+ },
+ "createdAt": "2026-09-16T13:50:27.000Z",
+ "updatedAt": "2026-09-17T14:33:43.867Z",
+ "publishedAt": ""
+}
\ No newline at end of file
diff --git a/reports/bridge-005-authoring-20260916/training-editor.png b/reports/bridge-005-authoring-20260916/training-editor.png
new file mode 100644
index 0000000..9c36a81
Binary files /dev/null and b/reports/bridge-005-authoring-20260916/training-editor.png differ
diff --git a/reports/bridge-005-new-model-20260917/audit.json b/reports/bridge-005-new-model-20260917/audit.json
new file mode 100644
index 0000000..b0911f5
--- /dev/null
+++ b/reports/bridge-005-new-model-20260917/audit.json
@@ -0,0 +1,173 @@
+{
+ "pass": true,
+ "time": "2026-09-17T14:35:31.975Z",
+ "fixture": {
+ "sceneId": "457",
+ "sceneVersionId": "551",
+ "trainingId": "458",
+ "mediaUploaded": true,
+ "trainingVersionId": "552",
+ "taskId": "116",
+ "taskStatus": "DRAFT",
+ "previewUrl": "/teaching/virtual-training/preview/116"
+ },
+ "model": "/models/bridge-erector-20260916.glb",
+ "sha256": "5993a52f55cf981fd7cb6113e346ff3c6b1f434bbd84f18232ab5af494d9ddca",
+ "targets": [
+ {
+ "sceneId": "front-pump-hydraulic-pump",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "bridge-0916-node-92",
+ "nodePath": "0/46/0",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-power-take-off",
+ "interactionId": "front-pump-power-take-off",
+ "sourceInteractionId": "front-pump-power-take-off",
+ "editorId": "bridge-0916-node-80",
+ "nodePath": "0/40/0",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-pto-switch",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-ball-valve-switch",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "bridge-0916-node-96",
+ "nodePath": "0/48/0",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-aux-control-box",
+ "interactionId": "front-pump-aux-control-box",
+ "sourceInteractionId": "front-pump-aux-control-box",
+ "editorId": "bridge-0916-node-84",
+ "nodePath": "0/42/0",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-aux-control-box-cover",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "bridge-0916-node-78",
+ "nodePath": "0/39/0",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-rescue-switch",
+ "interactionId": "front-pump-rescue-switch",
+ "sourceInteractionId": "front-pump-rescue-switch",
+ "editorId": "bridge-0916-node-86",
+ "nodePath": "0/43/0",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ }
+ ],
+ "originals": [
+ {
+ "id": "86",
+ "code": "TASK-VIRTUAL-005",
+ "versionId": "533",
+ "unchanged": true
+ },
+ {
+ "id": "87",
+ "code": "TASK-VIRTUAL-006",
+ "versionId": "534",
+ "unchanged": true
+ },
+ {
+ "id": "88",
+ "code": "TASK-VIRTUAL-007",
+ "versionId": "535",
+ "unchanged": true
+ },
+ {
+ "id": "89",
+ "code": "TASK-VIRTUAL-008",
+ "versionId": "536",
+ "unchanged": true
+ }
+ ],
+ "grounding": {
+ "samples": 446,
+ "minGap": 3.3306690738754696e-16,
+ "maxGap": 0.001553249851667493
+ },
+ "media": {
+ "width": 480,
+ "height": 640,
+ "duration": 4.96,
+ "currentTime": 0.012008
+ },
+ "steps": 5,
+ "operations": 6
+}
\ No newline at end of file
diff --git a/reports/bridge-005-new-model-20260917/before-116.json b/reports/bridge-005-new-model-20260917/before-116.json
new file mode 100644
index 0000000..b14baff
--- /dev/null
+++ b/reports/bridge-005-new-model-20260917/before-116.json
@@ -0,0 +1,2318 @@
+{
+ "id": "116",
+ "code": "BRIDGE-005-AUTHORING-PILOT",
+ "name": "005 液压泵应急切换(编排验证)",
+ "description": "独立编排验证,不替换现有005",
+ "channel": "VIRTUAL",
+ "assignmentKind": "TRAINING",
+ "executionMode": "PRACTICE",
+ "audienceType": "COMMON",
+ "collaborationMode": "INDIVIDUAL",
+ "digitalHumanAllowed": false,
+ "digitalInstructorAgentSlug": "",
+ "digitalInstructorAgentName": "",
+ "digitalInstructorKnowledgeSource": "AGENT",
+ "contentProjectId": "458",
+ "contentVersionId": "546",
+ "definitionSnapshot": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "trainingMode": "VIRTUAL",
+ "enabledChannels": [
+ "VIRTUAL"
+ ],
+ "channelProfiles": {
+ "VIRTUAL": {
+ "type": "VIRTUAL",
+ "renderMode": "三维实时仿真",
+ "interactionMode": "三维操作、动画引导与规则自动判定",
+ "assistance": "演示、训练与模拟考试"
+ }
+ },
+ "level": "标准",
+ "durationMinutes": 10,
+ "totalScore": 100,
+ "objectives": [],
+ "steps": [
+ {
+ "id": "front-pump-step-01",
+ "stepCode": "front-pump-step-01",
+ "order": 1,
+ "title": "根据故障现象确定是哪一个液压泵发生故障",
+ "summary": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-01",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-hydraulic-pump",
+ "targetName": "液压泵",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "guidance": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "warning": "",
+ "destination": "液压泵",
+ "success": "根据故障现象确定是哪一个液压泵发生故障",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-hydraulic-pump",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "identify",
+ "axisSpace": "world",
+ "highlightColor": "#e53935",
+ "steps": [
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第1步,确定故障液压泵。根据故障现象确定发生故障的液压泵。",
+ "narrationAssetCode": "PILOT-005-1-AUDIO",
+ "safetyText": "安全提示:请按规定顺序操作并远离危险区域。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-1-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "exterior",
+ "number": 1,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "model-front-pump-step-vehicle-41",
+ "nodePath": "0/6/0",
+ "sourceNodeName": "1液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-hydraulic-pump",
+ "targetNodeName": "1液压泵",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-02",
+ "stepCode": "front-pump-step-02",
+ "order": 2,
+ "title": "断开架桥车取力器",
+ "summary": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-02",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "guidance": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "断开架桥车取力器",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": -30,
+ "toleranceDegrees": 6,
+ "directionHint": "向断开方向摇动"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第2步,断开架桥车取力器。将架桥车取力器断开。",
+ "narrationAssetCode": "PILOT-005-2-AUDIO",
+ "safetyText": "安全提示:请确认压力归零并可靠支承后再进行拆卸。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-2-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "exterior",
+ "number": 2,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "model-front-pump-step-vehicle-26",
+ "nodePath": "0/3/0",
+ "sourceNodeName": "2取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "2取力器开关",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-03",
+ "stepCode": "front-pump-step-03",
+ "order": 3,
+ "title": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "summary": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-03",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-ball-valve-switch",
+ "targetName": "球阀开关",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "guidance": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "warning": "",
+ "destination": "球阀开关",
+ "success": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-ball-valve-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "steps": [
+ {
+ "targetId": "front-pump-ball-valve-switch",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "由垂直与官道方向旋转至平行于管道方向"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第3步,打开互救球阀。打开备胎上方两个红色滤油器之间的连通球阀,手柄由垂直管道转为平行管道。",
+ "narrationAssetCode": "PILOT-005-3-AUDIO",
+ "safetyText": "安全提示:请按规定顺序操作并远离危险区域。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-3-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "focus",
+ "number": 3,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "model-front-pump-step-vehicle-53",
+ "nodePath": "0/12/0",
+ "sourceNodeName": "3球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-ball-valve-switch",
+ "targetNodeName": "3球阀开关",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-04",
+ "stepCode": "front-pump-step-04",
+ "order": 4,
+ "title": "重新联通取力器",
+ "summary": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-04",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "guidance": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "重新联通取力器",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "按步骤2的相反方向摇回去"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第4步,重新接通取力器。将架桥车取力器重新接通。",
+ "narrationAssetCode": "PILOT-005-4-AUDIO",
+ "safetyText": "安全提示:请按规定顺序操作并远离危险区域。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-4-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "exterior",
+ "number": 4,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "model-front-pump-step-vehicle-26",
+ "nodePath": "0/3/0",
+ "sourceNodeName": "2取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "2取力器开关",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-05",
+ "stepCode": "front-pump-step-05",
+ "order": 5,
+ "title": "打开辅助控制盒内的“互救”开关",
+ "summary": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-05",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-aux-control-box-cover",
+ "targetName": "辅助控制盒盖",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "guidance": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "warning": "",
+ "destination": "辅助控制盒盖",
+ "success": "打开辅助控制盒内的“互救”开关",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-aux-control-box-cover",
+ "mode": "inspect",
+ "durationMs": 1600,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "sequence",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-aux-control-box"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-aux-control-box-cover",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 100,
+ "toleranceDegrees": 8,
+ "directionHint": "沿控制盒盖边缘铰链打开",
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ }
+ },
+ {
+ "targetId": "front-pump-rescue-switch",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "往上搬"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第5步,打开辅助控制盒互救开关。打开辅助控制盒盖,再打开互救开关,进入单泵作业状态。",
+ "narrationAssetCode": "PILOT-005-5-AUDIO",
+ "safetyText": "安全提示:请确认压力归零并可靠支承后再进行拆卸。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-5-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "focus",
+ "number": 5,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "model-front-pump-step-vehicle-20",
+ "nodePath": "0/1/0",
+ "sourceNodeName": "5辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-aux-control-box-cover",
+ "targetNodeName": "5辅助控制盒盖",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ }
+ ],
+ "modeConfig": {
+ "type": "VIRTUAL",
+ "renderMode": "三维实时仿真",
+ "interactionMode": "三维操作、动画引导与规则自动判定",
+ "assistance": "演示、训练与模拟考试"
+ },
+ "task": {
+ "code": "BRIDGE-005-AUTHORING-PILOT",
+ "title": "005 液压泵应急切换(编排验证)",
+ "category": "小修",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ],
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "categoryId": "minor-repair",
+ "image": "/models/step-model-front-pump-thumb.png"
+ },
+ "scenario": {
+ "environmentName": "室外综合训练场",
+ "sceneLayout": "3 个场景对象 · 设备与物模型绑定已继承",
+ "equipmentState": "压力不足 · 内泄待定位",
+ "sceneTags": [],
+ "visibleParts": [
+ "front-pump-hydraulic-pump",
+ "front-pump-pto-switch",
+ "front-pump-ball-valve-switch",
+ "front-pump-aux-control-box-cover"
+ ],
+ "operableParts": [
+ "front-pump-hydraulic-pump",
+ "front-pump-pto-switch",
+ "front-pump-ball-valve-switch",
+ "front-pump-aux-control-box-cover"
+ ],
+ "sensorFeeds": [
+ {
+ "id": "STATE",
+ "label": "装备状态",
+ "value": "就绪",
+ "unit": "",
+ "state": "ok"
+ },
+ {
+ "id": "STEP",
+ "label": "流程节点",
+ "value": "1 / 8",
+ "unit": "",
+ "state": "ready"
+ },
+ {
+ "id": "RULE",
+ "label": "规则判定",
+ "value": "等待操作",
+ "unit": "",
+ "state": "ready"
+ }
+ ],
+ "id": "hydraulic-fault-scenario",
+ "publishedSceneId": "457@544",
+ "publishedSceneVersion": "4",
+ "sceneResource": {
+ "sceneId": "457@544",
+ "sourceProjectId": "457",
+ "sourceVersionId": "544",
+ "version": "4",
+ "sourceKind": "published",
+ "status": "已发布",
+ "publishedAt": "2026-09-16T14:09:09.000Z",
+ "objectCount": 3,
+ "assetKey": "",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "name": "005 液压泵应急切换(编排验证)",
+ "environment": {
+ "schema": "edit3dv4.scene-environment",
+ "version": "1.0",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "floorOnly": false,
+ "useModelFloor": false
+ },
+ "objects": [
+ {
+ "id": "ENV-outdoor-1",
+ "sceneId": "ENV-outdoor-1",
+ "interactionId": "scene:ENV-outdoor-1",
+ "type": "scene-environment",
+ "name": "室外基础环境",
+ "deviceId": "",
+ "modelId": "",
+ "semantic": "环境设施",
+ "assetRole": "environment-base",
+ "builtinAssetId": "outdoor-1",
+ "modelEditorAssetId": "",
+ "modelEditorModelId": "",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "partOverrides": {},
+ "operable": false,
+ "capabilities": [],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "",
+ "assetKey": "",
+ "resourceUrl": "",
+ "sourceName": "",
+ "sizeBytes": 0,
+ "mimeType": "",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "environmentDescriptor": {
+ "schema": "edit3dv4.scene-environment",
+ "version": "1.0",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "floorOnly": false,
+ "useModelFloor": false
+ },
+ "visible": true,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "deviceId": "front-pump-training-yard",
+ "modelId": "front-pump-field-terrain",
+ "semantic": "环境地形",
+ "assetRole": "environment",
+ "builtinAssetId": "front-pump-field-terrain",
+ "modelEditorAssetId": "",
+ "modelEditorModelId": "",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "partOverrides": {},
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "",
+ "assetKey": "",
+ "resourceUrl": "/models/地形.glb",
+ "sourceName": "地形.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ -3.1597256741842212,
+ 10.30528511389146,
+ -40.10715876774236
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1.7159231079037875,
+ 1.7159231079037875,
+ 1.7159231079037875
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "deviceId": "front-pump-rescue-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "semantic": "实训装备",
+ "assetRole": "equipment",
+ "builtinAssetId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "content-scene-BRIDGE-005-AUTHORING-PILOT-SCENE-front-pump-rescue-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "sceneId": "front-pump-hydraulic-pump",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "model-front-pump-step-vehicle-41",
+ "nodePath": "0/6/0",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-power-take-off",
+ "interactionId": "front-pump-power-take-off",
+ "sourceInteractionId": "front-pump-power-take-off",
+ "editorId": "model-front-pump-step-vehicle-22",
+ "nodePath": "0/2/0",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-pto-switch",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "model-front-pump-step-vehicle-26",
+ "nodePath": "0/3/0",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-ball-valve-switch",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "model-front-pump-step-vehicle-53",
+ "nodePath": "0/12/0",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box",
+ "interactionId": "front-pump-aux-control-box",
+ "sourceInteractionId": "front-pump-aux-control-box",
+ "editorId": "model-front-pump-step-vehicle-32",
+ "nodePath": "0/5/0",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box-cover",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "model-front-pump-step-vehicle-20",
+ "nodePath": "0/1/0",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-rescue-switch",
+ "interactionId": "front-pump-rescue-switch",
+ "sourceInteractionId": "front-pump-rescue-switch",
+ "editorId": "model-front-pump-step-vehicle-30",
+ "nodePath": "0/4/0",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ],
+ "partOverrides": {
+ "front-pump-hydraulic-pump": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-power-take-off": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-pto-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-ball-valve-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-aux-control-box": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-aux-control-box-cover": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-rescue-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ }
+ },
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "Group",
+ "assetKey": "",
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ 1.5698558846140135e-16,
+ 0.6112875194820317,
+ 0.13180482636746585
+ ],
+ "rotation": [
+ 3.0865583248298285e-17,
+ -3.96331642134641e-33,
+ -2.568113739801058e-16
+ ],
+ "scale": [
+ 0.9715696607300419,
+ 0.9715696607300419,
+ 0.9715696607300419
+ ]
+ }
+ ],
+ "assetReferences": [
+ {
+ "assetKey": "",
+ "resourceUrl": "/models/地形.glb",
+ "sourceName": "地形.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "environment",
+ "builtinAssetId": "front-pump-field-terrain"
+ },
+ {
+ "assetKey": "",
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "equipment",
+ "builtinAssetId": "front-pump-step-vehicle"
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "4",
+ "presetId": "outdoor-1",
+ "name": "室外综合训练场",
+ "type": "outdoor",
+ "assetKey": "",
+ "environment": {
+ "schema": "edit3dv4.scene-environment",
+ "version": "1.0",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "floorOnly": false,
+ "useModelFloor": false
+ },
+ "rendering": {
+ "schema": "edit3dv4.scene-rendering",
+ "version": "1.0",
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 34,
+ "far": 88
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.05,
+ "far": 800,
+ "position": [
+ 7.138234886169582,
+ 3.695554761077557,
+ 7.955160424286649
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ]
+ },
+ "lights": {
+ "hemisphere": {
+ "skyColor": 15594743,
+ "groundColor": 6910582,
+ "intensity": 1.45
+ },
+ "directional": {
+ "color": 16777215,
+ "intensity": 2,
+ "position": [
+ 12,
+ 18,
+ 10
+ ],
+ "castShadow": true,
+ "shadowMapSize": 2048,
+ "shadowBounds": 82
+ }
+ }
+ },
+ "objects": [
+ {
+ "id": "ENV-outdoor-1",
+ "sceneId": "ENV-outdoor-1",
+ "interactionId": "scene:ENV-outdoor-1",
+ "type": "scene-environment",
+ "name": "室外基础环境",
+ "deviceId": "",
+ "modelId": "",
+ "semantic": "环境设施",
+ "assetRole": "environment-base",
+ "builtinAssetId": "outdoor-1",
+ "modelEditorAssetId": "",
+ "modelEditorModelId": "",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "partOverrides": {},
+ "operable": false,
+ "capabilities": [],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "",
+ "assetKey": "",
+ "resourceUrl": "",
+ "sourceName": "",
+ "sizeBytes": 0,
+ "mimeType": "",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "environmentDescriptor": {
+ "schema": "edit3dv4.scene-environment",
+ "version": "1.0",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "floorOnly": false,
+ "useModelFloor": false
+ },
+ "visible": true,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "deviceId": "front-pump-training-yard",
+ "modelId": "front-pump-field-terrain",
+ "semantic": "环境地形",
+ "assetRole": "environment",
+ "builtinAssetId": "front-pump-field-terrain",
+ "modelEditorAssetId": "",
+ "modelEditorModelId": "",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "partOverrides": {},
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "",
+ "assetKey": "",
+ "resourceUrl": "/models/地形.glb",
+ "sourceName": "地形.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ -3.1597256741842212,
+ 10.30528511389146,
+ -40.10715876774236
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1.7159231079037875,
+ 1.7159231079037875,
+ 1.7159231079037875
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "deviceId": "front-pump-rescue-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "semantic": "实训装备",
+ "assetRole": "equipment",
+ "builtinAssetId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "content-scene-BRIDGE-005-AUTHORING-PILOT-SCENE-front-pump-rescue-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "sceneId": "front-pump-hydraulic-pump",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "model-front-pump-step-vehicle-41",
+ "nodePath": "0/6/0",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-power-take-off",
+ "interactionId": "front-pump-power-take-off",
+ "sourceInteractionId": "front-pump-power-take-off",
+ "editorId": "model-front-pump-step-vehicle-22",
+ "nodePath": "0/2/0",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-pto-switch",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "model-front-pump-step-vehicle-26",
+ "nodePath": "0/3/0",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-ball-valve-switch",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "model-front-pump-step-vehicle-53",
+ "nodePath": "0/12/0",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box",
+ "interactionId": "front-pump-aux-control-box",
+ "sourceInteractionId": "front-pump-aux-control-box",
+ "editorId": "model-front-pump-step-vehicle-32",
+ "nodePath": "0/5/0",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box-cover",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "model-front-pump-step-vehicle-20",
+ "nodePath": "0/1/0",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-rescue-switch",
+ "interactionId": "front-pump-rescue-switch",
+ "sourceInteractionId": "front-pump-rescue-switch",
+ "editorId": "model-front-pump-step-vehicle-30",
+ "nodePath": "0/4/0",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ],
+ "partOverrides": {
+ "front-pump-hydraulic-pump": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-power-take-off": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-pto-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-ball-valve-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-aux-control-box": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-aux-control-box-cover": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-rescue-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ }
+ },
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "Group",
+ "assetKey": "",
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ 1.5698558846140135e-16,
+ 0.6112875194820317,
+ 0.13180482636746585
+ ],
+ "rotation": [
+ 3.0865583248298285e-17,
+ -3.96331642134641e-33,
+ -2.568113739801058e-16
+ ],
+ "scale": [
+ 0.9715696607300419,
+ 0.9715696607300419,
+ 0.9715696607300419
+ ]
+ }
+ ]
+ }
+ },
+ "baseVisualKey": "diagnostic-bay",
+ "environment": {
+ "type": "outdoor",
+ "mode": "external",
+ "sourceName": "005 液压泵应急切换(编排验证) · 场景发布包",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "accent": "#e98a2f",
+ "background": 12178915,
+ "fog": 12178915,
+ "ground": 6450803,
+ "camera": {
+ "position": [
+ 9.6,
+ 6.2,
+ 12.3
+ ],
+ "target": [
+ -0.25,
+ 2.45,
+ 0
+ ]
+ },
+ "retainStoredParts": false
+ },
+ "tools": [
+ {
+ "id": "pressure-gauge",
+ "name": "数字压力表",
+ "purpose": "卸压确认与压力复测",
+ "thumbnailKey": "pressure-gauge",
+ "modelKind": "pressure-gauge",
+ "defaultScale": 1
+ },
+ {
+ "id": "leak-detector",
+ "name": "泄漏检测灯",
+ "purpose": "油管与密封外泄检查",
+ "thumbnailKey": "leak-detector",
+ "modelKind": "leak-detector",
+ "defaultScale": 1
+ },
+ {
+ "id": "leakage-tester",
+ "name": "内泄保压仪",
+ "purpose": "压力衰减诊断",
+ "thumbnailKey": "leakage-tester",
+ "modelKind": "leakage-tester",
+ "defaultScale": 1
+ },
+ {
+ "id": "hose-wrench",
+ "name": "油管扳手",
+ "purpose": "接头拆装",
+ "thumbnailKey": "hose-wrench",
+ "modelKind": "hose-wrench",
+ "defaultScale": 1
+ },
+ {
+ "id": "pin-puller",
+ "name": "液压拔销器",
+ "purpose": "销轴同轴分离",
+ "thumbnailKey": "pin-puller",
+ "modelKind": "pin-puller",
+ "defaultScale": 1
+ },
+ {
+ "id": "lifting-sling",
+ "name": "起吊带与平衡梁",
+ "purpose": "液压缸总成吊运",
+ "thumbnailKey": "lifting-sling",
+ "modelKind": "lifting-sling",
+ "defaultScale": 1
+ },
+ {
+ "id": "seal-kit",
+ "name": "密封拆装工具",
+ "purpose": "密封组件更换",
+ "thumbnailKey": "seal-kit",
+ "modelKind": "seal-kit",
+ "defaultScale": 1
+ },
+ {
+ "id": "torque-wrench",
+ "name": "数字扭矩扳手",
+ "purpose": "规范力矩紧固",
+ "thumbnailKey": "torque-wrench",
+ "modelKind": "torque-wrench",
+ "defaultScale": 1
+ },
+ {
+ "id": "checklist-terminal",
+ "name": "数字点检终端",
+ "purpose": "路线签到与清单确认",
+ "thumbnailKey": "checklist-terminal",
+ "modelKind": "checklist-terminal",
+ "defaultScale": 1
+ },
+ {
+ "id": "feeler-gauge",
+ "name": "间隙规",
+ "purpose": "销轴配合间隙测量",
+ "thumbnailKey": "feeler-gauge",
+ "modelKind": "feeler-gauge",
+ "defaultScale": 1
+ },
+ {
+ "id": "lock-tool",
+ "name": "锁止件拆装钳",
+ "purpose": "解除与恢复锁止件",
+ "thumbnailKey": "lock-tool",
+ "modelKind": "lock-tool",
+ "defaultScale": 1
+ },
+ {
+ "id": "alignment-tool",
+ "name": "同轴装配导向器",
+ "purpose": "反向复装校准",
+ "thumbnailKey": "alignment-tool",
+ "modelKind": "alignment-tool",
+ "defaultScale": 1
+ }
+ ],
+ "faults": [],
+ "authoring": {
+ "schema": "unreal-tran.training-authoring/v1",
+ "version": 1,
+ "nodes": [
+ {
+ "id": "flow-start",
+ "type": "start",
+ "title": "训练开始",
+ "x": 32,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-01",
+ "type": "step",
+ "title": "根据故障现象确定是哪一个液压泵发生故障",
+ "stepId": "front-pump-step-01",
+ "x": 240,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-02",
+ "type": "step",
+ "title": "断开架桥车取力器",
+ "stepId": "front-pump-step-02",
+ "x": 500,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-03",
+ "type": "step",
+ "title": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "stepId": "front-pump-step-03",
+ "x": 760,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-04",
+ "type": "step",
+ "title": "重新联通取力器",
+ "stepId": "front-pump-step-04",
+ "x": 240,
+ "y": 270,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-05",
+ "type": "step",
+ "title": "打开辅助控制盒内的“互救”开关",
+ "stepId": "front-pump-step-05",
+ "x": 500,
+ "y": 270,
+ "config": {}
+ },
+ {
+ "id": "flow-end",
+ "type": "end",
+ "title": "训练结束",
+ "x": 760,
+ "y": 270,
+ "config": {}
+ }
+ ],
+ "edges": [
+ {
+ "id": "edge:flow-start:step-node:front-pump-step-01",
+ "from": "flow-start",
+ "to": "step-node:front-pump-step-01",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-01:step-node:front-pump-step-02",
+ "from": "step-node:front-pump-step-01",
+ "to": "step-node:front-pump-step-02",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-02:step-node:front-pump-step-03",
+ "from": "step-node:front-pump-step-02",
+ "to": "step-node:front-pump-step-03",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-03:step-node:front-pump-step-04",
+ "from": "step-node:front-pump-step-03",
+ "to": "step-node:front-pump-step-04",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-04:step-node:front-pump-step-05",
+ "from": "step-node:front-pump-step-04",
+ "to": "step-node:front-pump-step-05",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-05:flow-end",
+ "from": "step-node:front-pump-step-05",
+ "to": "flow-end",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ }
+ ],
+ "timeline": {
+ "currentTime": 0,
+ "tracks": {
+ "front-pump-step-01": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-1-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-02": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-2-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-03": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-3-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-04": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-4-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-05": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-5-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ }
+ }
+ }
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN"
+ },
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥液压泵应急切换",
+ "status": "published",
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/4.jpg",
+ "resources": {
+ "models": [],
+ "animations": []
+ },
+ "legacyBridge": {
+ "schema": "unreal-tran.training-legacy-bridge/v1",
+ "uris": [],
+ "tracks": {
+ "front-pump-step-01": {
+ "audio": ""
+ },
+ "front-pump-step-02": {
+ "audio": ""
+ },
+ "front-pump-step-03": {
+ "audio": ""
+ },
+ "front-pump-step-04": {
+ "audio": ""
+ },
+ "front-pump-step-05": {
+ "audio": ""
+ }
+ }
+ },
+ "teachingScene": {
+ "version": "1.5",
+ "schema": "edit3dv4.scene",
+ "sourceVersionId": "544",
+ "name": "室外综合训练场",
+ "sceneType": "OUTDOOR",
+ "sourceProjectId": "457",
+ "objects": [
+ {
+ "sourceVersionId": "544",
+ "name": "室外基础环境",
+ "semantic": "环境设施",
+ "id": "scene-object-1",
+ "visible": true,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "type": "scene-environment"
+ },
+ {
+ "semantic": "环境地形",
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "position": [
+ -3.1597256741842212,
+ 10.30528511389146,
+ -40.10715876774236
+ ],
+ "scale": [
+ 1.7159231079037875,
+ 1.7159231079037875,
+ 1.7159231079037875
+ ],
+ "contentUri": "/models/地形.glb",
+ "mimeType": "model/gltf-binary",
+ "visible": true,
+ "sourceVersionId": "544",
+ "assetCode": "PILOT-TERRAIN",
+ "sourceName": "地形.glb",
+ "sourceNodeName": "",
+ "name": "野外山地训练场",
+ "id": "scene-object-2",
+ "type": "imported",
+ "splitGroupId": ""
+ },
+ {
+ "semantic": "实训装备",
+ "rotation": [
+ 3.0865583248298285e-17,
+ -3.96331642134641e-33,
+ -2.568113739801058e-16
+ ],
+ "position": [
+ 1.5698558846140135e-16,
+ 0.6112875194820317,
+ 0.13180482636746585
+ ],
+ "scale": [
+ 0.9715696607300419,
+ 0.9715696607300419,
+ 0.9715696607300419
+ ],
+ "contentUri": "/models/步骤模型.glb",
+ "mimeType": "model/gltf-binary",
+ "visible": true,
+ "sourceVersionId": "544",
+ "assetCode": "PILOT-VEHICLE",
+ "sourceName": "步骤模型.glb",
+ "sourceNodeName": "Group",
+ "name": "架桥车前泵互救操作整车模型",
+ "id": "scene-object-3",
+ "type": "imported",
+ "splitGroupId": ""
+ }
+ ],
+ "templateRevision": 1,
+ "rendering": {
+ "background": 11062241
+ }
+ }
+ },
+ "definitionChecksum": "5025bc2e44e154dc850b3d839c1e2c02ad04adef5ab8d9e288377ee8ebca51d0",
+ "ownerUserId": "99",
+ "ownerUsername": "root",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "departmentName": "",
+ "status": "DRAFT",
+ "scheduleStartAt": null,
+ "dueAt": null,
+ "publishedAt": null,
+ "withdrawnAt": null,
+ "archivedAt": null,
+ "lifecycleReason": "",
+ "version": 4,
+ "addTime": 1789566632,
+ "updateTime": "2026-09-16T21:50:33",
+ "serverNow": 1789655247,
+ "members": [],
+ "runCount": 0,
+ "pendingReviewCount": 0
+}
\ No newline at end of file
diff --git a/reports/bridge-005-new-model-20260917/before-457.json b/reports/bridge-005-new-model-20260917/before-457.json
new file mode 100644
index 0000000..711a221
--- /dev/null
+++ b/reports/bridge-005-new-model-20260917/before-457.json
@@ -0,0 +1,656 @@
+{
+ "project": {
+ "id": "457",
+ "type": "SCENE",
+ "code": "SCENE-EBC79290EA954BBC",
+ "name": "005 液压泵应急切换(编排验证)",
+ "description": "独立验证工程;不替换 TASK-VIRTUAL-005 及其发布版本。",
+ "categoryCode": "MAINTENANCE",
+ "trainingMode": "",
+ "coverUri": "fsvc://unreal-tran/image/2026/09/16/e660ee4fc97512fbc4f155b71f6dbeb4.jpg",
+ "status": "PUBLISHED",
+ "ownerUserId": "99",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "currentVersionId": "544",
+ "currentVersionNo": 4,
+ "currentVersionCode": "V4.0.0",
+ "publishedVersionId": "544",
+ "publishedTime": 1789567749,
+ "usageCount": 1,
+ "version": 13,
+ "addTime": 1789566525,
+ "updateTime": "2026-09-17T01:09:37",
+ "contentSummary": {
+ "schema": "edit3dv4.scene",
+ "sceneType": "OUTDOOR",
+ "environmentName": "野外保障、抢修与多装备协同",
+ "objectCount": 2
+ },
+ "currentVersionStatus": "PUBLISHED",
+ "dependencyCount": 0,
+ "assetCount": 3,
+ "readCount": 0,
+ "downloadCount": 0
+ },
+ "currentVersion": {
+ "id": "544",
+ "projectId": "457",
+ "versionNo": 4,
+ "versionCode": "V4.0.0",
+ "status": "PUBLISHED",
+ "content": {
+ "schema": "edit3dv4.scene",
+ "version": "1.5",
+ "templateRevision": 1,
+ "presetId": "outdoor-1",
+ "name": "室外综合训练场",
+ "type": "outdoor",
+ "updatedAt": "2026-09-16T14:09:08.354Z",
+ "environment": {
+ "schema": "edit3dv4.scene-environment",
+ "version": "1.0",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "floorOnly": false,
+ "useModelFloor": false
+ },
+ "rendering": {
+ "schema": "edit3dv4.scene-rendering",
+ "version": "1.0",
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 34,
+ "far": 88
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.05,
+ "far": 800,
+ "position": [
+ 7.138234886169582,
+ 3.695554761077557,
+ 7.955160424286649
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ]
+ },
+ "lights": {
+ "hemisphere": {
+ "skyColor": 15594743,
+ "groundColor": 6910582,
+ "intensity": 1.45
+ },
+ "directional": {
+ "color": 16777215,
+ "intensity": 2,
+ "position": [
+ 12,
+ 18,
+ 10
+ ],
+ "castShadow": true,
+ "shadowMapSize": 2048,
+ "shadowBounds": 82
+ }
+ }
+ },
+ "objects": [
+ {
+ "sceneId": "ENV-outdoor-1",
+ "type": "scene-environment",
+ "name": "室外基础环境",
+ "deviceId": "",
+ "modelId": "",
+ "semantic": "环境设施",
+ "assetRole": "environment-base",
+ "builtinAssetId": "outdoor-1",
+ "interactionId": "",
+ "operable": false,
+ "capabilities": [],
+ "visible": true,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "environmentDescriptor": {
+ "schema": "edit3dv4.scene-environment",
+ "version": "1.0",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "floorOnly": false,
+ "useModelFloor": false
+ }
+ },
+ {
+ "sceneId": "front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "deviceId": "front-pump-training-yard",
+ "modelId": "front-pump-field-terrain",
+ "semantic": "环境地形",
+ "assetRole": "environment",
+ "builtinAssetId": "front-pump-field-terrain",
+ "modelEditorAssetId": "",
+ "modelEditorModelId": "",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "partOverrides": {},
+ "interactionId": "scene:front-pump-training-yard",
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sourceNodeName": "",
+ "splitGroupId": "",
+ "visible": true,
+ "position": [
+ -3.1597256741842212,
+ 10.30528511389146,
+ -40.10715876774236
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1.7159231079037875,
+ 1.7159231079037875,
+ 1.7159231079037875
+ ],
+ "assetKey": "",
+ "resourceUrl": "/models/地形.glb",
+ "sourceName": "地形.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "enclosureMode": "",
+ "assetCode": "PILOT-TERRAIN",
+ "sourceAssetId": ""
+ },
+ {
+ "sceneId": "front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "deviceId": "front-pump-rescue-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "semantic": "实训装备",
+ "assetRole": "equipment",
+ "builtinAssetId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "content-scene-BRIDGE-005-AUTHORING-PILOT-SCENE-front-pump-rescue-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "sceneId": "front-pump-hydraulic-pump",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "model-front-pump-step-vehicle-41",
+ "nodePath": "0/6/0",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-power-take-off",
+ "interactionId": "front-pump-power-take-off",
+ "sourceInteractionId": "front-pump-power-take-off",
+ "editorId": "model-front-pump-step-vehicle-22",
+ "nodePath": "0/2/0",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-pto-switch",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "model-front-pump-step-vehicle-26",
+ "nodePath": "0/3/0",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-ball-valve-switch",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "model-front-pump-step-vehicle-53",
+ "nodePath": "0/12/0",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-aux-control-box",
+ "interactionId": "front-pump-aux-control-box",
+ "sourceInteractionId": "front-pump-aux-control-box",
+ "editorId": "model-front-pump-step-vehicle-32",
+ "nodePath": "0/5/0",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-aux-control-box-cover",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "model-front-pump-step-vehicle-20",
+ "nodePath": "0/1/0",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-rescue-switch",
+ "interactionId": "front-pump-rescue-switch",
+ "sourceInteractionId": "front-pump-rescue-switch",
+ "editorId": "model-front-pump-step-vehicle-30",
+ "nodePath": "0/4/0",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ }
+ ],
+ "partOverrides": {
+ "front-pump-hydraulic-pump": {
+ "sceneId": "front-pump-hydraulic-pump",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "model-front-pump-step-vehicle-41",
+ "nodePath": "0/6/0",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "sceneDeleted": false,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-power-take-off": {
+ "sceneId": "front-pump-power-take-off",
+ "interactionId": "front-pump-power-take-off",
+ "sourceInteractionId": "front-pump-power-take-off",
+ "editorId": "model-front-pump-step-vehicle-22",
+ "nodePath": "0/2/0",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "sceneDeleted": false,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-pto-switch": {
+ "sceneId": "front-pump-pto-switch",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "model-front-pump-step-vehicle-26",
+ "nodePath": "0/3/0",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "sceneDeleted": false,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-ball-valve-switch": {
+ "sceneId": "front-pump-ball-valve-switch",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "model-front-pump-step-vehicle-53",
+ "nodePath": "0/12/0",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "sceneDeleted": false,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-aux-control-box": {
+ "sceneId": "front-pump-aux-control-box",
+ "interactionId": "front-pump-aux-control-box",
+ "sourceInteractionId": "front-pump-aux-control-box",
+ "editorId": "model-front-pump-step-vehicle-32",
+ "nodePath": "0/5/0",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "sceneDeleted": false,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-aux-control-box-cover": {
+ "sceneId": "front-pump-aux-control-box-cover",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "model-front-pump-step-vehicle-20",
+ "nodePath": "0/1/0",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "sceneDeleted": false,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-rescue-switch": {
+ "sceneId": "front-pump-rescue-switch",
+ "interactionId": "front-pump-rescue-switch",
+ "sourceInteractionId": "front-pump-rescue-switch",
+ "editorId": "model-front-pump-step-vehicle-30",
+ "nodePath": "0/4/0",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "sceneDeleted": false,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ }
+ },
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sourceNodeName": "Group",
+ "splitGroupId": "",
+ "visible": true,
+ "position": [
+ 1.5698558846140135e-16,
+ 0.6112875194820317,
+ 0.13180482636746585
+ ],
+ "rotation": [
+ 3.0865583248298285e-17,
+ -3.96331642134641e-33,
+ -2.568113739801058e-16
+ ],
+ "scale": [
+ 0.9715696607300419,
+ 0.9715696607300419,
+ 0.9715696607300419
+ ],
+ "assetKey": "",
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "enclosureMode": "",
+ "assetCode": "PILOT-VEHICLE",
+ "sourceAssetId": ""
+ }
+ ],
+ "apiManaged": true,
+ "sceneType": "OUTDOOR",
+ "objectCount": 3,
+ "environmentName": "野外保障、抢修与多装备协同"
+ },
+ "changeSummary": "",
+ "checksum": "1783a564084e83cf1919c7e9a2f58f6a7830cd9038c88d8bbc97838a51a04e53",
+ "createdByUserId": "99",
+ "createdByName": "内部维护",
+ "publishedByUserId": "99",
+ "publishedByName": "内部维护",
+ "publishedTime": 1789567749,
+ "version": 3,
+ "addTime": 1789567748,
+ "updateTime": "2026-09-16T22:09:09",
+ "dependencies": [],
+ "assets": [
+ {
+ "id": "4223",
+ "versionId": "544",
+ "code": "PILOT-TERRAIN",
+ "name": "PILOT-TERRAIN",
+ "type": "MODEL_FILE",
+ "storageUri": "/models/地形.glb",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "sha256": "fa71494be13ca2ef727031a8a0f2ac42da74bccefebb3b61c7d59489999f349e",
+ "metadata": {
+ "builtin": true
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4224",
+ "versionId": "544",
+ "code": "PILOT-VEHICLE",
+ "name": "PILOT-VEHICLE",
+ "type": "MODEL_FILE",
+ "storageUri": "/models/步骤模型.glb",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "sha256": "e1ee2ff78956d68d224d662552ed7bf18c02223bb741f0f8002def9842db8995",
+ "metadata": {
+ "builtin": true
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4225",
+ "versionId": "544",
+ "code": "SCENE_COVER",
+ "name": "场景画面封面",
+ "type": "IMAGE",
+ "storageUri": "fsvc://unreal-tran/image/2026/09/16/e660ee4fc97512fbc4f155b71f6dbeb4.jpg",
+ "mimeType": "image/jpeg",
+ "sizeBytes": 39227,
+ "sha256": "0d2857905f830c320e9c7c3bc33f4d0a56b22ca501eeb073b3f67258fa49d45e",
+ "metadata": {
+ "usage": "scene-cover",
+ "source": "scene-editor-viewport",
+ "originalFilename": "scene-cover.jpg",
+ "format": "JPEG",
+ "width": 640,
+ "height": 496,
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 2
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/reports/bridge-005-new-model-20260917/before-458.json b/reports/bridge-005-new-model-20260917/before-458.json
new file mode 100644
index 0000000..4af2394
--- /dev/null
+++ b/reports/bridge-005-new-model-20260917/before-458.json
@@ -0,0 +1,2489 @@
+{
+ "project": {
+ "id": "458",
+ "type": "TRAINING",
+ "code": "TRAINING-962819ED4B72484A",
+ "name": "005 液压泵应急切换(编排验证)",
+ "description": "独立验证工程;不替换 TASK-VIRTUAL-005 及其发布版本。",
+ "categoryCode": "MAINTENANCE",
+ "trainingMode": "VIRTUAL",
+ "coverUri": "fsvc://unreal-tran/image/2026/09/17/f767cced89c0b2f66fa36255708134ce.jpg",
+ "status": "PUBLISHED",
+ "ownerUserId": "99",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "currentVersionId": "546",
+ "currentVersionNo": 5,
+ "currentVersionCode": "V5.0.0",
+ "publishedVersionId": "546",
+ "publishedTime": 1789578576,
+ "usageCount": 0,
+ "version": 19,
+ "addTime": 1789566627,
+ "updateTime": "2026-09-17T01:09:36",
+ "contentSummary": {
+ "schema": "digital-workshop-training-project",
+ "level": "标准",
+ "durationMinutes": 10,
+ "trainingMode": "VIRTUAL",
+ "stepCount": 5
+ },
+ "currentVersionStatus": "PUBLISHED",
+ "dependencyCount": 1,
+ "assetCount": 11,
+ "readCount": 0,
+ "downloadCount": 0
+ },
+ "currentVersion": {
+ "id": "546",
+ "projectId": "458",
+ "versionNo": 5,
+ "versionCode": "V5.0.0",
+ "status": "PUBLISHED",
+ "content": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "trainingMode": "VIRTUAL",
+ "enabledChannels": [
+ "VIRTUAL"
+ ],
+ "channelProfiles": {
+ "VIRTUAL": {
+ "type": "VIRTUAL",
+ "renderMode": "三维实时仿真",
+ "interactionMode": "三维操作、动画引导与规则自动判定",
+ "assistance": "演示、训练与模拟考试"
+ }
+ },
+ "level": "标准",
+ "durationMinutes": 10,
+ "totalScore": 100,
+ "objectives": [],
+ "steps": [
+ {
+ "id": "front-pump-step-01",
+ "stepCode": "front-pump-step-01",
+ "order": 1,
+ "title": "根据故障现象确定是哪一个液压泵发生故障",
+ "summary": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-01",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-hydraulic-pump",
+ "targetName": "液压泵",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "guidance": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "warning": "",
+ "destination": "液压泵",
+ "success": "根据故障现象确定是哪一个液压泵发生故障",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-hydraulic-pump",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "identify",
+ "axisSpace": "world",
+ "highlightColor": "#e53935",
+ "steps": [
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第1步,确定故障液压泵。根据故障现象确定发生故障的液压泵。",
+ "narrationAssetCode": "PILOT-005-1-AUDIO",
+ "safetyText": "安全提示:请按规定顺序操作并远离危险区域。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-1-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "exterior",
+ "number": 1,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "model-front-pump-step-vehicle-41",
+ "nodePath": "0/6/0",
+ "sourceNodeName": "1液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-hydraulic-pump",
+ "targetNodeName": "1液压泵",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-02",
+ "stepCode": "front-pump-step-02",
+ "order": 2,
+ "title": "断开架桥车取力器",
+ "summary": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-02",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "guidance": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "断开架桥车取力器",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": -30,
+ "toleranceDegrees": 6,
+ "directionHint": "向断开方向摇动"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第2步,断开架桥车取力器。将架桥车取力器断开。",
+ "narrationAssetCode": "PILOT-005-2-AUDIO",
+ "safetyText": "安全提示:请确认压力归零并可靠支承后再进行拆卸。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-2-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "exterior",
+ "number": 2,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "model-front-pump-step-vehicle-26",
+ "nodePath": "0/3/0",
+ "sourceNodeName": "2取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "2取力器开关",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-03",
+ "stepCode": "front-pump-step-03",
+ "order": 3,
+ "title": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "summary": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-03",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-ball-valve-switch",
+ "targetName": "球阀开关",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "guidance": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "warning": "",
+ "destination": "球阀开关",
+ "success": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-ball-valve-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "steps": [
+ {
+ "targetId": "front-pump-ball-valve-switch",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "由垂直与官道方向旋转至平行于管道方向"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第3步,打开互救球阀。打开备胎上方两个红色滤油器之间的连通球阀,手柄由垂直管道转为平行管道。",
+ "narrationAssetCode": "PILOT-005-3-AUDIO",
+ "safetyText": "安全提示:请按规定顺序操作并远离危险区域。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-3-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "focus",
+ "number": 3,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "model-front-pump-step-vehicle-53",
+ "nodePath": "0/12/0",
+ "sourceNodeName": "3球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-ball-valve-switch",
+ "targetNodeName": "3球阀开关",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-04",
+ "stepCode": "front-pump-step-04",
+ "order": 4,
+ "title": "重新联通取力器",
+ "summary": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-04",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "guidance": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "重新联通取力器",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "按步骤2的相反方向摇回去"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第4步,重新接通取力器。将架桥车取力器重新接通。",
+ "narrationAssetCode": "PILOT-005-4-AUDIO",
+ "safetyText": "安全提示:请按规定顺序操作并远离危险区域。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-4-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "exterior",
+ "number": 4,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "model-front-pump-step-vehicle-26",
+ "nodePath": "0/3/0",
+ "sourceNodeName": "2取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "2取力器开关",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-05",
+ "stepCode": "front-pump-step-05",
+ "order": 5,
+ "title": "打开辅助控制盒内的“互救”开关",
+ "summary": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-05",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-aux-control-box-cover",
+ "targetName": "辅助控制盒盖",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "guidance": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "warning": "",
+ "destination": "辅助控制盒盖",
+ "success": "打开辅助控制盒内的“互救”开关",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-aux-control-box-cover",
+ "mode": "inspect",
+ "durationMs": 1600,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "sequence",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-aux-control-box"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-aux-control-box-cover",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 100,
+ "toleranceDegrees": 8,
+ "directionHint": "沿控制盒盖边缘铰链打开",
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ }
+ },
+ {
+ "targetId": "front-pump-rescue-switch",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "往上搬"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第5步,打开辅助控制盒互救开关。打开辅助控制盒盖,再打开互救开关,进入单泵作业状态。",
+ "narrationAssetCode": "PILOT-005-5-AUDIO",
+ "safetyText": "安全提示:请确认压力归零并可靠支承后再进行拆卸。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-5-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "focus",
+ "number": 5,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "model-front-pump-step-vehicle-20",
+ "nodePath": "0/1/0",
+ "sourceNodeName": "5辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-aux-control-box-cover",
+ "targetNodeName": "5辅助控制盒盖",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ }
+ ],
+ "modeConfig": {
+ "type": "VIRTUAL",
+ "renderMode": "三维实时仿真",
+ "interactionMode": "三维操作、动画引导与规则自动判定",
+ "assistance": "演示、训练与模拟考试"
+ },
+ "task": {
+ "code": "BRIDGE-005-AUTHORING-PILOT",
+ "title": "005 液压泵应急切换(编排验证)",
+ "category": "小修",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ],
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "categoryId": "minor-repair",
+ "image": "/models/step-model-front-pump-thumb.png"
+ },
+ "scenario": {
+ "environmentName": "室外综合训练场",
+ "sceneLayout": "3 个场景对象 · 设备与物模型绑定已继承",
+ "equipmentState": "压力不足 · 内泄待定位",
+ "sceneTags": [],
+ "visibleParts": [
+ "front-pump-hydraulic-pump",
+ "front-pump-pto-switch",
+ "front-pump-ball-valve-switch",
+ "front-pump-aux-control-box-cover"
+ ],
+ "operableParts": [
+ "front-pump-hydraulic-pump",
+ "front-pump-pto-switch",
+ "front-pump-ball-valve-switch",
+ "front-pump-aux-control-box-cover"
+ ],
+ "sensorFeeds": [
+ {
+ "id": "STATE",
+ "label": "装备状态",
+ "value": "就绪",
+ "unit": "",
+ "state": "ok"
+ },
+ {
+ "id": "STEP",
+ "label": "流程节点",
+ "value": "1 / 8",
+ "unit": "",
+ "state": "ready"
+ },
+ {
+ "id": "RULE",
+ "label": "规则判定",
+ "value": "等待操作",
+ "unit": "",
+ "state": "ready"
+ }
+ ],
+ "id": "hydraulic-fault-scenario",
+ "publishedSceneId": "457@544",
+ "publishedSceneVersion": "4",
+ "sceneResource": {
+ "sceneId": "457@544",
+ "sourceProjectId": "457",
+ "sourceVersionId": "544",
+ "version": "4",
+ "sourceKind": "published",
+ "status": "已发布",
+ "publishedAt": "2026-09-16T14:09:09.000Z",
+ "objectCount": 3,
+ "assetKey": "",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "name": "005 液压泵应急切换(编排验证)",
+ "environment": {
+ "schema": "edit3dv4.scene-environment",
+ "version": "1.0",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "floorOnly": false,
+ "useModelFloor": false
+ },
+ "objects": [
+ {
+ "id": "ENV-outdoor-1",
+ "sceneId": "ENV-outdoor-1",
+ "interactionId": "scene:ENV-outdoor-1",
+ "type": "scene-environment",
+ "name": "室外基础环境",
+ "deviceId": "",
+ "modelId": "",
+ "semantic": "环境设施",
+ "assetRole": "environment-base",
+ "builtinAssetId": "outdoor-1",
+ "modelEditorAssetId": "",
+ "modelEditorModelId": "",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "partOverrides": {},
+ "operable": false,
+ "capabilities": [],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "",
+ "assetKey": "",
+ "resourceUrl": "",
+ "sourceName": "",
+ "sizeBytes": 0,
+ "mimeType": "",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "environmentDescriptor": {
+ "schema": "edit3dv4.scene-environment",
+ "version": "1.0",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "floorOnly": false,
+ "useModelFloor": false
+ },
+ "visible": true,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "deviceId": "front-pump-training-yard",
+ "modelId": "front-pump-field-terrain",
+ "semantic": "环境地形",
+ "assetRole": "environment",
+ "builtinAssetId": "front-pump-field-terrain",
+ "modelEditorAssetId": "",
+ "modelEditorModelId": "",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "partOverrides": {},
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "",
+ "assetKey": "",
+ "resourceUrl": "/models/地形.glb",
+ "sourceName": "地形.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ -3.1597256741842212,
+ 10.30528511389146,
+ -40.10715876774236
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1.7159231079037875,
+ 1.7159231079037875,
+ 1.7159231079037875
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "deviceId": "front-pump-rescue-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "semantic": "实训装备",
+ "assetRole": "equipment",
+ "builtinAssetId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "content-scene-BRIDGE-005-AUTHORING-PILOT-SCENE-front-pump-rescue-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "sceneId": "front-pump-hydraulic-pump",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "model-front-pump-step-vehicle-41",
+ "nodePath": "0/6/0",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-power-take-off",
+ "interactionId": "front-pump-power-take-off",
+ "sourceInteractionId": "front-pump-power-take-off",
+ "editorId": "model-front-pump-step-vehicle-22",
+ "nodePath": "0/2/0",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-pto-switch",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "model-front-pump-step-vehicle-26",
+ "nodePath": "0/3/0",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-ball-valve-switch",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "model-front-pump-step-vehicle-53",
+ "nodePath": "0/12/0",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box",
+ "interactionId": "front-pump-aux-control-box",
+ "sourceInteractionId": "front-pump-aux-control-box",
+ "editorId": "model-front-pump-step-vehicle-32",
+ "nodePath": "0/5/0",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box-cover",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "model-front-pump-step-vehicle-20",
+ "nodePath": "0/1/0",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-rescue-switch",
+ "interactionId": "front-pump-rescue-switch",
+ "sourceInteractionId": "front-pump-rescue-switch",
+ "editorId": "model-front-pump-step-vehicle-30",
+ "nodePath": "0/4/0",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ],
+ "partOverrides": {
+ "front-pump-hydraulic-pump": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-power-take-off": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-pto-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-ball-valve-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-aux-control-box": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-aux-control-box-cover": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-rescue-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ }
+ },
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "Group",
+ "assetKey": "",
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ 1.5698558846140135e-16,
+ 0.6112875194820317,
+ 0.13180482636746585
+ ],
+ "rotation": [
+ 3.0865583248298285e-17,
+ -3.96331642134641e-33,
+ -2.568113739801058e-16
+ ],
+ "scale": [
+ 0.9715696607300419,
+ 0.9715696607300419,
+ 0.9715696607300419
+ ]
+ }
+ ],
+ "assetReferences": [
+ {
+ "assetKey": "",
+ "resourceUrl": "/models/地形.glb",
+ "sourceName": "地形.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "environment",
+ "builtinAssetId": "front-pump-field-terrain"
+ },
+ {
+ "assetKey": "",
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "equipment",
+ "builtinAssetId": "front-pump-step-vehicle"
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "4",
+ "presetId": "outdoor-1",
+ "name": "室外综合训练场",
+ "type": "outdoor",
+ "assetKey": "",
+ "environment": {
+ "schema": "edit3dv4.scene-environment",
+ "version": "1.0",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "floorOnly": false,
+ "useModelFloor": false
+ },
+ "rendering": {
+ "schema": "edit3dv4.scene-rendering",
+ "version": "1.0",
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 34,
+ "far": 88
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.05,
+ "far": 800,
+ "position": [
+ 7.138234886169582,
+ 3.695554761077557,
+ 7.955160424286649
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ]
+ },
+ "lights": {
+ "hemisphere": {
+ "skyColor": 15594743,
+ "groundColor": 6910582,
+ "intensity": 1.45
+ },
+ "directional": {
+ "color": 16777215,
+ "intensity": 2,
+ "position": [
+ 12,
+ 18,
+ 10
+ ],
+ "castShadow": true,
+ "shadowMapSize": 2048,
+ "shadowBounds": 82
+ }
+ }
+ },
+ "objects": [
+ {
+ "id": "ENV-outdoor-1",
+ "sceneId": "ENV-outdoor-1",
+ "interactionId": "scene:ENV-outdoor-1",
+ "type": "scene-environment",
+ "name": "室外基础环境",
+ "deviceId": "",
+ "modelId": "",
+ "semantic": "环境设施",
+ "assetRole": "environment-base",
+ "builtinAssetId": "outdoor-1",
+ "modelEditorAssetId": "",
+ "modelEditorModelId": "",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "partOverrides": {},
+ "operable": false,
+ "capabilities": [],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "",
+ "assetKey": "",
+ "resourceUrl": "",
+ "sourceName": "",
+ "sizeBytes": 0,
+ "mimeType": "",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "environmentDescriptor": {
+ "schema": "edit3dv4.scene-environment",
+ "version": "1.0",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "floorOnly": false,
+ "useModelFloor": false
+ },
+ "visible": true,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "deviceId": "front-pump-training-yard",
+ "modelId": "front-pump-field-terrain",
+ "semantic": "环境地形",
+ "assetRole": "environment",
+ "builtinAssetId": "front-pump-field-terrain",
+ "modelEditorAssetId": "",
+ "modelEditorModelId": "",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "partOverrides": {},
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "",
+ "assetKey": "",
+ "resourceUrl": "/models/地形.glb",
+ "sourceName": "地形.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ -3.1597256741842212,
+ 10.30528511389146,
+ -40.10715876774236
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1.7159231079037875,
+ 1.7159231079037875,
+ 1.7159231079037875
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "deviceId": "front-pump-rescue-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "semantic": "实训装备",
+ "assetRole": "equipment",
+ "builtinAssetId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "content-scene-BRIDGE-005-AUTHORING-PILOT-SCENE-front-pump-rescue-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "sceneId": "front-pump-hydraulic-pump",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "model-front-pump-step-vehicle-41",
+ "nodePath": "0/6/0",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-power-take-off",
+ "interactionId": "front-pump-power-take-off",
+ "sourceInteractionId": "front-pump-power-take-off",
+ "editorId": "model-front-pump-step-vehicle-22",
+ "nodePath": "0/2/0",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-pto-switch",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "model-front-pump-step-vehicle-26",
+ "nodePath": "0/3/0",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-ball-valve-switch",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "model-front-pump-step-vehicle-53",
+ "nodePath": "0/12/0",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box",
+ "interactionId": "front-pump-aux-control-box",
+ "sourceInteractionId": "front-pump-aux-control-box",
+ "editorId": "model-front-pump-step-vehicle-32",
+ "nodePath": "0/5/0",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box-cover",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "model-front-pump-step-vehicle-20",
+ "nodePath": "0/1/0",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-rescue-switch",
+ "interactionId": "front-pump-rescue-switch",
+ "sourceInteractionId": "front-pump-rescue-switch",
+ "editorId": "model-front-pump-step-vehicle-30",
+ "nodePath": "0/4/0",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ],
+ "partOverrides": {
+ "front-pump-hydraulic-pump": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-power-take-off": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-pto-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-ball-valve-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-aux-control-box": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-aux-control-box-cover": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-rescue-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ }
+ },
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "Group",
+ "assetKey": "",
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ 1.5698558846140135e-16,
+ 0.6112875194820317,
+ 0.13180482636746585
+ ],
+ "rotation": [
+ 3.0865583248298285e-17,
+ -3.96331642134641e-33,
+ -2.568113739801058e-16
+ ],
+ "scale": [
+ 0.9715696607300419,
+ 0.9715696607300419,
+ 0.9715696607300419
+ ]
+ }
+ ]
+ }
+ },
+ "baseVisualKey": "diagnostic-bay",
+ "environment": {
+ "type": "outdoor",
+ "mode": "external",
+ "sourceName": "005 液压泵应急切换(编排验证) · 场景发布包",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "accent": "#e98a2f",
+ "background": 12178915,
+ "fog": 12178915,
+ "ground": 6450803,
+ "camera": {
+ "position": [
+ 9.6,
+ 6.2,
+ 12.3
+ ],
+ "target": [
+ -0.25,
+ 2.45,
+ 0
+ ]
+ },
+ "retainStoredParts": false
+ },
+ "tools": [
+ {
+ "id": "pressure-gauge",
+ "name": "数字压力表",
+ "purpose": "卸压确认与压力复测",
+ "thumbnailKey": "pressure-gauge",
+ "modelKind": "pressure-gauge",
+ "defaultScale": 1
+ },
+ {
+ "id": "leak-detector",
+ "name": "泄漏检测灯",
+ "purpose": "油管与密封外泄检查",
+ "thumbnailKey": "leak-detector",
+ "modelKind": "leak-detector",
+ "defaultScale": 1
+ },
+ {
+ "id": "leakage-tester",
+ "name": "内泄保压仪",
+ "purpose": "压力衰减诊断",
+ "thumbnailKey": "leakage-tester",
+ "modelKind": "leakage-tester",
+ "defaultScale": 1
+ },
+ {
+ "id": "hose-wrench",
+ "name": "油管扳手",
+ "purpose": "接头拆装",
+ "thumbnailKey": "hose-wrench",
+ "modelKind": "hose-wrench",
+ "defaultScale": 1
+ },
+ {
+ "id": "pin-puller",
+ "name": "液压拔销器",
+ "purpose": "销轴同轴分离",
+ "thumbnailKey": "pin-puller",
+ "modelKind": "pin-puller",
+ "defaultScale": 1
+ },
+ {
+ "id": "lifting-sling",
+ "name": "起吊带与平衡梁",
+ "purpose": "液压缸总成吊运",
+ "thumbnailKey": "lifting-sling",
+ "modelKind": "lifting-sling",
+ "defaultScale": 1
+ },
+ {
+ "id": "seal-kit",
+ "name": "密封拆装工具",
+ "purpose": "密封组件更换",
+ "thumbnailKey": "seal-kit",
+ "modelKind": "seal-kit",
+ "defaultScale": 1
+ },
+ {
+ "id": "torque-wrench",
+ "name": "数字扭矩扳手",
+ "purpose": "规范力矩紧固",
+ "thumbnailKey": "torque-wrench",
+ "modelKind": "torque-wrench",
+ "defaultScale": 1
+ },
+ {
+ "id": "checklist-terminal",
+ "name": "数字点检终端",
+ "purpose": "路线签到与清单确认",
+ "thumbnailKey": "checklist-terminal",
+ "modelKind": "checklist-terminal",
+ "defaultScale": 1
+ },
+ {
+ "id": "feeler-gauge",
+ "name": "间隙规",
+ "purpose": "销轴配合间隙测量",
+ "thumbnailKey": "feeler-gauge",
+ "modelKind": "feeler-gauge",
+ "defaultScale": 1
+ },
+ {
+ "id": "lock-tool",
+ "name": "锁止件拆装钳",
+ "purpose": "解除与恢复锁止件",
+ "thumbnailKey": "lock-tool",
+ "modelKind": "lock-tool",
+ "defaultScale": 1
+ },
+ {
+ "id": "alignment-tool",
+ "name": "同轴装配导向器",
+ "purpose": "反向复装校准",
+ "thumbnailKey": "alignment-tool",
+ "modelKind": "alignment-tool",
+ "defaultScale": 1
+ }
+ ],
+ "faults": [],
+ "authoring": {
+ "schema": "unreal-tran.training-authoring/v1",
+ "version": 1,
+ "nodes": [
+ {
+ "id": "flow-start",
+ "type": "start",
+ "title": "训练开始",
+ "x": 32,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-01",
+ "type": "step",
+ "title": "根据故障现象确定是哪一个液压泵发生故障",
+ "stepId": "front-pump-step-01",
+ "x": 240,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-02",
+ "type": "step",
+ "title": "断开架桥车取力器",
+ "stepId": "front-pump-step-02",
+ "x": 500,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-03",
+ "type": "step",
+ "title": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "stepId": "front-pump-step-03",
+ "x": 760,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-04",
+ "type": "step",
+ "title": "重新联通取力器",
+ "stepId": "front-pump-step-04",
+ "x": 240,
+ "y": 270,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-05",
+ "type": "step",
+ "title": "打开辅助控制盒内的“互救”开关",
+ "stepId": "front-pump-step-05",
+ "x": 500,
+ "y": 270,
+ "config": {}
+ },
+ {
+ "id": "flow-end",
+ "type": "end",
+ "title": "训练结束",
+ "x": 760,
+ "y": 270,
+ "config": {}
+ }
+ ],
+ "edges": [
+ {
+ "id": "edge:flow-start:step-node:front-pump-step-01",
+ "from": "flow-start",
+ "to": "step-node:front-pump-step-01",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-01:step-node:front-pump-step-02",
+ "from": "step-node:front-pump-step-01",
+ "to": "step-node:front-pump-step-02",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-02:step-node:front-pump-step-03",
+ "from": "step-node:front-pump-step-02",
+ "to": "step-node:front-pump-step-03",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-03:step-node:front-pump-step-04",
+ "from": "step-node:front-pump-step-03",
+ "to": "step-node:front-pump-step-04",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-04:step-node:front-pump-step-05",
+ "from": "step-node:front-pump-step-04",
+ "to": "step-node:front-pump-step-05",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-05:flow-end",
+ "from": "step-node:front-pump-step-05",
+ "to": "flow-end",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ }
+ ],
+ "timeline": {
+ "currentTime": 0,
+ "tracks": {
+ "front-pump-step-01": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-1-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-02": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-2-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-03": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-3-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-04": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-4-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-05": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-5-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ }
+ }
+ }
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN"
+ },
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥液压泵应急切换",
+ "status": "published",
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/4.jpg",
+ "resources": {
+ "models": [],
+ "animations": []
+ },
+ "legacyBridge": {
+ "schema": "unreal-tran.training-legacy-bridge/v1",
+ "uris": [],
+ "tracks": {
+ "front-pump-step-01": {
+ "audio": ""
+ },
+ "front-pump-step-02": {
+ "audio": ""
+ },
+ "front-pump-step-03": {
+ "audio": ""
+ },
+ "front-pump-step-04": {
+ "audio": ""
+ },
+ "front-pump-step-05": {
+ "audio": ""
+ }
+ }
+ }
+ },
+ "changeSummary": "本地编排版发布前保存",
+ "checksum": "e7640ffc0e47fde25f2228841e481dacaa3414da0e87f66bfa9fc553eb4f45b6",
+ "createdByUserId": "99",
+ "createdByName": "内部维护",
+ "publishedByUserId": "99",
+ "publishedByName": "内部维护",
+ "publishedTime": 1789578576,
+ "version": 4,
+ "addTime": 1789578557,
+ "updateTime": "2026-09-17T01:09:36",
+ "dependencies": [
+ {
+ "id": "607",
+ "targetProjectId": "457",
+ "targetVersionId": "544",
+ "relationType": "TRAINING_SCENE",
+ "required": true,
+ "sortOrder": 0
+ }
+ ],
+ "assets": [
+ {
+ "id": "4314",
+ "versionId": "546",
+ "code": "PILOT-005-1-VIDEO",
+ "name": "步骤 1 VIDEO",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/16/1d68534e92e3d5f064ff1c09efabfe25.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 340847,
+ "sha256": "7db0b2653aa8719268764ff4fb4f1ede92c947b9f4603308ce2ad7d0903ac45c",
+ "metadata": {
+ "source": "bridge-005-authoring-pilot",
+ "boxCount": 4,
+ "format": "MP4",
+ "majorBrand": "isom",
+ "originalFilename": "step-01-bd17dc16621458c4.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4315",
+ "versionId": "546",
+ "code": "PILOT-005-1-AUDIO",
+ "name": "步骤 1 AUDIO",
+ "type": "AUDIO",
+ "storageUri": "fsvc://unreal-tran/audio/2026/09/16/8d90d717134dff45edb854dffa573024.wav",
+ "mimeType": "audio/wav",
+ "sizeBytes": 155648,
+ "sha256": "3b29f93a367e7f8738500a2adeb56dc4752ce91f17e3b5bf671d3ee0f7f080eb",
+ "metadata": {
+ "source": "bridge-005-authoring-pilot",
+ "bitsPerSample": 16,
+ "sampleRate": 16000,
+ "format": "WAV",
+ "channels": 1,
+ "originalFilename": "step-01-4b0be5be669cfeaf.wav",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4316",
+ "versionId": "546",
+ "code": "PILOT-005-2-VIDEO",
+ "name": "步骤 2 VIDEO",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/16/da9b6b7fc1c4c1ebed0b0d462a9fd3f6.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 280578,
+ "sha256": "421922b32e5a9cb84c2fef6d1b026918044af2ce1ce0b725a89b60900d2052ef",
+ "metadata": {
+ "source": "bridge-005-authoring-pilot",
+ "boxCount": 4,
+ "format": "MP4",
+ "majorBrand": "isom",
+ "originalFilename": "step-02-f485ff03a609c910.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 1
+ },
+ {
+ "id": "4317",
+ "versionId": "546",
+ "code": "PILOT-005-2-AUDIO",
+ "name": "步骤 2 AUDIO",
+ "type": "AUDIO",
+ "storageUri": "fsvc://unreal-tran/audio/2026/09/16/a2f16454230ab6f97ed3ab31d79d5253.wav",
+ "mimeType": "audio/wav",
+ "sizeBytes": 120796,
+ "sha256": "6483f2df65230985db961bef38b3c55684bc623058fc8c0589e66f816d62dc29",
+ "metadata": {
+ "source": "bridge-005-authoring-pilot",
+ "bitsPerSample": 16,
+ "sampleRate": 16000,
+ "format": "WAV",
+ "channels": 1,
+ "originalFilename": "step-02-2e6be19cade105be.wav",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 1
+ },
+ {
+ "id": "4318",
+ "versionId": "546",
+ "code": "PILOT-005-3-VIDEO",
+ "name": "步骤 3 VIDEO",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/16/63bd22c6368538c24efa35d4b5f68dc5.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 552548,
+ "sha256": "4ff18d5fa228f6c040d39ec4f435fcac9eb9bfe768f108a27f57577ebcada362",
+ "metadata": {
+ "source": "bridge-005-authoring-pilot",
+ "boxCount": 4,
+ "format": "MP4",
+ "majorBrand": "isom",
+ "originalFilename": "step-03-81ea8dc0e23da76d.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 2
+ },
+ {
+ "id": "4319",
+ "versionId": "546",
+ "code": "PILOT-005-3-AUDIO",
+ "name": "步骤 3 AUDIO",
+ "type": "AUDIO",
+ "storageUri": "fsvc://unreal-tran/audio/2026/09/16/e752c9edbd3ce5e7dcd111340f5dde6c.wav",
+ "mimeType": "audio/wav",
+ "sizeBytes": 264432,
+ "sha256": "96f5889aa3ba307d05572b3912ebc5ac756b87957fddb2838e77a6b6f314296b",
+ "metadata": {
+ "source": "bridge-005-authoring-pilot",
+ "bitsPerSample": 16,
+ "sampleRate": 16000,
+ "format": "WAV",
+ "channels": 1,
+ "originalFilename": "step-03-b2401eb08aa0a8e8.wav",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 2
+ },
+ {
+ "id": "4320",
+ "versionId": "546",
+ "code": "PILOT-005-4-VIDEO",
+ "name": "步骤 4 VIDEO",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/16/18d91191921dc3a6eb3efc3bbac6884d.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 277188,
+ "sha256": "e841b61cf522ed5f1633b8569eba04bc17ee77d777f811ddbb2334abb856f2cb",
+ "metadata": {
+ "source": "bridge-005-authoring-pilot",
+ "boxCount": 4,
+ "format": "MP4",
+ "majorBrand": "isom",
+ "originalFilename": "step-04-aa6bbd5769344dc0.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 3
+ },
+ {
+ "id": "4321",
+ "versionId": "546",
+ "code": "PILOT-005-4-AUDIO",
+ "name": "步骤 4 AUDIO",
+ "type": "AUDIO",
+ "storageUri": "fsvc://unreal-tran/audio/2026/09/16/01fc9a9a439efdee09e7224927109d59.wav",
+ "mimeType": "audio/wav",
+ "sizeBytes": 133112,
+ "sha256": "1cf2f643138ceddaf4c0cf5b751abe2e9f74437f68efb20e6acc5263311f1bc0",
+ "metadata": {
+ "source": "bridge-005-authoring-pilot",
+ "bitsPerSample": 16,
+ "sampleRate": 16000,
+ "format": "WAV",
+ "channels": 1,
+ "originalFilename": "step-04-98693ab8c5150fd5.wav",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 3
+ },
+ {
+ "id": "4322",
+ "versionId": "546",
+ "code": "PILOT-005-5-VIDEO",
+ "name": "步骤 5 VIDEO",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/16/8d910c1385034ee6fc05803dcf92bddc.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 450719,
+ "sha256": "6def38648367bbd7475e7bcba40d407d8530e9bbbdda128121c320ccd252275c",
+ "metadata": {
+ "source": "bridge-005-authoring-pilot",
+ "boxCount": 4,
+ "format": "MP4",
+ "majorBrand": "isom",
+ "originalFilename": "step-05-422f9e85bb468fd5.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 4
+ },
+ {
+ "id": "4323",
+ "versionId": "546",
+ "code": "PILOT-005-5-AUDIO",
+ "name": "步骤 5 AUDIO",
+ "type": "AUDIO",
+ "storageUri": "fsvc://unreal-tran/audio/2026/09/16/d67f8cd751f01c94f7c58c5aa2bc11d4.wav",
+ "mimeType": "audio/wav",
+ "sizeBytes": 214448,
+ "sha256": "a6baf1bc2900f1daecbe77be41aeecc8914cc5ae3f170bbf7c7c7ded86f8a4a2",
+ "metadata": {
+ "source": "bridge-005-authoring-pilot",
+ "bitsPerSample": 16,
+ "sampleRate": 16000,
+ "format": "WAV",
+ "channels": 1,
+ "originalFilename": "step-05-a21afc5ebe5af2ee.wav",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 4
+ },
+ {
+ "id": "4324",
+ "versionId": "546",
+ "code": "TRAINING_COVER",
+ "name": "训练画面封面",
+ "type": "IMAGE",
+ "storageUri": "fsvc://unreal-tran/image/2026/09/17/f767cced89c0b2f66fa36255708134ce.jpg",
+ "mimeType": "image/jpeg",
+ "sizeBytes": 40696,
+ "sha256": "9aa8d555d99251c46a6485965a302f9e45818a259b50e905eca6abf664c93912",
+ "metadata": {
+ "usage": "training-cover",
+ "source": "training-editor-viewport",
+ "originalFilename": "training-cover.jpg",
+ "format": "JPEG",
+ "width": 532,
+ "height": 640,
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 10
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/reports/bridge-005-new-model-20260917/index.html b/reports/bridge-005-new-model-20260917/index.html
new file mode 100644
index 0000000..2d03b52
--- /dev/null
+++ b/reports/bridge-005-new-model-20260917/index.html
@@ -0,0 +1 @@
+005 新模型验收005 新版架桥车:替换与完整流程验收
2026-09-17T14:35:31.975Z · 本地与局域网 · 管理员教员预览
结果
已替换为 0916架桥车.glb,七个目标全部重新绑定。五步六个动作、真实鼠标拖拽、服务端预览校验、数字人视频与语音回退通过。前端构建和新模型几何测试通过。
新增场景资产保留了原运行中的平整作业区,移除重复的基础地面;车轮贴地检查通过。盖板沿新版铰链向外开启,互救手柄向上拨动。
验证任务 116 保持草稿。原四个已发布任务的完整数据逐项对比一致,旧版 005 的完整流程回归通过。未切换原学员任务,未验证新增学员成绩。
新版整车

球阀操作

开盖与互救开关

场景制作与训练编排

\ No newline at end of file
diff --git a/reports/bridge-005-new-model-20260917/mapping.json b/reports/bridge-005-new-model-20260917/mapping.json
new file mode 100644
index 0000000..531d728
--- /dev/null
+++ b/reports/bridge-005-new-model-20260917/mapping.json
@@ -0,0 +1,138 @@
+{
+ "source": "0916架桥车.glb",
+ "sha256": "5993a52f55cf981fd7cb6113e346ff3c6b1f434bbd84f18232ab5af494d9ddca",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "sceneVersionId": "549",
+ "map": {
+ "1液压泵": "1_24柱塞泵3_05前泵3_08新泵",
+ "2取力器": "1_25取力器",
+ "2取力器开关": "1_25和1_27和2_03和2_08取力器开关",
+ "3球阀开关": "1_26球阀开关",
+ "5辅助控制盒": "1_28辅助控制盒内",
+ "5辅助控制盒盖": "1_28辅助控制盒盖",
+ "5互救开关": "1_28和2_06互救开关"
+ },
+ "targets": [
+ {
+ "sceneId": "front-pump-hydraulic-pump",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "bridge-0916-node-92",
+ "nodePath": "0/46/0",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-power-take-off",
+ "interactionId": "front-pump-power-take-off",
+ "sourceInteractionId": "front-pump-power-take-off",
+ "editorId": "bridge-0916-node-80",
+ "nodePath": "0/40/0",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-pto-switch",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-ball-valve-switch",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "bridge-0916-node-96",
+ "nodePath": "0/48/0",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-aux-control-box",
+ "interactionId": "front-pump-aux-control-box",
+ "sourceInteractionId": "front-pump-aux-control-box",
+ "editorId": "bridge-0916-node-84",
+ "nodePath": "0/42/0",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-aux-control-box-cover",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "bridge-0916-node-78",
+ "nodePath": "0/39/0",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ },
+ {
+ "sceneId": "front-pump-rescue-switch",
+ "interactionId": "front-pump-rescue-switch",
+ "sourceInteractionId": "front-pump-rescue-switch",
+ "editorId": "bridge-0916-node-86",
+ "nodePath": "0/43/0",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true,
+ "sceneDeleted": false
+ }
+ ],
+ "position": [
+ 1.5698558846140135e-16,
+ 0.00012730681329620186,
+ 0.13180482636746585
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-005-new-model-20260917/original-005-regression.json b/reports/bridge-005-new-model-20260917/original-005-regression.json
new file mode 100644
index 0000000..c144ab9
--- /dev/null
+++ b/reports/bridge-005-new-model-20260917/original-005-regression.json
@@ -0,0 +1,454 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 86 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "grounding": null,
+ "modelSources": [
+ {
+ "name": "地形.glb",
+ "url": "/models/地形.glb"
+ },
+ {
+ "name": "步骤模型.glb",
+ "url": "/models/步骤模型.glb"
+ }
+ ],
+ "hdr": "venice_sunset_1k",
+ "distance": 11.052363924053688,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 937.1159093565705,
+ "y": 510.8943121357542,
+ "localX": 678.1159093565705,
+ "localY": 322.3943121357542,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935024518472723,
+ 0.13537492625037484,
+ 0.19723593501664283
+ ],
+ "projected": {
+ "x": 670.919240275776,
+ "y": 316.01579133562,
+ "w": 14.309325962616413,
+ "h": 12.873100207788639
+ },
+ "pivot": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 6.098689649701348e-32,
+ 2.5291018817332963e-16,
+ -1
+ ],
+ "workflowCoverage": [
+ {
+ "name": "front-pump-hydraulic-pump",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 6.688026389433602,
+ 3.8228247388783156,
+ 8.328485692502216
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 881.0625,
+ "y": 533.375,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "narration": [
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 86 step 1 operation 1",
+ "target": "front-pump-hydraulic-pump",
+ "drag": false,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 705.1374098658791,
+ "y": 222.81006115045116,
+ "w": 91.72518026824184,
+ "h": 113.44868046645237
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 86 internal target inspected with explicit translucent tool",
+ "targetId": "front-pump-pto-switch",
+ "pass": true
+ },
+ {
+ "name": "task 86 step 2 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 709.0006218750913,
+ "y": 263.03238137674134,
+ "w": 83.99875624981757,
+ "h": 33.023591730971475
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 86 step 3 operation 1",
+ "target": "front-pump-ball-valve-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 742.9515028622343,
+ "y": 259.69721416379815,
+ "w": 16.096994275529482,
+ "h": 40.44894573262036
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 86 step 4 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 706.5903063366927,
+ "y": 244.5697698769074,
+ "w": 88.81938732661342,
+ "h": 69.87239851232039
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 86 step 5 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 699.1228274926349,
+ "y": 249.2085662189188,
+ "w": 103.7543450147308,
+ "h": 60.65167032951712
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 86 step 5 operation 2",
+ "target": "front-pump-rescue-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 748.0136091802624,
+ "y": 276.397277651574,
+ "w": 5.972781639476352,
+ "h": 6.274247464206724
+ },
+ "labels": 4
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-005-new-model-20260917/runtime-final-lan.json b/reports/bridge-005-new-model-20260917/runtime-final-lan.json
new file mode 100644
index 0000000..1f79e75
--- /dev/null
+++ b/reports/bridge-005-new-model-20260917/runtime-final-lan.json
@@ -0,0 +1,998 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 116 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "grounding": null,
+ "modelSources": [
+ {
+ "name": "terrain-005-20260917.glb",
+ "url": "/models/terrain-005-20260917.glb"
+ },
+ {
+ "name": "0916架桥车.glb",
+ "url": "/models/bridge-erector-20260916.glb"
+ }
+ ],
+ "hdr": "venice_sunset_1k",
+ "distance": 11.026959938593922,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 933.2020303264042,
+ "y": 508.95441504276926,
+ "localX": 674.2020303264042,
+ "localY": 320.45441504276926,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935033827385107,
+ 0.13537495848346393,
+ 0.1972360067697554
+ ],
+ "projected": {
+ "x": 666.91484191321,
+ "y": 314.1958643764656,
+ "w": 14.498500962929938,
+ "h": 12.630497316989477
+ },
+ "pivot": [
+ -0.12817634914491466,
+ 0.6152234412401882,
+ 1.6466822177405493
+ ],
+ "pickPoints": [
+ {
+ "x": 933.164092394675,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 928.814542105796,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 937.5136426835539,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 933.164092394675,
+ "y": 507.1165384374119
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 507.1165384374119
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 507.1165384374119
+ },
+ {
+ "x": 933.164092394675,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 928.814542105796,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 505.22196383986346
+ },
+ {
+ "x": 933.164092394675,
+ "y": 512.8002622300571
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 512.8002622300571
+ },
+ {
+ "x": 928.814542105796,
+ "y": 512.8002622300571
+ }
+ ],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 4.7683715820306587e-7,
+ 1.629206909017054e-7,
+ -0.9999999999998731
+ ],
+ "workflowCoverage": [
+ {
+ "name": "front-pump-hydraulic-pump",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 7.138234886169582,
+ 3.695554761077557,
+ 7.955160424286649
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 877.15625,
+ "y": 531.3125,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "narration": [
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "new model source and ground contacts",
+ "pass": true,
+ "grounding": {
+ "samples": 446,
+ "minGap": 3.3306690738754696e-16,
+ "maxGap": 0.001553249851667493
+ },
+ "modelSources": [
+ {
+ "name": "terrain-005-20260917.glb",
+ "url": "/models/terrain-005-20260917.glb"
+ },
+ {
+ "name": "0916架桥车.glb",
+ "url": "/models/bridge-erector-20260916.glb"
+ }
+ ]
+ },
+ {
+ "name": "task 116 digital-human video playback",
+ "pass": true,
+ "media": {
+ "width": 480,
+ "height": 640,
+ "duration": 4.96,
+ "currentTime": 0.012008
+ }
+ },
+ {
+ "name": "task 116 step 1 operation 1",
+ "target": "front-pump-hydraulic-pump",
+ "drag": false,
+ "distance": 2.5322003064450387,
+ "projected": {
+ "x": 705.1374278203289,
+ "y": 222.81008281733952,
+ "w": 91.72522226722424,
+ "h": 113.44866354779649
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 116 step 2 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.5322003064450382,
+ "projected": {
+ "x": 709.0006218687124,
+ "y": 263.03238137723895,
+ "w": 83.99875626257528,
+ "h": 33.02359173097284
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 116 step 3 operation 1",
+ "target": "front-pump-ball-valve-switch",
+ "drag": true,
+ "distance": 2.5322003064450382,
+ "projected": {
+ "x": 742.9515540010899,
+ "y": 259.69722037090486,
+ "w": 16.09689199781792,
+ "h": 40.448933045487706
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 116 step 4 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200306445038,
+ "projected": {
+ "x": 706.5903063267405,
+ "y": 244.56976987545553,
+ "w": 88.81938734651817,
+ "h": 69.87239851232502
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 116 step 5 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": true,
+ "distance": 2.5322003064450387,
+ "projected": {
+ "x": 699.1228274833262,
+ "y": 249.20856621347718,
+ "w": 103.75434503334805,
+ "h": 60.651670340400244
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 116 step 5 operation 2",
+ "target": "front-pump-rescue-switch",
+ "drag": true,
+ "distance": 2.5322003064450382,
+ "projected": {
+ "x": 748.0136078101959,
+ "y": 276.39727764862505,
+ "w": 5.972784379609266,
+ "h": 6.274247470104513
+ },
+ "labels": 4
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/116/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-005-new-model-20260917/runtime.json b/reports/bridge-005-new-model-20260917/runtime.json
new file mode 100644
index 0000000..46873b7
--- /dev/null
+++ b/reports/bridge-005-new-model-20260917/runtime.json
@@ -0,0 +1,998 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 116 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 11.026959938593922,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 933.2020303264042,
+ "y": 508.95441504276926,
+ "localX": 674.2020303264042,
+ "localY": 320.45441504276926,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935033827385107,
+ 0.13537495848346393,
+ 0.1972360067697554
+ ],
+ "projected": {
+ "x": 666.91484191321,
+ "y": 314.1958643764656,
+ "w": 14.498500962929938,
+ "h": 12.630497316989477
+ },
+ "pivot": [
+ -0.12817634914491466,
+ 0.6152234412401882,
+ 1.6466822177405493
+ ],
+ "pickPoints": [
+ {
+ "x": 933.164092394675,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 928.814542105796,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 937.5136426835539,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 933.164092394675,
+ "y": 507.1165384374119
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 507.1165384374119
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 507.1165384374119
+ },
+ {
+ "x": 933.164092394675,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 928.814542105796,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 505.22196383986346
+ },
+ {
+ "x": 933.164092394675,
+ "y": 512.8002622300571
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 512.8002622300571
+ },
+ {
+ "x": 928.814542105796,
+ "y": 512.8002622300571
+ }
+ ],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 4.7683715820306587e-7,
+ 1.629206909017054e-7,
+ -0.9999999999998731
+ ],
+ "workflowCoverage": [
+ {
+ "name": "front-pump-hydraulic-pump",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 7.138234886169582,
+ 3.695554761077557,
+ 7.955160424286649
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 877.15625,
+ "y": 531.3125,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "narration": [
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 116 digital-human video playback",
+ "pass": true,
+ "media": {
+ "width": 480,
+ "height": 640,
+ "duration": 4.96,
+ "currentTime": 0.035407
+ }
+ },
+ {
+ "name": "task 116 step 1 operation 1",
+ "target": "front-pump-hydraulic-pump",
+ "drag": false,
+ "distance": 2.5322003064450387,
+ "projected": {
+ "x": 705.1374278203289,
+ "y": 222.81008281733952,
+ "w": 91.72522226722424,
+ "h": 113.44866354779649
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 116 step 2 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.5322003064450382,
+ "projected": {
+ "x": 709.0006218687124,
+ "y": 263.03238137723895,
+ "w": 83.99875626257528,
+ "h": 33.02359173097284
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 116 step 3 operation 1",
+ "target": "front-pump-ball-valve-switch",
+ "drag": true,
+ "distance": 2.5322003064450382,
+ "projected": {
+ "x": 742.9515540010899,
+ "y": 259.69722037090486,
+ "w": 16.09689199781792,
+ "h": 40.448933045487706
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 116 step 4 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200306445038,
+ "projected": {
+ "x": 706.5903063267405,
+ "y": 244.56976987545553,
+ "w": 88.81938734651817,
+ "h": 69.87239851232502
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 116 step 5 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": true,
+ "distance": 2.5322003064450387,
+ "projected": {
+ "x": 699.1228274833262,
+ "y": 249.20856621347718,
+ "w": 103.75434503334805,
+ "h": 60.651670340400244
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 116 step 5 operation 2",
+ "target": "front-pump-rescue-switch",
+ "drag": true,
+ "distance": 2.5322003064450382,
+ "projected": {
+ "x": 748.0136078101959,
+ "y": 276.39727764862505,
+ "w": 5.972784379609266,
+ "h": 6.274247470104513
+ },
+ "labels": 4
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-005-new-model-20260917/scene-editor.png b/reports/bridge-005-new-model-20260917/scene-editor.png
new file mode 100644
index 0000000..ef9015c
Binary files /dev/null and b/reports/bridge-005-new-model-20260917/scene-editor.png differ
diff --git a/reports/bridge-005-new-model-20260917/task-116-fullscreen.png b/reports/bridge-005-new-model-20260917/task-116-fullscreen.png
new file mode 100644
index 0000000..522cd02
Binary files /dev/null and b/reports/bridge-005-new-model-20260917/task-116-fullscreen.png differ
diff --git a/reports/bridge-005-new-model-20260917/task-116-initial.png b/reports/bridge-005-new-model-20260917/task-116-initial.png
new file mode 100644
index 0000000..639e3ef
Binary files /dev/null and b/reports/bridge-005-new-model-20260917/task-116-initial.png differ
diff --git a/reports/bridge-005-new-model-20260917/task-116-rescue-moving.png b/reports/bridge-005-new-model-20260917/task-116-rescue-moving.png
new file mode 100644
index 0000000..65629ff
Binary files /dev/null and b/reports/bridge-005-new-model-20260917/task-116-rescue-moving.png differ
diff --git a/reports/bridge-005-new-model-20260917/task-116-step-1.png b/reports/bridge-005-new-model-20260917/task-116-step-1.png
new file mode 100644
index 0000000..3b1073e
Binary files /dev/null and b/reports/bridge-005-new-model-20260917/task-116-step-1.png differ
diff --git a/reports/bridge-005-new-model-20260917/task-116-step-2.png b/reports/bridge-005-new-model-20260917/task-116-step-2.png
new file mode 100644
index 0000000..eacbb86
Binary files /dev/null and b/reports/bridge-005-new-model-20260917/task-116-step-2.png differ
diff --git a/reports/bridge-005-new-model-20260917/task-116-step-3.png b/reports/bridge-005-new-model-20260917/task-116-step-3.png
new file mode 100644
index 0000000..45f9659
Binary files /dev/null and b/reports/bridge-005-new-model-20260917/task-116-step-3.png differ
diff --git a/reports/bridge-005-new-model-20260917/task-116-step-4.png b/reports/bridge-005-new-model-20260917/task-116-step-4.png
new file mode 100644
index 0000000..48f96ad
Binary files /dev/null and b/reports/bridge-005-new-model-20260917/task-116-step-4.png differ
diff --git a/reports/bridge-005-new-model-20260917/task-116-step-5.png b/reports/bridge-005-new-model-20260917/task-116-step-5.png
new file mode 100644
index 0000000..fb139ac
Binary files /dev/null and b/reports/bridge-005-new-model-20260917/task-116-step-5.png differ
diff --git a/reports/bridge-005-new-model-20260917/task-116-translucent.png b/reports/bridge-005-new-model-20260917/task-116-translucent.png
new file mode 100644
index 0000000..b04a6df
Binary files /dev/null and b/reports/bridge-005-new-model-20260917/task-116-translucent.png differ
diff --git a/reports/bridge-005-new-model-20260917/task-86-fullscreen.png b/reports/bridge-005-new-model-20260917/task-86-fullscreen.png
new file mode 100644
index 0000000..aa0876c
Binary files /dev/null and b/reports/bridge-005-new-model-20260917/task-86-fullscreen.png differ
diff --git a/reports/bridge-005-new-model-20260917/task-86-initial.png b/reports/bridge-005-new-model-20260917/task-86-initial.png
new file mode 100644
index 0000000..de88713
Binary files /dev/null and b/reports/bridge-005-new-model-20260917/task-86-initial.png differ
diff --git a/reports/bridge-005-new-model-20260917/task-86-rescue-moving.png b/reports/bridge-005-new-model-20260917/task-86-rescue-moving.png
new file mode 100644
index 0000000..d527ee0
Binary files /dev/null and b/reports/bridge-005-new-model-20260917/task-86-rescue-moving.png differ
diff --git a/reports/bridge-005-new-model-20260917/task-86-step-1.png b/reports/bridge-005-new-model-20260917/task-86-step-1.png
new file mode 100644
index 0000000..0bdbec2
Binary files /dev/null and b/reports/bridge-005-new-model-20260917/task-86-step-1.png differ
diff --git a/reports/bridge-005-new-model-20260917/task-86-step-2.png b/reports/bridge-005-new-model-20260917/task-86-step-2.png
new file mode 100644
index 0000000..d25c7c3
Binary files /dev/null and b/reports/bridge-005-new-model-20260917/task-86-step-2.png differ
diff --git a/reports/bridge-005-new-model-20260917/task-86-step-3.png b/reports/bridge-005-new-model-20260917/task-86-step-3.png
new file mode 100644
index 0000000..fd5ac59
Binary files /dev/null and b/reports/bridge-005-new-model-20260917/task-86-step-3.png differ
diff --git a/reports/bridge-005-new-model-20260917/task-86-step-4.png b/reports/bridge-005-new-model-20260917/task-86-step-4.png
new file mode 100644
index 0000000..3c2aab5
Binary files /dev/null and b/reports/bridge-005-new-model-20260917/task-86-step-4.png differ
diff --git a/reports/bridge-005-new-model-20260917/task-86-step-5.png b/reports/bridge-005-new-model-20260917/task-86-step-5.png
new file mode 100644
index 0000000..94e69cb
Binary files /dev/null and b/reports/bridge-005-new-model-20260917/task-86-step-5.png differ
diff --git a/reports/bridge-005-new-model-20260917/task-86-translucent.png b/reports/bridge-005-new-model-20260917/task-86-translucent.png
new file mode 100644
index 0000000..a57ec4b
Binary files /dev/null and b/reports/bridge-005-new-model-20260917/task-86-translucent.png differ
diff --git a/reports/bridge-005-new-model-20260917/training-editor.png b/reports/bridge-005-new-model-20260917/training-editor.png
new file mode 100644
index 0000000..9c36a81
Binary files /dev/null and b/reports/bridge-005-new-model-20260917/training-editor.png differ
diff --git a/reports/bridge-005-preparation-state-20260917/after-fix.json b/reports/bridge-005-preparation-state-20260917/after-fix.json
new file mode 100644
index 0000000..c827505
--- /dev/null
+++ b/reports/bridge-005-preparation-state-20260917/after-fix.json
@@ -0,0 +1,1000 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 116 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "lid": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "evidenceCount": 0,
+ "grounding": null,
+ "modelSources": [
+ {
+ "name": "terrain-005-20260917.glb",
+ "url": "/models/terrain-005-20260917.glb"
+ },
+ {
+ "name": "0916架桥车.glb",
+ "url": "/models/bridge-erector-20260916.glb"
+ }
+ ],
+ "hdr": "venice_sunset_1k",
+ "distance": 11.026959938593922,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 933.2020303264042,
+ "y": 508.95441504276926,
+ "localX": 674.2020303264042,
+ "localY": 320.45441504276926,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935033827385107,
+ 0.13537495848346393,
+ 0.1972360067697554
+ ],
+ "projected": {
+ "x": 666.91484191321,
+ "y": 314.1958643764656,
+ "w": 14.498500962929938,
+ "h": 12.630497316989477
+ },
+ "pivot": [
+ -0.12817634914491466,
+ 0.6152234412401882,
+ 1.6466822177405493
+ ],
+ "pickPoints": [
+ {
+ "x": 933.164092394675,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 928.814542105796,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 937.5136426835539,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 933.164092394675,
+ "y": 507.1165384374119
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 507.1165384374119
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 507.1165384374119
+ },
+ {
+ "x": 933.164092394675,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 928.814542105796,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 505.22196383986346
+ },
+ {
+ "x": 933.164092394675,
+ "y": 512.8002622300571
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 512.8002622300571
+ },
+ {
+ "x": 928.814542105796,
+ "y": 512.8002622300571
+ }
+ ],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 4.7683715820306587e-7,
+ 1.629206909017054e-7,
+ -0.9999999999998731
+ ],
+ "workflowCoverage": [
+ {
+ "name": "front-pump-hydraulic-pump",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 7.138234886169582,
+ 3.695554761077557,
+ 7.955160424286649
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 877.15625,
+ "y": 531.3125,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "narration": [
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 116 step 1 operation 1",
+ "target": "front-pump-hydraulic-pump",
+ "drag": false,
+ "distance": 2.5322003064450387,
+ "projected": {
+ "x": 705.1374278203289,
+ "y": 222.81008281733952,
+ "w": 91.72522226722424,
+ "h": 113.44866354779649
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 116 step 2 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.5322003064450382,
+ "projected": {
+ "x": 709.0006218687124,
+ "y": 263.03238137723895,
+ "w": 83.99875626257528,
+ "h": 33.02359173097284
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 116 step 3 operation 1",
+ "target": "front-pump-ball-valve-switch",
+ "drag": true,
+ "distance": 2.5322003064450382,
+ "projected": {
+ "x": 742.9515540010899,
+ "y": 259.69722037090486,
+ "w": 16.09689199781792,
+ "h": 40.448933045487706
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 116 step 4 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200306445038,
+ "projected": {
+ "x": 706.5903063267405,
+ "y": 244.56976987545553,
+ "w": 88.81938734651817,
+ "h": 69.87239851232502
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 116 step 5 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": true,
+ "distance": 2.5322003064450387,
+ "projected": {
+ "x": 699.1228274833262,
+ "y": 249.20856621347718,
+ "w": 103.75434503334805,
+ "h": 60.651670340400244
+ },
+ "labels": 4
+ },
+ {
+ "name": "late preparation: rejected switch resets only its own motion; open lid survives repeated saves",
+ "pass": true,
+ "lid": {
+ "position": [
+ 1.1102230246251568e-16,
+ -5.551115123125784e-17,
+ 1.1102230246251568e-16
+ ],
+ "quaternion": [
+ -1.2657839478910767e-17,
+ 1.1102230246251565e-16,
+ -0.7660444431189779,
+ 0.6427876096865394
+ ]
+ }
+ },
+ {
+ "name": "task 116 step 5 operation 2",
+ "target": "front-pump-rescue-switch",
+ "drag": true,
+ "distance": 2.5322003064450382,
+ "projected": {
+ "x": 748.0136078101959,
+ "y": 276.39727764862505,
+ "w": 5.972784379609266,
+ "h": 6.274247470104513
+ },
+ "labels": 4
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/116/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-005-preparation-state-20260917/before-fix.json b/reports/bridge-005-preparation-state-20260917/before-fix.json
new file mode 100644
index 0000000..caa4ae4
--- /dev/null
+++ b/reports/bridge-005-preparation-state-20260917/before-fix.json
@@ -0,0 +1,1829 @@
+{
+ "pass": false,
+ "error": "preparation rejection must keep the already opened lid in place\n+ actual - expected\n\n {\n position: [\n+ 0,\n+ 0,\n+ 0\n- 1.1102230246251568e-16,\n- -5.551115123125784e-17,\n- 1.1102230246251568e-16\n ],\n quaternion: [\n+ 0,\n+ 0,\n+ 0,\n+ 1\n- -1.2657839478910767e-17,\n- 1.1102230246251565e-16,\n- -0.7660444431189779,\n- 0.6427876096865394\n ]\n }\n",
+ "checks": [
+ {
+ "name": "task 116 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "lid": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "evidenceCount": 0,
+ "grounding": null,
+ "modelSources": [
+ {
+ "name": "terrain-005-20260917.glb",
+ "url": "/models/terrain-005-20260917.glb"
+ },
+ {
+ "name": "0916架桥车.glb",
+ "url": "/models/bridge-erector-20260916.glb"
+ }
+ ],
+ "hdr": "venice_sunset_1k",
+ "distance": 11.026959938593922,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 933.2020303264042,
+ "y": 508.95441504276926,
+ "localX": 674.2020303264042,
+ "localY": 320.45441504276926,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935033827385107,
+ 0.13537495848346393,
+ 0.1972360067697554
+ ],
+ "projected": {
+ "x": 666.91484191321,
+ "y": 314.1958643764656,
+ "w": 14.498500962929938,
+ "h": 12.630497316989477
+ },
+ "pivot": [
+ -0.12817634914491466,
+ 0.6152234412401882,
+ 1.6466822177405493
+ ],
+ "pickPoints": [
+ {
+ "x": 933.164092394675,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 928.814542105796,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 937.5136426835539,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 933.164092394675,
+ "y": 507.1165384374119
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 507.1165384374119
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 507.1165384374119
+ },
+ {
+ "x": 933.164092394675,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 928.814542105796,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 505.22196383986346
+ },
+ {
+ "x": 933.164092394675,
+ "y": 512.8002622300571
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 512.8002622300571
+ },
+ {
+ "x": 928.814542105796,
+ "y": 512.8002622300571
+ }
+ ],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 4.7683715820306587e-7,
+ 1.629206909017054e-7,
+ -0.9999999999998731
+ ],
+ "workflowCoverage": [
+ {
+ "name": "front-pump-hydraulic-pump",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 7.138234886169582,
+ 3.695554761077557,
+ 7.955160424286649
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 877.15625,
+ "y": 531.3125,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "narration": [
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 116 step 1 operation 1",
+ "target": "front-pump-hydraulic-pump",
+ "drag": false,
+ "distance": 2.5322003064450387,
+ "projected": {
+ "x": 705.1374278203289,
+ "y": 222.81008281733952,
+ "w": 91.72522226722424,
+ "h": 113.44866354779649
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 116 step 2 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.5322003064450382,
+ "projected": {
+ "x": 709.0006218687124,
+ "y": 263.03238137723895,
+ "w": 83.99875626257528,
+ "h": 33.02359173097284
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 116 step 3 operation 1",
+ "target": "front-pump-ball-valve-switch",
+ "drag": true,
+ "distance": 2.5322003064450382,
+ "projected": {
+ "x": 742.9515540010899,
+ "y": 259.69722037090486,
+ "w": 16.09689199781792,
+ "h": 40.448933045487706
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 116 step 4 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200306445038,
+ "projected": {
+ "x": 706.5903063267405,
+ "y": 244.56976987545553,
+ "w": 88.81938734651817,
+ "h": 69.87239851232502
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 116 step 5 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": true,
+ "distance": 2.5322003064450387,
+ "projected": {
+ "x": 699.1228274833262,
+ "y": 249.20856621347718,
+ "w": 103.75434503334805,
+ "h": 60.651670340400244
+ },
+ "labels": 4
+ }
+ ],
+ "state": {
+ "id": "front-pump-rescue-switch",
+ "step": 4,
+ "operation": 1,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "lid": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "evidenceCount": 1,
+ "grounding": null,
+ "modelSources": [
+ {
+ "name": "terrain-005-20260917.glb",
+ "url": "/models/terrain-005-20260917.glb"
+ },
+ {
+ "name": "0916架桥车.glb",
+ "url": "/models/bridge-erector-20260916.glb"
+ }
+ ],
+ "hdr": "venice_sunset_1k",
+ "distance": 2.5322003064450382,
+ "zoom": 4.636341007568553,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 1010.0000000000005,
+ "y": 468.0344013836773,
+ "localX": 751.0000000000005,
+ "localY": 279.5344013836773,
+ "visible": true
+ },
+ "bounds": [
+ 0.010677420630504031,
+ 0.005319887227886122,
+ 0.0050595282106887796
+ ],
+ "projected": {
+ "x": 748.0136078101959,
+ "y": 276.39727764862505,
+ "w": 5.972784379609266,
+ "h": 6.274247470104513
+ },
+ "pivot": [
+ -0.5396993251077689,
+ 0.8500922114610858,
+ 0.535302162949248
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": [
+ -0.5503767457382729,
+ 0.8500922114610858,
+ 0.535302162949248
+ ],
+ "front": [
+ -1,
+ 2.568113739801058e-16,
+ 3.96331642134641e-33
+ ],
+ "workflowCoverage": [
+ {
+ "name": "front-pump-hydraulic-pump",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ -3.077238341868059,
+ 0.8500922114610865,
+ 0.5353021629492482
+ ],
+ "target": [
+ -0.5450380354230209,
+ 0.8500922114610858,
+ 0.535302162949248
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "球阀开关",
+ "x": 1227,
+ "y": 392.5,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-ball-valve-switch"
+ },
+ {
+ "text": "辅助控制盒",
+ "x": 889.265625,
+ "y": 530.296875,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-aux-control-box"
+ },
+ {
+ "text": "辅助控制盒盖",
+ "x": 888.109375,
+ "y": 333.015625,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-aux-control-box-cover"
+ },
+ {
+ "text": "聚焦 · 互救开关",
+ "x": 1227,
+ "y": 468.5,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-rescue-switch"
+ }
+ ],
+ "narration": [
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-rescue-switch",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "往上搬",
+ "index": 1,
+ "kind": "rotate"
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate"
+ ],
+ "networkErrors": [
+ {
+ "path": "http://127.0.0.1:6180/7ebeefc4-34cf-456f-a698-3653d136372a",
+ "error": "net::ERR_ABORTED"
+ }
+ ],
+ "pending": []
+}
\ No newline at end of file
diff --git a/reports/bridge-005-preparation-state-20260917/failure.png b/reports/bridge-005-preparation-state-20260917/failure.png
new file mode 100644
index 0000000..e293c9c
Binary files /dev/null and b/reports/bridge-005-preparation-state-20260917/failure.png differ
diff --git a/reports/bridge-005-preparation-state-20260917/index.html b/reports/bridge-005-preparation-state-20260917/index.html
new file mode 100644
index 0000000..5c5fc8a
--- /dev/null
+++ b/reports/bridge-005-preparation-state-20260917/index.html
@@ -0,0 +1,21 @@
+
+
+005 操作准备与盒盖状态回归
+
+005 操作准备与盒盖状态回归
+环境:本地 127.0.0.1:6180、局域网 192.168.31.168:6180,现有 /api 网关代理。账号类型:管理员,教员预览。
+原因:准备校验失败会恢复模型,但未恢复当前步骤已完成的机构动作。005 没有补充操作台,原恢复逻辑因此跳过了已打开的盒盖。
+修复:恢复当前步骤已完成的动作不再依赖补充操作台。拒绝末项操作时,仅回退该项动作,保留开盖状态和动作进度。
+
+执行:node tools/bridge-controls-live.mjs,新任务启用 TASK_IDS=116 EXECUTE=1 PREPARE_SAFETY=1 LATE_PREPARATION=1 MANUAL_OCCLUSION_TOOLS=1;原有任务设置 TASK_IDS=86,不启用 LATE_PREPARATION(原任务没有该准备拦截)。
+前端验证:node scripts/virtual-training-formal-route.contract.test.mjs、pnpm run build。本次没有创建任务、发布新版本或写入学员成绩;预览准备信息仅用于本次预览,测试只留下本目录报告与截图。
+保存准备后,盒盖保持打开
+
+继续操作互救开关,完成第 5 步
+
+
diff --git a/reports/bridge-005-preparation-state-20260917/lan-smoke.json b/reports/bridge-005-preparation-state-20260917/lan-smoke.json
new file mode 100644
index 0000000..3f13980
--- /dev/null
+++ b/reports/bridge-005-preparation-state-20260917/lan-smoke.json
@@ -0,0 +1,899 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 116 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "lid": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "evidenceCount": 0,
+ "grounding": null,
+ "modelSources": [
+ {
+ "name": "terrain-005-20260917.glb",
+ "url": "/models/terrain-005-20260917.glb"
+ },
+ {
+ "name": "0916架桥车.glb",
+ "url": "/models/bridge-erector-20260916.glb"
+ }
+ ],
+ "hdr": "venice_sunset_1k",
+ "distance": 11.026959938593922,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 933.2020303264042,
+ "y": 508.95441504276926,
+ "localX": 674.2020303264042,
+ "localY": 320.45441504276926,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935033827385107,
+ 0.13537495848346393,
+ 0.1972360067697554
+ ],
+ "projected": {
+ "x": 666.91484191321,
+ "y": 314.1958643764656,
+ "w": 14.498500962929938,
+ "h": 12.630497316989477
+ },
+ "pivot": [
+ -0.12817634914491466,
+ 0.6152234412401882,
+ 1.6466822177405493
+ ],
+ "pickPoints": [
+ {
+ "x": 933.164092394675,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 928.814542105796,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 937.5136426835539,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 933.164092394675,
+ "y": 507.1165384374119
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 507.1165384374119
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 507.1165384374119
+ },
+ {
+ "x": 933.164092394675,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 928.814542105796,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 505.22196383986346
+ },
+ {
+ "x": 933.164092394675,
+ "y": 512.8002622300571
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 512.8002622300571
+ },
+ {
+ "x": 928.814542105796,
+ "y": 512.8002622300571
+ }
+ ],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 4.7683715820306587e-7,
+ 1.629206909017054e-7,
+ -0.9999999999998731
+ ],
+ "workflowCoverage": [
+ {
+ "name": "front-pump-hydraulic-pump",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 7.138234886169582,
+ 3.695554761077557,
+ 7.955160424286649
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 877.15625,
+ "y": 531.3125,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "narration": [
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ }
+ ],
+ "errors": [],
+ "writes": []
+}
\ No newline at end of file
diff --git a/reports/bridge-005-preparation-state-20260917/original-005-regression.json b/reports/bridge-005-preparation-state-20260917/original-005-regression.json
new file mode 100644
index 0000000..13936d0
--- /dev/null
+++ b/reports/bridge-005-preparation-state-20260917/original-005-regression.json
@@ -0,0 +1,468 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 86 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "lid": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "evidenceCount": 0,
+ "grounding": null,
+ "modelSources": [
+ {
+ "name": "地形.glb",
+ "url": "/models/地形.glb"
+ },
+ {
+ "name": "步骤模型.glb",
+ "url": "/models/步骤模型.glb"
+ }
+ ],
+ "hdr": "venice_sunset_1k",
+ "distance": 11.052363924053688,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 937.1159093565705,
+ "y": 510.8943121357542,
+ "localX": 678.1159093565705,
+ "localY": 322.3943121357542,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935024518472723,
+ 0.13537492625037484,
+ 0.19723593501664283
+ ],
+ "projected": {
+ "x": 670.919240275776,
+ "y": 316.01579133562,
+ "w": 14.309325962616413,
+ "h": 12.873100207788639
+ },
+ "pivot": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 6.098689649701348e-32,
+ 2.5291018817332963e-16,
+ -1
+ ],
+ "workflowCoverage": [
+ {
+ "name": "front-pump-hydraulic-pump",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 6.688026389433602,
+ 3.8228247388783156,
+ 8.328485692502216
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 881.0625,
+ "y": 533.375,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "narration": [
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 86 step 1 operation 1",
+ "target": "front-pump-hydraulic-pump",
+ "drag": false,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 705.1374098658791,
+ "y": 222.81006115045116,
+ "w": 91.72518026824184,
+ "h": 113.44868046645237
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 86 internal target inspected with explicit translucent tool",
+ "targetId": "front-pump-pto-switch",
+ "pass": true
+ },
+ {
+ "name": "task 86 step 2 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 709.0006218750913,
+ "y": 263.03238137674134,
+ "w": 83.99875624981757,
+ "h": 33.023591730971475
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 86 step 3 operation 1",
+ "target": "front-pump-ball-valve-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 742.9515028622343,
+ "y": 259.69721416379815,
+ "w": 16.096994275529482,
+ "h": 40.44894573262036
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 86 step 4 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 706.5903063366927,
+ "y": 244.5697698769074,
+ "w": 88.81938732661342,
+ "h": 69.87239851232039
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 86 step 5 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 699.1228274926349,
+ "y": 249.2085662189188,
+ "w": 103.7543450147308,
+ "h": 60.65167032951712
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 86 step 5 operation 2",
+ "target": "front-pump-rescue-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 748.0136091802624,
+ "y": 276.397277651574,
+ "w": 5.972781639476352,
+ "h": 6.274247464206724
+ },
+ "labels": 4
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-005-preparation-state-20260917/task-116-fullscreen.png b/reports/bridge-005-preparation-state-20260917/task-116-fullscreen.png
new file mode 100644
index 0000000..767b7c7
Binary files /dev/null and b/reports/bridge-005-preparation-state-20260917/task-116-fullscreen.png differ
diff --git a/reports/bridge-005-preparation-state-20260917/task-116-initial.png b/reports/bridge-005-preparation-state-20260917/task-116-initial.png
new file mode 100644
index 0000000..5893417
Binary files /dev/null and b/reports/bridge-005-preparation-state-20260917/task-116-initial.png differ
diff --git a/reports/bridge-005-preparation-state-20260917/task-116-late-preparation-lid-open.png b/reports/bridge-005-preparation-state-20260917/task-116-late-preparation-lid-open.png
new file mode 100644
index 0000000..13cfd66
Binary files /dev/null and b/reports/bridge-005-preparation-state-20260917/task-116-late-preparation-lid-open.png differ
diff --git a/reports/bridge-005-preparation-state-20260917/task-116-rescue-moving.png b/reports/bridge-005-preparation-state-20260917/task-116-rescue-moving.png
new file mode 100644
index 0000000..d745b77
Binary files /dev/null and b/reports/bridge-005-preparation-state-20260917/task-116-rescue-moving.png differ
diff --git a/reports/bridge-005-preparation-state-20260917/task-116-step-1.png b/reports/bridge-005-preparation-state-20260917/task-116-step-1.png
new file mode 100644
index 0000000..c2c9815
Binary files /dev/null and b/reports/bridge-005-preparation-state-20260917/task-116-step-1.png differ
diff --git a/reports/bridge-005-preparation-state-20260917/task-116-step-2.png b/reports/bridge-005-preparation-state-20260917/task-116-step-2.png
new file mode 100644
index 0000000..43428e8
Binary files /dev/null and b/reports/bridge-005-preparation-state-20260917/task-116-step-2.png differ
diff --git a/reports/bridge-005-preparation-state-20260917/task-116-step-3.png b/reports/bridge-005-preparation-state-20260917/task-116-step-3.png
new file mode 100644
index 0000000..878a478
Binary files /dev/null and b/reports/bridge-005-preparation-state-20260917/task-116-step-3.png differ
diff --git a/reports/bridge-005-preparation-state-20260917/task-116-step-4.png b/reports/bridge-005-preparation-state-20260917/task-116-step-4.png
new file mode 100644
index 0000000..f0d4580
Binary files /dev/null and b/reports/bridge-005-preparation-state-20260917/task-116-step-4.png differ
diff --git a/reports/bridge-005-preparation-state-20260917/task-116-step-5.png b/reports/bridge-005-preparation-state-20260917/task-116-step-5.png
new file mode 100644
index 0000000..c1600f0
Binary files /dev/null and b/reports/bridge-005-preparation-state-20260917/task-116-step-5.png differ
diff --git a/reports/bridge-005-preparation-state-20260917/task-116-translucent.png b/reports/bridge-005-preparation-state-20260917/task-116-translucent.png
new file mode 100644
index 0000000..db506c0
Binary files /dev/null and b/reports/bridge-005-preparation-state-20260917/task-116-translucent.png differ
diff --git a/reports/bridge-005-preparation-state-20260917/task-86-fullscreen.png b/reports/bridge-005-preparation-state-20260917/task-86-fullscreen.png
new file mode 100644
index 0000000..aa0876c
Binary files /dev/null and b/reports/bridge-005-preparation-state-20260917/task-86-fullscreen.png differ
diff --git a/reports/bridge-005-preparation-state-20260917/task-86-initial.png b/reports/bridge-005-preparation-state-20260917/task-86-initial.png
new file mode 100644
index 0000000..f4b5b8a
Binary files /dev/null and b/reports/bridge-005-preparation-state-20260917/task-86-initial.png differ
diff --git a/reports/bridge-005-preparation-state-20260917/task-86-rescue-moving.png b/reports/bridge-005-preparation-state-20260917/task-86-rescue-moving.png
new file mode 100644
index 0000000..f978e2c
Binary files /dev/null and b/reports/bridge-005-preparation-state-20260917/task-86-rescue-moving.png differ
diff --git a/reports/bridge-005-preparation-state-20260917/task-86-step-1.png b/reports/bridge-005-preparation-state-20260917/task-86-step-1.png
new file mode 100644
index 0000000..0bdbec2
Binary files /dev/null and b/reports/bridge-005-preparation-state-20260917/task-86-step-1.png differ
diff --git a/reports/bridge-005-preparation-state-20260917/task-86-step-2.png b/reports/bridge-005-preparation-state-20260917/task-86-step-2.png
new file mode 100644
index 0000000..d25c7c3
Binary files /dev/null and b/reports/bridge-005-preparation-state-20260917/task-86-step-2.png differ
diff --git a/reports/bridge-005-preparation-state-20260917/task-86-step-3.png b/reports/bridge-005-preparation-state-20260917/task-86-step-3.png
new file mode 100644
index 0000000..04979e4
Binary files /dev/null and b/reports/bridge-005-preparation-state-20260917/task-86-step-3.png differ
diff --git a/reports/bridge-005-preparation-state-20260917/task-86-step-4.png b/reports/bridge-005-preparation-state-20260917/task-86-step-4.png
new file mode 100644
index 0000000..19d5686
Binary files /dev/null and b/reports/bridge-005-preparation-state-20260917/task-86-step-4.png differ
diff --git a/reports/bridge-005-preparation-state-20260917/task-86-step-5.png b/reports/bridge-005-preparation-state-20260917/task-86-step-5.png
new file mode 100644
index 0000000..3709333
Binary files /dev/null and b/reports/bridge-005-preparation-state-20260917/task-86-step-5.png differ
diff --git a/reports/bridge-005-preparation-state-20260917/task-86-translucent.png b/reports/bridge-005-preparation-state-20260917/task-86-translucent.png
new file mode 100644
index 0000000..a57ec4b
Binary files /dev/null and b/reports/bridge-005-preparation-state-20260917/task-86-translucent.png differ
diff --git a/reports/bridge-controls-lan-20260915/desktop-1920.json b/reports/bridge-controls-lan-20260915/desktop-1920.json
new file mode 100644
index 0000000..e64f25a
--- /dev/null
+++ b/reports/bridge-controls-lan-20260915/desktop-1920.json
@@ -0,0 +1,420 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 86 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 14.874106217835347,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 1192.4387304444099,
+ "y": 673.8662081545585,
+ "localX": 705.4387304444099,
+ "localY": 485.3662081545585,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935024518472723,
+ 0.13537492625037484,
+ 0.19723593501664283
+ ],
+ "projected": {
+ "x": 697.3376404378632,
+ "y": 478.1544748678107,
+ "w": 16.13367862574239,
+ "h": 14.518122421361682
+ },
+ "pivot": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 3.809551553384728e-17,
+ 0.1483404529302444,
+ 0.9889363528682976
+ ],
+ "workflowCoverage": [
+ {
+ "name": "front-pump-hydraulic-pump",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 9.000645978334326,
+ 4.804597205864472,
+ 11.208351595661608
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 1136.390625,
+ "y": 697.171875,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "non-workflow body click/orbit, selection-highlight restoration, Escape fullscreen exit",
+ "pass": true
+ },
+ {
+ "name": "task 86 step 1 operation 1",
+ "target": "front-pump-hydraulic-pump",
+ "drag": false,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 1006.5574617122254,
+ "y": 358.3218301275678,
+ "w": 112.88508030154753,
+ "h": 161.35192724925668
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 86 step 2 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 1010.5698649697113,
+ "y": 415.602962690668,
+ "w": 104.86027006057748,
+ "h": 41.23945949997045
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 86 step 3 operation 1",
+ "target": "front-pump-ball-valve-switch",
+ "drag": true,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 993.9964366662955,
+ "y": 391.9054482222442,
+ "w": 138.47879781452934,
+ "h": 88.86437231256082
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 86 step 4 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 1007.5609354382312,
+ "y": 392.54707811536866,
+ "w": 110.8781291235365,
+ "h": 87.25580100701745
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 86 step 5 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 998.2388706456198,
+ "y": 398.33995053922354,
+ "w": 129.5222587087609,
+ "h": 75.74106785646427
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 86 step 5 operation 2",
+ "target": "front-pump-rescue-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 1059.2719239921507,
+ "y": 432.29288252547366,
+ "w": 7.4561520156998995,
+ "h": 7.835203883963857
+ },
+ "labels": 4
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/86/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-controls-lan-20260915/free-inspection-controls.png b/reports/bridge-controls-lan-20260915/free-inspection-controls.png
new file mode 100644
index 0000000..97e1132
Binary files /dev/null and b/reports/bridge-controls-lan-20260915/free-inspection-controls.png differ
diff --git a/reports/bridge-controls-lan-20260915/task-86-fullscreen.png b/reports/bridge-controls-lan-20260915/task-86-fullscreen.png
new file mode 100644
index 0000000..d8dd704
Binary files /dev/null and b/reports/bridge-controls-lan-20260915/task-86-fullscreen.png differ
diff --git a/reports/bridge-controls-lan-20260915/task-86-initial.png b/reports/bridge-controls-lan-20260915/task-86-initial.png
new file mode 100644
index 0000000..037a2eb
Binary files /dev/null and b/reports/bridge-controls-lan-20260915/task-86-initial.png differ
diff --git a/reports/bridge-controls-lan-20260915/task-86-rescue-moving.png b/reports/bridge-controls-lan-20260915/task-86-rescue-moving.png
new file mode 100644
index 0000000..70686ad
Binary files /dev/null and b/reports/bridge-controls-lan-20260915/task-86-rescue-moving.png differ
diff --git a/reports/bridge-controls-lan-20260915/task-86-step-1.png b/reports/bridge-controls-lan-20260915/task-86-step-1.png
new file mode 100644
index 0000000..741dca5
Binary files /dev/null and b/reports/bridge-controls-lan-20260915/task-86-step-1.png differ
diff --git a/reports/bridge-controls-lan-20260915/task-86-step-2.png b/reports/bridge-controls-lan-20260915/task-86-step-2.png
new file mode 100644
index 0000000..cdc5931
Binary files /dev/null and b/reports/bridge-controls-lan-20260915/task-86-step-2.png differ
diff --git a/reports/bridge-controls-lan-20260915/task-86-step-3.png b/reports/bridge-controls-lan-20260915/task-86-step-3.png
new file mode 100644
index 0000000..72deb62
Binary files /dev/null and b/reports/bridge-controls-lan-20260915/task-86-step-3.png differ
diff --git a/reports/bridge-controls-lan-20260915/task-86-step-4.png b/reports/bridge-controls-lan-20260915/task-86-step-4.png
new file mode 100644
index 0000000..56a66b1
Binary files /dev/null and b/reports/bridge-controls-lan-20260915/task-86-step-4.png differ
diff --git a/reports/bridge-controls-lan-20260915/task-86-step-5.png b/reports/bridge-controls-lan-20260915/task-86-step-5.png
new file mode 100644
index 0000000..b985e8c
Binary files /dev/null and b/reports/bridge-controls-lan-20260915/task-86-step-5.png differ
diff --git a/reports/bridge-controls-lan-20260915/task-86-translucent.png b/reports/bridge-controls-lan-20260915/task-86-translucent.png
new file mode 100644
index 0000000..5fae3c7
Binary files /dev/null and b/reports/bridge-controls-lan-20260915/task-86-translucent.png differ
diff --git a/reports/bridge-controls-review-20260915/failure.png b/reports/bridge-controls-review-20260915/failure.png
new file mode 100644
index 0000000..f26e312
Binary files /dev/null and b/reports/bridge-controls-review-20260915/failure.png differ
diff --git a/reports/bridge-controls-review-20260915/free-inspection-controls.png b/reports/bridge-controls-review-20260915/free-inspection-controls.png
new file mode 100644
index 0000000..fdc57c7
Binary files /dev/null and b/reports/bridge-controls-review-20260915/free-inspection-controls.png differ
diff --git a/reports/bridge-controls-review-20260915/geometry.json b/reports/bridge-controls-review-20260915/geometry.json
new file mode 100644
index 0000000..0c269ca
--- /dev/null
+++ b/reports/bridge-controls-review-20260915/geometry.json
@@ -0,0 +1,572 @@
+[
+ {
+ "id": "front-pump-hydraulic-pump",
+ "center": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "size": [
+ 0.10935024518472723,
+ 0.13537492625037484,
+ 0.19723593501664283
+ ],
+ "meshes": [
+ {
+ "name": "1液压泵",
+ "min": [
+ -5.627506732940674,
+ -10.150371551513672,
+ -6.96681547164917
+ ],
+ "max": [
+ 5.627501487731934,
+ 10.150379180908203,
+ 6.966814994812012
+ ],
+ "world": [
+ 0.00971569660730042,
+ -2.495101394894673e-18,
+ -3.8506379908533354e-35,
+ 0,
+ 5.9253018338581566e-34,
+ 2.457198657187329e-18,
+ -0.00971569660730042,
+ 0,
+ 2.495101394894673e-18,
+ 0.00971569660730042,
+ 2.457198657187329e-18,
+ 0,
+ -0.1281765338189401,
+ 0.6146985404177524,
+ 1.646681708829085,
+ 1
+ ]
+ }
+ ]
+ },
+ {
+ "id": "front-pump-power-take-off",
+ "center": [
+ 0.3893360534200241,
+ 0.8373777695656721,
+ 3.3942996223374293
+ ],
+ "size": [
+ 0.20683303181184232,
+ 0.07392656143972476,
+ 0.13482467408308363
+ ],
+ "meshes": [
+ {
+ "name": "2取力器_1",
+ "min": [
+ -4.9937744140625,
+ 1.667022705078125,
+ 1.4207572937011719
+ ],
+ "max": [
+ 2.079376220703125,
+ 5.003475189208984,
+ 1.8463554382324219
+ ],
+ "world": [
+ 0.00971569660730042,
+ -2.495101394894673e-18,
+ -3.8506379908533354e-35,
+ 0,
+ 5.9253018338581566e-34,
+ 2.457198657187329e-18,
+ -0.00971569660730042,
+ 0,
+ 2.495101394894673e-18,
+ 0.00971569660730042,
+ 2.457198657187329e-18,
+ 0,
+ 0.3893356086707287,
+ 0.8373777510344516,
+ 3.3942997520559737,
+ 1
+ ]
+ },
+ {
+ "name": "2取力器_2",
+ "min": [
+ -10.64422607421875,
+ -6.938484191894531,
+ -3.8044891357421875
+ ],
+ "max": [
+ 10.644317626953125,
+ 6.938510894775391,
+ 3.804492950439453
+ ],
+ "world": [
+ 0.00971569660730042,
+ -2.495101394894673e-18,
+ -3.8506379908533354e-35,
+ 0,
+ 5.9253018338581566e-34,
+ 2.457198657187329e-18,
+ -0.00971569660730042,
+ 0,
+ 2.495101394894673e-18,
+ 0.00971569660730042,
+ 2.457198657187329e-18,
+ 0,
+ 0.3893356086707287,
+ 0.8373777510344516,
+ 3.3942997520559737,
+ 1
+ ]
+ }
+ ]
+ },
+ {
+ "id": "front-pump-pto-switch",
+ "center": [
+ 0.43976172852999673,
+ 0.853700596845838,
+ 3.3673047484807457
+ ],
+ "size": [
+ 0.009197118928889525,
+ 0.03069672608554319,
+ 0.08083492636971545
+ ],
+ "meshes": [
+ {
+ "name": "2取力器开关_1",
+ "min": [
+ -0.21282958984375,
+ -1.1114501953125,
+ -0.1486988067626953
+ ],
+ "max": [
+ 0.212860107421875,
+ 2.2250022888183594,
+ 0.2768993377685547
+ ],
+ "world": [
+ 0.00971569660730042,
+ -2.495101394894673e-18,
+ -3.8506379908533354e-35,
+ 0,
+ 5.9253018338581566e-34,
+ 2.457198657187329e-18,
+ -0.00971569660730042,
+ 0,
+ 2.495101394894673e-18,
+ 0.00971569660730042,
+ 2.457198657187329e-18,
+ 0,
+ 0.4397615802802316,
+ 0.8537005875802276,
+ 3.3673049523241727,
+ 1
+ ]
+ },
+ {
+ "name": "2取力器开关_2",
+ "min": [
+ -0.473297119140625,
+ -4.159996032714844,
+ -1.5797481536865234
+ ],
+ "max": [
+ 0.47332763671875,
+ 4.160037994384766,
+ 1.5797500610351562
+ ],
+ "world": [
+ 0.00971569660730042,
+ -2.495101394894673e-18,
+ -3.8506379908533354e-35,
+ 0,
+ 5.9253018338581566e-34,
+ 2.457198657187329e-18,
+ -0.00971569660730042,
+ 0,
+ 2.495101394894673e-18,
+ 0.00971569660730042,
+ 2.457198657187329e-18,
+ 0,
+ 0.4397615802802316,
+ 0.8537005875802276,
+ 3.3673049523241727,
+ 1
+ ]
+ }
+ ]
+ },
+ {
+ "id": "front-pump-ball-valve-switch",
+ "center": [
+ 0.6509146102478468,
+ 0.939124205539397,
+ 0.05061613899571812
+ ],
+ "size": [
+ 0.10196752270157927,
+ 0.015334603611445896,
+ 0.013650838372806132
+ ],
+ "meshes": [
+ {
+ "name": "3球阀开关",
+ "min": [
+ -5.247566223144531,
+ -0.702484130859375,
+ -0.7891693115234375
+ ],
+ "max": [
+ 5.247566223144531,
+ 0.702545166015625,
+ 0.7891635894775391
+ ],
+ "world": [
+ 0.00971569660730042,
+ -2.495101394894673e-18,
+ -3.8506379908533354e-35,
+ 0,
+ 5.9253018338581566e-34,
+ 2.457198657187329e-18,
+ -0.00971569660730042,
+ 0,
+ 2.495101394894673e-18,
+ 0.00971569660730042,
+ 2.457198657187329e-18,
+ 0,
+ 0.6509146102478468,
+ 0.939124233336228,
+ 0.05061643549524837,
+ 1
+ ]
+ }
+ ]
+ },
+ {
+ "id": "front-pump-aux-control-box",
+ "center": [
+ -0.533278441888853,
+ 0.8669814895117853,
+ 0.48047321732715076
+ ],
+ "size": [
+ 0.034196714253358795,
+ 0.11223184072875447,
+ 0.19394078748718618
+ ],
+ "meshes": [
+ {
+ "name": "5辅助控制盒_1",
+ "min": [
+ -0.63088059425354,
+ -8.77234172821045,
+ -4.757503032684326
+ ],
+ "max": [
+ -0.5908687114715576,
+ 8.568485260009766,
+ 4.607171058654785
+ ],
+ "world": [
+ 0.00971569660730042,
+ -2.495101394894673e-18,
+ -3.8506379908533354e-35,
+ 0,
+ 5.9253018338581566e-34,
+ 2.457198657187329e-18,
+ -0.00971569660730042,
+ 0,
+ 2.495101394894673e-18,
+ 0.00971569660730042,
+ 2.457198657187329e-18,
+ 0,
+ -0.5332784586827717,
+ 0.8669814871953827,
+ 0.48047322659276104,
+ 1
+ ]
+ },
+ {
+ "name": "5辅助控制盒_2",
+ "min": [
+ -1.619112253189087,
+ -9.980795860290527,
+ -5.775799751281738
+ ],
+ "max": [
+ 1.7598711252212524,
+ 9.98079776763916,
+ 5.7758002281188965
+ ],
+ "world": [
+ 0.00971569660730042,
+ -2.495101394894673e-18,
+ -3.8506379908533354e-35,
+ 0,
+ 5.9253018338581566e-34,
+ 2.457198657187329e-18,
+ -0.00971569660730042,
+ 0,
+ 2.495101394894673e-18,
+ 0.00971569660730042,
+ 2.457198657187329e-18,
+ 0,
+ -0.5332784586827717,
+ 0.8669814871953827,
+ 0.48047322659276104,
+ 1
+ ]
+ },
+ {
+ "name": "5辅助控制盒_3",
+ "min": [
+ -0.6280865669250488,
+ -7.29862117767334,
+ -3.9129245281219482
+ ],
+ "max": [
+ -0.6280844211578369,
+ 4.369454383850098,
+ 3.943485736846924
+ ],
+ "world": [
+ 0.00971569660730042,
+ -2.495101394894673e-18,
+ -3.8506379908533354e-35,
+ 0,
+ 5.9253018338581566e-34,
+ 2.457198657187329e-18,
+ -0.00971569660730042,
+ 0,
+ 2.495101394894673e-18,
+ 0.00971569660730042,
+ 2.457198657187329e-18,
+ 0,
+ -0.5332784586827717,
+ 0.8669814871953827,
+ 0.48047322659276104,
+ 1
+ ]
+ },
+ {
+ "name": "5辅助控制盒_4",
+ "min": [
+ -1.7598676681518555,
+ -6.252561092376709,
+ -2.564114570617676
+ ],
+ "max": [
+ -0.471358060836792,
+ 4.396035671234131,
+ 3.0141565799713135
+ ],
+ "world": [
+ 0.00971569660730042,
+ -2.495101394894673e-18,
+ -3.8506379908533354e-35,
+ 0,
+ 5.9253018338581566e-34,
+ 2.457198657187329e-18,
+ -0.00971569660730042,
+ 0,
+ 2.495101394894673e-18,
+ 0.00971569660730042,
+ 2.457198657187329e-18,
+ 0,
+ -0.5332784586827717,
+ 0.8669814871953827,
+ 0.48047322659276104,
+ 1
+ ]
+ },
+ {
+ "name": "5辅助控制盒_5",
+ "min": [
+ -1.2465951442718506,
+ -6.19912052154541,
+ -2.300858974456787
+ ],
+ "max": [
+ -0.6108660697937012,
+ 4.241911888122559,
+ 3.0141565799713135
+ ],
+ "world": [
+ 0.00971569660730042,
+ -2.495101394894673e-18,
+ -3.8506379908533354e-35,
+ 0,
+ 5.9253018338581566e-34,
+ 2.457198657187329e-18,
+ -0.00971569660730042,
+ 0,
+ 2.495101394894673e-18,
+ 0.00971569660730042,
+ 2.457198657187329e-18,
+ 0,
+ -0.5332784586827717,
+ 0.8669814871953827,
+ 0.48047322659276104,
+ 1
+ ]
+ },
+ {
+ "name": "5辅助控制盒_6",
+ "min": [
+ -1.2465949058532715,
+ -6.138715744018555,
+ -0.09900442510843277
+ ],
+ "max": [
+ -1.2465903759002686,
+ 0.7205220460891724,
+ 0.8714730739593506
+ ],
+ "world": [
+ 0.00971569660730042,
+ -2.495101394894673e-18,
+ -3.8506379908533354e-35,
+ 0,
+ 5.9253018338581566e-34,
+ 2.457198657187329e-18,
+ -0.00971569660730042,
+ 0,
+ 2.495101394894673e-18,
+ 0.00971569660730042,
+ 2.457198657187329e-18,
+ 0,
+ -0.5332784586827717,
+ 0.8669814871953827,
+ 0.48047322659276104,
+ 1
+ ]
+ },
+ {
+ "name": "5辅助控制盒_7",
+ "min": [
+ -0.6108710765838623,
+ -6.247684478759766,
+ -2.353607654571533
+ ],
+ "max": [
+ -0.6108658313751221,
+ 4.294660568237305,
+ 3.071218729019165
+ ],
+ "world": [
+ 0.00971569660730042,
+ -2.495101394894673e-18,
+ -3.8506379908533354e-35,
+ 0,
+ 5.9253018338581566e-34,
+ 2.457198657187329e-18,
+ -0.00971569660730042,
+ 0,
+ 2.495101394894673e-18,
+ 0.00971569660730042,
+ 2.457198657187329e-18,
+ 0,
+ -0.5332784586827717,
+ 0.8669814871953827,
+ 0.48047322659276104,
+ 1
+ ]
+ }
+ ]
+ },
+ {
+ "id": "front-pump-aux-control-box-cover",
+ "center": [
+ -0.561427864647816,
+ 0.8679187129448993,
+ 0.4799366365678873
+ ],
+ "size": [
+ 0.01775765336632773,
+ 0.11410634318864421,
+ 0.19501396753693356
+ ],
+ "meshes": [
+ {
+ "name": "5辅助控制盒盖",
+ "min": [
+ -0.9138641357421875,
+ -10.0360107421875,
+ -5.8722686767578125
+ ],
+ "max": [
+ 0.9138641357421875,
+ 10.036041259765625,
+ 5.87226676940918
+ ],
+ "world": [
+ 0.00971569660730042,
+ -2.495101394894673e-18,
+ -3.8506379908533354e-35,
+ 0,
+ 5.9253018338581566e-34,
+ 2.457198657187329e-18,
+ -0.00971569660730042,
+ 0,
+ 2.495101394894673e-18,
+ 0.00971569660730042,
+ 2.457198657187329e-18,
+ 0,
+ -0.561427864647816,
+ 0.8679187222105096,
+ 0.47993678481765245,
+ 1
+ ]
+ }
+ ]
+ },
+ {
+ "id": "front-pump-rescue-switch",
+ "center": [
+ -0.5450380435304301,
+ 0.850092248523527,
+ 0.5353021525254364
+ ],
+ "size": [
+ 0.010677418314101406,
+ 0.005319887227886122,
+ 0.005059525894286154
+ ],
+ "meshes": [
+ {
+ "name": "5互救开关",
+ "min": [
+ -0.5494937896728516,
+ -0.2603800296783447,
+ -0.27377748489379883
+ ],
+ "max": [
+ 0.549492597579956,
+ 0.2603778839111328,
+ 0.27377843856811523
+ ],
+ "world": [
+ 0.00971569660730042,
+ -2.495101394894673e-18,
+ -3.8506379908533354e-35,
+ 0,
+ 5.9253018338581566e-34,
+ 2.457198657187329e-18,
+ -0.00971569660730042,
+ 0,
+ 2.495101394894673e-18,
+ 0.00971569660730042,
+ 2.457198657187329e-18,
+ 0,
+ -0.5450380377394236,
+ 0.8500922438907219,
+ 0.5353021421016249,
+ 1
+ ]
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/reports/bridge-controls-review-20260915/index.html b/reports/bridge-controls-review-20260915/index.html
new file mode 100644
index 0000000..37aa439
--- /dev/null
+++ b/reports/bridge-controls-review-20260915/index.html
@@ -0,0 +1,10 @@
+桥梁流程 · 取景与操作控件验收
+
+桥梁流程 · 取景与操作控件验收
2026-09-15 · 正式 HTML + JavaScript 工作区
+通过 39 个步骤、94 个模型操作、39 次服务端预览校验。
本地及局域网通过;生产构建、正式路由契约和 16 项相关测试通过。
+本轮六项调整
| 底栏图标 | 收起/展开步骤、面板及全屏放到底栏右侧。按钮仅显示图标,title 和无障碍名称随状态切换;全屏仍保留底栏和退出按钮。 |
|---|
| 初始化取景 | 进入场景显示整车与操作台总览,按可用显示区域取景,避开教员和工具。点击标签或进入后续步骤时再聚焦,普通聚焦与主动放大分别限制显示尺寸。 |
|---|
| 全部流程辉光 | 训练/预览进入场景时,所有当前可见的流程部件以青色轮廓显示,当前操作目标以金色区分。正式考试保持原有提示限制。 |
|---|
| 独立半透明工具 | 新增“其他半透明”,保持流程部件实体显示。与“高亮问题设备”独立切换;关闭后恢复保存的材质透明度,不影响地形。 |
|---|
| 正面与动作方向 | 根据实际 GLB 校准各类部件观察方向。互救面板从 -X 侧正视,文字可正读;开关绕靠近面板的固定端向“开”的上方旋转。005、006 共用校准;取力器手柄铰点也改为靠近壳体的一端。 |
|---|
| 同类回归 | 逐项执行四套流程,验证所有目标的实际网格命中、固定观察距离、灯光一致、标签不重叠和服务端预览校验。008 两处观察记录仍按界面流程填写并留给教员复核。 |
|---|
+初始总览
TASK-VIRTUAL-005 · 液压泵应急切换5 步 / 6 次模型操作 / 5 个可见流程目标

逐步截图和校验
完整校验 JSON · 其他半透明
TASK-VIRTUAL-006 · 液压泵应急替代7 步 / 11 次模型操作 / 11 个可见流程目标

逐步截图和校验
完整校验 JSON · 其他半透明
TASK-VIRTUAL-007 · 前泵换件修复11 步 / 27 次模型操作 / 16 个可见流程目标

逐步截图和校验
完整校验 JSON · 其他半透明
TASK-VIRTUAL-008 · 平衡阀拆拼互换16 步 / 50 次模型操作 / 22 个可见流程目标

逐步截图和校验
完整校验 JSON · 其他半透明
+大屏初始视角与互救开关

1920×1080:保留整车环境,初始不直接放大液压泵。

实际拖动中:从面板正面观察,手柄端点向上移动,固定端不位移。脚本同时验证世界坐标变化。
+底栏、全屏与小屏

1280×720 全屏:底栏右侧保留面板和退出全屏图标。

1024×768:模型自由查看、材质切换及 Esc 退出,无页面横向溢出。
+局域网 1920 完整拖动流程 · 局域网 1024 控件回归
+验证范围
现有任务的管理员/教员预览;未创建任务或写入学员成绩。005 小屏使用点击,006–008 使用拖动;另在局域网大屏验证 005 拖动。 所有操作均使用真实鼠标输入;浏览器注入仅用于读取相机、材质、网格和旋转端点。观察距离、可操作性与方向校验对应现有模型,未新增机械受力仿真。
汇总 JSON · 构建和命令记录
以本报告链接的通过记录为准;目录内可能保留此前调试截图。
\ No newline at end of file
diff --git a/reports/bridge-controls-review-20260915/negative-x.png b/reports/bridge-controls-review-20260915/negative-x.png
new file mode 100644
index 0000000..156469a
Binary files /dev/null and b/reports/bridge-controls-review-20260915/negative-x.png differ
diff --git a/reports/bridge-controls-review-20260915/negative-z.png b/reports/bridge-controls-review-20260915/negative-z.png
new file mode 100644
index 0000000..7005856
Binary files /dev/null and b/reports/bridge-controls-review-20260915/negative-z.png differ
diff --git a/reports/bridge-controls-review-20260915/positive-x.png b/reports/bridge-controls-review-20260915/positive-x.png
new file mode 100644
index 0000000..8a225e4
Binary files /dev/null and b/reports/bridge-controls-review-20260915/positive-x.png differ
diff --git a/reports/bridge-controls-review-20260915/positive-z.png b/reports/bridge-controls-review-20260915/positive-z.png
new file mode 100644
index 0000000..602847b
Binary files /dev/null and b/reports/bridge-controls-review-20260915/positive-z.png differ
diff --git a/reports/bridge-controls-review-20260915/report-overview.png b/reports/bridge-controls-review-20260915/report-overview.png
new file mode 100644
index 0000000..5c588c8
Binary files /dev/null and b/reports/bridge-controls-review-20260915/report-overview.png differ
diff --git a/reports/bridge-controls-review-20260915/summary.json b/reports/bridge-controls-review-20260915/summary.json
new file mode 100644
index 0000000..2d75aee
--- /dev/null
+++ b/reports/bridge-controls-review-20260915/summary.json
@@ -0,0 +1,76 @@
+{
+ "pass": true,
+ "generatedAt": "2026-09-15T15:00:20.334Z",
+ "tasks": [
+ {
+ "id": 86,
+ "code": "005",
+ "title": "液压泵应急切换",
+ "steps": 5,
+ "actions": 6,
+ "validations": 5,
+ "workflowTargets": 5
+ },
+ {
+ "id": 87,
+ "code": "006",
+ "title": "液压泵应急替代",
+ "steps": 7,
+ "actions": 11,
+ "validations": 7,
+ "workflowTargets": 11
+ },
+ {
+ "id": 88,
+ "code": "007",
+ "title": "前泵换件修复",
+ "steps": 11,
+ "actions": 27,
+ "validations": 11,
+ "workflowTargets": 16
+ },
+ {
+ "id": 89,
+ "code": "008",
+ "title": "平衡阀拆拼互换",
+ "steps": 16,
+ "actions": 50,
+ "validations": 16,
+ "workflowTargets": 22
+ }
+ ],
+ "steps": 39,
+ "actions": 94,
+ "validationRequests": 39,
+ "validation": {
+ "tests": {
+ "command": "node --test scripts/bridge-scripts-3d-only.test.mjs scripts/bridge-model-geometry.test.mjs scripts/bridge-grounding.test.mjs scripts/bridge-digital-video.contract.test.mjs",
+ "pass": true,
+ "count": 16
+ },
+ "diffCheck": {
+ "pass": true,
+ "command": "git diff --check"
+ },
+ "build": {
+ "pass": true,
+ "command": "pnpm run build"
+ },
+ "formalRoute": {
+ "pass": true,
+ "command": "node scripts/virtual-training-formal-route.contract.test.mjs"
+ },
+ "time": "2026-09-15T22:57:15.7572961+08:00"
+ },
+ "environments": [
+ "http://127.0.0.1:6180",
+ "http://192.168.31.168:6180"
+ ],
+ "resolutions": [
+ "1920×1080",
+ "1366×768",
+ "1280×720",
+ "1024×768"
+ ],
+ "boundary": "现有任务的管理员/教员预览;未创建任务或写入学员成绩。005 小屏使用点击,006–008 使用拖动;另在局域网大屏验证 005 拖动。"
+}
\ No newline at end of file
diff --git a/reports/bridge-controls-review-20260915/task-86-fullscreen.png b/reports/bridge-controls-review-20260915/task-86-fullscreen.png
new file mode 100644
index 0000000..35cc8bd
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-86-fullscreen.png differ
diff --git a/reports/bridge-controls-review-20260915/task-86-initial.png b/reports/bridge-controls-review-20260915/task-86-initial.png
new file mode 100644
index 0000000..0c9c0b3
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-86-initial.png differ
diff --git a/reports/bridge-controls-review-20260915/task-86-rescue-moving.png b/reports/bridge-controls-review-20260915/task-86-rescue-moving.png
new file mode 100644
index 0000000..b6ba308
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-86-rescue-moving.png differ
diff --git a/reports/bridge-controls-review-20260915/task-86-step-1.png b/reports/bridge-controls-review-20260915/task-86-step-1.png
new file mode 100644
index 0000000..ced1d10
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-86-step-1.png differ
diff --git a/reports/bridge-controls-review-20260915/task-86-step-2.png b/reports/bridge-controls-review-20260915/task-86-step-2.png
new file mode 100644
index 0000000..2f4230f
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-86-step-2.png differ
diff --git a/reports/bridge-controls-review-20260915/task-86-step-3.png b/reports/bridge-controls-review-20260915/task-86-step-3.png
new file mode 100644
index 0000000..26e235a
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-86-step-3.png differ
diff --git a/reports/bridge-controls-review-20260915/task-86-step-4.png b/reports/bridge-controls-review-20260915/task-86-step-4.png
new file mode 100644
index 0000000..5ed69a1
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-86-step-4.png differ
diff --git a/reports/bridge-controls-review-20260915/task-86-step-5.png b/reports/bridge-controls-review-20260915/task-86-step-5.png
new file mode 100644
index 0000000..315312e
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-86-step-5.png differ
diff --git a/reports/bridge-controls-review-20260915/task-86-translucent.png b/reports/bridge-controls-review-20260915/task-86-translucent.png
new file mode 100644
index 0000000..6332ea1
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-86-translucent.png differ
diff --git a/reports/bridge-controls-review-20260915/task-86-verification.json b/reports/bridge-controls-review-20260915/task-86-verification.json
new file mode 100644
index 0000000..2e00889
--- /dev/null
+++ b/reports/bridge-controls-review-20260915/task-86-verification.json
@@ -0,0 +1,420 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 86 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 11.447934667757599,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 903.2071257497888,
+ "y": 481.5434491828913,
+ "localX": 644.2071257497888,
+ "localY": 293.0434491828913,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935024518472723,
+ 0.13537492625037484,
+ 0.19723593501664283
+ ],
+ "projected": {
+ "x": 637.9239076562122,
+ "y": 287.47194961091697,
+ "w": 12.495867104146555,
+ "h": 11.240476519842673
+ },
+ "pivot": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 3.809551553384728e-17,
+ 0.1483404529302444,
+ 0.9889363528682976
+ ],
+ "workflowCoverage": [
+ {
+ "name": "front-pump-hydraulic-pump",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 6.927394871231593,
+ 3.924443433981237,
+ 8.626567198137451
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 847.15625,
+ "y": 503.203125,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "non-workflow body click/orbit, selection-highlight restoration, Escape fullscreen exit",
+ "pass": true
+ },
+ {
+ "name": "task 86 step 1 operation 1",
+ "target": "front-pump-hydraulic-pump",
+ "drag": false,
+ "distance": 2.5322004355743344,
+ "projected": {
+ "x": 668.2202250284422,
+ "y": 200.6626396341601,
+ "w": 79.55955939638989,
+ "h": 113.66822804520314
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 86 step 2 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 671.7050205663866,
+ "y": 241.2737934159585,
+ "w": 72.58995886722676,
+ "h": 28.535641543622887
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 86 step 3 operation 1",
+ "target": "front-pump-ball-valve-switch",
+ "drag": false,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 660.2319957673959,
+ "y": 224.87629969162293,
+ "w": 95.86252478209872,
+ "h": 61.48969712641588
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 86 step 4 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 669.6220765610132,
+ "y": 225.32027545793687,
+ "w": 76.75584687797277,
+ "h": 60.37664630739681
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 86 step 5 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 663.1688383663914,
+ "y": 229.32865318643695,
+ "w": 89.66232326721774,
+ "h": 52.409027390012795
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 86 step 5 operation 2",
+ "target": "front-pump-rescue-switch",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 705.4192238499164,
+ "y": 252.82238245113146,
+ "w": 5.161552300168296,
+ "h": 5.421568860623694
+ },
+ "labels": 4
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-controls-review-20260915/task-87-fullscreen.png b/reports/bridge-controls-review-20260915/task-87-fullscreen.png
new file mode 100644
index 0000000..95cb2cf
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-87-fullscreen.png differ
diff --git a/reports/bridge-controls-review-20260915/task-87-initial.png b/reports/bridge-controls-review-20260915/task-87-initial.png
new file mode 100644
index 0000000..ce00b08
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-87-initial.png differ
diff --git a/reports/bridge-controls-review-20260915/task-87-rescue-moving.png b/reports/bridge-controls-review-20260915/task-87-rescue-moving.png
new file mode 100644
index 0000000..3503983
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-87-rescue-moving.png differ
diff --git a/reports/bridge-controls-review-20260915/task-87-step-1.png b/reports/bridge-controls-review-20260915/task-87-step-1.png
new file mode 100644
index 0000000..b3cc0aa
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-87-step-1.png differ
diff --git a/reports/bridge-controls-review-20260915/task-87-step-2.png b/reports/bridge-controls-review-20260915/task-87-step-2.png
new file mode 100644
index 0000000..51472fb
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-87-step-2.png differ
diff --git a/reports/bridge-controls-review-20260915/task-87-step-3.png b/reports/bridge-controls-review-20260915/task-87-step-3.png
new file mode 100644
index 0000000..b352e15
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-87-step-3.png differ
diff --git a/reports/bridge-controls-review-20260915/task-87-step-4.png b/reports/bridge-controls-review-20260915/task-87-step-4.png
new file mode 100644
index 0000000..64f39ad
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-87-step-4.png differ
diff --git a/reports/bridge-controls-review-20260915/task-87-step-5.png b/reports/bridge-controls-review-20260915/task-87-step-5.png
new file mode 100644
index 0000000..89cc2eb
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-87-step-5.png differ
diff --git a/reports/bridge-controls-review-20260915/task-87-step-6.png b/reports/bridge-controls-review-20260915/task-87-step-6.png
new file mode 100644
index 0000000..955104b
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-87-step-6.png differ
diff --git a/reports/bridge-controls-review-20260915/task-87-step-7.png b/reports/bridge-controls-review-20260915/task-87-step-7.png
new file mode 100644
index 0000000..c8e11bc
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-87-step-7.png differ
diff --git a/reports/bridge-controls-review-20260915/task-87-translucent.png b/reports/bridge-controls-review-20260915/task-87-translucent.png
new file mode 100644
index 0000000..220927a
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-87-translucent.png differ
diff --git a/reports/bridge-controls-review-20260915/task-87-verification.json b/reports/bridge-controls-review-20260915/task-87-verification.json
new file mode 100644
index 0000000..462e0ca
--- /dev/null
+++ b/reports/bridge-controls-review-20260915/task-87-verification.json
@@ -0,0 +1,716 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 87 first view",
+ "state": {
+ "id": "bridge-engine",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 18.74530082917896,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 802.1258271375215,
+ "y": 489.1311049751384,
+ "localX": 543.1258271375215,
+ "localY": 300.6311049751384,
+ "visible": true
+ },
+ "bounds": [
+ 0.3501201177055142,
+ 0.29044535054327036,
+ 0.7553749591221814
+ ],
+ "projected": {
+ "x": 525.8451092307747,
+ "y": 289.8747758906051,
+ "w": 34.09957427464701,
+ "h": 21.94543461410774
+ },
+ "pivot": [
+ -2.999317882937463,
+ 1.2580267211289828,
+ 6.401647324786939
+ ],
+ "pickPoints": [
+ {
+ "x": 801.8948963680982,
+ "y": 489.347493197659
+ },
+ {
+ "x": 796.7799602269012,
+ "y": 489.347493197659
+ },
+ {
+ "x": 807.0098325092953,
+ "y": 489.347493197659
+ },
+ {
+ "x": 812.1247686504923,
+ "y": 489.347493197659
+ },
+ {
+ "x": 801.8948963680982,
+ "y": 486.0556780055428
+ },
+ {
+ "x": 796.7799602269012,
+ "y": 486.0556780055428
+ },
+ {
+ "x": 807.0098325092953,
+ "y": 486.0556780055428
+ },
+ {
+ "x": 812.1247686504923,
+ "y": 486.0556780055428
+ },
+ {
+ "x": 801.8948963680982,
+ "y": 492.6393083897751
+ },
+ {
+ "x": 796.7799602269012,
+ "y": 492.6393083897751
+ },
+ {
+ "x": 807.0098325092953,
+ "y": 492.6393083897751
+ },
+ {
+ "x": 812.1247686504923,
+ "y": 492.6393083897751
+ },
+ {
+ "x": 801.8948963680982,
+ "y": 495.9311235818913
+ }
+ ],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 0.0003647744232217721,
+ 0.6679845154427327,
+ 0.7441750829397326
+ ],
+ "workflowCoverage": [
+ {
+ "name": "bridge-engine",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "bridge-hose-a",
+ "glowing": true
+ },
+ {
+ "name": "bridge-hose-b",
+ "glowing": true
+ },
+ {
+ "name": "bridge-return-valve",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "bridge-support-pto",
+ "glowing": true
+ },
+ {
+ "name": "bridge-supply",
+ "glowing": true
+ },
+ {
+ "name": "bridge-normal-control",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 10.879297762405727,
+ 7.41203471823875,
+ 15.346405327132661
+ ],
+ "target": [
+ 0.0003545131983222482,
+ 0.9835682527980125,
+ 1.5004775554141494
+ ],
+ "outline": 3,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 架桥车发动机控制(示意)",
+ "x": 701.890625,
+ "y": 516.3125,
+ "w": 200,
+ "h": 30,
+ "id": "bridge-engine"
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "保持架桥车发动机运行",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 2209160
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ -3,
+ 1.1,
+ 1.2
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 87 step 1 operation 1",
+ "target": "bridge-engine",
+ "drag": false,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 701.463480141453,
+ "y": 198.81442547361482,
+ "w": 98.97130801230662,
+ "h": 174.09916086513002
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 87 step 1 operation 2",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 709.0006218750913,
+ "y": 263.03238137674134,
+ "w": 83.99875624981757,
+ "h": 33.023591730971475
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 87 step 2 operation 1",
+ "target": "bridge-hose-a",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 726.492836293097,
+ "y": 227.43836323869513,
+ "w": 49.01165952027122,
+ "h": 107.61496519436363
+ },
+ "labels": 8
+ },
+ {
+ "name": "task 87 step 2 operation 2",
+ "target": "bridge-hose-b",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 726.492836293097,
+ "y": 227.4383632386951,
+ "w": 49.01165952027122,
+ "h": 107.61496519436366
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 87 step 3 operation 1",
+ "target": "bridge-return-valve",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 722.9293054134898,
+ "y": 233.7930817013087,
+ "w": 56.083741206973855,
+ "h": 98.656191156907
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 87 step 4 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": true,
+ "distance": 2.5322004355743615,
+ "projected": {
+ "x": 699.1228274926345,
+ "y": 249.20856621891878,
+ "w": 103.75434501473103,
+ "h": 60.65167032951709
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 4 operation 2",
+ "target": "front-pump-rescue-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 748.0136091802624,
+ "y": 276.397277651574,
+ "w": 5.972781639476352,
+ "h": 6.274247464206724
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 5 operation 1",
+ "target": "front-pump-ball-valve-switch",
+ "drag": true,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 695.7244080766882,
+ "y": 244.05596771049122,
+ "w": 110.92901798431956,
+ "h": 71.16050467832056
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 6 operation 1",
+ "target": "bridge-support-pto",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 722.92930541349,
+ "y": 233.79308170130878,
+ "w": 56.08374120697363,
+ "h": 98.65619115690691
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 87 step 6 operation 2",
+ "target": "bridge-supply",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 722.9293054134898,
+ "y": 233.7930817013088,
+ "w": 56.083741206973855,
+ "h": 98.65619115690711
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 87 step 7 operation 1",
+ "target": "bridge-normal-control",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 722.9293054134898,
+ "y": 233.79308170130872,
+ "w": 56.083741206973855,
+ "h": 98.65619115690697
+ },
+ "labels": 7
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-controls-review-20260915/task-88-fullscreen.png b/reports/bridge-controls-review-20260915/task-88-fullscreen.png
new file mode 100644
index 0000000..e02bb84
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-88-fullscreen.png differ
diff --git a/reports/bridge-controls-review-20260915/task-88-initial.png b/reports/bridge-controls-review-20260915/task-88-initial.png
new file mode 100644
index 0000000..93ffc4f
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-88-initial.png differ
diff --git a/reports/bridge-controls-review-20260915/task-88-step-1.png b/reports/bridge-controls-review-20260915/task-88-step-1.png
new file mode 100644
index 0000000..7c2ed09
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-88-step-1.png differ
diff --git a/reports/bridge-controls-review-20260915/task-88-step-10.png b/reports/bridge-controls-review-20260915/task-88-step-10.png
new file mode 100644
index 0000000..c1f3536
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-88-step-10.png differ
diff --git a/reports/bridge-controls-review-20260915/task-88-step-11.png b/reports/bridge-controls-review-20260915/task-88-step-11.png
new file mode 100644
index 0000000..b0a9330
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-88-step-11.png differ
diff --git a/reports/bridge-controls-review-20260915/task-88-step-2.png b/reports/bridge-controls-review-20260915/task-88-step-2.png
new file mode 100644
index 0000000..f1d4f3f
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-88-step-2.png differ
diff --git a/reports/bridge-controls-review-20260915/task-88-step-3.png b/reports/bridge-controls-review-20260915/task-88-step-3.png
new file mode 100644
index 0000000..c463991
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-88-step-3.png differ
diff --git a/reports/bridge-controls-review-20260915/task-88-step-4.png b/reports/bridge-controls-review-20260915/task-88-step-4.png
new file mode 100644
index 0000000..75d25ab
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-88-step-4.png differ
diff --git a/reports/bridge-controls-review-20260915/task-88-step-5.png b/reports/bridge-controls-review-20260915/task-88-step-5.png
new file mode 100644
index 0000000..bcf3fd0
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-88-step-5.png differ
diff --git a/reports/bridge-controls-review-20260915/task-88-step-6.png b/reports/bridge-controls-review-20260915/task-88-step-6.png
new file mode 100644
index 0000000..af4f383
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-88-step-6.png differ
diff --git a/reports/bridge-controls-review-20260915/task-88-step-7.png b/reports/bridge-controls-review-20260915/task-88-step-7.png
new file mode 100644
index 0000000..9d896e4
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-88-step-7.png differ
diff --git a/reports/bridge-controls-review-20260915/task-88-step-8.png b/reports/bridge-controls-review-20260915/task-88-step-8.png
new file mode 100644
index 0000000..d9cbefe
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-88-step-8.png differ
diff --git a/reports/bridge-controls-review-20260915/task-88-step-9.png b/reports/bridge-controls-review-20260915/task-88-step-9.png
new file mode 100644
index 0000000..9613fb7
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-88-step-9.png differ
diff --git a/reports/bridge-controls-review-20260915/task-88-translucent.png b/reports/bridge-controls-review-20260915/task-88-translucent.png
new file mode 100644
index 0000000..a4dcedd
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-88-translucent.png differ
diff --git a/reports/bridge-controls-review-20260915/task-88-verification.json b/reports/bridge-controls-review-20260915/task-88-verification.json
new file mode 100644
index 0000000..ea38ea3
--- /dev/null
+++ b/reports/bridge-controls-review-20260915/task-88-verification.json
@@ -0,0 +1,910 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 88 first view",
+ "state": {
+ "id": "bridge-engine",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 12.042465133634778,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 913.4102219920421,
+ "y": 511.3825199485665,
+ "localX": 654.4102219920421,
+ "localY": 322.8825199485665,
+ "visible": true
+ },
+ "bounds": [
+ 0.062756887345643,
+ 0.051998564459097896,
+ 0.13537557144211787
+ ],
+ "projected": {
+ "x": 650.2204266738713,
+ "y": 319.83560990970796,
+ "w": 8.349220606546169,
+ "h": 6.126281661357268
+ },
+ "pivot": [
+ -0.6660927457083943,
+ 0.5878027287808987,
+ 1.861848146330254
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 0,
+ 0.6689647316224496,
+ 0.7432941462471662
+ ],
+ "workflowCoverage": [
+ {
+ "name": "bridge-engine",
+ "glowing": true
+ },
+ {
+ "name": "bridge-paper",
+ "glowing": true
+ },
+ {
+ "name": "bridge-tank-valve",
+ "glowing": true
+ },
+ {
+ "name": "bridge-inlet",
+ "glowing": true
+ },
+ {
+ "name": "bridge-inlet-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-outlet",
+ "glowing": true
+ },
+ {
+ "name": "bridge-outlet-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-3",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-4",
+ "glowing": true
+ },
+ {
+ "name": "bridge-old-pump",
+ "glowing": true
+ },
+ {
+ "name": "bridge-new-pump",
+ "glowing": true
+ },
+ {
+ "name": "bridge-fill-cap",
+ "glowing": true
+ },
+ {
+ "name": "bridge-oil-can",
+ "glowing": true
+ },
+ {
+ "name": "bridge-test-control",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 6.988913966397507,
+ 5.113381051123811,
+ 8.894981411778645
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 3,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 0.65,
+ "baseline": 0.65,
+ "side": 2
+ },
+ {
+ "opacity": 0.65,
+ "baseline": 0.65,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 架桥车发动机控制(示意)",
+ "x": 813.390625,
+ "y": 530.453125,
+ "w": 200,
+ "h": 30,
+ "id": "bridge-engine"
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "关闭架桥车发动机",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 13195851
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ -3,
+ 1.1,
+ 1.2
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 88 step 1 operation 1",
+ "target": "bridge-engine",
+ "drag": false,
+ "distance": 2.53220043557436,
+ "projected": {
+ "x": 707.73588542338,
+ "y": 194.03143956830726,
+ "w": 86.52822915324009,
+ "h": 173.25833164231446
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 88 step 1 operation 2",
+ "target": "bridge-paper",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 707.4690865023292,
+ "y": 250.93173490352874,
+ "w": 87.06182699534145,
+ "h": 58.55758060570318
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 88 step 2 operation 1",
+ "target": "bridge-tank-valve",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 726.4836684065816,
+ "y": 231.08272302163462,
+ "w": 49.03266318683609,
+ "h": 98.179721263978
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 88 step 3 operation 1",
+ "target": "bridge-inlet",
+ "drag": true,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 709.0457933757752,
+ "y": 241.8513175506897,
+ "w": 83.90841324844962,
+ "h": 76.2012614843099
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 88 step 3 operation 2",
+ "target": "bridge-inlet-bag",
+ "drag": true,
+ "distance": 2.5322004355743624,
+ "projected": {
+ "x": 717.582219650757,
+ "y": 235.44052399348558,
+ "w": 66.83556069848669,
+ "h": 88.8058672469484
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 88 step 3 operation 3",
+ "target": "bridge-outlet",
+ "drag": true,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 709.0457933757751,
+ "y": 241.8513175506897,
+ "w": 83.90841324844973,
+ "h": 76.2012614843099
+ },
+ "labels": 12
+ },
+ {
+ "name": "task 88 step 3 operation 4",
+ "target": "bridge-outlet-bag",
+ "drag": true,
+ "distance": 2.5322004355743712,
+ "projected": {
+ "x": 717.5822196507568,
+ "y": 235.44052399348567,
+ "w": 66.83556069848635,
+ "h": 88.80586724694814
+ },
+ "labels": 8
+ },
+ {
+ "name": "task 88 step 4 operation 1",
+ "target": "bridge-pump-bolt-1",
+ "drag": true,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 736.6006671619051,
+ "y": 263.37928348130146,
+ "w": 28.798665676189785,
+ "h": 32.40406238614611
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 88 step 4 operation 2",
+ "target": "bridge-pump-bolt-2",
+ "drag": true,
+ "distance": 2.5322004355743712,
+ "projected": {
+ "x": 736.6006671619051,
+ "y": 263.3792834813013,
+ "w": 28.79866567618967,
+ "h": 32.40406238614611
+ },
+ "labels": 8
+ },
+ {
+ "name": "task 88 step 4 operation 3",
+ "target": "bridge-pump-bolt-3",
+ "drag": true,
+ "distance": 2.5322004355743712,
+ "projected": {
+ "x": 736.6006671463118,
+ "y": 263.3792815395063,
+ "w": 28.798665707376585,
+ "h": 32.404066314038914
+ },
+ "labels": 8
+ },
+ {
+ "name": "task 88 step 4 operation 4",
+ "target": "bridge-pump-bolt-4",
+ "drag": true,
+ "distance": 2.5322004355743712,
+ "projected": {
+ "x": 736.600667161451,
+ "y": 263.3792821577108,
+ "w": 28.79866567709803,
+ "h": 32.40406503999304
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 88 step 5 operation 1",
+ "target": "bridge-old-pump",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 724.9323365980705,
+ "y": 244.73479638293182,
+ "w": 52.13532680385913,
+ "h": 72.15967433583043
+ },
+ "labels": 14
+ },
+ {
+ "name": "task 88 step 6 operation 1",
+ "target": "bridge-paper",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 707.6302239970034,
+ "y": 250.6825519412415,
+ "w": 86.73955200599278,
+ "h": 58.853694467408616
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 88 step 7 operation 1",
+ "target": "bridge-gasket",
+ "drag": true,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 708.3666200322472,
+ "y": 237.24441477489736,
+ "w": 85.26675993550543,
+ "h": 84.28133006446657
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 88 step 8 operation 1",
+ "target": "bridge-new-pump",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 724.9323365980705,
+ "y": 244.73479638293182,
+ "w": 52.13532680385913,
+ "h": 72.15967433583043
+ },
+ "labels": 15
+ },
+ {
+ "name": "task 88 step 8 operation 2",
+ "target": "bridge-pump-bolt-1",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 736.6006671619051,
+ "y": 263.37928348130134,
+ "w": 28.798665676189785,
+ "h": 32.40406238614622
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 88 step 8 operation 3",
+ "target": "bridge-pump-bolt-2",
+ "drag": true,
+ "distance": 2.5322004355743712,
+ "projected": {
+ "x": 736.6006671619052,
+ "y": 263.3792834813014,
+ "w": 28.79866567618967,
+ "h": 32.40406238614611
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 88 step 8 operation 4",
+ "target": "bridge-pump-bolt-3",
+ "drag": true,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 736.6006671463116,
+ "y": 263.37928153950617,
+ "w": 28.798665707376927,
+ "h": 32.404066314039085
+ },
+ "labels": 6
+ },
+ {
+ "name": "task 88 step 8 operation 5",
+ "target": "bridge-pump-bolt-4",
+ "drag": true,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 736.6006671614508,
+ "y": 263.37928215771063,
+ "w": 28.798665677098256,
+ "h": 32.40406503999327
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 88 step 9 operation 1",
+ "target": "bridge-fill-cap",
+ "drag": true,
+ "distance": 2.5322004355743615,
+ "projected": {
+ "x": 709.6431583630005,
+ "y": 238.41041534361207,
+ "w": 82.71368327399898,
+ "h": 81.95895256969274
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 88 step 9 operation 2",
+ "target": "bridge-oil-can",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 719.4577385700463,
+ "y": 228.82028362710247,
+ "w": 63.08452285990734,
+ "h": 101.02942636902065
+ },
+ "labels": 12
+ },
+ {
+ "name": "task 88 step 10 operation 1",
+ "target": "bridge-inlet-bag",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 717.5822196507567,
+ "y": 235.4405239934855,
+ "w": 66.83556069848669,
+ "h": 88.80586724694848
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 88 step 10 operation 2",
+ "target": "bridge-inlet",
+ "drag": true,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 709.0457933757751,
+ "y": 241.8513175506897,
+ "w": 83.90841324844973,
+ "h": 76.2012614843099
+ },
+ "labels": 8
+ },
+ {
+ "name": "task 88 step 10 operation 3",
+ "target": "bridge-outlet-bag",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 717.5822196507567,
+ "y": 235.4405239934855,
+ "w": 66.83556069848669,
+ "h": 88.80586724694848
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 88 step 10 operation 4",
+ "target": "bridge-outlet",
+ "drag": true,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 709.0457933757751,
+ "y": 241.8513175506898,
+ "w": 83.90841324844973,
+ "h": 76.20126148430987
+ },
+ "labels": 14
+ },
+ {
+ "name": "task 88 step 11 operation 1",
+ "target": "bridge-engine",
+ "drag": false,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 726.4836684065818,
+ "y": 231.08272302163485,
+ "w": 49.0326631868362,
+ "h": 98.179721263978
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 88 step 11 operation 2",
+ "target": "bridge-test-control",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 726.4836684065813,
+ "y": 231.0827230216337,
+ "w": 49.03266318683609,
+ "h": 98.17972126397811
+ },
+ "labels": 13
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-controls-review-20260915/task-89-fullscreen.png b/reports/bridge-controls-review-20260915/task-89-fullscreen.png
new file mode 100644
index 0000000..a34f5b4
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-89-fullscreen.png differ
diff --git a/reports/bridge-controls-review-20260915/task-89-initial.png b/reports/bridge-controls-review-20260915/task-89-initial.png
new file mode 100644
index 0000000..2af4a0a
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-89-initial.png differ
diff --git a/reports/bridge-controls-review-20260915/task-89-step-1.png b/reports/bridge-controls-review-20260915/task-89-step-1.png
new file mode 100644
index 0000000..cbdb170
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-89-step-1.png differ
diff --git a/reports/bridge-controls-review-20260915/task-89-step-10.png b/reports/bridge-controls-review-20260915/task-89-step-10.png
new file mode 100644
index 0000000..054a53c
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-89-step-10.png differ
diff --git a/reports/bridge-controls-review-20260915/task-89-step-11.png b/reports/bridge-controls-review-20260915/task-89-step-11.png
new file mode 100644
index 0000000..8e4ace3
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-89-step-11.png differ
diff --git a/reports/bridge-controls-review-20260915/task-89-step-12.png b/reports/bridge-controls-review-20260915/task-89-step-12.png
new file mode 100644
index 0000000..f3fecf4
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-89-step-12.png differ
diff --git a/reports/bridge-controls-review-20260915/task-89-step-13.png b/reports/bridge-controls-review-20260915/task-89-step-13.png
new file mode 100644
index 0000000..31e56da
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-89-step-13.png differ
diff --git a/reports/bridge-controls-review-20260915/task-89-step-14.png b/reports/bridge-controls-review-20260915/task-89-step-14.png
new file mode 100644
index 0000000..9db06b4
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-89-step-14.png differ
diff --git a/reports/bridge-controls-review-20260915/task-89-step-15.png b/reports/bridge-controls-review-20260915/task-89-step-15.png
new file mode 100644
index 0000000..dc03081
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-89-step-15.png differ
diff --git a/reports/bridge-controls-review-20260915/task-89-step-16.png b/reports/bridge-controls-review-20260915/task-89-step-16.png
new file mode 100644
index 0000000..3968642
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-89-step-16.png differ
diff --git a/reports/bridge-controls-review-20260915/task-89-step-2.png b/reports/bridge-controls-review-20260915/task-89-step-2.png
new file mode 100644
index 0000000..1498981
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-89-step-2.png differ
diff --git a/reports/bridge-controls-review-20260915/task-89-step-3.png b/reports/bridge-controls-review-20260915/task-89-step-3.png
new file mode 100644
index 0000000..4d2fc8c
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-89-step-3.png differ
diff --git a/reports/bridge-controls-review-20260915/task-89-step-4.png b/reports/bridge-controls-review-20260915/task-89-step-4.png
new file mode 100644
index 0000000..533f785
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-89-step-4.png differ
diff --git a/reports/bridge-controls-review-20260915/task-89-step-5.png b/reports/bridge-controls-review-20260915/task-89-step-5.png
new file mode 100644
index 0000000..04dbafc
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-89-step-5.png differ
diff --git a/reports/bridge-controls-review-20260915/task-89-step-6.png b/reports/bridge-controls-review-20260915/task-89-step-6.png
new file mode 100644
index 0000000..0450d3d
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-89-step-6.png differ
diff --git a/reports/bridge-controls-review-20260915/task-89-step-7.png b/reports/bridge-controls-review-20260915/task-89-step-7.png
new file mode 100644
index 0000000..a18166f
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-89-step-7.png differ
diff --git a/reports/bridge-controls-review-20260915/task-89-step-8.png b/reports/bridge-controls-review-20260915/task-89-step-8.png
new file mode 100644
index 0000000..6681c1e
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-89-step-8.png differ
diff --git a/reports/bridge-controls-review-20260915/task-89-step-9.png b/reports/bridge-controls-review-20260915/task-89-step-9.png
new file mode 100644
index 0000000..f2a6ba2
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-89-step-9.png differ
diff --git a/reports/bridge-controls-review-20260915/task-89-translucent.png b/reports/bridge-controls-review-20260915/task-89-translucent.png
new file mode 100644
index 0000000..584610d
Binary files /dev/null and b/reports/bridge-controls-review-20260915/task-89-translucent.png differ
diff --git a/reports/bridge-controls-review-20260915/task-89-verification.json b/reports/bridge-controls-review-20260915/task-89-verification.json
new file mode 100644
index 0000000..9090235
--- /dev/null
+++ b/reports/bridge-controls-review-20260915/task-89-verification.json
@@ -0,0 +1,1362 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 89 first view",
+ "state": {
+ "id": "bridge-small-cloth",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 18.74530082917896,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 825.346900451233,
+ "y": 494.36864763278925,
+ "localX": 566.346900451233,
+ "localY": 305.86864763278925,
+ "visible": true
+ },
+ "bounds": [
+ 0.3001091125469584,
+ 0.20019644975604534,
+ 0.025263652634544442
+ ],
+ "projected": {
+ "x": 561.946835396814,
+ "y": 300.7632182750632,
+ "w": 8.823313170200777,
+ "h": 10.249360431990738
+ },
+ "pivot": [
+ -2.299399785448256,
+ 1.1078425712343078,
+ 6.251449528772805
+ ],
+ "pickPoints": [
+ {
+ "x": 825.3584919819143,
+ "y": 494.38789849105854
+ },
+ {
+ "x": 824.0349950063843,
+ "y": 494.38789849105854
+ },
+ {
+ "x": 826.6819889574444,
+ "y": 494.38789849105854
+ },
+ {
+ "x": 822.7114980308542,
+ "y": 494.38789849105854
+ },
+ {
+ "x": 828.0054859329746,
+ "y": 494.38789849105854
+ },
+ {
+ "x": 825.3584919819143,
+ "y": 492.85049442625996
+ },
+ {
+ "x": 824.0349950063843,
+ "y": 492.85049442625996
+ },
+ {
+ "x": 826.6819889574444,
+ "y": 492.85049442625996
+ },
+ {
+ "x": 822.7114980308542,
+ "y": 492.85049442625996
+ },
+ {
+ "x": 828.0054859329746,
+ "y": 492.85049442625996
+ },
+ {
+ "x": 825.3584919819143,
+ "y": 495.9253025558572
+ },
+ {
+ "x": 824.0349950063843,
+ "y": 495.9253025558572
+ },
+ {
+ "x": 826.6819889574444,
+ "y": 495.9253025558572
+ },
+ {
+ "x": 822.7114980308542,
+ "y": 495.9253025558572
+ },
+ {
+ "x": 828.0054859329746,
+ "y": 495.9253025558572
+ },
+ {
+ "x": 825.3584919819143,
+ "y": 491.3130903614613
+ },
+ {
+ "x": 824.0349950063843,
+ "y": 491.3130903614613
+ },
+ {
+ "x": 826.6819889574444,
+ "y": 491.3130903614613
+ },
+ {
+ "x": 822.7114980308542,
+ "y": 491.3130903614613
+ },
+ {
+ "x": 825.3584919819143,
+ "y": 497.4627066206558
+ },
+ {
+ "x": 824.0349950063843,
+ "y": 497.4627066206558
+ },
+ {
+ "x": 826.6819889574444,
+ "y": 497.4627066206558
+ },
+ {
+ "x": 828.0054859329746,
+ "y": 497.4627066206558
+ }
+ ],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 0.00006465834627876286,
+ 0.11783665604487886,
+ 0.9930329895383433
+ ],
+ "workflowCoverage": [
+ {
+ "name": "bridge-small-cloth",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-pipe",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-3",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-4",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-valve",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-plug-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-plug-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-seat",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-cloth",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-pipe",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-3",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-4",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-valve",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-plug-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-plug-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-seat",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 10.879297762405727,
+ 7.41203471823875,
+ 15.346405327132661
+ ],
+ "target": [
+ 0.0003545131983222482,
+ 0.9835682527980125,
+ 1.5004775554141494
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 0.65,
+ "baseline": 0.65,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 0.65,
+ "baseline": 0.65,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 小腔清洗擦拭布",
+ "x": 755.34375,
+ "y": 515.5,
+ "w": 140,
+ "h": 30,
+ "id": "bridge-small-cloth"
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-small-cloth",
+ "kind": "identify",
+ "directionHint": "清洗并擦净阀体",
+ "effects": [
+ {
+ "targetId": "bridge-small-cloth",
+ "offset": [
+ 0.7,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-small-valve",
+ "color": 8492701
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ -2.3,
+ 1.1,
+ 1.05
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 89 step 1 operation 1",
+ "target": "bridge-small-cloth",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 662.162700899815,
+ "y": 220.45127335325841,
+ "w": 177.6743117037796,
+ "h": 118.2016522464734
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 89 step 2 operation 1",
+ "target": "bridge-small-pipe",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 710.4795096334417,
+ "y": 244.94070098766431,
+ "w": 81.03671734159616,
+ "h": 73.20305790024159
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 2 operation 2",
+ "target": "bridge-small-bag",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 715.995267978146,
+ "y": 236.8246057076068,
+ "w": 70.00581725199777,
+ "h": 88.88604631812535
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 3 operation 1",
+ "target": "bridge-small-bolt-1",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 724.2373402081731,
+ "y": 245.97480088397478,
+ "w": 53.519208051092505,
+ "h": 69.64153818656504
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 89 step 3 operation 2",
+ "target": "bridge-small-bolt-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.2373402081731,
+ "y": 245.97480088397475,
+ "w": 53.519208051092505,
+ "h": 69.64153818656524
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 89 step 3 operation 3",
+ "target": "bridge-small-bolt-3",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.2373402081731,
+ "y": 245.97480088397467,
+ "w": 53.51920805109262,
+ "h": 69.64153818656516
+ },
+ "labels": 6
+ },
+ {
+ "name": "task 89 step 3 operation 4",
+ "target": "bridge-small-bolt-4",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 724.2373402081731,
+ "y": 245.97480088397475,
+ "w": 53.519208051092505,
+ "h": 69.64153818656507
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 3 operation 5",
+ "target": "bridge-small-valve",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 692.1892620756336,
+ "y": 244.1715855748232,
+ "w": 117.61970726416473,
+ "h": 74.91825388242052
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 89 step 4 operation 1",
+ "target": "bridge-small-plug-1",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 711.8105705216219,
+ "y": 239.84868779146134,
+ "w": 78.37537147823696,
+ "h": 81.51578448801845
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 89 step 4 operation 2",
+ "target": "bridge-small-plug-2",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 711.810570521622,
+ "y": 239.84868779146132,
+ "w": 78.37537147823684,
+ "h": 81.51578448801848
+ },
+ "labels": 8
+ },
+ {
+ "name": "task 89 step 4 operation 3",
+ "target": "bridge-small-seat",
+ "drag": false,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 682.6054469852947,
+ "y": 241.11471592167288,
+ "w": 136.7883994425748,
+ "h": 80.25864140632916
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 89 step 5 operation 1",
+ "target": "bridge-large-cloth",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 700.6588638432286,
+ "y": 246.05396216643993,
+ "w": 100.6821099654752,
+ "h": 66.98093627300176
+ },
+ "labels": 6
+ },
+ {
+ "name": "task 89 step 6 operation 1",
+ "target": "bridge-large-pipe",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 710.4795096334416,
+ "y": 244.9407009876643,
+ "w": 81.03671734159627,
+ "h": 73.20305790024162
+ },
+ "labels": 14
+ },
+ {
+ "name": "task 89 step 6 operation 2",
+ "target": "bridge-large-bag",
+ "drag": true,
+ "distance": 2.532200435574363,
+ "projected": {
+ "x": 715.9952679781462,
+ "y": 236.82460570760693,
+ "w": 70.00581725199777,
+ "h": 88.88604631812527
+ },
+ "labels": 15
+ },
+ {
+ "name": "task 89 step 7 operation 1",
+ "target": "bridge-large-bolt-1",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 724.2373402081729,
+ "y": 245.9748008839748,
+ "w": 53.519208051092505,
+ "h": 69.64153818656513
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 89 step 7 operation 2",
+ "target": "bridge-large-bolt-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.237340208173,
+ "y": 245.97480088397478,
+ "w": 53.51920805109262,
+ "h": 69.64153818656516
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 89 step 7 operation 3",
+ "target": "bridge-large-bolt-3",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.2373402081732,
+ "y": 245.97480088397472,
+ "w": 53.519208051092505,
+ "h": 69.6415381865651
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 89 step 7 operation 4",
+ "target": "bridge-large-bolt-4",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 724.2373402081731,
+ "y": 245.97480088397475,
+ "w": 53.519208051092505,
+ "h": 69.64153818656507
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 7 operation 5",
+ "target": "bridge-large-valve",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 692.1892620756337,
+ "y": 244.17158557482324,
+ "w": 117.61970726416462,
+ "h": 74.91825388242054
+ },
+ "labels": 17
+ },
+ {
+ "name": "task 89 step 8 operation 1",
+ "target": "bridge-large-plug-1",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 711.810570521622,
+ "y": 239.84868779146146,
+ "w": 78.37537147823684,
+ "h": 81.5157844880184
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 8 operation 2",
+ "target": "bridge-large-plug-2",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 711.8105705216219,
+ "y": 239.84868779146137,
+ "w": 78.37537147823684,
+ "h": 81.51578448801843
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 8 operation 3",
+ "target": "bridge-large-seat",
+ "drag": false,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 682.6054469852946,
+ "y": 241.11471592167285,
+ "w": 136.78839944257493,
+ "h": 80.25864140632919
+ },
+ "labels": 15
+ },
+ {
+ "name": "task 89 step 9 operation 1",
+ "target": "bridge-large-seat",
+ "drag": false,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 682.6054469852946,
+ "y": 241.11471592167285,
+ "w": 136.78839944257493,
+ "h": 80.25864140632919
+ },
+ "labels": 15
+ },
+ {
+ "name": "task 89 step 9 operation 2",
+ "target": "bridge-large-plug-1",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 711.8105705216218,
+ "y": 239.8486877914614,
+ "w": 78.37537147823696,
+ "h": 81.51578448801851
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 89 step 9 operation 3",
+ "target": "bridge-large-plug-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 711.8105705216219,
+ "y": 239.84868779146132,
+ "w": 78.37537147823696,
+ "h": 81.51578448801848
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 10 operation 1",
+ "target": "bridge-small-valve",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 692.1892620756336,
+ "y": 244.17158557482327,
+ "w": 117.61970726416473,
+ "h": 74.91825388242052
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 10 operation 2",
+ "target": "bridge-large-bolt-1",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 724.237340208173,
+ "y": 245.9748008839748,
+ "w": 53.51920805109273,
+ "h": 69.64153818656501
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 89 step 10 operation 3",
+ "target": "bridge-large-bolt-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.237340208173,
+ "y": 245.97480088397475,
+ "w": 53.51920805109273,
+ "h": 69.64153818656501
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 10 operation 4",
+ "target": "bridge-large-bolt-3",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 724.237340208173,
+ "y": 245.97480088397467,
+ "w": 53.51920805109262,
+ "h": 69.6415381865651
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 89 step 10 operation 5",
+ "target": "bridge-large-bolt-4",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.2373402081729,
+ "y": 245.97480088397475,
+ "w": 53.51920805109273,
+ "h": 69.64153818656519
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 11 observation retained for instructor review",
+ "pass": true
+ },
+ {
+ "name": "task 89 step 11 operation 1",
+ "target": "bridge-large-bag",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 715.9952679781461,
+ "y": 236.82460570760685,
+ "w": 70.00581725199766,
+ "h": 88.88604631812524
+ },
+ "labels": 12
+ },
+ {
+ "name": "task 89 step 11 operation 2",
+ "target": "bridge-large-pipe",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 710.4795096334415,
+ "y": 244.9407009876643,
+ "w": 81.03671734159627,
+ "h": 73.20305790024156
+ },
+ "labels": 13
+ },
+ {
+ "name": "task 89 step 12 operation 1",
+ "target": "bridge-large-bolt-1",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 724.237340208173,
+ "y": 245.9748008839748,
+ "w": 53.519208051092505,
+ "h": 69.64153818656513
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 89 step 12 operation 2",
+ "target": "bridge-large-bolt-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.237340208173,
+ "y": 245.97480088397478,
+ "w": 53.51920805109262,
+ "h": 69.64153818656516
+ },
+ "labels": 6
+ },
+ {
+ "name": "task 89 step 12 operation 3",
+ "target": "bridge-large-bolt-3",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.2373402081732,
+ "y": 245.97480088397478,
+ "w": 53.519208051092505,
+ "h": 69.64153818656516
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 89 step 12 operation 4",
+ "target": "bridge-large-bolt-4",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 724.2373402081732,
+ "y": 245.9748008839747,
+ "w": 53.519208051092505,
+ "h": 69.64153818656507
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 13 operation 1",
+ "target": "bridge-small-seat",
+ "drag": false,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 682.6054469852947,
+ "y": 241.11471592167288,
+ "w": 136.7883994425748,
+ "h": 80.25864140632916
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 89 step 13 operation 2",
+ "target": "bridge-small-plug-1",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 711.810570521622,
+ "y": 239.84868779146134,
+ "w": 78.37537147823684,
+ "h": 81.5157844880184
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 89 step 13 operation 3",
+ "target": "bridge-small-plug-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 711.8105705216219,
+ "y": 239.8486877914614,
+ "w": 78.37537147823684,
+ "h": 81.51578448801845
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 14 operation 1",
+ "target": "bridge-large-valve",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 692.1892620756337,
+ "y": 244.17158557482327,
+ "w": 117.61970726416462,
+ "h": 74.91825388242046
+ },
+ "labels": 17
+ },
+ {
+ "name": "task 89 step 14 operation 2",
+ "target": "bridge-small-bolt-1",
+ "drag": true,
+ "distance": 2.53220043557436,
+ "projected": {
+ "x": 724.2373402081729,
+ "y": 245.97480088397467,
+ "w": 53.51920805109273,
+ "h": 69.6415381865651
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 89 step 14 operation 3",
+ "target": "bridge-small-bolt-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.2373402081729,
+ "y": 245.97480088397467,
+ "w": 53.519208051092846,
+ "h": 69.6415381865651
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 14 operation 4",
+ "target": "bridge-small-bolt-3",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.237340208173,
+ "y": 245.97480088397464,
+ "w": 53.51920805109262,
+ "h": 69.64153818656519
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 89 step 14 operation 5",
+ "target": "bridge-small-bolt-4",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.237340208173,
+ "y": 245.97480088397472,
+ "w": 53.51920805109273,
+ "h": 69.64153818656521
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 15 observation retained for instructor review",
+ "pass": true
+ },
+ {
+ "name": "task 89 step 15 operation 1",
+ "target": "bridge-small-bag",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 715.9952679781461,
+ "y": 236.82460570760682,
+ "w": 70.00581725199766,
+ "h": 88.88604631812532
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 89 step 15 operation 2",
+ "target": "bridge-small-pipe",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 710.4795096334416,
+ "y": 244.94070098766431,
+ "w": 81.03671734159627,
+ "h": 73.20305790024159
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 16 operation 1",
+ "target": "bridge-small-bolt-1",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 724.237340208173,
+ "y": 245.97480088397478,
+ "w": 53.519208051092505,
+ "h": 69.64153818656504
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 89 step 16 operation 2",
+ "target": "bridge-small-bolt-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.237340208173,
+ "y": 245.9748008839746,
+ "w": 53.51920805109262,
+ "h": 69.64153818656516
+ },
+ "labels": 6
+ },
+ {
+ "name": "task 89 step 16 operation 3",
+ "target": "bridge-small-bolt-3",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.2373402081731,
+ "y": 245.97480088397467,
+ "w": 53.51920805109262,
+ "h": 69.64153818656516
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 89 step 16 operation 4",
+ "target": "bridge-small-bolt-4",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 724.2373402081731,
+ "y": 245.9748008839748,
+ "w": 53.519208051092505,
+ "h": 69.64153818656513
+ },
+ "labels": 9
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-controls-review-20260915/validation.json b/reports/bridge-controls-review-20260915/validation.json
new file mode 100644
index 0000000..eefc31b
--- /dev/null
+++ b/reports/bridge-controls-review-20260915/validation.json
@@ -0,0 +1,20 @@
+{
+ "tests": {
+ "command": "node --test scripts/bridge-scripts-3d-only.test.mjs scripts/bridge-model-geometry.test.mjs scripts/bridge-grounding.test.mjs scripts/bridge-digital-video.contract.test.mjs",
+ "pass": true,
+ "count": 16
+ },
+ "diffCheck": {
+ "pass": true,
+ "command": "git diff --check"
+ },
+ "build": {
+ "pass": true,
+ "command": "pnpm run build"
+ },
+ "formalRoute": {
+ "pass": true,
+ "command": "node scripts/virtual-training-formal-route.contract.test.mjs"
+ },
+ "time": "2026-09-15T22:57:15.7572961+08:00"
+}
diff --git a/reports/bridge-controls-small-20260915/controls-1024.json b/reports/bridge-controls-small-20260915/controls-1024.json
new file mode 100644
index 0000000..a736f36
--- /dev/null
+++ b/reports/bridge-controls-small-20260915/controls-1024.json
@@ -0,0 +1,336 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 86 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 15.571877898678377,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 769.827955310308,
+ "y": 497.538362243526,
+ "localX": 548.827955310308,
+ "localY": 309.038362243526,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935024518472723,
+ 0.13537492625037484,
+ 0.19723593501664283
+ ],
+ "projected": {
+ "x": 543.97516871561,
+ "y": 304.71762610536405,
+ "w": 9.666505140511163,
+ "h": 8.695437590387314
+ },
+ "pivot": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 3.809551553384728e-17,
+ 0.1483404529302444,
+ 0.9889363528682976
+ ],
+ "workflowCoverage": [
+ {
+ "name": "front-pump-hydraulic-pump",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 9.42288283619975,
+ 4.9838487021280935,
+ 11.734155984701575
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 713.796875,
+ "y": 517.90625,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "non-workflow body click/orbit, selection-highlight restoration, Escape fullscreen exit",
+ "pass": true
+ }
+ ],
+ "errors": [],
+ "writes": []
+}
\ No newline at end of file
diff --git a/reports/bridge-controls-small-20260915/failure.png b/reports/bridge-controls-small-20260915/failure.png
new file mode 100644
index 0000000..79bcbe3
Binary files /dev/null and b/reports/bridge-controls-small-20260915/failure.png differ
diff --git a/reports/bridge-controls-small-20260915/free-inspection-controls.png b/reports/bridge-controls-small-20260915/free-inspection-controls.png
new file mode 100644
index 0000000..627e819
Binary files /dev/null and b/reports/bridge-controls-small-20260915/free-inspection-controls.png differ
diff --git a/reports/bridge-controls-small-20260915/task-86-initial.png b/reports/bridge-controls-small-20260915/task-86-initial.png
new file mode 100644
index 0000000..8bd95b8
Binary files /dev/null and b/reports/bridge-controls-small-20260915/task-86-initial.png differ
diff --git a/reports/bridge-inspection-20260915/failure.png b/reports/bridge-inspection-20260915/failure.png
new file mode 100644
index 0000000..7819902
Binary files /dev/null and b/reports/bridge-inspection-20260915/failure.png differ
diff --git a/reports/bridge-inspection-20260915/index.html b/reports/bridge-inspection-20260915/index.html
new file mode 100644
index 0000000..c1b01cc
--- /dev/null
+++ b/reports/bridge-inspection-20260915/index.html
@@ -0,0 +1,10 @@
+四套桥梁脚本 · 3D 交互验收
+
+四套桥梁脚本 · 3D 交互验收
2026-09-15 · 正式 HTML + JavaScript 工作区 · 管理员账号 / 教员预览
+通过:39 个步骤、94 个模型操作、39 次真实服务端预览校验。
另完成 005、006 点击动画回归,以及局域网小屏、自由查看、材质恢复和全屏退出检查。构建、正式路由契约及 16 项模型/脚本/讲解视频测试通过。
+检查范围与结果
| 需求 | 实现及验证 |
|---|
| 逐步聚焦 | 每个步骤和子动作自动对准对应部件,移出的螺栓、泵体随动作跟随。相机取景避开教员和面板。 |
|---|
| 稳定距离与 HDR | 四套脚本使用统一的相机观察距离(约 2.5322),按部件尺寸调整光学缩放;曝光 1、环境光 0.8、主光 1.4 在步骤间不变。Venice Sunset HDR 已随项目静态交付。 |
|---|
| 实体与轮廓 | 物理网格使用双面材质,OutlinePass 绘制轮廓辉光。聚焦内部部件时局部隐藏遮挡外壳;复位后恢复。实体透明度不因选中或高亮而变化。 |
|---|
| 小屏与全屏 | 步骤栏、右侧面板可收起,小屏默认收起;操作区支持全屏、按钮退出和 Esc 退出。1024×768、1280×720 均无页面横向溢出。 |
|---|
| 模型动作 | 旋转、拆卸、移动和连接采用模型动画;拖动时模型实时跟随。纯旋转开关的端部铰点在动作中保持固定。点击模式也完成实际动画后才提交校验。 |
|---|
| 标签 | 去掉前导圆点,动态避让部件、浮层及其他标签;无法安放的额外标签隐藏。点击只聚焦放大,不产生步骤校验或成绩写入。 |
|---|
| 高亮恢复 | 选中部件后反复开关问题高亮,全部材质透明度与保存的基线一致,不残留整车半透明状态。 |
|---|
| 隐藏其他 | 隐藏其他模型时同时隐藏其标签;点标签后会同步查看目标,避免沿用之前的整车选择。 |
|---|
| 操作范围 | 流程目标继续按步骤顺序判断;非流程整车网格可点击查看、拖动旋转视角,不增加操作错误、不调用步骤校验。 |
|---|
+各任务实际截图
TASK-VIRTUAL-005 · 液压泵应急切换5 步 / 6 次模型操作 / 5 次预览校验

查看各步完成截图与记录
全屏截图 · 完整 JSON
TASK-VIRTUAL-006 · 液压泵应急替代7 步 / 11 次模型操作 / 7 次预览校验

查看各步完成截图与记录
全屏截图 · 完整 JSON
TASK-VIRTUAL-007 · 前泵换件修复11 步 / 27 次模型操作 / 11 次预览校验

查看各步完成截图与记录
全屏截图 · 完整 JSON
TASK-VIRTUAL-008 · 平衡阀拆拼互换16 步 / 50 次模型操作 / 16 次预览校验

查看各步完成截图与记录
全屏截图 · 完整 JSON
+局域网与小屏
入口:127.0.0.1:6180、192.168.31.168:6180,页面 API 经 6100 Gateway。分辨率:1366×768、1280×720、1024×768。以下为 1280×720 的截图。

整车选择、拖动视角、切换高亮与 Esc 退出后。

全屏内仍可使用工具、讲解和退出按钮。
1024 小屏记录 · 1280 点击流程记录 · 006 点击动画记录
+验证边界
未新增教学任务;未写入学员成绩。仅调用现有任务的教员预览校验接口。 008 中需要观察记录的管路步骤仍要求记录并保留教员复核,未用界面操作绕过该条件。本轮验证的是三维交互与预览校验,未新增实装尺寸、受力或扭矩测量能力。截图中的补充模型沿用任务原有资源。
+运行方式:Edge / Playwright;检查脚本 tools/bridge-inspection-live.mjs 仅注入只读诊断,模型操作全部由真实鼠标点击或拖动完成。
+HDR 来自 Three.js r185 示例,原资源 Poly Haven / Greg Zaal / Venice Sunset(CC0),静态文件已纳入构建,无运行时外网请求。
汇总 JSON · 命令与构建结果
本报告保留关键截图及通过记录;较早调试文件可能包含失败尝试,以本报告链接记录为准。
\ No newline at end of file
diff --git a/reports/bridge-inspection-20260915/report-overview.png b/reports/bridge-inspection-20260915/report-overview.png
new file mode 100644
index 0000000..48006e3
Binary files /dev/null and b/reports/bridge-inspection-20260915/report-overview.png differ
diff --git a/reports/bridge-inspection-20260915/result.json b/reports/bridge-inspection-20260915/result.json
new file mode 100644
index 0000000..c9df3f7
--- /dev/null
+++ b/reports/bridge-inspection-20260915/result.json
@@ -0,0 +1,671 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 87 first view",
+ "state": {
+ "id": "bridge-engine",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 2.532200435574361,
+ "zoom": 0.8216918396960269,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 1010,
+ "y": 486.0175158302065,
+ "localX": 751,
+ "localY": 297.5175158302065,
+ "visible": true
+ },
+ "bounds": [
+ 0.3501201177055142,
+ 0.29044535054327036,
+ 0.7553749591221814
+ ],
+ "projected": {
+ "x": 666.579101318145,
+ "y": 245.52922007485307,
+ "w": 157.17988200452805,
+ "h": 119.45250398727143
+ },
+ "pivot": [
+ -2.999317882937463,
+ 1.2580267211289828,
+ 6.401647324786939
+ ],
+ "pickPoints": [
+ {
+ "x": 1004.1690423204091,
+ "y": 493.75547206848876
+ },
+ {
+ "x": 980.5920600197298,
+ "y": 493.75547206848876
+ },
+ {
+ "x": 1027.7460246210883,
+ "y": 493.75547206848876
+ },
+ {
+ "x": 1051.3230069217675,
+ "y": 493.75547206848876
+ },
+ {
+ "x": 1004.1690423204091,
+ "y": 475.83759647039807
+ },
+ {
+ "x": 980.5920600197298,
+ "y": 475.83759647039807
+ },
+ {
+ "x": 1027.7460246210883,
+ "y": 475.83759647039807
+ },
+ {
+ "x": 1051.3230069217675,
+ "y": 475.83759647039807
+ },
+ {
+ "x": 1004.1690423204091,
+ "y": 511.6733476665795
+ },
+ {
+ "x": 980.5920600197298,
+ "y": 511.6733476665795
+ },
+ {
+ "x": 1027.7460246210883,
+ "y": 511.6733476665795
+ },
+ {
+ "x": 1051.3230069217675,
+ "y": 511.6733476665795
+ },
+ {
+ "x": 1004.1690423204091,
+ "y": 457.9197208723074
+ },
+ {
+ "x": 1027.7460246210883,
+ "y": 457.9197208723074
+ },
+ {
+ "x": 1027.7460246210883,
+ "y": 529.5912232646702
+ }
+ ],
+ "camera": [
+ -1.5810566067864567,
+ 2.0506631490413763,
+ 8.345123195900678
+ ],
+ "target": [
+ -2.9993997351630046,
+ 1.1429235468803858,
+ 6.453999024731948
+ ],
+ "outline": 3,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 架桥车发动机控制(示意)",
+ "x": 904.15625,
+ "y": 569.46875,
+ "w": 200,
+ "h": 30,
+ "id": "bridge-engine"
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "保持架桥车发动机运行",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 2209160
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ -3,
+ 1.1,
+ 1.2
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 87 step 1 operation 1",
+ "target": "bridge-engine",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 637.4684466002639,
+ "y": 227.60222153852428,
+ "w": 211.3798413164344,
+ "h": 160.643022603572
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 1 operation 2",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.53220043557436,
+ "projected": {
+ "x": 691.0863201834665,
+ "y": 241.20830066705653,
+ "w": 118.53215884229496,
+ "h": 113.84394009198215
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 2 operation 1",
+ "target": "bridge-hose-a",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 701.5077563540383,
+ "y": 209.29183868266065,
+ "w": 98.3684510489777,
+ "h": 180.67316214097954
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 2 operation 2",
+ "target": "bridge-hose-b",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 701.5077563540381,
+ "y": 209.29183868266068,
+ "w": 98.36845104897759,
+ "h": 180.67316214097957
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 87 step 3 operation 1",
+ "target": "bridge-return-valve",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 666.579101318145,
+ "y": 245.52922007485313,
+ "w": 157.17988200452794,
+ "h": 119.4525039872712
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 87 step 4 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 695.7831162249033,
+ "y": 231.5464662959914,
+ "w": 107.529163936813,
+ "h": 134.999176240965
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 4 operation 2",
+ "target": "front-pump-rescue-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 708.3745879042517,
+ "y": 265.51350046887814,
+ "w": 85.28792229444582,
+ "h": 64.10742743532518
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 5 operation 1",
+ "target": "front-pump-ball-valve-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 672.2066586535791,
+ "y": 262.4372042974711,
+ "w": 159.06192351065363,
+ "h": 71.02752881758227
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 6 operation 1",
+ "target": "bridge-support-pto",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 666.5791013181451,
+ "y": 245.52922007485307,
+ "w": 157.17988200452817,
+ "h": 119.45250398727131
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 87 step 6 operation 2",
+ "target": "bridge-supply",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 666.5791013181446,
+ "y": 245.52922007485313,
+ "w": 157.17988200452828,
+ "h": 119.45250398727143
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 7 operation 1",
+ "target": "bridge-normal-control",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 666.579101318145,
+ "y": 245.52922007485307,
+ "w": 157.17988200452805,
+ "h": 119.45250398727143
+ },
+ "labels": 0
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-inspection-20260915/summary.json b/reports/bridge-inspection-20260915/summary.json
new file mode 100644
index 0000000..62ae2f4
--- /dev/null
+++ b/reports/bridge-inspection-20260915/summary.json
@@ -0,0 +1,90 @@
+{
+ "pass": true,
+ "generatedAt": "2026-09-15T14:17:36.562Z",
+ "tasks": [
+ {
+ "id": 86,
+ "code": "005",
+ "title": "液压泵应急切换",
+ "steps": 5,
+ "actions": 6,
+ "validationRequests": 5
+ },
+ {
+ "id": 87,
+ "code": "006",
+ "title": "液压泵应急替代",
+ "steps": 7,
+ "actions": 11,
+ "validationRequests": 7
+ },
+ {
+ "id": 88,
+ "code": "007",
+ "title": "前泵换件修复",
+ "steps": 11,
+ "actions": 27,
+ "validationRequests": 11
+ },
+ {
+ "id": 89,
+ "code": "008",
+ "title": "平衡阀拆拼互换",
+ "steps": 16,
+ "actions": 50,
+ "validationRequests": 16
+ }
+ ],
+ "steps": 39,
+ "actions": 94,
+ "validationRequests": 39,
+ "environments": [
+ "http://127.0.0.1:6180",
+ "http://192.168.31.168:6180"
+ ],
+ "resolutions": [
+ "1366×768",
+ "1280×720",
+ "1024×768"
+ ],
+ "accountType": "管理员 / 教员预览",
+ "residualData": "未新增教学任务;未写入学员成绩。仅调用现有任务的教员预览校验接口。",
+ "validation": {
+ "date": "2026-09-15",
+ "build": {
+ "command": "pnpm run build",
+ "pass": true,
+ "exitCode": 0,
+ "checks": [
+ "vue-tsc --noEmit",
+ "vite build",
+ "verify-legacy-model-editor-dist.mjs"
+ ],
+ "notes": "构建成功;保留 Vite 的 chunk size 与插件耗时提示。"
+ },
+ "contracts": [
+ {
+ "command": "node scripts/virtual-training-formal-route.contract.test.mjs",
+ "pass": true,
+ "exitCode": 0
+ },
+ {
+ "command": "node --test scripts/bridge-scripts-3d-only.test.mjs scripts/bridge-model-geometry.test.mjs scripts/bridge-grounding.test.mjs scripts/bridge-digital-video.contract.test.mjs",
+ "pass": true,
+ "exitCode": 0,
+ "passedTests": 16,
+ "failedTests": 0
+ }
+ ],
+ "diffCheck": {
+ "command": "git diff --check",
+ "pass": true
+ },
+ "hdr": {
+ "file": "public/environments/venice_sunset_1k.hdr",
+ "bytes": 1397783,
+ "sha256": "0E72ED46B5316CB5FB67FC81FF85B024A09146FD89EF3811A8D2299647ADA118",
+ "source": "https://raw.githubusercontent.com/mrdoob/three.js/r185/examples/textures/equirectangular/venice_sunset_1k.hdr"
+ }
+ }
+}
\ No newline at end of file
diff --git a/reports/bridge-inspection-20260915/task-86-fullscreen.png b/reports/bridge-inspection-20260915/task-86-fullscreen.png
new file mode 100644
index 0000000..5ec72de
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-86-fullscreen.png differ
diff --git a/reports/bridge-inspection-20260915/task-86-initial.png b/reports/bridge-inspection-20260915/task-86-initial.png
new file mode 100644
index 0000000..0ab21a3
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-86-initial.png differ
diff --git a/reports/bridge-inspection-20260915/task-86-step-1.png b/reports/bridge-inspection-20260915/task-86-step-1.png
new file mode 100644
index 0000000..c4e6bf3
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-86-step-1.png differ
diff --git a/reports/bridge-inspection-20260915/task-86-step-2.png b/reports/bridge-inspection-20260915/task-86-step-2.png
new file mode 100644
index 0000000..e809546
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-86-step-2.png differ
diff --git a/reports/bridge-inspection-20260915/task-86-step-3.png b/reports/bridge-inspection-20260915/task-86-step-3.png
new file mode 100644
index 0000000..10fa32b
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-86-step-3.png differ
diff --git a/reports/bridge-inspection-20260915/task-86-step-4.png b/reports/bridge-inspection-20260915/task-86-step-4.png
new file mode 100644
index 0000000..96a0fa5
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-86-step-4.png differ
diff --git a/reports/bridge-inspection-20260915/task-86-step-5.png b/reports/bridge-inspection-20260915/task-86-step-5.png
new file mode 100644
index 0000000..97a649e
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-86-step-5.png differ
diff --git a/reports/bridge-inspection-20260915/task-86-verification.json b/reports/bridge-inspection-20260915/task-86-verification.json
new file mode 100644
index 0000000..a6a3fc3
--- /dev/null
+++ b/reports/bridge-inspection-20260915/task-86-verification.json
@@ -0,0 +1,457 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 86 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 2.532200435574361,
+ "zoom": 2.7546090732813115,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 1010.0000000000001,
+ "y": 486.0175158302065,
+ "localX": 751.0000000000001,
+ "localY": 297.5175158302065,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935024518472723,
+ 0.13537492625037484,
+ 0.19723593501664283
+ ],
+ "projected": {
+ "x": 677.0065761835925,
+ "y": 227.54529044904206,
+ "w": 145.49080948490075,
+ "h": 144.5106231928143
+ },
+ "pivot": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "pickPoints": [
+ {
+ "x": 1008.751980926043,
+ "y": 488.3006020454492
+ },
+ {
+ "x": 986.9283595033078,
+ "y": 488.3006020454492
+ },
+ {
+ "x": 1030.575602348778,
+ "y": 488.3006020454492
+ },
+ {
+ "x": 965.1047380805727,
+ "y": 488.3006020454492
+ },
+ {
+ "x": 1052.399223771513,
+ "y": 488.3006020454492
+ },
+ {
+ "x": 1008.751980926043,
+ "y": 466.62400856652704
+ },
+ {
+ "x": 986.9283595033078,
+ "y": 466.62400856652704
+ },
+ {
+ "x": 1030.575602348778,
+ "y": 466.62400856652704
+ },
+ {
+ "x": 1008.751980926043,
+ "y": 509.9771955243714
+ },
+ {
+ "x": 1030.575602348778,
+ "y": 509.9771955243714
+ },
+ {
+ "x": 965.1047380805727,
+ "y": 509.9771955243714
+ },
+ {
+ "x": 986.9283595033078,
+ "y": 444.9474150876049
+ },
+ {
+ "x": 1030.575602348778,
+ "y": 444.9474150876049
+ },
+ {
+ "x": 1008.751980926043,
+ "y": 531.6537890032935
+ },
+ {
+ "x": 986.9283595033078,
+ "y": 531.6537890032935
+ },
+ {
+ "x": 1030.575602348778,
+ "y": 531.6537890032935
+ },
+ {
+ "x": 965.1047380805727,
+ "y": 531.6537890032935
+ }
+ ],
+ "freePoints": [],
+ "camera": [
+ 1.290166569077179,
+ 1.5224381402623406,
+ 3.537805842935374
+ ],
+ "target": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "outline": 1,
+ "cutaway": 3,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 952.75,
+ "y": 576.546875,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 86 step 1 operation 1",
+ "target": "front-pump-hydraulic-pump",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 651.4916024537966,
+ "y": 203.41693686933024,
+ "w": 195.66005413486664,
+ "h": 194.34187256964685
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 86 step 2 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 691.0863201834665,
+ "y": 241.20830066705693,
+ "w": 118.5321588422944,
+ "h": 113.84394009198186
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 86 step 3 operation 1",
+ "target": "front-pump-ball-valve-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 672.2066586535786,
+ "y": 262.4372042974715,
+ "w": 159.06192351065386,
+ "h": 71.02752881758227
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 86 step 4 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 700.6724936794051,
+ "y": 223.0164148943769,
+ "w": 99.49837173682727,
+ "h": 150.3343674335859
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 86 step 5 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 695.7831162249029,
+ "y": 231.54646629599137,
+ "w": 107.52916393681278,
+ "h": 134.99917624096486
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 86 step 5 operation 2",
+ "target": "front-pump-rescue-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 708.3745879042517,
+ "y": 265.51350046887814,
+ "w": 85.28792229444582,
+ "h": 64.10742743532518
+ },
+ "labels": 0
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-inspection-20260915/task-87-click-verification.json b/reports/bridge-inspection-20260915/task-87-click-verification.json
new file mode 100644
index 0000000..c9519ee
--- /dev/null
+++ b/reports/bridge-inspection-20260915/task-87-click-verification.json
@@ -0,0 +1,672 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 87 first view",
+ "state": {
+ "id": "bridge-engine",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 2.532200435574361,
+ "zoom": 0.8216918396960269,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 1010,
+ "y": 486.0175158302065,
+ "localX": 751,
+ "localY": 297.5175158302065,
+ "visible": true
+ },
+ "bounds": [
+ 0.3501201177055142,
+ 0.29044535054327036,
+ 0.7553749591221814
+ ],
+ "projected": {
+ "x": 666.579101318145,
+ "y": 245.52922007485307,
+ "w": 157.17988200452805,
+ "h": 119.45250398727143
+ },
+ "pivot": [
+ -2.999317882937463,
+ 1.2580267211289828,
+ 6.401647324786939
+ ],
+ "pickPoints": [
+ {
+ "x": 1004.1690423204091,
+ "y": 493.75547206848876
+ },
+ {
+ "x": 980.5920600197298,
+ "y": 493.75547206848876
+ },
+ {
+ "x": 1027.7460246210883,
+ "y": 493.75547206848876
+ },
+ {
+ "x": 1051.3230069217675,
+ "y": 493.75547206848876
+ },
+ {
+ "x": 1004.1690423204091,
+ "y": 475.83759647039807
+ },
+ {
+ "x": 980.5920600197298,
+ "y": 475.83759647039807
+ },
+ {
+ "x": 1027.7460246210883,
+ "y": 475.83759647039807
+ },
+ {
+ "x": 1051.3230069217675,
+ "y": 475.83759647039807
+ },
+ {
+ "x": 1004.1690423204091,
+ "y": 511.6733476665795
+ },
+ {
+ "x": 980.5920600197298,
+ "y": 511.6733476665795
+ },
+ {
+ "x": 1027.7460246210883,
+ "y": 511.6733476665795
+ },
+ {
+ "x": 1051.3230069217675,
+ "y": 511.6733476665795
+ },
+ {
+ "x": 1004.1690423204091,
+ "y": 457.9197208723074
+ },
+ {
+ "x": 1027.7460246210883,
+ "y": 457.9197208723074
+ },
+ {
+ "x": 1027.7460246210883,
+ "y": 529.5912232646702
+ }
+ ],
+ "freePoints": [],
+ "camera": [
+ -1.5810566067864567,
+ 2.0506631490413763,
+ 8.345123195900678
+ ],
+ "target": [
+ -2.9993997351630046,
+ 1.1429235468803858,
+ 6.453999024731948
+ ],
+ "outline": 3,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 架桥车发动机控制(示意)",
+ "x": 904.15625,
+ "y": 569.46875,
+ "w": 200,
+ "h": 30,
+ "id": "bridge-engine"
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "保持架桥车发动机运行",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 2209160
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ -3,
+ 1.1,
+ 1.2
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 87 step 1 operation 1",
+ "target": "bridge-engine",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 637.4684466002639,
+ "y": 227.60222153852428,
+ "w": 211.3798413164344,
+ "h": 160.643022603572
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 1 operation 2",
+ "target": "front-pump-pto-switch",
+ "drag": false,
+ "distance": 2.53220043557436,
+ "projected": {
+ "x": 691.0863201834665,
+ "y": 241.20830066705653,
+ "w": 118.53215884229496,
+ "h": 113.84394009198215
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 2 operation 1",
+ "target": "bridge-hose-a",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 701.5077563540383,
+ "y": 209.29183868266065,
+ "w": 98.3684510489777,
+ "h": 180.67316214097954
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 2 operation 2",
+ "target": "bridge-hose-b",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 701.5077563540381,
+ "y": 209.29183868266068,
+ "w": 98.36845104897759,
+ "h": 180.67316214097957
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 87 step 3 operation 1",
+ "target": "bridge-return-valve",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 666.579101318145,
+ "y": 245.52922007485313,
+ "w": 157.17988200452794,
+ "h": 119.4525039872712
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 87 step 4 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 695.7831162249033,
+ "y": 231.5464662959914,
+ "w": 107.529163936813,
+ "h": 134.999176240965
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 4 operation 2",
+ "target": "front-pump-rescue-switch",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 708.3745879042517,
+ "y": 265.51350046887814,
+ "w": 85.28792229444582,
+ "h": 64.10742743532518
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 5 operation 1",
+ "target": "front-pump-ball-valve-switch",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 672.2066586535791,
+ "y": 262.4372042974711,
+ "w": 159.06192351065363,
+ "h": 71.02752881758227
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 6 operation 1",
+ "target": "bridge-support-pto",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 666.5791013181451,
+ "y": 245.52922007485307,
+ "w": 157.17988200452817,
+ "h": 119.45250398727131
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 87 step 6 operation 2",
+ "target": "bridge-supply",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 666.5791013181446,
+ "y": 245.52922007485313,
+ "w": 157.17988200452828,
+ "h": 119.45250398727143
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 7 operation 1",
+ "target": "bridge-normal-control",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 666.579101318145,
+ "y": 245.52922007485307,
+ "w": 157.17988200452805,
+ "h": 119.45250398727143
+ },
+ "labels": 0
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-inspection-20260915/task-87-fullscreen.png b/reports/bridge-inspection-20260915/task-87-fullscreen.png
new file mode 100644
index 0000000..1b8cbe3
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-87-fullscreen.png differ
diff --git a/reports/bridge-inspection-20260915/task-87-initial.png b/reports/bridge-inspection-20260915/task-87-initial.png
new file mode 100644
index 0000000..6030e8e
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-87-initial.png differ
diff --git a/reports/bridge-inspection-20260915/task-87-step-1.png b/reports/bridge-inspection-20260915/task-87-step-1.png
new file mode 100644
index 0000000..6193299
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-87-step-1.png differ
diff --git a/reports/bridge-inspection-20260915/task-87-step-2.png b/reports/bridge-inspection-20260915/task-87-step-2.png
new file mode 100644
index 0000000..6224a70
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-87-step-2.png differ
diff --git a/reports/bridge-inspection-20260915/task-87-step-3.png b/reports/bridge-inspection-20260915/task-87-step-3.png
new file mode 100644
index 0000000..44d61dd
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-87-step-3.png differ
diff --git a/reports/bridge-inspection-20260915/task-87-step-4.png b/reports/bridge-inspection-20260915/task-87-step-4.png
new file mode 100644
index 0000000..c332da0
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-87-step-4.png differ
diff --git a/reports/bridge-inspection-20260915/task-87-step-5.png b/reports/bridge-inspection-20260915/task-87-step-5.png
new file mode 100644
index 0000000..2a62366
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-87-step-5.png differ
diff --git a/reports/bridge-inspection-20260915/task-87-step-6.png b/reports/bridge-inspection-20260915/task-87-step-6.png
new file mode 100644
index 0000000..48f6d5d
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-87-step-6.png differ
diff --git a/reports/bridge-inspection-20260915/task-87-step-7.png b/reports/bridge-inspection-20260915/task-87-step-7.png
new file mode 100644
index 0000000..362a446
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-87-step-7.png differ
diff --git a/reports/bridge-inspection-20260915/task-87-verification.json b/reports/bridge-inspection-20260915/task-87-verification.json
new file mode 100644
index 0000000..c9df3f7
--- /dev/null
+++ b/reports/bridge-inspection-20260915/task-87-verification.json
@@ -0,0 +1,671 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 87 first view",
+ "state": {
+ "id": "bridge-engine",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 2.532200435574361,
+ "zoom": 0.8216918396960269,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 1010,
+ "y": 486.0175158302065,
+ "localX": 751,
+ "localY": 297.5175158302065,
+ "visible": true
+ },
+ "bounds": [
+ 0.3501201177055142,
+ 0.29044535054327036,
+ 0.7553749591221814
+ ],
+ "projected": {
+ "x": 666.579101318145,
+ "y": 245.52922007485307,
+ "w": 157.17988200452805,
+ "h": 119.45250398727143
+ },
+ "pivot": [
+ -2.999317882937463,
+ 1.2580267211289828,
+ 6.401647324786939
+ ],
+ "pickPoints": [
+ {
+ "x": 1004.1690423204091,
+ "y": 493.75547206848876
+ },
+ {
+ "x": 980.5920600197298,
+ "y": 493.75547206848876
+ },
+ {
+ "x": 1027.7460246210883,
+ "y": 493.75547206848876
+ },
+ {
+ "x": 1051.3230069217675,
+ "y": 493.75547206848876
+ },
+ {
+ "x": 1004.1690423204091,
+ "y": 475.83759647039807
+ },
+ {
+ "x": 980.5920600197298,
+ "y": 475.83759647039807
+ },
+ {
+ "x": 1027.7460246210883,
+ "y": 475.83759647039807
+ },
+ {
+ "x": 1051.3230069217675,
+ "y": 475.83759647039807
+ },
+ {
+ "x": 1004.1690423204091,
+ "y": 511.6733476665795
+ },
+ {
+ "x": 980.5920600197298,
+ "y": 511.6733476665795
+ },
+ {
+ "x": 1027.7460246210883,
+ "y": 511.6733476665795
+ },
+ {
+ "x": 1051.3230069217675,
+ "y": 511.6733476665795
+ },
+ {
+ "x": 1004.1690423204091,
+ "y": 457.9197208723074
+ },
+ {
+ "x": 1027.7460246210883,
+ "y": 457.9197208723074
+ },
+ {
+ "x": 1027.7460246210883,
+ "y": 529.5912232646702
+ }
+ ],
+ "camera": [
+ -1.5810566067864567,
+ 2.0506631490413763,
+ 8.345123195900678
+ ],
+ "target": [
+ -2.9993997351630046,
+ 1.1429235468803858,
+ 6.453999024731948
+ ],
+ "outline": 3,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 架桥车发动机控制(示意)",
+ "x": 904.15625,
+ "y": 569.46875,
+ "w": 200,
+ "h": 30,
+ "id": "bridge-engine"
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "保持架桥车发动机运行",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 2209160
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ -3,
+ 1.1,
+ 1.2
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 87 step 1 operation 1",
+ "target": "bridge-engine",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 637.4684466002639,
+ "y": 227.60222153852428,
+ "w": 211.3798413164344,
+ "h": 160.643022603572
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 1 operation 2",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.53220043557436,
+ "projected": {
+ "x": 691.0863201834665,
+ "y": 241.20830066705653,
+ "w": 118.53215884229496,
+ "h": 113.84394009198215
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 2 operation 1",
+ "target": "bridge-hose-a",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 701.5077563540383,
+ "y": 209.29183868266065,
+ "w": 98.3684510489777,
+ "h": 180.67316214097954
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 2 operation 2",
+ "target": "bridge-hose-b",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 701.5077563540381,
+ "y": 209.29183868266068,
+ "w": 98.36845104897759,
+ "h": 180.67316214097957
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 87 step 3 operation 1",
+ "target": "bridge-return-valve",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 666.579101318145,
+ "y": 245.52922007485313,
+ "w": 157.17988200452794,
+ "h": 119.4525039872712
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 87 step 4 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 695.7831162249033,
+ "y": 231.5464662959914,
+ "w": 107.529163936813,
+ "h": 134.999176240965
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 4 operation 2",
+ "target": "front-pump-rescue-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 708.3745879042517,
+ "y": 265.51350046887814,
+ "w": 85.28792229444582,
+ "h": 64.10742743532518
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 5 operation 1",
+ "target": "front-pump-ball-valve-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 672.2066586535791,
+ "y": 262.4372042974711,
+ "w": 159.06192351065363,
+ "h": 71.02752881758227
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 6 operation 1",
+ "target": "bridge-support-pto",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 666.5791013181451,
+ "y": 245.52922007485307,
+ "w": 157.17988200452817,
+ "h": 119.45250398727131
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 87 step 6 operation 2",
+ "target": "bridge-supply",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 666.5791013181446,
+ "y": 245.52922007485313,
+ "w": 157.17988200452828,
+ "h": 119.45250398727143
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 7 operation 1",
+ "target": "bridge-normal-control",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 666.579101318145,
+ "y": 245.52922007485307,
+ "w": 157.17988200452805,
+ "h": 119.45250398727143
+ },
+ "labels": 0
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-inspection-20260915/task-88-fullscreen.png b/reports/bridge-inspection-20260915/task-88-fullscreen.png
new file mode 100644
index 0000000..67b036a
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-88-fullscreen.png differ
diff --git a/reports/bridge-inspection-20260915/task-88-initial.png b/reports/bridge-inspection-20260915/task-88-initial.png
new file mode 100644
index 0000000..ec8a28f
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-88-initial.png differ
diff --git a/reports/bridge-inspection-20260915/task-88-step-1.png b/reports/bridge-inspection-20260915/task-88-step-1.png
new file mode 100644
index 0000000..2698a59
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-88-step-1.png differ
diff --git a/reports/bridge-inspection-20260915/task-88-step-10.png b/reports/bridge-inspection-20260915/task-88-step-10.png
new file mode 100644
index 0000000..fabd26c
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-88-step-10.png differ
diff --git a/reports/bridge-inspection-20260915/task-88-step-11.png b/reports/bridge-inspection-20260915/task-88-step-11.png
new file mode 100644
index 0000000..c73f84b
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-88-step-11.png differ
diff --git a/reports/bridge-inspection-20260915/task-88-step-2.png b/reports/bridge-inspection-20260915/task-88-step-2.png
new file mode 100644
index 0000000..c39e69c
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-88-step-2.png differ
diff --git a/reports/bridge-inspection-20260915/task-88-step-3.png b/reports/bridge-inspection-20260915/task-88-step-3.png
new file mode 100644
index 0000000..cfd895e
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-88-step-3.png differ
diff --git a/reports/bridge-inspection-20260915/task-88-step-4.png b/reports/bridge-inspection-20260915/task-88-step-4.png
new file mode 100644
index 0000000..a73f3aa
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-88-step-4.png differ
diff --git a/reports/bridge-inspection-20260915/task-88-step-5.png b/reports/bridge-inspection-20260915/task-88-step-5.png
new file mode 100644
index 0000000..aba6bf7
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-88-step-5.png differ
diff --git a/reports/bridge-inspection-20260915/task-88-step-6.png b/reports/bridge-inspection-20260915/task-88-step-6.png
new file mode 100644
index 0000000..300a440
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-88-step-6.png differ
diff --git a/reports/bridge-inspection-20260915/task-88-step-7.png b/reports/bridge-inspection-20260915/task-88-step-7.png
new file mode 100644
index 0000000..75ce4c2
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-88-step-7.png differ
diff --git a/reports/bridge-inspection-20260915/task-88-step-8.png b/reports/bridge-inspection-20260915/task-88-step-8.png
new file mode 100644
index 0000000..e4967cf
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-88-step-8.png differ
diff --git a/reports/bridge-inspection-20260915/task-88-step-9.png b/reports/bridge-inspection-20260915/task-88-step-9.png
new file mode 100644
index 0000000..d137941
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-88-step-9.png differ
diff --git a/reports/bridge-inspection-20260915/task-88-verification.json b/reports/bridge-inspection-20260915/task-88-verification.json
new file mode 100644
index 0000000..73a8ff1
--- /dev/null
+++ b/reports/bridge-inspection-20260915/task-88-verification.json
@@ -0,0 +1,898 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 88 first view",
+ "state": {
+ "id": "bridge-engine",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 2.532200435574361,
+ "zoom": 4.585319615433331,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 1010,
+ "y": 486.01751583020615,
+ "localX": 751,
+ "localY": 297.51751583020615,
+ "visible": true
+ },
+ "bounds": [
+ 0.062756887345643,
+ 0.051998564459097896,
+ 0.13537557144211787
+ ],
+ "projected": {
+ "x": 673.1377211472847,
+ "y": 240.14902282175092,
+ "w": 153.71540788933282,
+ "h": 117.4649486538944
+ },
+ "pivot": [
+ -0.6660927457083943,
+ 0.5878027287808987,
+ 1.861848146330254
+ ],
+ "pickPoints": [
+ {
+ "x": 1008.9954250919511,
+ "y": 487.38149714869814
+ },
+ {
+ "x": 985.9381139085511,
+ "y": 487.38149714869814
+ },
+ {
+ "x": 1032.052736275351,
+ "y": 487.38149714869814
+ },
+ {
+ "x": 1055.110047458751,
+ "y": 487.38149714869814
+ },
+ {
+ "x": 1008.9954250919511,
+ "y": 469.76175485061395
+ },
+ {
+ "x": 985.9381139085511,
+ "y": 469.76175485061395
+ },
+ {
+ "x": 1032.052736275351,
+ "y": 469.76175485061395
+ },
+ {
+ "x": 1055.110047458751,
+ "y": 469.76175485061395
+ },
+ {
+ "x": 1008.9954250919511,
+ "y": 505.0012394467823
+ },
+ {
+ "x": 985.9381139085511,
+ "y": 505.0012394467823
+ },
+ {
+ "x": 1032.052736275351,
+ "y": 505.0012394467823
+ },
+ {
+ "x": 1055.110047458751,
+ "y": 505.0012394467823
+ },
+ {
+ "x": 1008.9954250919511,
+ "y": 452.1420125525298
+ },
+ {
+ "x": 1008.9954250919511,
+ "y": 522.6209817448664
+ },
+ {
+ "x": 1032.052736275351,
+ "y": 522.6209817448664
+ }
+ ],
+ "camera": [
+ 0.7522503826681537,
+ 1.474922210456197,
+ 3.762385851829886
+ ],
+ "target": [
+ -0.6660927457083943,
+ 0.5671826082952064,
+ 1.8712616806611555
+ ],
+ "outline": 3,
+ "cutaway": 2,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 0.65,
+ "baseline": 0.65,
+ "side": 2
+ },
+ {
+ "opacity": 0.65,
+ "baseline": 0.65,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 架桥车发动机控制(示意)",
+ "x": 908.984375,
+ "y": 562.109375,
+ "w": 200,
+ "h": 30,
+ "id": "bridge-engine"
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "关闭架桥车发动机",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 13195851
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ -3,
+ 1.1,
+ 1.2
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 88 step 1 operation 1",
+ "target": "bridge-engine",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 646.2886594739347,
+ "y": 220.36678385331803,
+ "w": 206.72072095461988,
+ "h": 157.9701033621338
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 88 step 1 operation 2",
+ "target": "bridge-paper",
+ "drag": true,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 659.3203628276048,
+ "y": 264.5648758480844,
+ "w": 182.27451467595972,
+ "h": 68.74644499668415
+ },
+ "labels": 6
+ },
+ {
+ "name": "task 88 step 2 operation 1",
+ "target": "bridge-tank-valve",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 673.137721147285,
+ "y": 240.149022821751,
+ "w": 153.71540788933248,
+ "h": 117.46494865389454
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 88 step 3 operation 1",
+ "target": "bridge-inlet",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 676.519892871534,
+ "y": 223.33055214123044,
+ "w": 149.27406401900578,
+ "h": 150.67914827592745
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 88 step 3 operation 2",
+ "target": "bridge-inlet-bag",
+ "drag": true,
+ "distance": 2.53220043557436,
+ "projected": {
+ "x": 684.0253101831897,
+ "y": 215.68712541176197,
+ "w": 133.84273555858078,
+ "h": 164.89028905185668
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 88 step 3 operation 3",
+ "target": "bridge-outlet",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 676.5198928715349,
+ "y": 223.33055214123044,
+ "w": 149.27406401900566,
+ "h": 150.6791482759274
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 88 step 3 operation 4",
+ "target": "bridge-outlet-bag",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 684.0253101831888,
+ "y": 215.68712541176166,
+ "w": 133.84273555858147,
+ "h": 164.8902890518566
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 88 step 4 operation 1",
+ "target": "bridge-pump-bolt-1",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.6199070925887,
+ "y": 223.15346284907946,
+ "w": 150.63249702941573,
+ "h": 149.17590888727239
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 88 step 4 operation 2",
+ "target": "bridge-pump-bolt-2",
+ "drag": true,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 675.6199070925903,
+ "y": 223.15346284907923,
+ "w": 150.63249702941562,
+ "h": 149.1759088872717
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 88 step 4 operation 3",
+ "target": "bridge-pump-bolt-3",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.6199075533762,
+ "y": 223.1534648307375,
+ "w": 150.6324959898909,
+ "h": 149.17590501577996
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 88 step 4 operation 4",
+ "target": "bridge-pump-bolt-4",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.6199091998192,
+ "y": 223.15346055153148,
+ "w": 150.63249281851847,
+ "h": 149.17591348205164
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 88 step 5 operation 1",
+ "target": "bridge-old-pump",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 677.0065725777732,
+ "y": 227.5452950401308,
+ "w": 145.49081654096278,
+ "h": 144.5106140872198
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 88 step 6 operation 1",
+ "target": "bridge-paper",
+ "drag": false,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 659.4094031688923,
+ "y": 264.0810480219035,
+ "w": 182.25922528593458,
+ "h": 69.30422147238039
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 88 step 7 operation 1",
+ "target": "bridge-gasket",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 699.2402943359888,
+ "y": 223.2716090124902,
+ "w": 105.29229131936688,
+ "h": 149.38768381385043
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 88 step 8 operation 1",
+ "target": "bridge-new-pump",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 677.006572577773,
+ "y": 227.5452950401308,
+ "w": 145.4908165409629,
+ "h": 144.5106140872198
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 88 step 8 operation 2",
+ "target": "bridge-pump-bolt-1",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.6199070925903,
+ "y": 223.1534628490798,
+ "w": 150.63249702941562,
+ "h": 149.1759088872721
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 88 step 8 operation 3",
+ "target": "bridge-pump-bolt-2",
+ "drag": true,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 675.6199070925919,
+ "y": 223.15346284907884,
+ "w": 150.63249702941573,
+ "h": 149.1759088872713
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 88 step 8 operation 4",
+ "target": "bridge-pump-bolt-3",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.6199075533763,
+ "y": 223.15346483073796,
+ "w": 150.6324959898924,
+ "h": 149.1759050157799
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 88 step 8 operation 5",
+ "target": "bridge-pump-bolt-4",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.6199091998145,
+ "y": 223.15346055153032,
+ "w": 150.63249281851847,
+ "h": 149.175913482052
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 88 step 9 operation 1",
+ "target": "bridge-fill-cap",
+ "drag": true,
+ "distance": 2.5322004355743615,
+ "projected": {
+ "x": 686.2101010714691,
+ "y": 218.87704735135978,
+ "w": 129.90719850472863,
+ "h": 157.99195689870223
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 88 step 9 operation 2",
+ "target": "bridge-oil-can",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 688.2788754827823,
+ "y": 213.304297633317,
+ "w": 125.31719601540499,
+ "h": 169.87502986918736
+ },
+ "labels": 8
+ },
+ {
+ "name": "task 88 step 10 operation 1",
+ "target": "bridge-inlet-bag",
+ "drag": true,
+ "distance": 2.53220043557436,
+ "projected": {
+ "x": 684.0253101831897,
+ "y": 215.6871254117612,
+ "w": 133.84273555858078,
+ "h": 164.8902890518567
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 88 step 10 operation 2",
+ "target": "bridge-inlet",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 676.5198928715338,
+ "y": 223.33055214123047,
+ "w": 149.274064019006,
+ "h": 150.67914827592742
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 88 step 10 operation 3",
+ "target": "bridge-outlet-bag",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 684.0253101831888,
+ "y": 215.68712541176194,
+ "w": 133.84273555858147,
+ "h": 164.8902890518561
+ },
+ "labels": 8
+ },
+ {
+ "name": "task 88 step 10 operation 4",
+ "target": "bridge-outlet",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 676.5198928715339,
+ "y": 223.33055214123044,
+ "w": 149.27406401900566,
+ "h": 150.6791482759274
+ },
+ "labels": 6
+ },
+ {
+ "name": "task 88 step 11 operation 1",
+ "target": "bridge-engine",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 673.1377211472847,
+ "y": 240.14902282175092,
+ "w": 153.71540788933282,
+ "h": 117.4649486538944
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 88 step 11 operation 2",
+ "target": "bridge-test-control",
+ "drag": true,
+ "distance": 2.53220043557436,
+ "projected": {
+ "x": 673.1377211472849,
+ "y": 240.14902282175075,
+ "w": 153.71540788933305,
+ "h": 117.4649486538944
+ },
+ "labels": 11
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-inspection-20260915/task-89-fullscreen.png b/reports/bridge-inspection-20260915/task-89-fullscreen.png
new file mode 100644
index 0000000..e44a42e
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-89-fullscreen.png differ
diff --git a/reports/bridge-inspection-20260915/task-89-initial.png b/reports/bridge-inspection-20260915/task-89-initial.png
new file mode 100644
index 0000000..bf19a6a
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-89-initial.png differ
diff --git a/reports/bridge-inspection-20260915/task-89-step-1.png b/reports/bridge-inspection-20260915/task-89-step-1.png
new file mode 100644
index 0000000..77c8fd0
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-89-step-1.png differ
diff --git a/reports/bridge-inspection-20260915/task-89-step-10.png b/reports/bridge-inspection-20260915/task-89-step-10.png
new file mode 100644
index 0000000..e1790d2
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-89-step-10.png differ
diff --git a/reports/bridge-inspection-20260915/task-89-step-11.png b/reports/bridge-inspection-20260915/task-89-step-11.png
new file mode 100644
index 0000000..c1b6786
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-89-step-11.png differ
diff --git a/reports/bridge-inspection-20260915/task-89-step-12.png b/reports/bridge-inspection-20260915/task-89-step-12.png
new file mode 100644
index 0000000..7544d8d
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-89-step-12.png differ
diff --git a/reports/bridge-inspection-20260915/task-89-step-13.png b/reports/bridge-inspection-20260915/task-89-step-13.png
new file mode 100644
index 0000000..6d8d370
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-89-step-13.png differ
diff --git a/reports/bridge-inspection-20260915/task-89-step-14.png b/reports/bridge-inspection-20260915/task-89-step-14.png
new file mode 100644
index 0000000..07b794e
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-89-step-14.png differ
diff --git a/reports/bridge-inspection-20260915/task-89-step-15.png b/reports/bridge-inspection-20260915/task-89-step-15.png
new file mode 100644
index 0000000..d00cc96
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-89-step-15.png differ
diff --git a/reports/bridge-inspection-20260915/task-89-step-16.png b/reports/bridge-inspection-20260915/task-89-step-16.png
new file mode 100644
index 0000000..0fc5df0
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-89-step-16.png differ
diff --git a/reports/bridge-inspection-20260915/task-89-step-2.png b/reports/bridge-inspection-20260915/task-89-step-2.png
new file mode 100644
index 0000000..bf462b4
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-89-step-2.png differ
diff --git a/reports/bridge-inspection-20260915/task-89-step-3.png b/reports/bridge-inspection-20260915/task-89-step-3.png
new file mode 100644
index 0000000..dff2910
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-89-step-3.png differ
diff --git a/reports/bridge-inspection-20260915/task-89-step-4.png b/reports/bridge-inspection-20260915/task-89-step-4.png
new file mode 100644
index 0000000..cb19afa
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-89-step-4.png differ
diff --git a/reports/bridge-inspection-20260915/task-89-step-5.png b/reports/bridge-inspection-20260915/task-89-step-5.png
new file mode 100644
index 0000000..5d37e5f
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-89-step-5.png differ
diff --git a/reports/bridge-inspection-20260915/task-89-step-6.png b/reports/bridge-inspection-20260915/task-89-step-6.png
new file mode 100644
index 0000000..014a23e
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-89-step-6.png differ
diff --git a/reports/bridge-inspection-20260915/task-89-step-7.png b/reports/bridge-inspection-20260915/task-89-step-7.png
new file mode 100644
index 0000000..4864a9d
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-89-step-7.png differ
diff --git a/reports/bridge-inspection-20260915/task-89-step-8.png b/reports/bridge-inspection-20260915/task-89-step-8.png
new file mode 100644
index 0000000..3a78c43
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-89-step-8.png differ
diff --git a/reports/bridge-inspection-20260915/task-89-step-9.png b/reports/bridge-inspection-20260915/task-89-step-9.png
new file mode 100644
index 0000000..eda140b
Binary files /dev/null and b/reports/bridge-inspection-20260915/task-89-step-9.png differ
diff --git a/reports/bridge-inspection-20260915/task-89-verification.json b/reports/bridge-inspection-20260915/task-89-verification.json
new file mode 100644
index 0000000..1c2efdd
--- /dev/null
+++ b/reports/bridge-inspection-20260915/task-89-verification.json
@@ -0,0 +1,1270 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 89 first view",
+ "state": {
+ "id": "bridge-small-cloth",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 2.5322004355743615,
+ "zoom": 2.0035218337979415,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 1010,
+ "y": 486.01751583020655,
+ "localX": 751,
+ "localY": 297.51751583020655,
+ "visible": true
+ },
+ "bounds": [
+ 0.3001091125469584,
+ 0.20019644975604534,
+ 0.025263652634544442
+ ],
+ "projected": {
+ "x": 687.0111405011243,
+ "y": 233.19904887242933,
+ "w": 131.9208444833704,
+ "h": 131.6311355695961
+ },
+ "pivot": [
+ -2.299399785448256,
+ 1.1078425712343078,
+ 6.251449528772805
+ ],
+ "pickPoints": [
+ {
+ "x": 1011.9715627428095,
+ "y": 487.5146166572274
+ },
+ {
+ "x": 992.1834360703039,
+ "y": 487.5146166572274
+ },
+ {
+ "x": 1031.759689415315,
+ "y": 487.5146166572274
+ },
+ {
+ "x": 972.3953093977983,
+ "y": 487.5146166572274
+ },
+ {
+ "x": 1051.5478160878206,
+ "y": 487.5146166572274
+ },
+ {
+ "x": 1011.9715627428095,
+ "y": 467.769946321788
+ },
+ {
+ "x": 992.1834360703039,
+ "y": 467.769946321788
+ },
+ {
+ "x": 1031.759689415315,
+ "y": 467.769946321788
+ },
+ {
+ "x": 972.3953093977983,
+ "y": 467.769946321788
+ },
+ {
+ "x": 1051.5478160878206,
+ "y": 467.769946321788
+ },
+ {
+ "x": 1011.9715627428095,
+ "y": 507.25928699266683
+ },
+ {
+ "x": 992.1834360703039,
+ "y": 507.25928699266683
+ },
+ {
+ "x": 1031.759689415315,
+ "y": 507.25928699266683
+ },
+ {
+ "x": 972.3953093977983,
+ "y": 507.25928699266683
+ },
+ {
+ "x": 1051.5478160878206,
+ "y": 507.25928699266683
+ },
+ {
+ "x": 1011.9715627428095,
+ "y": 448.02527598634856
+ },
+ {
+ "x": 992.1834360703039,
+ "y": 448.02527598634856
+ },
+ {
+ "x": 1031.759689415315,
+ "y": 448.02527598634856
+ },
+ {
+ "x": 972.3953093977983,
+ "y": 448.02527598634856
+ },
+ {
+ "x": 1051.5478160878206,
+ "y": 448.02527598634856
+ },
+ {
+ "x": 1011.9715627428095,
+ "y": 527.0039573281063
+ },
+ {
+ "x": 992.1834360703039,
+ "y": 527.0039573281063
+ },
+ {
+ "x": 1031.759689415315,
+ "y": 527.0039573281063
+ },
+ {
+ "x": 1051.5478160878206,
+ "y": 527.0039573281063
+ }
+ ],
+ "freePoints": [],
+ "camera": [
+ -0.8810566570717084,
+ 2.0155821733952988,
+ 8.142573699941536
+ ],
+ "target": [
+ -2.299399785448256,
+ 1.107842571234308,
+ 6.251449528772805
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 0.65,
+ "baseline": 0.65,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 0.65,
+ "baseline": 0.65,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 小腔清洗擦拭布",
+ "x": 941.96875,
+ "y": 569.328125,
+ "w": 140,
+ "h": 30,
+ "id": "bridge-small-cloth"
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-small-cloth",
+ "kind": "identify",
+ "directionHint": "清洗并擦净阀体",
+ "effects": [
+ {
+ "targetId": "bridge-small-cloth",
+ "offset": [
+ 0.7,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-small-valve",
+ "color": 8492701
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ -2.3,
+ 1.1,
+ 1.05
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 89 step 1 operation 1",
+ "target": "bridge-small-cloth",
+ "drag": true,
+ "distance": 2.5322004355743615,
+ "projected": {
+ "x": 664.9460165359945,
+ "y": 211.020267162851,
+ "w": 177.41079085694628,
+ "h": 177.02118231773275
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 89 step 2 operation 1",
+ "target": "bridge-small-pipe",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 671.8485168192764,
+ "y": 228.0346946106338,
+ "w": 157.16816997510477,
+ "h": 148.510999029786
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 89 step 2 operation 2",
+ "target": "bridge-small-bag",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 682.3735035808356,
+ "y": 218.36709515767325,
+ "w": 136.62661367177873,
+ "h": 165.17915835058528
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 89 step 3 operation 1",
+ "target": "bridge-small-bolt-1",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.7486593132365,
+ "y": 228.97000269586843,
+ "w": 147.95521118406987,
+ "h": 141.73738336912814
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 89 step 3 operation 2",
+ "target": "bridge-small-bolt-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.7486593132371,
+ "y": 228.97000269586843,
+ "w": 147.95521118406873,
+ "h": 141.7373833691283
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 89 step 3 operation 3",
+ "target": "bridge-small-bolt-3",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.7486593132378,
+ "y": 228.97000269586843,
+ "w": 147.9552111840693,
+ "h": 141.7373833691283
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 89 step 3 operation 4",
+ "target": "bridge-small-bolt-4",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.7486593132371,
+ "y": 228.9700026958683,
+ "w": 147.95521118406998,
+ "h": 141.7373833691281
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 89 step 3 operation 5",
+ "target": "bridge-small-valve",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 674.7869710234143,
+ "y": 235.69149400652907,
+ "w": 159.44822302458454,
+ "h": 138.43198035592184
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 89 step 4 operation 1",
+ "target": "bridge-small-plug-1",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 678.3692131543319,
+ "y": 221.4799205956042,
+ "w": 145.36610408338368,
+ "h": 157.16527175659138
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 89 step 4 operation 2",
+ "target": "bridge-small-plug-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 678.3692131543323,
+ "y": 221.4799205956043,
+ "w": 145.36610408338356,
+ "h": 157.16527175659127
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 89 step 4 operation 3",
+ "target": "bridge-small-seat",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 678.2385470851788,
+ "y": 238.35935966699282,
+ "w": 156.61105607391414,
+ "h": 133.08186046530346
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 89 step 5 operation 1",
+ "target": "bridge-large-cloth",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 687.0111405011241,
+ "y": 233.19904887242927,
+ "w": 131.9208444833705,
+ "h": 131.63113556959632
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 89 step 6 operation 1",
+ "target": "bridge-large-pipe",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 671.8485168192761,
+ "y": 228.03469461063384,
+ "w": 157.16816997510466,
+ "h": 148.51099902978598
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 89 step 6 operation 2",
+ "target": "bridge-large-bag",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 682.3735035808367,
+ "y": 218.36709515767336,
+ "w": 136.62661367177827,
+ "h": 165.1791583505851
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 89 step 7 operation 1",
+ "target": "bridge-large-bolt-1",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.7486593132369,
+ "y": 228.97000269586815,
+ "w": 147.95521118406919,
+ "h": 141.7373833691283
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 89 step 7 operation 2",
+ "target": "bridge-large-bolt-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.7486593132371,
+ "y": 228.9700026958685,
+ "w": 147.95521118406953,
+ "h": 141.7373833691282
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 89 step 7 operation 3",
+ "target": "bridge-large-bolt-3",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.7486593132377,
+ "y": 228.97000269586812,
+ "w": 147.9552111840694,
+ "h": 141.73738336912834
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 89 step 7 operation 4",
+ "target": "bridge-large-bolt-4",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.7486593132376,
+ "y": 228.9700026958683,
+ "w": 147.95521118406919,
+ "h": 141.73738336912817
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 89 step 7 operation 5",
+ "target": "bridge-large-valve",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 674.7869710234144,
+ "y": 235.691494006529,
+ "w": 159.44822302458442,
+ "h": 138.4319803559219
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 89 step 8 operation 1",
+ "target": "bridge-large-plug-1",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 678.3692131543319,
+ "y": 221.47992059560414,
+ "w": 145.36610408338356,
+ "h": 157.16527175659144
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 89 step 8 operation 2",
+ "target": "bridge-large-plug-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 678.3692131543319,
+ "y": 221.47992059560394,
+ "w": 145.36610408338368,
+ "h": 157.16527175659152
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 89 step 8 operation 3",
+ "target": "bridge-large-seat",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 678.2385470851787,
+ "y": 238.35935966699284,
+ "w": 156.61105607391414,
+ "h": 133.08186046530355
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 89 step 9 operation 1",
+ "target": "bridge-large-seat",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 678.2385470851787,
+ "y": 238.35935966699284,
+ "w": 156.61105607391414,
+ "h": 133.08186046530355
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 89 step 9 operation 2",
+ "target": "bridge-large-plug-1",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 678.3692131543319,
+ "y": 221.47992059560414,
+ "w": 145.3661040833839,
+ "h": 157.1652717565915
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 89 step 9 operation 3",
+ "target": "bridge-large-plug-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 678.3692131543321,
+ "y": 221.47992059560409,
+ "w": 145.3661040833838,
+ "h": 157.16527175659127
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 89 step 10 operation 1",
+ "target": "bridge-small-valve",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 674.7869710234144,
+ "y": 235.69149400652904,
+ "w": 159.44822302458442,
+ "h": 138.43198035592187
+ },
+ "labels": 8
+ },
+ {
+ "name": "task 89 step 10 operation 2",
+ "target": "bridge-large-bolt-1",
+ "drag": true,
+ "distance": 2.5322004355743615,
+ "projected": {
+ "x": 675.7486593132375,
+ "y": 228.97000269586854,
+ "w": 147.9552111840694,
+ "h": 141.73738336912797
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 89 step 10 operation 3",
+ "target": "bridge-large-bolt-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.7486593132375,
+ "y": 228.97000269586846,
+ "w": 147.9552111840694,
+ "h": 141.73738336912788
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 89 step 10 operation 4",
+ "target": "bridge-large-bolt-3",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 675.7486593132378,
+ "y": 228.97000269586823,
+ "w": 147.95521118406907,
+ "h": 141.73738336912822
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 89 step 10 operation 5",
+ "target": "bridge-large-bolt-4",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.7486593132369,
+ "y": 228.97000269586823,
+ "w": 147.95521118406975,
+ "h": 141.73738336912822
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 89 step 11 observation retained for instructor review",
+ "pass": true
+ },
+ {
+ "name": "task 89 step 11 operation 1",
+ "target": "bridge-large-bag",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 682.3735035808368,
+ "y": 218.3670951576731,
+ "w": 136.6266136717784,
+ "h": 165.17915835058508
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 89 step 11 operation 2",
+ "target": "bridge-large-pipe",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 671.8485168192761,
+ "y": 228.0346946106337,
+ "w": 157.1681699751049,
+ "h": 148.51099902978618
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 12 operation 1",
+ "target": "bridge-large-bolt-1",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.7486593132369,
+ "y": 228.97000269586815,
+ "w": 147.95521118406919,
+ "h": 141.73738336912837
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 89 step 12 operation 2",
+ "target": "bridge-large-bolt-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.7486593132371,
+ "y": 228.9700026958685,
+ "w": 147.95521118406953,
+ "h": 141.7373833691282
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 89 step 12 operation 3",
+ "target": "bridge-large-bolt-3",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.7486593132371,
+ "y": 228.97000269586837,
+ "w": 147.9552111840693,
+ "h": 141.73738336912808
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 89 step 12 operation 4",
+ "target": "bridge-large-bolt-4",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.7486593132376,
+ "y": 228.97000269586815,
+ "w": 147.95521118406919,
+ "h": 141.7373833691283
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 89 step 13 operation 1",
+ "target": "bridge-small-seat",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 678.2385470851788,
+ "y": 238.35935966699282,
+ "w": 156.61105607391414,
+ "h": 133.08186046530346
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 89 step 13 operation 2",
+ "target": "bridge-small-plug-1",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 678.369213154332,
+ "y": 221.47992059560377,
+ "w": 145.3661040833839,
+ "h": 157.16527175659147
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 89 step 13 operation 3",
+ "target": "bridge-small-plug-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 678.3692131543319,
+ "y": 221.47992059560403,
+ "w": 145.36610408338356,
+ "h": 157.16527175659138
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 89 step 14 operation 1",
+ "target": "bridge-large-valve",
+ "drag": true,
+ "distance": 2.53220043557436,
+ "projected": {
+ "x": 674.7869710234143,
+ "y": 235.69149400652904,
+ "w": 159.4482230245843,
+ "h": 138.43198035592198
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 14 operation 2",
+ "target": "bridge-small-bolt-1",
+ "drag": true,
+ "distance": 2.53220043557436,
+ "projected": {
+ "x": 675.7486593132371,
+ "y": 228.9700026958678,
+ "w": 147.95521118406987,
+ "h": 141.73738336912814
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 89 step 14 operation 3",
+ "target": "bridge-small-bolt-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.7486593132365,
+ "y": 228.97000269586837,
+ "w": 147.95521118406987,
+ "h": 141.73738336912814
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 89 step 14 operation 4",
+ "target": "bridge-small-bolt-3",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.7486593132365,
+ "y": 228.9700026958682,
+ "w": 147.95521118406987,
+ "h": 141.73738336912825
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 89 step 14 operation 5",
+ "target": "bridge-small-bolt-4",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.7486593132378,
+ "y": 228.97000269586832,
+ "w": 147.95521118406975,
+ "h": 141.73738336912825
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 89 step 15 observation retained for instructor review",
+ "pass": true
+ },
+ {
+ "name": "task 89 step 15 operation 1",
+ "target": "bridge-small-bag",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 682.3735035808363,
+ "y": 218.36709515767322,
+ "w": 136.6266136717784,
+ "h": 165.17915835058503
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 89 step 15 operation 2",
+ "target": "bridge-small-pipe",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 671.8485168192763,
+ "y": 228.0346946106337,
+ "w": 157.1681699751049,
+ "h": 148.51099902978618
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 16 operation 1",
+ "target": "bridge-small-bolt-1",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.7486593132365,
+ "y": 228.970002695868,
+ "w": 147.9552111840693,
+ "h": 141.73738336912822
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 89 step 16 operation 2",
+ "target": "bridge-small-bolt-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.7486593132364,
+ "y": 228.9700026958684,
+ "w": 147.9552111840694,
+ "h": 141.73738336912805
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 89 step 16 operation 3",
+ "target": "bridge-small-bolt-3",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.7486593132378,
+ "y": 228.97000269586843,
+ "w": 147.9552111840693,
+ "h": 141.73738336912814
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 89 step 16 operation 4",
+ "target": "bridge-small-bolt-4",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 675.7486593132378,
+ "y": 228.97000269586815,
+ "w": 147.9552111840693,
+ "h": 141.73738336912825
+ },
+ "labels": 0
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-inspection-20260915/validation.json b/reports/bridge-inspection-20260915/validation.json
new file mode 100644
index 0000000..3ac8038
--- /dev/null
+++ b/reports/bridge-inspection-20260915/validation.json
@@ -0,0 +1,21 @@
+{
+ "date": "2026-09-15",
+ "build": {
+ "command": "pnpm run build",
+ "pass": true,
+ "exitCode": 0,
+ "checks": ["vue-tsc --noEmit", "vite build", "verify-legacy-model-editor-dist.mjs"],
+ "notes": "构建成功;保留 Vite 的 chunk size 与插件耗时提示。"
+ },
+ "contracts": [
+ {"command": "node scripts/virtual-training-formal-route.contract.test.mjs", "pass": true, "exitCode": 0},
+ {"command": "node --test scripts/bridge-scripts-3d-only.test.mjs scripts/bridge-model-geometry.test.mjs scripts/bridge-grounding.test.mjs scripts/bridge-digital-video.contract.test.mjs", "pass": true, "exitCode": 0, "passedTests": 16, "failedTests": 0}
+ ],
+ "diffCheck": {"command": "git diff --check", "pass": true},
+ "hdr": {
+ "file": "public/environments/venice_sunset_1k.hdr",
+ "bytes": 1397783,
+ "sha256": "0E72ED46B5316CB5FB67FC81FF85B024A09146FD89EF3811A8D2299647ADA118",
+ "source": "https://raw.githubusercontent.com/mrdoob/three.js/r185/examples/textures/equirectangular/venice_sunset_1k.hdr"
+ }
+}
diff --git a/reports/bridge-inspection-lan-20260915/click-flow-1280.json b/reports/bridge-inspection-lan-20260915/click-flow-1280.json
new file mode 100644
index 0000000..aab267e
--- /dev/null
+++ b/reports/bridge-inspection-lan-20260915/click-flow-1280.json
@@ -0,0 +1,461 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 86 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 2.532200435574361,
+ "zoom": 2.569435006371943,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 967,
+ "y": 462.01461018041243,
+ "localX": 708,
+ "localY": 273.51461018041243,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935024518472723,
+ 0.13537492625037484,
+ 0.19723593501664283
+ ],
+ "projected": {
+ "x": 645.196287612361,
+ "y": 214.12950654981623,
+ "w": 123.48885188237955,
+ "h": 122.64549665641223
+ },
+ "pivot": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "pickPoints": [
+ {
+ "x": 965.9407135535507,
+ "y": 463.95225487802236
+ },
+ {
+ "x": 947.4173857711938,
+ "y": 463.95225487802236
+ },
+ {
+ "x": 984.4640413359076,
+ "y": 463.95225487802236
+ },
+ {
+ "x": 928.8940579888368,
+ "y": 463.95225487802236
+ },
+ {
+ "x": 1002.9873691182646,
+ "y": 463.95225487802236
+ },
+ {
+ "x": 965.9407135535507,
+ "y": 445.5554303795605
+ },
+ {
+ "x": 947.4173857711938,
+ "y": 445.5554303795605
+ },
+ {
+ "x": 984.4640413359076,
+ "y": 445.5554303795605
+ },
+ {
+ "x": 965.9407135535507,
+ "y": 482.34907937648416
+ },
+ {
+ "x": 984.4640413359076,
+ "y": 482.34907937648416
+ },
+ {
+ "x": 928.8940579888368,
+ "y": 482.34907937648416
+ },
+ {
+ "x": 947.4173857711938,
+ "y": 427.15860588109865
+ },
+ {
+ "x": 984.4640413359076,
+ "y": 427.15860588109865
+ },
+ {
+ "x": 965.9407135535507,
+ "y": 500.745903874946
+ },
+ {
+ "x": 947.4173857711938,
+ "y": 500.745903874946
+ },
+ {
+ "x": 984.4640413359076,
+ "y": 500.745903874946
+ },
+ {
+ "x": 928.8940579888368,
+ "y": 500.745903874946
+ }
+ ],
+ "freePoints": [],
+ "camera": [
+ 1.290166569077179,
+ 1.5224381402623406,
+ 3.537805842935374
+ ],
+ "target": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "outline": 1,
+ "cutaway": 3,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 909.9375,
+ "y": 541.265625,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "non-workflow body click/orbit, selection-highlight restoration, Escape fullscreen exit",
+ "pass": true
+ },
+ {
+ "name": "task 86 step 1 operation 1",
+ "target": "front-pump-hydraulic-pump",
+ "drag": false,
+ "distance": 2.5322004355743624,
+ "projected": {
+ "x": 623.5398385513091,
+ "y": 193.65188123221276,
+ "w": 166.07120714659266,
+ "h": 164.9370539817154
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 86 step 2 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": false,
+ "distance": 2.53220043557436,
+ "projected": {
+ "x": 657.1468116866854,
+ "y": 225.72524004668344,
+ "w": 100.60704355414202,
+ "h": 96.61882473009956
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 86 step 3 operation 1",
+ "target": "front-pump-ball-valve-switch",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 641.1222412378163,
+ "y": 243.7421122440263,
+ "w": 135.00766393475897,
+ "h": 60.28073476983778
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 86 step 4 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 665.283308852038,
+ "y": 210.28587084037858,
+ "w": 84.45165528632356,
+ "h": 127.58808142304449
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 86 step 5 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 661.1333311976852,
+ "y": 217.52528596116088,
+ "w": 91.26798486750636,
+ "h": 114.57317567711476
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 86 step 5 operation 2",
+ "target": "front-pump-rescue-switch",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 671.8206480577488,
+ "y": 246.35295055797485,
+ "w": 72.39019179880052,
+ "h": 54.407676774597974
+ },
+ "labels": 0
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/86/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-inspection-lan-20260915/controls-1024.json b/reports/bridge-inspection-lan-20260915/controls-1024.json
new file mode 100644
index 0000000..e412082
--- /dev/null
+++ b/reports/bridge-inspection-lan-20260915/controls-1024.json
@@ -0,0 +1,377 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 86 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 2.532200435574361,
+ "zoom": 2.7546090732813115,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 820,
+ "y": 486.0175158302065,
+ "localX": 599,
+ "localY": 297.5175158302065,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935024518472723,
+ 0.13537492625037484,
+ 0.19723593501664283
+ ],
+ "projected": {
+ "x": 525.0065761835924,
+ "y": 227.54529044904206,
+ "w": 145.49080948490075,
+ "h": 144.5106231928143
+ },
+ "pivot": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "pickPoints": [
+ {
+ "x": 818.7519809260427,
+ "y": 488.3006020454492
+ },
+ {
+ "x": 796.9283595033077,
+ "y": 488.3006020454492
+ },
+ {
+ "x": 840.5756023487779,
+ "y": 488.3006020454492
+ },
+ {
+ "x": 775.1047380805726,
+ "y": 488.3006020454492
+ },
+ {
+ "x": 862.399223771513,
+ "y": 488.3006020454492
+ },
+ {
+ "x": 818.7519809260427,
+ "y": 466.62400856652704
+ },
+ {
+ "x": 796.9283595033077,
+ "y": 466.62400856652704
+ },
+ {
+ "x": 840.5756023487779,
+ "y": 466.62400856652704
+ },
+ {
+ "x": 818.7519809260427,
+ "y": 509.9771955243714
+ },
+ {
+ "x": 840.5756023487779,
+ "y": 509.9771955243714
+ },
+ {
+ "x": 775.1047380805726,
+ "y": 509.9771955243714
+ },
+ {
+ "x": 796.9283595033077,
+ "y": 444.9474150876049
+ },
+ {
+ "x": 840.5756023487779,
+ "y": 444.9474150876049
+ },
+ {
+ "x": 818.7519809260427,
+ "y": 531.6537890032935
+ },
+ {
+ "x": 796.9283595033077,
+ "y": 531.6537890032935
+ },
+ {
+ "x": 840.5756023487779,
+ "y": 531.6537890032935
+ },
+ {
+ "x": 775.1047380805726,
+ "y": 531.6537890032935
+ }
+ ],
+ "freePoints": [],
+ "camera": [
+ 1.290166569077179,
+ 1.5224381402623406,
+ 3.537805842935374
+ ],
+ "target": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "outline": 1,
+ "cutaway": 3,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 762.75,
+ "y": 576.546875,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "non-workflow body click/orbit, selection-highlight restoration, Escape fullscreen exit",
+ "pass": true
+ }
+ ],
+ "errors": [],
+ "writes": []
+}
\ No newline at end of file
diff --git a/reports/bridge-inspection-lan-20260915/free-inspection-controls.png b/reports/bridge-inspection-lan-20260915/free-inspection-controls.png
new file mode 100644
index 0000000..7602a67
Binary files /dev/null and b/reports/bridge-inspection-lan-20260915/free-inspection-controls.png differ
diff --git a/reports/bridge-inspection-lan-20260915/task-86-fullscreen.png b/reports/bridge-inspection-lan-20260915/task-86-fullscreen.png
new file mode 100644
index 0000000..9fc7b4d
Binary files /dev/null and b/reports/bridge-inspection-lan-20260915/task-86-fullscreen.png differ
diff --git a/reports/bridge-inspection-lan-20260915/task-86-initial.png b/reports/bridge-inspection-lan-20260915/task-86-initial.png
new file mode 100644
index 0000000..6cf0c4b
Binary files /dev/null and b/reports/bridge-inspection-lan-20260915/task-86-initial.png differ
diff --git a/reports/bridge-inspection-lan-20260915/task-86-step-1.png b/reports/bridge-inspection-lan-20260915/task-86-step-1.png
new file mode 100644
index 0000000..910b578
Binary files /dev/null and b/reports/bridge-inspection-lan-20260915/task-86-step-1.png differ
diff --git a/reports/bridge-inspection-lan-20260915/task-86-step-2.png b/reports/bridge-inspection-lan-20260915/task-86-step-2.png
new file mode 100644
index 0000000..c36ed00
Binary files /dev/null and b/reports/bridge-inspection-lan-20260915/task-86-step-2.png differ
diff --git a/reports/bridge-inspection-lan-20260915/task-86-step-3.png b/reports/bridge-inspection-lan-20260915/task-86-step-3.png
new file mode 100644
index 0000000..247530b
Binary files /dev/null and b/reports/bridge-inspection-lan-20260915/task-86-step-3.png differ
diff --git a/reports/bridge-inspection-lan-20260915/task-86-step-4.png b/reports/bridge-inspection-lan-20260915/task-86-step-4.png
new file mode 100644
index 0000000..bdcf423
Binary files /dev/null and b/reports/bridge-inspection-lan-20260915/task-86-step-4.png differ
diff --git a/reports/bridge-inspection-lan-20260915/task-86-step-5.png b/reports/bridge-inspection-lan-20260915/task-86-step-5.png
new file mode 100644
index 0000000..8ce1377
Binary files /dev/null and b/reports/bridge-inspection-lan-20260915/task-86-step-5.png differ
diff --git a/reports/bridge-introduction-20260918/authoring-uploaded-video.png b/reports/bridge-introduction-20260918/authoring-uploaded-video.png
new file mode 100644
index 0000000..cfebb2c
Binary files /dev/null and b/reports/bridge-introduction-20260918/authoring-uploaded-video.png differ
diff --git a/reports/bridge-introduction-20260918/authoring.png b/reports/bridge-introduction-20260918/authoring.png
new file mode 100644
index 0000000..fb20f96
Binary files /dev/null and b/reports/bridge-introduction-20260918/authoring.png differ
diff --git a/reports/bridge-introduction-20260918/before-project-438.json b/reports/bridge-introduction-20260918/before-project-438.json
new file mode 100644
index 0000000..59723eb
--- /dev/null
+++ b/reports/bridge-introduction-20260918/before-project-438.json
@@ -0,0 +1,1305 @@
+{
+ "project": {
+ "id": "438",
+ "type": "TRAINING",
+ "code": "TRAINING-691D079D73724910",
+ "name": "重型支援桥液压泵应急切换",
+ "description": "原稿:桥梁/文件2/4.jpg",
+ "categoryCode": "MAINTENANCE",
+ "trainingMode": "VIRTUAL",
+ "coverUri": "",
+ "status": "PUBLISHED",
+ "ownerUserId": "99",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "currentVersionId": "533",
+ "currentVersionNo": 3,
+ "currentVersionCode": "V3.0.0",
+ "publishedVersionId": "533",
+ "publishedTime": 1789398489,
+ "usageCount": 0,
+ "version": 6,
+ "addTime": 1789309629,
+ "updateTime": "2026-09-14T23:08:09",
+ "contentSummary": {
+ "schema": "digital-workshop-training-project",
+ "trainingMode": "VIRTUAL",
+ "stepCount": 5
+ },
+ "currentVersionStatus": "PUBLISHED",
+ "dependencyCount": 0,
+ "assetCount": 5,
+ "readCount": 0,
+ "downloadCount": 0
+ },
+ "currentVersion": {
+ "id": "533",
+ "projectId": "438",
+ "versionNo": 3,
+ "versionCode": "V3.0.0",
+ "status": "PUBLISHED",
+ "content": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥液压泵应急切换",
+ "status": "published",
+ "trainingMode": "VIRTUAL",
+ "resources": {
+ "models": [
+ {
+ "id": "front-pump-step-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "name": "架桥车前泵互救操作整车模型",
+ "baseModelName": "架桥车前泵互救操作整车模型",
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "revision": 1,
+ "materialPreset": null,
+ "parts": [
+ {
+ "editorId": "",
+ "interactionId": "front-pump-hydraulic-pump",
+ "nodeName": "1液压泵",
+ "sourceNodeName": "1液压泵",
+ "nodePath": "",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-power-take-off",
+ "nodeName": "2取力器",
+ "sourceNodeName": "2取力器",
+ "nodePath": "",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-pto-switch",
+ "nodeName": "2取力器开关",
+ "sourceNodeName": "2取力器开关",
+ "nodePath": "",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-ball-valve-switch",
+ "nodeName": "3球阀开关",
+ "sourceNodeName": "3球阀开关",
+ "nodePath": "",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box",
+ "nodeName": "5辅助控制盒",
+ "sourceNodeName": "5辅助控制盒",
+ "nodePath": "",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "nodeName": "5辅助控制盒盖",
+ "sourceNodeName": "5辅助控制盒盖",
+ "nodePath": "",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-rescue-switch",
+ "nodeName": "5互救开关",
+ "sourceNodeName": "5互救开关",
+ "nodePath": "",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "animations": []
+ },
+ "task": {
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "code": "TR-FRONT-PUMP-RESCUE-001",
+ "title": "架桥车前泵故障互救处置训练(虚拟仿真)",
+ "categoryId": "minor-repair",
+ "difficulty": "标准",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "image": "/models/step-model-front-pump-thumb.png",
+ "equipment": "架桥车",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ]
+ },
+ "scenario": {
+ "id": "front-pump-rescue-scenario",
+ "publishedSceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "publishedSceneVersion": "1.0",
+ "baseVisualKey": "front-pump-rescue",
+ "visualKey": "front-pump-rescue",
+ "environmentName": "架桥车互救操作训练场",
+ "sceneLayout": "架桥车整车操作位",
+ "equipmentState": "前泵故障 · 待执行互救处置",
+ "tools": [],
+ "faults": [],
+ "environment": {
+ "type": "outdoor",
+ "mode": "builtin",
+ "sourceName": "内置架桥车互救操作训练场",
+ "resourceUrl": "",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "sceneResource": {
+ "sceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "version": "1.0",
+ "sourceKind": "published",
+ "status": "已发布",
+ "name": "架桥车前泵故障互救处置训练场景",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "objectCount": 2,
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "1.0",
+ "name": "架桥车前泵故障互救处置训练场景",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "environment": {
+ "presetId": "outdoor-1",
+ "type": "outdoor"
+ },
+ "rendering": {
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 70,
+ "far": 240
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.1,
+ "far": 800,
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ]
+ },
+ "assetReferences": [
+ {
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 32195288,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "training-content"
+ }
+ ]
+ },
+ "accent": "#2d86d8",
+ "background": 11062241,
+ "fog": 11062241,
+ "ground": 7110499,
+ "camera": {
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ },
+ "retainStoredParts": true,
+ "sceneTags": [
+ "真实整车步骤模型",
+ "前泵故障互救",
+ "机构顺序操作"
+ ],
+ "sensorFeeds": []
+ },
+ "tools": [],
+ "faults": [],
+ "steps": [
+ {
+ "id": "front-pump-step-01",
+ "code": "FRONT-PUMP-STEP-01",
+ "stepCode": "front-pump-step-01",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-01",
+ "number": 1,
+ "title": "根据故障现象确定是哪一个液压泵发生故障",
+ "targetId": "front-pump-hydraulic-pump",
+ "targetName": "液压泵",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "guidance": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "warning": "",
+ "destination": "液压泵",
+ "success": "根据故障现象确定是哪一个液压泵发生故障",
+ "cameraPolicy": "exterior",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-hydraulic-pump",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "identify",
+ "axisSpace": "world",
+ "highlightColor": "#e53935",
+ "steps": [
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-hydraulic-pump",
+ "targetNodeName": "1液压泵",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,确定故障液压泵。根据故障现象确定发生故障的液压泵。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_FF17FDE117E94B80BB30DF3E058821FD",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "53",
+ "videoName": "重型支援桥液压泵应急切换 · 1 根据故障现象确定是哪一个液压泵发生故障",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-02",
+ "code": "FRONT-PUMP-STEP-02",
+ "stepCode": "front-pump-step-02",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-02",
+ "number": 2,
+ "title": "断开架桥车取力器",
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "guidance": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "断开架桥车取力器",
+ "cameraPolicy": "exterior",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": -30,
+ "toleranceDegrees": 6,
+ "directionHint": "向断开方向摇动"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "2取力器开关",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,断开架桥车取力器。将架桥车取力器断开。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_6E75DADE9D0649DCA16A2499D1EE8776",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "54",
+ "videoName": "重型支援桥液压泵应急切换 · 2 断开架桥车取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-03",
+ "code": "FRONT-PUMP-STEP-03",
+ "stepCode": "front-pump-step-03",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-03",
+ "number": 3,
+ "title": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "targetId": "front-pump-ball-valve-switch",
+ "targetName": "球阀开关",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "guidance": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "warning": "",
+ "destination": "球阀开关",
+ "success": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-ball-valve-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "steps": [
+ {
+ "targetId": "front-pump-ball-valve-switch",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "由垂直与官道方向旋转至平行于管道方向"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-ball-valve-switch",
+ "targetNodeName": "3球阀开关",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,打开互救球阀。打开备胎上方两个红色滤油器之间的连通球阀,手柄由垂直管道转为平行管道。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_9A4629F90E614E60835441B5D0AAE86C",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "55",
+ "videoName": "重型支援桥液压泵应急切换 · 3 将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-04",
+ "code": "FRONT-PUMP-STEP-04",
+ "stepCode": "front-pump-step-04",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-04",
+ "number": 4,
+ "title": "重新联通取力器",
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "guidance": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "重新联通取力器",
+ "cameraPolicy": "exterior",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "按步骤2的相反方向摇回去"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "2取力器开关",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,重新接通取力器。将架桥车取力器重新接通。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_DA42FE5C995F4C67A559E6E94DB1C440",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "56",
+ "videoName": "重型支援桥液压泵应急切换 · 4 重新联通取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-05",
+ "code": "FRONT-PUMP-STEP-05",
+ "stepCode": "front-pump-step-05",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-05",
+ "number": 5,
+ "title": "打开辅助控制盒内的“互救”开关",
+ "targetId": "front-pump-aux-control-box-cover",
+ "targetName": "辅助控制盒盖",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "guidance": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "warning": "",
+ "destination": "辅助控制盒盖",
+ "success": "打开辅助控制盒内的“互救”开关",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-aux-control-box-cover",
+ "mode": "inspect",
+ "durationMs": 1600,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "sequence",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-aux-control-box"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-aux-control-box-cover",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 100,
+ "toleranceDegrees": 8,
+ "directionHint": "沿控制盒盖边缘铰链打开",
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ }
+ },
+ {
+ "targetId": "front-pump-rescue-switch",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "往上搬"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-aux-control-box-cover",
+ "targetNodeName": "5辅助控制盒盖",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,打开辅助控制盒互救开关。打开辅助控制盒盖,再打开互救开关,进入单泵作业状态。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D85C34259BB34E0C966C5A79569DBF10",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "57",
+ "videoName": "重型支援桥液压泵应急切换 · 5 打开辅助控制盒内的“互救”开关",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ }
+ ],
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "totalScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-pump-switch",
+ "scriptVersion": "2"
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/4.jpg"
+ },
+ "changeSummary": "39段数字人视频讲解;原语音保留可切换",
+ "checksum": "18bc3f2472cbb125354438c2058f05bea45daa71cc352590b214c12894c51b27",
+ "createdByUserId": "99",
+ "createdByName": "内部维护",
+ "publishedByUserId": "99",
+ "publishedByName": "内部维护",
+ "publishedTime": 1789398489,
+ "version": 2,
+ "addTime": 1789398488,
+ "updateTime": "2026-09-14T23:08:09",
+ "dependencies": [],
+ "assets": [
+ {
+ "id": "3960",
+ "versionId": "533",
+ "code": "DH_FF17FDE117E94B80BB30DF3E058821FD",
+ "name": "重型支援桥液压泵应急切换 · 1 根据故障现象确定是哪一个液压泵发生故障",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/f14a6784aeb6457a16f86387b4e701d2.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 202274,
+ "sha256": "d5c992479f2893d3efbe20921dab1f82fcc8ab4c4f512477fe4e0ea636e8fb7f",
+ "metadata": {
+ "sourceVideoId": "53",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3961",
+ "versionId": "533",
+ "code": "DH_6E75DADE9D0649DCA16A2499D1EE8776",
+ "name": "重型支援桥液压泵应急切换 · 2 断开架桥车取力器",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/57c38aeae43b965404d45bb45824588e.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 172936,
+ "sha256": "69ae89ec5e3d4a5ccd3efce23f33707ee4b3a236b398235ad133ee34f793a9ba",
+ "metadata": {
+ "sourceVideoId": "54",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3962",
+ "versionId": "533",
+ "code": "DH_9A4629F90E614E60835441B5D0AAE86C",
+ "name": "重型支援桥液压泵应急切换 · 3 将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/1a7dfbfaefc3cb5859287a953de92d89.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 587353,
+ "sha256": "c9ac26a8d58e52d7dc57c28b1c6f9134de780f65b29e1eef1e8351eb51753758",
+ "metadata": {
+ "sourceVideoId": "55",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3963",
+ "versionId": "533",
+ "code": "DH_DA42FE5C995F4C67A559E6E94DB1C440",
+ "name": "重型支援桥液压泵应急切换 · 4 重新联通取力器",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/024978af4939a2adbd3be834ef62e29b.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 162678,
+ "sha256": "383d1fe0a6a80112c7b8868ae1edfdbeadbc86c13ce6feec1a9721ba3d9881fe",
+ "metadata": {
+ "sourceVideoId": "56",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3964",
+ "versionId": "533",
+ "code": "DH_D85C34259BB34E0C966C5A79569DBF10",
+ "name": "重型支援桥液压泵应急切换 · 5 打开辅助控制盒内的“互救”开关",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/2c20f201cb7c9663b751e485990de355.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 285991,
+ "sha256": "2d53c0bef4d8aa71d8b8535de676d2d8485929de06534ce3aab677805bc8eef3",
+ "metadata": {
+ "sourceVideoId": "57",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/reports/bridge-introduction-20260918/before-project-439.json b/reports/bridge-introduction-20260918/before-project-439.json
new file mode 100644
index 0000000..cedc386
--- /dev/null
+++ b/reports/bridge-introduction-20260918/before-project-439.json
@@ -0,0 +1,1664 @@
+{
+ "project": {
+ "id": "439",
+ "type": "TRAINING",
+ "code": "TRAINING-439DE936E7CF4371",
+ "name": "重型支援桥液压泵应急替代",
+ "description": "原稿:桥梁/文件2/5.jpg、6.jpg",
+ "categoryCode": "MAINTENANCE",
+ "trainingMode": "VIRTUAL",
+ "coverUri": "",
+ "status": "PUBLISHED",
+ "ownerUserId": "99",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "currentVersionId": "553",
+ "currentVersionNo": 5,
+ "currentVersionCode": "V5.0.0",
+ "publishedVersionId": "553",
+ "publishedTime": 1789657622,
+ "usageCount": 0,
+ "version": 10,
+ "addTime": 1789309630,
+ "updateTime": "2026-09-17T23:07:02",
+ "contentSummary": {
+ "schema": "digital-workshop-training-project",
+ "trainingMode": "VIRTUAL",
+ "stepCount": 7
+ },
+ "currentVersionStatus": "PUBLISHED",
+ "dependencyCount": 0,
+ "assetCount": 7,
+ "readCount": 0,
+ "downloadCount": 0
+ },
+ "currentVersion": {
+ "id": "553",
+ "projectId": "439",
+ "versionNo": 5,
+ "versionCode": "V5.0.0",
+ "status": "PUBLISHED",
+ "content": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥液压泵应急替代",
+ "status": "published",
+ "trainingMode": "VIRTUAL",
+ "resources": {
+ "models": [
+ {
+ "id": "front-pump-step-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "name": "架桥车前泵互救操作整车模型",
+ "baseModelName": "架桥车前泵互救操作整车模型",
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "revision": 1,
+ "materialPreset": null,
+ "parts": [
+ {
+ "editorId": "",
+ "interactionId": "front-pump-hydraulic-pump",
+ "nodeName": "1液压泵",
+ "sourceNodeName": "1液压泵",
+ "nodePath": "",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-power-take-off",
+ "nodeName": "2取力器",
+ "sourceNodeName": "2取力器",
+ "nodePath": "",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-pto-switch",
+ "nodeName": "2取力器开关",
+ "sourceNodeName": "2取力器开关",
+ "nodePath": "",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-ball-valve-switch",
+ "nodeName": "3球阀开关",
+ "sourceNodeName": "3球阀开关",
+ "nodePath": "",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box",
+ "nodeName": "5辅助控制盒",
+ "sourceNodeName": "5辅助控制盒",
+ "nodePath": "",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "nodeName": "5辅助控制盒盖",
+ "sourceNodeName": "5辅助控制盒盖",
+ "nodePath": "",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-rescue-switch",
+ "nodeName": "5互救开关",
+ "sourceNodeName": "5互救开关",
+ "nodePath": "",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "animations": []
+ },
+ "task": {
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "code": "TR-FRONT-PUMP-RESCUE-001",
+ "title": "重型支援桥液压泵应急替代",
+ "categoryId": "minor-repair",
+ "difficulty": "标准",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "image": "/models/step-model-front-pump-thumb.png",
+ "equipment": "架桥车",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ]
+ },
+ "scenario": {
+ "id": "front-pump-rescue-scenario",
+ "publishedSceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "publishedSceneVersion": "1.0",
+ "baseVisualKey": "front-pump-rescue",
+ "visualKey": "front-pump-rescue",
+ "environmentName": "重型支援桥液压泵应急替代",
+ "sceneLayout": "架桥车整车操作位",
+ "equipmentState": "按步骤操作对应部件",
+ "tools": [],
+ "faults": [],
+ "environment": {
+ "type": "outdoor",
+ "mode": "builtin",
+ "sourceName": "桥梁脚本三维训练场",
+ "resourceUrl": "",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "sceneResource": {
+ "sceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "version": "1.0",
+ "sourceKind": "published",
+ "status": "已发布",
+ "name": "重型支援桥液压泵应急替代",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "objectCount": 2,
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ }
+ ],
+ "sourceName": "0916架桥车.glb",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "support-vehicle",
+ "sceneId": "support-vehicle",
+ "interactionId": "scene:support-vehicle",
+ "type": "imported",
+ "name": "0916保障车.glb",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "support-vehicle",
+ "modelEditorAssetId": "support-vehicle",
+ "modelEditorModelId": "support-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "0916保障车.glb",
+ "resourceUrl": "/models/bridge-support-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "rescue-hoses",
+ "sceneId": "rescue-hoses",
+ "interactionId": "scene:rescue-hoses",
+ "type": "imported",
+ "name": "双车连接油管.glb",
+ "semantic": "实训装备",
+ "assetRole": "script-accessory",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "rescue-hoses",
+ "modelEditorAssetId": "rescue-hoses",
+ "modelEditorModelId": "rescue-hoses",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "双车连接油管.glb",
+ "resourceUrl": "/models/bridge-rescue-hoses-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "1.0",
+ "name": "重型支援桥液压泵应急替代",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "environment": {
+ "presetId": "outdoor-1",
+ "type": "outdoor"
+ },
+ "rendering": {
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 70,
+ "far": 240
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.1,
+ "far": 800,
+ "position": [
+ 11,
+ 8,
+ 16
+ ],
+ "target": [
+ 0,
+ 1.5,
+ 2
+ ]
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ }
+ ],
+ "sourceName": "0916架桥车.glb",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "support-vehicle",
+ "sceneId": "support-vehicle",
+ "interactionId": "scene:support-vehicle",
+ "type": "imported",
+ "name": "0916保障车.glb",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "support-vehicle",
+ "modelEditorAssetId": "support-vehicle",
+ "modelEditorModelId": "support-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "0916保障车.glb",
+ "resourceUrl": "/models/bridge-support-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "rescue-hoses",
+ "sceneId": "rescue-hoses",
+ "interactionId": "scene:rescue-hoses",
+ "type": "imported",
+ "name": "双车连接油管.glb",
+ "semantic": "实训装备",
+ "assetRole": "script-accessory",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "rescue-hoses",
+ "modelEditorAssetId": "rescue-hoses",
+ "modelEditorModelId": "rescue-hoses",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "双车连接油管.glb",
+ "resourceUrl": "/models/bridge-rescue-hoses-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ }
+ ]
+ },
+ "assetReferences": [
+ {
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 32195288,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "training-content"
+ }
+ ]
+ },
+ "accent": "#2d86d8",
+ "background": 11062241,
+ "fog": 11062241,
+ "ground": 7110499,
+ "camera": {
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ },
+ "retainStoredParts": true,
+ "sceneTags": [
+ "新版整车模型",
+ "原位部件操作"
+ ],
+ "sensorFeeds": [],
+ "name": "重型支援桥液压泵应急替代",
+ "title": "重型支援桥液压泵应急替代",
+ "operableParts": [
+ "bridge-engine",
+ "front-pump-pto-switch",
+ "bridge-hose-a",
+ "bridge-hose-b",
+ "bridge-return-valve",
+ "front-pump-aux-control-box-cover",
+ "front-pump-rescue-switch",
+ "bridge-filter-valve-1",
+ "bridge-filter-valve-2",
+ "bridge-support-pto",
+ "bridge-supply",
+ "bridge-normal-control"
+ ]
+ },
+ "tools": [],
+ "faults": [],
+ "steps": [
+ {
+ "id": "BRIDGE-STEP-1",
+ "stepCode": "BRIDGE-STEP-1",
+ "actionCode": "COMPLETE_BRIDGE-STEP-1",
+ "number": 1,
+ "title": "保持架桥车运行并断开取力器",
+ "targetId": "bridge-engine",
+ "targetName": "保持架桥车发动机运行",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "保持架桥车发动机运转,确保架桥车取力器处于断开状态。",
+ "guidance": "保持架桥车发动机运转,确保架桥车取力器处于断开状态。",
+ "warning": "",
+ "success": "保持架桥车运行并断开取力器:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-engine",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "保持架桥车发动机运行",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 2209160
+ }
+ ]
+ },
+ {
+ "targetId": "front-pump-pto-switch",
+ "kind": "rotate",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": -30,
+ "toleranceDegrees": 8,
+ "directionHint": "断开架桥车取力器"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,保持架桥车运行并断开取力器。保持架桥车发动机运转,确保架桥车取力器处于断开状态。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_5AEA5274E6664D43B8C53F55859D5717",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "58",
+ "videoName": "重型支援桥液压泵应急替代 · 1 保持架桥车运行并断开取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-2",
+ "stepCode": "BRIDGE-STEP-2",
+ "actionCode": "COMPLETE_BRIDGE-STEP-2",
+ "number": 2,
+ "title": "连接两车液压软管",
+ "targetId": "bridge-hose-a",
+ "targetName": "连接架桥车快速接头",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "连接支援车与架桥车液压软管。架桥车快接接头位于液压油箱右侧;支援车快接接头位于驾驶室外右下方。",
+ "guidance": "连接支援车与架桥车液压软管。架桥车快接接头位于液压油箱右侧;支援车快接接头位于驾驶室外右下方。",
+ "warning": "",
+ "success": "连接两车液压软管:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-hose-a",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-hose-a",
+ "kind": "identify",
+ "directionHint": "连接架桥车快速接头",
+ "effects": [
+ {
+ "targetId": "bridge-hose-a",
+ "offset": [
+ 0,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-hose-line",
+ "visible": true
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-hose-b",
+ "kind": "identify",
+ "directionHint": "连接保障车快速接头",
+ "effects": [
+ {
+ "targetId": "bridge-hose-b",
+ "offset": [
+ 0,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-return-line",
+ "visible": true
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,连接两车液压软管。连接支援车与架桥车液压软管。架桥车快接接头位于液压油箱右侧;支援车快接接头位于驾驶室外右下方。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_B9F2CBFE36274528825899153DB98195",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "59",
+ "videoName": "重型支援桥液压泵应急替代 · 2 连接两车液压软管",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-3",
+ "stepCode": "BRIDGE-STEP-3",
+ "actionCode": "COMPLETE_BRIDGE-STEP-3",
+ "number": 3,
+ "title": "打开支援车回油截止阀",
+ "targetId": "bridge-return-valve",
+ "targetName": "打开保障车回油截止阀",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开支援车液压油箱快接接头处的回油截止阀。",
+ "guidance": "打开支援车液压油箱快接接头处的回油截止阀。",
+ "warning": "",
+ "success": "打开支援车回油截止阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-return-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "rotate",
+ "steps": [
+ {
+ "targetId": "bridge-return-valve",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "打开保障车回油截止阀"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,打开支援车回油截止阀。打开支援车液压油箱快接接头处的回油截止阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_983218ACA84345B5B032A5DFA8F08E4E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "60",
+ "videoName": "重型支援桥液压泵应急替代 · 3 打开支援车回油截止阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-4",
+ "stepCode": "BRIDGE-STEP-4",
+ "actionCode": "COMPLETE_BRIDGE-STEP-4",
+ "number": 4,
+ "title": "打开互救作业开关",
+ "targetId": "front-pump-aux-control-box-cover",
+ "targetName": "打开辅助控制盒盖",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开辅助控制盒上的“互救作业”开关。",
+ "guidance": "打开辅助控制盒上的“互救作业”开关。",
+ "warning": "",
+ "success": "打开互救作业开关:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-aux-control-box-cover",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "front-pump-aux-control-box-cover",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "deltaDegrees": 100,
+ "toleranceDegrees": 8,
+ "directionHint": "打开辅助控制盒盖"
+ },
+ {
+ "targetId": "front-pump-rescue-switch",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 8,
+ "directionHint": "打开互救作业开关"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,打开互救作业开关。打开辅助控制盒上的“互救作业”开关。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_AC0F121CD04B44B5A373BE82D5083AE1",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "61",
+ "videoName": "重型支援桥液压泵应急替代 · 4 打开互救作业开关",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-5",
+ "stepCode": "BRIDGE-STEP-5",
+ "actionCode": "COMPLETE_BRIDGE-STEP-5",
+ "number": 5,
+ "title": "打开滤油器出口连通球阀",
+ "targetId": "bridge-filter-valve-1",
+ "targetName": "滤油器出口球阀 1",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开两个输油滤油器出口处的连通球阀。",
+ "guidance": "打开两个输油滤油器出口处的连通球阀。",
+ "warning": "",
+ "success": "打开滤油器出口连通球阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-filter-valve-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-filter-valve-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "打开第 1 个滤油器出口球阀"
+ },
+ {
+ "targetId": "bridge-filter-valve-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "打开第 2 个滤油器出口球阀"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,打开滤油器出口连通球阀。打开两个输油滤油器出口处的连通球阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_774F7400E0B54F4696EBDAD800A289C3",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "62",
+ "videoName": "重型支援桥液压泵应急替代 · 5 打开滤油器出口连通球阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-6",
+ "stepCode": "BRIDGE-STEP-6",
+ "actionCode": "COMPLETE_BRIDGE-STEP-6",
+ "number": 6,
+ "title": "接通支援车液压取力器",
+ "targetId": "bridge-support-pto",
+ "targetName": "接通保障车取力器",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "接通支援车液压系统取力器,向架桥车供油。",
+ "guidance": "接通支援车液压系统取力器,向架桥车供油。",
+ "warning": "",
+ "success": "接通支援车液压取力器:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-support-pto",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-support-pto",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 8,
+ "directionHint": "接通保障车取力器"
+ },
+ {
+ "targetId": "bridge-supply",
+ "kind": "identify",
+ "directionHint": "观察供油示意",
+ "effects": [
+ {
+ "targetId": "bridge-hose-line",
+ "color": 15312947
+ },
+ {
+ "targetId": "bridge-return-line",
+ "color": 3325905
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第6步,接通支援车液压取力器。接通支援车液压系统取力器,向架桥车供油。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_64D9ECF315DA41568D936CFEBF28E403",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "63",
+ "videoName": "重型支援桥液压泵应急替代 · 6 接通支援车液压取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-7",
+ "stepCode": "BRIDGE-STEP-7",
+ "actionCode": "COMPLETE_BRIDGE-STEP-7",
+ "number": 7,
+ "title": "按正常步骤操作架桥车",
+ "targetId": "bridge-normal-control",
+ "targetName": "操作正常作业控制手柄",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "原图只概括“按正常操作步骤操作架桥车”,没有展开后续作业。",
+ "guidance": "原图只概括“按正常操作步骤操作架桥车”,没有展开后续作业。",
+ "warning": "该项为原稿概括项,本预演不代表后续正常作业已经完成。",
+ "success": "按正常步骤操作架桥车:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-normal-control",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-normal-control",
+ "kind": "identify",
+ "directionHint": "操作正常作业控制手柄",
+ "effects": [
+ {
+ "targetId": "bridge-normal-control",
+ "offset": [
+ 0,
+ 0,
+ -0.25
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第7步,按正常步骤操作架桥车。原图只概括“按正常操作步骤操作架桥车”,没有展开后续作业。该项为原稿概括项,本预演不代表后续正常作业已经完成。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_356ADFCC874448D28ADB2DF8067582E8",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "64",
+ "videoName": "重型支援桥液压泵应急替代 · 7 按正常步骤操作架桥车",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ }
+ ],
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "totalScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-pump-substitute",
+ "scriptVersion": "4"
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/5.jpg、6.jpg"
+ },
+ "changeSummary": "换用0916整车及配套零件,原位操作;保留步骤编码、讲解与成绩规则",
+ "checksum": "2cfa4706f247da5aeed4780e32e32fac73f744bd6c6983e397fe36cfa54c4ba0",
+ "createdByUserId": "99",
+ "createdByName": "内部维护",
+ "publishedByUserId": "99",
+ "publishedByName": "内部维护",
+ "publishedTime": 1789657622,
+ "version": 2,
+ "addTime": 1789657621,
+ "updateTime": "2026-09-17T23:07:02",
+ "dependencies": [],
+ "assets": [
+ {
+ "id": "4484",
+ "versionId": "553",
+ "code": "DH_5AEA5274E6664D43B8C53F55859D5717",
+ "name": "重型支援桥液压泵应急替代 · 1 保持架桥车运行并断开取力器",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/75748c295407bd0768e760d4593dbdee.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 554961,
+ "sha256": "d82bb8354acfca494e2ff515e5ef79887fb9d1f929a62779119d136857944ba6",
+ "metadata": {
+ "sourceVideoId": "58",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4485",
+ "versionId": "553",
+ "code": "DH_B9F2CBFE36274528825899153DB98195",
+ "name": "重型支援桥液压泵应急替代 · 2 连接两车液压软管",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/d4c77791615f95ed57751597446e35c5.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 400318,
+ "sha256": "8791296620dbb4cc823bab5f24af07b8b48d510292b4baf966598b0b0351e4f9",
+ "metadata": {
+ "sourceVideoId": "59",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4486",
+ "versionId": "553",
+ "code": "DH_983218ACA84345B5B032A5DFA8F08E4E",
+ "name": "重型支援桥液压泵应急替代 · 3 打开支援车回油截止阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/0fbe417a88b14dc657256c924e8ba532.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 224021,
+ "sha256": "f78a59ebddcd35e937ce42910aed82fcaf9b49c07be4e1d460fc701e666d3d29",
+ "metadata": {
+ "sourceVideoId": "60",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4487",
+ "versionId": "553",
+ "code": "DH_AC0F121CD04B44B5A373BE82D5083AE1",
+ "name": "重型支援桥液压泵应急替代 · 4 打开互救作业开关",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/0e886b5158602172fb149cb7bb4c07cc.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 332829,
+ "sha256": "a784a79790a96f486eb6be917fa879db7071813a31f461f5d95d31c754ce3f46",
+ "metadata": {
+ "sourceVideoId": "61",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4488",
+ "versionId": "553",
+ "code": "DH_774F7400E0B54F4696EBDAD800A289C3",
+ "name": "重型支援桥液压泵应急替代 · 5 打开滤油器出口连通球阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/3a57549a9c62a2faa19f4a9af7740193.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 241632,
+ "sha256": "db5c8f4a531e958712d309f25f9c51a145f717e4687893fcc41b65e2c8242175",
+ "metadata": {
+ "sourceVideoId": "62",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4489",
+ "versionId": "553",
+ "code": "DH_64D9ECF315DA41568D936CFEBF28E403",
+ "name": "重型支援桥液压泵应急替代 · 6 接通支援车液压取力器",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/34657e7ed592e7d7a987f90e0f0188ba.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 401336,
+ "sha256": "05ffeff41d2cf4162b6e8181d4d002ba3f12531589a25d31bac76c69f5dea6bb",
+ "metadata": {
+ "sourceVideoId": "63",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4490",
+ "versionId": "553",
+ "code": "DH_356ADFCC874448D28ADB2DF8067582E8",
+ "name": "重型支援桥液压泵应急替代 · 7 按正常步骤操作架桥车",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/715a4ac02abad5bf00d7a0a1bd0edb15.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 762615,
+ "sha256": "7b85bbf9c21adc74b56a26f6d92db1448f9f565101da6feba7ca9ad4cdd137f7",
+ "metadata": {
+ "sourceVideoId": "64",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/reports/bridge-introduction-20260918/before-project-440.json b/reports/bridge-introduction-20260918/before-project-440.json
new file mode 100644
index 0000000..adb5ccb
--- /dev/null
+++ b/reports/bridge-introduction-20260918/before-project-440.json
@@ -0,0 +1,2283 @@
+{
+ "project": {
+ "id": "440",
+ "type": "TRAINING",
+ "code": "TRAINING-20B5F2AE722C48A5",
+ "name": "重型支援桥前泵换件修复",
+ "description": "原稿:桥梁/文件2/7.jpg、8.jpg",
+ "categoryCode": "MAINTENANCE",
+ "trainingMode": "VIRTUAL",
+ "coverUri": "",
+ "status": "PUBLISHED",
+ "ownerUserId": "99",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "currentVersionId": "554",
+ "currentVersionNo": 5,
+ "currentVersionCode": "V5.0.0",
+ "publishedVersionId": "554",
+ "publishedTime": 1789657623,
+ "usageCount": 0,
+ "version": 10,
+ "addTime": 1789309631,
+ "updateTime": "2026-09-17T23:07:03",
+ "contentSummary": {
+ "schema": "digital-workshop-training-project",
+ "trainingMode": "VIRTUAL",
+ "stepCount": 11
+ },
+ "currentVersionStatus": "PUBLISHED",
+ "dependencyCount": 0,
+ "assetCount": 11,
+ "readCount": 0,
+ "downloadCount": 0
+ },
+ "currentVersion": {
+ "id": "554",
+ "projectId": "440",
+ "versionNo": 5,
+ "versionCode": "V5.0.0",
+ "status": "PUBLISHED",
+ "content": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥前泵换件修复",
+ "status": "published",
+ "trainingMode": "VIRTUAL",
+ "resources": {
+ "models": [
+ {
+ "id": "front-pump-step-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "name": "架桥车前泵互救操作整车模型",
+ "baseModelName": "架桥车前泵互救操作整车模型",
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "revision": 1,
+ "materialPreset": null,
+ "parts": [
+ {
+ "editorId": "",
+ "interactionId": "front-pump-hydraulic-pump",
+ "nodeName": "1液压泵",
+ "sourceNodeName": "1液压泵",
+ "nodePath": "",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-power-take-off",
+ "nodeName": "2取力器",
+ "sourceNodeName": "2取力器",
+ "nodePath": "",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-pto-switch",
+ "nodeName": "2取力器开关",
+ "sourceNodeName": "2取力器开关",
+ "nodePath": "",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-ball-valve-switch",
+ "nodeName": "3球阀开关",
+ "sourceNodeName": "3球阀开关",
+ "nodePath": "",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box",
+ "nodeName": "5辅助控制盒",
+ "sourceNodeName": "5辅助控制盒",
+ "nodePath": "",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "nodeName": "5辅助控制盒盖",
+ "sourceNodeName": "5辅助控制盒盖",
+ "nodePath": "",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-rescue-switch",
+ "nodeName": "5互救开关",
+ "sourceNodeName": "5互救开关",
+ "nodePath": "",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "animations": []
+ },
+ "task": {
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "code": "TR-FRONT-PUMP-RESCUE-001",
+ "title": "重型支援桥前泵换件修复",
+ "categoryId": "minor-repair",
+ "difficulty": "标准",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "image": "/models/step-model-front-pump-thumb.png",
+ "equipment": "架桥车",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ]
+ },
+ "scenario": {
+ "id": "front-pump-rescue-scenario",
+ "publishedSceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "publishedSceneVersion": "1.0",
+ "baseVisualKey": "front-pump-rescue",
+ "visualKey": "front-pump-rescue",
+ "environmentName": "重型支援桥前泵换件修复",
+ "sceneLayout": "架桥车整车操作位",
+ "equipmentState": "按步骤操作对应部件",
+ "tools": [],
+ "faults": [],
+ "environment": {
+ "type": "outdoor",
+ "mode": "builtin",
+ "sourceName": "桥梁脚本三维训练场",
+ "resourceUrl": "",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "sceneResource": {
+ "sceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "version": "1.0",
+ "sourceKind": "published",
+ "status": "已发布",
+ "name": "重型支援桥前泵换件修复",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "objectCount": 2,
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ }
+ ],
+ "sourceName": "0916架桥车.glb",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "pump-bags",
+ "sceneId": "pump-bags",
+ "interactionId": "scene:pump-bags",
+ "type": "imported",
+ "name": "3封口袋.glb",
+ "semantic": "实训装备",
+ "assetRole": "script-accessory",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "pump-bags",
+ "modelEditorAssetId": "pump-bags",
+ "modelEditorModelId": "pump-bags",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "3封口袋.glb",
+ "resourceUrl": "/models/bridge-pump-bags-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "gasket-paper",
+ "sceneId": "gasket-paper",
+ "interactionId": "scene:gasket-paper",
+ "type": "imported",
+ "name": "牛皮纸.glb",
+ "semantic": "实训装备",
+ "assetRole": "script-accessory",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "gasket-paper",
+ "modelEditorAssetId": "gasket-paper",
+ "modelEditorModelId": "gasket-paper",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "牛皮纸.glb",
+ "resourceUrl": "/models/bridge-paper-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "1.0",
+ "name": "重型支援桥前泵换件修复",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "environment": {
+ "presetId": "outdoor-1",
+ "type": "outdoor"
+ },
+ "rendering": {
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 70,
+ "far": 240
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.1,
+ "far": 800,
+ "position": [
+ 11,
+ 8,
+ 16
+ ],
+ "target": [
+ 0,
+ 1.5,
+ 2
+ ]
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ }
+ ],
+ "sourceName": "0916架桥车.glb",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "pump-bags",
+ "sceneId": "pump-bags",
+ "interactionId": "scene:pump-bags",
+ "type": "imported",
+ "name": "3封口袋.glb",
+ "semantic": "实训装备",
+ "assetRole": "script-accessory",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "pump-bags",
+ "modelEditorAssetId": "pump-bags",
+ "modelEditorModelId": "pump-bags",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "3封口袋.glb",
+ "resourceUrl": "/models/bridge-pump-bags-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "gasket-paper",
+ "sceneId": "gasket-paper",
+ "interactionId": "scene:gasket-paper",
+ "type": "imported",
+ "name": "牛皮纸.glb",
+ "semantic": "实训装备",
+ "assetRole": "script-accessory",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "gasket-paper",
+ "modelEditorAssetId": "gasket-paper",
+ "modelEditorModelId": "gasket-paper",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "牛皮纸.glb",
+ "resourceUrl": "/models/bridge-paper-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ }
+ ]
+ },
+ "assetReferences": [
+ {
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 32195288,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "training-content"
+ }
+ ]
+ },
+ "accent": "#2d86d8",
+ "background": 11062241,
+ "fog": 11062241,
+ "ground": 7110499,
+ "camera": {
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ },
+ "retainStoredParts": true,
+ "sceneTags": [
+ "新版整车模型",
+ "原位部件操作"
+ ],
+ "sensorFeeds": [],
+ "name": "重型支援桥前泵换件修复",
+ "title": "重型支援桥前泵换件修复",
+ "operableParts": [
+ "bridge-engine",
+ "bridge-paper",
+ "bridge-tank-valve",
+ "bridge-inlet",
+ "bridge-inlet-bag",
+ "bridge-outlet",
+ "bridge-outlet-bag",
+ "bridge-pump-bolt-1",
+ "bridge-pump-bolt-2",
+ "bridge-pump-bolt-3",
+ "bridge-pump-bolt-4",
+ "bridge-old-pump",
+ "bridge-gasket",
+ "bridge-new-pump",
+ "bridge-fill-cap",
+ "bridge-oil-can",
+ "bridge-test-control"
+ ]
+ },
+ "tools": [],
+ "faults": [],
+ "steps": [
+ {
+ "id": "BRIDGE-STEP-1",
+ "stepCode": "BRIDGE-STEP-1",
+ "actionCode": "COMPLETE_BRIDGE-STEP-1",
+ "number": 1,
+ "title": "停机并初裁牛皮纸",
+ "targetId": "bridge-engine",
+ "targetName": "关闭架桥车发动机",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "架桥车熄火;按液压泵与取力器结合面形状初步裁剪牛皮纸。",
+ "guidance": "架桥车熄火;按液压泵与取力器结合面形状初步裁剪牛皮纸。",
+ "warning": "",
+ "success": "停机并初裁牛皮纸:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-engine",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "关闭架桥车发动机",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 13195851
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-paper",
+ "kind": "identify",
+ "directionHint": "按结合面初裁牛皮纸",
+ "effects": [
+ {
+ "targetId": "bridge-paper",
+ "scale": [
+ 0.85,
+ 1,
+ 0.85
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,停机并初裁牛皮纸。架桥车熄火;按液压泵与取力器结合面形状初步裁剪牛皮纸。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_1CE71ECA76194F06B098A012B360BB06",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "65",
+ "videoName": "重型支援桥前泵换件修复 · 1 停机并初裁牛皮纸",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-2",
+ "stepCode": "BRIDGE-STEP-2",
+ "actionCode": "COMPLETE_BRIDGE-STEP-2",
+ "number": 2,
+ "title": "关闭液压油箱出油口一号球阀",
+ "targetId": "bridge-tank-valve",
+ "targetName": "关闭一号出油球阀",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将一号球阀手柄从平行管道转到垂直管道。",
+ "guidance": "将一号球阀手柄从平行管道转到垂直管道。",
+ "warning": "",
+ "success": "关闭液压油箱出油口一号球阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-tank-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "rotate",
+ "steps": [
+ {
+ "targetId": "bridge-tank-valve",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "关闭一号出油球阀"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,关闭液压油箱出油口一号球阀。将一号球阀手柄从平行管道转到垂直管道。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_34129B61FA1F4E628AF295E3EF714364",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "66",
+ "videoName": "重型支援桥前泵换件修复 · 2 关闭液压油箱出油口一号球阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-3",
+ "stepCode": "BRIDGE-STEP-3",
+ "actionCode": "COMPLETE_BRIDGE-STEP-3",
+ "number": 3,
+ "title": "拆开并包扎进出油管",
+ "targetId": "bridge-inlet",
+ "targetName": "拆开进油管",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用大活动扳手拆开液压泵进、出油管接头,用塑料袋包扎管口。",
+ "guidance": "用大活动扳手拆开液压泵进、出油管接头,用塑料袋包扎管口。",
+ "warning": "",
+ "success": "拆开并包扎进出油管:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-inlet",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-inlet",
+ "kind": "identify",
+ "directionHint": "拆开进油管",
+ "effects": [
+ {
+ "targetId": "bridge-inlet",
+ "offset": [
+ -0.6,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-inlet-bag",
+ "kind": "identify",
+ "directionHint": "包扎进油管口",
+ "effects": [
+ {
+ "targetId": "bridge-inlet-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet",
+ "kind": "identify",
+ "directionHint": "拆开出油管",
+ "effects": [
+ {
+ "targetId": "bridge-outlet",
+ "offset": [
+ 0.6,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet-bag",
+ "kind": "identify",
+ "directionHint": "包扎出油管口",
+ "effects": [
+ {
+ "targetId": "bridge-outlet-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,拆开并包扎进出油管。用大活动扳手拆开液压泵进、出油管接头,用塑料袋包扎管口。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_533EAE94D45D49A2BECD7E24E48835E6",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "67",
+ "videoName": "重型支援桥前泵换件修复 · 3 拆开并包扎进出油管",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-4",
+ "stepCode": "BRIDGE-STEP-4",
+ "actionCode": "COMPLETE_BRIDGE-STEP-4",
+ "number": 4,
+ "title": "拆下四个安装螺栓",
+ "targetId": "bridge-pump-bolt-1",
+ "targetName": "拆下第 1 个安装螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用开口扳手拆下液压泵与取力器之间的四个安装螺栓。",
+ "guidance": "用开口扳手拆下液压泵与取力器之间的四个安装螺栓。",
+ "warning": "",
+ "success": "拆下四个安装螺栓:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-pump-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 1 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 2 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 3 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 4 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,拆下四个安装螺栓。用开口扳手拆下液压泵与取力器之间的四个安装螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_787B4C212CF644AE9A3D8D49DEDCB65E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "68",
+ "videoName": "重型支援桥前泵换件修复 · 4 拆下四个安装螺栓",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-5",
+ "stepCode": "BRIDGE-STEP-5",
+ "actionCode": "COMPLETE_BRIDGE-STEP-5",
+ "number": 5,
+ "title": "取下旧前泵",
+ "targetId": "bridge-old-pump",
+ "targetName": "取下旧前泵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "取下原前泵。",
+ "guidance": "取下原前泵。",
+ "warning": "",
+ "success": "取下旧前泵:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-old-pump",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-old-pump",
+ "kind": "identify",
+ "directionHint": "取下旧前泵",
+ "effects": [
+ {
+ "targetId": "bridge-old-pump",
+ "offset": [
+ -2,
+ 0,
+ 0
+ ]
+ },
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "visible": false
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,取下旧前泵。取下原前泵。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_5672FD367E8F41A5A026E3C68E8C8726",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "69",
+ "videoName": "重型支援桥前泵换件修复 · 5 取下旧前泵",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-6",
+ "stepCode": "BRIDGE-STEP-6",
+ "actionCode": "COMPLETE_BRIDGE-STEP-6",
+ "number": 6,
+ "title": "修裁牛皮纸",
+ "targetId": "bridge-paper",
+ "targetName": "按安装面修裁纸垫",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "进一步裁剪牛皮纸,使其与液压泵安装面及取力器结合面吻合。",
+ "guidance": "进一步裁剪牛皮纸,使其与液压泵安装面及取力器结合面吻合。",
+ "warning": "",
+ "success": "修裁牛皮纸:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-paper",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-paper",
+ "kind": "identify",
+ "directionHint": "按安装面修裁纸垫",
+ "effects": [
+ {
+ "targetId": "bridge-gasket",
+ "visible": true
+ },
+ {
+ "targetId": "bridge-paper",
+ "visible": false
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第6步,修裁牛皮纸。进一步裁剪牛皮纸,使其与液压泵安装面及取力器结合面吻合。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_C0E73EC20FD44C608A795A03DE4F7401",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "70",
+ "videoName": "重型支援桥前泵换件修复 · 6 修裁牛皮纸",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-7",
+ "stepCode": "BRIDGE-STEP-7",
+ "actionCode": "COMPLETE_BRIDGE-STEP-7",
+ "number": 7,
+ "title": "放置牛皮纸垫",
+ "targetId": "bridge-gasket",
+ "targetName": "将纸垫放到取力器结合面",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将裁好的牛皮纸放在取力器接口处。",
+ "guidance": "将裁好的牛皮纸放在取力器接口处。",
+ "warning": "",
+ "success": "放置牛皮纸垫:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-gasket",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-gasket",
+ "kind": "identify",
+ "directionHint": "将纸垫放到取力器结合面",
+ "effects": [
+ {
+ "targetId": "bridge-gasket",
+ "offset": [
+ 2.3,
+ 0,
+ -0.4
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第7步,放置牛皮纸垫。将裁好的牛皮纸放在取力器接口处。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_17FAC41643804A22A8B71A2FF8DCBC28",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "71",
+ "videoName": "重型支援桥前泵换件修复 · 7 放置牛皮纸垫",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-8",
+ "stepCode": "BRIDGE-STEP-8",
+ "actionCode": "COMPLETE_BRIDGE-STEP-8",
+ "number": 8,
+ "title": "安装新液压泵",
+ "targetId": "bridge-new-pump",
+ "targetName": "安装新泵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "安装新的液压泵。原稿没有给出拧紧力矩。",
+ "guidance": "安装新的液压泵。原稿没有给出拧紧力矩。",
+ "warning": "",
+ "success": "安装新液压泵:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-new-pump",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-new-pump",
+ "kind": "identify",
+ "directionHint": "安装新泵",
+ "effects": [
+ {
+ "targetId": "bridge-new-pump",
+ "offset": [
+ -2,
+ 0,
+ 0
+ ]
+ },
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "visible": true
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 1 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 2 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 3 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 4 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第8步,安装新液压泵。安装新的液压泵。原稿没有给出拧紧力矩。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_2284ABD91F544E2EB7799E9FA1C4BCF6",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "72",
+ "videoName": "重型支援桥前泵换件修复 · 8 安装新液压泵",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-9",
+ "stepCode": "BRIDGE-STEP-9",
+ "actionCode": "COMPLETE_BRIDGE-STEP-9",
+ "number": 9,
+ "title": "向新泵加注液压油",
+ "targetId": "bridge-fill-cap",
+ "targetName": "打开加油口",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开新液压泵加油口,加注液压油。原稿没有给出定量值。",
+ "guidance": "打开新液压泵加油口,加注液压油。原稿没有给出定量值。",
+ "warning": "",
+ "success": "向新泵加注液压油:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-fill-cap",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-fill-cap",
+ "kind": "identify",
+ "directionHint": "打开加油口",
+ "effects": [
+ {
+ "targetId": "bridge-fill-cap",
+ "offset": [
+ 0,
+ 0.45,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-oil-can",
+ "kind": "identify",
+ "directionHint": "向新泵加注液压油",
+ "effects": [
+ {
+ "targetId": "bridge-oil-can",
+ "offset": [
+ -1.3,
+ 0.6,
+ -0.3
+ ]
+ },
+ {
+ "targetId": "bridge-oil-stream",
+ "visible": true
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第9步,向新泵加注液压油。打开新液压泵加油口,加注液压油。原稿没有给出定量值。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_BF468C49DDCB462E8E2C75CF8C6BD172",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "73",
+ "videoName": "重型支援桥前泵换件修复 · 9 向新泵加注液压油",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-10",
+ "stepCode": "BRIDGE-STEP-10",
+ "actionCode": "COMPLETE_BRIDGE-STEP-10",
+ "number": 10,
+ "title": "恢复进出油管连接",
+ "targetId": "bridge-inlet-bag",
+ "targetName": "取下进油管封口袋",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用大活动扳手连接并拧紧液压泵进、出油管。",
+ "guidance": "用大活动扳手连接并拧紧液压泵进、出油管。",
+ "warning": "",
+ "success": "恢复进出油管连接:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-inlet-bag",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-inlet-bag",
+ "kind": "identify",
+ "directionHint": "取下进油管封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-inlet-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-inlet",
+ "kind": "identify",
+ "directionHint": "连接并拧紧进油管",
+ "effects": [
+ {
+ "targetId": "bridge-inlet",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet-bag",
+ "kind": "identify",
+ "directionHint": "取下出油管封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-outlet-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet",
+ "kind": "identify",
+ "directionHint": "连接并拧紧出油管",
+ "effects": [
+ {
+ "targetId": "bridge-outlet",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第10步,恢复进出油管连接。用大活动扳手连接并拧紧液压泵进、出油管。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_88908FEBE6054EE99087F8653A8C5FAA",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "74",
+ "videoName": "重型支援桥前泵换件修复 · 10 恢复进出油管连接",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-11",
+ "stepCode": "BRIDGE-STEP-11",
+ "actionCode": "COMPLETE_BRIDGE-STEP-11",
+ "number": 11,
+ "title": "启动设备试验",
+ "targetId": "bridge-engine",
+ "targetName": "启动设备试验",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "启动设备进行试验。原稿没有展开具体试验项目和判定数值。",
+ "guidance": "启动设备进行试验。原稿没有展开具体试验项目和判定数值。",
+ "warning": "",
+ "success": "启动设备试验:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-engine",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "启动设备试验",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 2209160
+ },
+ {
+ "targetId": "bridge-oil-stream",
+ "visible": false
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-test-control",
+ "kind": "identify",
+ "directionHint": "操作试验手柄并观察",
+ "effects": [
+ {
+ "targetId": "bridge-test-control",
+ "offset": [
+ 0,
+ 0,
+ -0.25
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第11步,启动设备试验。启动设备进行试验。原稿没有展开具体试验项目和判定数值。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_4D873387CF324AAF9C6D3BE1A72C247E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "75",
+ "videoName": "重型支援桥前泵换件修复 · 11 启动设备试验",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ }
+ ],
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "totalScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-pump-replace",
+ "scriptVersion": "4"
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/7.jpg、8.jpg"
+ },
+ "changeSummary": "换用0916整车及配套零件,原位操作;保留步骤编码、讲解与成绩规则",
+ "checksum": "3712bd18f6549484c58fa63c0130cdfa4168ec31674f863d7b15fad38dc876dc",
+ "createdByUserId": "99",
+ "createdByName": "内部维护",
+ "publishedByUserId": "99",
+ "publishedByName": "内部维护",
+ "publishedTime": 1789657623,
+ "version": 2,
+ "addTime": 1789657622,
+ "updateTime": "2026-09-17T23:07:03",
+ "dependencies": [],
+ "assets": [
+ {
+ "id": "4502",
+ "versionId": "554",
+ "code": "DH_1CE71ECA76194F06B098A012B360BB06",
+ "name": "重型支援桥前泵换件修复 · 1 停机并初裁牛皮纸",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/d8b3e011ed5bc1f41090d77dda7a8e72.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 448340,
+ "sha256": "22c92b853a9460ee67c7ae80d5bc203ff8aba07b32e148659b13f0637fb2c372",
+ "metadata": {
+ "sourceVideoId": "65",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4503",
+ "versionId": "554",
+ "code": "DH_34129B61FA1F4E628AF295E3EF714364",
+ "name": "重型支援桥前泵换件修复 · 2 关闭液压油箱出油口一号球阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/777c7c6f21c1108b1cf6a3e4681a7728.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 266042,
+ "sha256": "eab74c71b3be41e3c7563a4a36c75e3f61e5ad4a5ca032eab051844ca10943fe",
+ "metadata": {
+ "sourceVideoId": "66",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4504",
+ "versionId": "554",
+ "code": "DH_533EAE94D45D49A2BECD7E24E48835E6",
+ "name": "重型支援桥前泵换件修复 · 3 拆开并包扎进出油管",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/d974de975087ad6848689f4de8bb8597.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 474207,
+ "sha256": "63765c1da028750da4063a9d27c2211e592325165213d667c6592890cde982f0",
+ "metadata": {
+ "sourceVideoId": "67",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4505",
+ "versionId": "554",
+ "code": "DH_787B4C212CF644AE9A3D8D49DEDCB65E",
+ "name": "重型支援桥前泵换件修复 · 4 拆下四个安装螺栓",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/b8fee91715ad1fa277e03a460825ec01.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 275821,
+ "sha256": "e5b743ebe6fad8f7b614b11aea9d611fda877b02d9c31a8d67cabd41249327fe",
+ "metadata": {
+ "sourceVideoId": "68",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4506",
+ "versionId": "554",
+ "code": "DH_5672FD367E8F41A5A026E3C68E8C8726",
+ "name": "重型支援桥前泵换件修复 · 5 取下旧前泵",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/c3ef57b3d671acb6cfb0e7e039e86652.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 109215,
+ "sha256": "25ce8b12c5e17a2029d04a20fd53d270eed3904f50a4d7ea63bc83e33e18bd51",
+ "metadata": {
+ "sourceVideoId": "69",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4507",
+ "versionId": "554",
+ "code": "DH_C0E73EC20FD44C608A795A03DE4F7401",
+ "name": "重型支援桥前泵换件修复 · 6 修裁牛皮纸",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/7cc90bc260c6e4be30daaea3d9dfc446.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 246468,
+ "sha256": "db8bae8bfbde4f6e6dacb645eb2652f355f3b754a73012aaec3afee0e62ab9e8",
+ "metadata": {
+ "sourceVideoId": "70",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4508",
+ "versionId": "554",
+ "code": "DH_17FAC41643804A22A8B71A2FF8DCBC28",
+ "name": "重型支援桥前泵换件修复 · 7 放置牛皮纸垫",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/37e9c868094f42d56db8540f01317bf2.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 203299,
+ "sha256": "56ece26b2bab4af67bd59f88a3f4d1b08bfcdd083f423300d8d88f4ff4cae84b",
+ "metadata": {
+ "sourceVideoId": "71",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4509",
+ "versionId": "554",
+ "code": "DH_2284ABD91F544E2EB7799E9FA1C4BCF6",
+ "name": "重型支援桥前泵换件修复 · 8 安装新液压泵",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/8f14a7af1d794cef6f9858e8244e75a5.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 191600,
+ "sha256": "1b8f68d21c2300b2bba451f5e22cbaafd6f2dcd0bf0d213c05a4caad53ce0ef0",
+ "metadata": {
+ "sourceVideoId": "72",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4510",
+ "versionId": "554",
+ "code": "DH_BF468C49DDCB462E8E2C75CF8C6BD172",
+ "name": "重型支援桥前泵换件修复 · 9 向新泵加注液压油",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/363657dd4bc2b0e2809cd52faca8458c.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 443419,
+ "sha256": "095363c1f6be506fa3377330abbf88050dc9ffdd8dac07eb2c5476ea4ec32abe",
+ "metadata": {
+ "sourceVideoId": "73",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4511",
+ "versionId": "554",
+ "code": "DH_88908FEBE6054EE99087F8653A8C5FAA",
+ "name": "重型支援桥前泵换件修复 · 10 恢复进出油管连接",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/afe798b60bdea1f35f5b09d104205bad.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 219713,
+ "sha256": "eba4316082aa74841fe07f82c644484630efac95228a9b919b1d5348f76d06d8",
+ "metadata": {
+ "sourceVideoId": "74",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4512",
+ "versionId": "554",
+ "code": "DH_4D873387CF324AAF9C6D3BE1A72C247E",
+ "name": "重型支援桥前泵换件修复 · 11 启动设备试验",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/56a8a5cabf17265e7e64243e25e20dc5.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 246099,
+ "sha256": "4fed628e2847089de8882bb29da648f5aa3c00acf696123c11e5e6c3d54a48bb",
+ "metadata": {
+ "sourceVideoId": "75",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/reports/bridge-introduction-20260918/before-project-441.json b/reports/bridge-introduction-20260918/before-project-441.json
new file mode 100644
index 0000000..ae4e383
--- /dev/null
+++ b/reports/bridge-introduction-20260918/before-project-441.json
@@ -0,0 +1,3042 @@
+{
+ "project": {
+ "id": "441",
+ "type": "TRAINING",
+ "code": "TRAINING-D63D50628DB64370",
+ "name": "重型支援桥平衡阀拆拼互换",
+ "description": "原稿:桥梁/文件2/9.jpg、10.jpg",
+ "categoryCode": "MAINTENANCE",
+ "trainingMode": "VIRTUAL",
+ "coverUri": "",
+ "status": "PUBLISHED",
+ "ownerUserId": "99",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "currentVersionId": "555",
+ "currentVersionNo": 5,
+ "currentVersionCode": "V5.0.0",
+ "publishedVersionId": "555",
+ "publishedTime": 1789657935,
+ "usageCount": 0,
+ "version": 10,
+ "addTime": 1789309632,
+ "updateTime": "2026-09-17T23:12:15",
+ "contentSummary": {
+ "schema": "digital-workshop-training-project",
+ "trainingMode": "VIRTUAL",
+ "stepCount": 16
+ },
+ "currentVersionStatus": "PUBLISHED",
+ "dependencyCount": 0,
+ "assetCount": 16,
+ "readCount": 0,
+ "downloadCount": 0
+ },
+ "currentVersion": {
+ "id": "555",
+ "projectId": "441",
+ "versionNo": 5,
+ "versionCode": "V5.0.0",
+ "status": "PUBLISHED",
+ "content": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥平衡阀拆拼互换",
+ "status": "published",
+ "trainingMode": "VIRTUAL",
+ "resources": {
+ "models": [
+ {
+ "id": "front-pump-step-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "name": "架桥车前泵互救操作整车模型",
+ "baseModelName": "架桥车前泵互救操作整车模型",
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "revision": 1,
+ "materialPreset": null,
+ "parts": [
+ {
+ "editorId": "",
+ "interactionId": "front-pump-hydraulic-pump",
+ "nodeName": "1液压泵",
+ "sourceNodeName": "1液压泵",
+ "nodePath": "",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-power-take-off",
+ "nodeName": "2取力器",
+ "sourceNodeName": "2取力器",
+ "nodePath": "",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-pto-switch",
+ "nodeName": "2取力器开关",
+ "sourceNodeName": "2取力器开关",
+ "nodePath": "",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-ball-valve-switch",
+ "nodeName": "3球阀开关",
+ "sourceNodeName": "3球阀开关",
+ "nodePath": "",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box",
+ "nodeName": "5辅助控制盒",
+ "sourceNodeName": "5辅助控制盒",
+ "nodePath": "",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "nodeName": "5辅助控制盒盖",
+ "sourceNodeName": "5辅助控制盒盖",
+ "nodePath": "",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-rescue-switch",
+ "nodeName": "5互救开关",
+ "sourceNodeName": "5互救开关",
+ "nodePath": "",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "animations": []
+ },
+ "task": {
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "code": "TR-FRONT-PUMP-RESCUE-001",
+ "title": "重型支援桥平衡阀拆拼互换",
+ "categoryId": "minor-repair",
+ "difficulty": "标准",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "image": "/models/step-model-front-pump-thumb.png",
+ "equipment": "架桥车",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ]
+ },
+ "scenario": {
+ "id": "front-pump-rescue-scenario",
+ "publishedSceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "publishedSceneVersion": "1.0",
+ "baseVisualKey": "front-pump-rescue",
+ "visualKey": "front-pump-rescue",
+ "environmentName": "重型支援桥平衡阀拆拼互换",
+ "sceneLayout": "架桥车整车操作位",
+ "equipmentState": "按步骤操作对应部件",
+ "tools": [],
+ "faults": [],
+ "environment": {
+ "type": "outdoor",
+ "mode": "builtin",
+ "sourceName": "桥梁脚本三维训练场",
+ "resourceUrl": "",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "sceneResource": {
+ "sceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "version": "1.0",
+ "sourceKind": "published",
+ "status": "已发布",
+ "name": "重型支援桥平衡阀拆拼互换",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "objectCount": 2,
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ }
+ ],
+ "sourceName": "0916架桥车.glb",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "valve-bags",
+ "sceneId": "valve-bags",
+ "interactionId": "scene:valve-bags",
+ "type": "imported",
+ "name": "4封口袋.glb",
+ "semantic": "实训装备",
+ "assetRole": "script-accessory",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "valve-bags",
+ "modelEditorAssetId": "valve-bags",
+ "modelEditorModelId": "valve-bags",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "4封口袋.glb",
+ "resourceUrl": "/models/bridge-valve-bags-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "1.0",
+ "name": "重型支援桥平衡阀拆拼互换",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "environment": {
+ "presetId": "outdoor-1",
+ "type": "outdoor"
+ },
+ "rendering": {
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 70,
+ "far": 240
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.1,
+ "far": 800,
+ "position": [
+ 11,
+ 8,
+ 16
+ ],
+ "target": [
+ 0,
+ 1.5,
+ 2
+ ]
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ }
+ ],
+ "sourceName": "0916架桥车.glb",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "valve-bags",
+ "sceneId": "valve-bags",
+ "interactionId": "scene:valve-bags",
+ "type": "imported",
+ "name": "4封口袋.glb",
+ "semantic": "实训装备",
+ "assetRole": "script-accessory",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "valve-bags",
+ "modelEditorAssetId": "valve-bags",
+ "modelEditorModelId": "valve-bags",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "4封口袋.glb",
+ "resourceUrl": "/models/bridge-valve-bags-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ }
+ ]
+ },
+ "assetReferences": [
+ {
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 32195288,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "training-content"
+ }
+ ]
+ },
+ "accent": "#2d86d8",
+ "background": 11062241,
+ "fog": 11062241,
+ "ground": 7110499,
+ "camera": {
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ },
+ "retainStoredParts": true,
+ "sceneTags": [
+ "新版整车模型",
+ "原位部件操作"
+ ],
+ "sensorFeeds": [],
+ "name": "重型支援桥平衡阀拆拼互换",
+ "title": "重型支援桥平衡阀拆拼互换",
+ "operableParts": [
+ "bridge-small-cloth",
+ "bridge-small-pipe",
+ "bridge-small-bag",
+ "bridge-small-bolt-1",
+ "bridge-small-bolt-2",
+ "bridge-small-bolt-3",
+ "bridge-small-bolt-4",
+ "bridge-small-valve",
+ "bridge-small-plug-1",
+ "bridge-small-plug-2",
+ "bridge-small-seat",
+ "bridge-large-cloth",
+ "bridge-large-pipe",
+ "bridge-large-bag",
+ "bridge-large-bolt-1",
+ "bridge-large-bolt-2",
+ "bridge-large-bolt-3",
+ "bridge-large-bolt-4",
+ "bridge-large-valve",
+ "bridge-large-plug-1",
+ "bridge-large-plug-2",
+ "bridge-large-seat"
+ ]
+ },
+ "tools": [],
+ "faults": [],
+ "steps": [
+ {
+ "id": "BRIDGE-STEP-1",
+ "stepCode": "BRIDGE-STEP-1",
+ "actionCode": "COMPLETE_BRIDGE-STEP-1",
+ "number": 1,
+ "title": "清洗小腔平衡阀",
+ "targetId": "bridge-small-cloth",
+ "targetName": "清洗并擦净阀体",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "guidance": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "warning": "",
+ "success": "清洗小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-cloth",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-small-cloth",
+ "kind": "identify",
+ "directionHint": "清洗并擦净阀体",
+ "effects": [
+ {
+ "targetId": "bridge-small-cloth",
+ "offset": [
+ 0.7,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-small-valve",
+ "color": 8492701
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,清洗小腔平衡阀。用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_76F80444AA9C4C3183A0EEDF6E655C25",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "76",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 1 清洗小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-2",
+ "stepCode": "BRIDGE-STEP-2",
+ "actionCode": "COMPLETE_BRIDGE-STEP-2",
+ "number": 2,
+ "title": "拆开小腔控制油口管路",
+ "targetId": "bridge-small-pipe",
+ "targetName": "拆开控制油管",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "guidance": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "warning": "",
+ "success": "拆开小腔控制油口管路:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-pipe",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-pipe",
+ "kind": "identify",
+ "directionHint": "拆开控制油管",
+ "effects": [
+ {
+ "targetId": "bridge-small-pipe",
+ "offset": [
+ 0.55,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bag",
+ "kind": "identify",
+ "directionHint": "封袋包扎管口",
+ "effects": [
+ {
+ "targetId": "bridge-small-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,拆开小腔控制油口管路。用十九号开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_EAF5F0A89D454E6FBAFB061C93D2F760",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "77",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 2 拆开小腔控制油口管路",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-3",
+ "stepCode": "BRIDGE-STEP-3",
+ "actionCode": "COMPLETE_BRIDGE-STEP-3",
+ "number": 3,
+ "title": "拆下小腔平衡阀",
+ "targetId": "bridge-small-bolt-1",
+ "targetName": "拆下第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "guidance": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "warning": "",
+ "success": "拆下小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-valve",
+ "kind": "identify",
+ "directionHint": "取下平衡阀",
+ "effects": [
+ {
+ "targetId": "bridge-small-valve",
+ "offset": [
+ 0,
+ 0,
+ 1.2
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,拆下小腔平衡阀。用八号内六角扳手拆下安装螺栓,取下平衡阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_981034D69E3047C6B9D1DAE9BBF4F7D4",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "78",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 3 拆下小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-4",
+ "stepCode": "BRIDGE-STEP-4",
+ "actionCode": "COMPLETE_BRIDGE-STEP-4",
+ "number": 4,
+ "title": "封堵小腔油口",
+ "targetId": "bridge-small-plug-1",
+ "targetName": "封堵第 1 个油堵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "guidance": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "warning": "",
+ "success": "封堵小腔油口:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-plug-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-plug-1",
+ "kind": "identify",
+ "directionHint": "封堵第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-plug-2",
+ "kind": "identify",
+ "directionHint": "封堵第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-seat",
+ "kind": "identify",
+ "directionHint": "擦净阀座结合面",
+ "effects": [
+ {
+ "targetId": "bridge-small-seat",
+ "color": 12965080
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,封堵小腔油口。用两个油堵封住两个油口,擦净阀座结合面。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_60D40306A9E74E96ADD7641932934BE4",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "79",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 4 封堵小腔油口",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-5",
+ "stepCode": "BRIDGE-STEP-5",
+ "actionCode": "COMPLETE_BRIDGE-STEP-5",
+ "number": 5,
+ "title": "清洗大腔平衡阀",
+ "targetId": "bridge-large-cloth",
+ "targetName": "清洗并擦净阀体",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "guidance": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "warning": "",
+ "success": "清洗大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-cloth",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-large-cloth",
+ "kind": "identify",
+ "directionHint": "清洗并擦净阀体",
+ "effects": [
+ {
+ "targetId": "bridge-large-cloth",
+ "offset": [
+ 0.7,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-large-valve",
+ "color": 8492701
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,清洗大腔平衡阀。用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_A6EFEC7D339E4BA8994C525CA3709E2E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "80",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 5 清洗大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-6",
+ "stepCode": "BRIDGE-STEP-6",
+ "actionCode": "COMPLETE_BRIDGE-STEP-6",
+ "number": 6,
+ "title": "拆开大腔控制油口管路",
+ "targetId": "bridge-large-pipe",
+ "targetName": "拆开控制油管",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "guidance": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "warning": "",
+ "success": "拆开大腔控制油口管路:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-pipe",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-pipe",
+ "kind": "identify",
+ "directionHint": "拆开控制油管",
+ "effects": [
+ {
+ "targetId": "bridge-large-pipe",
+ "offset": [
+ 0.55,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bag",
+ "kind": "identify",
+ "directionHint": "封袋包扎管口",
+ "effects": [
+ {
+ "targetId": "bridge-large-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第6步,拆开大腔控制油口管路。用十九号开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D9E1BAFBD89D48019B9445B2A5752E68",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "81",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 6 拆开大腔控制油口管路",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-7",
+ "stepCode": "BRIDGE-STEP-7",
+ "actionCode": "COMPLETE_BRIDGE-STEP-7",
+ "number": 7,
+ "title": "拆下大腔平衡阀",
+ "targetId": "bridge-large-bolt-1",
+ "targetName": "拆下第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "guidance": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "warning": "",
+ "success": "拆下大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-valve",
+ "kind": "identify",
+ "directionHint": "取下平衡阀",
+ "effects": [
+ {
+ "targetId": "bridge-large-valve",
+ "offset": [
+ 0,
+ 0,
+ 1.2
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第7步,拆下大腔平衡阀。用八号内六角扳手拆下安装螺栓,取下平衡阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_E83DDAB19F774A418C82EBA7E8EDCF8A",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "82",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 7 拆下大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-8",
+ "stepCode": "BRIDGE-STEP-8",
+ "actionCode": "COMPLETE_BRIDGE-STEP-8",
+ "number": 8,
+ "title": "封堵大腔油口",
+ "targetId": "bridge-large-plug-1",
+ "targetName": "封堵第 1 个油堵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "guidance": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "warning": "",
+ "success": "封堵大腔油口:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-plug-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-plug-1",
+ "kind": "identify",
+ "directionHint": "封堵第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-plug-2",
+ "kind": "identify",
+ "directionHint": "封堵第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-seat",
+ "kind": "identify",
+ "directionHint": "擦净阀座结合面",
+ "effects": [
+ {
+ "targetId": "bridge-large-seat",
+ "color": 12965080
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第8步,封堵大腔油口。用两个油堵封住两个油口,擦净阀座结合面。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_4FE31068F3EB410BAC72E19F1D1BAF49",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "83",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 8 封堵大腔油口",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-9",
+ "stepCode": "BRIDGE-STEP-9",
+ "actionCode": "COMPLETE_BRIDGE-STEP-9",
+ "number": 9,
+ "title": "准备安装大腔平衡阀",
+ "targetId": "bridge-large-seat",
+ "targetName": "擦净安装结合面",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "guidance": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "warning": "",
+ "success": "准备安装大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-seat",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-seat",
+ "kind": "identify",
+ "directionHint": "擦净安装结合面",
+ "effects": [
+ {
+ "targetId": "bridge-large-seat",
+ "color": 14477797
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-plug-1",
+ "kind": "identify",
+ "directionHint": "取下第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-1",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-plug-2",
+ "kind": "identify",
+ "directionHint": "取下第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-2",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第9步,准备安装大腔平衡阀。擦净平衡阀及阀座结合面,取下两个油堵。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D0A3CAC5278C4A57AC9BEF13DA2690BC",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "84",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 9 准备安装大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-10",
+ "stepCode": "BRIDGE-STEP-10",
+ "actionCode": "COMPLETE_BRIDGE-STEP-10",
+ "number": 10,
+ "title": "安装大腔平衡阀",
+ "targetId": "bridge-small-valve",
+ "targetName": "将互换平衡阀装到阀座",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "guidance": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "warning": "",
+ "success": "安装大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-valve",
+ "kind": "identify",
+ "directionHint": "将互换平衡阀装到阀座",
+ "effects": [
+ {
+ "targetId": "bridge-small-valve",
+ "offset": [
+ 3.2,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第10步,安装大腔平衡阀。将平衡阀放置于阀座上,用八号内六角扳手安装四个安装螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_0F40DAF3E28F4FA088EA943D9470CAA7",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "85",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 10 安装大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-11",
+ "stepCode": "BRIDGE-STEP-11",
+ "actionCode": "COMPLETE_BRIDGE-STEP-11",
+ "number": 11,
+ "title": "核对大腔控制油口管路连接",
+ "targetId": "bridge-large-bag",
+ "targetName": "取下封口袋",
+ "mode": "measure",
+ "interaction": "mechanism-operation",
+ "instruction": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "guidance": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "warning": "请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "success": "核对大腔控制油口管路连接:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-bag",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-bag",
+ "kind": "identify",
+ "directionHint": "取下封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-large-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-pipe",
+ "kind": "identify",
+ "directionHint": "按记录的处理依据连接管路",
+ "effects": [
+ {
+ "targetId": "bridge-large-pipe",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第11步,核对大腔控制油口管路连接。原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用十九号开口扳手拆开管路并包扎”的相反描述。请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_F6427532AF5F40348CEB154F031F2AED",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "86",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 11 核对大腔控制油口管路连接",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-12",
+ "stepCode": "BRIDGE-STEP-12",
+ "actionCode": "COMPLETE_BRIDGE-STEP-12",
+ "number": 12,
+ "title": "紧固大腔阀体连接螺栓",
+ "targetId": "bridge-large-bolt-1",
+ "targetName": "紧固第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "guidance": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "warning": "",
+ "success": "紧固大腔阀体连接螺栓:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第12步,紧固大腔阀体连接螺栓。用内六角扳手拧紧四个阀体连接螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_F601DB08C8D44934AD3A1B1582E804DB",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "87",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 12 紧固大腔阀体连接螺栓",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-13",
+ "stepCode": "BRIDGE-STEP-13",
+ "actionCode": "COMPLETE_BRIDGE-STEP-13",
+ "number": 13,
+ "title": "准备安装小腔平衡阀",
+ "targetId": "bridge-small-seat",
+ "targetName": "擦净安装结合面",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "guidance": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "warning": "",
+ "success": "准备安装小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-seat",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-seat",
+ "kind": "identify",
+ "directionHint": "擦净安装结合面",
+ "effects": [
+ {
+ "targetId": "bridge-small-seat",
+ "color": 14477797
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-plug-1",
+ "kind": "identify",
+ "directionHint": "取下第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-1",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-plug-2",
+ "kind": "identify",
+ "directionHint": "取下第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-2",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第13步,准备安装小腔平衡阀。擦净平衡阀及阀座结合面,取下两个油堵。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_B1BBA42CE5F346228B6B39A51F190CB3",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "88",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 13 准备安装小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-14",
+ "stepCode": "BRIDGE-STEP-14",
+ "actionCode": "COMPLETE_BRIDGE-STEP-14",
+ "number": 14,
+ "title": "安装小腔平衡阀",
+ "targetId": "bridge-large-valve",
+ "targetName": "将互换平衡阀装到阀座",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "guidance": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "warning": "",
+ "success": "安装小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-valve",
+ "kind": "identify",
+ "directionHint": "将互换平衡阀装到阀座",
+ "effects": [
+ {
+ "targetId": "bridge-large-valve",
+ "offset": [
+ -3.2,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第14步,安装小腔平衡阀。将平衡阀放置于阀座上,用八号内六角扳手安装四个安装螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_2BCD762C693242FF8DA420BD9A5D4DF9",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "89",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 14 安装小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-15",
+ "stepCode": "BRIDGE-STEP-15",
+ "actionCode": "COMPLETE_BRIDGE-STEP-15",
+ "number": 15,
+ "title": "核对小腔控制油口管路连接",
+ "targetId": "bridge-small-bag",
+ "targetName": "取下封口袋",
+ "mode": "measure",
+ "interaction": "mechanism-operation",
+ "instruction": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "guidance": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "warning": "请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "success": "核对小腔控制油口管路连接:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-bag",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-bag",
+ "kind": "identify",
+ "directionHint": "取下封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-small-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-pipe",
+ "kind": "identify",
+ "directionHint": "按记录的处理依据连接管路",
+ "effects": [
+ {
+ "targetId": "bridge-small-pipe",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第15步,核对小腔控制油口管路连接。原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用十九号开口扳手拆开管路并包扎”的相反描述。请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_5F8309BF74344C568C2C9EEFDD9E74BF",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "90",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 15 核对小腔控制油口管路连接",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-16",
+ "stepCode": "BRIDGE-STEP-16",
+ "actionCode": "COMPLETE_BRIDGE-STEP-16",
+ "number": 16,
+ "title": "紧固小腔阀体连接螺栓",
+ "targetId": "bridge-small-bolt-1",
+ "targetName": "紧固第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "guidance": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "warning": "",
+ "success": "紧固小腔阀体连接螺栓:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第16步,紧固小腔阀体连接螺栓。用内六角扳手拧紧四个阀体连接螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D525E35EDA12402DA13302C2B3874CC3",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "91",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 16 紧固小腔阀体连接螺栓",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ }
+ ],
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "totalScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-balance-valve-swap",
+ "scriptVersion": "4"
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/9.jpg、10.jpg"
+ },
+ "changeSummary": "换用0916整车及配套零件,原位操作;保留步骤编码、讲解与成绩规则",
+ "checksum": "158efed0434aff8b52fd8c25c4196c2cf112ed4829c0ee4e0a6989d6612d6705",
+ "createdByUserId": "99",
+ "createdByName": "内部维护",
+ "publishedByUserId": "99",
+ "publishedByName": "内部维护",
+ "publishedTime": 1789657935,
+ "version": 2,
+ "addTime": 1789657934,
+ "updateTime": "2026-09-17T23:12:15",
+ "dependencies": [],
+ "assets": [
+ {
+ "id": "4529",
+ "versionId": "555",
+ "code": "DH_76F80444AA9C4C3183A0EEDF6E655C25",
+ "name": "重型支援桥平衡阀拆拼互换 · 1 清洗小腔平衡阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/bbb7cb4c0937594e06facdeb4265bdfb.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 380363,
+ "sha256": "2e71eb4894d380917abb95245d3299e7c0b345c76a0a1df92610ba97c9d95e91",
+ "metadata": {
+ "sourceVideoId": "76",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4530",
+ "versionId": "555",
+ "code": "DH_EAF5F0A89D454E6FBAFB061C93D2F760",
+ "name": "重型支援桥平衡阀拆拼互换 · 2 拆开小腔控制油口管路",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/2b3185dc7f0d5cb857c3682ab7773aa1.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 286904,
+ "sha256": "a1abca193097f47595f32b71a02f4101a02005d0ff67cd4932fa728403d1235b",
+ "metadata": {
+ "sourceVideoId": "77",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4531",
+ "versionId": "555",
+ "code": "DH_981034D69E3047C6B9D1DAE9BBF4F7D4",
+ "name": "重型支援桥平衡阀拆拼互换 · 3 拆下小腔平衡阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/a9d362f15a10a6ec05d43bfc37dfc142.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 386424,
+ "sha256": "46f07ce2308478ba60b58d4f6ec600773632193ffaa83f42ed52c71b660d4da5",
+ "metadata": {
+ "sourceVideoId": "78",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4532",
+ "versionId": "555",
+ "code": "DH_60D40306A9E74E96ADD7641932934BE4",
+ "name": "重型支援桥平衡阀拆拼互换 · 4 封堵小腔油口",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/7315f5118bd573be864686aa786cf458.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 348426,
+ "sha256": "7fdab9117f713bd3e01aa1d956bfdbc4601df9f5b166b4a05488c1181ba12211",
+ "metadata": {
+ "sourceVideoId": "79",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4533",
+ "versionId": "555",
+ "code": "DH_A6EFEC7D339E4BA8994C525CA3709E2E",
+ "name": "重型支援桥平衡阀拆拼互换 · 5 清洗大腔平衡阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/c7e7402995b868a26a11f04255624ac9.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 242429,
+ "sha256": "5a2649d18c9cef179863c09cf8179668b34f1d253d1b340b3775509bdd057433",
+ "metadata": {
+ "sourceVideoId": "80",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4534",
+ "versionId": "555",
+ "code": "DH_D9E1BAFBD89D48019B9445B2A5752E68",
+ "name": "重型支援桥平衡阀拆拼互换 · 6 拆开大腔控制油口管路",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/d56936153f2455950a527c7b1b193cc1.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 299444,
+ "sha256": "8c3679991ac10e63383a40c2deffb1a9fdb5b79cbb692db64fda410e2b13b923",
+ "metadata": {
+ "sourceVideoId": "81",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4535",
+ "versionId": "555",
+ "code": "DH_E83DDAB19F774A418C82EBA7E8EDCF8A",
+ "name": "重型支援桥平衡阀拆拼互换 · 7 拆下大腔平衡阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/84a9178a525514f108f353c518765957.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 241834,
+ "sha256": "d8e749aee075d99707af8b1a6b9a6700f7b0349c19e9bbd5957f55f43e9c50af",
+ "metadata": {
+ "sourceVideoId": "82",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4536",
+ "versionId": "555",
+ "code": "DH_4FE31068F3EB410BAC72E19F1D1BAF49",
+ "name": "重型支援桥平衡阀拆拼互换 · 8 封堵大腔油口",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/323c01c7d4438be382e33b72c1acfdef.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 208428,
+ "sha256": "3d3c67dfa76d776bcafee0e35412de7c44190b74776f93d426e6d9947fd7bb2c",
+ "metadata": {
+ "sourceVideoId": "83",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4537",
+ "versionId": "555",
+ "code": "DH_D0A3CAC5278C4A57AC9BEF13DA2690BC",
+ "name": "重型支援桥平衡阀拆拼互换 · 9 准备安装大腔平衡阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/f76860dcb1df69933366b58a0a4acf49.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 241840,
+ "sha256": "bd890674565a670e7994a60be84847b692a8b4820995c3063a497d8cc7eddf7e",
+ "metadata": {
+ "sourceVideoId": "84",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4538",
+ "versionId": "555",
+ "code": "DH_0F40DAF3E28F4FA088EA943D9470CAA7",
+ "name": "重型支援桥平衡阀拆拼互换 · 10 安装大腔平衡阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/679a321b725c5069ff3c279bdb5d4e74.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 503224,
+ "sha256": "ed2ee749404179d67831c8f0c46cae21643c97700f431b5cb089f99644fb7d27",
+ "metadata": {
+ "sourceVideoId": "85",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4539",
+ "versionId": "555",
+ "code": "DH_F6427532AF5F40348CEB154F031F2AED",
+ "name": "重型支援桥平衡阀拆拼互换 · 11 核对大腔控制油口管路连接",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/ff6024de51727d348cfb8d889bea860e.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 689467,
+ "sha256": "e90845dc69d890c341d682f5d36b8880e83fe26bdad34fd8573ee0560d36d287",
+ "metadata": {
+ "sourceVideoId": "86",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4540",
+ "versionId": "555",
+ "code": "DH_F601DB08C8D44934AD3A1B1582E804DB",
+ "name": "重型支援桥平衡阀拆拼互换 · 12 紧固大腔阀体连接螺栓",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/bd49e1bbbbd6ad7f351cf2c6912934ff.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 360250,
+ "sha256": "133f1f65d5d88040d4ce758fdb7c0512c44d32f2affc5b0ce09f402f9fd687a5",
+ "metadata": {
+ "sourceVideoId": "87",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4541",
+ "versionId": "555",
+ "code": "DH_B1BBA42CE5F346228B6B39A51F190CB3",
+ "name": "重型支援桥平衡阀拆拼互换 · 13 准备安装小腔平衡阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/f6fdebd35ca690c3d05b74f55bd65605.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 242849,
+ "sha256": "7cf538b8754ccb0ada36395919cb9653d804717ec6a4d339dc8c62572697f27a",
+ "metadata": {
+ "sourceVideoId": "88",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4542",
+ "versionId": "555",
+ "code": "DH_2BCD762C693242FF8DA420BD9A5D4DF9",
+ "name": "重型支援桥平衡阀拆拼互换 · 14 安装小腔平衡阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/f7cce5ab61c4458386a86729a97637a9.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 318525,
+ "sha256": "456843aa826f489cde689a55d4ffb3e3759b7f7464cc1fbdde6d7d7d216ef31f",
+ "metadata": {
+ "sourceVideoId": "89",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4543",
+ "versionId": "555",
+ "code": "DH_5F8309BF74344C568C2C9EEFDD9E74BF",
+ "name": "重型支援桥平衡阀拆拼互换 · 15 核对小腔控制油口管路连接",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/c65892e63c10c2d1283cfab5c2e83481.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 1093064,
+ "sha256": "2a47835ce52868b09ecec6fe380098b412d29a8c2806519a54d15396e3473b57",
+ "metadata": {
+ "sourceVideoId": "90",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4544",
+ "versionId": "555",
+ "code": "DH_D525E35EDA12402DA13302C2B3874CC3",
+ "name": "重型支援桥平衡阀拆拼互换 · 16 紧固小腔阀体连接螺栓",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/f13bb21ae4e501ce3546122f2412f2aa.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 216175,
+ "sha256": "2e22f597ff2808e1b9e600c46c319f82cd91e2be0063bfc817c94d672c786213",
+ "metadata": {
+ "sourceVideoId": "91",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/reports/bridge-introduction-20260918/before-project-458.json b/reports/bridge-introduction-20260918/before-project-458.json
new file mode 100644
index 0000000..a053b22
--- /dev/null
+++ b/reports/bridge-introduction-20260918/before-project-458.json
@@ -0,0 +1,2377 @@
+{
+ "project": {
+ "id": "458",
+ "type": "TRAINING",
+ "code": "TRAINING-962819ED4B72484A",
+ "name": "005 液压泵应急切换(编排验证)",
+ "description": "独立验证工程;不替换 TASK-VIRTUAL-005 及其发布版本。",
+ "categoryCode": "MAINTENANCE",
+ "trainingMode": "VIRTUAL",
+ "coverUri": "fsvc://unreal-tran/image/2026/09/17/0bfa7f92a4f6827d7ff05995630f35fe.jpg",
+ "status": "PUBLISHED",
+ "ownerUserId": "99",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "currentVersionId": "552",
+ "currentVersionNo": 8,
+ "currentVersionCode": "V8.0.0",
+ "publishedVersionId": "552",
+ "publishedTime": 1789655633,
+ "usageCount": 0,
+ "version": 30,
+ "addTime": 1789566627,
+ "updateTime": "2026-09-17T22:33:53",
+ "contentSummary": {
+ "schema": "digital-workshop-training-project",
+ "level": "标准",
+ "durationMinutes": 10,
+ "trainingMode": "VIRTUAL",
+ "stepCount": 5
+ },
+ "currentVersionStatus": "PUBLISHED",
+ "dependencyCount": 1,
+ "assetCount": 11,
+ "readCount": 0,
+ "downloadCount": 0
+ },
+ "currentVersion": {
+ "id": "552",
+ "projectId": "458",
+ "versionNo": 8,
+ "versionCode": "V8.0.0",
+ "status": "PUBLISHED",
+ "content": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "trainingMode": "VIRTUAL",
+ "enabledChannels": [
+ "VIRTUAL"
+ ],
+ "channelProfiles": {
+ "VIRTUAL": {
+ "type": "VIRTUAL",
+ "renderMode": "三维实时仿真",
+ "interactionMode": "三维操作、动画引导与规则自动判定",
+ "assistance": "演示、训练与模拟考试"
+ }
+ },
+ "level": "标准",
+ "durationMinutes": 10,
+ "totalScore": 100,
+ "objectives": [],
+ "steps": [
+ {
+ "id": "front-pump-step-01",
+ "stepCode": "front-pump-step-01",
+ "order": 1,
+ "title": "根据故障现象确定是哪一个液压泵发生故障",
+ "summary": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-01",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-hydraulic-pump",
+ "targetName": "液压泵",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "guidance": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "warning": "",
+ "destination": "液压泵",
+ "success": "根据故障现象确定是哪一个液压泵发生故障",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-hydraulic-pump",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "identify",
+ "axisSpace": "world",
+ "highlightColor": "#e53935",
+ "steps": [
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第1步,确定故障液压泵。根据故障现象确定发生故障的液压泵。",
+ "narrationAssetCode": "PILOT-005-1-AUDIO",
+ "safetyText": "安全提示:请按规定顺序操作并远离危险区域。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-1-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "exterior",
+ "number": 1,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "bridge-0916-node-92",
+ "nodePath": "0/46/0",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-hydraulic-pump",
+ "targetNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-02",
+ "stepCode": "front-pump-step-02",
+ "order": 2,
+ "title": "断开架桥车取力器",
+ "summary": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-02",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "guidance": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "断开架桥车取力器",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": -30,
+ "toleranceDegrees": 6,
+ "directionHint": "向断开方向摇动"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第2步,断开架桥车取力器。将架桥车取力器断开。",
+ "narrationAssetCode": "PILOT-005-2-AUDIO",
+ "safetyText": "安全提示:请确认压力归零并可靠支承后再进行拆卸。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-2-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "exterior",
+ "number": 2,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-03",
+ "stepCode": "front-pump-step-03",
+ "order": 3,
+ "title": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "summary": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-03",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-ball-valve-switch",
+ "targetName": "球阀开关",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "guidance": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "warning": "",
+ "destination": "球阀开关",
+ "success": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-ball-valve-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "steps": [
+ {
+ "targetId": "front-pump-ball-valve-switch",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "由垂直与官道方向旋转至平行于管道方向"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第3步,打开互救球阀。打开备胎上方两个红色滤油器之间的连通球阀,手柄由垂直管道转为平行管道。",
+ "narrationAssetCode": "PILOT-005-3-AUDIO",
+ "safetyText": "安全提示:请按规定顺序操作并远离危险区域。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-3-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "focus",
+ "number": 3,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "bridge-0916-node-96",
+ "nodePath": "0/48/0",
+ "sourceNodeName": "1_26球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-ball-valve-switch",
+ "targetNodeName": "1_26球阀开关",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-04",
+ "stepCode": "front-pump-step-04",
+ "order": 4,
+ "title": "重新联通取力器",
+ "summary": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-04",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "guidance": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "重新联通取力器",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "按步骤2的相反方向摇回去"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第4步,重新接通取力器。将架桥车取力器重新接通。",
+ "narrationAssetCode": "PILOT-005-4-AUDIO",
+ "safetyText": "安全提示:请按规定顺序操作并远离危险区域。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-4-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "exterior",
+ "number": 4,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-05",
+ "stepCode": "front-pump-step-05",
+ "order": 5,
+ "title": "打开辅助控制盒内的“互救”开关",
+ "summary": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-05",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-aux-control-box-cover",
+ "targetName": "辅助控制盒盖",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "guidance": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "warning": "",
+ "destination": "辅助控制盒盖",
+ "success": "打开辅助控制盒内的“互救”开关",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-aux-control-box-cover",
+ "mode": "inspect",
+ "durationMs": 1600,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "sequence",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-aux-control-box"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-aux-control-box-cover",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 100,
+ "toleranceDegrees": 8,
+ "directionHint": "沿控制盒盖边缘铰链打开",
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ }
+ },
+ {
+ "targetId": "front-pump-rescue-switch",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "往上搬"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第5步,打开辅助控制盒互救开关。打开辅助控制盒盖,再打开互救开关,进入单泵作业状态。",
+ "narrationAssetCode": "PILOT-005-5-AUDIO",
+ "safetyText": "安全提示:请确认压力归零并可靠支承后再进行拆卸。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-5-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "focus",
+ "number": 5,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "bridge-0916-node-78",
+ "nodePath": "0/39/0",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-aux-control-box-cover",
+ "targetNodeName": "1_28辅助控制盒盖",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ }
+ ],
+ "modeConfig": {
+ "type": "VIRTUAL",
+ "renderMode": "三维实时仿真",
+ "interactionMode": "三维操作、动画引导与规则自动判定",
+ "assistance": "演示、训练与模拟考试"
+ },
+ "task": {
+ "code": "BRIDGE-005-AUTHORING-PILOT",
+ "title": "005 液压泵应急切换(编排验证)",
+ "category": "小修",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ],
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "categoryId": "minor-repair",
+ "image": "/models/step-model-front-pump-thumb.png"
+ },
+ "scenario": {
+ "environmentName": "真实野外训练场",
+ "sceneLayout": "2 个场景对象 · 设备与物模型绑定已继承",
+ "equipmentState": "压力不足 · 内泄待定位",
+ "sceneTags": [],
+ "visibleParts": [
+ "front-pump-hydraulic-pump",
+ "front-pump-pto-switch",
+ "front-pump-ball-valve-switch",
+ "front-pump-aux-control-box-cover"
+ ],
+ "operableParts": [
+ "front-pump-hydraulic-pump",
+ "front-pump-pto-switch",
+ "front-pump-ball-valve-switch",
+ "front-pump-aux-control-box-cover"
+ ],
+ "sensorFeeds": [
+ {
+ "id": "STATE",
+ "label": "装备状态",
+ "value": "就绪",
+ "unit": "",
+ "state": "ok"
+ },
+ {
+ "id": "STEP",
+ "label": "流程节点",
+ "value": "1 / 8",
+ "unit": "",
+ "state": "ready"
+ },
+ {
+ "id": "RULE",
+ "label": "规则判定",
+ "value": "等待操作",
+ "unit": "",
+ "state": "ready"
+ }
+ ],
+ "id": "hydraulic-fault-scenario",
+ "publishedSceneId": "457@551",
+ "publishedSceneVersion": "7",
+ "sceneResource": {
+ "sceneId": "457@551",
+ "sourceProjectId": "457",
+ "sourceVersionId": "551",
+ "version": "7",
+ "sourceKind": "published",
+ "status": "已发布",
+ "publishedAt": "2026-09-17T14:33:41.000Z",
+ "objectCount": 2,
+ "assetKey": "",
+ "presetId": "terrain-1",
+ "type": "outdoor",
+ "name": "005 液压泵应急切换(编排验证)",
+ "environment": {
+ "schema": "edit3dv4.scene-environment",
+ "version": "1.0",
+ "presetId": "terrain-1",
+ "type": "outdoor",
+ "floorOnly": false,
+ "useModelFloor": true
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "deviceId": "front-pump-training-yard",
+ "modelId": "front-pump-field-terrain",
+ "semantic": "环境地形",
+ "assetRole": "environment",
+ "builtinAssetId": "front-pump-field-terrain",
+ "modelEditorAssetId": "",
+ "modelEditorModelId": "",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "partOverrides": {},
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "",
+ "assetKey": "",
+ "resourceUrl": "/models/terrain-005-20260917.glb",
+ "sourceName": "terrain-005-20260917.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ -3.1597256741842212,
+ 10.30528511389146,
+ -40.10715876774236
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1.7159231079037875,
+ 1.7159231079037875,
+ 1.7159231079037875
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "deviceId": "front-pump-rescue-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "semantic": "实训装备",
+ "assetRole": "equipment",
+ "builtinAssetId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "bridge-erector-0916",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "sceneId": "front-pump-hydraulic-pump",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "bridge-0916-node-92",
+ "nodePath": "0/46/0",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-power-take-off",
+ "interactionId": "front-pump-power-take-off",
+ "sourceInteractionId": "front-pump-power-take-off",
+ "editorId": "bridge-0916-node-80",
+ "nodePath": "0/40/0",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-pto-switch",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-ball-valve-switch",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "bridge-0916-node-96",
+ "nodePath": "0/48/0",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box",
+ "interactionId": "front-pump-aux-control-box",
+ "sourceInteractionId": "front-pump-aux-control-box",
+ "editorId": "bridge-0916-node-84",
+ "nodePath": "0/42/0",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box-cover",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "bridge-0916-node-78",
+ "nodePath": "0/39/0",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-rescue-switch",
+ "interactionId": "front-pump-rescue-switch",
+ "sourceInteractionId": "front-pump-rescue-switch",
+ "editorId": "bridge-0916-node-86",
+ "nodePath": "0/43/0",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ],
+ "partOverrides": {
+ "front-pump-hydraulic-pump": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-power-take-off": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-pto-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-ball-valve-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-aux-control-box": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-aux-control-box-cover": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-rescue-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ }
+ },
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "Group",
+ "assetKey": "",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "sourceName": "0916架桥车.glb",
+ "sizeBytes": 37160920,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ 1.5698558846140135e-16,
+ 0.00012730681329620186,
+ 0.13180482636746585
+ ],
+ "rotation": [
+ 3.0865583248298285e-17,
+ -3.96331642134641e-33,
+ -2.568113739801058e-16
+ ],
+ "scale": [
+ 0.9715696607300419,
+ 0.9715696607300419,
+ 0.9715696607300419
+ ]
+ }
+ ],
+ "assetReferences": [
+ {
+ "assetKey": "",
+ "resourceUrl": "/models/terrain-005-20260917.glb",
+ "sourceName": "terrain-005-20260917.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "environment",
+ "builtinAssetId": "front-pump-field-terrain"
+ },
+ {
+ "assetKey": "",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "sourceName": "0916架桥车.glb",
+ "sizeBytes": 37160920,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "equipment",
+ "builtinAssetId": "front-pump-step-vehicle"
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "7",
+ "presetId": "terrain-1",
+ "name": "真实野外训练场",
+ "type": "outdoor",
+ "assetKey": "",
+ "environment": {
+ "schema": "edit3dv4.scene-environment",
+ "version": "1.0",
+ "presetId": "terrain-1",
+ "type": "outdoor",
+ "floorOnly": false,
+ "useModelFloor": true
+ },
+ "rendering": {
+ "schema": "edit3dv4.scene-rendering",
+ "version": "1.0",
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 34,
+ "far": 88
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.05,
+ "far": 800,
+ "position": [
+ 7.138234886169582,
+ 3.695554761077557,
+ 7.955160424286649
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ]
+ },
+ "lights": {
+ "hemisphere": {
+ "skyColor": 15594743,
+ "groundColor": 6910582,
+ "intensity": 1.45
+ },
+ "directional": {
+ "color": 16777215,
+ "intensity": 2,
+ "position": [
+ 12,
+ 18,
+ 10
+ ],
+ "castShadow": true,
+ "shadowMapSize": 2048,
+ "shadowBounds": 82
+ }
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "deviceId": "front-pump-training-yard",
+ "modelId": "front-pump-field-terrain",
+ "semantic": "环境地形",
+ "assetRole": "environment",
+ "builtinAssetId": "front-pump-field-terrain",
+ "modelEditorAssetId": "",
+ "modelEditorModelId": "",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "partOverrides": {},
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "",
+ "assetKey": "",
+ "resourceUrl": "/models/terrain-005-20260917.glb",
+ "sourceName": "terrain-005-20260917.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ -3.1597256741842212,
+ 10.30528511389146,
+ -40.10715876774236
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1.7159231079037875,
+ 1.7159231079037875,
+ 1.7159231079037875
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "deviceId": "front-pump-rescue-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "semantic": "实训装备",
+ "assetRole": "equipment",
+ "builtinAssetId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "bridge-erector-0916",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "sceneId": "front-pump-hydraulic-pump",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "bridge-0916-node-92",
+ "nodePath": "0/46/0",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-power-take-off",
+ "interactionId": "front-pump-power-take-off",
+ "sourceInteractionId": "front-pump-power-take-off",
+ "editorId": "bridge-0916-node-80",
+ "nodePath": "0/40/0",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-pto-switch",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-ball-valve-switch",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "bridge-0916-node-96",
+ "nodePath": "0/48/0",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box",
+ "interactionId": "front-pump-aux-control-box",
+ "sourceInteractionId": "front-pump-aux-control-box",
+ "editorId": "bridge-0916-node-84",
+ "nodePath": "0/42/0",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box-cover",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "bridge-0916-node-78",
+ "nodePath": "0/39/0",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-rescue-switch",
+ "interactionId": "front-pump-rescue-switch",
+ "sourceInteractionId": "front-pump-rescue-switch",
+ "editorId": "bridge-0916-node-86",
+ "nodePath": "0/43/0",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ],
+ "partOverrides": {
+ "front-pump-hydraulic-pump": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-power-take-off": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-pto-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-ball-valve-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-aux-control-box": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-aux-control-box-cover": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-rescue-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ }
+ },
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "Group",
+ "assetKey": "",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "sourceName": "0916架桥车.glb",
+ "sizeBytes": 37160920,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ 1.5698558846140135e-16,
+ 0.00012730681329620186,
+ 0.13180482636746585
+ ],
+ "rotation": [
+ 3.0865583248298285e-17,
+ -3.96331642134641e-33,
+ -2.568113739801058e-16
+ ],
+ "scale": [
+ 0.9715696607300419,
+ 0.9715696607300419,
+ 0.9715696607300419
+ ]
+ }
+ ]
+ }
+ },
+ "baseVisualKey": "diagnostic-bay",
+ "environment": {
+ "type": "outdoor",
+ "mode": "external",
+ "sourceName": "005 液压泵应急切换(编排验证) · 场景发布包",
+ "resourceUrl": "/models/terrain-005-20260917.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "accent": "#e98a2f",
+ "background": 12178915,
+ "fog": 12178915,
+ "ground": 6450803,
+ "camera": {
+ "position": [
+ 9.6,
+ 6.2,
+ 12.3
+ ],
+ "target": [
+ -0.25,
+ 2.45,
+ 0
+ ]
+ },
+ "retainStoredParts": false
+ },
+ "tools": [
+ {
+ "id": "pressure-gauge",
+ "name": "数字压力表",
+ "purpose": "卸压确认与压力复测",
+ "thumbnailKey": "pressure-gauge",
+ "modelKind": "pressure-gauge",
+ "defaultScale": 1
+ },
+ {
+ "id": "leak-detector",
+ "name": "泄漏检测灯",
+ "purpose": "油管与密封外泄检查",
+ "thumbnailKey": "leak-detector",
+ "modelKind": "leak-detector",
+ "defaultScale": 1
+ },
+ {
+ "id": "leakage-tester",
+ "name": "内泄保压仪",
+ "purpose": "压力衰减诊断",
+ "thumbnailKey": "leakage-tester",
+ "modelKind": "leakage-tester",
+ "defaultScale": 1
+ },
+ {
+ "id": "hose-wrench",
+ "name": "油管扳手",
+ "purpose": "接头拆装",
+ "thumbnailKey": "hose-wrench",
+ "modelKind": "hose-wrench",
+ "defaultScale": 1
+ },
+ {
+ "id": "pin-puller",
+ "name": "液压拔销器",
+ "purpose": "销轴同轴分离",
+ "thumbnailKey": "pin-puller",
+ "modelKind": "pin-puller",
+ "defaultScale": 1
+ },
+ {
+ "id": "lifting-sling",
+ "name": "起吊带与平衡梁",
+ "purpose": "液压缸总成吊运",
+ "thumbnailKey": "lifting-sling",
+ "modelKind": "lifting-sling",
+ "defaultScale": 1
+ },
+ {
+ "id": "seal-kit",
+ "name": "密封拆装工具",
+ "purpose": "密封组件更换",
+ "thumbnailKey": "seal-kit",
+ "modelKind": "seal-kit",
+ "defaultScale": 1
+ },
+ {
+ "id": "torque-wrench",
+ "name": "数字扭矩扳手",
+ "purpose": "规范力矩紧固",
+ "thumbnailKey": "torque-wrench",
+ "modelKind": "torque-wrench",
+ "defaultScale": 1
+ },
+ {
+ "id": "checklist-terminal",
+ "name": "数字点检终端",
+ "purpose": "路线签到与清单确认",
+ "thumbnailKey": "checklist-terminal",
+ "modelKind": "checklist-terminal",
+ "defaultScale": 1
+ },
+ {
+ "id": "feeler-gauge",
+ "name": "间隙规",
+ "purpose": "销轴配合间隙测量",
+ "thumbnailKey": "feeler-gauge",
+ "modelKind": "feeler-gauge",
+ "defaultScale": 1
+ },
+ {
+ "id": "lock-tool",
+ "name": "锁止件拆装钳",
+ "purpose": "解除与恢复锁止件",
+ "thumbnailKey": "lock-tool",
+ "modelKind": "lock-tool",
+ "defaultScale": 1
+ },
+ {
+ "id": "alignment-tool",
+ "name": "同轴装配导向器",
+ "purpose": "反向复装校准",
+ "thumbnailKey": "alignment-tool",
+ "modelKind": "alignment-tool",
+ "defaultScale": 1
+ }
+ ],
+ "faults": [],
+ "authoring": {
+ "schema": "unreal-tran.training-authoring/v1",
+ "version": 1,
+ "nodes": [
+ {
+ "id": "flow-start",
+ "type": "start",
+ "title": "训练开始",
+ "x": 32,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-01",
+ "type": "step",
+ "title": "根据故障现象确定是哪一个液压泵发生故障",
+ "stepId": "front-pump-step-01",
+ "x": 240,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-02",
+ "type": "step",
+ "title": "断开架桥车取力器",
+ "stepId": "front-pump-step-02",
+ "x": 500,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-03",
+ "type": "step",
+ "title": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "stepId": "front-pump-step-03",
+ "x": 760,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-04",
+ "type": "step",
+ "title": "重新联通取力器",
+ "stepId": "front-pump-step-04",
+ "x": 240,
+ "y": 270,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-05",
+ "type": "step",
+ "title": "打开辅助控制盒内的“互救”开关",
+ "stepId": "front-pump-step-05",
+ "x": 500,
+ "y": 270,
+ "config": {}
+ },
+ {
+ "id": "flow-end",
+ "type": "end",
+ "title": "训练结束",
+ "x": 760,
+ "y": 270,
+ "config": {}
+ }
+ ],
+ "edges": [
+ {
+ "id": "edge:flow-start:step-node:front-pump-step-01",
+ "from": "flow-start",
+ "to": "step-node:front-pump-step-01",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-01:step-node:front-pump-step-02",
+ "from": "step-node:front-pump-step-01",
+ "to": "step-node:front-pump-step-02",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-02:step-node:front-pump-step-03",
+ "from": "step-node:front-pump-step-02",
+ "to": "step-node:front-pump-step-03",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-03:step-node:front-pump-step-04",
+ "from": "step-node:front-pump-step-03",
+ "to": "step-node:front-pump-step-04",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-04:step-node:front-pump-step-05",
+ "from": "step-node:front-pump-step-04",
+ "to": "step-node:front-pump-step-05",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-05:flow-end",
+ "from": "step-node:front-pump-step-05",
+ "to": "flow-end",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ }
+ ],
+ "timeline": {
+ "currentTime": 0,
+ "tracks": {
+ "front-pump-step-01": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-1-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-02": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-2-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-03": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-3-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-04": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-4-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-05": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-5-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ }
+ }
+ }
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN"
+ },
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥液压泵应急切换",
+ "status": "published",
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/4.jpg",
+ "resources": {
+ "models": [],
+ "animations": []
+ },
+ "legacyBridge": {
+ "schema": "unreal-tran.training-legacy-bridge/v1",
+ "uris": [],
+ "tracks": {
+ "front-pump-step-01": {
+ "audio": ""
+ },
+ "front-pump-step-02": {
+ "audio": ""
+ },
+ "front-pump-step-03": {
+ "audio": ""
+ },
+ "front-pump-step-04": {
+ "audio": ""
+ },
+ "front-pump-step-05": {
+ "audio": ""
+ }
+ }
+ }
+ },
+ "changeSummary": "本地编排版发布前保存",
+ "checksum": "9d65cd63a8b2ad775a708fb0bd6a203835345c93bd624e9ac72f880cfa1fa85d",
+ "createdByUserId": "99",
+ "createdByName": "内部维护",
+ "publishedByUserId": "99",
+ "publishedByName": "内部维护",
+ "publishedTime": 1789655633,
+ "version": 3,
+ "addTime": 1789655627,
+ "updateTime": "2026-09-17T22:33:53",
+ "dependencies": [
+ {
+ "id": "618",
+ "targetProjectId": "457",
+ "targetVersionId": "551",
+ "relationType": "TRAINING_SCENE",
+ "required": true,
+ "sortOrder": 0
+ }
+ ],
+ "assets": [
+ {
+ "id": "4466",
+ "versionId": "552",
+ "code": "PILOT-005-1-VIDEO",
+ "name": "步骤 1 VIDEO",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/16/1d68534e92e3d5f064ff1c09efabfe25.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 340847,
+ "sha256": "7db0b2653aa8719268764ff4fb4f1ede92c947b9f4603308ce2ad7d0903ac45c",
+ "metadata": {
+ "source": "bridge-005-authoring-pilot",
+ "boxCount": 4,
+ "format": "MP4",
+ "majorBrand": "isom",
+ "originalFilename": "step-01-bd17dc16621458c4.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4467",
+ "versionId": "552",
+ "code": "PILOT-005-1-AUDIO",
+ "name": "步骤 1 AUDIO",
+ "type": "AUDIO",
+ "storageUri": "fsvc://unreal-tran/audio/2026/09/16/8d90d717134dff45edb854dffa573024.wav",
+ "mimeType": "audio/wav",
+ "sizeBytes": 155648,
+ "sha256": "3b29f93a367e7f8738500a2adeb56dc4752ce91f17e3b5bf671d3ee0f7f080eb",
+ "metadata": {
+ "source": "bridge-005-authoring-pilot",
+ "bitsPerSample": 16,
+ "sampleRate": 16000,
+ "format": "WAV",
+ "channels": 1,
+ "originalFilename": "step-01-4b0be5be669cfeaf.wav",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "4468",
+ "versionId": "552",
+ "code": "PILOT-005-2-VIDEO",
+ "name": "步骤 2 VIDEO",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/16/da9b6b7fc1c4c1ebed0b0d462a9fd3f6.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 280578,
+ "sha256": "421922b32e5a9cb84c2fef6d1b026918044af2ce1ce0b725a89b60900d2052ef",
+ "metadata": {
+ "source": "bridge-005-authoring-pilot",
+ "boxCount": 4,
+ "format": "MP4",
+ "majorBrand": "isom",
+ "originalFilename": "step-02-f485ff03a609c910.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 1
+ },
+ {
+ "id": "4469",
+ "versionId": "552",
+ "code": "PILOT-005-2-AUDIO",
+ "name": "步骤 2 AUDIO",
+ "type": "AUDIO",
+ "storageUri": "fsvc://unreal-tran/audio/2026/09/16/a2f16454230ab6f97ed3ab31d79d5253.wav",
+ "mimeType": "audio/wav",
+ "sizeBytes": 120796,
+ "sha256": "6483f2df65230985db961bef38b3c55684bc623058fc8c0589e66f816d62dc29",
+ "metadata": {
+ "source": "bridge-005-authoring-pilot",
+ "bitsPerSample": 16,
+ "sampleRate": 16000,
+ "format": "WAV",
+ "channels": 1,
+ "originalFilename": "step-02-2e6be19cade105be.wav",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 1
+ },
+ {
+ "id": "4470",
+ "versionId": "552",
+ "code": "PILOT-005-3-VIDEO",
+ "name": "步骤 3 VIDEO",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/16/63bd22c6368538c24efa35d4b5f68dc5.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 552548,
+ "sha256": "4ff18d5fa228f6c040d39ec4f435fcac9eb9bfe768f108a27f57577ebcada362",
+ "metadata": {
+ "source": "bridge-005-authoring-pilot",
+ "boxCount": 4,
+ "format": "MP4",
+ "majorBrand": "isom",
+ "originalFilename": "step-03-81ea8dc0e23da76d.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 2
+ },
+ {
+ "id": "4471",
+ "versionId": "552",
+ "code": "PILOT-005-3-AUDIO",
+ "name": "步骤 3 AUDIO",
+ "type": "AUDIO",
+ "storageUri": "fsvc://unreal-tran/audio/2026/09/16/e752c9edbd3ce5e7dcd111340f5dde6c.wav",
+ "mimeType": "audio/wav",
+ "sizeBytes": 264432,
+ "sha256": "96f5889aa3ba307d05572b3912ebc5ac756b87957fddb2838e77a6b6f314296b",
+ "metadata": {
+ "source": "bridge-005-authoring-pilot",
+ "bitsPerSample": 16,
+ "sampleRate": 16000,
+ "format": "WAV",
+ "channels": 1,
+ "originalFilename": "step-03-b2401eb08aa0a8e8.wav",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 2
+ },
+ {
+ "id": "4472",
+ "versionId": "552",
+ "code": "PILOT-005-4-VIDEO",
+ "name": "步骤 4 VIDEO",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/16/18d91191921dc3a6eb3efc3bbac6884d.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 277188,
+ "sha256": "e841b61cf522ed5f1633b8569eba04bc17ee77d777f811ddbb2334abb856f2cb",
+ "metadata": {
+ "source": "bridge-005-authoring-pilot",
+ "boxCount": 4,
+ "format": "MP4",
+ "majorBrand": "isom",
+ "originalFilename": "step-04-aa6bbd5769344dc0.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 3
+ },
+ {
+ "id": "4473",
+ "versionId": "552",
+ "code": "PILOT-005-4-AUDIO",
+ "name": "步骤 4 AUDIO",
+ "type": "AUDIO",
+ "storageUri": "fsvc://unreal-tran/audio/2026/09/16/01fc9a9a439efdee09e7224927109d59.wav",
+ "mimeType": "audio/wav",
+ "sizeBytes": 133112,
+ "sha256": "1cf2f643138ceddaf4c0cf5b751abe2e9f74437f68efb20e6acc5263311f1bc0",
+ "metadata": {
+ "source": "bridge-005-authoring-pilot",
+ "bitsPerSample": 16,
+ "sampleRate": 16000,
+ "format": "WAV",
+ "channels": 1,
+ "originalFilename": "step-04-98693ab8c5150fd5.wav",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 3
+ },
+ {
+ "id": "4474",
+ "versionId": "552",
+ "code": "PILOT-005-5-VIDEO",
+ "name": "步骤 5 VIDEO",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/16/8d910c1385034ee6fc05803dcf92bddc.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 450719,
+ "sha256": "6def38648367bbd7475e7bcba40d407d8530e9bbbdda128121c320ccd252275c",
+ "metadata": {
+ "source": "bridge-005-authoring-pilot",
+ "boxCount": 4,
+ "format": "MP4",
+ "majorBrand": "isom",
+ "originalFilename": "step-05-422f9e85bb468fd5.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 4
+ },
+ {
+ "id": "4475",
+ "versionId": "552",
+ "code": "PILOT-005-5-AUDIO",
+ "name": "步骤 5 AUDIO",
+ "type": "AUDIO",
+ "storageUri": "fsvc://unreal-tran/audio/2026/09/16/d67f8cd751f01c94f7c58c5aa2bc11d4.wav",
+ "mimeType": "audio/wav",
+ "sizeBytes": 214448,
+ "sha256": "a6baf1bc2900f1daecbe77be41aeecc8914cc5ae3f170bbf7c7c7ded86f8a4a2",
+ "metadata": {
+ "source": "bridge-005-authoring-pilot",
+ "bitsPerSample": 16,
+ "sampleRate": 16000,
+ "format": "WAV",
+ "channels": 1,
+ "originalFilename": "step-05-a21afc5ebe5af2ee.wav",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 4
+ },
+ {
+ "id": "4476",
+ "versionId": "552",
+ "code": "TRAINING_COVER",
+ "name": "训练画面封面",
+ "type": "IMAGE",
+ "storageUri": "fsvc://unreal-tran/image/2026/09/17/0bfa7f92a4f6827d7ff05995630f35fe.jpg",
+ "mimeType": "image/jpeg",
+ "sizeBytes": 40394,
+ "sha256": "1b9e182ae8b1b980885b777b2b354d923618156b20503f8c3d6ce6e5c1c0acc3",
+ "metadata": {
+ "usage": "training-cover",
+ "source": "training-editor-viewport",
+ "originalFilename": "training-cover.jpg",
+ "format": "JPEG",
+ "width": 532,
+ "height": 640,
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 10
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/reports/bridge-introduction-20260918/before-task-116.json b/reports/bridge-introduction-20260918/before-task-116.json
new file mode 100644
index 0000000..9582e2f
--- /dev/null
+++ b/reports/bridge-introduction-20260918/before-task-116.json
@@ -0,0 +1,2183 @@
+{
+ "id": "116",
+ "code": "BRIDGE-005-AUTHORING-PILOT",
+ "name": "005 液压泵应急切换(编排验证)",
+ "description": "独立编排验证,不替换现有005",
+ "channel": "VIRTUAL",
+ "assignmentKind": "TRAINING",
+ "executionMode": "PRACTICE",
+ "audienceType": "COMMON",
+ "collaborationMode": "INDIVIDUAL",
+ "digitalHumanAllowed": false,
+ "digitalInstructorAgentSlug": "",
+ "digitalInstructorAgentName": "",
+ "digitalInstructorKnowledgeSource": "AGENT",
+ "contentProjectId": "458",
+ "contentVersionId": "552",
+ "definitionSnapshot": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "trainingMode": "VIRTUAL",
+ "enabledChannels": [
+ "VIRTUAL"
+ ],
+ "channelProfiles": {
+ "VIRTUAL": {
+ "type": "VIRTUAL",
+ "renderMode": "三维实时仿真",
+ "interactionMode": "三维操作、动画引导与规则自动判定",
+ "assistance": "演示、训练与模拟考试"
+ }
+ },
+ "level": "标准",
+ "durationMinutes": 10,
+ "totalScore": 100,
+ "objectives": [],
+ "steps": [
+ {
+ "id": "front-pump-step-01",
+ "stepCode": "front-pump-step-01",
+ "order": 1,
+ "title": "根据故障现象确定是哪一个液压泵发生故障",
+ "summary": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-01",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-hydraulic-pump",
+ "targetName": "液压泵",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "guidance": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "warning": "",
+ "destination": "液压泵",
+ "success": "根据故障现象确定是哪一个液压泵发生故障",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-hydraulic-pump",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "identify",
+ "axisSpace": "world",
+ "highlightColor": "#e53935",
+ "steps": [
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第1步,确定故障液压泵。根据故障现象确定发生故障的液压泵。",
+ "narrationAssetCode": "PILOT-005-1-AUDIO",
+ "safetyText": "安全提示:请按规定顺序操作并远离危险区域。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-1-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "exterior",
+ "number": 1,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "bridge-0916-node-92",
+ "nodePath": "0/46/0",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-hydraulic-pump",
+ "targetNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-02",
+ "stepCode": "front-pump-step-02",
+ "order": 2,
+ "title": "断开架桥车取力器",
+ "summary": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-02",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "guidance": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "断开架桥车取力器",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": -30,
+ "toleranceDegrees": 6,
+ "directionHint": "向断开方向摇动"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第2步,断开架桥车取力器。将架桥车取力器断开。",
+ "narrationAssetCode": "PILOT-005-2-AUDIO",
+ "safetyText": "安全提示:请确认压力归零并可靠支承后再进行拆卸。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-2-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "exterior",
+ "number": 2,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-03",
+ "stepCode": "front-pump-step-03",
+ "order": 3,
+ "title": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "summary": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-03",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-ball-valve-switch",
+ "targetName": "球阀开关",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "guidance": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "warning": "",
+ "destination": "球阀开关",
+ "success": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-ball-valve-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "steps": [
+ {
+ "targetId": "front-pump-ball-valve-switch",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "由垂直与官道方向旋转至平行于管道方向"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第3步,打开互救球阀。打开备胎上方两个红色滤油器之间的连通球阀,手柄由垂直管道转为平行管道。",
+ "narrationAssetCode": "PILOT-005-3-AUDIO",
+ "safetyText": "安全提示:请按规定顺序操作并远离危险区域。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-3-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "focus",
+ "number": 3,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "bridge-0916-node-96",
+ "nodePath": "0/48/0",
+ "sourceNodeName": "1_26球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-ball-valve-switch",
+ "targetNodeName": "1_26球阀开关",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-04",
+ "stepCode": "front-pump-step-04",
+ "order": 4,
+ "title": "重新联通取力器",
+ "summary": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-04",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "guidance": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "重新联通取力器",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "按步骤2的相反方向摇回去"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第4步,重新接通取力器。将架桥车取力器重新接通。",
+ "narrationAssetCode": "PILOT-005-4-AUDIO",
+ "safetyText": "安全提示:请按规定顺序操作并远离危险区域。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-4-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "exterior",
+ "number": 4,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-05",
+ "stepCode": "front-pump-step-05",
+ "order": 5,
+ "title": "打开辅助控制盒内的“互救”开关",
+ "summary": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-05",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-aux-control-box-cover",
+ "targetName": "辅助控制盒盖",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "guidance": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "warning": "",
+ "destination": "辅助控制盒盖",
+ "success": "打开辅助控制盒内的“互救”开关",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-aux-control-box-cover",
+ "mode": "inspect",
+ "durationMs": 1600,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "sequence",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-aux-control-box"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-aux-control-box-cover",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 100,
+ "toleranceDegrees": 8,
+ "directionHint": "沿控制盒盖边缘铰链打开",
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ }
+ },
+ {
+ "targetId": "front-pump-rescue-switch",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "往上搬"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第5步,打开辅助控制盒互救开关。打开辅助控制盒盖,再打开互救开关,进入单泵作业状态。",
+ "narrationAssetCode": "PILOT-005-5-AUDIO",
+ "safetyText": "安全提示:请确认压力归零并可靠支承后再进行拆卸。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-5-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "focus",
+ "number": 5,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "bridge-0916-node-78",
+ "nodePath": "0/39/0",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-aux-control-box-cover",
+ "targetNodeName": "1_28辅助控制盒盖",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ }
+ ],
+ "modeConfig": {
+ "type": "VIRTUAL",
+ "renderMode": "三维实时仿真",
+ "interactionMode": "三维操作、动画引导与规则自动判定",
+ "assistance": "演示、训练与模拟考试"
+ },
+ "task": {
+ "code": "BRIDGE-005-AUTHORING-PILOT",
+ "title": "005 液压泵应急切换(编排验证)",
+ "category": "小修",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ],
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "categoryId": "minor-repair",
+ "image": "/models/step-model-front-pump-thumb.png"
+ },
+ "scenario": {
+ "environmentName": "真实野外训练场",
+ "sceneLayout": "2 个场景对象 · 设备与物模型绑定已继承",
+ "equipmentState": "压力不足 · 内泄待定位",
+ "sceneTags": [],
+ "visibleParts": [
+ "front-pump-hydraulic-pump",
+ "front-pump-pto-switch",
+ "front-pump-ball-valve-switch",
+ "front-pump-aux-control-box-cover"
+ ],
+ "operableParts": [
+ "front-pump-hydraulic-pump",
+ "front-pump-pto-switch",
+ "front-pump-ball-valve-switch",
+ "front-pump-aux-control-box-cover"
+ ],
+ "sensorFeeds": [
+ {
+ "id": "STATE",
+ "label": "装备状态",
+ "value": "就绪",
+ "unit": "",
+ "state": "ok"
+ },
+ {
+ "id": "STEP",
+ "label": "流程节点",
+ "value": "1 / 8",
+ "unit": "",
+ "state": "ready"
+ },
+ {
+ "id": "RULE",
+ "label": "规则判定",
+ "value": "等待操作",
+ "unit": "",
+ "state": "ready"
+ }
+ ],
+ "id": "hydraulic-fault-scenario",
+ "publishedSceneId": "457@551",
+ "publishedSceneVersion": "7",
+ "sceneResource": {
+ "sceneId": "457@551",
+ "sourceProjectId": "457",
+ "sourceVersionId": "551",
+ "version": "7",
+ "sourceKind": "published",
+ "status": "已发布",
+ "publishedAt": "2026-09-17T14:33:41.000Z",
+ "objectCount": 2,
+ "assetKey": "",
+ "presetId": "terrain-1",
+ "type": "outdoor",
+ "name": "005 液压泵应急切换(编排验证)",
+ "environment": {
+ "schema": "edit3dv4.scene-environment",
+ "version": "1.0",
+ "presetId": "terrain-1",
+ "type": "outdoor",
+ "floorOnly": false,
+ "useModelFloor": true
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "deviceId": "front-pump-training-yard",
+ "modelId": "front-pump-field-terrain",
+ "semantic": "环境地形",
+ "assetRole": "environment",
+ "builtinAssetId": "front-pump-field-terrain",
+ "modelEditorAssetId": "",
+ "modelEditorModelId": "",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "partOverrides": {},
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "",
+ "assetKey": "",
+ "resourceUrl": "/models/terrain-005-20260917.glb",
+ "sourceName": "terrain-005-20260917.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ -3.1597256741842212,
+ 10.30528511389146,
+ -40.10715876774236
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1.7159231079037875,
+ 1.7159231079037875,
+ 1.7159231079037875
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "deviceId": "front-pump-rescue-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "semantic": "实训装备",
+ "assetRole": "equipment",
+ "builtinAssetId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "bridge-erector-0916",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "sceneId": "front-pump-hydraulic-pump",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "bridge-0916-node-92",
+ "nodePath": "0/46/0",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-power-take-off",
+ "interactionId": "front-pump-power-take-off",
+ "sourceInteractionId": "front-pump-power-take-off",
+ "editorId": "bridge-0916-node-80",
+ "nodePath": "0/40/0",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-pto-switch",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-ball-valve-switch",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "bridge-0916-node-96",
+ "nodePath": "0/48/0",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box",
+ "interactionId": "front-pump-aux-control-box",
+ "sourceInteractionId": "front-pump-aux-control-box",
+ "editorId": "bridge-0916-node-84",
+ "nodePath": "0/42/0",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box-cover",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "bridge-0916-node-78",
+ "nodePath": "0/39/0",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-rescue-switch",
+ "interactionId": "front-pump-rescue-switch",
+ "sourceInteractionId": "front-pump-rescue-switch",
+ "editorId": "bridge-0916-node-86",
+ "nodePath": "0/43/0",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ],
+ "partOverrides": {
+ "front-pump-hydraulic-pump": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-power-take-off": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-pto-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-ball-valve-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-aux-control-box": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-aux-control-box-cover": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-rescue-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ }
+ },
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "Group",
+ "assetKey": "",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "sourceName": "0916架桥车.glb",
+ "sizeBytes": 37160920,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ 1.5698558846140135e-16,
+ 0.00012730681329620186,
+ 0.13180482636746585
+ ],
+ "rotation": [
+ 3.0865583248298285e-17,
+ -3.96331642134641e-33,
+ -2.568113739801058e-16
+ ],
+ "scale": [
+ 0.9715696607300419,
+ 0.9715696607300419,
+ 0.9715696607300419
+ ]
+ }
+ ],
+ "assetReferences": [
+ {
+ "assetKey": "",
+ "resourceUrl": "/models/terrain-005-20260917.glb",
+ "sourceName": "terrain-005-20260917.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "environment",
+ "builtinAssetId": "front-pump-field-terrain"
+ },
+ {
+ "assetKey": "",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "sourceName": "0916架桥车.glb",
+ "sizeBytes": 37160920,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "equipment",
+ "builtinAssetId": "front-pump-step-vehicle"
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "7",
+ "presetId": "terrain-1",
+ "name": "真实野外训练场",
+ "type": "outdoor",
+ "assetKey": "",
+ "environment": {
+ "schema": "edit3dv4.scene-environment",
+ "version": "1.0",
+ "presetId": "terrain-1",
+ "type": "outdoor",
+ "floorOnly": false,
+ "useModelFloor": true
+ },
+ "rendering": {
+ "schema": "edit3dv4.scene-rendering",
+ "version": "1.0",
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 34,
+ "far": 88
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.05,
+ "far": 800,
+ "position": [
+ 7.138234886169582,
+ 3.695554761077557,
+ 7.955160424286649
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ]
+ },
+ "lights": {
+ "hemisphere": {
+ "skyColor": 15594743,
+ "groundColor": 6910582,
+ "intensity": 1.45
+ },
+ "directional": {
+ "color": 16777215,
+ "intensity": 2,
+ "position": [
+ 12,
+ 18,
+ 10
+ ],
+ "castShadow": true,
+ "shadowMapSize": 2048,
+ "shadowBounds": 82
+ }
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "deviceId": "front-pump-training-yard",
+ "modelId": "front-pump-field-terrain",
+ "semantic": "环境地形",
+ "assetRole": "environment",
+ "builtinAssetId": "front-pump-field-terrain",
+ "modelEditorAssetId": "",
+ "modelEditorModelId": "",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "partOverrides": {},
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "",
+ "assetKey": "",
+ "resourceUrl": "/models/terrain-005-20260917.glb",
+ "sourceName": "terrain-005-20260917.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ -3.1597256741842212,
+ 10.30528511389146,
+ -40.10715876774236
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1.7159231079037875,
+ 1.7159231079037875,
+ 1.7159231079037875
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "deviceId": "front-pump-rescue-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "semantic": "实训装备",
+ "assetRole": "equipment",
+ "builtinAssetId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "bridge-erector-0916",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "sceneId": "front-pump-hydraulic-pump",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "bridge-0916-node-92",
+ "nodePath": "0/46/0",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-power-take-off",
+ "interactionId": "front-pump-power-take-off",
+ "sourceInteractionId": "front-pump-power-take-off",
+ "editorId": "bridge-0916-node-80",
+ "nodePath": "0/40/0",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-pto-switch",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-ball-valve-switch",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "bridge-0916-node-96",
+ "nodePath": "0/48/0",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box",
+ "interactionId": "front-pump-aux-control-box",
+ "sourceInteractionId": "front-pump-aux-control-box",
+ "editorId": "bridge-0916-node-84",
+ "nodePath": "0/42/0",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box-cover",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "bridge-0916-node-78",
+ "nodePath": "0/39/0",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-rescue-switch",
+ "interactionId": "front-pump-rescue-switch",
+ "sourceInteractionId": "front-pump-rescue-switch",
+ "editorId": "bridge-0916-node-86",
+ "nodePath": "0/43/0",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ],
+ "partOverrides": {
+ "front-pump-hydraulic-pump": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-power-take-off": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-pto-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-ball-valve-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-aux-control-box": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-aux-control-box-cover": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-rescue-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ }
+ },
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "Group",
+ "assetKey": "",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "sourceName": "0916架桥车.glb",
+ "sizeBytes": 37160920,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ 1.5698558846140135e-16,
+ 0.00012730681329620186,
+ 0.13180482636746585
+ ],
+ "rotation": [
+ 3.0865583248298285e-17,
+ -3.96331642134641e-33,
+ -2.568113739801058e-16
+ ],
+ "scale": [
+ 0.9715696607300419,
+ 0.9715696607300419,
+ 0.9715696607300419
+ ]
+ }
+ ]
+ }
+ },
+ "baseVisualKey": "diagnostic-bay",
+ "environment": {
+ "type": "outdoor",
+ "mode": "external",
+ "sourceName": "005 液压泵应急切换(编排验证) · 场景发布包",
+ "resourceUrl": "/models/terrain-005-20260917.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "accent": "#e98a2f",
+ "background": 12178915,
+ "fog": 12178915,
+ "ground": 6450803,
+ "camera": {
+ "position": [
+ 9.6,
+ 6.2,
+ 12.3
+ ],
+ "target": [
+ -0.25,
+ 2.45,
+ 0
+ ]
+ },
+ "retainStoredParts": false
+ },
+ "tools": [
+ {
+ "id": "pressure-gauge",
+ "name": "数字压力表",
+ "purpose": "卸压确认与压力复测",
+ "thumbnailKey": "pressure-gauge",
+ "modelKind": "pressure-gauge",
+ "defaultScale": 1
+ },
+ {
+ "id": "leak-detector",
+ "name": "泄漏检测灯",
+ "purpose": "油管与密封外泄检查",
+ "thumbnailKey": "leak-detector",
+ "modelKind": "leak-detector",
+ "defaultScale": 1
+ },
+ {
+ "id": "leakage-tester",
+ "name": "内泄保压仪",
+ "purpose": "压力衰减诊断",
+ "thumbnailKey": "leakage-tester",
+ "modelKind": "leakage-tester",
+ "defaultScale": 1
+ },
+ {
+ "id": "hose-wrench",
+ "name": "油管扳手",
+ "purpose": "接头拆装",
+ "thumbnailKey": "hose-wrench",
+ "modelKind": "hose-wrench",
+ "defaultScale": 1
+ },
+ {
+ "id": "pin-puller",
+ "name": "液压拔销器",
+ "purpose": "销轴同轴分离",
+ "thumbnailKey": "pin-puller",
+ "modelKind": "pin-puller",
+ "defaultScale": 1
+ },
+ {
+ "id": "lifting-sling",
+ "name": "起吊带与平衡梁",
+ "purpose": "液压缸总成吊运",
+ "thumbnailKey": "lifting-sling",
+ "modelKind": "lifting-sling",
+ "defaultScale": 1
+ },
+ {
+ "id": "seal-kit",
+ "name": "密封拆装工具",
+ "purpose": "密封组件更换",
+ "thumbnailKey": "seal-kit",
+ "modelKind": "seal-kit",
+ "defaultScale": 1
+ },
+ {
+ "id": "torque-wrench",
+ "name": "数字扭矩扳手",
+ "purpose": "规范力矩紧固",
+ "thumbnailKey": "torque-wrench",
+ "modelKind": "torque-wrench",
+ "defaultScale": 1
+ },
+ {
+ "id": "checklist-terminal",
+ "name": "数字点检终端",
+ "purpose": "路线签到与清单确认",
+ "thumbnailKey": "checklist-terminal",
+ "modelKind": "checklist-terminal",
+ "defaultScale": 1
+ },
+ {
+ "id": "feeler-gauge",
+ "name": "间隙规",
+ "purpose": "销轴配合间隙测量",
+ "thumbnailKey": "feeler-gauge",
+ "modelKind": "feeler-gauge",
+ "defaultScale": 1
+ },
+ {
+ "id": "lock-tool",
+ "name": "锁止件拆装钳",
+ "purpose": "解除与恢复锁止件",
+ "thumbnailKey": "lock-tool",
+ "modelKind": "lock-tool",
+ "defaultScale": 1
+ },
+ {
+ "id": "alignment-tool",
+ "name": "同轴装配导向器",
+ "purpose": "反向复装校准",
+ "thumbnailKey": "alignment-tool",
+ "modelKind": "alignment-tool",
+ "defaultScale": 1
+ }
+ ],
+ "faults": [],
+ "authoring": {
+ "schema": "unreal-tran.training-authoring/v1",
+ "version": 1,
+ "nodes": [
+ {
+ "id": "flow-start",
+ "type": "start",
+ "title": "训练开始",
+ "x": 32,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-01",
+ "type": "step",
+ "title": "根据故障现象确定是哪一个液压泵发生故障",
+ "stepId": "front-pump-step-01",
+ "x": 240,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-02",
+ "type": "step",
+ "title": "断开架桥车取力器",
+ "stepId": "front-pump-step-02",
+ "x": 500,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-03",
+ "type": "step",
+ "title": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "stepId": "front-pump-step-03",
+ "x": 760,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-04",
+ "type": "step",
+ "title": "重新联通取力器",
+ "stepId": "front-pump-step-04",
+ "x": 240,
+ "y": 270,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-05",
+ "type": "step",
+ "title": "打开辅助控制盒内的“互救”开关",
+ "stepId": "front-pump-step-05",
+ "x": 500,
+ "y": 270,
+ "config": {}
+ },
+ {
+ "id": "flow-end",
+ "type": "end",
+ "title": "训练结束",
+ "x": 760,
+ "y": 270,
+ "config": {}
+ }
+ ],
+ "edges": [
+ {
+ "id": "edge:flow-start:step-node:front-pump-step-01",
+ "from": "flow-start",
+ "to": "step-node:front-pump-step-01",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-01:step-node:front-pump-step-02",
+ "from": "step-node:front-pump-step-01",
+ "to": "step-node:front-pump-step-02",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-02:step-node:front-pump-step-03",
+ "from": "step-node:front-pump-step-02",
+ "to": "step-node:front-pump-step-03",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-03:step-node:front-pump-step-04",
+ "from": "step-node:front-pump-step-03",
+ "to": "step-node:front-pump-step-04",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-04:step-node:front-pump-step-05",
+ "from": "step-node:front-pump-step-04",
+ "to": "step-node:front-pump-step-05",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-05:flow-end",
+ "from": "step-node:front-pump-step-05",
+ "to": "flow-end",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ }
+ ],
+ "timeline": {
+ "currentTime": 0,
+ "tracks": {
+ "front-pump-step-01": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-1-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-02": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-2-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-03": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-3-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-04": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-4-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-05": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-5-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ }
+ }
+ }
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN"
+ },
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥液压泵应急切换",
+ "status": "published",
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/4.jpg",
+ "resources": {
+ "models": [],
+ "animations": []
+ },
+ "legacyBridge": {
+ "schema": "unreal-tran.training-legacy-bridge/v1",
+ "uris": [],
+ "tracks": {
+ "front-pump-step-01": {
+ "audio": ""
+ },
+ "front-pump-step-02": {
+ "audio": ""
+ },
+ "front-pump-step-03": {
+ "audio": ""
+ },
+ "front-pump-step-04": {
+ "audio": ""
+ },
+ "front-pump-step-05": {
+ "audio": ""
+ }
+ }
+ },
+ "teachingScene": {
+ "version": "1.5",
+ "schema": "edit3dv4.scene",
+ "sourceVersionId": "551",
+ "name": "真实野外训练场",
+ "sceneType": "OUTDOOR",
+ "sourceProjectId": "457",
+ "objects": [
+ {
+ "semantic": "环境地形",
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "position": [
+ -3.1597256741842212,
+ 10.30528511389146,
+ -40.10715876774236
+ ],
+ "scale": [
+ 1.7159231079037875,
+ 1.7159231079037875,
+ 1.7159231079037875
+ ],
+ "contentUri": "/models/terrain-005-20260917.glb",
+ "mimeType": "model/gltf-binary",
+ "visible": true,
+ "sourceVersionId": "551",
+ "assetCode": "PILOT-TERRAIN-005",
+ "sourceName": "terrain-005-20260917.glb",
+ "sourceNodeName": "",
+ "name": "野外山地训练场",
+ "id": "scene-object-1",
+ "type": "imported",
+ "splitGroupId": ""
+ },
+ {
+ "semantic": "实训装备",
+ "rotation": [
+ 3.0865583248298285e-17,
+ -3.96331642134641e-33,
+ -2.568113739801058e-16
+ ],
+ "position": [
+ 1.5698558846140135e-16,
+ 0.00012730681329620186,
+ 0.13180482636746585
+ ],
+ "scale": [
+ 0.9715696607300419,
+ 0.9715696607300419,
+ 0.9715696607300419
+ ],
+ "contentUri": "/models/bridge-erector-20260916.glb",
+ "mimeType": "model/gltf-binary",
+ "visible": true,
+ "sourceVersionId": "551",
+ "assetCode": "PILOT-VEHICLE-0916",
+ "sourceName": "0916架桥车.glb",
+ "sourceNodeName": "Group",
+ "name": "架桥车前泵互救操作整车模型",
+ "id": "scene-object-2",
+ "type": "imported",
+ "splitGroupId": ""
+ }
+ ],
+ "templateRevision": 1,
+ "rendering": {
+ "background": 11062241
+ }
+ }
+ },
+ "definitionChecksum": "5d7d01134c9ef3960cc92788b7b69547132e4b7334fbf18b964f6916f596f883",
+ "ownerUserId": "99",
+ "ownerUsername": "root",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "departmentName": "",
+ "status": "DRAFT",
+ "scheduleStartAt": null,
+ "dueAt": null,
+ "publishedAt": null,
+ "withdrawnAt": null,
+ "archivedAt": null,
+ "lifecycleReason": "",
+ "version": 7,
+ "addTime": 1789566632,
+ "updateTime": "2026-09-16T21:50:33",
+ "serverNow": 1789663317,
+ "members": [],
+ "runCount": 0,
+ "pendingReviewCount": 0
+}
\ No newline at end of file
diff --git a/reports/bridge-introduction-20260918/before-task-86.json b/reports/bridge-introduction-20260918/before-task-86.json
new file mode 100644
index 0000000..b0d4453
--- /dev/null
+++ b/reports/bridge-introduction-20260918/before-task-86.json
@@ -0,0 +1,1205 @@
+{
+ "id": "86",
+ "code": "TASK-VIRTUAL-005",
+ "name": "重型支援桥液压泵应急切换",
+ "description": "原稿:桥梁/文件2/4.jpg",
+ "channel": "VIRTUAL",
+ "assignmentKind": "TRAINING",
+ "executionMode": "PRACTICE",
+ "audienceType": "COMMON",
+ "collaborationMode": "INDIVIDUAL",
+ "digitalHumanAllowed": false,
+ "digitalInstructorAgentSlug": "",
+ "digitalInstructorAgentName": "",
+ "digitalInstructorKnowledgeSource": "AGENT",
+ "contentProjectId": "438",
+ "contentVersionId": "533",
+ "definitionSnapshot": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥液压泵应急切换",
+ "status": "published",
+ "trainingMode": "VIRTUAL",
+ "resources": {
+ "models": [
+ {
+ "id": "front-pump-step-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "name": "架桥车前泵互救操作整车模型",
+ "baseModelName": "架桥车前泵互救操作整车模型",
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "revision": 1,
+ "materialPreset": null,
+ "parts": [
+ {
+ "editorId": "",
+ "interactionId": "front-pump-hydraulic-pump",
+ "nodeName": "1液压泵",
+ "sourceNodeName": "1液压泵",
+ "nodePath": "",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-power-take-off",
+ "nodeName": "2取力器",
+ "sourceNodeName": "2取力器",
+ "nodePath": "",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-pto-switch",
+ "nodeName": "2取力器开关",
+ "sourceNodeName": "2取力器开关",
+ "nodePath": "",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-ball-valve-switch",
+ "nodeName": "3球阀开关",
+ "sourceNodeName": "3球阀开关",
+ "nodePath": "",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box",
+ "nodeName": "5辅助控制盒",
+ "sourceNodeName": "5辅助控制盒",
+ "nodePath": "",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "nodeName": "5辅助控制盒盖",
+ "sourceNodeName": "5辅助控制盒盖",
+ "nodePath": "",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-rescue-switch",
+ "nodeName": "5互救开关",
+ "sourceNodeName": "5互救开关",
+ "nodePath": "",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "animations": []
+ },
+ "task": {
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "code": "TR-FRONT-PUMP-RESCUE-001",
+ "title": "架桥车前泵故障互救处置训练(虚拟仿真)",
+ "categoryId": "minor-repair",
+ "difficulty": "标准",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "image": "/models/step-model-front-pump-thumb.png",
+ "equipment": "架桥车",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ]
+ },
+ "scenario": {
+ "id": "front-pump-rescue-scenario",
+ "publishedSceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "publishedSceneVersion": "1.0",
+ "baseVisualKey": "front-pump-rescue",
+ "visualKey": "front-pump-rescue",
+ "environmentName": "架桥车互救操作训练场",
+ "sceneLayout": "架桥车整车操作位",
+ "equipmentState": "前泵故障 · 待执行互救处置",
+ "tools": [],
+ "faults": [],
+ "environment": {
+ "type": "outdoor",
+ "mode": "builtin",
+ "sourceName": "内置架桥车互救操作训练场",
+ "resourceUrl": "",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "sceneResource": {
+ "sceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "version": "1.0",
+ "sourceKind": "published",
+ "status": "已发布",
+ "name": "架桥车前泵故障互救处置训练场景",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "objectCount": 2,
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "1.0",
+ "name": "架桥车前泵故障互救处置训练场景",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "environment": {
+ "presetId": "outdoor-1",
+ "type": "outdoor"
+ },
+ "rendering": {
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 70,
+ "far": 240
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.1,
+ "far": 800,
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ]
+ },
+ "assetReferences": [
+ {
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 32195288,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "training-content"
+ }
+ ]
+ },
+ "accent": "#2d86d8",
+ "background": 11062241,
+ "fog": 11062241,
+ "ground": 7110499,
+ "camera": {
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ },
+ "retainStoredParts": true,
+ "sceneTags": [
+ "真实整车步骤模型",
+ "前泵故障互救",
+ "机构顺序操作"
+ ],
+ "sensorFeeds": []
+ },
+ "tools": [],
+ "faults": [],
+ "steps": [
+ {
+ "id": "front-pump-step-01",
+ "code": "FRONT-PUMP-STEP-01",
+ "stepCode": "front-pump-step-01",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-01",
+ "number": 1,
+ "title": "根据故障现象确定是哪一个液压泵发生故障",
+ "targetId": "front-pump-hydraulic-pump",
+ "targetName": "液压泵",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "guidance": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "warning": "",
+ "destination": "液压泵",
+ "success": "根据故障现象确定是哪一个液压泵发生故障",
+ "cameraPolicy": "exterior",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-hydraulic-pump",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "identify",
+ "axisSpace": "world",
+ "highlightColor": "#e53935",
+ "steps": [
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-hydraulic-pump",
+ "targetNodeName": "1液压泵",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,确定故障液压泵。根据故障现象确定发生故障的液压泵。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_FF17FDE117E94B80BB30DF3E058821FD",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "53",
+ "videoName": "重型支援桥液压泵应急切换 · 1 根据故障现象确定是哪一个液压泵发生故障",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-02",
+ "code": "FRONT-PUMP-STEP-02",
+ "stepCode": "front-pump-step-02",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-02",
+ "number": 2,
+ "title": "断开架桥车取力器",
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "guidance": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "断开架桥车取力器",
+ "cameraPolicy": "exterior",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": -30,
+ "toleranceDegrees": 6,
+ "directionHint": "向断开方向摇动"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "2取力器开关",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,断开架桥车取力器。将架桥车取力器断开。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_6E75DADE9D0649DCA16A2499D1EE8776",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "54",
+ "videoName": "重型支援桥液压泵应急切换 · 2 断开架桥车取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-03",
+ "code": "FRONT-PUMP-STEP-03",
+ "stepCode": "front-pump-step-03",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-03",
+ "number": 3,
+ "title": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "targetId": "front-pump-ball-valve-switch",
+ "targetName": "球阀开关",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "guidance": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "warning": "",
+ "destination": "球阀开关",
+ "success": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-ball-valve-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "steps": [
+ {
+ "targetId": "front-pump-ball-valve-switch",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "由垂直与官道方向旋转至平行于管道方向"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-ball-valve-switch",
+ "targetNodeName": "3球阀开关",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,打开互救球阀。打开备胎上方两个红色滤油器之间的连通球阀,手柄由垂直管道转为平行管道。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_9A4629F90E614E60835441B5D0AAE86C",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "55",
+ "videoName": "重型支援桥液压泵应急切换 · 3 将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-04",
+ "code": "FRONT-PUMP-STEP-04",
+ "stepCode": "front-pump-step-04",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-04",
+ "number": 4,
+ "title": "重新联通取力器",
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "guidance": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "重新联通取力器",
+ "cameraPolicy": "exterior",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "按步骤2的相反方向摇回去"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "2取力器开关",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,重新接通取力器。将架桥车取力器重新接通。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_DA42FE5C995F4C67A559E6E94DB1C440",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "56",
+ "videoName": "重型支援桥液压泵应急切换 · 4 重新联通取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-05",
+ "code": "FRONT-PUMP-STEP-05",
+ "stepCode": "front-pump-step-05",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-05",
+ "number": 5,
+ "title": "打开辅助控制盒内的“互救”开关",
+ "targetId": "front-pump-aux-control-box-cover",
+ "targetName": "辅助控制盒盖",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "guidance": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "warning": "",
+ "destination": "辅助控制盒盖",
+ "success": "打开辅助控制盒内的“互救”开关",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-aux-control-box-cover",
+ "mode": "inspect",
+ "durationMs": 1600,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "sequence",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-aux-control-box"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-aux-control-box-cover",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 100,
+ "toleranceDegrees": 8,
+ "directionHint": "沿控制盒盖边缘铰链打开",
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ }
+ },
+ {
+ "targetId": "front-pump-rescue-switch",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "往上搬"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-aux-control-box-cover",
+ "targetNodeName": "5辅助控制盒盖",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,打开辅助控制盒互救开关。打开辅助控制盒盖,再打开互救开关,进入单泵作业状态。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D85C34259BB34E0C966C5A79569DBF10",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "57",
+ "videoName": "重型支援桥液压泵应急切换 · 5 打开辅助控制盒内的“互救”开关",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ }
+ ],
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "totalScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-pump-switch",
+ "scriptVersion": "2"
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/4.jpg"
+ },
+ "definitionChecksum": "18bc3f2472cbb125354438c2058f05bea45daa71cc352590b214c12894c51b27",
+ "ownerUserId": "99",
+ "ownerUsername": "root",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "departmentName": "",
+ "status": "PUBLISHED",
+ "scheduleStartAt": null,
+ "dueAt": null,
+ "publishedAt": 1789311584,
+ "withdrawnAt": 1789311583,
+ "archivedAt": null,
+ "lifecycleReason": "发布教学任务",
+ "version": 5,
+ "addTime": 1789309630,
+ "updateTime": "2026-09-13T22:27:11",
+ "serverNow": 1789663312,
+ "members": [
+ {
+ "id": "169",
+ "userId": "99",
+ "username": "root",
+ "displayName": "内部维护",
+ "departmentId": "1",
+ "departmentName": "",
+ "memberType": "LEARNER",
+ "roleCode": "LEARNER",
+ "teamCode": "NEUTRAL",
+ "groupCode": "INDIVIDUAL",
+ "positionCode": "LEARNER",
+ "stationCode": "",
+ "sortOrder": 0,
+ "version": 0
+ },
+ {
+ "id": "184",
+ "userId": "66",
+ "username": "baidengdeng",
+ "displayName": "白澄澄",
+ "departmentId": "25",
+ "departmentName": "",
+ "memberType": "LEARNER",
+ "roleCode": "LEARNER",
+ "teamCode": "NEUTRAL",
+ "groupCode": "INDIVIDUAL",
+ "positionCode": "LEARNER",
+ "stationCode": "",
+ "sortOrder": 0,
+ "version": 0
+ }
+ ],
+ "runCount": 2,
+ "pendingReviewCount": 0
+}
\ No newline at end of file
diff --git a/reports/bridge-introduction-20260918/before-task-87.json b/reports/bridge-introduction-20260918/before-task-87.json
new file mode 100644
index 0000000..dfbaab0
--- /dev/null
+++ b/reports/bridge-introduction-20260918/before-task-87.json
@@ -0,0 +1,1485 @@
+{
+ "id": "87",
+ "code": "TASK-VIRTUAL-006",
+ "name": "重型支援桥液压泵应急替代",
+ "description": "原稿:桥梁/文件2/5.jpg、6.jpg",
+ "channel": "VIRTUAL",
+ "assignmentKind": "TRAINING",
+ "executionMode": "PRACTICE",
+ "audienceType": "COMMON",
+ "collaborationMode": "INDIVIDUAL",
+ "digitalHumanAllowed": false,
+ "digitalInstructorAgentSlug": "",
+ "digitalInstructorAgentName": "",
+ "digitalInstructorKnowledgeSource": "AGENT",
+ "contentProjectId": "439",
+ "contentVersionId": "553",
+ "definitionSnapshot": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥液压泵应急替代",
+ "status": "published",
+ "trainingMode": "VIRTUAL",
+ "resources": {
+ "models": [
+ {
+ "id": "front-pump-step-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "name": "架桥车前泵互救操作整车模型",
+ "baseModelName": "架桥车前泵互救操作整车模型",
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "revision": 1,
+ "materialPreset": null,
+ "parts": [
+ {
+ "editorId": "",
+ "interactionId": "front-pump-hydraulic-pump",
+ "nodeName": "1液压泵",
+ "sourceNodeName": "1液压泵",
+ "nodePath": "",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-power-take-off",
+ "nodeName": "2取力器",
+ "sourceNodeName": "2取力器",
+ "nodePath": "",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-pto-switch",
+ "nodeName": "2取力器开关",
+ "sourceNodeName": "2取力器开关",
+ "nodePath": "",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-ball-valve-switch",
+ "nodeName": "3球阀开关",
+ "sourceNodeName": "3球阀开关",
+ "nodePath": "",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box",
+ "nodeName": "5辅助控制盒",
+ "sourceNodeName": "5辅助控制盒",
+ "nodePath": "",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "nodeName": "5辅助控制盒盖",
+ "sourceNodeName": "5辅助控制盒盖",
+ "nodePath": "",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-rescue-switch",
+ "nodeName": "5互救开关",
+ "sourceNodeName": "5互救开关",
+ "nodePath": "",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "animations": []
+ },
+ "task": {
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "code": "TR-FRONT-PUMP-RESCUE-001",
+ "title": "重型支援桥液压泵应急替代",
+ "categoryId": "minor-repair",
+ "difficulty": "标准",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "image": "/models/step-model-front-pump-thumb.png",
+ "equipment": "架桥车",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ]
+ },
+ "scenario": {
+ "id": "front-pump-rescue-scenario",
+ "publishedSceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "publishedSceneVersion": "1.0",
+ "baseVisualKey": "front-pump-rescue",
+ "visualKey": "front-pump-rescue",
+ "environmentName": "重型支援桥液压泵应急替代",
+ "sceneLayout": "架桥车整车操作位",
+ "equipmentState": "按步骤操作对应部件",
+ "tools": [],
+ "faults": [],
+ "environment": {
+ "type": "outdoor",
+ "mode": "builtin",
+ "sourceName": "桥梁脚本三维训练场",
+ "resourceUrl": "",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "sceneResource": {
+ "sceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "version": "1.0",
+ "sourceKind": "published",
+ "status": "已发布",
+ "name": "重型支援桥液压泵应急替代",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "objectCount": 2,
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ }
+ ],
+ "sourceName": "0916架桥车.glb",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "support-vehicle",
+ "sceneId": "support-vehicle",
+ "interactionId": "scene:support-vehicle",
+ "type": "imported",
+ "name": "0916保障车.glb",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "support-vehicle",
+ "modelEditorAssetId": "support-vehicle",
+ "modelEditorModelId": "support-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "0916保障车.glb",
+ "resourceUrl": "/models/bridge-support-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "rescue-hoses",
+ "sceneId": "rescue-hoses",
+ "interactionId": "scene:rescue-hoses",
+ "type": "imported",
+ "name": "双车连接油管.glb",
+ "semantic": "实训装备",
+ "assetRole": "script-accessory",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "rescue-hoses",
+ "modelEditorAssetId": "rescue-hoses",
+ "modelEditorModelId": "rescue-hoses",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "双车连接油管.glb",
+ "resourceUrl": "/models/bridge-rescue-hoses-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "1.0",
+ "name": "重型支援桥液压泵应急替代",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "environment": {
+ "presetId": "outdoor-1",
+ "type": "outdoor"
+ },
+ "rendering": {
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 70,
+ "far": 240
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.1,
+ "far": 800,
+ "position": [
+ 11,
+ 8,
+ 16
+ ],
+ "target": [
+ 0,
+ 1.5,
+ 2
+ ]
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ }
+ ],
+ "sourceName": "0916架桥车.glb",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "support-vehicle",
+ "sceneId": "support-vehicle",
+ "interactionId": "scene:support-vehicle",
+ "type": "imported",
+ "name": "0916保障车.glb",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "support-vehicle",
+ "modelEditorAssetId": "support-vehicle",
+ "modelEditorModelId": "support-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "0916保障车.glb",
+ "resourceUrl": "/models/bridge-support-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "rescue-hoses",
+ "sceneId": "rescue-hoses",
+ "interactionId": "scene:rescue-hoses",
+ "type": "imported",
+ "name": "双车连接油管.glb",
+ "semantic": "实训装备",
+ "assetRole": "script-accessory",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "rescue-hoses",
+ "modelEditorAssetId": "rescue-hoses",
+ "modelEditorModelId": "rescue-hoses",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "双车连接油管.glb",
+ "resourceUrl": "/models/bridge-rescue-hoses-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ }
+ ]
+ },
+ "assetReferences": [
+ {
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 32195288,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "training-content"
+ }
+ ]
+ },
+ "accent": "#2d86d8",
+ "background": 11062241,
+ "fog": 11062241,
+ "ground": 7110499,
+ "camera": {
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ },
+ "retainStoredParts": true,
+ "sceneTags": [
+ "新版整车模型",
+ "原位部件操作"
+ ],
+ "sensorFeeds": [],
+ "name": "重型支援桥液压泵应急替代",
+ "title": "重型支援桥液压泵应急替代",
+ "operableParts": [
+ "bridge-engine",
+ "front-pump-pto-switch",
+ "bridge-hose-a",
+ "bridge-hose-b",
+ "bridge-return-valve",
+ "front-pump-aux-control-box-cover",
+ "front-pump-rescue-switch",
+ "bridge-filter-valve-1",
+ "bridge-filter-valve-2",
+ "bridge-support-pto",
+ "bridge-supply",
+ "bridge-normal-control"
+ ]
+ },
+ "tools": [],
+ "faults": [],
+ "steps": [
+ {
+ "id": "BRIDGE-STEP-1",
+ "stepCode": "BRIDGE-STEP-1",
+ "actionCode": "COMPLETE_BRIDGE-STEP-1",
+ "number": 1,
+ "title": "保持架桥车运行并断开取力器",
+ "targetId": "bridge-engine",
+ "targetName": "保持架桥车发动机运行",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "保持架桥车发动机运转,确保架桥车取力器处于断开状态。",
+ "guidance": "保持架桥车发动机运转,确保架桥车取力器处于断开状态。",
+ "warning": "",
+ "success": "保持架桥车运行并断开取力器:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-engine",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "保持架桥车发动机运行",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 2209160
+ }
+ ]
+ },
+ {
+ "targetId": "front-pump-pto-switch",
+ "kind": "rotate",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": -30,
+ "toleranceDegrees": 8,
+ "directionHint": "断开架桥车取力器"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,保持架桥车运行并断开取力器。保持架桥车发动机运转,确保架桥车取力器处于断开状态。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_5AEA5274E6664D43B8C53F55859D5717",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "58",
+ "videoName": "重型支援桥液压泵应急替代 · 1 保持架桥车运行并断开取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-2",
+ "stepCode": "BRIDGE-STEP-2",
+ "actionCode": "COMPLETE_BRIDGE-STEP-2",
+ "number": 2,
+ "title": "连接两车液压软管",
+ "targetId": "bridge-hose-a",
+ "targetName": "连接架桥车快速接头",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "连接支援车与架桥车液压软管。架桥车快接接头位于液压油箱右侧;支援车快接接头位于驾驶室外右下方。",
+ "guidance": "连接支援车与架桥车液压软管。架桥车快接接头位于液压油箱右侧;支援车快接接头位于驾驶室外右下方。",
+ "warning": "",
+ "success": "连接两车液压软管:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-hose-a",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-hose-a",
+ "kind": "identify",
+ "directionHint": "连接架桥车快速接头",
+ "effects": [
+ {
+ "targetId": "bridge-hose-a",
+ "offset": [
+ 0,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-hose-line",
+ "visible": true
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-hose-b",
+ "kind": "identify",
+ "directionHint": "连接保障车快速接头",
+ "effects": [
+ {
+ "targetId": "bridge-hose-b",
+ "offset": [
+ 0,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-return-line",
+ "visible": true
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,连接两车液压软管。连接支援车与架桥车液压软管。架桥车快接接头位于液压油箱右侧;支援车快接接头位于驾驶室外右下方。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_B9F2CBFE36274528825899153DB98195",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "59",
+ "videoName": "重型支援桥液压泵应急替代 · 2 连接两车液压软管",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-3",
+ "stepCode": "BRIDGE-STEP-3",
+ "actionCode": "COMPLETE_BRIDGE-STEP-3",
+ "number": 3,
+ "title": "打开支援车回油截止阀",
+ "targetId": "bridge-return-valve",
+ "targetName": "打开保障车回油截止阀",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开支援车液压油箱快接接头处的回油截止阀。",
+ "guidance": "打开支援车液压油箱快接接头处的回油截止阀。",
+ "warning": "",
+ "success": "打开支援车回油截止阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-return-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "rotate",
+ "steps": [
+ {
+ "targetId": "bridge-return-valve",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "打开保障车回油截止阀"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,打开支援车回油截止阀。打开支援车液压油箱快接接头处的回油截止阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_983218ACA84345B5B032A5DFA8F08E4E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "60",
+ "videoName": "重型支援桥液压泵应急替代 · 3 打开支援车回油截止阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-4",
+ "stepCode": "BRIDGE-STEP-4",
+ "actionCode": "COMPLETE_BRIDGE-STEP-4",
+ "number": 4,
+ "title": "打开互救作业开关",
+ "targetId": "front-pump-aux-control-box-cover",
+ "targetName": "打开辅助控制盒盖",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开辅助控制盒上的“互救作业”开关。",
+ "guidance": "打开辅助控制盒上的“互救作业”开关。",
+ "warning": "",
+ "success": "打开互救作业开关:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-aux-control-box-cover",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "front-pump-aux-control-box-cover",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "deltaDegrees": 100,
+ "toleranceDegrees": 8,
+ "directionHint": "打开辅助控制盒盖"
+ },
+ {
+ "targetId": "front-pump-rescue-switch",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 8,
+ "directionHint": "打开互救作业开关"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,打开互救作业开关。打开辅助控制盒上的“互救作业”开关。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_AC0F121CD04B44B5A373BE82D5083AE1",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "61",
+ "videoName": "重型支援桥液压泵应急替代 · 4 打开互救作业开关",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-5",
+ "stepCode": "BRIDGE-STEP-5",
+ "actionCode": "COMPLETE_BRIDGE-STEP-5",
+ "number": 5,
+ "title": "打开滤油器出口连通球阀",
+ "targetId": "bridge-filter-valve-1",
+ "targetName": "滤油器出口球阀 1",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开两个输油滤油器出口处的连通球阀。",
+ "guidance": "打开两个输油滤油器出口处的连通球阀。",
+ "warning": "",
+ "success": "打开滤油器出口连通球阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-filter-valve-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-filter-valve-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "打开第 1 个滤油器出口球阀"
+ },
+ {
+ "targetId": "bridge-filter-valve-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "打开第 2 个滤油器出口球阀"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,打开滤油器出口连通球阀。打开两个输油滤油器出口处的连通球阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_774F7400E0B54F4696EBDAD800A289C3",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "62",
+ "videoName": "重型支援桥液压泵应急替代 · 5 打开滤油器出口连通球阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-6",
+ "stepCode": "BRIDGE-STEP-6",
+ "actionCode": "COMPLETE_BRIDGE-STEP-6",
+ "number": 6,
+ "title": "接通支援车液压取力器",
+ "targetId": "bridge-support-pto",
+ "targetName": "接通保障车取力器",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "接通支援车液压系统取力器,向架桥车供油。",
+ "guidance": "接通支援车液压系统取力器,向架桥车供油。",
+ "warning": "",
+ "success": "接通支援车液压取力器:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-support-pto",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-support-pto",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 8,
+ "directionHint": "接通保障车取力器"
+ },
+ {
+ "targetId": "bridge-supply",
+ "kind": "identify",
+ "directionHint": "观察供油示意",
+ "effects": [
+ {
+ "targetId": "bridge-hose-line",
+ "color": 15312947
+ },
+ {
+ "targetId": "bridge-return-line",
+ "color": 3325905
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第6步,接通支援车液压取力器。接通支援车液压系统取力器,向架桥车供油。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_64D9ECF315DA41568D936CFEBF28E403",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "63",
+ "videoName": "重型支援桥液压泵应急替代 · 6 接通支援车液压取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-7",
+ "stepCode": "BRIDGE-STEP-7",
+ "actionCode": "COMPLETE_BRIDGE-STEP-7",
+ "number": 7,
+ "title": "按正常步骤操作架桥车",
+ "targetId": "bridge-normal-control",
+ "targetName": "操作正常作业控制手柄",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "原图只概括“按正常操作步骤操作架桥车”,没有展开后续作业。",
+ "guidance": "原图只概括“按正常操作步骤操作架桥车”,没有展开后续作业。",
+ "warning": "该项为原稿概括项,本预演不代表后续正常作业已经完成。",
+ "success": "按正常步骤操作架桥车:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-normal-control",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-normal-control",
+ "kind": "identify",
+ "directionHint": "操作正常作业控制手柄",
+ "effects": [
+ {
+ "targetId": "bridge-normal-control",
+ "offset": [
+ 0,
+ 0,
+ -0.25
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第7步,按正常步骤操作架桥车。原图只概括“按正常操作步骤操作架桥车”,没有展开后续作业。该项为原稿概括项,本预演不代表后续正常作业已经完成。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_356ADFCC874448D28ADB2DF8067582E8",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "64",
+ "videoName": "重型支援桥液压泵应急替代 · 7 按正常步骤操作架桥车",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ }
+ ],
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "totalScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-pump-substitute",
+ "scriptVersion": "4"
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/5.jpg、6.jpg"
+ },
+ "definitionChecksum": "2cfa4706f247da5aeed4780e32e32fac73f744bd6c6983e397fe36cfa54c4ba0",
+ "ownerUserId": "99",
+ "ownerUsername": "root",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "departmentName": "",
+ "status": "PUBLISHED",
+ "scheduleStartAt": null,
+ "dueAt": null,
+ "publishedAt": 1789657622,
+ "withdrawnAt": 1789657622,
+ "archivedAt": null,
+ "lifecycleReason": "发布教学任务",
+ "version": 11,
+ "addTime": 1789309631,
+ "updateTime": "2026-09-13T22:27:12",
+ "serverNow": 1789663313,
+ "members": [],
+ "runCount": 0,
+ "pendingReviewCount": 0
+}
\ No newline at end of file
diff --git a/reports/bridge-introduction-20260918/before-task-88.json b/reports/bridge-introduction-20260918/before-task-88.json
new file mode 100644
index 0000000..a86400d
--- /dev/null
+++ b/reports/bridge-introduction-20260918/before-task-88.json
@@ -0,0 +1,2029 @@
+{
+ "id": "88",
+ "code": "TASK-VIRTUAL-007",
+ "name": "重型支援桥前泵换件修复",
+ "description": "原稿:桥梁/文件2/7.jpg、8.jpg",
+ "channel": "VIRTUAL",
+ "assignmentKind": "TRAINING",
+ "executionMode": "PRACTICE",
+ "audienceType": "COMMON",
+ "collaborationMode": "INDIVIDUAL",
+ "digitalHumanAllowed": false,
+ "digitalInstructorAgentSlug": "",
+ "digitalInstructorAgentName": "",
+ "digitalInstructorKnowledgeSource": "AGENT",
+ "contentProjectId": "440",
+ "contentVersionId": "554",
+ "definitionSnapshot": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥前泵换件修复",
+ "status": "published",
+ "trainingMode": "VIRTUAL",
+ "resources": {
+ "models": [
+ {
+ "id": "front-pump-step-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "name": "架桥车前泵互救操作整车模型",
+ "baseModelName": "架桥车前泵互救操作整车模型",
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "revision": 1,
+ "materialPreset": null,
+ "parts": [
+ {
+ "editorId": "",
+ "interactionId": "front-pump-hydraulic-pump",
+ "nodeName": "1液压泵",
+ "sourceNodeName": "1液压泵",
+ "nodePath": "",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-power-take-off",
+ "nodeName": "2取力器",
+ "sourceNodeName": "2取力器",
+ "nodePath": "",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-pto-switch",
+ "nodeName": "2取力器开关",
+ "sourceNodeName": "2取力器开关",
+ "nodePath": "",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-ball-valve-switch",
+ "nodeName": "3球阀开关",
+ "sourceNodeName": "3球阀开关",
+ "nodePath": "",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box",
+ "nodeName": "5辅助控制盒",
+ "sourceNodeName": "5辅助控制盒",
+ "nodePath": "",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "nodeName": "5辅助控制盒盖",
+ "sourceNodeName": "5辅助控制盒盖",
+ "nodePath": "",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-rescue-switch",
+ "nodeName": "5互救开关",
+ "sourceNodeName": "5互救开关",
+ "nodePath": "",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "animations": []
+ },
+ "task": {
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "code": "TR-FRONT-PUMP-RESCUE-001",
+ "title": "重型支援桥前泵换件修复",
+ "categoryId": "minor-repair",
+ "difficulty": "标准",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "image": "/models/step-model-front-pump-thumb.png",
+ "equipment": "架桥车",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ]
+ },
+ "scenario": {
+ "id": "front-pump-rescue-scenario",
+ "publishedSceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "publishedSceneVersion": "1.0",
+ "baseVisualKey": "front-pump-rescue",
+ "visualKey": "front-pump-rescue",
+ "environmentName": "重型支援桥前泵换件修复",
+ "sceneLayout": "架桥车整车操作位",
+ "equipmentState": "按步骤操作对应部件",
+ "tools": [],
+ "faults": [],
+ "environment": {
+ "type": "outdoor",
+ "mode": "builtin",
+ "sourceName": "桥梁脚本三维训练场",
+ "resourceUrl": "",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "sceneResource": {
+ "sceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "version": "1.0",
+ "sourceKind": "published",
+ "status": "已发布",
+ "name": "重型支援桥前泵换件修复",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "objectCount": 2,
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ }
+ ],
+ "sourceName": "0916架桥车.glb",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "pump-bags",
+ "sceneId": "pump-bags",
+ "interactionId": "scene:pump-bags",
+ "type": "imported",
+ "name": "3封口袋.glb",
+ "semantic": "实训装备",
+ "assetRole": "script-accessory",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "pump-bags",
+ "modelEditorAssetId": "pump-bags",
+ "modelEditorModelId": "pump-bags",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "3封口袋.glb",
+ "resourceUrl": "/models/bridge-pump-bags-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "gasket-paper",
+ "sceneId": "gasket-paper",
+ "interactionId": "scene:gasket-paper",
+ "type": "imported",
+ "name": "牛皮纸.glb",
+ "semantic": "实训装备",
+ "assetRole": "script-accessory",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "gasket-paper",
+ "modelEditorAssetId": "gasket-paper",
+ "modelEditorModelId": "gasket-paper",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "牛皮纸.glb",
+ "resourceUrl": "/models/bridge-paper-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "1.0",
+ "name": "重型支援桥前泵换件修复",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "environment": {
+ "presetId": "outdoor-1",
+ "type": "outdoor"
+ },
+ "rendering": {
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 70,
+ "far": 240
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.1,
+ "far": 800,
+ "position": [
+ 11,
+ 8,
+ 16
+ ],
+ "target": [
+ 0,
+ 1.5,
+ 2
+ ]
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ }
+ ],
+ "sourceName": "0916架桥车.glb",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "pump-bags",
+ "sceneId": "pump-bags",
+ "interactionId": "scene:pump-bags",
+ "type": "imported",
+ "name": "3封口袋.glb",
+ "semantic": "实训装备",
+ "assetRole": "script-accessory",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "pump-bags",
+ "modelEditorAssetId": "pump-bags",
+ "modelEditorModelId": "pump-bags",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "3封口袋.glb",
+ "resourceUrl": "/models/bridge-pump-bags-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "gasket-paper",
+ "sceneId": "gasket-paper",
+ "interactionId": "scene:gasket-paper",
+ "type": "imported",
+ "name": "牛皮纸.glb",
+ "semantic": "实训装备",
+ "assetRole": "script-accessory",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "gasket-paper",
+ "modelEditorAssetId": "gasket-paper",
+ "modelEditorModelId": "gasket-paper",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "牛皮纸.glb",
+ "resourceUrl": "/models/bridge-paper-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ }
+ ]
+ },
+ "assetReferences": [
+ {
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 32195288,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "training-content"
+ }
+ ]
+ },
+ "accent": "#2d86d8",
+ "background": 11062241,
+ "fog": 11062241,
+ "ground": 7110499,
+ "camera": {
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ },
+ "retainStoredParts": true,
+ "sceneTags": [
+ "新版整车模型",
+ "原位部件操作"
+ ],
+ "sensorFeeds": [],
+ "name": "重型支援桥前泵换件修复",
+ "title": "重型支援桥前泵换件修复",
+ "operableParts": [
+ "bridge-engine",
+ "bridge-paper",
+ "bridge-tank-valve",
+ "bridge-inlet",
+ "bridge-inlet-bag",
+ "bridge-outlet",
+ "bridge-outlet-bag",
+ "bridge-pump-bolt-1",
+ "bridge-pump-bolt-2",
+ "bridge-pump-bolt-3",
+ "bridge-pump-bolt-4",
+ "bridge-old-pump",
+ "bridge-gasket",
+ "bridge-new-pump",
+ "bridge-fill-cap",
+ "bridge-oil-can",
+ "bridge-test-control"
+ ]
+ },
+ "tools": [],
+ "faults": [],
+ "steps": [
+ {
+ "id": "BRIDGE-STEP-1",
+ "stepCode": "BRIDGE-STEP-1",
+ "actionCode": "COMPLETE_BRIDGE-STEP-1",
+ "number": 1,
+ "title": "停机并初裁牛皮纸",
+ "targetId": "bridge-engine",
+ "targetName": "关闭架桥车发动机",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "架桥车熄火;按液压泵与取力器结合面形状初步裁剪牛皮纸。",
+ "guidance": "架桥车熄火;按液压泵与取力器结合面形状初步裁剪牛皮纸。",
+ "warning": "",
+ "success": "停机并初裁牛皮纸:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-engine",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "关闭架桥车发动机",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 13195851
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-paper",
+ "kind": "identify",
+ "directionHint": "按结合面初裁牛皮纸",
+ "effects": [
+ {
+ "targetId": "bridge-paper",
+ "scale": [
+ 0.85,
+ 1,
+ 0.85
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,停机并初裁牛皮纸。架桥车熄火;按液压泵与取力器结合面形状初步裁剪牛皮纸。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_1CE71ECA76194F06B098A012B360BB06",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "65",
+ "videoName": "重型支援桥前泵换件修复 · 1 停机并初裁牛皮纸",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-2",
+ "stepCode": "BRIDGE-STEP-2",
+ "actionCode": "COMPLETE_BRIDGE-STEP-2",
+ "number": 2,
+ "title": "关闭液压油箱出油口一号球阀",
+ "targetId": "bridge-tank-valve",
+ "targetName": "关闭一号出油球阀",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将一号球阀手柄从平行管道转到垂直管道。",
+ "guidance": "将一号球阀手柄从平行管道转到垂直管道。",
+ "warning": "",
+ "success": "关闭液压油箱出油口一号球阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-tank-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "rotate",
+ "steps": [
+ {
+ "targetId": "bridge-tank-valve",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "关闭一号出油球阀"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,关闭液压油箱出油口一号球阀。将一号球阀手柄从平行管道转到垂直管道。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_34129B61FA1F4E628AF295E3EF714364",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "66",
+ "videoName": "重型支援桥前泵换件修复 · 2 关闭液压油箱出油口一号球阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-3",
+ "stepCode": "BRIDGE-STEP-3",
+ "actionCode": "COMPLETE_BRIDGE-STEP-3",
+ "number": 3,
+ "title": "拆开并包扎进出油管",
+ "targetId": "bridge-inlet",
+ "targetName": "拆开进油管",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用大活动扳手拆开液压泵进、出油管接头,用塑料袋包扎管口。",
+ "guidance": "用大活动扳手拆开液压泵进、出油管接头,用塑料袋包扎管口。",
+ "warning": "",
+ "success": "拆开并包扎进出油管:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-inlet",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-inlet",
+ "kind": "identify",
+ "directionHint": "拆开进油管",
+ "effects": [
+ {
+ "targetId": "bridge-inlet",
+ "offset": [
+ -0.6,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-inlet-bag",
+ "kind": "identify",
+ "directionHint": "包扎进油管口",
+ "effects": [
+ {
+ "targetId": "bridge-inlet-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet",
+ "kind": "identify",
+ "directionHint": "拆开出油管",
+ "effects": [
+ {
+ "targetId": "bridge-outlet",
+ "offset": [
+ 0.6,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet-bag",
+ "kind": "identify",
+ "directionHint": "包扎出油管口",
+ "effects": [
+ {
+ "targetId": "bridge-outlet-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,拆开并包扎进出油管。用大活动扳手拆开液压泵进、出油管接头,用塑料袋包扎管口。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_533EAE94D45D49A2BECD7E24E48835E6",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "67",
+ "videoName": "重型支援桥前泵换件修复 · 3 拆开并包扎进出油管",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-4",
+ "stepCode": "BRIDGE-STEP-4",
+ "actionCode": "COMPLETE_BRIDGE-STEP-4",
+ "number": 4,
+ "title": "拆下四个安装螺栓",
+ "targetId": "bridge-pump-bolt-1",
+ "targetName": "拆下第 1 个安装螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用开口扳手拆下液压泵与取力器之间的四个安装螺栓。",
+ "guidance": "用开口扳手拆下液压泵与取力器之间的四个安装螺栓。",
+ "warning": "",
+ "success": "拆下四个安装螺栓:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-pump-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 1 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 2 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 3 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 4 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,拆下四个安装螺栓。用开口扳手拆下液压泵与取力器之间的四个安装螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_787B4C212CF644AE9A3D8D49DEDCB65E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "68",
+ "videoName": "重型支援桥前泵换件修复 · 4 拆下四个安装螺栓",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-5",
+ "stepCode": "BRIDGE-STEP-5",
+ "actionCode": "COMPLETE_BRIDGE-STEP-5",
+ "number": 5,
+ "title": "取下旧前泵",
+ "targetId": "bridge-old-pump",
+ "targetName": "取下旧前泵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "取下原前泵。",
+ "guidance": "取下原前泵。",
+ "warning": "",
+ "success": "取下旧前泵:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-old-pump",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-old-pump",
+ "kind": "identify",
+ "directionHint": "取下旧前泵",
+ "effects": [
+ {
+ "targetId": "bridge-old-pump",
+ "offset": [
+ -2,
+ 0,
+ 0
+ ]
+ },
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "visible": false
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,取下旧前泵。取下原前泵。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_5672FD367E8F41A5A026E3C68E8C8726",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "69",
+ "videoName": "重型支援桥前泵换件修复 · 5 取下旧前泵",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-6",
+ "stepCode": "BRIDGE-STEP-6",
+ "actionCode": "COMPLETE_BRIDGE-STEP-6",
+ "number": 6,
+ "title": "修裁牛皮纸",
+ "targetId": "bridge-paper",
+ "targetName": "按安装面修裁纸垫",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "进一步裁剪牛皮纸,使其与液压泵安装面及取力器结合面吻合。",
+ "guidance": "进一步裁剪牛皮纸,使其与液压泵安装面及取力器结合面吻合。",
+ "warning": "",
+ "success": "修裁牛皮纸:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-paper",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-paper",
+ "kind": "identify",
+ "directionHint": "按安装面修裁纸垫",
+ "effects": [
+ {
+ "targetId": "bridge-gasket",
+ "visible": true
+ },
+ {
+ "targetId": "bridge-paper",
+ "visible": false
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第6步,修裁牛皮纸。进一步裁剪牛皮纸,使其与液压泵安装面及取力器结合面吻合。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_C0E73EC20FD44C608A795A03DE4F7401",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "70",
+ "videoName": "重型支援桥前泵换件修复 · 6 修裁牛皮纸",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-7",
+ "stepCode": "BRIDGE-STEP-7",
+ "actionCode": "COMPLETE_BRIDGE-STEP-7",
+ "number": 7,
+ "title": "放置牛皮纸垫",
+ "targetId": "bridge-gasket",
+ "targetName": "将纸垫放到取力器结合面",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将裁好的牛皮纸放在取力器接口处。",
+ "guidance": "将裁好的牛皮纸放在取力器接口处。",
+ "warning": "",
+ "success": "放置牛皮纸垫:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-gasket",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-gasket",
+ "kind": "identify",
+ "directionHint": "将纸垫放到取力器结合面",
+ "effects": [
+ {
+ "targetId": "bridge-gasket",
+ "offset": [
+ 2.3,
+ 0,
+ -0.4
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第7步,放置牛皮纸垫。将裁好的牛皮纸放在取力器接口处。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_17FAC41643804A22A8B71A2FF8DCBC28",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "71",
+ "videoName": "重型支援桥前泵换件修复 · 7 放置牛皮纸垫",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-8",
+ "stepCode": "BRIDGE-STEP-8",
+ "actionCode": "COMPLETE_BRIDGE-STEP-8",
+ "number": 8,
+ "title": "安装新液压泵",
+ "targetId": "bridge-new-pump",
+ "targetName": "安装新泵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "安装新的液压泵。原稿没有给出拧紧力矩。",
+ "guidance": "安装新的液压泵。原稿没有给出拧紧力矩。",
+ "warning": "",
+ "success": "安装新液压泵:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-new-pump",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-new-pump",
+ "kind": "identify",
+ "directionHint": "安装新泵",
+ "effects": [
+ {
+ "targetId": "bridge-new-pump",
+ "offset": [
+ -2,
+ 0,
+ 0
+ ]
+ },
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "visible": true
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 1 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 2 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 3 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 4 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第8步,安装新液压泵。安装新的液压泵。原稿没有给出拧紧力矩。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_2284ABD91F544E2EB7799E9FA1C4BCF6",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "72",
+ "videoName": "重型支援桥前泵换件修复 · 8 安装新液压泵",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-9",
+ "stepCode": "BRIDGE-STEP-9",
+ "actionCode": "COMPLETE_BRIDGE-STEP-9",
+ "number": 9,
+ "title": "向新泵加注液压油",
+ "targetId": "bridge-fill-cap",
+ "targetName": "打开加油口",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开新液压泵加油口,加注液压油。原稿没有给出定量值。",
+ "guidance": "打开新液压泵加油口,加注液压油。原稿没有给出定量值。",
+ "warning": "",
+ "success": "向新泵加注液压油:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-fill-cap",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-fill-cap",
+ "kind": "identify",
+ "directionHint": "打开加油口",
+ "effects": [
+ {
+ "targetId": "bridge-fill-cap",
+ "offset": [
+ 0,
+ 0.45,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-oil-can",
+ "kind": "identify",
+ "directionHint": "向新泵加注液压油",
+ "effects": [
+ {
+ "targetId": "bridge-oil-can",
+ "offset": [
+ -1.3,
+ 0.6,
+ -0.3
+ ]
+ },
+ {
+ "targetId": "bridge-oil-stream",
+ "visible": true
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第9步,向新泵加注液压油。打开新液压泵加油口,加注液压油。原稿没有给出定量值。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_BF468C49DDCB462E8E2C75CF8C6BD172",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "73",
+ "videoName": "重型支援桥前泵换件修复 · 9 向新泵加注液压油",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-10",
+ "stepCode": "BRIDGE-STEP-10",
+ "actionCode": "COMPLETE_BRIDGE-STEP-10",
+ "number": 10,
+ "title": "恢复进出油管连接",
+ "targetId": "bridge-inlet-bag",
+ "targetName": "取下进油管封口袋",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用大活动扳手连接并拧紧液压泵进、出油管。",
+ "guidance": "用大活动扳手连接并拧紧液压泵进、出油管。",
+ "warning": "",
+ "success": "恢复进出油管连接:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-inlet-bag",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-inlet-bag",
+ "kind": "identify",
+ "directionHint": "取下进油管封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-inlet-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-inlet",
+ "kind": "identify",
+ "directionHint": "连接并拧紧进油管",
+ "effects": [
+ {
+ "targetId": "bridge-inlet",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet-bag",
+ "kind": "identify",
+ "directionHint": "取下出油管封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-outlet-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet",
+ "kind": "identify",
+ "directionHint": "连接并拧紧出油管",
+ "effects": [
+ {
+ "targetId": "bridge-outlet",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第10步,恢复进出油管连接。用大活动扳手连接并拧紧液压泵进、出油管。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_88908FEBE6054EE99087F8653A8C5FAA",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "74",
+ "videoName": "重型支援桥前泵换件修复 · 10 恢复进出油管连接",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-11",
+ "stepCode": "BRIDGE-STEP-11",
+ "actionCode": "COMPLETE_BRIDGE-STEP-11",
+ "number": 11,
+ "title": "启动设备试验",
+ "targetId": "bridge-engine",
+ "targetName": "启动设备试验",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "启动设备进行试验。原稿没有展开具体试验项目和判定数值。",
+ "guidance": "启动设备进行试验。原稿没有展开具体试验项目和判定数值。",
+ "warning": "",
+ "success": "启动设备试验:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-engine",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "启动设备试验",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 2209160
+ },
+ {
+ "targetId": "bridge-oil-stream",
+ "visible": false
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-test-control",
+ "kind": "identify",
+ "directionHint": "操作试验手柄并观察",
+ "effects": [
+ {
+ "targetId": "bridge-test-control",
+ "offset": [
+ 0,
+ 0,
+ -0.25
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第11步,启动设备试验。启动设备进行试验。原稿没有展开具体试验项目和判定数值。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_4D873387CF324AAF9C6D3BE1A72C247E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "75",
+ "videoName": "重型支援桥前泵换件修复 · 11 启动设备试验",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ }
+ ],
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "totalScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-pump-replace",
+ "scriptVersion": "4"
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/7.jpg、8.jpg"
+ },
+ "definitionChecksum": "3712bd18f6549484c58fa63c0130cdfa4168ec31674f863d7b15fad38dc876dc",
+ "ownerUserId": "99",
+ "ownerUsername": "root",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "departmentName": "",
+ "status": "PUBLISHED",
+ "scheduleStartAt": null,
+ "dueAt": null,
+ "publishedAt": 1789395442,
+ "withdrawnAt": 1789395442,
+ "archivedAt": null,
+ "lifecycleReason": "发布教学任务",
+ "version": 9,
+ "addTime": 1789309632,
+ "updateTime": "2026-09-13T22:27:13",
+ "serverNow": 1789663314,
+ "members": [
+ {
+ "id": "183",
+ "userId": "66",
+ "username": "baidengdeng",
+ "displayName": "白澄澄",
+ "departmentId": "25",
+ "departmentName": "",
+ "memberType": "LEARNER",
+ "roleCode": "LEARNER",
+ "teamCode": "NEUTRAL",
+ "groupCode": "INDIVIDUAL",
+ "positionCode": "LEARNER",
+ "stationCode": "",
+ "sortOrder": 0,
+ "version": 0
+ }
+ ],
+ "runCount": 1,
+ "pendingReviewCount": 0
+}
\ No newline at end of file
diff --git a/reports/bridge-introduction-20260918/before-task-89.json b/reports/bridge-introduction-20260918/before-task-89.json
new file mode 100644
index 0000000..c492b63
--- /dev/null
+++ b/reports/bridge-introduction-20260918/before-task-89.json
@@ -0,0 +1,2656 @@
+{
+ "id": "89",
+ "code": "TASK-VIRTUAL-008",
+ "name": "重型支援桥平衡阀拆拼互换",
+ "description": "原稿:桥梁/文件2/9.jpg、10.jpg",
+ "channel": "VIRTUAL",
+ "assignmentKind": "TRAINING",
+ "executionMode": "PRACTICE",
+ "audienceType": "COMMON",
+ "collaborationMode": "INDIVIDUAL",
+ "digitalHumanAllowed": false,
+ "digitalInstructorAgentSlug": "",
+ "digitalInstructorAgentName": "",
+ "digitalInstructorKnowledgeSource": "AGENT",
+ "contentProjectId": "441",
+ "contentVersionId": "555",
+ "definitionSnapshot": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥平衡阀拆拼互换",
+ "status": "published",
+ "trainingMode": "VIRTUAL",
+ "resources": {
+ "models": [
+ {
+ "id": "front-pump-step-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "name": "架桥车前泵互救操作整车模型",
+ "baseModelName": "架桥车前泵互救操作整车模型",
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "revision": 1,
+ "materialPreset": null,
+ "parts": [
+ {
+ "editorId": "",
+ "interactionId": "front-pump-hydraulic-pump",
+ "nodeName": "1液压泵",
+ "sourceNodeName": "1液压泵",
+ "nodePath": "",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-power-take-off",
+ "nodeName": "2取力器",
+ "sourceNodeName": "2取力器",
+ "nodePath": "",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-pto-switch",
+ "nodeName": "2取力器开关",
+ "sourceNodeName": "2取力器开关",
+ "nodePath": "",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-ball-valve-switch",
+ "nodeName": "3球阀开关",
+ "sourceNodeName": "3球阀开关",
+ "nodePath": "",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box",
+ "nodeName": "5辅助控制盒",
+ "sourceNodeName": "5辅助控制盒",
+ "nodePath": "",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "nodeName": "5辅助控制盒盖",
+ "sourceNodeName": "5辅助控制盒盖",
+ "nodePath": "",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-rescue-switch",
+ "nodeName": "5互救开关",
+ "sourceNodeName": "5互救开关",
+ "nodePath": "",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "animations": []
+ },
+ "task": {
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "code": "TR-FRONT-PUMP-RESCUE-001",
+ "title": "重型支援桥平衡阀拆拼互换",
+ "categoryId": "minor-repair",
+ "difficulty": "标准",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "image": "/models/step-model-front-pump-thumb.png",
+ "equipment": "架桥车",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ]
+ },
+ "scenario": {
+ "id": "front-pump-rescue-scenario",
+ "publishedSceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "publishedSceneVersion": "1.0",
+ "baseVisualKey": "front-pump-rescue",
+ "visualKey": "front-pump-rescue",
+ "environmentName": "重型支援桥平衡阀拆拼互换",
+ "sceneLayout": "架桥车整车操作位",
+ "equipmentState": "按步骤操作对应部件",
+ "tools": [],
+ "faults": [],
+ "environment": {
+ "type": "outdoor",
+ "mode": "builtin",
+ "sourceName": "桥梁脚本三维训练场",
+ "resourceUrl": "",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "sceneResource": {
+ "sceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "version": "1.0",
+ "sourceKind": "published",
+ "status": "已发布",
+ "name": "重型支援桥平衡阀拆拼互换",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "objectCount": 2,
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ }
+ ],
+ "sourceName": "0916架桥车.glb",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "valve-bags",
+ "sceneId": "valve-bags",
+ "interactionId": "scene:valve-bags",
+ "type": "imported",
+ "name": "4封口袋.glb",
+ "semantic": "实训装备",
+ "assetRole": "script-accessory",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "valve-bags",
+ "modelEditorAssetId": "valve-bags",
+ "modelEditorModelId": "valve-bags",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "4封口袋.glb",
+ "resourceUrl": "/models/bridge-valve-bags-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "1.0",
+ "name": "重型支援桥平衡阀拆拼互换",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "environment": {
+ "presetId": "outdoor-1",
+ "type": "outdoor"
+ },
+ "rendering": {
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 70,
+ "far": 240
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.1,
+ "far": 800,
+ "position": [
+ 11,
+ 8,
+ 16
+ ],
+ "target": [
+ 0,
+ 1.5,
+ 2
+ ]
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ }
+ ],
+ "sourceName": "0916架桥车.glb",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "valve-bags",
+ "sceneId": "valve-bags",
+ "interactionId": "scene:valve-bags",
+ "type": "imported",
+ "name": "4封口袋.glb",
+ "semantic": "实训装备",
+ "assetRole": "script-accessory",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "valve-bags",
+ "modelEditorAssetId": "valve-bags",
+ "modelEditorModelId": "valve-bags",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "4封口袋.glb",
+ "resourceUrl": "/models/bridge-valve-bags-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ }
+ ]
+ },
+ "assetReferences": [
+ {
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 32195288,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "training-content"
+ }
+ ]
+ },
+ "accent": "#2d86d8",
+ "background": 11062241,
+ "fog": 11062241,
+ "ground": 7110499,
+ "camera": {
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ },
+ "retainStoredParts": true,
+ "sceneTags": [
+ "新版整车模型",
+ "原位部件操作"
+ ],
+ "sensorFeeds": [],
+ "name": "重型支援桥平衡阀拆拼互换",
+ "title": "重型支援桥平衡阀拆拼互换",
+ "operableParts": [
+ "bridge-small-cloth",
+ "bridge-small-pipe",
+ "bridge-small-bag",
+ "bridge-small-bolt-1",
+ "bridge-small-bolt-2",
+ "bridge-small-bolt-3",
+ "bridge-small-bolt-4",
+ "bridge-small-valve",
+ "bridge-small-plug-1",
+ "bridge-small-plug-2",
+ "bridge-small-seat",
+ "bridge-large-cloth",
+ "bridge-large-pipe",
+ "bridge-large-bag",
+ "bridge-large-bolt-1",
+ "bridge-large-bolt-2",
+ "bridge-large-bolt-3",
+ "bridge-large-bolt-4",
+ "bridge-large-valve",
+ "bridge-large-plug-1",
+ "bridge-large-plug-2",
+ "bridge-large-seat"
+ ]
+ },
+ "tools": [],
+ "faults": [],
+ "steps": [
+ {
+ "id": "BRIDGE-STEP-1",
+ "stepCode": "BRIDGE-STEP-1",
+ "actionCode": "COMPLETE_BRIDGE-STEP-1",
+ "number": 1,
+ "title": "清洗小腔平衡阀",
+ "targetId": "bridge-small-cloth",
+ "targetName": "清洗并擦净阀体",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "guidance": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "warning": "",
+ "success": "清洗小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-cloth",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-small-cloth",
+ "kind": "identify",
+ "directionHint": "清洗并擦净阀体",
+ "effects": [
+ {
+ "targetId": "bridge-small-cloth",
+ "offset": [
+ 0.7,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-small-valve",
+ "color": 8492701
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,清洗小腔平衡阀。用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_76F80444AA9C4C3183A0EEDF6E655C25",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "76",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 1 清洗小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-2",
+ "stepCode": "BRIDGE-STEP-2",
+ "actionCode": "COMPLETE_BRIDGE-STEP-2",
+ "number": 2,
+ "title": "拆开小腔控制油口管路",
+ "targetId": "bridge-small-pipe",
+ "targetName": "拆开控制油管",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "guidance": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "warning": "",
+ "success": "拆开小腔控制油口管路:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-pipe",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-pipe",
+ "kind": "identify",
+ "directionHint": "拆开控制油管",
+ "effects": [
+ {
+ "targetId": "bridge-small-pipe",
+ "offset": [
+ 0.55,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bag",
+ "kind": "identify",
+ "directionHint": "封袋包扎管口",
+ "effects": [
+ {
+ "targetId": "bridge-small-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,拆开小腔控制油口管路。用十九号开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_EAF5F0A89D454E6FBAFB061C93D2F760",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "77",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 2 拆开小腔控制油口管路",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-3",
+ "stepCode": "BRIDGE-STEP-3",
+ "actionCode": "COMPLETE_BRIDGE-STEP-3",
+ "number": 3,
+ "title": "拆下小腔平衡阀",
+ "targetId": "bridge-small-bolt-1",
+ "targetName": "拆下第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "guidance": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "warning": "",
+ "success": "拆下小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-valve",
+ "kind": "identify",
+ "directionHint": "取下平衡阀",
+ "effects": [
+ {
+ "targetId": "bridge-small-valve",
+ "offset": [
+ 0,
+ 0,
+ 1.2
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,拆下小腔平衡阀。用八号内六角扳手拆下安装螺栓,取下平衡阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_981034D69E3047C6B9D1DAE9BBF4F7D4",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "78",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 3 拆下小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-4",
+ "stepCode": "BRIDGE-STEP-4",
+ "actionCode": "COMPLETE_BRIDGE-STEP-4",
+ "number": 4,
+ "title": "封堵小腔油口",
+ "targetId": "bridge-small-plug-1",
+ "targetName": "封堵第 1 个油堵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "guidance": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "warning": "",
+ "success": "封堵小腔油口:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-plug-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-plug-1",
+ "kind": "identify",
+ "directionHint": "封堵第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-plug-2",
+ "kind": "identify",
+ "directionHint": "封堵第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-seat",
+ "kind": "identify",
+ "directionHint": "擦净阀座结合面",
+ "effects": [
+ {
+ "targetId": "bridge-small-seat",
+ "color": 12965080
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,封堵小腔油口。用两个油堵封住两个油口,擦净阀座结合面。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_60D40306A9E74E96ADD7641932934BE4",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "79",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 4 封堵小腔油口",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-5",
+ "stepCode": "BRIDGE-STEP-5",
+ "actionCode": "COMPLETE_BRIDGE-STEP-5",
+ "number": 5,
+ "title": "清洗大腔平衡阀",
+ "targetId": "bridge-large-cloth",
+ "targetName": "清洗并擦净阀体",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "guidance": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "warning": "",
+ "success": "清洗大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-cloth",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-large-cloth",
+ "kind": "identify",
+ "directionHint": "清洗并擦净阀体",
+ "effects": [
+ {
+ "targetId": "bridge-large-cloth",
+ "offset": [
+ 0.7,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-large-valve",
+ "color": 8492701
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,清洗大腔平衡阀。用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_A6EFEC7D339E4BA8994C525CA3709E2E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "80",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 5 清洗大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-6",
+ "stepCode": "BRIDGE-STEP-6",
+ "actionCode": "COMPLETE_BRIDGE-STEP-6",
+ "number": 6,
+ "title": "拆开大腔控制油口管路",
+ "targetId": "bridge-large-pipe",
+ "targetName": "拆开控制油管",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "guidance": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "warning": "",
+ "success": "拆开大腔控制油口管路:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-pipe",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-pipe",
+ "kind": "identify",
+ "directionHint": "拆开控制油管",
+ "effects": [
+ {
+ "targetId": "bridge-large-pipe",
+ "offset": [
+ 0.55,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bag",
+ "kind": "identify",
+ "directionHint": "封袋包扎管口",
+ "effects": [
+ {
+ "targetId": "bridge-large-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第6步,拆开大腔控制油口管路。用十九号开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D9E1BAFBD89D48019B9445B2A5752E68",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "81",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 6 拆开大腔控制油口管路",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-7",
+ "stepCode": "BRIDGE-STEP-7",
+ "actionCode": "COMPLETE_BRIDGE-STEP-7",
+ "number": 7,
+ "title": "拆下大腔平衡阀",
+ "targetId": "bridge-large-bolt-1",
+ "targetName": "拆下第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "guidance": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "warning": "",
+ "success": "拆下大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-valve",
+ "kind": "identify",
+ "directionHint": "取下平衡阀",
+ "effects": [
+ {
+ "targetId": "bridge-large-valve",
+ "offset": [
+ 0,
+ 0,
+ 1.2
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第7步,拆下大腔平衡阀。用八号内六角扳手拆下安装螺栓,取下平衡阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_E83DDAB19F774A418C82EBA7E8EDCF8A",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "82",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 7 拆下大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-8",
+ "stepCode": "BRIDGE-STEP-8",
+ "actionCode": "COMPLETE_BRIDGE-STEP-8",
+ "number": 8,
+ "title": "封堵大腔油口",
+ "targetId": "bridge-large-plug-1",
+ "targetName": "封堵第 1 个油堵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "guidance": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "warning": "",
+ "success": "封堵大腔油口:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-plug-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-plug-1",
+ "kind": "identify",
+ "directionHint": "封堵第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-plug-2",
+ "kind": "identify",
+ "directionHint": "封堵第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-seat",
+ "kind": "identify",
+ "directionHint": "擦净阀座结合面",
+ "effects": [
+ {
+ "targetId": "bridge-large-seat",
+ "color": 12965080
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第8步,封堵大腔油口。用两个油堵封住两个油口,擦净阀座结合面。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_4FE31068F3EB410BAC72E19F1D1BAF49",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "83",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 8 封堵大腔油口",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-9",
+ "stepCode": "BRIDGE-STEP-9",
+ "actionCode": "COMPLETE_BRIDGE-STEP-9",
+ "number": 9,
+ "title": "准备安装大腔平衡阀",
+ "targetId": "bridge-large-seat",
+ "targetName": "擦净安装结合面",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "guidance": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "warning": "",
+ "success": "准备安装大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-seat",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-seat",
+ "kind": "identify",
+ "directionHint": "擦净安装结合面",
+ "effects": [
+ {
+ "targetId": "bridge-large-seat",
+ "color": 14477797
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-plug-1",
+ "kind": "identify",
+ "directionHint": "取下第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-1",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-plug-2",
+ "kind": "identify",
+ "directionHint": "取下第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-2",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第9步,准备安装大腔平衡阀。擦净平衡阀及阀座结合面,取下两个油堵。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D0A3CAC5278C4A57AC9BEF13DA2690BC",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "84",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 9 准备安装大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-10",
+ "stepCode": "BRIDGE-STEP-10",
+ "actionCode": "COMPLETE_BRIDGE-STEP-10",
+ "number": 10,
+ "title": "安装大腔平衡阀",
+ "targetId": "bridge-small-valve",
+ "targetName": "将互换平衡阀装到阀座",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "guidance": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "warning": "",
+ "success": "安装大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-valve",
+ "kind": "identify",
+ "directionHint": "将互换平衡阀装到阀座",
+ "effects": [
+ {
+ "targetId": "bridge-small-valve",
+ "offset": [
+ 3.2,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第10步,安装大腔平衡阀。将平衡阀放置于阀座上,用八号内六角扳手安装四个安装螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_0F40DAF3E28F4FA088EA943D9470CAA7",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "85",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 10 安装大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-11",
+ "stepCode": "BRIDGE-STEP-11",
+ "actionCode": "COMPLETE_BRIDGE-STEP-11",
+ "number": 11,
+ "title": "核对大腔控制油口管路连接",
+ "targetId": "bridge-large-bag",
+ "targetName": "取下封口袋",
+ "mode": "measure",
+ "interaction": "mechanism-operation",
+ "instruction": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "guidance": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "warning": "请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "success": "核对大腔控制油口管路连接:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-bag",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-bag",
+ "kind": "identify",
+ "directionHint": "取下封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-large-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-pipe",
+ "kind": "identify",
+ "directionHint": "按记录的处理依据连接管路",
+ "effects": [
+ {
+ "targetId": "bridge-large-pipe",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第11步,核对大腔控制油口管路连接。原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用十九号开口扳手拆开管路并包扎”的相反描述。请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_F6427532AF5F40348CEB154F031F2AED",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "86",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 11 核对大腔控制油口管路连接",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-12",
+ "stepCode": "BRIDGE-STEP-12",
+ "actionCode": "COMPLETE_BRIDGE-STEP-12",
+ "number": 12,
+ "title": "紧固大腔阀体连接螺栓",
+ "targetId": "bridge-large-bolt-1",
+ "targetName": "紧固第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "guidance": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "warning": "",
+ "success": "紧固大腔阀体连接螺栓:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第12步,紧固大腔阀体连接螺栓。用内六角扳手拧紧四个阀体连接螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_F601DB08C8D44934AD3A1B1582E804DB",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "87",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 12 紧固大腔阀体连接螺栓",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-13",
+ "stepCode": "BRIDGE-STEP-13",
+ "actionCode": "COMPLETE_BRIDGE-STEP-13",
+ "number": 13,
+ "title": "准备安装小腔平衡阀",
+ "targetId": "bridge-small-seat",
+ "targetName": "擦净安装结合面",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "guidance": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "warning": "",
+ "success": "准备安装小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-seat",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-seat",
+ "kind": "identify",
+ "directionHint": "擦净安装结合面",
+ "effects": [
+ {
+ "targetId": "bridge-small-seat",
+ "color": 14477797
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-plug-1",
+ "kind": "identify",
+ "directionHint": "取下第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-1",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-plug-2",
+ "kind": "identify",
+ "directionHint": "取下第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-2",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第13步,准备安装小腔平衡阀。擦净平衡阀及阀座结合面,取下两个油堵。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_B1BBA42CE5F346228B6B39A51F190CB3",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "88",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 13 准备安装小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-14",
+ "stepCode": "BRIDGE-STEP-14",
+ "actionCode": "COMPLETE_BRIDGE-STEP-14",
+ "number": 14,
+ "title": "安装小腔平衡阀",
+ "targetId": "bridge-large-valve",
+ "targetName": "将互换平衡阀装到阀座",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "guidance": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "warning": "",
+ "success": "安装小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-valve",
+ "kind": "identify",
+ "directionHint": "将互换平衡阀装到阀座",
+ "effects": [
+ {
+ "targetId": "bridge-large-valve",
+ "offset": [
+ -3.2,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第14步,安装小腔平衡阀。将平衡阀放置于阀座上,用八号内六角扳手安装四个安装螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_2BCD762C693242FF8DA420BD9A5D4DF9",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "89",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 14 安装小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-15",
+ "stepCode": "BRIDGE-STEP-15",
+ "actionCode": "COMPLETE_BRIDGE-STEP-15",
+ "number": 15,
+ "title": "核对小腔控制油口管路连接",
+ "targetId": "bridge-small-bag",
+ "targetName": "取下封口袋",
+ "mode": "measure",
+ "interaction": "mechanism-operation",
+ "instruction": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "guidance": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "warning": "请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "success": "核对小腔控制油口管路连接:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-bag",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-bag",
+ "kind": "identify",
+ "directionHint": "取下封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-small-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-pipe",
+ "kind": "identify",
+ "directionHint": "按记录的处理依据连接管路",
+ "effects": [
+ {
+ "targetId": "bridge-small-pipe",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第15步,核对小腔控制油口管路连接。原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用十九号开口扳手拆开管路并包扎”的相反描述。请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_5F8309BF74344C568C2C9EEFDD9E74BF",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "90",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 15 核对小腔控制油口管路连接",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-16",
+ "stepCode": "BRIDGE-STEP-16",
+ "actionCode": "COMPLETE_BRIDGE-STEP-16",
+ "number": 16,
+ "title": "紧固小腔阀体连接螺栓",
+ "targetId": "bridge-small-bolt-1",
+ "targetName": "紧固第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "guidance": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "warning": "",
+ "success": "紧固小腔阀体连接螺栓:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第16步,紧固小腔阀体连接螺栓。用内六角扳手拧紧四个阀体连接螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D525E35EDA12402DA13302C2B3874CC3",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "91",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 16 紧固小腔阀体连接螺栓",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ }
+ ],
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "totalScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-balance-valve-swap",
+ "scriptVersion": "4"
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/9.jpg、10.jpg"
+ },
+ "definitionChecksum": "158efed0434aff8b52fd8c25c4196c2cf112ed4829c0ee4e0a6989d6612d6705",
+ "ownerUserId": "99",
+ "ownerUsername": "root",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "departmentName": "",
+ "status": "PUBLISHED",
+ "scheduleStartAt": null,
+ "dueAt": null,
+ "publishedAt": 1789316083,
+ "withdrawnAt": 1789316082,
+ "archivedAt": null,
+ "lifecycleReason": "发布教学任务",
+ "version": 9,
+ "addTime": 1789309633,
+ "updateTime": "2026-09-13T22:27:14",
+ "serverNow": 1789663316,
+ "members": [],
+ "runCount": 0,
+ "pendingReviewCount": 0
+}
\ No newline at end of file
diff --git a/reports/bridge-introduction-20260918/error.json b/reports/bridge-introduction-20260918/error.json
new file mode 100644
index 0000000..f3965a0
--- /dev/null
+++ b/reports/bridge-introduction-20260918/error.json
@@ -0,0 +1,5 @@
+{
+ "error": "Error: expect(locator).toBeVisible() failed\n\nLocator: locator('.training-introduction')\nExpected: visible\nReceived: \nTimeout: 120000ms\n\nCall log:\n\u001b[2m - Expect \"to.be.visible\" with timeout 120000ms\u001b[22m\n\u001b[2m - waiting for locator('.training-introduction')\u001b[22m\n\n at Proxy. (E:\\work\\edit_3d\\unreal_tran\\ute2e\\node_modules\\.pnpm\\playwright@1.55.0\\node_modules\\playwright\\lib\\matchers\\expect.js:221:24)\n at file:///E:/work/edit_3d/unreal_tran/ute2e/tools/bridge-introduction-live.mjs:17:25",
+ "errors": [],
+ "body": "装备数字车间\n工作总览\n内容制作\n虚实训练\n资源智能\n系统管理\n内部维护\n内部维护 · 装备数字车间\n应用导航\n虚实训练\n7\n虚拟仿真\n实装实训\n对抗训练\n作业指导书\n沉浸交互\n考试测评\n数据中心\n工作总览\n虚拟仿真预览\n虚拟仿真预览\n虚拟仿真预览\n重新加载"
+}
\ No newline at end of file
diff --git a/reports/bridge-introduction-20260918/failure.png b/reports/bridge-introduction-20260918/failure.png
new file mode 100644
index 0000000..12fa1c0
Binary files /dev/null and b/reports/bridge-introduction-20260918/failure.png differ
diff --git a/reports/bridge-introduction-20260918/health.json b/reports/bridge-introduction-20260918/health.json
new file mode 100644
index 0000000..8ac69bb
--- /dev/null
+++ b/reports/bridge-introduction-20260918/health.json
@@ -0,0 +1,23 @@
+[
+ {
+ "url": "http://127.0.0.1:6100/actuator/health",
+ "status": 200
+ },
+ {
+ "url": "http://127.0.0.1:6180/",
+ "status": 200
+ },
+ {
+ "url": "http://192.168.31.168:6180/",
+ "status": 200
+ },
+ {
+ "endpoint": "/api/auth/ping",
+ "status": 200
+ },
+ {
+ "endpoint": "/api/tran/ping",
+ "status": 200,
+ "service": "ut-tran"
+ }
+]
\ No newline at end of file
diff --git a/reports/bridge-introduction-20260918/index.html b/reports/bridge-introduction-20260918/index.html
new file mode 100644
index 0000000..2ab83d9
--- /dev/null
+++ b/reports/bridge-introduction-20260918/index.html
@@ -0,0 +1 @@
+背景与前置讲解 · 验收记录背景 → 讲解1…N → 操作步骤
2026-09-18 · 本地环境 6180 / Gateway 6100 · 内部维护账号验收
通过:四个现有任务、005新模型入口、视频切换、编排保存、媒体上传与发布、005完整操作回归。
背景及每段讲解支持下一步、上一步、跳过讲解;跳过后仍从当前未完成操作继续。操作编号、动作、评分、已有记录不变。讲解期间不会播放隐藏的步骤数字教员,切页停止视频。
内容依据与范围
005、006讲解取自图片转录MD;007、008原稿缺少独立讲解,未补写。008背景页为原稿四组操作归纳的项目概览。配图使用各场景封面;原稿要求的液压原理图和专用讲解视频尚无素材,可在编排中上传替换。
编排入口:内容制作 → 训练编排 → 编辑 → 背景与前置讲解。应用后保存草稿、发布。已发布教学任务固定版本不会因编辑草稿自动改变。
图片原文:脚本Markdown索引;接口及维护:背景与前置讲解。
实际验证
- Java17 mvn test:通过;新增讲解契约4项及含权限/学员投影的策略测试39项通过。
- pnpm run build:通过;既有大包体积提示仍在。
- 前置讲解3项、讲解保存9项及正式路由契约测试通过。
- 1366×768 浏览器:4个任务和005验证入口顺序浏览、背景/讲解跳过、回看、无误推进及无JS异常。
- 005验证入口真实三维五步六动作通过,开盖后补保存操作准备不会重置盖子。
- 上传图片和视频到临时工程,保存、发布、重新打开均通过;临时工程459、460已软删除,没有创建教学测试任务。005编排验证工程保留一份相同讲解配置的保存草稿,任务继续使用560版本。
- 本机及局域网页面、Gateway健康、Auth/Tran ping均200。
证据:页面测试 · 操作回归 · 媒体上传 · 版本更新 · 服务健康
005 · 项目背景
005 · 原理讲解
006 · 项目背景
007 · 项目背景
008 · 项目概览
受控视频播放验证(隔离响应配置)
训练编排 · 背景与前置讲解
真实上传、发布及重新打开验证
\ No newline at end of file
diff --git a/reports/bridge-introduction-20260918/introduction-seeds.json b/reports/bridge-introduction-20260918/introduction-seeds.json
new file mode 100644
index 0000000..a03e137
--- /dev/null
+++ b/reports/bridge-introduction-20260918/introduction-seeds.json
@@ -0,0 +1,157 @@
+[
+ {
+ "code": "TASK-VIRTUAL-005",
+ "intro": {
+ "version": 1,
+ "background": {
+ "id": "background",
+ "title": "项目背景 · 液压泵应急切换",
+ "body": "重型支援桥在将移动架推出至中间位置时,突遇山体滑坡,巨石滚落,飞入底盘车两副车架内,产生巨大撞击声,操作手随即停车检查,发现前泵被飞入巨石击中,导致泵体变形。而后桥梁分队分队长指挥操作手试车检查,驾驶员在接通取力器后,操作手按照规定程序试车,此时托架和架设架所有执行机构不动作,随即向分队长报告。而后分队长指挥操作手对装备进行动作检查,操作手在托架和架设架均不动作的状态下,手动将托架马达换向联手柄搬至“向前”位置,同时,分队长观察前泵出口处(托架多路换向阀M口)压力表,此时压力表显示0MPa。由此分队长判断前泵损坏。",
+ "format": "image-text",
+ "imageUrl": "/models/bridge-training/bridge-pump-switch-v2.jpg",
+ "videoUrl": "",
+ "imageAssetCode": "",
+ "videoAssetCode": "",
+ "source": "TASK-VIRTUAL-005 图片原文",
+ "enabled": true
+ },
+ "lectures": [
+ {
+ "id": "TASK-VIRTUAL-005-L1",
+ "title": "液压泵作用与应急切换引入",
+ "body": "重型支援桥作为应急保障力量的重要组成部分,在抢险救灾中起到了关键作用。在架设与撤收中,液压系统作为装备的动力系统,特别是液压系统的心脏——液压泵,这一关键部件的可靠性直接关系到能否完成桥梁架设撤收作业,面对复杂的战场环境,一旦液压系统出现故障,就会导致桥梁架设撤收作业被迫中断,甚至引发危险状态。\n\n那在战时,如果液压泵损坏,该怎样快速完成架桥任务呢?\n\n通过对液压系统分析可知,重型支援桥液压系统采取了“双泵独立供油”的设计理念,因此,如果其中一个液压泵出现损伤,可以采取应急切换的方法,快速完成装备抢修。",
+ "format": "image-text",
+ "imageUrl": "/models/bridge-training/bridge-pump-switch-v2.jpg",
+ "videoUrl": "",
+ "imageAssetCode": "",
+ "videoAssetCode": "",
+ "source": "TASK-VIRTUAL-005 图片解说词"
+ },
+ {
+ "id": "TASK-VIRTUAL-005-L2",
+ "title": "应急切换是什么",
+ "body": "那什么是应急切换呢?\n\n在装备战场抢救抢修中,切换是一种应急修理方式,其是指通过回路转换或改接,脱开损伤部分,接通备用部分,或者将原来担负非基本功能的完好部分改换到基本功能回路中。\n\n针对重型支援桥,应急切换是指在单个液压泵或取力器出现故障时,通过切换到另一个液压泵继续完成架设或撤收作业的方法。",
+ "format": "image-text",
+ "imageUrl": "/models/bridge-training/bridge-pump-switch-v2.jpg",
+ "videoUrl": "",
+ "imageAssetCode": "",
+ "videoAssetCode": "",
+ "source": "TASK-VIRTUAL-005 图片解说词"
+ },
+ {
+ "id": "TASK-VIRTUAL-005-L3",
+ "title": "双泵供油回路",
+ "body": "重型支援桥是如何实现应急切换的?\n\n我们从原理上来寻找答案,根据液压系统原理,重型支援桥设置有2个供油回路,一个是前泵供油回路,由前泵提供动力,主要负责为托架液压系统和架设架液压系统提供动力,主要由液压油箱、前泵、前泵出油滤油器、托架多路换向阀连接块内的三通流量调节阀、回油滤油器等构成完整的液压回路;另一个是后泵供油回路,由后泵提供动力,主要负责为支腿液压系统和吊机液压系统提供动力,主要由液压油箱、后泵、后泵出油滤油器、支腿多路换向阀连接块内的三通流量调节阀、回油滤油器等构成完整的液压回路。",
+ "format": "image-text",
+ "imageUrl": "/models/bridge-training/bridge-pump-switch-v2.jpg",
+ "videoUrl": "",
+ "imageAssetCode": "",
+ "videoAssetCode": "",
+ "source": "TASK-VIRTUAL-005 图片解说词"
+ },
+ {
+ "id": "TASK-VIRTUAL-005-L4",
+ "title": "打开球阀后的回油问题",
+ "body": "此时,我们应该注意到在两个出油滤油器的出口处设置一球阀,在正常情况下,该球阀处于关闭状态。\n\n那如果将该球阀打开,会出现什么样的情况呢?\n\n此处以托架马达向前为例说明,当操作手操作托架马达向前时,来自负载侧的压力会将托架多路换向阀连接块内的三通流量调节阀关闭,此时来自前泵的液压油无法通过托架多路换向阀连接块内的三通流量调节阀返回液压油箱,应通过托架多路换向阀内部通道进入托架马达换向联,而后进入液压马达,推动液压马达旋转。\n\n但此时液压马达侧负载压力较大,液压油便不会进入液压马达,而是经打开的球阀,进入支腿多路换向阀连接块内,通过支腿多路换向阀内的三通流量调节阀返回液压油箱。\n\n操作托架液压系统和架设架液压系统的任一执行机构时,均会出现上述现象。同理可分析,操作支腿液压系统和吊机液压系统的任一执行机构时,也会出现上述现象。\n\n那在前泵损坏的情况下,可否利用液压系统这一设计理念,完成重型支援桥的架设和撤收作业呢?\n\n通过上述分析,操作重型支援桥任一执行机构时,负载侧压力总会关闭相应的多路换向阀连接块内的三通流量调节阀,使得来自液压泵的液压油从另一多路换向阀连接块内的三通流量调节阀返回液压油箱,因此,如果提前关闭两个多路换向阀连接块内的三通流量调节阀,则无论来自哪个液压泵的液压油均不会返回液压油箱,那通过哪个元件关闭三通流量调节阀呢?",
+ "format": "image-text",
+ "imageUrl": "/models/bridge-training/bridge-pump-switch-v2.jpg",
+ "videoUrl": "",
+ "imageAssetCode": "",
+ "videoAssetCode": "",
+ "source": "TASK-VIRTUAL-005 图片解说词"
+ },
+ {
+ "id": "TASK-VIRTUAL-005-L5",
+ "title": "自救阀与切换原理",
+ "body": "此时我们应注意到,托架多路换向阀和支腿多路换向阀的M口各串联一自救阀,如果将该自救阀打开,则在接通取力器时,来自液压泵的液压油便将三通流量调节阀关闭。\n\n因此,在实施切换时,还需打开自救阀。",
+ "format": "image-text",
+ "imageUrl": "/models/bridge-training/bridge-pump-switch-v2.jpg",
+ "videoUrl": "",
+ "imageAssetCode": "",
+ "videoAssetCode": "",
+ "source": "TASK-VIRTUAL-005 图片解说词"
+ }
+ ]
+ }
+ },
+ {
+ "code": "TASK-VIRTUAL-006",
+ "intro": {
+ "version": 1,
+ "background": {
+ "id": "background",
+ "title": "项目背景 · 液压泵应急替代",
+ "body": "重型支援桥在将移动架推出至中间位置时,突遇山体滑坡,巨石滚落,飞入底盘车两副车架内,产生巨大撞击声,操作手随即停车检查,发现前泵被飞入巨石击中,导致泵体变形。而后桥梁分队分队长指挥操作手试车检查,驾驶员在接通取力器后,操作手按照规定程序试车,此时托架和架设架所有执行机构不动作,随即向分队长报告。而后分队长指挥操作手对装备进行动作检查,操作手在托架和架设架均不动作的状态下,手动将托架马达换向联手柄搬至“向前”位置,同时,分队长观察前泵出口处(托架多路换向阀M口)压力表,此时压力表显示0MPa。由此分队长判断前泵损坏。",
+ "format": "image-text",
+ "imageUrl": "/models/bridge-training/bridge-pump-substitute-v4.jpg",
+ "videoUrl": "",
+ "imageAssetCode": "",
+ "videoAssetCode": "",
+ "source": "TASK-VIRTUAL-006 图片原文",
+ "enabled": true
+ },
+ "lectures": [
+ {
+ "id": "TASK-VIRTUAL-006-L1",
+ "title": "替代是什么",
+ "body": "替代是指使用性能相似或相近的单元或原材料、油液、仪表等暂时替换损伤或缺少的资源,以恢复工程装备的基本功能或能自救。",
+ "format": "image-text",
+ "imageUrl": "/models/bridge-training/bridge-pump-substitute-v4.jpg",
+ "videoUrl": "",
+ "imageAssetCode": "",
+ "videoAssetCode": "",
+ "source": "TASK-VIRTUAL-006 图片解说词"
+ },
+ {
+ "id": "TASK-VIRTUAL-006-L2",
+ "title": "双车互救是什么",
+ "body": "互救是指在架桥车液压系统完全失效时,通过连接保障车的液压系统,利用保障车的液压泵为架桥车提供动力,完成桥梁的架设和撤收作业。",
+ "format": "image-text",
+ "imageUrl": "/models/bridge-training/bridge-pump-substitute-v4.jpg",
+ "videoUrl": "",
+ "imageAssetCode": "",
+ "videoAssetCode": "",
+ "source": "TASK-VIRTUAL-006 图片解说词"
+ }
+ ]
+ }
+ },
+ {
+ "code": "TASK-VIRTUAL-007",
+ "intro": {
+ "version": 1,
+ "background": {
+ "id": "background",
+ "title": "项目背景 · 前泵换件修复",
+ "body": "重型支援桥在将移动架推出至中间位置时,突遇山体滑坡,巨石滚落,飞入底盘车两副车架内,产生巨大撞击声,操作手随即停车检查,发现前泵被飞入巨石击中,导致泵体变形。而后分队长指挥操作手对装备进行动作检查,操作手在托架和架设架均不动作的状态下,手动将托架马达换向联手柄搬至“向前”位置,同时,分队长观察前泵出口处(托架多路换向阀M口)压力表,此时压力表显示0MPa。由此分队长判断前泵损坏。",
+ "format": "image-text",
+ "imageUrl": "/models/bridge-training/bridge-pump-replace-v4.jpg",
+ "videoUrl": "",
+ "imageAssetCode": "",
+ "videoAssetCode": "",
+ "source": "TASK-VIRTUAL-007 图片原文",
+ "enabled": true
+ },
+ "lectures": []
+ }
+ },
+ {
+ "code": "TASK-VIRTUAL-008",
+ "intro": {
+ "version": 1,
+ "background": {
+ "id": "background",
+ "title": "项目背景 · 平衡阀拆拼互换",
+ "body": "本项目训练重型支援桥平衡阀的拆拼互换。\n\n按脚本依次完成四组操作:\n1. 拆卸小腔油口连接平衡阀。\n2. 拆卸大腔油口连接平衡阀。\n3. 将拆下的平衡阀互换安装到大腔油口。\n4. 将另一平衡阀安装到小腔油口。\n\n操作阶段包含清洗、拆卸、油口封堵和安装等步骤。",
+ "format": "image-text",
+ "imageUrl": "/models/bridge-training/bridge-balance-valve-swap-v4.jpg",
+ "videoUrl": "",
+ "imageAssetCode": "",
+ "videoAssetCode": "",
+ "source": "由9.jpg、10.jpg四组操作归纳的项目概览;原稿未提供故障背景",
+ "enabled": true
+ },
+ "lectures": []
+ }
+ }
+]
\ No newline at end of file
diff --git a/reports/bridge-introduction-20260918/migration.json b/reports/bridge-introduction-20260918/migration.json
new file mode 100644
index 0000000..62cc8c3
--- /dev/null
+++ b/reports/bridge-introduction-20260918/migration.json
@@ -0,0 +1,56 @@
+{
+ "pass": true,
+ "records": [
+ {
+ "id": 86,
+ "code": "TASK-VIRTUAL-005",
+ "projectId": "438",
+ "contentVersionId": "556",
+ "background": true,
+ "lectures": 5,
+ "steps": 5
+ },
+ {
+ "id": 87,
+ "code": "TASK-VIRTUAL-006",
+ "projectId": "439",
+ "contentVersionId": "557",
+ "background": true,
+ "lectures": 2,
+ "steps": 7
+ },
+ {
+ "id": 88,
+ "code": "TASK-VIRTUAL-007",
+ "projectId": "440",
+ "contentVersionId": "558",
+ "background": true,
+ "lectures": 0,
+ "steps": 11
+ },
+ {
+ "id": 89,
+ "code": "TASK-VIRTUAL-008",
+ "projectId": "441",
+ "contentVersionId": "559",
+ "background": true,
+ "lectures": 0,
+ "steps": 16
+ },
+ {
+ "id": 116,
+ "code": "BRIDGE-005-AUTHORING-PILOT",
+ "projectId": "458",
+ "contentVersionId": "560",
+ "background": true,
+ "lectures": 5,
+ "steps": 5
+ }
+ ],
+ "notes": [
+ "005省略原稿不清晰型号;修正两处明显病句。",
+ "007背景略去原文有无不字冲突的一句,不扩写故障判断。",
+ "008项目概览由四组操作归纳,不补造故障背景。",
+ "007、008未添加原稿缺失的独立讲解。"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-introduction-20260918/operation-regression.json b/reports/bridge-introduction-20260918/operation-regression.json
new file mode 100644
index 0000000..cf21ac9
--- /dev/null
+++ b/reports/bridge-introduction-20260918/operation-regression.json
@@ -0,0 +1,1036 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 116 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "cameraTween": false,
+ "lid": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "evidenceCount": 0,
+ "grounding": null,
+ "modelSources": [
+ {
+ "name": "terrain-005-20260917.glb",
+ "url": "/models/terrain-005-20260917.glb"
+ },
+ {
+ "name": "0916架桥车.glb",
+ "url": "/models/bridge-erector-20260916.glb"
+ }
+ ],
+ "hdr": "venice_sunset_1k",
+ "distance": 11.026959938593922,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 1035.2020303264044,
+ "y": 508.95441504276926,
+ "localX": 572.2020303264044,
+ "localY": 320.45441504276926,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935033827385107,
+ 0.13537495848346393,
+ 0.1972360067697554
+ ],
+ "projected": {
+ "x": 564.9148419132101,
+ "y": 314.1958643764656,
+ "w": 14.498500962929938,
+ "h": 12.630497316989477
+ },
+ "pivot": [
+ -0.12817634914491466,
+ 0.6152234412401882,
+ 1.6466822177405493
+ ],
+ "pickPoints": [
+ {
+ "x": 1035.1640923946752,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 1032.9893172502357,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 1037.3388675391147,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 1030.8145421057961,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 1039.513642683554,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 1028.6397669613566,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 1035.1640923946752,
+ "y": 507.1165384374119
+ },
+ {
+ "x": 1032.9893172502357,
+ "y": 507.1165384374119
+ },
+ {
+ "x": 1037.3388675391147,
+ "y": 507.1165384374119
+ },
+ {
+ "x": 1035.1640923946752,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 1032.9893172502357,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 1037.3388675391147,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 1030.8145421057961,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 1028.6397669613566,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 1037.3388675391147,
+ "y": 505.22196383986346
+ },
+ {
+ "x": 1035.1640923946752,
+ "y": 512.8002622300571
+ },
+ {
+ "x": 1032.9893172502357,
+ "y": 512.8002622300571
+ },
+ {
+ "x": 1030.8145421057961,
+ "y": 512.8002622300571
+ },
+ {
+ "x": 1028.6397669613566,
+ "y": 512.8002622300571
+ },
+ {
+ "x": 1032.9893172502357,
+ "y": 514.6948368276055
+ }
+ ],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 4.7683715820306587e-7,
+ 1.629206909017054e-7,
+ -0.9999999999998731
+ ],
+ "workflowCoverage": [
+ {
+ "name": "front-pump-hydraulic-pump",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 7.138234886169582,
+ 3.695554761077557,
+ 7.955160424286649
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 979.15625,
+ "y": 531.3125,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "narration": [
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "new model source and ground contacts",
+ "pass": true,
+ "grounding": {
+ "samples": 446,
+ "minGap": 3.3306690738754696e-16,
+ "maxGap": 0.001553249851667493
+ },
+ "modelSources": [
+ {
+ "name": "terrain-005-20260917.glb",
+ "url": "/models/terrain-005-20260917.glb"
+ },
+ {
+ "name": "0916架桥车.glb",
+ "url": "/models/bridge-erector-20260916.glb"
+ }
+ ]
+ },
+ {
+ "name": "task 116 step 1 operation 1",
+ "target": "front-pump-hydraulic-pump",
+ "drag": false,
+ "distance": 2.5322003064450387,
+ "projected": {
+ "x": 705.1374278203289,
+ "y": 222.81008281733952,
+ "w": 91.72522226722424,
+ "h": 113.44866354779649
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 116 step 2 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.5322003064450382,
+ "projected": {
+ "x": 709.0006218687124,
+ "y": 263.03238137723895,
+ "w": 83.99875626257528,
+ "h": 33.02359173097284
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 116 step 3 operation 1",
+ "target": "front-pump-ball-valve-switch",
+ "drag": true,
+ "distance": 2.5322003064450382,
+ "projected": {
+ "x": 742.9515540010899,
+ "y": 259.69722037090486,
+ "w": 16.09689199781792,
+ "h": 40.448933045487706
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 116 step 4 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200306445038,
+ "projected": {
+ "x": 706.5903063267405,
+ "y": 244.56976987545553,
+ "w": 88.81938734651817,
+ "h": 69.87239851232502
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 116 step 5 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": true,
+ "distance": 2.5322003064450387,
+ "projected": {
+ "x": 699.1228274833262,
+ "y": 249.20856621347718,
+ "w": 103.75434503334805,
+ "h": 60.651670340400244
+ },
+ "labels": 4
+ },
+ {
+ "name": "late preparation: rejected switch resets only its own motion; open lid survives repeated saves",
+ "pass": true,
+ "lid": {
+ "position": [
+ 1.1102230246251568e-16,
+ -5.551115123125784e-17,
+ 1.1102230246251568e-16
+ ],
+ "quaternion": [
+ -1.2657839478910767e-17,
+ 1.1102230246251565e-16,
+ -0.7660444431189779,
+ 0.6427876096865394
+ ]
+ }
+ },
+ {
+ "name": "task 116 step 5 operation 2",
+ "target": "front-pump-rescue-switch",
+ "drag": true,
+ "distance": 2.5322003064450382,
+ "projected": {
+ "x": 748.0136078101959,
+ "y": 276.39727764862505,
+ "w": 5.972784379609266,
+ "h": 6.274247470104513
+ },
+ "labels": 4
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/116/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-introduction-20260918/result.json b/reports/bridge-introduction-20260918/result.json
new file mode 100644
index 0000000..05d56e3
--- /dev/null
+++ b/reports/bridge-introduction-20260918/result.json
@@ -0,0 +1,57 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "id": 86,
+ "pages": 6,
+ "operationSteps": 5,
+ "next": true,
+ "skip": true,
+ "operationStateUnchanged": true
+ },
+ {
+ "id": 87,
+ "pages": 3,
+ "operationSteps": 7,
+ "next": true,
+ "skip": true,
+ "operationStateUnchanged": true
+ },
+ {
+ "id": 88,
+ "pages": 1,
+ "operationSteps": 11,
+ "next": true,
+ "skip": true,
+ "operationStateUnchanged": true
+ },
+ {
+ "id": 89,
+ "pages": 1,
+ "operationSteps": 16,
+ "next": true,
+ "skip": true,
+ "operationStateUnchanged": true
+ },
+ {
+ "id": 116,
+ "pages": 6,
+ "operationSteps": 5,
+ "next": true,
+ "skip": true,
+ "operationStateUnchanged": true
+ },
+ {
+ "name": "controlled video plays; skip stops playback and releases source",
+ "isolatedResponseFixture": true,
+ "pass": true
+ },
+ {
+ "name": "authoring save and reload preserve introduction",
+ "pass": true,
+ "projectId": "458",
+ "draftVersionId": "561"
+ }
+ ],
+ "errors": []
+}
\ No newline at end of file
diff --git a/reports/bridge-introduction-20260918/task-116-background.png b/reports/bridge-introduction-20260918/task-116-background.png
new file mode 100644
index 0000000..c335088
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-116-background.png differ
diff --git a/reports/bridge-introduction-20260918/task-116-fullscreen.png b/reports/bridge-introduction-20260918/task-116-fullscreen.png
new file mode 100644
index 0000000..767b7c7
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-116-fullscreen.png differ
diff --git a/reports/bridge-introduction-20260918/task-116-initial.png b/reports/bridge-introduction-20260918/task-116-initial.png
new file mode 100644
index 0000000..ebc304f
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-116-initial.png differ
diff --git a/reports/bridge-introduction-20260918/task-116-late-preparation-lid-open.png b/reports/bridge-introduction-20260918/task-116-late-preparation-lid-open.png
new file mode 100644
index 0000000..7b17e31
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-116-late-preparation-lid-open.png differ
diff --git a/reports/bridge-introduction-20260918/task-116-lecture.png b/reports/bridge-introduction-20260918/task-116-lecture.png
new file mode 100644
index 0000000..212cfb7
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-116-lecture.png differ
diff --git a/reports/bridge-introduction-20260918/task-116-operations.png b/reports/bridge-introduction-20260918/task-116-operations.png
new file mode 100644
index 0000000..8784e32
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-116-operations.png differ
diff --git a/reports/bridge-introduction-20260918/task-116-rescue-moving.png b/reports/bridge-introduction-20260918/task-116-rescue-moving.png
new file mode 100644
index 0000000..5bb5aeb
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-116-rescue-moving.png differ
diff --git a/reports/bridge-introduction-20260918/task-116-step-1.png b/reports/bridge-introduction-20260918/task-116-step-1.png
new file mode 100644
index 0000000..3b1073e
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-116-step-1.png differ
diff --git a/reports/bridge-introduction-20260918/task-116-step-2.png b/reports/bridge-introduction-20260918/task-116-step-2.png
new file mode 100644
index 0000000..a9240ba
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-116-step-2.png differ
diff --git a/reports/bridge-introduction-20260918/task-116-step-3.png b/reports/bridge-introduction-20260918/task-116-step-3.png
new file mode 100644
index 0000000..ba66558
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-116-step-3.png differ
diff --git a/reports/bridge-introduction-20260918/task-116-step-4.png b/reports/bridge-introduction-20260918/task-116-step-4.png
new file mode 100644
index 0000000..dca5a54
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-116-step-4.png differ
diff --git a/reports/bridge-introduction-20260918/task-116-step-5.png b/reports/bridge-introduction-20260918/task-116-step-5.png
new file mode 100644
index 0000000..715be09
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-116-step-5.png differ
diff --git a/reports/bridge-introduction-20260918/task-116-translucent.png b/reports/bridge-introduction-20260918/task-116-translucent.png
new file mode 100644
index 0000000..fe1b30d
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-116-translucent.png differ
diff --git a/reports/bridge-introduction-20260918/task-86-background.png b/reports/bridge-introduction-20260918/task-86-background.png
new file mode 100644
index 0000000..6410110
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-86-background.png differ
diff --git a/reports/bridge-introduction-20260918/task-86-lecture.png b/reports/bridge-introduction-20260918/task-86-lecture.png
new file mode 100644
index 0000000..1441c31
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-86-lecture.png differ
diff --git a/reports/bridge-introduction-20260918/task-86-operations.png b/reports/bridge-introduction-20260918/task-86-operations.png
new file mode 100644
index 0000000..1fe7ad7
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-86-operations.png differ
diff --git a/reports/bridge-introduction-20260918/task-87-background.png b/reports/bridge-introduction-20260918/task-87-background.png
new file mode 100644
index 0000000..75f013f
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-87-background.png differ
diff --git a/reports/bridge-introduction-20260918/task-87-lecture.png b/reports/bridge-introduction-20260918/task-87-lecture.png
new file mode 100644
index 0000000..b5b8cf8
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-87-lecture.png differ
diff --git a/reports/bridge-introduction-20260918/task-87-operations.png b/reports/bridge-introduction-20260918/task-87-operations.png
new file mode 100644
index 0000000..417e495
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-87-operations.png differ
diff --git a/reports/bridge-introduction-20260918/task-88-background.png b/reports/bridge-introduction-20260918/task-88-background.png
new file mode 100644
index 0000000..ef39fb0
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-88-background.png differ
diff --git a/reports/bridge-introduction-20260918/task-88-operations.png b/reports/bridge-introduction-20260918/task-88-operations.png
new file mode 100644
index 0000000..7bb6b9d
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-88-operations.png differ
diff --git a/reports/bridge-introduction-20260918/task-89-background.png b/reports/bridge-introduction-20260918/task-89-background.png
new file mode 100644
index 0000000..92355a3
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-89-background.png differ
diff --git a/reports/bridge-introduction-20260918/task-89-operations.png b/reports/bridge-introduction-20260918/task-89-operations.png
new file mode 100644
index 0000000..2dc37d9
Binary files /dev/null and b/reports/bridge-introduction-20260918/task-89-operations.png differ
diff --git a/reports/bridge-introduction-20260918/upload-failure.png b/reports/bridge-introduction-20260918/upload-failure.png
new file mode 100644
index 0000000..2ffe451
Binary files /dev/null and b/reports/bridge-introduction-20260918/upload-failure.png differ
diff --git a/reports/bridge-introduction-20260918/upload-result.json b/reports/bridge-introduction-20260918/upload-result.json
new file mode 100644
index 0000000..d553fb1
--- /dev/null
+++ b/reports/bridge-introduction-20260918/upload-result.json
@@ -0,0 +1,8 @@
+{
+ "pass": true,
+ "projectId": "460",
+ "uploadedImage": true,
+ "uploadedVideo": true,
+ "published": true,
+ "softDeleted": true
+}
\ No newline at end of file
diff --git a/reports/bridge-introduction-20260918/video-lecture.png b/reports/bridge-introduction-20260918/video-lecture.png
new file mode 100644
index 0000000..6a34576
Binary files /dev/null and b/reports/bridge-introduction-20260918/video-lecture.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/audit.json b/reports/bridge-new-models-006-008-20260917/audit.json
new file mode 100644
index 0000000..e9a88e7
--- /dev/null
+++ b/reports/bridge-new-models-006-008-20260917/audit.json
@@ -0,0 +1,91 @@
+{
+ "pass": true,
+ "time": "2026-09-17T15:36:29.401Z",
+ "environment": "127.0.0.1:6180 / 192.168.31.168:6180 through Gateway",
+ "role": "管理员教员预览",
+ "tasks": [
+ {
+ "id": 87,
+ "code": "TASK-VIRTUAL-006",
+ "name": "重型支援桥液压泵应急替代",
+ "versionId": "553",
+ "steps": 7,
+ "operations": 12,
+ "members": 0,
+ "runCount": 0,
+ "runs": [],
+ "preview": "/teaching/virtual-training/preview/87"
+ },
+ {
+ "id": 88,
+ "code": "TASK-VIRTUAL-007",
+ "name": "重型支援桥前泵换件修复",
+ "versionId": "554",
+ "steps": 11,
+ "operations": 27,
+ "members": 1,
+ "runCount": 1,
+ "runs": [
+ {
+ "id": "115",
+ "status": "IN_PROGRESS"
+ }
+ ],
+ "preview": "/teaching/virtual-training/preview/88"
+ },
+ {
+ "id": 89,
+ "code": "TASK-VIRTUAL-008",
+ "name": "重型支援桥平衡阀拆拼互换",
+ "versionId": "555",
+ "steps": 16,
+ "operations": 50,
+ "members": 0,
+ "runCount": 0,
+ "runs": [],
+ "preview": "/teaching/virtual-training/preview/89"
+ }
+ ],
+ "unchanged": [
+ 86,
+ 116
+ ],
+ "models": [
+ {
+ "source": "0916架桥车.glb",
+ "url": "/models/bridge-erector-20260916.glb",
+ "bytes": 37160920,
+ "sha256": "5993a52f55cf981fd7cb6113e346ff3c6b1f434bbd84f18232ab5af494d9ddca"
+ },
+ {
+ "source": "0916保障车.glb",
+ "url": "/models/bridge-support-20260916.glb",
+ "bytes": 63730648,
+ "sha256": "a101c5b5b59eb65daeacfaddd5dd70b6a3ab47f9b5b12d848c6c0e9fb3c0aba3"
+ },
+ {
+ "source": "双车连接油管.glb",
+ "url": "/models/bridge-rescue-hoses-20260916.glb",
+ "bytes": 93700,
+ "sha256": "239070f86b5c51c01f1b74cedef94a6340456f069a0132e42d7fe9d71dde1d9a"
+ },
+ {
+ "source": "3封口袋.glb",
+ "url": "/models/bridge-pump-bags-20260916.glb",
+ "bytes": 36776,
+ "sha256": "eff5f46392c9b4c777e8f4696cd9831711a5790df94086b105c792f479caecba"
+ },
+ {
+ "source": "4封口袋.glb",
+ "url": "/models/bridge-valve-bags-20260916.glb",
+ "bytes": 36756,
+ "sha256": "b945eb761daaf2ccbd391669edbf8a7a09f883338985984cc1eacd7cf0f52840"
+ },
+ {
+ "source": "牛皮纸.glb",
+ "url": "/models/bridge-paper-20260916.glb",
+ "bytes": 1062760,
+ "sha256": "315f25c1735a3d97d03d3b418bef90b214ed22928bea427a03bc2f63d60349b8"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-new-models-006-008-20260917/before-project-439.json b/reports/bridge-new-models-006-008-20260917/before-project-439.json
new file mode 100644
index 0000000..ff3bf5c
--- /dev/null
+++ b/reports/bridge-new-models-006-008-20260917/before-project-439.json
@@ -0,0 +1,1442 @@
+{
+ "project": {
+ "id": "439",
+ "type": "TRAINING",
+ "code": "TRAINING-439DE936E7CF4371",
+ "name": "重型支援桥液压泵应急替代",
+ "description": "原稿:桥梁/文件2/5.jpg、6.jpg",
+ "categoryCode": "MAINTENANCE",
+ "trainingMode": "VIRTUAL",
+ "coverUri": "",
+ "status": "PUBLISHED",
+ "ownerUserId": "99",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "currentVersionId": "534",
+ "currentVersionNo": 4,
+ "currentVersionCode": "V4.0.0",
+ "publishedVersionId": "534",
+ "publishedTime": 1789398513,
+ "usageCount": 0,
+ "version": 8,
+ "addTime": 1789309630,
+ "updateTime": "2026-09-14T23:08:33",
+ "contentSummary": {
+ "schema": "digital-workshop-training-project",
+ "trainingMode": "VIRTUAL",
+ "stepCount": 7
+ },
+ "currentVersionStatus": "PUBLISHED",
+ "dependencyCount": 0,
+ "assetCount": 7,
+ "readCount": 0,
+ "downloadCount": 0
+ },
+ "currentVersion": {
+ "id": "534",
+ "projectId": "439",
+ "versionNo": 4,
+ "versionCode": "V4.0.0",
+ "status": "PUBLISHED",
+ "content": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥液压泵应急替代",
+ "status": "published",
+ "trainingMode": "VIRTUAL",
+ "resources": {
+ "models": [
+ {
+ "id": "front-pump-step-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "name": "架桥车前泵互救操作整车模型",
+ "baseModelName": "架桥车前泵互救操作整车模型",
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "revision": 1,
+ "materialPreset": null,
+ "parts": [
+ {
+ "editorId": "",
+ "interactionId": "front-pump-hydraulic-pump",
+ "nodeName": "1液压泵",
+ "sourceNodeName": "1液压泵",
+ "nodePath": "",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-power-take-off",
+ "nodeName": "2取力器",
+ "sourceNodeName": "2取力器",
+ "nodePath": "",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-pto-switch",
+ "nodeName": "2取力器开关",
+ "sourceNodeName": "2取力器开关",
+ "nodePath": "",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-ball-valve-switch",
+ "nodeName": "3球阀开关",
+ "sourceNodeName": "3球阀开关",
+ "nodePath": "",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box",
+ "nodeName": "5辅助控制盒",
+ "sourceNodeName": "5辅助控制盒",
+ "nodePath": "",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "nodeName": "5辅助控制盒盖",
+ "sourceNodeName": "5辅助控制盒盖",
+ "nodePath": "",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-rescue-switch",
+ "nodeName": "5互救开关",
+ "sourceNodeName": "5互救开关",
+ "nodePath": "",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "animations": []
+ },
+ "task": {
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "code": "TR-FRONT-PUMP-RESCUE-001",
+ "title": "重型支援桥液压泵应急替代",
+ "categoryId": "minor-repair",
+ "difficulty": "标准",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "image": "/models/step-model-front-pump-thumb.png",
+ "equipment": "架桥车",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ]
+ },
+ "scenario": {
+ "id": "front-pump-rescue-scenario",
+ "publishedSceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "publishedSceneVersion": "1.0",
+ "baseVisualKey": "front-pump-rescue",
+ "visualKey": "front-pump-rescue",
+ "environmentName": "重型支援桥液压泵应急替代",
+ "sceneLayout": "架桥车整车操作位",
+ "equipmentState": "整车模型 · 补充拆装件为操作示意",
+ "tools": [],
+ "faults": [],
+ "environment": {
+ "type": "outdoor",
+ "mode": "builtin",
+ "sourceName": "桥梁脚本三维训练场",
+ "resourceUrl": "",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "sceneResource": {
+ "sceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "version": "1.0",
+ "sourceKind": "published",
+ "status": "已发布",
+ "name": "重型支援桥液压泵应急替代",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "objectCount": 2,
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "1.0",
+ "name": "重型支援桥液压泵应急替代",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "environment": {
+ "presetId": "outdoor-1",
+ "type": "outdoor"
+ },
+ "rendering": {
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 70,
+ "far": 240
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.1,
+ "far": 800,
+ "position": [
+ 11,
+ 8,
+ 16
+ ],
+ "target": [
+ 0,
+ 1.5,
+ 2
+ ]
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ]
+ },
+ "assetReferences": [
+ {
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 32195288,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "training-content"
+ }
+ ]
+ },
+ "accent": "#2d86d8",
+ "background": 11062241,
+ "fog": 11062241,
+ "ground": 7110499,
+ "camera": {
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ },
+ "retainStoredParts": true,
+ "sceneTags": [
+ "整车模型",
+ "补充操作示意",
+ "机构顺序操作"
+ ],
+ "sensorFeeds": [],
+ "name": "重型支援桥液压泵应急替代",
+ "title": "重型支援桥液压泵应急替代",
+ "operableParts": [
+ "bridge-engine",
+ "front-pump-pto-switch",
+ "bridge-hose-a",
+ "bridge-hose-b",
+ "bridge-return-valve",
+ "front-pump-aux-control-box-cover",
+ "front-pump-rescue-switch",
+ "front-pump-ball-valve-switch",
+ "bridge-support-pto",
+ "bridge-supply",
+ "bridge-normal-control"
+ ]
+ },
+ "tools": [],
+ "faults": [],
+ "steps": [
+ {
+ "id": "BRIDGE-STEP-1",
+ "stepCode": "BRIDGE-STEP-1",
+ "actionCode": "COMPLETE_BRIDGE-STEP-1",
+ "number": 1,
+ "title": "保持架桥车运行并断开取力器",
+ "targetId": "bridge-engine",
+ "targetName": "保持架桥车发动机运行",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "保持架桥车发动机运转,确保架桥车取力器处于断开状态。",
+ "guidance": "保持架桥车发动机运转,确保架桥车取力器处于断开状态。",
+ "warning": "",
+ "success": "保持架桥车运行并断开取力器:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-engine",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "保持架桥车发动机运行",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 2209160
+ }
+ ]
+ },
+ {
+ "targetId": "front-pump-pto-switch",
+ "kind": "rotate",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": -30,
+ "toleranceDegrees": 8,
+ "directionHint": "断开架桥车取力器"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,保持架桥车运行并断开取力器。保持架桥车发动机运转,确保架桥车取力器处于断开状态。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_5AEA5274E6664D43B8C53F55859D5717",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "58",
+ "videoName": "重型支援桥液压泵应急替代 · 1 保持架桥车运行并断开取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-2",
+ "stepCode": "BRIDGE-STEP-2",
+ "actionCode": "COMPLETE_BRIDGE-STEP-2",
+ "number": 2,
+ "title": "连接两车液压软管",
+ "targetId": "bridge-hose-a",
+ "targetName": "连接架桥车快速接头",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "连接支援车与架桥车液压软管。架桥车快接接头位于液压油箱右侧;支援车快接接头位于驾驶室外右下方。",
+ "guidance": "连接支援车与架桥车液压软管。架桥车快接接头位于液压油箱右侧;支援车快接接头位于驾驶室外右下方。",
+ "warning": "",
+ "success": "连接两车液压软管:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-hose-a",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-hose-a",
+ "kind": "identify",
+ "directionHint": "连接架桥车快速接头",
+ "effects": [
+ {
+ "targetId": "bridge-hose-a",
+ "offset": [
+ 0,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-hose-line",
+ "visible": true
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-hose-b",
+ "kind": "identify",
+ "directionHint": "连接保障车快速接头",
+ "effects": [
+ {
+ "targetId": "bridge-hose-b",
+ "offset": [
+ 0,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-return-line",
+ "visible": true
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,连接两车液压软管。连接支援车与架桥车液压软管。架桥车快接接头位于液压油箱右侧;支援车快接接头位于驾驶室外右下方。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_B9F2CBFE36274528825899153DB98195",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "59",
+ "videoName": "重型支援桥液压泵应急替代 · 2 连接两车液压软管",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-3",
+ "stepCode": "BRIDGE-STEP-3",
+ "actionCode": "COMPLETE_BRIDGE-STEP-3",
+ "number": 3,
+ "title": "打开支援车回油截止阀",
+ "targetId": "bridge-return-valve",
+ "targetName": "打开保障车回油截止阀",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开支援车液压油箱快接接头处的回油截止阀。",
+ "guidance": "打开支援车液压油箱快接接头处的回油截止阀。",
+ "warning": "",
+ "success": "打开支援车回油截止阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-return-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "rotate",
+ "steps": [
+ {
+ "targetId": "bridge-return-valve",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "打开保障车回油截止阀"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,打开支援车回油截止阀。打开支援车液压油箱快接接头处的回油截止阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_983218ACA84345B5B032A5DFA8F08E4E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "60",
+ "videoName": "重型支援桥液压泵应急替代 · 3 打开支援车回油截止阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-4",
+ "stepCode": "BRIDGE-STEP-4",
+ "actionCode": "COMPLETE_BRIDGE-STEP-4",
+ "number": 4,
+ "title": "打开互救作业开关",
+ "targetId": "front-pump-aux-control-box-cover",
+ "targetName": "打开辅助控制盒盖",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开辅助控制盒上的“互救作业”开关。",
+ "guidance": "打开辅助控制盒上的“互救作业”开关。",
+ "warning": "",
+ "success": "打开互救作业开关:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-aux-control-box-cover",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "front-pump-aux-control-box-cover",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "deltaDegrees": 100,
+ "toleranceDegrees": 8,
+ "directionHint": "打开辅助控制盒盖"
+ },
+ {
+ "targetId": "front-pump-rescue-switch",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 8,
+ "directionHint": "打开互救作业开关"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,打开互救作业开关。打开辅助控制盒上的“互救作业”开关。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_AC0F121CD04B44B5A373BE82D5083AE1",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "61",
+ "videoName": "重型支援桥液压泵应急替代 · 4 打开互救作业开关",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-5",
+ "stepCode": "BRIDGE-STEP-5",
+ "actionCode": "COMPLETE_BRIDGE-STEP-5",
+ "number": 5,
+ "title": "打开滤油器出口连通球阀",
+ "targetId": "front-pump-ball-valve-switch",
+ "targetName": "打开滤油器出口连通球阀",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开两个输油滤油器出口处的连通球阀。",
+ "guidance": "打开两个输油滤油器出口处的连通球阀。",
+ "warning": "",
+ "success": "打开滤油器出口连通球阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-ball-valve-switch",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "rotate",
+ "steps": [
+ {
+ "targetId": "front-pump-ball-valve-switch",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "打开滤油器出口连通球阀"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,打开滤油器出口连通球阀。打开两个输油滤油器出口处的连通球阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_774F7400E0B54F4696EBDAD800A289C3",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "62",
+ "videoName": "重型支援桥液压泵应急替代 · 5 打开滤油器出口连通球阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-6",
+ "stepCode": "BRIDGE-STEP-6",
+ "actionCode": "COMPLETE_BRIDGE-STEP-6",
+ "number": 6,
+ "title": "接通支援车液压取力器",
+ "targetId": "bridge-support-pto",
+ "targetName": "接通保障车取力器",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "接通支援车液压系统取力器,向架桥车供油。",
+ "guidance": "接通支援车液压系统取力器,向架桥车供油。",
+ "warning": "",
+ "success": "接通支援车液压取力器:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-support-pto",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-support-pto",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 8,
+ "directionHint": "接通保障车取力器"
+ },
+ {
+ "targetId": "bridge-supply",
+ "kind": "identify",
+ "directionHint": "观察供油示意",
+ "effects": [
+ {
+ "targetId": "bridge-hose-line",
+ "color": 15312947
+ },
+ {
+ "targetId": "bridge-return-line",
+ "color": 3325905
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第6步,接通支援车液压取力器。接通支援车液压系统取力器,向架桥车供油。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_64D9ECF315DA41568D936CFEBF28E403",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "63",
+ "videoName": "重型支援桥液压泵应急替代 · 6 接通支援车液压取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-7",
+ "stepCode": "BRIDGE-STEP-7",
+ "actionCode": "COMPLETE_BRIDGE-STEP-7",
+ "number": 7,
+ "title": "按正常步骤操作架桥车",
+ "targetId": "bridge-normal-control",
+ "targetName": "操作正常作业控制手柄",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "原图只概括“按正常操作步骤操作架桥车”,没有展开后续作业。",
+ "guidance": "原图只概括“按正常操作步骤操作架桥车”,没有展开后续作业。",
+ "warning": "该项为原稿概括项,本预演不代表后续正常作业已经完成。",
+ "success": "按正常步骤操作架桥车:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-normal-control",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-normal-control",
+ "kind": "identify",
+ "directionHint": "操作正常作业控制手柄",
+ "effects": [
+ {
+ "targetId": "bridge-normal-control",
+ "offset": [
+ 0,
+ 0,
+ -0.25
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第7步,按正常步骤操作架桥车。原图只概括“按正常操作步骤操作架桥车”,没有展开后续作业。该项为原稿概括项,本预演不代表后续正常作业已经完成。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_356ADFCC874448D28ADB2DF8067582E8",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "64",
+ "videoName": "重型支援桥液压泵应急替代 · 7 按正常步骤操作架桥车",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ }
+ ],
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "totalScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-pump-substitute",
+ "scriptVersion": "3"
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/5.jpg、6.jpg"
+ },
+ "changeSummary": "39段数字人视频讲解;原语音保留可切换",
+ "checksum": "3f01d880c16bf9f93dcf0ddd076d57d7d4dafb824d84e4278310d579e4cd9b58",
+ "createdByUserId": "99",
+ "createdByName": "内部维护",
+ "publishedByUserId": "99",
+ "publishedByName": "内部维护",
+ "publishedTime": 1789398513,
+ "version": 2,
+ "addTime": 1789398513,
+ "updateTime": "2026-09-14T23:08:33",
+ "dependencies": [],
+ "assets": [
+ {
+ "id": "3965",
+ "versionId": "534",
+ "code": "DH_5AEA5274E6664D43B8C53F55859D5717",
+ "name": "重型支援桥液压泵应急替代 · 1 保持架桥车运行并断开取力器",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/75748c295407bd0768e760d4593dbdee.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 554961,
+ "sha256": "d82bb8354acfca494e2ff515e5ef79887fb9d1f929a62779119d136857944ba6",
+ "metadata": {
+ "sourceVideoId": "58",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3966",
+ "versionId": "534",
+ "code": "DH_B9F2CBFE36274528825899153DB98195",
+ "name": "重型支援桥液压泵应急替代 · 2 连接两车液压软管",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/d4c77791615f95ed57751597446e35c5.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 400318,
+ "sha256": "8791296620dbb4cc823bab5f24af07b8b48d510292b4baf966598b0b0351e4f9",
+ "metadata": {
+ "sourceVideoId": "59",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3967",
+ "versionId": "534",
+ "code": "DH_983218ACA84345B5B032A5DFA8F08E4E",
+ "name": "重型支援桥液压泵应急替代 · 3 打开支援车回油截止阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/0fbe417a88b14dc657256c924e8ba532.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 224021,
+ "sha256": "f78a59ebddcd35e937ce42910aed82fcaf9b49c07be4e1d460fc701e666d3d29",
+ "metadata": {
+ "sourceVideoId": "60",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3968",
+ "versionId": "534",
+ "code": "DH_AC0F121CD04B44B5A373BE82D5083AE1",
+ "name": "重型支援桥液压泵应急替代 · 4 打开互救作业开关",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/0e886b5158602172fb149cb7bb4c07cc.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 332829,
+ "sha256": "a784a79790a96f486eb6be917fa879db7071813a31f461f5d95d31c754ce3f46",
+ "metadata": {
+ "sourceVideoId": "61",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3969",
+ "versionId": "534",
+ "code": "DH_774F7400E0B54F4696EBDAD800A289C3",
+ "name": "重型支援桥液压泵应急替代 · 5 打开滤油器出口连通球阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/3a57549a9c62a2faa19f4a9af7740193.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 241632,
+ "sha256": "db5c8f4a531e958712d309f25f9c51a145f717e4687893fcc41b65e2c8242175",
+ "metadata": {
+ "sourceVideoId": "62",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3970",
+ "versionId": "534",
+ "code": "DH_64D9ECF315DA41568D936CFEBF28E403",
+ "name": "重型支援桥液压泵应急替代 · 6 接通支援车液压取力器",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/34657e7ed592e7d7a987f90e0f0188ba.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 401336,
+ "sha256": "05ffeff41d2cf4162b6e8181d4d002ba3f12531589a25d31bac76c69f5dea6bb",
+ "metadata": {
+ "sourceVideoId": "63",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3971",
+ "versionId": "534",
+ "code": "DH_356ADFCC874448D28ADB2DF8067582E8",
+ "name": "重型支援桥液压泵应急替代 · 7 按正常步骤操作架桥车",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/715a4ac02abad5bf00d7a0a1bd0edb15.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 762615,
+ "sha256": "7b85bbf9c21adc74b56a26f6d92db1448f9f565101da6feba7ca9ad4cdd137f7",
+ "metadata": {
+ "sourceVideoId": "64",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/reports/bridge-new-models-006-008-20260917/before-project-440.json b/reports/bridge-new-models-006-008-20260917/before-project-440.json
new file mode 100644
index 0000000..a162d3f
--- /dev/null
+++ b/reports/bridge-new-models-006-008-20260917/before-project-440.json
@@ -0,0 +1,2074 @@
+{
+ "project": {
+ "id": "440",
+ "type": "TRAINING",
+ "code": "TRAINING-20B5F2AE722C48A5",
+ "name": "重型支援桥前泵换件修复",
+ "description": "原稿:桥梁/文件2/7.jpg、8.jpg",
+ "categoryCode": "MAINTENANCE",
+ "trainingMode": "VIRTUAL",
+ "coverUri": "",
+ "status": "PUBLISHED",
+ "ownerUserId": "99",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "currentVersionId": "535",
+ "currentVersionNo": 4,
+ "currentVersionCode": "V4.0.0",
+ "publishedVersionId": "535",
+ "publishedTime": 1789398560,
+ "usageCount": 0,
+ "version": 8,
+ "addTime": 1789309631,
+ "updateTime": "2026-09-14T23:09:20",
+ "contentSummary": {
+ "schema": "digital-workshop-training-project",
+ "trainingMode": "VIRTUAL",
+ "stepCount": 11
+ },
+ "currentVersionStatus": "PUBLISHED",
+ "dependencyCount": 0,
+ "assetCount": 11,
+ "readCount": 0,
+ "downloadCount": 0
+ },
+ "currentVersion": {
+ "id": "535",
+ "projectId": "440",
+ "versionNo": 4,
+ "versionCode": "V4.0.0",
+ "status": "PUBLISHED",
+ "content": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥前泵换件修复",
+ "status": "published",
+ "trainingMode": "VIRTUAL",
+ "resources": {
+ "models": [
+ {
+ "id": "front-pump-step-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "name": "架桥车前泵互救操作整车模型",
+ "baseModelName": "架桥车前泵互救操作整车模型",
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "revision": 1,
+ "materialPreset": null,
+ "parts": [
+ {
+ "editorId": "",
+ "interactionId": "front-pump-hydraulic-pump",
+ "nodeName": "1液压泵",
+ "sourceNodeName": "1液压泵",
+ "nodePath": "",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-power-take-off",
+ "nodeName": "2取力器",
+ "sourceNodeName": "2取力器",
+ "nodePath": "",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-pto-switch",
+ "nodeName": "2取力器开关",
+ "sourceNodeName": "2取力器开关",
+ "nodePath": "",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-ball-valve-switch",
+ "nodeName": "3球阀开关",
+ "sourceNodeName": "3球阀开关",
+ "nodePath": "",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box",
+ "nodeName": "5辅助控制盒",
+ "sourceNodeName": "5辅助控制盒",
+ "nodePath": "",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "nodeName": "5辅助控制盒盖",
+ "sourceNodeName": "5辅助控制盒盖",
+ "nodePath": "",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-rescue-switch",
+ "nodeName": "5互救开关",
+ "sourceNodeName": "5互救开关",
+ "nodePath": "",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "animations": []
+ },
+ "task": {
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "code": "TR-FRONT-PUMP-RESCUE-001",
+ "title": "重型支援桥前泵换件修复",
+ "categoryId": "minor-repair",
+ "difficulty": "标准",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "image": "/models/step-model-front-pump-thumb.png",
+ "equipment": "架桥车",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ]
+ },
+ "scenario": {
+ "id": "front-pump-rescue-scenario",
+ "publishedSceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "publishedSceneVersion": "1.0",
+ "baseVisualKey": "front-pump-rescue",
+ "visualKey": "front-pump-rescue",
+ "environmentName": "重型支援桥前泵换件修复",
+ "sceneLayout": "架桥车整车操作位",
+ "equipmentState": "整车模型 · 补充拆装件为操作示意",
+ "tools": [],
+ "faults": [],
+ "environment": {
+ "type": "outdoor",
+ "mode": "builtin",
+ "sourceName": "桥梁脚本三维训练场",
+ "resourceUrl": "",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "sceneResource": {
+ "sceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "version": "1.0",
+ "sourceKind": "published",
+ "status": "已发布",
+ "name": "重型支援桥前泵换件修复",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "objectCount": 2,
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "1.0",
+ "name": "重型支援桥前泵换件修复",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "environment": {
+ "presetId": "outdoor-1",
+ "type": "outdoor"
+ },
+ "rendering": {
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 70,
+ "far": 240
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.1,
+ "far": 800,
+ "position": [
+ 11,
+ 8,
+ 16
+ ],
+ "target": [
+ 0,
+ 1.5,
+ 2
+ ]
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ]
+ },
+ "assetReferences": [
+ {
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 32195288,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "training-content"
+ }
+ ]
+ },
+ "accent": "#2d86d8",
+ "background": 11062241,
+ "fog": 11062241,
+ "ground": 7110499,
+ "camera": {
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ },
+ "retainStoredParts": true,
+ "sceneTags": [
+ "整车模型",
+ "补充操作示意",
+ "机构顺序操作"
+ ],
+ "sensorFeeds": [],
+ "name": "重型支援桥前泵换件修复",
+ "title": "重型支援桥前泵换件修复",
+ "operableParts": [
+ "bridge-engine",
+ "bridge-paper",
+ "bridge-tank-valve",
+ "bridge-inlet",
+ "bridge-inlet-bag",
+ "bridge-outlet",
+ "bridge-outlet-bag",
+ "bridge-pump-bolt-1",
+ "bridge-pump-bolt-2",
+ "bridge-pump-bolt-3",
+ "bridge-pump-bolt-4",
+ "bridge-old-pump",
+ "bridge-gasket",
+ "bridge-new-pump",
+ "bridge-fill-cap",
+ "bridge-oil-can",
+ "bridge-test-control"
+ ]
+ },
+ "tools": [],
+ "faults": [],
+ "steps": [
+ {
+ "id": "BRIDGE-STEP-1",
+ "stepCode": "BRIDGE-STEP-1",
+ "actionCode": "COMPLETE_BRIDGE-STEP-1",
+ "number": 1,
+ "title": "停机并初裁牛皮纸",
+ "targetId": "bridge-engine",
+ "targetName": "关闭架桥车发动机",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "架桥车熄火;按液压泵与取力器结合面形状初步裁剪牛皮纸。",
+ "guidance": "架桥车熄火;按液压泵与取力器结合面形状初步裁剪牛皮纸。",
+ "warning": "",
+ "success": "停机并初裁牛皮纸:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-engine",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "关闭架桥车发动机",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 13195851
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-paper",
+ "kind": "identify",
+ "directionHint": "按结合面初裁牛皮纸",
+ "effects": [
+ {
+ "targetId": "bridge-paper",
+ "scale": [
+ 0.85,
+ 1,
+ 0.85
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,停机并初裁牛皮纸。架桥车熄火;按液压泵与取力器结合面形状初步裁剪牛皮纸。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_1CE71ECA76194F06B098A012B360BB06",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "65",
+ "videoName": "重型支援桥前泵换件修复 · 1 停机并初裁牛皮纸",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-2",
+ "stepCode": "BRIDGE-STEP-2",
+ "actionCode": "COMPLETE_BRIDGE-STEP-2",
+ "number": 2,
+ "title": "关闭液压油箱出油口一号球阀",
+ "targetId": "bridge-tank-valve",
+ "targetName": "关闭一号出油球阀",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将一号球阀手柄从平行管道转到垂直管道。",
+ "guidance": "将一号球阀手柄从平行管道转到垂直管道。",
+ "warning": "",
+ "success": "关闭液压油箱出油口一号球阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-tank-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "rotate",
+ "steps": [
+ {
+ "targetId": "bridge-tank-valve",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "关闭一号出油球阀"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,关闭液压油箱出油口一号球阀。将一号球阀手柄从平行管道转到垂直管道。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_34129B61FA1F4E628AF295E3EF714364",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "66",
+ "videoName": "重型支援桥前泵换件修复 · 2 关闭液压油箱出油口一号球阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-3",
+ "stepCode": "BRIDGE-STEP-3",
+ "actionCode": "COMPLETE_BRIDGE-STEP-3",
+ "number": 3,
+ "title": "拆开并包扎进出油管",
+ "targetId": "bridge-inlet",
+ "targetName": "拆开进油管",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用大活动扳手拆开液压泵进、出油管接头,用塑料袋包扎管口。",
+ "guidance": "用大活动扳手拆开液压泵进、出油管接头,用塑料袋包扎管口。",
+ "warning": "",
+ "success": "拆开并包扎进出油管:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-inlet",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-inlet",
+ "kind": "identify",
+ "directionHint": "拆开进油管",
+ "effects": [
+ {
+ "targetId": "bridge-inlet",
+ "offset": [
+ -0.6,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-inlet-bag",
+ "kind": "identify",
+ "directionHint": "包扎进油管口",
+ "effects": [
+ {
+ "targetId": "bridge-inlet-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet",
+ "kind": "identify",
+ "directionHint": "拆开出油管",
+ "effects": [
+ {
+ "targetId": "bridge-outlet",
+ "offset": [
+ 0.6,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet-bag",
+ "kind": "identify",
+ "directionHint": "包扎出油管口",
+ "effects": [
+ {
+ "targetId": "bridge-outlet-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,拆开并包扎进出油管。用大活动扳手拆开液压泵进、出油管接头,用塑料袋包扎管口。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_533EAE94D45D49A2BECD7E24E48835E6",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "67",
+ "videoName": "重型支援桥前泵换件修复 · 3 拆开并包扎进出油管",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-4",
+ "stepCode": "BRIDGE-STEP-4",
+ "actionCode": "COMPLETE_BRIDGE-STEP-4",
+ "number": 4,
+ "title": "拆下四个安装螺栓",
+ "targetId": "bridge-pump-bolt-1",
+ "targetName": "拆下第 1 个安装螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用开口扳手拆下液压泵与取力器之间的四个安装螺栓。",
+ "guidance": "用开口扳手拆下液压泵与取力器之间的四个安装螺栓。",
+ "warning": "",
+ "success": "拆下四个安装螺栓:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-pump-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 1 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 2 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 3 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 4 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,拆下四个安装螺栓。用开口扳手拆下液压泵与取力器之间的四个安装螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_787B4C212CF644AE9A3D8D49DEDCB65E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "68",
+ "videoName": "重型支援桥前泵换件修复 · 4 拆下四个安装螺栓",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-5",
+ "stepCode": "BRIDGE-STEP-5",
+ "actionCode": "COMPLETE_BRIDGE-STEP-5",
+ "number": 5,
+ "title": "取下旧前泵",
+ "targetId": "bridge-old-pump",
+ "targetName": "取下旧前泵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "取下原前泵。",
+ "guidance": "取下原前泵。",
+ "warning": "",
+ "success": "取下旧前泵:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-old-pump",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-old-pump",
+ "kind": "identify",
+ "directionHint": "取下旧前泵",
+ "effects": [
+ {
+ "targetId": "bridge-old-pump",
+ "offset": [
+ -2,
+ 0,
+ 0
+ ]
+ },
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "visible": false
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,取下旧前泵。取下原前泵。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_5672FD367E8F41A5A026E3C68E8C8726",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "69",
+ "videoName": "重型支援桥前泵换件修复 · 5 取下旧前泵",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-6",
+ "stepCode": "BRIDGE-STEP-6",
+ "actionCode": "COMPLETE_BRIDGE-STEP-6",
+ "number": 6,
+ "title": "修裁牛皮纸",
+ "targetId": "bridge-paper",
+ "targetName": "按安装面修裁纸垫",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "进一步裁剪牛皮纸,使其与液压泵安装面及取力器结合面吻合。",
+ "guidance": "进一步裁剪牛皮纸,使其与液压泵安装面及取力器结合面吻合。",
+ "warning": "",
+ "success": "修裁牛皮纸:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-paper",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-paper",
+ "kind": "identify",
+ "directionHint": "按安装面修裁纸垫",
+ "effects": [
+ {
+ "targetId": "bridge-gasket",
+ "visible": true
+ },
+ {
+ "targetId": "bridge-paper",
+ "visible": false
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第6步,修裁牛皮纸。进一步裁剪牛皮纸,使其与液压泵安装面及取力器结合面吻合。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_C0E73EC20FD44C608A795A03DE4F7401",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "70",
+ "videoName": "重型支援桥前泵换件修复 · 6 修裁牛皮纸",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-7",
+ "stepCode": "BRIDGE-STEP-7",
+ "actionCode": "COMPLETE_BRIDGE-STEP-7",
+ "number": 7,
+ "title": "放置牛皮纸垫",
+ "targetId": "bridge-gasket",
+ "targetName": "将纸垫放到取力器结合面",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将裁好的牛皮纸放在取力器接口处。",
+ "guidance": "将裁好的牛皮纸放在取力器接口处。",
+ "warning": "",
+ "success": "放置牛皮纸垫:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-gasket",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-gasket",
+ "kind": "identify",
+ "directionHint": "将纸垫放到取力器结合面",
+ "effects": [
+ {
+ "targetId": "bridge-gasket",
+ "offset": [
+ 2.3,
+ 0,
+ -0.4
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第7步,放置牛皮纸垫。将裁好的牛皮纸放在取力器接口处。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_17FAC41643804A22A8B71A2FF8DCBC28",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "71",
+ "videoName": "重型支援桥前泵换件修复 · 7 放置牛皮纸垫",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-8",
+ "stepCode": "BRIDGE-STEP-8",
+ "actionCode": "COMPLETE_BRIDGE-STEP-8",
+ "number": 8,
+ "title": "安装新液压泵",
+ "targetId": "bridge-new-pump",
+ "targetName": "安装新泵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "安装新的液压泵。原稿没有给出拧紧力矩。",
+ "guidance": "安装新的液压泵。原稿没有给出拧紧力矩。",
+ "warning": "",
+ "success": "安装新液压泵:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-new-pump",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-new-pump",
+ "kind": "identify",
+ "directionHint": "安装新泵",
+ "effects": [
+ {
+ "targetId": "bridge-new-pump",
+ "offset": [
+ -2,
+ 0,
+ 0
+ ]
+ },
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "visible": true
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 1 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 2 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 3 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 4 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第8步,安装新液压泵。安装新的液压泵。原稿没有给出拧紧力矩。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_2284ABD91F544E2EB7799E9FA1C4BCF6",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "72",
+ "videoName": "重型支援桥前泵换件修复 · 8 安装新液压泵",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-9",
+ "stepCode": "BRIDGE-STEP-9",
+ "actionCode": "COMPLETE_BRIDGE-STEP-9",
+ "number": 9,
+ "title": "向新泵加注液压油",
+ "targetId": "bridge-fill-cap",
+ "targetName": "打开加油口",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开新液压泵加油口,加注液压油。原稿没有给出定量值。",
+ "guidance": "打开新液压泵加油口,加注液压油。原稿没有给出定量值。",
+ "warning": "",
+ "success": "向新泵加注液压油:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-fill-cap",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-fill-cap",
+ "kind": "identify",
+ "directionHint": "打开加油口",
+ "effects": [
+ {
+ "targetId": "bridge-fill-cap",
+ "offset": [
+ 0,
+ 0.45,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-oil-can",
+ "kind": "identify",
+ "directionHint": "向新泵加注液压油",
+ "effects": [
+ {
+ "targetId": "bridge-oil-can",
+ "offset": [
+ -1.3,
+ 0.6,
+ -0.3
+ ]
+ },
+ {
+ "targetId": "bridge-oil-stream",
+ "visible": true
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第9步,向新泵加注液压油。打开新液压泵加油口,加注液压油。原稿没有给出定量值。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_BF468C49DDCB462E8E2C75CF8C6BD172",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "73",
+ "videoName": "重型支援桥前泵换件修复 · 9 向新泵加注液压油",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-10",
+ "stepCode": "BRIDGE-STEP-10",
+ "actionCode": "COMPLETE_BRIDGE-STEP-10",
+ "number": 10,
+ "title": "恢复进出油管连接",
+ "targetId": "bridge-inlet-bag",
+ "targetName": "取下进油管封口袋",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用大活动扳手连接并拧紧液压泵进、出油管。",
+ "guidance": "用大活动扳手连接并拧紧液压泵进、出油管。",
+ "warning": "",
+ "success": "恢复进出油管连接:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-inlet-bag",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-inlet-bag",
+ "kind": "identify",
+ "directionHint": "取下进油管封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-inlet-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-inlet",
+ "kind": "identify",
+ "directionHint": "连接并拧紧进油管",
+ "effects": [
+ {
+ "targetId": "bridge-inlet",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet-bag",
+ "kind": "identify",
+ "directionHint": "取下出油管封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-outlet-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet",
+ "kind": "identify",
+ "directionHint": "连接并拧紧出油管",
+ "effects": [
+ {
+ "targetId": "bridge-outlet",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第10步,恢复进出油管连接。用大活动扳手连接并拧紧液压泵进、出油管。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_88908FEBE6054EE99087F8653A8C5FAA",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "74",
+ "videoName": "重型支援桥前泵换件修复 · 10 恢复进出油管连接",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-11",
+ "stepCode": "BRIDGE-STEP-11",
+ "actionCode": "COMPLETE_BRIDGE-STEP-11",
+ "number": 11,
+ "title": "启动设备试验",
+ "targetId": "bridge-engine",
+ "targetName": "启动设备试验",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "启动设备进行试验。原稿没有展开具体试验项目和判定数值。",
+ "guidance": "启动设备进行试验。原稿没有展开具体试验项目和判定数值。",
+ "warning": "",
+ "success": "启动设备试验:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-engine",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "启动设备试验",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 2209160
+ },
+ {
+ "targetId": "bridge-oil-stream",
+ "visible": false
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-test-control",
+ "kind": "identify",
+ "directionHint": "操作试验手柄并观察",
+ "effects": [
+ {
+ "targetId": "bridge-test-control",
+ "offset": [
+ 0,
+ 0,
+ -0.25
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第11步,启动设备试验。启动设备进行试验。原稿没有展开具体试验项目和判定数值。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_4D873387CF324AAF9C6D3BE1A72C247E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "75",
+ "videoName": "重型支援桥前泵换件修复 · 11 启动设备试验",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ }
+ ],
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "totalScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-pump-replace",
+ "scriptVersion": "3"
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/7.jpg、8.jpg"
+ },
+ "changeSummary": "39段数字人视频讲解;原语音保留可切换",
+ "checksum": "d269783f0e0314d11047cf82cf0d0d3bb3510d179c18e3dc281d9b12f9e80dd7",
+ "createdByUserId": "99",
+ "createdByName": "内部维护",
+ "publishedByUserId": "99",
+ "publishedByName": "内部维护",
+ "publishedTime": 1789398560,
+ "version": 2,
+ "addTime": 1789398560,
+ "updateTime": "2026-09-14T23:09:20",
+ "dependencies": [],
+ "assets": [
+ {
+ "id": "3972",
+ "versionId": "535",
+ "code": "DH_1CE71ECA76194F06B098A012B360BB06",
+ "name": "重型支援桥前泵换件修复 · 1 停机并初裁牛皮纸",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/d8b3e011ed5bc1f41090d77dda7a8e72.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 448340,
+ "sha256": "22c92b853a9460ee67c7ae80d5bc203ff8aba07b32e148659b13f0637fb2c372",
+ "metadata": {
+ "sourceVideoId": "65",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3973",
+ "versionId": "535",
+ "code": "DH_34129B61FA1F4E628AF295E3EF714364",
+ "name": "重型支援桥前泵换件修复 · 2 关闭液压油箱出油口一号球阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/777c7c6f21c1108b1cf6a3e4681a7728.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 266042,
+ "sha256": "eab74c71b3be41e3c7563a4a36c75e3f61e5ad4a5ca032eab051844ca10943fe",
+ "metadata": {
+ "sourceVideoId": "66",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3974",
+ "versionId": "535",
+ "code": "DH_533EAE94D45D49A2BECD7E24E48835E6",
+ "name": "重型支援桥前泵换件修复 · 3 拆开并包扎进出油管",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/d974de975087ad6848689f4de8bb8597.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 474207,
+ "sha256": "63765c1da028750da4063a9d27c2211e592325165213d667c6592890cde982f0",
+ "metadata": {
+ "sourceVideoId": "67",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3975",
+ "versionId": "535",
+ "code": "DH_787B4C212CF644AE9A3D8D49DEDCB65E",
+ "name": "重型支援桥前泵换件修复 · 4 拆下四个安装螺栓",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/b8fee91715ad1fa277e03a460825ec01.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 275821,
+ "sha256": "e5b743ebe6fad8f7b614b11aea9d611fda877b02d9c31a8d67cabd41249327fe",
+ "metadata": {
+ "sourceVideoId": "68",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3976",
+ "versionId": "535",
+ "code": "DH_5672FD367E8F41A5A026E3C68E8C8726",
+ "name": "重型支援桥前泵换件修复 · 5 取下旧前泵",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/c3ef57b3d671acb6cfb0e7e039e86652.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 109215,
+ "sha256": "25ce8b12c5e17a2029d04a20fd53d270eed3904f50a4d7ea63bc83e33e18bd51",
+ "metadata": {
+ "sourceVideoId": "69",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3977",
+ "versionId": "535",
+ "code": "DH_C0E73EC20FD44C608A795A03DE4F7401",
+ "name": "重型支援桥前泵换件修复 · 6 修裁牛皮纸",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/7cc90bc260c6e4be30daaea3d9dfc446.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 246468,
+ "sha256": "db8bae8bfbde4f6e6dacb645eb2652f355f3b754a73012aaec3afee0e62ab9e8",
+ "metadata": {
+ "sourceVideoId": "70",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3978",
+ "versionId": "535",
+ "code": "DH_17FAC41643804A22A8B71A2FF8DCBC28",
+ "name": "重型支援桥前泵换件修复 · 7 放置牛皮纸垫",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/37e9c868094f42d56db8540f01317bf2.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 203299,
+ "sha256": "56ece26b2bab4af67bd59f88a3f4d1b08bfcdd083f423300d8d88f4ff4cae84b",
+ "metadata": {
+ "sourceVideoId": "71",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3979",
+ "versionId": "535",
+ "code": "DH_2284ABD91F544E2EB7799E9FA1C4BCF6",
+ "name": "重型支援桥前泵换件修复 · 8 安装新液压泵",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/8f14a7af1d794cef6f9858e8244e75a5.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 191600,
+ "sha256": "1b8f68d21c2300b2bba451f5e22cbaafd6f2dcd0bf0d213c05a4caad53ce0ef0",
+ "metadata": {
+ "sourceVideoId": "72",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3980",
+ "versionId": "535",
+ "code": "DH_BF468C49DDCB462E8E2C75CF8C6BD172",
+ "name": "重型支援桥前泵换件修复 · 9 向新泵加注液压油",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/363657dd4bc2b0e2809cd52faca8458c.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 443419,
+ "sha256": "095363c1f6be506fa3377330abbf88050dc9ffdd8dac07eb2c5476ea4ec32abe",
+ "metadata": {
+ "sourceVideoId": "73",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3981",
+ "versionId": "535",
+ "code": "DH_88908FEBE6054EE99087F8653A8C5FAA",
+ "name": "重型支援桥前泵换件修复 · 10 恢复进出油管连接",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/afe798b60bdea1f35f5b09d104205bad.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 219713,
+ "sha256": "eba4316082aa74841fe07f82c644484630efac95228a9b919b1d5348f76d06d8",
+ "metadata": {
+ "sourceVideoId": "74",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3982",
+ "versionId": "535",
+ "code": "DH_4D873387CF324AAF9C6D3BE1A72C247E",
+ "name": "重型支援桥前泵换件修复 · 11 启动设备试验",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/56a8a5cabf17265e7e64243e25e20dc5.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 246099,
+ "sha256": "4fed628e2847089de8882bb29da648f5aa3c00acf696123c11e5e6c3d54a48bb",
+ "metadata": {
+ "sourceVideoId": "75",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/reports/bridge-new-models-006-008-20260917/before-project-441.json b/reports/bridge-new-models-006-008-20260917/before-project-441.json
new file mode 100644
index 0000000..0777126
--- /dev/null
+++ b/reports/bridge-new-models-006-008-20260917/before-project-441.json
@@ -0,0 +1,2923 @@
+{
+ "project": {
+ "id": "441",
+ "type": "TRAINING",
+ "code": "TRAINING-D63D50628DB64370",
+ "name": "重型支援桥平衡阀拆拼互换",
+ "description": "原稿:桥梁/文件2/9.jpg、10.jpg",
+ "categoryCode": "MAINTENANCE",
+ "trainingMode": "VIRTUAL",
+ "coverUri": "",
+ "status": "PUBLISHED",
+ "ownerUserId": "99",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "currentVersionId": "536",
+ "currentVersionNo": 4,
+ "currentVersionCode": "V4.0.0",
+ "publishedVersionId": "536",
+ "publishedTime": 1789398982,
+ "usageCount": 0,
+ "version": 8,
+ "addTime": 1789309632,
+ "updateTime": "2026-09-14T23:16:22",
+ "contentSummary": {
+ "schema": "digital-workshop-training-project",
+ "trainingMode": "VIRTUAL",
+ "stepCount": 16
+ },
+ "currentVersionStatus": "PUBLISHED",
+ "dependencyCount": 0,
+ "assetCount": 16,
+ "readCount": 0,
+ "downloadCount": 0
+ },
+ "currentVersion": {
+ "id": "536",
+ "projectId": "441",
+ "versionNo": 4,
+ "versionCode": "V4.0.0",
+ "status": "PUBLISHED",
+ "content": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥平衡阀拆拼互换",
+ "status": "published",
+ "trainingMode": "VIRTUAL",
+ "resources": {
+ "models": [
+ {
+ "id": "front-pump-step-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "name": "架桥车前泵互救操作整车模型",
+ "baseModelName": "架桥车前泵互救操作整车模型",
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "revision": 1,
+ "materialPreset": null,
+ "parts": [
+ {
+ "editorId": "",
+ "interactionId": "front-pump-hydraulic-pump",
+ "nodeName": "1液压泵",
+ "sourceNodeName": "1液压泵",
+ "nodePath": "",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-power-take-off",
+ "nodeName": "2取力器",
+ "sourceNodeName": "2取力器",
+ "nodePath": "",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-pto-switch",
+ "nodeName": "2取力器开关",
+ "sourceNodeName": "2取力器开关",
+ "nodePath": "",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-ball-valve-switch",
+ "nodeName": "3球阀开关",
+ "sourceNodeName": "3球阀开关",
+ "nodePath": "",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box",
+ "nodeName": "5辅助控制盒",
+ "sourceNodeName": "5辅助控制盒",
+ "nodePath": "",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "nodeName": "5辅助控制盒盖",
+ "sourceNodeName": "5辅助控制盒盖",
+ "nodePath": "",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-rescue-switch",
+ "nodeName": "5互救开关",
+ "sourceNodeName": "5互救开关",
+ "nodePath": "",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "animations": []
+ },
+ "task": {
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "code": "TR-FRONT-PUMP-RESCUE-001",
+ "title": "重型支援桥平衡阀拆拼互换",
+ "categoryId": "minor-repair",
+ "difficulty": "标准",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "image": "/models/step-model-front-pump-thumb.png",
+ "equipment": "架桥车",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ]
+ },
+ "scenario": {
+ "id": "front-pump-rescue-scenario",
+ "publishedSceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "publishedSceneVersion": "1.0",
+ "baseVisualKey": "front-pump-rescue",
+ "visualKey": "front-pump-rescue",
+ "environmentName": "架桥车互救操作训练场",
+ "sceneLayout": "架桥车整车操作位",
+ "equipmentState": "整车模型 · 补充拆装件为操作示意",
+ "tools": [],
+ "faults": [],
+ "environment": {
+ "type": "outdoor",
+ "mode": "builtin",
+ "sourceName": "内置架桥车互救操作训练场",
+ "resourceUrl": "",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "sceneResource": {
+ "sceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "version": "1.0",
+ "sourceKind": "published",
+ "status": "已发布",
+ "name": "架桥车前泵故障互救处置训练场景",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "objectCount": 2,
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "1.0",
+ "name": "重型支援桥平衡阀拆拼互换",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "environment": {
+ "presetId": "outdoor-1",
+ "type": "outdoor"
+ },
+ "rendering": {
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 70,
+ "far": 240
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.1,
+ "far": 800,
+ "position": [
+ 11,
+ 8,
+ 16
+ ],
+ "target": [
+ 0,
+ 1.5,
+ 2
+ ]
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ]
+ },
+ "assetReferences": [
+ {
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 32195288,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "training-content"
+ }
+ ]
+ },
+ "accent": "#2d86d8",
+ "background": 11062241,
+ "fog": 11062241,
+ "ground": 7110499,
+ "camera": {
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ },
+ "retainStoredParts": true,
+ "sceneTags": [
+ "真实整车步骤模型",
+ "前泵故障互救",
+ "机构顺序操作"
+ ],
+ "sensorFeeds": [],
+ "name": "重型支援桥平衡阀拆拼互换",
+ "title": "重型支援桥平衡阀拆拼互换",
+ "operableParts": [
+ "bridge-small-cloth",
+ "bridge-small-pipe",
+ "bridge-small-bag",
+ "bridge-small-bolt-1",
+ "bridge-small-bolt-2",
+ "bridge-small-bolt-3",
+ "bridge-small-bolt-4",
+ "bridge-small-valve",
+ "bridge-small-plug-1",
+ "bridge-small-plug-2",
+ "bridge-small-seat",
+ "bridge-large-cloth",
+ "bridge-large-pipe",
+ "bridge-large-bag",
+ "bridge-large-bolt-1",
+ "bridge-large-bolt-2",
+ "bridge-large-bolt-3",
+ "bridge-large-bolt-4",
+ "bridge-large-valve",
+ "bridge-large-plug-1",
+ "bridge-large-plug-2",
+ "bridge-large-seat"
+ ]
+ },
+ "tools": [],
+ "faults": [],
+ "steps": [
+ {
+ "id": "BRIDGE-STEP-1",
+ "stepCode": "BRIDGE-STEP-1",
+ "actionCode": "COMPLETE_BRIDGE-STEP-1",
+ "number": 1,
+ "title": "清洗小腔平衡阀",
+ "targetId": "bridge-small-cloth",
+ "targetName": "清洗并擦净阀体",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "guidance": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "warning": "",
+ "success": "清洗小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-cloth",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-small-cloth",
+ "kind": "identify",
+ "directionHint": "清洗并擦净阀体",
+ "effects": [
+ {
+ "targetId": "bridge-small-cloth",
+ "offset": [
+ 0.7,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-small-valve",
+ "color": 8492701
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,清洗小腔平衡阀。用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_76F80444AA9C4C3183A0EEDF6E655C25",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "76",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 1 清洗小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-2",
+ "stepCode": "BRIDGE-STEP-2",
+ "actionCode": "COMPLETE_BRIDGE-STEP-2",
+ "number": 2,
+ "title": "拆开小腔控制油口管路",
+ "targetId": "bridge-small-pipe",
+ "targetName": "拆开控制油管",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "guidance": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "warning": "",
+ "success": "拆开小腔控制油口管路:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-pipe",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-pipe",
+ "kind": "identify",
+ "directionHint": "拆开控制油管",
+ "effects": [
+ {
+ "targetId": "bridge-small-pipe",
+ "offset": [
+ 0.55,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bag",
+ "kind": "identify",
+ "directionHint": "封袋包扎管口",
+ "effects": [
+ {
+ "targetId": "bridge-small-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,拆开小腔控制油口管路。用十九号开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_EAF5F0A89D454E6FBAFB061C93D2F760",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "77",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 2 拆开小腔控制油口管路",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-3",
+ "stepCode": "BRIDGE-STEP-3",
+ "actionCode": "COMPLETE_BRIDGE-STEP-3",
+ "number": 3,
+ "title": "拆下小腔平衡阀",
+ "targetId": "bridge-small-bolt-1",
+ "targetName": "拆下第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "guidance": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "warning": "",
+ "success": "拆下小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-valve",
+ "kind": "identify",
+ "directionHint": "取下平衡阀",
+ "effects": [
+ {
+ "targetId": "bridge-small-valve",
+ "offset": [
+ 0,
+ 0,
+ 1.2
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,拆下小腔平衡阀。用八号内六角扳手拆下安装螺栓,取下平衡阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_981034D69E3047C6B9D1DAE9BBF4F7D4",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "78",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 3 拆下小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-4",
+ "stepCode": "BRIDGE-STEP-4",
+ "actionCode": "COMPLETE_BRIDGE-STEP-4",
+ "number": 4,
+ "title": "封堵小腔油口",
+ "targetId": "bridge-small-plug-1",
+ "targetName": "封堵第 1 个油堵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "guidance": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "warning": "",
+ "success": "封堵小腔油口:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-plug-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-plug-1",
+ "kind": "identify",
+ "directionHint": "封堵第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-plug-2",
+ "kind": "identify",
+ "directionHint": "封堵第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-seat",
+ "kind": "identify",
+ "directionHint": "擦净阀座结合面",
+ "effects": [
+ {
+ "targetId": "bridge-small-seat",
+ "color": 12965080
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,封堵小腔油口。用两个油堵封住两个油口,擦净阀座结合面。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_60D40306A9E74E96ADD7641932934BE4",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "79",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 4 封堵小腔油口",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-5",
+ "stepCode": "BRIDGE-STEP-5",
+ "actionCode": "COMPLETE_BRIDGE-STEP-5",
+ "number": 5,
+ "title": "清洗大腔平衡阀",
+ "targetId": "bridge-large-cloth",
+ "targetName": "清洗并擦净阀体",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "guidance": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "warning": "",
+ "success": "清洗大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-cloth",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-large-cloth",
+ "kind": "identify",
+ "directionHint": "清洗并擦净阀体",
+ "effects": [
+ {
+ "targetId": "bridge-large-cloth",
+ "offset": [
+ 0.7,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-large-valve",
+ "color": 8492701
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,清洗大腔平衡阀。用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_A6EFEC7D339E4BA8994C525CA3709E2E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "80",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 5 清洗大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-6",
+ "stepCode": "BRIDGE-STEP-6",
+ "actionCode": "COMPLETE_BRIDGE-STEP-6",
+ "number": 6,
+ "title": "拆开大腔控制油口管路",
+ "targetId": "bridge-large-pipe",
+ "targetName": "拆开控制油管",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "guidance": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "warning": "",
+ "success": "拆开大腔控制油口管路:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-pipe",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-pipe",
+ "kind": "identify",
+ "directionHint": "拆开控制油管",
+ "effects": [
+ {
+ "targetId": "bridge-large-pipe",
+ "offset": [
+ 0.55,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bag",
+ "kind": "identify",
+ "directionHint": "封袋包扎管口",
+ "effects": [
+ {
+ "targetId": "bridge-large-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第6步,拆开大腔控制油口管路。用十九号开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D9E1BAFBD89D48019B9445B2A5752E68",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "81",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 6 拆开大腔控制油口管路",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-7",
+ "stepCode": "BRIDGE-STEP-7",
+ "actionCode": "COMPLETE_BRIDGE-STEP-7",
+ "number": 7,
+ "title": "拆下大腔平衡阀",
+ "targetId": "bridge-large-bolt-1",
+ "targetName": "拆下第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "guidance": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "warning": "",
+ "success": "拆下大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-valve",
+ "kind": "identify",
+ "directionHint": "取下平衡阀",
+ "effects": [
+ {
+ "targetId": "bridge-large-valve",
+ "offset": [
+ 0,
+ 0,
+ 1.2
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第7步,拆下大腔平衡阀。用八号内六角扳手拆下安装螺栓,取下平衡阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_E83DDAB19F774A418C82EBA7E8EDCF8A",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "82",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 7 拆下大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-8",
+ "stepCode": "BRIDGE-STEP-8",
+ "actionCode": "COMPLETE_BRIDGE-STEP-8",
+ "number": 8,
+ "title": "封堵大腔油口",
+ "targetId": "bridge-large-plug-1",
+ "targetName": "封堵第 1 个油堵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "guidance": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "warning": "",
+ "success": "封堵大腔油口:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-plug-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-plug-1",
+ "kind": "identify",
+ "directionHint": "封堵第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-plug-2",
+ "kind": "identify",
+ "directionHint": "封堵第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-seat",
+ "kind": "identify",
+ "directionHint": "擦净阀座结合面",
+ "effects": [
+ {
+ "targetId": "bridge-large-seat",
+ "color": 12965080
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第8步,封堵大腔油口。用两个油堵封住两个油口,擦净阀座结合面。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_4FE31068F3EB410BAC72E19F1D1BAF49",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "83",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 8 封堵大腔油口",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-9",
+ "stepCode": "BRIDGE-STEP-9",
+ "actionCode": "COMPLETE_BRIDGE-STEP-9",
+ "number": 9,
+ "title": "准备安装大腔平衡阀",
+ "targetId": "bridge-large-seat",
+ "targetName": "擦净安装结合面",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "guidance": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "warning": "",
+ "success": "准备安装大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-seat",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-seat",
+ "kind": "identify",
+ "directionHint": "擦净安装结合面",
+ "effects": [
+ {
+ "targetId": "bridge-large-seat",
+ "color": 14477797
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-plug-1",
+ "kind": "identify",
+ "directionHint": "取下第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-1",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-plug-2",
+ "kind": "identify",
+ "directionHint": "取下第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-2",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第9步,准备安装大腔平衡阀。擦净平衡阀及阀座结合面,取下两个油堵。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D0A3CAC5278C4A57AC9BEF13DA2690BC",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "84",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 9 准备安装大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-10",
+ "stepCode": "BRIDGE-STEP-10",
+ "actionCode": "COMPLETE_BRIDGE-STEP-10",
+ "number": 10,
+ "title": "安装大腔平衡阀",
+ "targetId": "bridge-small-valve",
+ "targetName": "将互换平衡阀装到阀座",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "guidance": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "warning": "",
+ "success": "安装大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-valve",
+ "kind": "identify",
+ "directionHint": "将互换平衡阀装到阀座",
+ "effects": [
+ {
+ "targetId": "bridge-small-valve",
+ "offset": [
+ 3.2,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第10步,安装大腔平衡阀。将平衡阀放置于阀座上,用八号内六角扳手安装四个安装螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_0F40DAF3E28F4FA088EA943D9470CAA7",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "85",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 10 安装大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-11",
+ "stepCode": "BRIDGE-STEP-11",
+ "actionCode": "COMPLETE_BRIDGE-STEP-11",
+ "number": 11,
+ "title": "核对大腔控制油口管路连接",
+ "targetId": "bridge-large-bag",
+ "targetName": "取下封口袋",
+ "mode": "measure",
+ "interaction": "mechanism-operation",
+ "instruction": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "guidance": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "warning": "请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "success": "核对大腔控制油口管路连接:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-bag",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-bag",
+ "kind": "identify",
+ "directionHint": "取下封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-large-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-pipe",
+ "kind": "identify",
+ "directionHint": "按记录的处理依据连接管路",
+ "effects": [
+ {
+ "targetId": "bridge-large-pipe",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第11步,核对大腔控制油口管路连接。原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用十九号开口扳手拆开管路并包扎”的相反描述。请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_F6427532AF5F40348CEB154F031F2AED",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "86",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 11 核对大腔控制油口管路连接",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-12",
+ "stepCode": "BRIDGE-STEP-12",
+ "actionCode": "COMPLETE_BRIDGE-STEP-12",
+ "number": 12,
+ "title": "紧固大腔阀体连接螺栓",
+ "targetId": "bridge-large-bolt-1",
+ "targetName": "紧固第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "guidance": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "warning": "",
+ "success": "紧固大腔阀体连接螺栓:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第12步,紧固大腔阀体连接螺栓。用内六角扳手拧紧四个阀体连接螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_F601DB08C8D44934AD3A1B1582E804DB",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "87",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 12 紧固大腔阀体连接螺栓",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-13",
+ "stepCode": "BRIDGE-STEP-13",
+ "actionCode": "COMPLETE_BRIDGE-STEP-13",
+ "number": 13,
+ "title": "准备安装小腔平衡阀",
+ "targetId": "bridge-small-seat",
+ "targetName": "擦净安装结合面",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "guidance": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "warning": "",
+ "success": "准备安装小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-seat",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-seat",
+ "kind": "identify",
+ "directionHint": "擦净安装结合面",
+ "effects": [
+ {
+ "targetId": "bridge-small-seat",
+ "color": 14477797
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-plug-1",
+ "kind": "identify",
+ "directionHint": "取下第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-1",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-plug-2",
+ "kind": "identify",
+ "directionHint": "取下第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-2",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第13步,准备安装小腔平衡阀。擦净平衡阀及阀座结合面,取下两个油堵。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_B1BBA42CE5F346228B6B39A51F190CB3",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "88",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 13 准备安装小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-14",
+ "stepCode": "BRIDGE-STEP-14",
+ "actionCode": "COMPLETE_BRIDGE-STEP-14",
+ "number": 14,
+ "title": "安装小腔平衡阀",
+ "targetId": "bridge-large-valve",
+ "targetName": "将互换平衡阀装到阀座",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "guidance": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "warning": "",
+ "success": "安装小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-valve",
+ "kind": "identify",
+ "directionHint": "将互换平衡阀装到阀座",
+ "effects": [
+ {
+ "targetId": "bridge-large-valve",
+ "offset": [
+ -3.2,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第14步,安装小腔平衡阀。将平衡阀放置于阀座上,用八号内六角扳手安装四个安装螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_2BCD762C693242FF8DA420BD9A5D4DF9",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "89",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 14 安装小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-15",
+ "stepCode": "BRIDGE-STEP-15",
+ "actionCode": "COMPLETE_BRIDGE-STEP-15",
+ "number": 15,
+ "title": "核对小腔控制油口管路连接",
+ "targetId": "bridge-small-bag",
+ "targetName": "取下封口袋",
+ "mode": "measure",
+ "interaction": "mechanism-operation",
+ "instruction": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "guidance": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "warning": "请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "success": "核对小腔控制油口管路连接:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-bag",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-bag",
+ "kind": "identify",
+ "directionHint": "取下封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-small-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-pipe",
+ "kind": "identify",
+ "directionHint": "按记录的处理依据连接管路",
+ "effects": [
+ {
+ "targetId": "bridge-small-pipe",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第15步,核对小腔控制油口管路连接。原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用十九号开口扳手拆开管路并包扎”的相反描述。请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_5F8309BF74344C568C2C9EEFDD9E74BF",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "90",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 15 核对小腔控制油口管路连接",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-16",
+ "stepCode": "BRIDGE-STEP-16",
+ "actionCode": "COMPLETE_BRIDGE-STEP-16",
+ "number": 16,
+ "title": "紧固小腔阀体连接螺栓",
+ "targetId": "bridge-small-bolt-1",
+ "targetName": "紧固第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "guidance": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "warning": "",
+ "success": "紧固小腔阀体连接螺栓:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第16步,紧固小腔阀体连接螺栓。用内六角扳手拧紧四个阀体连接螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D525E35EDA12402DA13302C2B3874CC3",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "91",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 16 紧固小腔阀体连接螺栓",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ }
+ ],
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "totalScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-balance-valve-swap",
+ "scriptVersion": "3"
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/9.jpg、10.jpg"
+ },
+ "changeSummary": "39段数字人视频讲解;原语音保留可切换",
+ "checksum": "7756b28145b96ab712dc15dc4d6234dfd6e6278e726f69b564691ee4c8ee9b8b",
+ "createdByUserId": "99",
+ "createdByName": "内部维护",
+ "publishedByUserId": "99",
+ "publishedByName": "内部维护",
+ "publishedTime": 1789398982,
+ "version": 2,
+ "addTime": 1789398981,
+ "updateTime": "2026-09-14T23:16:22",
+ "dependencies": [],
+ "assets": [
+ {
+ "id": "3983",
+ "versionId": "536",
+ "code": "DH_76F80444AA9C4C3183A0EEDF6E655C25",
+ "name": "重型支援桥平衡阀拆拼互换 · 1 清洗小腔平衡阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/bbb7cb4c0937594e06facdeb4265bdfb.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 380363,
+ "sha256": "2e71eb4894d380917abb95245d3299e7c0b345c76a0a1df92610ba97c9d95e91",
+ "metadata": {
+ "sourceVideoId": "76",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3984",
+ "versionId": "536",
+ "code": "DH_EAF5F0A89D454E6FBAFB061C93D2F760",
+ "name": "重型支援桥平衡阀拆拼互换 · 2 拆开小腔控制油口管路",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/2b3185dc7f0d5cb857c3682ab7773aa1.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 286904,
+ "sha256": "a1abca193097f47595f32b71a02f4101a02005d0ff67cd4932fa728403d1235b",
+ "metadata": {
+ "sourceVideoId": "77",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3985",
+ "versionId": "536",
+ "code": "DH_981034D69E3047C6B9D1DAE9BBF4F7D4",
+ "name": "重型支援桥平衡阀拆拼互换 · 3 拆下小腔平衡阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/a9d362f15a10a6ec05d43bfc37dfc142.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 386424,
+ "sha256": "46f07ce2308478ba60b58d4f6ec600773632193ffaa83f42ed52c71b660d4da5",
+ "metadata": {
+ "sourceVideoId": "78",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3986",
+ "versionId": "536",
+ "code": "DH_60D40306A9E74E96ADD7641932934BE4",
+ "name": "重型支援桥平衡阀拆拼互换 · 4 封堵小腔油口",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/7315f5118bd573be864686aa786cf458.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 348426,
+ "sha256": "7fdab9117f713bd3e01aa1d956bfdbc4601df9f5b166b4a05488c1181ba12211",
+ "metadata": {
+ "sourceVideoId": "79",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3987",
+ "versionId": "536",
+ "code": "DH_A6EFEC7D339E4BA8994C525CA3709E2E",
+ "name": "重型支援桥平衡阀拆拼互换 · 5 清洗大腔平衡阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/c7e7402995b868a26a11f04255624ac9.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 242429,
+ "sha256": "5a2649d18c9cef179863c09cf8179668b34f1d253d1b340b3775509bdd057433",
+ "metadata": {
+ "sourceVideoId": "80",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3988",
+ "versionId": "536",
+ "code": "DH_D9E1BAFBD89D48019B9445B2A5752E68",
+ "name": "重型支援桥平衡阀拆拼互换 · 6 拆开大腔控制油口管路",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/d56936153f2455950a527c7b1b193cc1.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 299444,
+ "sha256": "8c3679991ac10e63383a40c2deffb1a9fdb5b79cbb692db64fda410e2b13b923",
+ "metadata": {
+ "sourceVideoId": "81",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3989",
+ "versionId": "536",
+ "code": "DH_E83DDAB19F774A418C82EBA7E8EDCF8A",
+ "name": "重型支援桥平衡阀拆拼互换 · 7 拆下大腔平衡阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/84a9178a525514f108f353c518765957.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 241834,
+ "sha256": "d8e749aee075d99707af8b1a6b9a6700f7b0349c19e9bbd5957f55f43e9c50af",
+ "metadata": {
+ "sourceVideoId": "82",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3990",
+ "versionId": "536",
+ "code": "DH_4FE31068F3EB410BAC72E19F1D1BAF49",
+ "name": "重型支援桥平衡阀拆拼互换 · 8 封堵大腔油口",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/323c01c7d4438be382e33b72c1acfdef.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 208428,
+ "sha256": "3d3c67dfa76d776bcafee0e35412de7c44190b74776f93d426e6d9947fd7bb2c",
+ "metadata": {
+ "sourceVideoId": "83",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3991",
+ "versionId": "536",
+ "code": "DH_D0A3CAC5278C4A57AC9BEF13DA2690BC",
+ "name": "重型支援桥平衡阀拆拼互换 · 9 准备安装大腔平衡阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/f76860dcb1df69933366b58a0a4acf49.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 241840,
+ "sha256": "bd890674565a670e7994a60be84847b692a8b4820995c3063a497d8cc7eddf7e",
+ "metadata": {
+ "sourceVideoId": "84",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3992",
+ "versionId": "536",
+ "code": "DH_0F40DAF3E28F4FA088EA943D9470CAA7",
+ "name": "重型支援桥平衡阀拆拼互换 · 10 安装大腔平衡阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/679a321b725c5069ff3c279bdb5d4e74.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 503224,
+ "sha256": "ed2ee749404179d67831c8f0c46cae21643c97700f431b5cb089f99644fb7d27",
+ "metadata": {
+ "sourceVideoId": "85",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3993",
+ "versionId": "536",
+ "code": "DH_F6427532AF5F40348CEB154F031F2AED",
+ "name": "重型支援桥平衡阀拆拼互换 · 11 核对大腔控制油口管路连接",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/ff6024de51727d348cfb8d889bea860e.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 689467,
+ "sha256": "e90845dc69d890c341d682f5d36b8880e83fe26bdad34fd8573ee0560d36d287",
+ "metadata": {
+ "sourceVideoId": "86",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3994",
+ "versionId": "536",
+ "code": "DH_F601DB08C8D44934AD3A1B1582E804DB",
+ "name": "重型支援桥平衡阀拆拼互换 · 12 紧固大腔阀体连接螺栓",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/bd49e1bbbbd6ad7f351cf2c6912934ff.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 360250,
+ "sha256": "133f1f65d5d88040d4ce758fdb7c0512c44d32f2affc5b0ce09f402f9fd687a5",
+ "metadata": {
+ "sourceVideoId": "87",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3995",
+ "versionId": "536",
+ "code": "DH_B1BBA42CE5F346228B6B39A51F190CB3",
+ "name": "重型支援桥平衡阀拆拼互换 · 13 准备安装小腔平衡阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/f6fdebd35ca690c3d05b74f55bd65605.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 242849,
+ "sha256": "7cf538b8754ccb0ada36395919cb9653d804717ec6a4d339dc8c62572697f27a",
+ "metadata": {
+ "sourceVideoId": "88",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3996",
+ "versionId": "536",
+ "code": "DH_2BCD762C693242FF8DA420BD9A5D4DF9",
+ "name": "重型支援桥平衡阀拆拼互换 · 14 安装小腔平衡阀",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/f7cce5ab61c4458386a86729a97637a9.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 318525,
+ "sha256": "456843aa826f489cde689a55d4ffb3e3759b7f7464cc1fbdde6d7d7d216ef31f",
+ "metadata": {
+ "sourceVideoId": "89",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3997",
+ "versionId": "536",
+ "code": "DH_5F8309BF74344C568C2C9EEFDD9E74BF",
+ "name": "重型支援桥平衡阀拆拼互换 · 15 核对小腔控制油口管路连接",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/c65892e63c10c2d1283cfab5c2e83481.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 1093064,
+ "sha256": "2a47835ce52868b09ecec6fe380098b412d29a8c2806519a54d15396e3473b57",
+ "metadata": {
+ "sourceVideoId": "90",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ },
+ {
+ "id": "3998",
+ "versionId": "536",
+ "code": "DH_D525E35EDA12402DA13302C2B3874CC3",
+ "name": "重型支援桥平衡阀拆拼互换 · 16 紧固小腔阀体连接螺栓",
+ "type": "VIDEO",
+ "storageUri": "fsvc://unreal-tran/video/2026/09/14/f13bb21ae4e501ce3546122f2412f2aa.mp4",
+ "mimeType": "video/mp4",
+ "sizeBytes": 216175,
+ "sha256": "2e22f597ff2808e1b9e600c46c319f82cd91e2be0063bfc817c94d672c786213",
+ "metadata": {
+ "sourceVideoId": "91",
+ "sourceSystem": "DIGITAL_HUMAN",
+ "sourceAppId": "AP_238179E0A10F97927EA49FA3",
+ "boxCount": 4,
+ "majorBrand": "isom",
+ "format": "MP4",
+ "originalFilename": "digital-human.mp4",
+ "integrity": "sha256"
+ },
+ "status": "READY",
+ "sortOrder": 0
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/reports/bridge-new-models-006-008-20260917/before-task-87.json b/reports/bridge-new-models-006-008-20260917/before-task-87.json
new file mode 100644
index 0000000..73da43e
--- /dev/null
+++ b/reports/bridge-new-models-006-008-20260917/before-task-87.json
@@ -0,0 +1,1263 @@
+{
+ "id": "87",
+ "code": "TASK-VIRTUAL-006",
+ "name": "重型支援桥液压泵应急替代",
+ "description": "原稿:桥梁/文件2/5.jpg、6.jpg",
+ "channel": "VIRTUAL",
+ "assignmentKind": "TRAINING",
+ "executionMode": "PRACTICE",
+ "audienceType": "COMMON",
+ "collaborationMode": "INDIVIDUAL",
+ "digitalHumanAllowed": false,
+ "digitalInstructorAgentSlug": "",
+ "digitalInstructorAgentName": "",
+ "digitalInstructorKnowledgeSource": "AGENT",
+ "contentProjectId": "439",
+ "contentVersionId": "534",
+ "definitionSnapshot": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥液压泵应急替代",
+ "status": "published",
+ "trainingMode": "VIRTUAL",
+ "resources": {
+ "models": [
+ {
+ "id": "front-pump-step-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "name": "架桥车前泵互救操作整车模型",
+ "baseModelName": "架桥车前泵互救操作整车模型",
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "revision": 1,
+ "materialPreset": null,
+ "parts": [
+ {
+ "editorId": "",
+ "interactionId": "front-pump-hydraulic-pump",
+ "nodeName": "1液压泵",
+ "sourceNodeName": "1液压泵",
+ "nodePath": "",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-power-take-off",
+ "nodeName": "2取力器",
+ "sourceNodeName": "2取力器",
+ "nodePath": "",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-pto-switch",
+ "nodeName": "2取力器开关",
+ "sourceNodeName": "2取力器开关",
+ "nodePath": "",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-ball-valve-switch",
+ "nodeName": "3球阀开关",
+ "sourceNodeName": "3球阀开关",
+ "nodePath": "",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box",
+ "nodeName": "5辅助控制盒",
+ "sourceNodeName": "5辅助控制盒",
+ "nodePath": "",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "nodeName": "5辅助控制盒盖",
+ "sourceNodeName": "5辅助控制盒盖",
+ "nodePath": "",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-rescue-switch",
+ "nodeName": "5互救开关",
+ "sourceNodeName": "5互救开关",
+ "nodePath": "",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "animations": []
+ },
+ "task": {
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "code": "TR-FRONT-PUMP-RESCUE-001",
+ "title": "重型支援桥液压泵应急替代",
+ "categoryId": "minor-repair",
+ "difficulty": "标准",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "image": "/models/step-model-front-pump-thumb.png",
+ "equipment": "架桥车",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ]
+ },
+ "scenario": {
+ "id": "front-pump-rescue-scenario",
+ "publishedSceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "publishedSceneVersion": "1.0",
+ "baseVisualKey": "front-pump-rescue",
+ "visualKey": "front-pump-rescue",
+ "environmentName": "重型支援桥液压泵应急替代",
+ "sceneLayout": "架桥车整车操作位",
+ "equipmentState": "整车模型 · 补充拆装件为操作示意",
+ "tools": [],
+ "faults": [],
+ "environment": {
+ "type": "outdoor",
+ "mode": "builtin",
+ "sourceName": "桥梁脚本三维训练场",
+ "resourceUrl": "",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "sceneResource": {
+ "sceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "version": "1.0",
+ "sourceKind": "published",
+ "status": "已发布",
+ "name": "重型支援桥液压泵应急替代",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "objectCount": 2,
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "1.0",
+ "name": "重型支援桥液压泵应急替代",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "environment": {
+ "presetId": "outdoor-1",
+ "type": "outdoor"
+ },
+ "rendering": {
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 70,
+ "far": 240
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.1,
+ "far": 800,
+ "position": [
+ 11,
+ 8,
+ 16
+ ],
+ "target": [
+ 0,
+ 1.5,
+ 2
+ ]
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ]
+ },
+ "assetReferences": [
+ {
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 32195288,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "training-content"
+ }
+ ]
+ },
+ "accent": "#2d86d8",
+ "background": 11062241,
+ "fog": 11062241,
+ "ground": 7110499,
+ "camera": {
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ },
+ "retainStoredParts": true,
+ "sceneTags": [
+ "整车模型",
+ "补充操作示意",
+ "机构顺序操作"
+ ],
+ "sensorFeeds": [],
+ "name": "重型支援桥液压泵应急替代",
+ "title": "重型支援桥液压泵应急替代",
+ "operableParts": [
+ "bridge-engine",
+ "front-pump-pto-switch",
+ "bridge-hose-a",
+ "bridge-hose-b",
+ "bridge-return-valve",
+ "front-pump-aux-control-box-cover",
+ "front-pump-rescue-switch",
+ "front-pump-ball-valve-switch",
+ "bridge-support-pto",
+ "bridge-supply",
+ "bridge-normal-control"
+ ]
+ },
+ "tools": [],
+ "faults": [],
+ "steps": [
+ {
+ "id": "BRIDGE-STEP-1",
+ "stepCode": "BRIDGE-STEP-1",
+ "actionCode": "COMPLETE_BRIDGE-STEP-1",
+ "number": 1,
+ "title": "保持架桥车运行并断开取力器",
+ "targetId": "bridge-engine",
+ "targetName": "保持架桥车发动机运行",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "保持架桥车发动机运转,确保架桥车取力器处于断开状态。",
+ "guidance": "保持架桥车发动机运转,确保架桥车取力器处于断开状态。",
+ "warning": "",
+ "success": "保持架桥车运行并断开取力器:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-engine",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "保持架桥车发动机运行",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 2209160
+ }
+ ]
+ },
+ {
+ "targetId": "front-pump-pto-switch",
+ "kind": "rotate",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": -30,
+ "toleranceDegrees": 8,
+ "directionHint": "断开架桥车取力器"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,保持架桥车运行并断开取力器。保持架桥车发动机运转,确保架桥车取力器处于断开状态。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_5AEA5274E6664D43B8C53F55859D5717",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "58",
+ "videoName": "重型支援桥液压泵应急替代 · 1 保持架桥车运行并断开取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-2",
+ "stepCode": "BRIDGE-STEP-2",
+ "actionCode": "COMPLETE_BRIDGE-STEP-2",
+ "number": 2,
+ "title": "连接两车液压软管",
+ "targetId": "bridge-hose-a",
+ "targetName": "连接架桥车快速接头",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "连接支援车与架桥车液压软管。架桥车快接接头位于液压油箱右侧;支援车快接接头位于驾驶室外右下方。",
+ "guidance": "连接支援车与架桥车液压软管。架桥车快接接头位于液压油箱右侧;支援车快接接头位于驾驶室外右下方。",
+ "warning": "",
+ "success": "连接两车液压软管:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-hose-a",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-hose-a",
+ "kind": "identify",
+ "directionHint": "连接架桥车快速接头",
+ "effects": [
+ {
+ "targetId": "bridge-hose-a",
+ "offset": [
+ 0,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-hose-line",
+ "visible": true
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-hose-b",
+ "kind": "identify",
+ "directionHint": "连接保障车快速接头",
+ "effects": [
+ {
+ "targetId": "bridge-hose-b",
+ "offset": [
+ 0,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-return-line",
+ "visible": true
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,连接两车液压软管。连接支援车与架桥车液压软管。架桥车快接接头位于液压油箱右侧;支援车快接接头位于驾驶室外右下方。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_B9F2CBFE36274528825899153DB98195",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "59",
+ "videoName": "重型支援桥液压泵应急替代 · 2 连接两车液压软管",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-3",
+ "stepCode": "BRIDGE-STEP-3",
+ "actionCode": "COMPLETE_BRIDGE-STEP-3",
+ "number": 3,
+ "title": "打开支援车回油截止阀",
+ "targetId": "bridge-return-valve",
+ "targetName": "打开保障车回油截止阀",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开支援车液压油箱快接接头处的回油截止阀。",
+ "guidance": "打开支援车液压油箱快接接头处的回油截止阀。",
+ "warning": "",
+ "success": "打开支援车回油截止阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-return-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "rotate",
+ "steps": [
+ {
+ "targetId": "bridge-return-valve",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "打开保障车回油截止阀"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,打开支援车回油截止阀。打开支援车液压油箱快接接头处的回油截止阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_983218ACA84345B5B032A5DFA8F08E4E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "60",
+ "videoName": "重型支援桥液压泵应急替代 · 3 打开支援车回油截止阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-4",
+ "stepCode": "BRIDGE-STEP-4",
+ "actionCode": "COMPLETE_BRIDGE-STEP-4",
+ "number": 4,
+ "title": "打开互救作业开关",
+ "targetId": "front-pump-aux-control-box-cover",
+ "targetName": "打开辅助控制盒盖",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开辅助控制盒上的“互救作业”开关。",
+ "guidance": "打开辅助控制盒上的“互救作业”开关。",
+ "warning": "",
+ "success": "打开互救作业开关:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-aux-control-box-cover",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "front-pump-aux-control-box-cover",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "deltaDegrees": 100,
+ "toleranceDegrees": 8,
+ "directionHint": "打开辅助控制盒盖"
+ },
+ {
+ "targetId": "front-pump-rescue-switch",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 8,
+ "directionHint": "打开互救作业开关"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,打开互救作业开关。打开辅助控制盒上的“互救作业”开关。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_AC0F121CD04B44B5A373BE82D5083AE1",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "61",
+ "videoName": "重型支援桥液压泵应急替代 · 4 打开互救作业开关",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-5",
+ "stepCode": "BRIDGE-STEP-5",
+ "actionCode": "COMPLETE_BRIDGE-STEP-5",
+ "number": 5,
+ "title": "打开滤油器出口连通球阀",
+ "targetId": "front-pump-ball-valve-switch",
+ "targetName": "打开滤油器出口连通球阀",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开两个输油滤油器出口处的连通球阀。",
+ "guidance": "打开两个输油滤油器出口处的连通球阀。",
+ "warning": "",
+ "success": "打开滤油器出口连通球阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-ball-valve-switch",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "rotate",
+ "steps": [
+ {
+ "targetId": "front-pump-ball-valve-switch",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "打开滤油器出口连通球阀"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,打开滤油器出口连通球阀。打开两个输油滤油器出口处的连通球阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_774F7400E0B54F4696EBDAD800A289C3",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "62",
+ "videoName": "重型支援桥液压泵应急替代 · 5 打开滤油器出口连通球阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-6",
+ "stepCode": "BRIDGE-STEP-6",
+ "actionCode": "COMPLETE_BRIDGE-STEP-6",
+ "number": 6,
+ "title": "接通支援车液压取力器",
+ "targetId": "bridge-support-pto",
+ "targetName": "接通保障车取力器",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "接通支援车液压系统取力器,向架桥车供油。",
+ "guidance": "接通支援车液压系统取力器,向架桥车供油。",
+ "warning": "",
+ "success": "接通支援车液压取力器:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-support-pto",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-support-pto",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 8,
+ "directionHint": "接通保障车取力器"
+ },
+ {
+ "targetId": "bridge-supply",
+ "kind": "identify",
+ "directionHint": "观察供油示意",
+ "effects": [
+ {
+ "targetId": "bridge-hose-line",
+ "color": 15312947
+ },
+ {
+ "targetId": "bridge-return-line",
+ "color": 3325905
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第6步,接通支援车液压取力器。接通支援车液压系统取力器,向架桥车供油。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_64D9ECF315DA41568D936CFEBF28E403",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "63",
+ "videoName": "重型支援桥液压泵应急替代 · 6 接通支援车液压取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-7",
+ "stepCode": "BRIDGE-STEP-7",
+ "actionCode": "COMPLETE_BRIDGE-STEP-7",
+ "number": 7,
+ "title": "按正常步骤操作架桥车",
+ "targetId": "bridge-normal-control",
+ "targetName": "操作正常作业控制手柄",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "原图只概括“按正常操作步骤操作架桥车”,没有展开后续作业。",
+ "guidance": "原图只概括“按正常操作步骤操作架桥车”,没有展开后续作业。",
+ "warning": "该项为原稿概括项,本预演不代表后续正常作业已经完成。",
+ "success": "按正常步骤操作架桥车:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-normal-control",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-normal-control",
+ "kind": "identify",
+ "directionHint": "操作正常作业控制手柄",
+ "effects": [
+ {
+ "targetId": "bridge-normal-control",
+ "offset": [
+ 0,
+ 0,
+ -0.25
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第7步,按正常步骤操作架桥车。原图只概括“按正常操作步骤操作架桥车”,没有展开后续作业。该项为原稿概括项,本预演不代表后续正常作业已经完成。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_356ADFCC874448D28ADB2DF8067582E8",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "64",
+ "videoName": "重型支援桥液压泵应急替代 · 7 按正常步骤操作架桥车",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ }
+ ],
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "totalScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-pump-substitute",
+ "scriptVersion": "3"
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/5.jpg、6.jpg"
+ },
+ "definitionChecksum": "3f01d880c16bf9f93dcf0ddd076d57d7d4dafb824d84e4278310d579e4cd9b58",
+ "ownerUserId": "99",
+ "ownerUsername": "root",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "departmentName": "",
+ "status": "PUBLISHED",
+ "scheduleStartAt": null,
+ "dueAt": null,
+ "publishedAt": 1789395441,
+ "withdrawnAt": 1789395440,
+ "archivedAt": null,
+ "lifecycleReason": "发布教学任务",
+ "version": 8,
+ "addTime": 1789309631,
+ "updateTime": "2026-09-13T22:27:12",
+ "serverNow": 1789657499,
+ "members": [],
+ "runCount": 0,
+ "pendingReviewCount": 0
+}
\ No newline at end of file
diff --git a/reports/bridge-new-models-006-008-20260917/before-task-88.json b/reports/bridge-new-models-006-008-20260917/before-task-88.json
new file mode 100644
index 0000000..8c6b922
--- /dev/null
+++ b/reports/bridge-new-models-006-008-20260917/before-task-88.json
@@ -0,0 +1,1820 @@
+{
+ "id": "88",
+ "code": "TASK-VIRTUAL-007",
+ "name": "重型支援桥前泵换件修复",
+ "description": "原稿:桥梁/文件2/7.jpg、8.jpg",
+ "channel": "VIRTUAL",
+ "assignmentKind": "TRAINING",
+ "executionMode": "PRACTICE",
+ "audienceType": "COMMON",
+ "collaborationMode": "INDIVIDUAL",
+ "digitalHumanAllowed": false,
+ "digitalInstructorAgentSlug": "",
+ "digitalInstructorAgentName": "",
+ "digitalInstructorKnowledgeSource": "AGENT",
+ "contentProjectId": "440",
+ "contentVersionId": "535",
+ "definitionSnapshot": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥前泵换件修复",
+ "status": "published",
+ "trainingMode": "VIRTUAL",
+ "resources": {
+ "models": [
+ {
+ "id": "front-pump-step-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "name": "架桥车前泵互救操作整车模型",
+ "baseModelName": "架桥车前泵互救操作整车模型",
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "revision": 1,
+ "materialPreset": null,
+ "parts": [
+ {
+ "editorId": "",
+ "interactionId": "front-pump-hydraulic-pump",
+ "nodeName": "1液压泵",
+ "sourceNodeName": "1液压泵",
+ "nodePath": "",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-power-take-off",
+ "nodeName": "2取力器",
+ "sourceNodeName": "2取力器",
+ "nodePath": "",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-pto-switch",
+ "nodeName": "2取力器开关",
+ "sourceNodeName": "2取力器开关",
+ "nodePath": "",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-ball-valve-switch",
+ "nodeName": "3球阀开关",
+ "sourceNodeName": "3球阀开关",
+ "nodePath": "",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box",
+ "nodeName": "5辅助控制盒",
+ "sourceNodeName": "5辅助控制盒",
+ "nodePath": "",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "nodeName": "5辅助控制盒盖",
+ "sourceNodeName": "5辅助控制盒盖",
+ "nodePath": "",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-rescue-switch",
+ "nodeName": "5互救开关",
+ "sourceNodeName": "5互救开关",
+ "nodePath": "",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "animations": []
+ },
+ "task": {
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "code": "TR-FRONT-PUMP-RESCUE-001",
+ "title": "重型支援桥前泵换件修复",
+ "categoryId": "minor-repair",
+ "difficulty": "标准",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "image": "/models/step-model-front-pump-thumb.png",
+ "equipment": "架桥车",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ]
+ },
+ "scenario": {
+ "id": "front-pump-rescue-scenario",
+ "publishedSceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "publishedSceneVersion": "1.0",
+ "baseVisualKey": "front-pump-rescue",
+ "visualKey": "front-pump-rescue",
+ "environmentName": "重型支援桥前泵换件修复",
+ "sceneLayout": "架桥车整车操作位",
+ "equipmentState": "整车模型 · 补充拆装件为操作示意",
+ "tools": [],
+ "faults": [],
+ "environment": {
+ "type": "outdoor",
+ "mode": "builtin",
+ "sourceName": "桥梁脚本三维训练场",
+ "resourceUrl": "",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "sceneResource": {
+ "sceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "version": "1.0",
+ "sourceKind": "published",
+ "status": "已发布",
+ "name": "重型支援桥前泵换件修复",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "objectCount": 2,
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "1.0",
+ "name": "重型支援桥前泵换件修复",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "environment": {
+ "presetId": "outdoor-1",
+ "type": "outdoor"
+ },
+ "rendering": {
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 70,
+ "far": 240
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.1,
+ "far": 800,
+ "position": [
+ 11,
+ 8,
+ 16
+ ],
+ "target": [
+ 0,
+ 1.5,
+ 2
+ ]
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ]
+ },
+ "assetReferences": [
+ {
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 32195288,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "training-content"
+ }
+ ]
+ },
+ "accent": "#2d86d8",
+ "background": 11062241,
+ "fog": 11062241,
+ "ground": 7110499,
+ "camera": {
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ },
+ "retainStoredParts": true,
+ "sceneTags": [
+ "整车模型",
+ "补充操作示意",
+ "机构顺序操作"
+ ],
+ "sensorFeeds": [],
+ "name": "重型支援桥前泵换件修复",
+ "title": "重型支援桥前泵换件修复",
+ "operableParts": [
+ "bridge-engine",
+ "bridge-paper",
+ "bridge-tank-valve",
+ "bridge-inlet",
+ "bridge-inlet-bag",
+ "bridge-outlet",
+ "bridge-outlet-bag",
+ "bridge-pump-bolt-1",
+ "bridge-pump-bolt-2",
+ "bridge-pump-bolt-3",
+ "bridge-pump-bolt-4",
+ "bridge-old-pump",
+ "bridge-gasket",
+ "bridge-new-pump",
+ "bridge-fill-cap",
+ "bridge-oil-can",
+ "bridge-test-control"
+ ]
+ },
+ "tools": [],
+ "faults": [],
+ "steps": [
+ {
+ "id": "BRIDGE-STEP-1",
+ "stepCode": "BRIDGE-STEP-1",
+ "actionCode": "COMPLETE_BRIDGE-STEP-1",
+ "number": 1,
+ "title": "停机并初裁牛皮纸",
+ "targetId": "bridge-engine",
+ "targetName": "关闭架桥车发动机",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "架桥车熄火;按液压泵与取力器结合面形状初步裁剪牛皮纸。",
+ "guidance": "架桥车熄火;按液压泵与取力器结合面形状初步裁剪牛皮纸。",
+ "warning": "",
+ "success": "停机并初裁牛皮纸:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-engine",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "关闭架桥车发动机",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 13195851
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-paper",
+ "kind": "identify",
+ "directionHint": "按结合面初裁牛皮纸",
+ "effects": [
+ {
+ "targetId": "bridge-paper",
+ "scale": [
+ 0.85,
+ 1,
+ 0.85
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,停机并初裁牛皮纸。架桥车熄火;按液压泵与取力器结合面形状初步裁剪牛皮纸。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_1CE71ECA76194F06B098A012B360BB06",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "65",
+ "videoName": "重型支援桥前泵换件修复 · 1 停机并初裁牛皮纸",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-2",
+ "stepCode": "BRIDGE-STEP-2",
+ "actionCode": "COMPLETE_BRIDGE-STEP-2",
+ "number": 2,
+ "title": "关闭液压油箱出油口一号球阀",
+ "targetId": "bridge-tank-valve",
+ "targetName": "关闭一号出油球阀",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将一号球阀手柄从平行管道转到垂直管道。",
+ "guidance": "将一号球阀手柄从平行管道转到垂直管道。",
+ "warning": "",
+ "success": "关闭液压油箱出油口一号球阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-tank-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "rotate",
+ "steps": [
+ {
+ "targetId": "bridge-tank-valve",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "关闭一号出油球阀"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,关闭液压油箱出油口一号球阀。将一号球阀手柄从平行管道转到垂直管道。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_34129B61FA1F4E628AF295E3EF714364",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "66",
+ "videoName": "重型支援桥前泵换件修复 · 2 关闭液压油箱出油口一号球阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-3",
+ "stepCode": "BRIDGE-STEP-3",
+ "actionCode": "COMPLETE_BRIDGE-STEP-3",
+ "number": 3,
+ "title": "拆开并包扎进出油管",
+ "targetId": "bridge-inlet",
+ "targetName": "拆开进油管",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用大活动扳手拆开液压泵进、出油管接头,用塑料袋包扎管口。",
+ "guidance": "用大活动扳手拆开液压泵进、出油管接头,用塑料袋包扎管口。",
+ "warning": "",
+ "success": "拆开并包扎进出油管:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-inlet",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-inlet",
+ "kind": "identify",
+ "directionHint": "拆开进油管",
+ "effects": [
+ {
+ "targetId": "bridge-inlet",
+ "offset": [
+ -0.6,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-inlet-bag",
+ "kind": "identify",
+ "directionHint": "包扎进油管口",
+ "effects": [
+ {
+ "targetId": "bridge-inlet-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet",
+ "kind": "identify",
+ "directionHint": "拆开出油管",
+ "effects": [
+ {
+ "targetId": "bridge-outlet",
+ "offset": [
+ 0.6,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet-bag",
+ "kind": "identify",
+ "directionHint": "包扎出油管口",
+ "effects": [
+ {
+ "targetId": "bridge-outlet-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,拆开并包扎进出油管。用大活动扳手拆开液压泵进、出油管接头,用塑料袋包扎管口。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_533EAE94D45D49A2BECD7E24E48835E6",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "67",
+ "videoName": "重型支援桥前泵换件修复 · 3 拆开并包扎进出油管",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-4",
+ "stepCode": "BRIDGE-STEP-4",
+ "actionCode": "COMPLETE_BRIDGE-STEP-4",
+ "number": 4,
+ "title": "拆下四个安装螺栓",
+ "targetId": "bridge-pump-bolt-1",
+ "targetName": "拆下第 1 个安装螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用开口扳手拆下液压泵与取力器之间的四个安装螺栓。",
+ "guidance": "用开口扳手拆下液压泵与取力器之间的四个安装螺栓。",
+ "warning": "",
+ "success": "拆下四个安装螺栓:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-pump-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 1 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 2 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 3 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 4 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,拆下四个安装螺栓。用开口扳手拆下液压泵与取力器之间的四个安装螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_787B4C212CF644AE9A3D8D49DEDCB65E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "68",
+ "videoName": "重型支援桥前泵换件修复 · 4 拆下四个安装螺栓",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-5",
+ "stepCode": "BRIDGE-STEP-5",
+ "actionCode": "COMPLETE_BRIDGE-STEP-5",
+ "number": 5,
+ "title": "取下旧前泵",
+ "targetId": "bridge-old-pump",
+ "targetName": "取下旧前泵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "取下原前泵。",
+ "guidance": "取下原前泵。",
+ "warning": "",
+ "success": "取下旧前泵:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-old-pump",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-old-pump",
+ "kind": "identify",
+ "directionHint": "取下旧前泵",
+ "effects": [
+ {
+ "targetId": "bridge-old-pump",
+ "offset": [
+ -2,
+ 0,
+ 0
+ ]
+ },
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "visible": false
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,取下旧前泵。取下原前泵。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_5672FD367E8F41A5A026E3C68E8C8726",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "69",
+ "videoName": "重型支援桥前泵换件修复 · 5 取下旧前泵",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-6",
+ "stepCode": "BRIDGE-STEP-6",
+ "actionCode": "COMPLETE_BRIDGE-STEP-6",
+ "number": 6,
+ "title": "修裁牛皮纸",
+ "targetId": "bridge-paper",
+ "targetName": "按安装面修裁纸垫",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "进一步裁剪牛皮纸,使其与液压泵安装面及取力器结合面吻合。",
+ "guidance": "进一步裁剪牛皮纸,使其与液压泵安装面及取力器结合面吻合。",
+ "warning": "",
+ "success": "修裁牛皮纸:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-paper",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-paper",
+ "kind": "identify",
+ "directionHint": "按安装面修裁纸垫",
+ "effects": [
+ {
+ "targetId": "bridge-gasket",
+ "visible": true
+ },
+ {
+ "targetId": "bridge-paper",
+ "visible": false
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第6步,修裁牛皮纸。进一步裁剪牛皮纸,使其与液压泵安装面及取力器结合面吻合。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_C0E73EC20FD44C608A795A03DE4F7401",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "70",
+ "videoName": "重型支援桥前泵换件修复 · 6 修裁牛皮纸",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-7",
+ "stepCode": "BRIDGE-STEP-7",
+ "actionCode": "COMPLETE_BRIDGE-STEP-7",
+ "number": 7,
+ "title": "放置牛皮纸垫",
+ "targetId": "bridge-gasket",
+ "targetName": "将纸垫放到取力器结合面",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将裁好的牛皮纸放在取力器接口处。",
+ "guidance": "将裁好的牛皮纸放在取力器接口处。",
+ "warning": "",
+ "success": "放置牛皮纸垫:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-gasket",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-gasket",
+ "kind": "identify",
+ "directionHint": "将纸垫放到取力器结合面",
+ "effects": [
+ {
+ "targetId": "bridge-gasket",
+ "offset": [
+ 2.3,
+ 0,
+ -0.4
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第7步,放置牛皮纸垫。将裁好的牛皮纸放在取力器接口处。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_17FAC41643804A22A8B71A2FF8DCBC28",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "71",
+ "videoName": "重型支援桥前泵换件修复 · 7 放置牛皮纸垫",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-8",
+ "stepCode": "BRIDGE-STEP-8",
+ "actionCode": "COMPLETE_BRIDGE-STEP-8",
+ "number": 8,
+ "title": "安装新液压泵",
+ "targetId": "bridge-new-pump",
+ "targetName": "安装新泵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "安装新的液压泵。原稿没有给出拧紧力矩。",
+ "guidance": "安装新的液压泵。原稿没有给出拧紧力矩。",
+ "warning": "",
+ "success": "安装新液压泵:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-new-pump",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-new-pump",
+ "kind": "identify",
+ "directionHint": "安装新泵",
+ "effects": [
+ {
+ "targetId": "bridge-new-pump",
+ "offset": [
+ -2,
+ 0,
+ 0
+ ]
+ },
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "visible": true
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 1 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 2 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 3 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 4 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第8步,安装新液压泵。安装新的液压泵。原稿没有给出拧紧力矩。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_2284ABD91F544E2EB7799E9FA1C4BCF6",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "72",
+ "videoName": "重型支援桥前泵换件修复 · 8 安装新液压泵",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-9",
+ "stepCode": "BRIDGE-STEP-9",
+ "actionCode": "COMPLETE_BRIDGE-STEP-9",
+ "number": 9,
+ "title": "向新泵加注液压油",
+ "targetId": "bridge-fill-cap",
+ "targetName": "打开加油口",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开新液压泵加油口,加注液压油。原稿没有给出定量值。",
+ "guidance": "打开新液压泵加油口,加注液压油。原稿没有给出定量值。",
+ "warning": "",
+ "success": "向新泵加注液压油:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-fill-cap",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-fill-cap",
+ "kind": "identify",
+ "directionHint": "打开加油口",
+ "effects": [
+ {
+ "targetId": "bridge-fill-cap",
+ "offset": [
+ 0,
+ 0.45,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-oil-can",
+ "kind": "identify",
+ "directionHint": "向新泵加注液压油",
+ "effects": [
+ {
+ "targetId": "bridge-oil-can",
+ "offset": [
+ -1.3,
+ 0.6,
+ -0.3
+ ]
+ },
+ {
+ "targetId": "bridge-oil-stream",
+ "visible": true
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第9步,向新泵加注液压油。打开新液压泵加油口,加注液压油。原稿没有给出定量值。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_BF468C49DDCB462E8E2C75CF8C6BD172",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "73",
+ "videoName": "重型支援桥前泵换件修复 · 9 向新泵加注液压油",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-10",
+ "stepCode": "BRIDGE-STEP-10",
+ "actionCode": "COMPLETE_BRIDGE-STEP-10",
+ "number": 10,
+ "title": "恢复进出油管连接",
+ "targetId": "bridge-inlet-bag",
+ "targetName": "取下进油管封口袋",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用大活动扳手连接并拧紧液压泵进、出油管。",
+ "guidance": "用大活动扳手连接并拧紧液压泵进、出油管。",
+ "warning": "",
+ "success": "恢复进出油管连接:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-inlet-bag",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-inlet-bag",
+ "kind": "identify",
+ "directionHint": "取下进油管封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-inlet-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-inlet",
+ "kind": "identify",
+ "directionHint": "连接并拧紧进油管",
+ "effects": [
+ {
+ "targetId": "bridge-inlet",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet-bag",
+ "kind": "identify",
+ "directionHint": "取下出油管封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-outlet-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet",
+ "kind": "identify",
+ "directionHint": "连接并拧紧出油管",
+ "effects": [
+ {
+ "targetId": "bridge-outlet",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第10步,恢复进出油管连接。用大活动扳手连接并拧紧液压泵进、出油管。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_88908FEBE6054EE99087F8653A8C5FAA",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "74",
+ "videoName": "重型支援桥前泵换件修复 · 10 恢复进出油管连接",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-11",
+ "stepCode": "BRIDGE-STEP-11",
+ "actionCode": "COMPLETE_BRIDGE-STEP-11",
+ "number": 11,
+ "title": "启动设备试验",
+ "targetId": "bridge-engine",
+ "targetName": "启动设备试验",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "启动设备进行试验。原稿没有展开具体试验项目和判定数值。",
+ "guidance": "启动设备进行试验。原稿没有展开具体试验项目和判定数值。",
+ "warning": "",
+ "success": "启动设备试验:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-engine",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "启动设备试验",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 2209160
+ },
+ {
+ "targetId": "bridge-oil-stream",
+ "visible": false
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-test-control",
+ "kind": "identify",
+ "directionHint": "操作试验手柄并观察",
+ "effects": [
+ {
+ "targetId": "bridge-test-control",
+ "offset": [
+ 0,
+ 0,
+ -0.25
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第11步,启动设备试验。启动设备进行试验。原稿没有展开具体试验项目和判定数值。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_4D873387CF324AAF9C6D3BE1A72C247E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "75",
+ "videoName": "重型支援桥前泵换件修复 · 11 启动设备试验",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ }
+ ],
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "totalScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-pump-replace",
+ "scriptVersion": "3"
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/7.jpg、8.jpg"
+ },
+ "definitionChecksum": "d269783f0e0314d11047cf82cf0d0d3bb3510d179c18e3dc281d9b12f9e80dd7",
+ "ownerUserId": "99",
+ "ownerUsername": "root",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "departmentName": "",
+ "status": "PUBLISHED",
+ "scheduleStartAt": null,
+ "dueAt": null,
+ "publishedAt": 1789395442,
+ "withdrawnAt": 1789395442,
+ "archivedAt": null,
+ "lifecycleReason": "发布教学任务",
+ "version": 8,
+ "addTime": 1789309632,
+ "updateTime": "2026-09-13T22:27:13",
+ "serverNow": 1789657622,
+ "members": [
+ {
+ "id": "183",
+ "userId": "66",
+ "username": "baidengdeng",
+ "displayName": "白澄澄",
+ "departmentId": "25",
+ "departmentName": "",
+ "memberType": "LEARNER",
+ "roleCode": "LEARNER",
+ "teamCode": "NEUTRAL",
+ "groupCode": "INDIVIDUAL",
+ "positionCode": "LEARNER",
+ "stationCode": "",
+ "sortOrder": 0,
+ "version": 0
+ }
+ ],
+ "runCount": 1,
+ "pendingReviewCount": 0
+}
\ No newline at end of file
diff --git a/reports/bridge-new-models-006-008-20260917/before-task-89.json b/reports/bridge-new-models-006-008-20260917/before-task-89.json
new file mode 100644
index 0000000..af6ada3
--- /dev/null
+++ b/reports/bridge-new-models-006-008-20260917/before-task-89.json
@@ -0,0 +1,2537 @@
+{
+ "id": "89",
+ "code": "TASK-VIRTUAL-008",
+ "name": "重型支援桥平衡阀拆拼互换",
+ "description": "原稿:桥梁/文件2/9.jpg、10.jpg",
+ "channel": "VIRTUAL",
+ "assignmentKind": "TRAINING",
+ "executionMode": "PRACTICE",
+ "audienceType": "COMMON",
+ "collaborationMode": "INDIVIDUAL",
+ "digitalHumanAllowed": false,
+ "digitalInstructorAgentSlug": "",
+ "digitalInstructorAgentName": "",
+ "digitalInstructorKnowledgeSource": "AGENT",
+ "contentProjectId": "441",
+ "contentVersionId": "536",
+ "definitionSnapshot": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥平衡阀拆拼互换",
+ "status": "published",
+ "trainingMode": "VIRTUAL",
+ "resources": {
+ "models": [
+ {
+ "id": "front-pump-step-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "name": "架桥车前泵互救操作整车模型",
+ "baseModelName": "架桥车前泵互救操作整车模型",
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "revision": 1,
+ "materialPreset": null,
+ "parts": [
+ {
+ "editorId": "",
+ "interactionId": "front-pump-hydraulic-pump",
+ "nodeName": "1液压泵",
+ "sourceNodeName": "1液压泵",
+ "nodePath": "",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-power-take-off",
+ "nodeName": "2取力器",
+ "sourceNodeName": "2取力器",
+ "nodePath": "",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-pto-switch",
+ "nodeName": "2取力器开关",
+ "sourceNodeName": "2取力器开关",
+ "nodePath": "",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-ball-valve-switch",
+ "nodeName": "3球阀开关",
+ "sourceNodeName": "3球阀开关",
+ "nodePath": "",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box",
+ "nodeName": "5辅助控制盒",
+ "sourceNodeName": "5辅助控制盒",
+ "nodePath": "",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "nodeName": "5辅助控制盒盖",
+ "sourceNodeName": "5辅助控制盒盖",
+ "nodePath": "",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-rescue-switch",
+ "nodeName": "5互救开关",
+ "sourceNodeName": "5互救开关",
+ "nodePath": "",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "animations": []
+ },
+ "task": {
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "code": "TR-FRONT-PUMP-RESCUE-001",
+ "title": "重型支援桥平衡阀拆拼互换",
+ "categoryId": "minor-repair",
+ "difficulty": "标准",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "image": "/models/step-model-front-pump-thumb.png",
+ "equipment": "架桥车",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ]
+ },
+ "scenario": {
+ "id": "front-pump-rescue-scenario",
+ "publishedSceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "publishedSceneVersion": "1.0",
+ "baseVisualKey": "front-pump-rescue",
+ "visualKey": "front-pump-rescue",
+ "environmentName": "架桥车互救操作训练场",
+ "sceneLayout": "架桥车整车操作位",
+ "equipmentState": "整车模型 · 补充拆装件为操作示意",
+ "tools": [],
+ "faults": [],
+ "environment": {
+ "type": "outdoor",
+ "mode": "builtin",
+ "sourceName": "内置架桥车互救操作训练场",
+ "resourceUrl": "",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "sceneResource": {
+ "sceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "version": "1.0",
+ "sourceKind": "published",
+ "status": "已发布",
+ "name": "架桥车前泵故障互救处置训练场景",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "objectCount": 2,
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "1.0",
+ "name": "重型支援桥平衡阀拆拼互换",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "environment": {
+ "presetId": "outdoor-1",
+ "type": "outdoor"
+ },
+ "rendering": {
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 70,
+ "far": 240
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.1,
+ "far": 800,
+ "position": [
+ 11,
+ 8,
+ 16
+ ],
+ "target": [
+ 0,
+ 1.5,
+ 2
+ ]
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ]
+ },
+ "assetReferences": [
+ {
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 32195288,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "training-content"
+ }
+ ]
+ },
+ "accent": "#2d86d8",
+ "background": 11062241,
+ "fog": 11062241,
+ "ground": 7110499,
+ "camera": {
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ },
+ "retainStoredParts": true,
+ "sceneTags": [
+ "真实整车步骤模型",
+ "前泵故障互救",
+ "机构顺序操作"
+ ],
+ "sensorFeeds": [],
+ "name": "重型支援桥平衡阀拆拼互换",
+ "title": "重型支援桥平衡阀拆拼互换",
+ "operableParts": [
+ "bridge-small-cloth",
+ "bridge-small-pipe",
+ "bridge-small-bag",
+ "bridge-small-bolt-1",
+ "bridge-small-bolt-2",
+ "bridge-small-bolt-3",
+ "bridge-small-bolt-4",
+ "bridge-small-valve",
+ "bridge-small-plug-1",
+ "bridge-small-plug-2",
+ "bridge-small-seat",
+ "bridge-large-cloth",
+ "bridge-large-pipe",
+ "bridge-large-bag",
+ "bridge-large-bolt-1",
+ "bridge-large-bolt-2",
+ "bridge-large-bolt-3",
+ "bridge-large-bolt-4",
+ "bridge-large-valve",
+ "bridge-large-plug-1",
+ "bridge-large-plug-2",
+ "bridge-large-seat"
+ ]
+ },
+ "tools": [],
+ "faults": [],
+ "steps": [
+ {
+ "id": "BRIDGE-STEP-1",
+ "stepCode": "BRIDGE-STEP-1",
+ "actionCode": "COMPLETE_BRIDGE-STEP-1",
+ "number": 1,
+ "title": "清洗小腔平衡阀",
+ "targetId": "bridge-small-cloth",
+ "targetName": "清洗并擦净阀体",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "guidance": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "warning": "",
+ "success": "清洗小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-cloth",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-small-cloth",
+ "kind": "identify",
+ "directionHint": "清洗并擦净阀体",
+ "effects": [
+ {
+ "targetId": "bridge-small-cloth",
+ "offset": [
+ 0.7,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-small-valve",
+ "color": 8492701
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,清洗小腔平衡阀。用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_76F80444AA9C4C3183A0EEDF6E655C25",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "76",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 1 清洗小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-2",
+ "stepCode": "BRIDGE-STEP-2",
+ "actionCode": "COMPLETE_BRIDGE-STEP-2",
+ "number": 2,
+ "title": "拆开小腔控制油口管路",
+ "targetId": "bridge-small-pipe",
+ "targetName": "拆开控制油管",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "guidance": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "warning": "",
+ "success": "拆开小腔控制油口管路:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-pipe",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-pipe",
+ "kind": "identify",
+ "directionHint": "拆开控制油管",
+ "effects": [
+ {
+ "targetId": "bridge-small-pipe",
+ "offset": [
+ 0.55,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bag",
+ "kind": "identify",
+ "directionHint": "封袋包扎管口",
+ "effects": [
+ {
+ "targetId": "bridge-small-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,拆开小腔控制油口管路。用十九号开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_EAF5F0A89D454E6FBAFB061C93D2F760",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "77",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 2 拆开小腔控制油口管路",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-3",
+ "stepCode": "BRIDGE-STEP-3",
+ "actionCode": "COMPLETE_BRIDGE-STEP-3",
+ "number": 3,
+ "title": "拆下小腔平衡阀",
+ "targetId": "bridge-small-bolt-1",
+ "targetName": "拆下第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "guidance": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "warning": "",
+ "success": "拆下小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-valve",
+ "kind": "identify",
+ "directionHint": "取下平衡阀",
+ "effects": [
+ {
+ "targetId": "bridge-small-valve",
+ "offset": [
+ 0,
+ 0,
+ 1.2
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,拆下小腔平衡阀。用八号内六角扳手拆下安装螺栓,取下平衡阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_981034D69E3047C6B9D1DAE9BBF4F7D4",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "78",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 3 拆下小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-4",
+ "stepCode": "BRIDGE-STEP-4",
+ "actionCode": "COMPLETE_BRIDGE-STEP-4",
+ "number": 4,
+ "title": "封堵小腔油口",
+ "targetId": "bridge-small-plug-1",
+ "targetName": "封堵第 1 个油堵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "guidance": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "warning": "",
+ "success": "封堵小腔油口:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-plug-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-plug-1",
+ "kind": "identify",
+ "directionHint": "封堵第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-plug-2",
+ "kind": "identify",
+ "directionHint": "封堵第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-seat",
+ "kind": "identify",
+ "directionHint": "擦净阀座结合面",
+ "effects": [
+ {
+ "targetId": "bridge-small-seat",
+ "color": 12965080
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,封堵小腔油口。用两个油堵封住两个油口,擦净阀座结合面。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_60D40306A9E74E96ADD7641932934BE4",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "79",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 4 封堵小腔油口",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-5",
+ "stepCode": "BRIDGE-STEP-5",
+ "actionCode": "COMPLETE_BRIDGE-STEP-5",
+ "number": 5,
+ "title": "清洗大腔平衡阀",
+ "targetId": "bridge-large-cloth",
+ "targetName": "清洗并擦净阀体",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "guidance": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "warning": "",
+ "success": "清洗大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-cloth",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-large-cloth",
+ "kind": "identify",
+ "directionHint": "清洗并擦净阀体",
+ "effects": [
+ {
+ "targetId": "bridge-large-cloth",
+ "offset": [
+ 0.7,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-large-valve",
+ "color": 8492701
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,清洗大腔平衡阀。用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_A6EFEC7D339E4BA8994C525CA3709E2E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "80",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 5 清洗大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-6",
+ "stepCode": "BRIDGE-STEP-6",
+ "actionCode": "COMPLETE_BRIDGE-STEP-6",
+ "number": 6,
+ "title": "拆开大腔控制油口管路",
+ "targetId": "bridge-large-pipe",
+ "targetName": "拆开控制油管",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "guidance": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "warning": "",
+ "success": "拆开大腔控制油口管路:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-pipe",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-pipe",
+ "kind": "identify",
+ "directionHint": "拆开控制油管",
+ "effects": [
+ {
+ "targetId": "bridge-large-pipe",
+ "offset": [
+ 0.55,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bag",
+ "kind": "identify",
+ "directionHint": "封袋包扎管口",
+ "effects": [
+ {
+ "targetId": "bridge-large-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第6步,拆开大腔控制油口管路。用十九号开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D9E1BAFBD89D48019B9445B2A5752E68",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "81",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 6 拆开大腔控制油口管路",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-7",
+ "stepCode": "BRIDGE-STEP-7",
+ "actionCode": "COMPLETE_BRIDGE-STEP-7",
+ "number": 7,
+ "title": "拆下大腔平衡阀",
+ "targetId": "bridge-large-bolt-1",
+ "targetName": "拆下第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "guidance": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "warning": "",
+ "success": "拆下大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-valve",
+ "kind": "identify",
+ "directionHint": "取下平衡阀",
+ "effects": [
+ {
+ "targetId": "bridge-large-valve",
+ "offset": [
+ 0,
+ 0,
+ 1.2
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第7步,拆下大腔平衡阀。用八号内六角扳手拆下安装螺栓,取下平衡阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_E83DDAB19F774A418C82EBA7E8EDCF8A",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "82",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 7 拆下大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-8",
+ "stepCode": "BRIDGE-STEP-8",
+ "actionCode": "COMPLETE_BRIDGE-STEP-8",
+ "number": 8,
+ "title": "封堵大腔油口",
+ "targetId": "bridge-large-plug-1",
+ "targetName": "封堵第 1 个油堵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "guidance": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "warning": "",
+ "success": "封堵大腔油口:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-plug-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-plug-1",
+ "kind": "identify",
+ "directionHint": "封堵第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-plug-2",
+ "kind": "identify",
+ "directionHint": "封堵第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-seat",
+ "kind": "identify",
+ "directionHint": "擦净阀座结合面",
+ "effects": [
+ {
+ "targetId": "bridge-large-seat",
+ "color": 12965080
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第8步,封堵大腔油口。用两个油堵封住两个油口,擦净阀座结合面。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_4FE31068F3EB410BAC72E19F1D1BAF49",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "83",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 8 封堵大腔油口",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-9",
+ "stepCode": "BRIDGE-STEP-9",
+ "actionCode": "COMPLETE_BRIDGE-STEP-9",
+ "number": 9,
+ "title": "准备安装大腔平衡阀",
+ "targetId": "bridge-large-seat",
+ "targetName": "擦净安装结合面",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "guidance": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "warning": "",
+ "success": "准备安装大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-seat",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-seat",
+ "kind": "identify",
+ "directionHint": "擦净安装结合面",
+ "effects": [
+ {
+ "targetId": "bridge-large-seat",
+ "color": 14477797
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-plug-1",
+ "kind": "identify",
+ "directionHint": "取下第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-1",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-plug-2",
+ "kind": "identify",
+ "directionHint": "取下第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-2",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第9步,准备安装大腔平衡阀。擦净平衡阀及阀座结合面,取下两个油堵。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D0A3CAC5278C4A57AC9BEF13DA2690BC",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "84",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 9 准备安装大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-10",
+ "stepCode": "BRIDGE-STEP-10",
+ "actionCode": "COMPLETE_BRIDGE-STEP-10",
+ "number": 10,
+ "title": "安装大腔平衡阀",
+ "targetId": "bridge-small-valve",
+ "targetName": "将互换平衡阀装到阀座",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "guidance": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "warning": "",
+ "success": "安装大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-valve",
+ "kind": "identify",
+ "directionHint": "将互换平衡阀装到阀座",
+ "effects": [
+ {
+ "targetId": "bridge-small-valve",
+ "offset": [
+ 3.2,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第10步,安装大腔平衡阀。将平衡阀放置于阀座上,用八号内六角扳手安装四个安装螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_0F40DAF3E28F4FA088EA943D9470CAA7",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "85",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 10 安装大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-11",
+ "stepCode": "BRIDGE-STEP-11",
+ "actionCode": "COMPLETE_BRIDGE-STEP-11",
+ "number": 11,
+ "title": "核对大腔控制油口管路连接",
+ "targetId": "bridge-large-bag",
+ "targetName": "取下封口袋",
+ "mode": "measure",
+ "interaction": "mechanism-operation",
+ "instruction": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "guidance": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "warning": "请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "success": "核对大腔控制油口管路连接:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-bag",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-bag",
+ "kind": "identify",
+ "directionHint": "取下封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-large-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-pipe",
+ "kind": "identify",
+ "directionHint": "按记录的处理依据连接管路",
+ "effects": [
+ {
+ "targetId": "bridge-large-pipe",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第11步,核对大腔控制油口管路连接。原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用十九号开口扳手拆开管路并包扎”的相反描述。请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_F6427532AF5F40348CEB154F031F2AED",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "86",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 11 核对大腔控制油口管路连接",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-12",
+ "stepCode": "BRIDGE-STEP-12",
+ "actionCode": "COMPLETE_BRIDGE-STEP-12",
+ "number": 12,
+ "title": "紧固大腔阀体连接螺栓",
+ "targetId": "bridge-large-bolt-1",
+ "targetName": "紧固第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "guidance": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "warning": "",
+ "success": "紧固大腔阀体连接螺栓:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第12步,紧固大腔阀体连接螺栓。用内六角扳手拧紧四个阀体连接螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_F601DB08C8D44934AD3A1B1582E804DB",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "87",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 12 紧固大腔阀体连接螺栓",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-13",
+ "stepCode": "BRIDGE-STEP-13",
+ "actionCode": "COMPLETE_BRIDGE-STEP-13",
+ "number": 13,
+ "title": "准备安装小腔平衡阀",
+ "targetId": "bridge-small-seat",
+ "targetName": "擦净安装结合面",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "guidance": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "warning": "",
+ "success": "准备安装小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-seat",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-seat",
+ "kind": "identify",
+ "directionHint": "擦净安装结合面",
+ "effects": [
+ {
+ "targetId": "bridge-small-seat",
+ "color": 14477797
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-plug-1",
+ "kind": "identify",
+ "directionHint": "取下第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-1",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-plug-2",
+ "kind": "identify",
+ "directionHint": "取下第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-2",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第13步,准备安装小腔平衡阀。擦净平衡阀及阀座结合面,取下两个油堵。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_B1BBA42CE5F346228B6B39A51F190CB3",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "88",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 13 准备安装小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-14",
+ "stepCode": "BRIDGE-STEP-14",
+ "actionCode": "COMPLETE_BRIDGE-STEP-14",
+ "number": 14,
+ "title": "安装小腔平衡阀",
+ "targetId": "bridge-large-valve",
+ "targetName": "将互换平衡阀装到阀座",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "guidance": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "warning": "",
+ "success": "安装小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-valve",
+ "kind": "identify",
+ "directionHint": "将互换平衡阀装到阀座",
+ "effects": [
+ {
+ "targetId": "bridge-large-valve",
+ "offset": [
+ -3.2,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第14步,安装小腔平衡阀。将平衡阀放置于阀座上,用八号内六角扳手安装四个安装螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_2BCD762C693242FF8DA420BD9A5D4DF9",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "89",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 14 安装小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-15",
+ "stepCode": "BRIDGE-STEP-15",
+ "actionCode": "COMPLETE_BRIDGE-STEP-15",
+ "number": 15,
+ "title": "核对小腔控制油口管路连接",
+ "targetId": "bridge-small-bag",
+ "targetName": "取下封口袋",
+ "mode": "measure",
+ "interaction": "mechanism-operation",
+ "instruction": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "guidance": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "warning": "请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "success": "核对小腔控制油口管路连接:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-bag",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-bag",
+ "kind": "identify",
+ "directionHint": "取下封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-small-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-pipe",
+ "kind": "identify",
+ "directionHint": "按记录的处理依据连接管路",
+ "effects": [
+ {
+ "targetId": "bridge-small-pipe",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第15步,核对小腔控制油口管路连接。原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用十九号开口扳手拆开管路并包扎”的相反描述。请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_5F8309BF74344C568C2C9EEFDD9E74BF",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "90",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 15 核对小腔控制油口管路连接",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-16",
+ "stepCode": "BRIDGE-STEP-16",
+ "actionCode": "COMPLETE_BRIDGE-STEP-16",
+ "number": 16,
+ "title": "紧固小腔阀体连接螺栓",
+ "targetId": "bridge-small-bolt-1",
+ "targetName": "紧固第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "guidance": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "warning": "",
+ "success": "紧固小腔阀体连接螺栓:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第16步,紧固小腔阀体连接螺栓。用内六角扳手拧紧四个阀体连接螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D525E35EDA12402DA13302C2B3874CC3",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "91",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 16 紧固小腔阀体连接螺栓",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ }
+ ],
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "totalScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-balance-valve-swap",
+ "scriptVersion": "3"
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/9.jpg、10.jpg"
+ },
+ "definitionChecksum": "7756b28145b96ab712dc15dc4d6234dfd6e6278e726f69b564691ee4c8ee9b8b",
+ "ownerUserId": "99",
+ "ownerUsername": "root",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "departmentName": "",
+ "status": "PUBLISHED",
+ "scheduleStartAt": null,
+ "dueAt": null,
+ "publishedAt": 1789316083,
+ "withdrawnAt": 1789316082,
+ "archivedAt": null,
+ "lifecycleReason": "发布教学任务",
+ "version": 8,
+ "addTime": 1789309633,
+ "updateTime": "2026-09-13T22:27:14",
+ "serverNow": 1789657933,
+ "members": [],
+ "runCount": 0,
+ "pendingReviewCount": 0
+}
\ No newline at end of file
diff --git a/reports/bridge-new-models-006-008-20260917/covers/TASK-VIRTUAL-006-scene.jpg b/reports/bridge-new-models-006-008-20260917/covers/TASK-VIRTUAL-006-scene.jpg
new file mode 100644
index 0000000..c501feb
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/covers/TASK-VIRTUAL-006-scene.jpg differ
diff --git a/reports/bridge-new-models-006-008-20260917/covers/TASK-VIRTUAL-006-workspace.png b/reports/bridge-new-models-006-008-20260917/covers/TASK-VIRTUAL-006-workspace.png
new file mode 100644
index 0000000..c2c9913
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/covers/TASK-VIRTUAL-006-workspace.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/covers/TASK-VIRTUAL-007-scene.jpg b/reports/bridge-new-models-006-008-20260917/covers/TASK-VIRTUAL-007-scene.jpg
new file mode 100644
index 0000000..0272636
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/covers/TASK-VIRTUAL-007-scene.jpg differ
diff --git a/reports/bridge-new-models-006-008-20260917/covers/TASK-VIRTUAL-007-workspace.png b/reports/bridge-new-models-006-008-20260917/covers/TASK-VIRTUAL-007-workspace.png
new file mode 100644
index 0000000..38057fc
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/covers/TASK-VIRTUAL-007-workspace.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/covers/TASK-VIRTUAL-008-scene.jpg b/reports/bridge-new-models-006-008-20260917/covers/TASK-VIRTUAL-008-scene.jpg
new file mode 100644
index 0000000..8742c26
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/covers/TASK-VIRTUAL-008-scene.jpg differ
diff --git a/reports/bridge-new-models-006-008-20260917/covers/TASK-VIRTUAL-008-workspace.png b/reports/bridge-new-models-006-008-20260917/covers/TASK-VIRTUAL-008-workspace.png
new file mode 100644
index 0000000..0a2b883
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/covers/TASK-VIRTUAL-008-workspace.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/covers/frames.json b/reports/bridge-new-models-006-008-20260917/covers/frames.json
new file mode 100644
index 0000000..44c7cf7
--- /dev/null
+++ b/reports/bridge-new-models-006-008-20260917/covers/frames.json
@@ -0,0 +1,2154 @@
+[
+ {
+ "code": "TASK-VIRTUAL-006",
+ "name": "重型支援桥液压泵应急替代",
+ "taskId": "87",
+ "contentVersionId": "553",
+ "vehicle": {
+ "min": [
+ -0.9454731559753419,
+ -2.6725067714394868e-9,
+ -4.252710700886963
+ ],
+ "max": [
+ 0.9454730415344238,
+ 2.0246994533682563,
+ 3.981387023925782
+ ],
+ "center": [
+ -5.7220459037665705e-8,
+ 1.0123497253478748,
+ -0.13566183848059055
+ ],
+ "size": [
+ 1.8909461975097657,
+ 2.024699456040763,
+ 8.234097724812745
+ ]
+ },
+ "workshop": {
+ "min": [
+ -0.8577567195892337,
+ 0.00016846269369119593,
+ 0.015171412539506823
+ ],
+ "max": [
+ 3.3396270275476354,
+ 1.056499999806285,
+ 2.1096019816398623
+ ],
+ "center": [
+ 1.2409351539792008,
+ 0.5283342312499881,
+ 1.0623866970896847
+ ],
+ "size": [
+ 4.197383747136869,
+ 1.0563315371125936,
+ 2.0944305691003553
+ ]
+ },
+ "parts": [
+ {
+ "id": "front-pump-hydraulic-pump",
+ "name": "1_24柱塞泵3_05前泵3_08新泵",
+ "bounds": {
+ "min": [
+ -0.18820216201430795,
+ 0.5635581141814255,
+ 1.457702397143186
+ ],
+ "max": [
+ -0.07565205652828401,
+ 0.7028944464374361,
+ 1.6607099304230595
+ ],
+ "center": [
+ -0.13192710927129597,
+ 0.6332262803094308,
+ 1.5592061637831227
+ ],
+ "size": [
+ 0.11255010548602394,
+ 0.1393363322560106,
+ 0.20300753327987353
+ ]
+ }
+ },
+ {
+ "id": "front-pump-power-take-off",
+ "name": "1_25取力器",
+ "bounds": {
+ "min": [
+ 0.29428619384765625,
+ 0.8238364002205599,
+ 3.288577842712402
+ ],
+ "max": [
+ 0.507171630859375,
+ 0.8999262210823763,
+ 3.4273477935791012
+ ],
+ "center": [
+ 0.4007289123535156,
+ 0.8618813106514681,
+ 3.3579628181457517
+ ],
+ "size": [
+ 0.21288543701171875,
+ 0.07608982086181637,
+ 0.13876995086669908
+ ]
+ }
+ },
+ {
+ "id": "front-pump-pto-switch",
+ "name": "1_25和1_27和2_03和2_08取力器开关",
+ "bounds": {
+ "min": [
+ 0.4034054660797119,
+ 0.8294571468331089,
+ 3.280953321456909
+ ],
+ "max": [
+ 0.5018548488616943,
+ 0.9279065296150912,
+ 3.3794027042388914
+ ],
+ "center": [
+ 0.4526301574707031,
+ 0.8786818382241001,
+ 3.3301780128479
+ ],
+ "size": [
+ 0.0984493827819824,
+ 0.09844938278198234,
+ 0.09844938278198256
+ ]
+ }
+ },
+ {
+ "id": "front-pump-ball-valve-switch",
+ "name": "1_26球阀开关",
+ "bounds": {
+ "min": [
+ 0.6174862091117759,
+ 0.9434233613997234,
+ -0.10674595512743167
+ ],
+ "max": [
+ 0.7224375207646792,
+ 0.9897868351082517,
+ -0.06038248141890336
+ ],
+ "center": [
+ 0.6699618649382275,
+ 0.9666050982539875,
+ -0.08356421827316751
+ ],
+ "size": [
+ 0.10495131165290328,
+ 0.046363473708528335,
+ 0.04636347370852831
+ ]
+ }
+ },
+ {
+ "id": "front-pump-aux-control-box",
+ "name": "1_28辅助控制盒内",
+ "bounds": {
+ "min": [
+ -0.5664820766448975,
+ 0.834593379209208,
+ 0.2590632534027102
+ ],
+ "max": [
+ -0.5312846892893709,
+ 0.9501093790032143,
+ 0.458679189682007
+ ],
+ "center": [
+ -0.5488833829671342,
+ 0.8923513791062112,
+ 0.3588712215423586
+ ],
+ "size": [
+ 0.03519738735552658,
+ 0.1155159997940064,
+ 0.1996159362792968
+ ]
+ }
+ },
+ {
+ "id": "front-pump-aux-control-box-cover",
+ "name": "1_28辅助控制盒盖",
+ "bounds": {
+ "min": [
+ -0.5869951629638672,
+ 0.8345932361580605,
+ 0.2579586410522463
+ ],
+ "max": [
+ -0.5687178802490235,
+ 0.9520385906197305,
+ 0.45867916107177764
+ ],
+ "center": [
+ -0.5778565216064453,
+ 0.8933159133888955,
+ 0.358318901062012
+ ],
+ "size": [
+ 0.018277282714843746,
+ 0.11744535446167004,
+ 0.20072052001953133
+ ]
+ }
+ },
+ {
+ "id": "front-pump-rescue-switch",
+ "name": "1_28和2_06互救开关",
+ "bounds": {
+ "min": [
+ -0.5729870891571044,
+ 0.8629678437210794,
+ 0.40330458641052275
+ ],
+ "max": [
+ -0.5489870882034301,
+ 0.8869678446747536,
+ 0.427304587364197
+ ],
+ "center": [
+ -0.5609870886802673,
+ 0.8749678441979165,
+ 0.4153045868873599
+ ],
+ "size": [
+ 0.024000000953674272,
+ 0.024000000953674272,
+ 0.024000000953674272
+ ]
+ }
+ },
+ {
+ "id": "bridge-engine",
+ "name": "架桥车发动机",
+ "bounds": {
+ "min": [
+ -0.260454466342926,
+ 0.5119520351387731,
+ 1.7737298083305362
+ ],
+ "max": [
+ 0.26318726897239686,
+ 0.8093134090401403,
+ 2.1096019816398623
+ ],
+ "center": [
+ 0.0013664013147354215,
+ 0.6606327220894567,
+ 1.9416658949851993
+ ],
+ "size": [
+ 0.5236417353153229,
+ 0.2973613739013672,
+ 0.33587217330932617
+ ]
+ }
+ },
+ {
+ "id": "bridge-hose-a",
+ "name": "架桥车快速接口盖",
+ "bounds": {
+ "min": [
+ -0.5402607313863154,
+ 0.9405351871841682,
+ 0.06398853513965164
+ ],
+ "max": [
+ -0.4777805499307032,
+ 1.0094541305893197,
+ 0.12756322178611312
+ ],
+ "center": [
+ -0.5090206406585093,
+ 0.974994658886744,
+ 0.09577587846288238
+ ],
+ "size": [
+ 0.06248018145561218,
+ 0.06891894340515148,
+ 0.06357468664646149
+ ]
+ }
+ },
+ {
+ "id": "bridge-hose-b",
+ "name": "保障车快速接口盖",
+ "bounds": {
+ "min": [
+ 3.1937968735646263,
+ 0.48989918802056687,
+ 1.063276289464624
+ ],
+ "max": [
+ 3.2562768464039817,
+ 0.5588181612280406,
+ 1.1268511996285033
+ ],
+ "center": [
+ 3.225036859984304,
+ 0.5243586746243037,
+ 1.0950637445465636
+ ],
+ "size": [
+ 0.06247997283935547,
+ 0.06891897320747375,
+ 0.0635749101638794
+ ]
+ }
+ },
+ {
+ "id": "bridge-hose-line",
+ "name": "两车供油软管",
+ "bounds": {
+ "min": [
+ -0.8577567195892337,
+ 0.00016982674598692293,
+ 0.0974914824962615
+ ],
+ "max": [
+ 3.210876836776733,
+ 0.9855093491077422,
+ 1.1243891513347624
+ ],
+ "center": [
+ 1.1765600585937497,
+ 0.49283958792686455,
+ 0.6109403169155119
+ ],
+ "size": [
+ 4.068633556365967,
+ 0.9853395223617554,
+ 1.026897668838501
+ ]
+ }
+ },
+ {
+ "id": "bridge-return-line",
+ "name": "两车回油软管",
+ "bounds": {
+ "min": [
+ -0.8570289993286131,
+ 0.00016846269369119593,
+ 0.06574889034032805
+ ],
+ "max": [
+ 3.2108769035339355,
+ 0.9796630641818046,
+ 1.0823021134734152
+ ],
+ "center": [
+ 1.176923952102661,
+ 0.4899157634377479,
+ 0.5740255019068716
+ ],
+ "size": [
+ 4.067905902862549,
+ 0.9794946014881134,
+ 1.0165532231330872
+ ]
+ }
+ },
+ {
+ "id": "bridge-return-valve",
+ "name": "保障车回油截止阀",
+ "bounds": {
+ "min": [
+ 3.328836441076078,
+ 0.40356802929860314,
+ 0.8069863909564061
+ ],
+ "max": [
+ 3.3396270275476354,
+ 0.4160232244871255,
+ 0.8691705459437413
+ ],
+ "center": [
+ 3.3342317343118566,
+ 0.4097956268928643,
+ 0.8380784684500737
+ ],
+ "size": [
+ 0.010790586471557617,
+ 0.012455195188522339,
+ 0.062184154987335205
+ ]
+ }
+ },
+ {
+ "id": "bridge-filter-valve-1",
+ "name": "滤油器出口球阀 1",
+ "bounds": {
+ "min": [
+ -0.5956170555478408,
+ 0.9028406142008445,
+ 0.015171412539506823
+ ],
+ "max": [
+ -0.5782306786900833,
+ 0.9231716989290855,
+ 0.11536581830384818
+ ],
+ "center": [
+ -0.586923867118962,
+ 0.913006156564965,
+ 0.0652686154216775
+ ],
+ "size": [
+ 0.01738637685775757,
+ 0.020331084728240967,
+ 0.10019440576434135
+ ]
+ }
+ },
+ {
+ "id": "bridge-filter-valve-2",
+ "name": "滤油器出口球阀 2",
+ "bounds": {
+ "min": [
+ -0.6614819171926456,
+ 0.9028406146950685,
+ 0.015244349551225556
+ ],
+ "max": [
+ -0.644095540334888,
+ 0.9318094853348695,
+ 0.11543875159027661
+ ],
+ "center": [
+ -0.6527887287637668,
+ 0.917325050014969,
+ 0.06534155057075108
+ ],
+ "size": [
+ 0.01738637685775757,
+ 0.028968870639801025,
+ 0.10019440203905106
+ ]
+ }
+ },
+ {
+ "id": "bridge-support-pto",
+ "name": "保障车取力器开关(操作示意)",
+ "bounds": {
+ "min": [
+ 3.1507753187417986,
+ 0.5907753187417984,
+ 0.9507753187417984
+ ],
+ "max": [
+ 3.329224681258202,
+ 0.7692246812582016,
+ 1.1292246812582016
+ ],
+ "center": [
+ 3.24,
+ 0.68,
+ 1.04
+ ],
+ "size": [
+ 0.1784493625164032,
+ 0.1784493625164032,
+ 0.1784493625164032
+ ]
+ }
+ },
+ {
+ "id": "bridge-supply",
+ "name": "供油回路观察点",
+ "bounds": {
+ "min": [
+ 1.1524999999254941,
+ 0.10749999981373548,
+ 0.5874999991059303
+ ],
+ "max": [
+ 1.1875000000745057,
+ 0.1325000001862645,
+ 0.6325000008940697
+ ],
+ "center": [
+ 1.17,
+ 0.12,
+ 0.61
+ ],
+ "size": [
+ 0.03500000014901161,
+ 0.02500000037252903,
+ 0.04500000178813934
+ ]
+ }
+ },
+ {
+ "id": "bridge-normal-control",
+ "name": "正常作业操作手柄(操作示意)",
+ "bounds": {
+ "min": [
+ -0.6499999993294477,
+ 1.0174999998137355,
+ 0.3325000001490116
+ ],
+ "max": [
+ -0.5900000006705522,
+ 1.056499999806285,
+ 0.39699999955296517
+ ],
+ "center": [
+ -0.62,
+ 1.0369999998100101,
+ 0.3647499998509884
+ ],
+ "size": [
+ 0.05999999865889549,
+ 0.03899999999254944,
+ 0.06449999940395357
+ ]
+ }
+ }
+ ],
+ "camera": [
+ 11.77659276192936,
+ 7.2638818044325,
+ 13.329176485701678
+ ],
+ "target": [
+ 1.197076935786147,
+ 1.0123497253478748,
+ -0.13566183848059057
+ ],
+ "composition": {
+ "step": 5,
+ "position": [
+ -7,
+ 5.8,
+ 11
+ ],
+ "target": [
+ 1.2,
+ 1,
+ 1.1
+ ],
+ "subject": "新版架桥车、保障车与两车连接油管"
+ }
+ },
+ {
+ "code": "TASK-VIRTUAL-007",
+ "name": "重型支援桥前泵换件修复",
+ "taskId": "88",
+ "contentVersionId": "554",
+ "vehicle": {
+ "min": [
+ -0.9454731559753419,
+ -2.6725067714394868e-9,
+ -4.252710700886963
+ ],
+ "max": [
+ 0.9454730415344238,
+ 2.0246994533682563,
+ 3.981387023925782
+ ],
+ "center": [
+ -5.7220459037665705e-8,
+ 1.0123497253478748,
+ -0.13566183848059055
+ ],
+ "size": [
+ 1.8909461975097657,
+ 2.024699456040763,
+ 8.234097724812745
+ ]
+ },
+ "workshop": {
+ "min": [
+ -1.9600006332993507,
+ 0.5119520351387731,
+ -0.01164375245571172
+ ],
+ "max": [
+ 0.26318726897239686,
+ 1.056499999806285,
+ 2.1096019816398623
+ ],
+ "center": [
+ -0.8484066821634769,
+ 0.7842260174725291,
+ 1.0489791145920753
+ ],
+ "size": [
+ 2.2231879022717473,
+ 0.5445479646675119,
+ 2.121245734095574
+ ]
+ },
+ "parts": [
+ {
+ "id": "front-pump-hydraulic-pump",
+ "name": "1_24柱塞泵3_05前泵3_08新泵",
+ "bounds": {
+ "min": [
+ -0.18820216201430795,
+ 0.5635581141814255,
+ 1.457702397143186
+ ],
+ "max": [
+ -0.07565205652828401,
+ 0.7028944464374361,
+ 1.6607099304230595
+ ],
+ "center": [
+ -0.13192710927129597,
+ 0.6332262803094308,
+ 1.5592061637831227
+ ],
+ "size": [
+ 0.11255010548602394,
+ 0.1393363322560106,
+ 0.20300753327987353
+ ]
+ }
+ },
+ {
+ "id": "front-pump-power-take-off",
+ "name": "1_25取力器",
+ "bounds": {
+ "min": [
+ 0.29428619384765625,
+ 0.8238364002205599,
+ 3.288577842712402
+ ],
+ "max": [
+ 0.507171630859375,
+ 0.8999262210823763,
+ 3.4273477935791012
+ ],
+ "center": [
+ 0.4007289123535156,
+ 0.8618813106514681,
+ 3.3579628181457517
+ ],
+ "size": [
+ 0.21288543701171875,
+ 0.07608982086181637,
+ 0.13876995086669908
+ ]
+ }
+ },
+ {
+ "id": "front-pump-pto-switch",
+ "name": "1_25和1_27和2_03和2_08取力器开关",
+ "bounds": {
+ "min": [
+ 0.4034054660797119,
+ 0.8294571468331089,
+ 3.280953321456909
+ ],
+ "max": [
+ 0.5018548488616943,
+ 0.9279065296150912,
+ 3.3794027042388914
+ ],
+ "center": [
+ 0.4526301574707031,
+ 0.8786818382241001,
+ 3.3301780128479
+ ],
+ "size": [
+ 0.0984493827819824,
+ 0.09844938278198234,
+ 0.09844938278198256
+ ]
+ }
+ },
+ {
+ "id": "front-pump-ball-valve-switch",
+ "name": "1_26球阀开关",
+ "bounds": {
+ "min": [
+ 0.6174862091117759,
+ 0.9434233613997234,
+ -0.10674595512743167
+ ],
+ "max": [
+ 0.7224375207646792,
+ 0.9897868351082517,
+ -0.06038248141890336
+ ],
+ "center": [
+ 0.6699618649382275,
+ 0.9666050982539875,
+ -0.08356421827316751
+ ],
+ "size": [
+ 0.10495131165290328,
+ 0.046363473708528335,
+ 0.04636347370852831
+ ]
+ }
+ },
+ {
+ "id": "front-pump-aux-control-box",
+ "name": "1_28辅助控制盒内",
+ "bounds": {
+ "min": [
+ -0.5664820766448975,
+ 0.834593379209208,
+ 0.2590632534027102
+ ],
+ "max": [
+ -0.5312846892893709,
+ 0.9501093790032143,
+ 0.458679189682007
+ ],
+ "center": [
+ -0.5488833829671342,
+ 0.8923513791062112,
+ 0.3588712215423586
+ ],
+ "size": [
+ 0.03519738735552658,
+ 0.1155159997940064,
+ 0.1996159362792968
+ ]
+ }
+ },
+ {
+ "id": "front-pump-aux-control-box-cover",
+ "name": "1_28辅助控制盒盖",
+ "bounds": {
+ "min": [
+ -0.5869951629638672,
+ 0.8345932361580605,
+ 0.2579586410522463
+ ],
+ "max": [
+ -0.5687178802490235,
+ 0.9520385906197305,
+ 0.45867916107177764
+ ],
+ "center": [
+ -0.5778565216064453,
+ 0.8933159133888955,
+ 0.358318901062012
+ ],
+ "size": [
+ 0.018277282714843746,
+ 0.11744535446167004,
+ 0.20072052001953133
+ ]
+ }
+ },
+ {
+ "id": "front-pump-rescue-switch",
+ "name": "1_28和2_06互救开关",
+ "bounds": {
+ "min": [
+ -0.5729870891571044,
+ 0.8629678437210794,
+ 0.40330458641052275
+ ],
+ "max": [
+ -0.5489870882034301,
+ 0.8869678446747536,
+ 0.427304587364197
+ ],
+ "center": [
+ -0.5609870886802673,
+ 0.8749678441979165,
+ 0.4153045868873599
+ ],
+ "size": [
+ 0.024000000953674272,
+ 0.024000000953674272,
+ 0.024000000953674272
+ ]
+ }
+ },
+ {
+ "id": "bridge-engine",
+ "name": "架桥车发动机",
+ "bounds": {
+ "min": [
+ -0.260454466342926,
+ 0.5119520351387731,
+ 1.7737298083305362
+ ],
+ "max": [
+ 0.26318726897239686,
+ 0.8093134090401403,
+ 2.1096019816398623
+ ],
+ "center": [
+ 0.0013664013147354215,
+ 0.6606327220894567,
+ 1.9416658949851993
+ ],
+ "size": [
+ 0.5236417353153229,
+ 0.2973613739013672,
+ 0.33587217330932617
+ ]
+ }
+ },
+ {
+ "id": "bridge-old-pump",
+ "name": "旧前泵",
+ "bounds": {
+ "min": [
+ -0.18820215797544781,
+ 0.5635580980299226,
+ 1.4577023990727853
+ ],
+ "max": [
+ -0.07565205580116574,
+ 0.7028944456098787,
+ 1.6607099779225778
+ ],
+ "center": [
+ -0.13192710688830678,
+ 0.6332262718199007,
+ 1.5592061884976816
+ ],
+ "size": [
+ 0.11255010217428207,
+ 0.13933634757995605,
+ 0.20300757884979248
+ ]
+ }
+ },
+ {
+ "id": "bridge-new-pump",
+ "name": "新前泵",
+ "bounds": {
+ "min": [
+ -0.5382021579754478,
+ 0.5635580980299226,
+ 1.3077023990727854
+ ],
+ "max": [
+ -0.4256520558011657,
+ 0.7028944456098787,
+ 1.5107099779225779
+ ],
+ "center": [
+ -0.48192710688830676,
+ 0.6332262718199007,
+ 1.4092061884976816
+ ],
+ "size": [
+ 0.11255010217428207,
+ 0.13933634757995605,
+ 0.20300757884979248
+ ]
+ }
+ },
+ {
+ "id": "bridge-pump-bolt-1",
+ "name": "前泵安装螺栓 1",
+ "bounds": {
+ "min": [
+ -0.09771867841482162,
+ 0.6320393681526184,
+ 1.6485447883605957
+ ],
+ "max": [
+ -0.08297033607959747,
+ 0.6467920541763306,
+ 1.6655166149139404
+ ],
+ "center": [
+ -0.09034450724720955,
+ 0.6394157111644745,
+ 1.657030701637268
+ ],
+ "size": [
+ 0.014748342335224152,
+ 0.014752686023712158,
+ 0.016971826553344727
+ ]
+ }
+ },
+ {
+ "id": "bridge-pump-bolt-2",
+ "name": "前泵安装螺栓 2",
+ "bounds": {
+ "min": [
+ -0.09771867841482162,
+ 0.5702051520347595,
+ 1.6485447883605957
+ ],
+ "max": [
+ -0.08297033607959747,
+ 0.5849578380584717,
+ 1.6655164957046509
+ ],
+ "center": [
+ -0.09034450724720955,
+ 0.5775814950466156,
+ 1.6570306420326233
+ ],
+ "size": [
+ 0.014748342335224152,
+ 0.014752686023712158,
+ 0.016971707344055176
+ ]
+ }
+ },
+ {
+ "id": "bridge-pump-bolt-3",
+ "name": "前泵安装螺栓 3",
+ "bounds": {
+ "min": [
+ -0.18124298751354218,
+ 0.6320394277572632,
+ 1.6485447883605957
+ ],
+ "max": [
+ -0.16649463772773743,
+ 0.6467920541763306,
+ 1.6655164957046509
+ ],
+ "center": [
+ -0.1738688126206398,
+ 0.6394157409667969,
+ 1.6570306420326233
+ ],
+ "size": [
+ 0.014748349785804749,
+ 0.014752626419067383,
+ 0.016971707344055176
+ ]
+ }
+ },
+ {
+ "id": "bridge-pump-bolt-4",
+ "name": "前泵安装螺栓 4",
+ "bounds": {
+ "min": [
+ -0.18124298751354218,
+ 0.5702052116394043,
+ 1.6485446691513062
+ ],
+ "max": [
+ -0.16649463772773743,
+ 0.5849578380584717,
+ 1.6655164957046509
+ ],
+ "center": [
+ -0.1738688126206398,
+ 0.577581524848938,
+ 1.6570305824279785
+ ],
+ "size": [
+ 0.014748349785804749,
+ 0.014752626419067383,
+ 0.016971826553344727
+ ]
+ }
+ },
+ {
+ "id": "bridge-pump-seat",
+ "name": "取力器结合面",
+ "bounds": {
+ "min": [
+ -0.1882022619988744,
+ 0.5624232286877555,
+ 1.6607094988013718
+ ],
+ "max": [
+ -0.0756522343303983,
+ 0.6538979405827445,
+ 1.7797818168784592
+ ],
+ "center": [
+ -0.13192724816463636,
+ 0.60816058463525,
+ 1.7202456578399155
+ ],
+ "size": [
+ 0.1125500276684761,
+ 0.09147471189498901,
+ 0.1190723180770874
+ ]
+ }
+ },
+ {
+ "id": "bridge-tank-valve",
+ "name": "油箱一号球阀",
+ "bounds": {
+ "min": [
+ -0.6614819171926456,
+ 0.9028406146950685,
+ 0.015244349551225556
+ ],
+ "max": [
+ -0.644095540334888,
+ 0.9318094853348695,
+ 0.11543875159027661
+ ],
+ "center": [
+ -0.6527887287637668,
+ 0.917325050014969,
+ 0.06534155057075108
+ ],
+ "size": [
+ 0.01738637685775757,
+ 0.028968870639801025,
+ 0.10019440203905106
+ ]
+ }
+ },
+ {
+ "id": "bridge-paper",
+ "name": "初裁牛皮纸",
+ "bounds": {
+ "min": [
+ -1.9600006332993507,
+ 0.5511523498594761,
+ -0.01164375245571172
+ ],
+ "max": [
+ -1.8328937283158302,
+ 0.6631125821173192,
+ -0.011643734760582803
+ ],
+ "center": [
+ -1.8964471808075904,
+ 0.6071324659883977,
+ -0.011643743608147262
+ ],
+ "size": [
+ 0.1271069049835205,
+ 0.11196023225784302,
+ 1.7695128917694092e-8
+ ]
+ }
+ },
+ {
+ "id": "bridge-gasket",
+ "name": "修裁后的牛皮纸垫",
+ "bounds": {
+ "min": [
+ -1.9490382669866086,
+ 0.5645734077692033,
+ -0.011643750593066287
+ ],
+ "max": [
+ -1.840192317813635,
+ 0.6514855629205705,
+ -0.011643735691905093
+ ],
+ "center": [
+ -1.8946152924001218,
+ 0.6080294853448869,
+ -0.01164374314248569
+ ],
+ "size": [
+ 0.10884594917297363,
+ 0.08691215515136719,
+ 1.4901161193847656e-8
+ ]
+ }
+ },
+ {
+ "id": "bridge-inlet",
+ "name": "前泵进油管接头",
+ "bounds": {
+ "min": [
+ -0.17750550750356078,
+ 0.6131674039858994,
+ 1.498643517585101
+ ],
+ "max": [
+ -0.08724337015014053,
+ 0.684277712156218,
+ 1.549696207137408
+ ],
+ "center": [
+ -0.13237443882685065,
+ 0.6487225580710587,
+ 1.5241698623612545
+ ],
+ "size": [
+ 0.09026213735342026,
+ 0.0711103081703186,
+ 0.05105268955230713
+ ]
+ }
+ },
+ {
+ "id": "bridge-outlet",
+ "name": "前泵出油管接头",
+ "bounds": {
+ "min": [
+ -0.11179265402176308,
+ 0.6250685446308758,
+ 1.503535151365294
+ ],
+ "max": [
+ -0.10191714040853905,
+ 0.6642660491512921,
+ 1.5322937964229721
+ ],
+ "center": [
+ -0.10685489721515107,
+ 0.6446672968910839,
+ 1.517914473894133
+ ],
+ "size": [
+ 0.00987551361322403,
+ 0.03919750452041626,
+ 0.028758645057678223
+ ]
+ }
+ },
+ {
+ "id": "bridge-inlet-bag",
+ "name": "进油管封口袋",
+ "bounds": {
+ "min": [
+ -0.2641189961880446,
+ 0.6676532627313645,
+ 1.5486998324269292
+ ],
+ "max": [
+ -0.22651120714843273,
+ 0.7119082213609726,
+ 1.5931414131993291
+ ],
+ "center": [
+ -0.24531510166823867,
+ 0.6897807420461686,
+ 1.5709206228131292
+ ],
+ "size": [
+ 0.037607789039611844,
+ 0.044254958629608154,
+ 0.0444415807723999
+ ]
+ }
+ },
+ {
+ "id": "bridge-outlet-bag",
+ "name": "出油管封口袋",
+ "bounds": {
+ "min": [
+ -0.032166767679154884,
+ 0.6317621471796206,
+ 1.5955142730768461
+ ],
+ "max": [
+ -0.003936867974698555,
+ 0.6649816029209665,
+ 1.6288738015960593
+ ],
+ "center": [
+ -0.01805181782692672,
+ 0.6483718750502936,
+ 1.6121940373364527
+ ],
+ "size": [
+ 0.02822989970445633,
+ 0.03321945574134588,
+ 0.0333595285192132
+ ]
+ }
+ },
+ {
+ "id": "bridge-fill-cap",
+ "name": "新泵注油口盖",
+ "bounds": {
+ "min": [
+ -0.14094240986844353,
+ 0.6544309258222432,
+ 1.6146291494351224
+ ],
+ "max": [
+ -0.12291224324246697,
+ 0.6558430194616169,
+ 1.6326594352703885
+ ],
+ "center": [
+ -0.13192732655545525,
+ 0.65513697264193,
+ 1.6236442923527554
+ ],
+ "size": [
+ 0.018030166625976562,
+ 0.0014120936393737793,
+ 0.018030285835266113
+ ]
+ }
+ },
+ {
+ "id": "bridge-oil-can",
+ "name": "液压油加注壶(示意)",
+ "bounds": {
+ "min": [
+ -0.33942708066226307,
+ 0.7282262774823419,
+ 1.5342061508722495
+ ],
+ "max": [
+ -0.2844270809602863,
+ 0.8182262810586206,
+ 1.5842061516173076
+ ],
+ "center": [
+ -0.3119270808112747,
+ 0.7732262792704813,
+ 1.5592061512447786
+ ],
+ "size": [
+ 0.054999999701976776,
+ 0.09000000357627869,
+ 0.05000000074505806
+ ]
+ }
+ },
+ {
+ "id": "bridge-oil-stream",
+ "name": "液压油加注效果",
+ "bounds": {
+ "min": [
+ -0.13492708083735172,
+ 0.6632262806115857,
+ 1.6212061512187015
+ ],
+ "max": [
+ -0.12892708078519766,
+ 0.7832262779293767,
+ 1.6272061512708555
+ ],
+ "center": [
+ -0.1319270808112747,
+ 0.7232262792704812,
+ 1.6242061512447785
+ ],
+ "size": [
+ 0.006000000052154064,
+ 0.11999999731779099,
+ 0.006000000052154064
+ ]
+ }
+ },
+ {
+ "id": "bridge-test-control",
+ "name": "试验操作手柄(操作示意)",
+ "bounds": {
+ "min": [
+ -0.6499999993294477,
+ 1.0174999998137355,
+ 0.3325000001490116
+ ],
+ "max": [
+ -0.5900000006705522,
+ 1.056499999806285,
+ 0.39699999955296517
+ ],
+ "center": [
+ -0.62,
+ 1.0369999998100101,
+ 0.3647499998509884
+ ],
+ "size": [
+ 0.05999999865889549,
+ 0.03899999999254944,
+ 0.06449999940395357
+ ]
+ }
+ }
+ ],
+ "camera": [
+ 9.13847467216735,
+ 6.712104274650034,
+ 12.140732575400984
+ ],
+ "target": [
+ -0.5072637958824635,
+ 1.0123497253478748,
+ -0.13566183848059055
+ ],
+ "composition": {
+ "step": -1,
+ "position": [
+ -6.5,
+ 4,
+ 8
+ ],
+ "target": [
+ 0,
+ 1,
+ 1
+ ],
+ "subject": "新版架桥车及原位前泵换件部件"
+ }
+ },
+ {
+ "code": "TASK-VIRTUAL-008",
+ "name": "重型支援桥平衡阀拆拼互换",
+ "taskId": "89",
+ "contentVersionId": "555",
+ "vehicle": {
+ "min": [
+ -0.9454731559753419,
+ -2.6725067714394868e-9,
+ -4.252710700886963
+ ],
+ "max": [
+ 0.9454730415344238,
+ 2.0246994533682563,
+ 3.981387023925782
+ ],
+ "center": [
+ -5.7220459037665705e-8,
+ 1.0123497253478748,
+ -0.13566183848059055
+ ],
+ "size": [
+ 1.8909461975097657,
+ 2.024699456040763,
+ 8.234097724812745
+ ]
+ },
+ "workshop": {
+ "min": [
+ -0.28305295316868423,
+ 0.5119520351387731,
+ -0.19171471895714137
+ ],
+ "max": [
+ 0.26318726897239686,
+ 1.461075372695923,
+ 2.1096019816398623
+ ],
+ "center": [
+ -0.009932842098143685,
+ 0.9865137039173479,
+ 0.9589436313413605
+ ],
+ "size": [
+ 0.5462402221410811,
+ 0.9491233375571498,
+ 2.301316700597004
+ ]
+ },
+ "parts": [
+ {
+ "id": "front-pump-hydraulic-pump",
+ "name": "1_24柱塞泵3_05前泵3_08新泵",
+ "bounds": {
+ "min": [
+ -0.18820216201430795,
+ 0.5635581141814255,
+ 1.457702397143186
+ ],
+ "max": [
+ -0.07565205652828401,
+ 0.7028944464374361,
+ 1.6607099304230595
+ ],
+ "center": [
+ -0.13192710927129597,
+ 0.6332262803094308,
+ 1.5592061637831227
+ ],
+ "size": [
+ 0.11255010548602394,
+ 0.1393363322560106,
+ 0.20300753327987353
+ ]
+ }
+ },
+ {
+ "id": "front-pump-power-take-off",
+ "name": "1_25取力器",
+ "bounds": {
+ "min": [
+ 0.29428619384765625,
+ 0.8238364002205599,
+ 3.288577842712402
+ ],
+ "max": [
+ 0.507171630859375,
+ 0.8999262210823763,
+ 3.4273477935791012
+ ],
+ "center": [
+ 0.4007289123535156,
+ 0.8618813106514681,
+ 3.3579628181457517
+ ],
+ "size": [
+ 0.21288543701171875,
+ 0.07608982086181637,
+ 0.13876995086669908
+ ]
+ }
+ },
+ {
+ "id": "front-pump-pto-switch",
+ "name": "1_25和1_27和2_03和2_08取力器开关",
+ "bounds": {
+ "min": [
+ 0.4034054660797119,
+ 0.8294571468331089,
+ 3.280953321456909
+ ],
+ "max": [
+ 0.5018548488616943,
+ 0.9279065296150912,
+ 3.3794027042388914
+ ],
+ "center": [
+ 0.4526301574707031,
+ 0.8786818382241001,
+ 3.3301780128479
+ ],
+ "size": [
+ 0.0984493827819824,
+ 0.09844938278198234,
+ 0.09844938278198256
+ ]
+ }
+ },
+ {
+ "id": "front-pump-ball-valve-switch",
+ "name": "1_26球阀开关",
+ "bounds": {
+ "min": [
+ 0.6174862091117759,
+ 0.9434233613997234,
+ -0.10674595512743167
+ ],
+ "max": [
+ 0.7224375207646792,
+ 0.9897868351082517,
+ -0.06038248141890336
+ ],
+ "center": [
+ 0.6699618649382275,
+ 0.9666050982539875,
+ -0.08356421827316751
+ ],
+ "size": [
+ 0.10495131165290328,
+ 0.046363473708528335,
+ 0.04636347370852831
+ ]
+ }
+ },
+ {
+ "id": "front-pump-aux-control-box",
+ "name": "1_28辅助控制盒内",
+ "bounds": {
+ "min": [
+ -0.5664820766448975,
+ 0.834593379209208,
+ 0.2590632534027102
+ ],
+ "max": [
+ -0.5312846892893709,
+ 0.9501093790032143,
+ 0.458679189682007
+ ],
+ "center": [
+ -0.5488833829671342,
+ 0.8923513791062112,
+ 0.3588712215423586
+ ],
+ "size": [
+ 0.03519738735552658,
+ 0.1155159997940064,
+ 0.1996159362792968
+ ]
+ }
+ },
+ {
+ "id": "front-pump-aux-control-box-cover",
+ "name": "1_28辅助控制盒盖",
+ "bounds": {
+ "min": [
+ -0.5869951629638672,
+ 0.8345932361580605,
+ 0.2579586410522463
+ ],
+ "max": [
+ -0.5687178802490235,
+ 0.9520385906197305,
+ 0.45867916107177764
+ ],
+ "center": [
+ -0.5778565216064453,
+ 0.8933159133888955,
+ 0.358318901062012
+ ],
+ "size": [
+ 0.018277282714843746,
+ 0.11744535446167004,
+ 0.20072052001953133
+ ]
+ }
+ },
+ {
+ "id": "front-pump-rescue-switch",
+ "name": "1_28和2_06互救开关",
+ "bounds": {
+ "min": [
+ -0.5729870891571044,
+ 0.8629678437210794,
+ 0.40330458641052275
+ ],
+ "max": [
+ -0.5489870882034301,
+ 0.8869678446747536,
+ 0.427304587364197
+ ],
+ "center": [
+ -0.5609870886802673,
+ 0.8749678441979165,
+ 0.4153045868873599
+ ],
+ "size": [
+ 0.024000000953674272,
+ 0.024000000953674272,
+ 0.024000000953674272
+ ]
+ }
+ },
+ {
+ "id": "bridge-engine",
+ "name": "架桥车发动机",
+ "bounds": {
+ "min": [
+ -0.260454466342926,
+ 0.5119520351387731,
+ 1.7737298083305362
+ ],
+ "max": [
+ 0.26318726897239686,
+ 0.8093134090401403,
+ 2.1096019816398623
+ ],
+ "center": [
+ 0.0013664013147354215,
+ 0.6606327220894567,
+ 1.9416658949851993
+ ],
+ "size": [
+ 0.5236417353153229,
+ 0.2973613739013672,
+ 0.33587217330932617
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-valve",
+ "name": "小腔平衡阀",
+ "bounds": {
+ "min": [
+ -0.23050838692479728,
+ 1.3571103795799262,
+ 1.5711379053863517
+ ],
+ "max": [
+ -0.08839338256412146,
+ 1.4470421060356147,
+ 1.629233718183898
+ ],
+ "center": [
+ -0.15945088474445937,
+ 1.4020762428077704,
+ 1.6001858117851249
+ ],
+ "size": [
+ 0.1421150043606758,
+ 0.08993172645568848,
+ 0.05809581279754639
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-seat",
+ "name": "小腔阀座结合面(示意)",
+ "bounds": {
+ "min": [
+ -0.19055295346670745,
+ 1.367360903173203,
+ 1.5727156962129107
+ ],
+ "max": [
+ -0.13555295376473067,
+ 1.3723609030614443,
+ 1.6277156959148875
+ ],
+ "center": [
+ -0.16305295361571906,
+ 1.3698609031173237,
+ 1.6002156960638991
+ ],
+ "size": [
+ 0.054999999701976776,
+ 0.004999999888241291,
+ 0.054999999701976776
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-bolt-1",
+ "name": "小腔安装螺栓 1",
+ "bounds": {
+ "min": [
+ -0.1645670086145401,
+ 1.374973177909851,
+ 1.5809524059295654
+ ],
+ "max": [
+ -0.13322117924690247,
+ 1.4307029247283936,
+ 1.5902482271194458
+ ],
+ "center": [
+ -0.14889409393072128,
+ 1.4028380513191223,
+ 1.5856003165245056
+ ],
+ "size": [
+ 0.031345829367637634,
+ 0.05572974681854248,
+ 0.009295821189880371
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-bolt-2",
+ "name": "小腔安装螺栓 2",
+ "bounds": {
+ "min": [
+ -0.1645534336566925,
+ 1.3749794960021973,
+ 1.6114667654037476
+ ],
+ "max": [
+ -0.13320760428905487,
+ 1.4307093620300293,
+ 1.6207627058029175
+ ],
+ "center": [
+ -0.1488805189728737,
+ 1.4028444290161133,
+ 1.6161147356033325
+ ],
+ "size": [
+ 0.031345829367637634,
+ 0.05572986602783203,
+ 0.009295940399169922
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-bolt-3",
+ "name": "小腔安装螺栓 3",
+ "bounds": {
+ "min": [
+ -0.14207816123962402,
+ 1.3854598999023438,
+ 1.611459732055664
+ ],
+ "max": [
+ -0.1107323169708252,
+ 1.4411897659301758,
+ 1.6207555532455444
+ ],
+ "center": [
+ -0.1264052391052246,
+ 1.4133248329162598,
+ 1.6161076426506042
+ ],
+ "size": [
+ 0.03134584426879883,
+ 0.05572986602783203,
+ 0.009295821189880371
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-bolt-4",
+ "name": "小腔安装螺栓 4",
+ "bounds": {
+ "min": [
+ -0.14214152097702026,
+ 1.3854304552078247,
+ 1.5809522867202759
+ ],
+ "max": [
+ -0.11079569160938263,
+ 1.4411603212356567,
+ 1.5902482271194458
+ ],
+ "center": [
+ -0.12646860629320145,
+ 1.4132953882217407,
+ 1.5856002569198608
+ ],
+ "size": [
+ 0.031345829367637634,
+ 0.05572986602783203,
+ 0.009295940399169922
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-pipe",
+ "name": "小腔控制油口管接头",
+ "bounds": {
+ "min": [
+ -0.2247835695597771,
+ 1.3638693093975034,
+ 1.5860189198925037
+ ],
+ "max": [
+ -0.2179706543538216,
+ 1.371224164934918,
+ 1.593503832764818
+ ],
+ "center": [
+ -0.22137711195679935,
+ 1.3675467371662107,
+ 1.5897613763286609
+ ],
+ "size": [
+ 0.006812915205955505,
+ 0.007354855537414551,
+ 0.007484912872314453
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-bag",
+ "name": "小腔管口封口袋",
+ "bounds": {
+ "min": [
+ -0.16643400743603706,
+ 1.4025782728077947,
+ 1.58430576301889
+ ],
+ "max": [
+ -0.1563299621641636,
+ 1.4126823329808293,
+ 1.5946751830704646
+ ],
+ "center": [
+ -0.16138198480010033,
+ 1.407630302894312,
+ 1.5894904730446773
+ ],
+ "size": [
+ 0.010104045271873474,
+ 0.010104060173034668,
+ 0.010369420051574707
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-plug-1",
+ "name": "小腔油堵 1",
+ "bounds": {
+ "min": [
+ -0.14069156348705292,
+ 1.4452752542495728,
+ 1.6752486991882325
+ ],
+ "max": [
+ -0.1255529373884201,
+ 1.461075372695923,
+ 1.6862053442001343
+ ],
+ "center": [
+ -0.1331222504377365,
+ 1.4531753134727479,
+ 1.6807270216941834
+ ],
+ "size": [
+ 0.015138626098632812,
+ 0.015800118446350098,
+ 0.010956645011901855
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-plug-2",
+ "name": "小腔油堵 2",
+ "bounds": {
+ "min": [
+ -0.15934045612812042,
+ 1.4365791749954224,
+ 1.6752486991882325
+ ],
+ "max": [
+ -0.14420181512832642,
+ 1.4523792934417725,
+ 1.6862053442001343
+ ],
+ "center": [
+ -0.15177113562822342,
+ 1.4444792342185975,
+ 1.6807270216941834
+ ],
+ "size": [
+ 0.015138640999794006,
+ 0.015800118446350098,
+ 0.010956645011901855
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-cloth",
+ "name": "小腔清洗擦拭布",
+ "bounds": {
+ "min": [
+ -0.28305295316868423,
+ 1.422360902931059,
+ 1.5982156959689042
+ ],
+ "max": [
+ -0.2430529540627539,
+ 1.4473609033035881,
+ 1.602215696158894
+ ],
+ "center": [
+ -0.26305295361571907,
+ 1.4348609031173236,
+ 1.6002156960638991
+ ],
+ "size": [
+ 0.03999999910593033,
+ 0.02500000037252903,
+ 0.004000000189989805
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-valve",
+ "name": "大腔平衡阀",
+ "bounds": {
+ "min": [
+ 0.046735882004790535,
+ 1.3596880426990332,
+ -0.19171471895714137
+ ],
+ "max": [
+ 0.10481841041713261,
+ 1.4323081979888024,
+ -0.046565771122172805
+ ],
+ "center": [
+ 0.07577714621096157,
+ 1.3959981203439178,
+ -0.11914024503965709
+ ],
+ "size": [
+ 0.05808252841234207,
+ 0.07262015528976917,
+ 0.14514894783496857
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-seat",
+ "name": "大腔阀座结合面(示意)",
+ "bounds": {
+ "min": [
+ 0.04830841644673847,
+ 1.3626683661142829,
+ -0.14442941175837848
+ ],
+ "max": [
+ 0.10330841614871525,
+ 1.3676683660025242,
+ -0.0894294120564017
+ ],
+ "center": [
+ 0.07580841629772686,
+ 1.3651683660584035,
+ -0.11692941190739009
+ ],
+ "size": [
+ 0.054999999701976776,
+ 0.004999999888241291,
+ 0.054999999701976776
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-bolt-1",
+ "name": "大腔安装螺栓 1",
+ "bounds": {
+ "min": [
+ 0.0565444640815258,
+ 1.366406798362732,
+ -0.1436219960451126
+ ],
+ "max": [
+ 0.06584031879901886,
+ 1.4244091510772705,
+ -0.12130407989025116
+ ],
+ "center": [
+ 0.06119239144027233,
+ 1.3954079747200012,
+ -0.13246303796768188
+ ],
+ "size": [
+ 0.009295854717493057,
+ 0.058002352714538574,
+ 0.02231791615486145
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-bolt-2",
+ "name": "大腔安装螺栓 2",
+ "bounds": {
+ "min": [
+ 0.0870591402053833,
+ 1.366410732269287,
+ -0.14331120252609253
+ ],
+ "max": [
+ 0.09635499119758606,
+ 1.4244132041931152,
+ -0.12099328637123108
+ ],
+ "center": [
+ 0.09170706570148468,
+ 1.3954119682312012,
+ -0.1321522444486618
+ ],
+ "size": [
+ 0.009295850992202759,
+ 0.058002471923828125,
+ 0.02231791615486145
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-bolt-3",
+ "name": "大腔安装螺栓 3",
+ "bounds": {
+ "min": [
+ 0.087052121758461,
+ 1.3728289604187012,
+ -0.1672648787498474
+ ],
+ "max": [
+ 0.09634798020124435,
+ 1.4308314323425293,
+ -0.14494696259498596
+ ],
+ "center": [
+ 0.09170005097985268,
+ 1.4018301963806152,
+ -0.1561059206724167
+ ],
+ "size": [
+ 0.009295858442783356,
+ 0.058002471923828125,
+ 0.02231791615486145
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-bolt-4",
+ "name": "大腔安装螺栓 4",
+ "bounds": {
+ "min": [
+ 0.0565444640815258,
+ 1.3728110790252686,
+ -0.16719739139080048
+ ],
+ "max": [
+ 0.06584031879901886,
+ 1.4308134317398071,
+ -0.14487947523593903
+ ],
+ "center": [
+ 0.06119239144027233,
+ 1.4018122553825378,
+ -0.15603843331336975
+ ],
+ "size": [
+ 0.009295854717493057,
+ 0.058002352714538574,
+ 0.02231791615486145
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-pipe",
+ "name": "大腔控制油口管接头",
+ "bounds": {
+ "min": [
+ 0.06153565655994547,
+ 1.3709602356277117,
+ -0.06039170920689203
+ ],
+ "max": [
+ 0.06902054708051814,
+ 1.3781160116515765,
+ -0.05323591828186609
+ ],
+ "center": [
+ 0.0652781018202318,
+ 1.3745381236396441,
+ -0.05681381374437906
+ ],
+ "size": [
+ 0.007484890520572662,
+ 0.007155776023864746,
+ 0.00715579092502594
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-bag",
+ "name": "大腔管口封口袋",
+ "bounds": {
+ "min": [
+ 0.12013036886007944,
+ 1.4095869444565952,
+ -0.061677217643645754
+ ],
+ "max": [
+ 0.13049985224158922,
+ 1.4196910046296298,
+ -0.05157317237177228
+ ],
+ "center": [
+ 0.12531511055083433,
+ 1.4146389745431125,
+ -0.05662519500770902
+ ],
+ "size": [
+ 0.010369483381509781,
+ 0.010104060173034668,
+ 0.010104045271873474
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-plug-1",
+ "name": "大腔油堵 1",
+ "bounds": {
+ "min": [
+ 0.07084108889102936,
+ 1.4365623664855958,
+ -0.07134584903717041
+ ],
+ "max": [
+ 0.08179780095815659,
+ 1.4513025951385499,
+ -0.05757270574569702
+ ],
+ "center": [
+ 0.07631944492459297,
+ 1.4439324808120728,
+ -0.06445927739143371
+ ],
+ "size": [
+ 0.010956712067127228,
+ 0.014740228652954102,
+ 0.013773143291473389
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-plug-2",
+ "name": "大腔油堵 2",
+ "bounds": {
+ "min": [
+ 0.07084108889102936,
+ 1.4287156534194947,
+ -0.04206152081489563
+ ],
+ "max": [
+ 0.08179780095815659,
+ 1.4434558820724488,
+ -0.028288370072841643
+ ],
+ "center": [
+ 0.07631944492459297,
+ 1.4360857677459717,
+ -0.035174945443868635
+ ],
+ "size": [
+ 0.010956712067127228,
+ 0.014740228652954102,
+ 0.013773150742053986
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-cloth",
+ "name": "大腔清洗擦拭布",
+ "bounds": {
+ "min": [
+ -0.04419158325523831,
+ 1.417668365872139,
+ -0.118929412002385
+ ],
+ "max": [
+ -0.004191584149307981,
+ 1.442668366244668,
+ -0.11492941181239519
+ ],
+ "center": [
+ -0.024191583702273145,
+ 1.4301683660584035,
+ -0.11692941190739009
+ ],
+ "size": [
+ 0.03999999910593033,
+ 0.02500000037252903,
+ 0.004000000189989805
+ ]
+ }
+ }
+ ],
+ "camera": [
+ 8.959072286684737,
+ 6.306347019473671,
+ 11.266793871944204
+ ],
+ "target": [
+ -5.7220459037665705e-8,
+ 1.0123497253478748,
+ -0.13566183848059055
+ ],
+ "composition": {
+ "step": 2,
+ "position": [
+ -3.8,
+ 3.8,
+ 5
+ ],
+ "target": [
+ -0.05,
+ 1.3,
+ 0.75
+ ],
+ "subject": "新版架桥车大小腔平衡阀与原位拆装区域"
+ }
+ }
+]
\ No newline at end of file
diff --git a/reports/bridge-new-models-006-008-20260917/failure.png b/reports/bridge-new-models-006-008-20260917/failure.png
new file mode 100644
index 0000000..da654c5
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/failure.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/geometry-preflight.json b/reports/bridge-new-models-006-008-20260917/geometry-preflight.json
new file mode 100644
index 0000000..2a4317b
--- /dev/null
+++ b/reports/bridge-new-models-006-008-20260917/geometry-preflight.json
@@ -0,0 +1,3155 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 87 first view",
+ "state": {
+ "id": "bridge-engine",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "lid": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "evidenceCount": 0,
+ "grounding": null,
+ "modelSources": [
+ {
+ "name": "地形.glb",
+ "url": "/models/地形.glb"
+ },
+ {
+ "name": "0916架桥车.glb",
+ "url": "/models/bridge-erector-20260916.glb"
+ },
+ {
+ "name": "0916保障车.glb",
+ "url": "/models/bridge-support-20260916.glb"
+ },
+ {
+ "name": "双车连接油管.glb",
+ "url": "/models/bridge-rescue-hoses-20260916.glb"
+ }
+ ],
+ "hdr": "venice_sunset_1k",
+ "distance": 14.142525019070801,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 903.4152273706155,
+ "y": 498.5493360358045,
+ "localX": 644.4152273706155,
+ "localY": 310.0493360358045,
+ "visible": true
+ },
+ "bounds": [
+ 0.5236417353153229,
+ 0.2973613739013672,
+ 0.33587217330932617
+ ],
+ "projected": {
+ "x": 629.3646534202757,
+ "y": 298.22272400664775,
+ "w": 30.04947331550966,
+ "h": 24.056482628946014
+ },
+ "pivot": [
+ 0.0013664013147354215,
+ 0.6606327220894567,
+ 1.9416658949851993
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 0,
+ 0.6246950475544243,
+ 0.7808688094430303
+ ],
+ "workflowCoverage": [
+ {
+ "name": "bridge-engine",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "bridge-hose-a",
+ "glowing": true
+ },
+ {
+ "name": "bridge-hose-b",
+ "glowing": true
+ },
+ {
+ "name": "bridge-return-valve",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ },
+ {
+ "name": "bridge-filter-valve-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-filter-valve-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-support-pto",
+ "glowing": true
+ },
+ {
+ "name": "bridge-supply",
+ "glowing": true
+ },
+ {
+ "name": "bridge-normal-control",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 9.404772746326303,
+ 5.862351795212512,
+ 10.310496465843245
+ ],
+ "target": [
+ 1.197076935786147,
+ 1.0123497253478748,
+ -0.13566183848059057
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 架桥车发动机",
+ "x": 839.375,
+ "y": 526.765625,
+ "w": 128,
+ "h": 30,
+ "id": "bridge-engine"
+ }
+ ],
+ "narration": [
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "保持架桥车发动机运行",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 2209160
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ 0.0013663864135741999,
+ 0.6606327220894567,
+ 1.941665954589844
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 88 first view",
+ "state": {
+ "id": "bridge-engine",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "lid": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "evidenceCount": 0,
+ "grounding": null,
+ "modelSources": [
+ {
+ "name": "地形.glb",
+ "url": "/models/地形.glb"
+ },
+ {
+ "name": "0916架桥车.glb",
+ "url": "/models/bridge-erector-20260916.glb"
+ },
+ {
+ "name": "3封口袋.glb",
+ "url": "/models/bridge-pump-bags-20260916.glb"
+ },
+ {
+ "name": "牛皮纸.glb",
+ "url": "/models/bridge-paper-20260916.glb"
+ }
+ ],
+ "hdr": "venice_sunset_1k",
+ "distance": 13.1354334541972,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 960.2545229943581,
+ "y": 524.1939434371399,
+ "localX": 701.2545229943581,
+ "localY": 335.69394343713986,
+ "visible": true
+ },
+ "bounds": [
+ 0.5236417353153229,
+ 0.2973613739013672,
+ 0.33587217330932617
+ ],
+ "projected": {
+ "x": 683.6843306065691,
+ "y": 321.3458824543759,
+ "w": 35.06954168291577,
+ "h": 29.272542184692668
+ },
+ "pivot": [
+ 0.0013664013147354215,
+ 0.6606327220894567,
+ 1.9416658949851993
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 0,
+ 0.6246950475544243,
+ 0.7808688094430303
+ ],
+ "workflowCoverage": [
+ {
+ "name": "bridge-engine",
+ "glowing": true
+ },
+ {
+ "name": "bridge-paper",
+ "glowing": true
+ },
+ {
+ "name": "bridge-tank-valve",
+ "glowing": true
+ },
+ {
+ "name": "bridge-inlet",
+ "glowing": true
+ },
+ {
+ "name": "bridge-inlet-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-outlet",
+ "glowing": true
+ },
+ {
+ "name": "bridge-outlet-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-3",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-4",
+ "glowing": true
+ },
+ {
+ "name": "bridge-old-pump",
+ "glowing": true
+ },
+ {
+ "name": "bridge-new-pump",
+ "glowing": true
+ },
+ {
+ "name": "bridge-fill-cap",
+ "glowing": true
+ },
+ {
+ "name": "bridge-oil-can",
+ "glowing": true
+ },
+ {
+ "name": "bridge-test-control",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 7.115960627356131,
+ 5.51698233907977,
+ 9.5666237910958
+ ],
+ "target": [
+ -0.5072637958824635,
+ 1.0123497253478748,
+ -0.13566183848059055
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 架桥车发动机",
+ "x": 896.21875,
+ "y": 555.109375,
+ "w": 128,
+ "h": 30,
+ "id": "bridge-engine"
+ }
+ ],
+ "narration": [
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "关闭架桥车发动机",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 13195851
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ 0.0013663864135741999,
+ 0.6606327220894567,
+ 1.941665954589844
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 89 first view",
+ "state": {
+ "id": "bridge-small-cloth",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "lid": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "evidenceCount": 0,
+ "grounding": null,
+ "modelSources": [
+ {
+ "name": "地形.glb",
+ "url": "/models/地形.glb"
+ },
+ {
+ "name": "0916架桥车.glb",
+ "url": "/models/bridge-erector-20260916.glb"
+ },
+ {
+ "name": "4封口袋.glb",
+ "url": "/models/bridge-valve-bags-20260916.glb"
+ }
+ ],
+ "hdr": "venice_sunset_1k",
+ "distance": 12.394854711827099,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 935.9840818928475,
+ "y": 468.92859123029064,
+ "localX": 676.9840818928475,
+ "localY": 280.42859123029064,
+ "visible": true
+ },
+ "bounds": [
+ 0.03999999910593033,
+ 0.02500000037252903,
+ 0.004000000189989805
+ ],
+ "projected": {
+ "x": 676.0421084692439,
+ "y": 279.4738201751618,
+ "w": 1.8849372687043342,
+ "h": 1.9110539934492294
+ },
+ "pivot": [
+ -0.26305295361571907,
+ 1.4348609031173236,
+ 1.6002156960638991
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 0.4982728791224398,
+ 0.8304547985373997,
+ 0.2491364395612199
+ ],
+ "workflowCoverage": [
+ {
+ "name": "bridge-small-cloth",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-pipe",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-3",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-4",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-valve",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-plug-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-plug-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-seat",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-cloth",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-pipe",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-3",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-4",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-valve",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-plug-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-plug-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-seat",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 7.193425229518143,
+ 5.263010122057047,
+ 9.019606708277626
+ ],
+ "target": [
+ -5.7220459037665705e-8,
+ 1.0123497253478748,
+ -0.13566183848059055
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 小腔清洗擦拭布",
+ "x": 865.984375,
+ "y": 485.875,
+ "w": 140,
+ "h": 30,
+ "id": "bridge-small-cloth"
+ }
+ ],
+ "narration": [
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-small-cloth",
+ "kind": "identify",
+ "directionHint": "清洗并擦净阀体",
+ "effects": [
+ {
+ "targetId": "bridge-small-cloth",
+ "offset": [
+ 0.7,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-small-valve",
+ "color": 8492701
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ -0.26305295361571907,
+ 1.4348609031173236,
+ 1.6002156960638991
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ }
+ ],
+ "errors": [],
+ "writes": []
+}
\ No newline at end of file
diff --git a/reports/bridge-new-models-006-008-20260917/index.html b/reports/bridge-new-models-006-008-20260917/index.html
new file mode 100644
index 0000000..e60bbaf
--- /dev/null
+++ b/reports/bridge-new-models-006-008-20260917/index.html
@@ -0,0 +1 @@
+006~008 新模型验收006~008 新模型验收
更新现有任务;005 两个入口未变。新模型来自用户提供文件,保留原始字节;旧内容版本及 v3 定义保留。现有成员、运行记录和成绩规则没有删除或重建。
| 任务 | 名称 | 步骤 | 真实交互 | 内容版本 | 结果 |
|---|
| TASK-VIRTUAL-006 | 重型支援桥液压泵应急替代 | 7 | 12 | 553 | 通过 |
| TASK-VIRTUAL-007 | 重型支援桥前泵换件修复 | 11 | 27 | 554 | 通过 |
| TASK-VIRTUAL-008 | 重型支援桥平衡阀拆拼互换 | 16 | 50 | 555 | 通过 |
以管理员教员预览通过真实鼠标点击/拖拽、逐步服务端校验完成;预览不写入学员成绩。006 分别操作两个出口球阀,007 拆装四颗真实螺栓,008 完成两侧阀体互换。数字人视频与语音保留。
保障车取力器开关、试验手柄、清洗布、阀座结合面等没有独立精确模型的项目仍标明操作示意。
校验命令:node --test scripts/bridge-new-models.test.mjs;node scripts/virtual-training-formal-route.contract.test.mjs;pnpm run build;mvn -pl ut_tran -Dtest=ScriptedTrainingContractTest,ScriptModelRevisionTest test。数据与文件校验 · 版本迁移。测试没有新增教学任务。
TASK-VIRTUAL-006 · 重型支援桥液压泵应急替代
打开现有任务预览 · 逐项动作检查


TASK-VIRTUAL-007 · 重型支援桥前泵换件修复
打开现有任务预览 · 逐项动作检查


TASK-VIRTUAL-008 · 重型支援桥平衡阀拆拼互换
打开现有任务预览 · 逐项动作检查

\ No newline at end of file
diff --git a/reports/bridge-new-models-006-008-20260917/lan-media-and-005.json b/reports/bridge-new-models-006-008-20260917/lan-media-and-005.json
new file mode 100644
index 0000000..a2552a9
--- /dev/null
+++ b/reports/bridge-new-models-006-008-20260917/lan-media-and-005.json
@@ -0,0 +1,4495 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 87 first view",
+ "state": {
+ "id": "bridge-engine",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "cameraTween": false,
+ "lid": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "evidenceCount": 0,
+ "grounding": null,
+ "modelSources": [
+ {
+ "name": "地形.glb",
+ "url": "/models/地形.glb"
+ },
+ {
+ "name": "0916架桥车.glb",
+ "url": "/models/bridge-erector-20260916.glb"
+ },
+ {
+ "name": "0916保障车.glb",
+ "url": "/models/bridge-support-20260916.glb"
+ },
+ {
+ "name": "双车连接油管.glb",
+ "url": "/models/bridge-rescue-hoses-20260916.glb"
+ }
+ ],
+ "hdr": "venice_sunset_1k",
+ "distance": 14.142525019070801,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 903.4152273706155,
+ "y": 498.5493360358045,
+ "localX": 644.4152273706155,
+ "localY": 310.0493360358045,
+ "visible": true
+ },
+ "bounds": [
+ 0.5236417353153229,
+ 0.2973613739013672,
+ 0.33587217330932617
+ ],
+ "projected": {
+ "x": 629.3646534202757,
+ "y": 298.22272400664775,
+ "w": 30.04947331550966,
+ "h": 24.056482628946014
+ },
+ "pivot": [
+ 0.0013664013147354215,
+ 0.6606327220894567,
+ 1.9416658949851993
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 0,
+ 0.6246950475544243,
+ 0.7808688094430303
+ ],
+ "workflowCoverage": [
+ {
+ "name": "bridge-engine",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "bridge-hose-a",
+ "glowing": true
+ },
+ {
+ "name": "bridge-hose-b",
+ "glowing": true
+ },
+ {
+ "name": "bridge-return-valve",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ },
+ {
+ "name": "bridge-filter-valve-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-filter-valve-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-support-pto",
+ "glowing": true
+ },
+ {
+ "name": "bridge-supply",
+ "glowing": true
+ },
+ {
+ "name": "bridge-normal-control",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 9.404772746326303,
+ 5.862351795212512,
+ 10.310496465843245
+ ],
+ "target": [
+ 1.197076935786147,
+ 1.0123497253478748,
+ -0.13566183848059057
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 架桥车发动机",
+ "x": 839.375,
+ "y": 526.765625,
+ "w": 128,
+ "h": 30,
+ "id": "bridge-engine"
+ }
+ ],
+ "narration": [
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "保持架桥车发动机运行",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 2209160
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ 0.0013663864135741999,
+ 0.6606327220894567,
+ 1.941665954589844
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 87 digital-human video playback",
+ "pass": true,
+ "media": {
+ "width": 480,
+ "height": 640,
+ "duration": 7.84,
+ "currentTime": 0.021904
+ }
+ },
+ {
+ "name": "task 88 first view",
+ "state": {
+ "id": "bridge-engine",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "cameraTween": false,
+ "lid": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "evidenceCount": 0,
+ "grounding": null,
+ "modelSources": [
+ {
+ "name": "地形.glb",
+ "url": "/models/地形.glb"
+ },
+ {
+ "name": "0916架桥车.glb",
+ "url": "/models/bridge-erector-20260916.glb"
+ },
+ {
+ "name": "3封口袋.glb",
+ "url": "/models/bridge-pump-bags-20260916.glb"
+ },
+ {
+ "name": "牛皮纸.glb",
+ "url": "/models/bridge-paper-20260916.glb"
+ }
+ ],
+ "hdr": "venice_sunset_1k",
+ "distance": 13.1354334541972,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 960.2545229943581,
+ "y": 524.1939434371399,
+ "localX": 701.2545229943581,
+ "localY": 335.69394343713986,
+ "visible": true
+ },
+ "bounds": [
+ 0.5236417353153229,
+ 0.2973613739013672,
+ 0.33587217330932617
+ ],
+ "projected": {
+ "x": 683.6843306065691,
+ "y": 321.3458824543759,
+ "w": 35.06954168291577,
+ "h": 29.272542184692668
+ },
+ "pivot": [
+ 0.0013664013147354215,
+ 0.6606327220894567,
+ 1.9416658949851993
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 0,
+ 0.6246950475544243,
+ 0.7808688094430303
+ ],
+ "workflowCoverage": [
+ {
+ "name": "bridge-engine",
+ "glowing": true
+ },
+ {
+ "name": "bridge-paper",
+ "glowing": true
+ },
+ {
+ "name": "bridge-tank-valve",
+ "glowing": true
+ },
+ {
+ "name": "bridge-inlet",
+ "glowing": true
+ },
+ {
+ "name": "bridge-inlet-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-outlet",
+ "glowing": true
+ },
+ {
+ "name": "bridge-outlet-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-3",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-4",
+ "glowing": true
+ },
+ {
+ "name": "bridge-old-pump",
+ "glowing": true
+ },
+ {
+ "name": "bridge-new-pump",
+ "glowing": true
+ },
+ {
+ "name": "bridge-fill-cap",
+ "glowing": true
+ },
+ {
+ "name": "bridge-oil-can",
+ "glowing": true
+ },
+ {
+ "name": "bridge-test-control",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 7.115960627356131,
+ 5.51698233907977,
+ 9.5666237910958
+ ],
+ "target": [
+ -0.5072637958824635,
+ 1.0123497253478748,
+ -0.13566183848059055
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 架桥车发动机",
+ "x": 896.21875,
+ "y": 555.109375,
+ "w": 128,
+ "h": 30,
+ "id": "bridge-engine"
+ }
+ ],
+ "narration": [
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "关闭架桥车发动机",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 13195851
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ 0.0013663864135741999,
+ 0.6606327220894567,
+ 1.941665954589844
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 88 digital-human video playback",
+ "pass": true,
+ "media": {
+ "width": 480,
+ "height": 640,
+ "duration": 6.64,
+ "currentTime": 0.016191
+ }
+ },
+ {
+ "name": "task 89 first view",
+ "state": {
+ "id": "bridge-small-cloth",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "cameraTween": false,
+ "lid": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "evidenceCount": 0,
+ "grounding": null,
+ "modelSources": [
+ {
+ "name": "地形.glb",
+ "url": "/models/地形.glb"
+ },
+ {
+ "name": "0916架桥车.glb",
+ "url": "/models/bridge-erector-20260916.glb"
+ },
+ {
+ "name": "4封口袋.glb",
+ "url": "/models/bridge-valve-bags-20260916.glb"
+ }
+ ],
+ "hdr": "venice_sunset_1k",
+ "distance": 12.394854711827099,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 935.9840818928475,
+ "y": 468.92859123029064,
+ "localX": 676.9840818928475,
+ "localY": 280.42859123029064,
+ "visible": true
+ },
+ "bounds": [
+ 0.03999999910593033,
+ 0.02500000037252903,
+ 0.004000000189989805
+ ],
+ "projected": {
+ "x": 676.0421084692439,
+ "y": 279.4738201751618,
+ "w": 1.8849372687043342,
+ "h": 1.9110539934492294
+ },
+ "pivot": [
+ -0.26305295361571907,
+ 1.4348609031173236,
+ 1.6002156960638991
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 0.4982728791224398,
+ 0.8304547985373997,
+ 0.2491364395612199
+ ],
+ "workflowCoverage": [
+ {
+ "name": "bridge-small-cloth",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-pipe",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-3",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-4",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-valve",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-plug-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-plug-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-seat",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-cloth",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-pipe",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-3",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-4",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-valve",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-plug-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-plug-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-seat",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 7.193425229518143,
+ 5.263010122057047,
+ 9.019606708277626
+ ],
+ "target": [
+ -5.7220459037665705e-8,
+ 1.0123497253478748,
+ -0.13566183848059055
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 小腔清洗擦拭布",
+ "x": 865.984375,
+ "y": 485.875,
+ "w": 140,
+ "h": 30,
+ "id": "bridge-small-cloth"
+ }
+ ],
+ "narration": [
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-small-cloth",
+ "kind": "identify",
+ "directionHint": "清洗并擦净阀体",
+ "effects": [
+ {
+ "targetId": "bridge-small-cloth",
+ "offset": [
+ 0.7,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-small-valve",
+ "color": 8492701
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ -0.26305295361571907,
+ 1.4348609031173236,
+ 1.6002156960638991
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 89 digital-human video playback",
+ "pass": true,
+ "media": {
+ "width": 480,
+ "height": 640,
+ "duration": 5.96,
+ "currentTime": 0.017625
+ }
+ },
+ {
+ "name": "task 86 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "cameraTween": false,
+ "lid": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "evidenceCount": 0,
+ "grounding": null,
+ "modelSources": [
+ {
+ "name": "地形.glb",
+ "url": "/models/地形.glb"
+ },
+ {
+ "name": "步骤模型.glb",
+ "url": "/models/步骤模型.glb"
+ }
+ ],
+ "hdr": "venice_sunset_1k",
+ "distance": 11.052363924053688,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 937.1159093565705,
+ "y": 510.8943121357542,
+ "localX": 678.1159093565705,
+ "localY": 322.3943121357542,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935024518472723,
+ 0.13537492625037484,
+ 0.19723593501664283
+ ],
+ "projected": {
+ "x": 670.919240275776,
+ "y": 316.01579133562,
+ "w": 14.309325962616413,
+ "h": 12.873100207788639
+ },
+ "pivot": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 6.098689649701348e-32,
+ 2.5291018817332963e-16,
+ -1
+ ],
+ "workflowCoverage": [
+ {
+ "name": "front-pump-hydraulic-pump",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 6.688026389433602,
+ 3.8228247388783156,
+ 8.328485692502216
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 881.0625,
+ "y": 533.375,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "narration": [
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 86 digital-human video playback",
+ "pass": true,
+ "media": {
+ "width": 480,
+ "height": 640,
+ "duration": 4.96,
+ "currentTime": 0.007543
+ }
+ },
+ {
+ "name": "task 116 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "cameraTween": false,
+ "lid": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "evidenceCount": 0,
+ "grounding": null,
+ "modelSources": [
+ {
+ "name": "terrain-005-20260917.glb",
+ "url": "/models/terrain-005-20260917.glb"
+ },
+ {
+ "name": "0916架桥车.glb",
+ "url": "/models/bridge-erector-20260916.glb"
+ }
+ ],
+ "hdr": "venice_sunset_1k",
+ "distance": 11.026959938593922,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 933.2020303264042,
+ "y": 508.95441504276926,
+ "localX": 674.2020303264042,
+ "localY": 320.45441504276926,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935033827385107,
+ 0.13537495848346393,
+ 0.1972360067697554
+ ],
+ "projected": {
+ "x": 666.91484191321,
+ "y": 314.1958643764656,
+ "w": 14.498500962929938,
+ "h": 12.630497316989477
+ },
+ "pivot": [
+ -0.12817634914491466,
+ 0.6152234412401882,
+ 1.6466822177405493
+ ],
+ "pickPoints": [
+ {
+ "x": 933.164092394675,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 928.814542105796,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 937.5136426835539,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 926.6397669613565,
+ "y": 509.0111130349603
+ },
+ {
+ "x": 933.164092394675,
+ "y": 507.1165384374119
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 507.1165384374119
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 507.1165384374119
+ },
+ {
+ "x": 933.164092394675,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 928.814542105796,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 926.6397669613565,
+ "y": 510.9056876325087
+ },
+ {
+ "x": 935.3388675391145,
+ "y": 505.22196383986346
+ },
+ {
+ "x": 933.164092394675,
+ "y": 512.8002622300571
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 512.8002622300571
+ },
+ {
+ "x": 928.814542105796,
+ "y": 512.8002622300571
+ },
+ {
+ "x": 926.6397669613565,
+ "y": 512.8002622300571
+ },
+ {
+ "x": 930.9893172502354,
+ "y": 514.6948368276055
+ }
+ ],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 4.7683715820306587e-7,
+ 1.629206909017054e-7,
+ -0.9999999999998731
+ ],
+ "workflowCoverage": [
+ {
+ "name": "front-pump-hydraulic-pump",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 7.138234886169582,
+ 3.695554761077557,
+ 7.955160424286649
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 877.15625,
+ "y": 531.3125,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "narration": [
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 116 digital-human video playback",
+ "pass": true,
+ "media": {
+ "width": 480,
+ "height": 640,
+ "duration": 4.96,
+ "currentTime": 0.017476
+ }
+ }
+ ],
+ "errors": [],
+ "writes": []
+}
\ No newline at end of file
diff --git a/reports/bridge-new-models-006-008-20260917/list-lan.png b/reports/bridge-new-models-006-008-20260917/list-lan.png
new file mode 100644
index 0000000..7f8a57b
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/list-lan.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/list-local.png b/reports/bridge-new-models-006-008-20260917/list-local.png
new file mode 100644
index 0000000..f0613e2
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/list-local.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/list.json b/reports/bridge-new-models-006-008-20260917/list.json
new file mode 100644
index 0000000..f9f2fe4
--- /dev/null
+++ b/reports/bridge-new-models-006-008-20260917/list.json
@@ -0,0 +1,41 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "label": "local",
+ "code": "006",
+ "file": "bridge-pump-substitute-v4.jpg",
+ "pass": true
+ },
+ {
+ "label": "local",
+ "code": "007",
+ "file": "bridge-pump-replace-v4.jpg",
+ "pass": true
+ },
+ {
+ "label": "local",
+ "code": "008",
+ "file": "bridge-balance-valve-swap-v4.jpg",
+ "pass": true
+ },
+ {
+ "label": "lan",
+ "code": "006",
+ "file": "bridge-pump-substitute-v4.jpg",
+ "pass": true
+ },
+ {
+ "label": "lan",
+ "code": "007",
+ "file": "bridge-pump-replace-v4.jpg",
+ "pass": true
+ },
+ {
+ "label": "lan",
+ "code": "008",
+ "file": "bridge-balance-valve-swap-v4.jpg",
+ "pass": true
+ }
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-new-models-006-008-20260917/migration.json b/reports/bridge-new-models-006-008-20260917/migration.json
new file mode 100644
index 0000000..646e8a9
--- /dev/null
+++ b/reports/bridge-new-models-006-008-20260917/migration.json
@@ -0,0 +1,28 @@
+{
+ "pass": true,
+ "migrated": [
+ {
+ "id": 87,
+ "code": "TASK-VIRTUAL-006",
+ "versionId": "553"
+ },
+ {
+ "id": 88,
+ "code": "TASK-VIRTUAL-007",
+ "projectId": "440",
+ "versionId": "554",
+ "steps": 11
+ },
+ {
+ "id": 89,
+ "code": "TASK-VIRTUAL-008",
+ "projectId": "441",
+ "versionId": "555",
+ "steps": 16
+ }
+ ],
+ "unchanged": [
+ 86,
+ 116
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-new-models-006-008-20260917/task-006-live.json b/reports/bridge-new-models-006-008-20260917/task-006-live.json
new file mode 100644
index 0000000..5d1151e
--- /dev/null
+++ b/reports/bridge-new-models-006-008-20260917/task-006-live.json
@@ -0,0 +1,1198 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 87 first view",
+ "state": {
+ "id": "bridge-engine",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "lid": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "evidenceCount": 0,
+ "grounding": null,
+ "modelSources": [
+ {
+ "name": "地形.glb",
+ "url": "/models/地形.glb"
+ },
+ {
+ "name": "0916架桥车.glb",
+ "url": "/models/bridge-erector-20260916.glb"
+ },
+ {
+ "name": "0916保障车.glb",
+ "url": "/models/bridge-support-20260916.glb"
+ },
+ {
+ "name": "双车连接油管.glb",
+ "url": "/models/bridge-rescue-hoses-20260916.glb"
+ }
+ ],
+ "hdr": "venice_sunset_1k",
+ "distance": 14.142525019070801,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 903.4152273706155,
+ "y": 498.5493360358045,
+ "localX": 644.4152273706155,
+ "localY": 310.0493360358045,
+ "visible": true
+ },
+ "bounds": [
+ 0.5236417353153229,
+ 0.2973613739013672,
+ 0.33587217330932617
+ ],
+ "projected": {
+ "x": 629.3646534202757,
+ "y": 298.22272400664775,
+ "w": 30.04947331550966,
+ "h": 24.056482628946014
+ },
+ "pivot": [
+ 0.0013664013147354215,
+ 0.6606327220894567,
+ 1.9416658949851993
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 0,
+ 0.6246950475544243,
+ 0.7808688094430303
+ ],
+ "workflowCoverage": [
+ {
+ "name": "bridge-engine",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "bridge-hose-a",
+ "glowing": true
+ },
+ {
+ "name": "bridge-hose-b",
+ "glowing": true
+ },
+ {
+ "name": "bridge-return-valve",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ },
+ {
+ "name": "bridge-filter-valve-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-filter-valve-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-support-pto",
+ "glowing": true
+ },
+ {
+ "name": "bridge-supply",
+ "glowing": true
+ },
+ {
+ "name": "bridge-normal-control",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 9.404772746326303,
+ 5.862351795212512,
+ 10.310496465843245
+ ],
+ "target": [
+ 1.197076935786147,
+ 1.0123497253478748,
+ -0.13566183848059057
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 架桥车发动机",
+ "x": 839.375,
+ "y": 526.765625,
+ "w": 128,
+ "h": 30,
+ "id": "bridge-engine"
+ }
+ ],
+ "narration": [
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "保持架桥车发动机运行",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 2209160
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ 0.0013663864135741999,
+ 0.6606327220894567,
+ 1.941665954589844
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 87 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-engine",
+ "pass": true
+ },
+ {
+ "name": "task 87 step 1 operation 1",
+ "target": "bridge-engine",
+ "drag": false,
+ "distance": 2.6062982499292233,
+ "projected": {
+ "x": 662.9122984279823,
+ "y": 212.61469837836887,
+ "w": 176.17540314403573,
+ "h": 135.83320316240622
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 87 step 1 operation 2",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.6062982499292233,
+ "projected": {
+ "x": 709.0006218687108,
+ "y": 263.03238137723895,
+ "w": 83.99875626257597,
+ "h": 33.023591730972726
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 87 step 2 operation 1",
+ "target": "bridge-hose-a",
+ "drag": true,
+ "distance": 2.606298249929224,
+ "projected": {
+ "x": 716.5751089643882,
+ "y": 235.1456238637226,
+ "w": 68.84978207122037,
+ "h": 89.46479408676683
+ },
+ "labels": 8
+ },
+ {
+ "name": "task 87 step 2 operation 2",
+ "target": "bridge-hose-b",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 716.5749979728365,
+ "y": 235.14564999479725,
+ "w": 68.85000405432356,
+ "h": 89.46473781586755
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 87 step 3 operation 1",
+ "target": "bridge-return-valve",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 692.7555261168103,
+ "y": 264.6492748792297,
+ "w": 116.48894776638076,
+ "h": 29.793580229157556
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 87 step 4 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": true,
+ "distance": 2.606298249929224,
+ "projected": {
+ "x": 699.1228274833263,
+ "y": 249.20856621347716,
+ "w": 103.75434503334805,
+ "h": 60.651670340400216
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 87 step 4 operation 2",
+ "target": "front-pump-rescue-switch",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 748.0136078101959,
+ "y": 276.39727764862505,
+ "w": 5.972784379609266,
+ "h": 6.274247470104569
+ },
+ "labels": 8
+ },
+ {
+ "name": "task 87 step 5 operation 1",
+ "target": "bridge-filter-valve-1",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 692.6892130062968,
+ "y": 264.8954801602761,
+ "w": 116.62157398740703,
+ "h": 29.326181621991225
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 87 step 5 operation 2",
+ "target": "bridge-filter-valve-2",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 693.775094204158,
+ "y": 260.62023383483773,
+ "w": 114.44981159168424,
+ "h": 37.8674482852453
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 87 step 6 operation 1",
+ "target": "bridge-support-pto",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 713.0499877342736,
+ "y": 234.09443864742252,
+ "w": 75.90002453145382,
+ "h": 91.19538520202474
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 87 step 6 operation 2",
+ "target": "bridge-supply",
+ "drag": false,
+ "distance": 2.6062982499292247,
+ "projected": {
+ "x": 716.8964976099176,
+ "y": 231.9366905664349,
+ "w": 68.2070047801659,
+ "h": 95.45439604586647
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 87 step 7 operation 1",
+ "target": "bridge-normal-control",
+ "drag": true,
+ "distance": 2.6062982499292247,
+ "projected": {
+ "x": 713.0499877342731,
+ "y": 234.094438647423,
+ "w": 75.90002453145382,
+ "h": 91.19538520202471
+ },
+ "labels": 6
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-new-models-006-008-20260917/task-007-live.json b/reports/bridge-new-models-006-008-20260917/task-007-live.json
new file mode 100644
index 0000000..9a97c16
--- /dev/null
+++ b/reports/bridge-new-models-006-008-20260917/task-007-live.json
@@ -0,0 +1,1475 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 88 first view",
+ "state": {
+ "id": "bridge-engine",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "cameraTween": false,
+ "lid": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "evidenceCount": 0,
+ "grounding": null,
+ "modelSources": [
+ {
+ "name": "地形.glb",
+ "url": "/models/地形.glb"
+ },
+ {
+ "name": "0916架桥车.glb",
+ "url": "/models/bridge-erector-20260916.glb"
+ },
+ {
+ "name": "3封口袋.glb",
+ "url": "/models/bridge-pump-bags-20260916.glb"
+ },
+ {
+ "name": "牛皮纸.glb",
+ "url": "/models/bridge-paper-20260916.glb"
+ }
+ ],
+ "hdr": "venice_sunset_1k",
+ "distance": 13.1354334541972,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 960.2545229943581,
+ "y": 524.1939434371399,
+ "localX": 701.2545229943581,
+ "localY": 335.69394343713986,
+ "visible": true
+ },
+ "bounds": [
+ 0.5236417353153229,
+ 0.2973613739013672,
+ 0.33587217330932617
+ ],
+ "projected": {
+ "x": 683.6843306065691,
+ "y": 321.3458824543759,
+ "w": 35.06954168291577,
+ "h": 29.272542184692668
+ },
+ "pivot": [
+ 0.0013664013147354215,
+ 0.6606327220894567,
+ 1.9416658949851993
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 0,
+ 0.6246950475544243,
+ 0.7808688094430303
+ ],
+ "workflowCoverage": [
+ {
+ "name": "bridge-engine",
+ "glowing": true
+ },
+ {
+ "name": "bridge-paper",
+ "glowing": true
+ },
+ {
+ "name": "bridge-tank-valve",
+ "glowing": true
+ },
+ {
+ "name": "bridge-inlet",
+ "glowing": true
+ },
+ {
+ "name": "bridge-inlet-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-outlet",
+ "glowing": true
+ },
+ {
+ "name": "bridge-outlet-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-3",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-4",
+ "glowing": true
+ },
+ {
+ "name": "bridge-old-pump",
+ "glowing": true
+ },
+ {
+ "name": "bridge-new-pump",
+ "glowing": true
+ },
+ {
+ "name": "bridge-fill-cap",
+ "glowing": true
+ },
+ {
+ "name": "bridge-oil-can",
+ "glowing": true
+ },
+ {
+ "name": "bridge-test-control",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 7.115960627356131,
+ 5.51698233907977,
+ 9.5666237910958
+ ],
+ "target": [
+ -0.5072637958824635,
+ 1.0123497253478748,
+ -0.13566183848059055
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 架桥车发动机",
+ "x": 896.21875,
+ "y": 555.109375,
+ "w": 128,
+ "h": 30,
+ "id": "bridge-engine"
+ }
+ ],
+ "narration": [
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "关闭架桥车发动机",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 13195851
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ 0.0013663864135741999,
+ 0.6606327220894567,
+ 1.941665954589844
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 88 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-engine",
+ "pass": true
+ },
+ {
+ "name": "task 88 step 1 operation 1",
+ "target": "bridge-engine",
+ "drag": false,
+ "distance": 2.6062982499292233,
+ "projected": {
+ "x": 662.9122984279823,
+ "y": 212.61469837836887,
+ "w": 176.17540314403573,
+ "h": 135.83320316240622
+ },
+ "labels": 13
+ },
+ {
+ "name": "task 88 step 1 operation 2",
+ "target": "bridge-paper",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 705.9165139407212,
+ "y": 239.86053373487454,
+ "w": 90.16697211855751,
+ "h": 79.34773529760554
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 88 step 2 operation 1",
+ "target": "bridge-tank-valve",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 693.775094204158,
+ "y": 260.62023383483773,
+ "w": 114.44981159168424,
+ "h": 37.8674482852453
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 88 step 3 operation 1",
+ "target": "bridge-inlet",
+ "drag": true,
+ "distance": 2.6062982499292247,
+ "projected": {
+ "x": 707.1967494441142,
+ "y": 237.945529196464,
+ "w": 87.60650111177142,
+ "h": 83.2926560456832
+ },
+ "labels": 6
+ },
+ {
+ "name": "task 88 step 3 operation 2",
+ "target": "bridge-inlet-bag",
+ "drag": true,
+ "distance": 2.6062982499292247,
+ "projected": {
+ "x": 719.738401122812,
+ "y": 229.76683300030663,
+ "w": 62.52319775437593,
+ "h": 99.82890798692472
+ },
+ "labels": 6
+ },
+ {
+ "name": "task 88 step 3 operation 3",
+ "target": "bridge-outlet",
+ "drag": true,
+ "distance": 2.6062982499292247,
+ "projected": {
+ "x": 741.025696329206,
+ "y": 231.15000943769226,
+ "w": 19.9486073415884,
+ "h": 96.85227290736358
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 88 step 3 operation 4",
+ "target": "bridge-outlet-bag",
+ "drag": true,
+ "distance": 2.6062982499292247,
+ "projected": {
+ "x": 722.482903100959,
+ "y": 233.9689954606381,
+ "w": 57.034193798082015,
+ "h": 91.3325596016823
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 88 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-pump-bolt-1",
+ "pass": true
+ },
+ {
+ "name": "task 88 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-pump-bolt-1",
+ "pass": true
+ },
+ {
+ "name": "task 88 step 4 operation 1",
+ "target": "bridge-pump-bolt-1",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 724.8326080501041,
+ "y": 244.29517714071181,
+ "w": 52.33478389979166,
+ "h": 70.61770246344639
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 88 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-pump-bolt-2",
+ "pass": true
+ },
+ {
+ "name": "task 88 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-pump-bolt-2",
+ "pass": true
+ },
+ {
+ "name": "task 88 step 4 operation 2",
+ "target": "bridge-pump-bolt-2",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 724.8326086080093,
+ "y": 244.29525439887468,
+ "w": 52.33478278398138,
+ "h": 70.61754613937924
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 88 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-pump-bolt-3",
+ "pass": true
+ },
+ {
+ "name": "task 88 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-pump-bolt-3",
+ "pass": true
+ },
+ {
+ "name": "task 88 step 4 operation 3",
+ "target": "bridge-pump-bolt-3",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 724.8325955003246,
+ "y": 244.29535205442357,
+ "w": 52.334808999350685,
+ "h": 70.61735074287185
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 88 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-pump-bolt-4",
+ "pass": true
+ },
+ {
+ "name": "task 88 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-pump-bolt-4",
+ "pass": true
+ },
+ {
+ "name": "task 88 step 4 operation 4",
+ "target": "bridge-pump-bolt-4",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 724.8325949424191,
+ "y": 244.29527479625744,
+ "w": 52.33481011516176,
+ "h": 70.61750706693817
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 88 step 5 operation 1",
+ "target": "bridge-old-pump",
+ "drag": true,
+ "distance": 2.6062982499292247,
+ "projected": {
+ "x": 724.7874722647147,
+ "y": 230.84458978011276,
+ "w": 52.42505547057067,
+ "h": 99.33074988238945
+ },
+ "labels": 12
+ },
+ {
+ "name": "task 88 step 6 operation 1",
+ "target": "bridge-paper",
+ "drag": false,
+ "distance": 2.6062982499292247,
+ "projected": {
+ "x": 709.2811380231877,
+ "y": 236.34267360712718,
+ "w": 83.43772395362487,
+ "h": 86.38345555310022
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 88 step 7 operation 1",
+ "target": "bridge-gasket",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 704.0515203420828,
+ "y": 242.08178309313172,
+ "w": 93.89695931583458,
+ "h": 74.90523658109112
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 88 step 8 operation 1",
+ "target": "bridge-new-pump",
+ "drag": true,
+ "distance": 2.6062982499292247,
+ "projected": {
+ "x": 724.7874722647147,
+ "y": 230.84458978011264,
+ "w": 52.42505547057067,
+ "h": 99.33074988238951
+ },
+ "labels": 15
+ },
+ {
+ "name": "task 88 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-pump-bolt-1",
+ "pass": true
+ },
+ {
+ "name": "task 88 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-pump-bolt-1",
+ "pass": true
+ },
+ {
+ "name": "task 88 step 8 operation 2",
+ "target": "bridge-pump-bolt-1",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 724.8326080501041,
+ "y": 244.29517714071105,
+ "w": 52.33478389979166,
+ "h": 70.61770246344636
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 88 step 8 operation 3",
+ "target": "bridge-pump-bolt-2",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 736.1718115445386,
+ "y": 259.565551425622,
+ "w": 29.656376910922745,
+ "h": 40.01660947898159
+ },
+ "labels": 6
+ },
+ {
+ "name": "task 88 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-pump-bolt-3",
+ "pass": true
+ },
+ {
+ "name": "task 88 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-pump-bolt-3",
+ "pass": true
+ },
+ {
+ "name": "task 88 step 8 operation 4",
+ "target": "bridge-pump-bolt-3",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 724.8325955003245,
+ "y": 244.29535205442357,
+ "w": 52.3348089993508,
+ "h": 70.61735074287185
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 88 step 8 operation 5",
+ "target": "bridge-pump-bolt-4",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 736.1718038007041,
+ "y": 259.5655629841389,
+ "w": 29.65639239859172,
+ "h": 40.01658733793164
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 88 step 9 operation 1",
+ "target": "bridge-fill-cap",
+ "drag": true,
+ "distance": 2.6062982499292233,
+ "projected": {
+ "x": 732.9405581479806,
+ "y": 261.47980269080233,
+ "w": 36.11888370403881,
+ "h": 36.10066689076939
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 88 step 9 operation 2",
+ "target": "bridge-oil-can",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 722.143424467501,
+ "y": 228.35168938173362,
+ "w": 57.7131510649981,
+ "h": 101.81297266046417
+ },
+ "labels": 6
+ },
+ {
+ "name": "task 88 step 10 operation 1",
+ "target": "bridge-inlet-bag",
+ "drag": true,
+ "distance": 2.6062982499292247,
+ "projected": {
+ "x": 719.7384011228119,
+ "y": 229.76683300030697,
+ "w": 62.52319775437593,
+ "h": 99.82890798692438
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 88 step 10 operation 2",
+ "target": "bridge-inlet",
+ "drag": true,
+ "distance": 2.6062982499292247,
+ "projected": {
+ "x": 707.1967494441142,
+ "y": 237.9455291964638,
+ "w": 87.60650111177142,
+ "h": 83.29265604568323
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 88 step 10 operation 3",
+ "target": "bridge-outlet-bag",
+ "drag": true,
+ "distance": 2.6062982499292247,
+ "projected": {
+ "x": 722.482903100959,
+ "y": 233.96899546063767,
+ "w": 57.034193798082015,
+ "h": 91.33255960168273
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 88 step 10 operation 4",
+ "target": "bridge-outlet",
+ "drag": true,
+ "distance": 2.6062982499292247,
+ "projected": {
+ "x": 741.0256963292057,
+ "y": 231.15000943769226,
+ "w": 19.948607341588513,
+ "h": 96.85227290736358
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 88 step 11 operation 1",
+ "target": "bridge-engine",
+ "drag": false,
+ "distance": 2.6062982499292233,
+ "projected": {
+ "x": 701.0836357758566,
+ "y": 241.61323634733586,
+ "w": 99.83272844828696,
+ "h": 76.97214845869686
+ },
+ "labels": 14
+ },
+ {
+ "name": "task 88 step 11 operation 2",
+ "target": "bridge-test-control",
+ "drag": true,
+ "distance": 2.6062982499292247,
+ "projected": {
+ "x": 713.0499877342731,
+ "y": 234.094438647423,
+ "w": 75.90002453145382,
+ "h": 91.19538520202471
+ },
+ "labels": 2
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-new-models-006-008-20260917/task-008-live.json b/reports/bridge-new-models-006-008-20260917/task-008-live.json
new file mode 100644
index 0000000..d961590
--- /dev/null
+++ b/reports/bridge-new-models-006-008-20260917/task-008-live.json
@@ -0,0 +1,1795 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 89 first view",
+ "state": {
+ "id": "bridge-small-cloth",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "cameraTween": false,
+ "lid": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "evidenceCount": 0,
+ "grounding": null,
+ "modelSources": [
+ {
+ "name": "地形.glb",
+ "url": "/models/地形.glb"
+ },
+ {
+ "name": "0916架桥车.glb",
+ "url": "/models/bridge-erector-20260916.glb"
+ },
+ {
+ "name": "4封口袋.glb",
+ "url": "/models/bridge-valve-bags-20260916.glb"
+ }
+ ],
+ "hdr": "venice_sunset_1k",
+ "distance": 12.394854711827099,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 935.9840818928475,
+ "y": 468.92859123029064,
+ "localX": 676.9840818928475,
+ "localY": 280.42859123029064,
+ "visible": true
+ },
+ "bounds": [
+ 0.03999999910593033,
+ 0.02500000037252903,
+ 0.004000000189989805
+ ],
+ "projected": {
+ "x": 676.0421084692439,
+ "y": 279.4738201751618,
+ "w": 1.8849372687043342,
+ "h": 1.9110539934492294
+ },
+ "pivot": [
+ -0.26305295361571907,
+ 1.4348609031173236,
+ 1.6002156960638991
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 0.4982728791224398,
+ 0.8304547985373997,
+ 0.2491364395612199
+ ],
+ "workflowCoverage": [
+ {
+ "name": "bridge-small-cloth",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-pipe",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-3",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-4",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-valve",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-plug-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-plug-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-seat",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-cloth",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-pipe",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-3",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-4",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-valve",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-plug-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-plug-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-seat",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 7.193425229518143,
+ 5.263010122057047,
+ 9.019606708277626
+ ],
+ "target": [
+ -5.7220459037665705e-8,
+ 1.0123497253478748,
+ -0.13566183848059055
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 小腔清洗擦拭布",
+ "x": 865.984375,
+ "y": 485.875,
+ "w": 140,
+ "h": 30,
+ "id": "bridge-small-cloth"
+ }
+ ],
+ "narration": [
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ },
+ {
+ "video": true,
+ "fallback": true
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-small-cloth",
+ "kind": "identify",
+ "directionHint": "清洗并擦净阀体",
+ "effects": [
+ {
+ "targetId": "bridge-small-cloth",
+ "offset": [
+ 0.7,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-small-valve",
+ "color": 8492701
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ -0.26305295361571907,
+ 1.4348609031173236,
+ 1.6002156960638991
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 89 step 1 operation 1",
+ "target": "bridge-small-cloth",
+ "drag": true,
+ "distance": 2.606298249929224,
+ "projected": {
+ "x": 713.0551617039472,
+ "y": 199.8762788489029,
+ "w": 76.16745557914555,
+ "h": 159.32132156424493
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-small-pipe",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-small-pipe",
+ "pass": true
+ },
+ {
+ "name": "task 89 step 2 operation 1",
+ "target": "bridge-small-pipe",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 733.7712670189921,
+ "y": 258.4566105517278,
+ "w": 34.46759426227413,
+ "h": 42.148721396905046
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-small-bag",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-small-bag",
+ "pass": true
+ },
+ {
+ "name": "task 89 step 2 operation 2",
+ "target": "bridge-small-bag",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 726.5989007241701,
+ "y": 249.54502501185422,
+ "w": 48.82519512972635,
+ "h": 59.96985961527329
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 89 step 3 operation 1",
+ "target": "bridge-small-bolt-1",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 730.1020178600464,
+ "y": 225.56375225947545,
+ "w": 41.90386337448217,
+ "h": 107.35748348612509
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 3 operation 2",
+ "target": "bridge-small-bolt-2",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 730.101956369818,
+ "y": 225.56374836709816,
+ "w": 41.90398643298022,
+ "h": 107.35748980923583
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 3 operation 3",
+ "target": "bridge-small-bolt-3",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 730.1020468486516,
+ "y": 225.56377086244714,
+ "w": 41.90380531004871,
+ "h": 107.35744460559681
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 3 operation 4",
+ "target": "bridge-small-bolt-4",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 730.1019563698185,
+ "y": 225.56374836709918,
+ "w": 41.903986432980105,
+ "h": 107.35748980923628
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 3 operation 5",
+ "target": "bridge-small-valve",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 711.8571182536385,
+ "y": 219.86745936164928,
+ "w": 79.15370015179201,
+ "h": 119.57708505374839
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 4 operation 1",
+ "target": "bridge-small-plug-1",
+ "drag": true,
+ "distance": 2.6062982499292233,
+ "projected": {
+ "x": 734.3815583742876,
+ "y": 255.3961759678843,
+ "w": 33.267681147020085,
+ "h": 48.250084623901046
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 89 step 4 operation 2",
+ "target": "bridge-small-plug-2",
+ "drag": true,
+ "distance": 2.6062982499292233,
+ "projected": {
+ "x": 734.3815517145613,
+ "y": 255.39616492373926,
+ "w": 33.26769452636461,
+ "h": 48.250106768818114
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 89 step 4 operation 3",
+ "target": "bridge-small-seat",
+ "drag": false,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 694.2254127192891,
+ "y": 230.54587309368728,
+ "w": 113.84869051687656,
+ "h": 98.67663471942606
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 5 operation 1",
+ "target": "bridge-large-cloth",
+ "drag": true,
+ "distance": 2.606298249929224,
+ "projected": {
+ "x": 713.1760583557226,
+ "y": 247.71474757026036,
+ "w": 75.53189964988792,
+ "h": 63.5320173357903
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 6 operation 1",
+ "target": "bridge-large-pipe",
+ "drag": true,
+ "distance": 2.6062982499292233,
+ "projected": {
+ "x": 741.0840357184769,
+ "y": 267.4472527643896,
+ "w": 19.838408870971875,
+ "h": 24.17192181208327
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 6 operation 2",
+ "target": "bridge-large-bag",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 737.1726535850977,
+ "y": 262.5403979585547,
+ "w": 27.66772419367055,
+ "h": 33.98296750672006
+ },
+ "labels": 6
+ },
+ {
+ "name": "task 89 step 7 operation 1",
+ "target": "bridge-large-bolt-1",
+ "drag": true,
+ "distance": 2.6062982499292233,
+ "projected": {
+ "x": 733.3751860063155,
+ "y": 229.20308467431818,
+ "w": 35.30982526493153,
+ "h": 99.9963490514744
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 7 operation 2",
+ "target": "bridge-large-bolt-2",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 733.3752195890214,
+ "y": 229.20310886483736,
+ "w": 35.30975799233249,
+ "h": 99.9962990864201
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 7 operation 3",
+ "target": "bridge-large-bolt-3",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 733.375213472072,
+ "y": 229.2031071048878,
+ "w": 35.309770234411076,
+ "h": 99.99630261839388
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 7 operation 4",
+ "target": "bridge-large-bolt-4",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 733.3751860063161,
+ "y": 229.2030846743188,
+ "w": 35.309825264931646,
+ "h": 99.99634905147445
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 7 operation 5",
+ "target": "bridge-large-valve",
+ "drag": true,
+ "distance": 2.606298249929224,
+ "projected": {
+ "x": 710.2512801908184,
+ "y": 220.69540001554415,
+ "w": 82.42293895668968,
+ "h": 118.27900785582202
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 8 operation 1",
+ "target": "bridge-large-plug-1",
+ "drag": true,
+ "distance": 2.6062982499292233,
+ "projected": {
+ "x": 734.9945559273345,
+ "y": 257.00320508985214,
+ "w": 32.03634955820576,
+ "h": 45.03950738026572
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 8 operation 2",
+ "target": "bridge-large-plug-2",
+ "drag": true,
+ "distance": 2.6062982499292233,
+ "projected": {
+ "x": 734.994552597162,
+ "y": 257.0031995668463,
+ "w": 32.03635624673643,
+ "h": 45.03951845272877
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 8 operation 3",
+ "target": "bridge-large-seat",
+ "drag": false,
+ "distance": 2.6062982499292233,
+ "projected": {
+ "x": 694.2254127192888,
+ "y": 230.5458730936875,
+ "w": 113.84869051687667,
+ "h": 98.67663471942629
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 9 operation 1",
+ "target": "bridge-large-seat",
+ "drag": false,
+ "distance": 2.6062982499292233,
+ "projected": {
+ "x": 694.2254127192888,
+ "y": 230.5458730936875,
+ "w": 113.84869051687667,
+ "h": 98.67663471942629
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 9 operation 2",
+ "target": "bridge-large-plug-1",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 734.9945559273348,
+ "y": 257.0032050898515,
+ "w": 32.03634955820564,
+ "h": 45.03950738026566
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 89 step 9 operation 3",
+ "target": "bridge-large-plug-2",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 734.9945525971626,
+ "y": 257.00319956684586,
+ "w": 32.03635624673632,
+ "h": 45.0395184527286
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 89 step 10 operation 1",
+ "target": "bridge-small-valve",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 711.8571182536396,
+ "y": 219.86745936164863,
+ "w": 79.1537001517919,
+ "h": 119.57708505374842
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 10 operation 2",
+ "target": "bridge-large-bolt-1",
+ "drag": true,
+ "distance": 2.6062982499292233,
+ "projected": {
+ "x": 727.8056064333605,
+ "y": 223.0985601694498,
+ "w": 46.58451268827946,
+ "h": 112.34291741697973
+ },
+ "labels": 12
+ },
+ {
+ "name": "task 89 step 10 operation 3",
+ "target": "bridge-large-bolt-2",
+ "drag": true,
+ "distance": 2.6062982499292233,
+ "projected": {
+ "x": 727.80562222695,
+ "y": 223.09856613143972,
+ "w": 46.58448124721065,
+ "h": 112.34290433062625
+ },
+ "labels": 12
+ },
+ {
+ "name": "task 89 step 10 operation 4",
+ "target": "bridge-large-bolt-3",
+ "drag": true,
+ "distance": 2.6062982499292233,
+ "projected": {
+ "x": 727.805617382866,
+ "y": 223.09856468984,
+ "w": 46.584490959481855,
+ "h": 112.34290723954146
+ },
+ "labels": 12
+ },
+ {
+ "name": "task 89 step 10 operation 5",
+ "target": "bridge-large-bolt-4",
+ "drag": true,
+ "distance": 2.6062982499292233,
+ "projected": {
+ "x": 727.8056064333605,
+ "y": 223.09856016944983,
+ "w": 46.58451268827946,
+ "h": 112.34291741697982
+ },
+ "labels": 12
+ },
+ {
+ "name": "task 89 step 11 observation retained for instructor review",
+ "pass": true
+ },
+ {
+ "name": "task 89 step 11 operation 1",
+ "target": "bridge-large-bag",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 737.1726535850976,
+ "y": 262.54039795855493,
+ "w": 27.66772419367055,
+ "h": 33.98296750672006
+ },
+ "labels": 12
+ },
+ {
+ "name": "task 89 step 11 operation 2",
+ "target": "bridge-large-pipe",
+ "drag": true,
+ "distance": 2.606298249929224,
+ "projected": {
+ "x": 741.0840357184771,
+ "y": 267.447252764394,
+ "w": 19.838408870971875,
+ "h": 24.17192181208344
+ },
+ "labels": 12
+ },
+ {
+ "name": "task 89 step 12 operation 1",
+ "target": "bridge-large-bolt-1",
+ "drag": true,
+ "distance": 2.6062982499292233,
+ "projected": {
+ "x": 733.3751860063155,
+ "y": 229.20308467431818,
+ "w": 35.30982526493153,
+ "h": 99.9963490514744
+ },
+ "labels": 12
+ },
+ {
+ "name": "task 89 step 12 operation 2",
+ "target": "bridge-large-bolt-2",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 733.3752195890214,
+ "y": 229.20310886483736,
+ "w": 35.30975799233249,
+ "h": 99.9962990864201
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 12 operation 3",
+ "target": "bridge-large-bolt-3",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 733.375213472072,
+ "y": 229.2031071048878,
+ "w": 35.309770234411076,
+ "h": 99.99630261839388
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 12 operation 4",
+ "target": "bridge-large-bolt-4",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 733.3751860063161,
+ "y": 229.2030846743188,
+ "w": 35.309825264931646,
+ "h": 99.99634905147445
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 13 operation 1",
+ "target": "bridge-small-seat",
+ "drag": false,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 694.2254127192891,
+ "y": 230.54587309368728,
+ "w": 113.84869051687656,
+ "h": 98.67663471942606
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 89 step 13 operation 2",
+ "target": "bridge-small-plug-1",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 734.3815583742885,
+ "y": 255.3961759678824,
+ "w": 33.26768114702054,
+ "h": 48.25008462390127
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 89 step 13 operation 3",
+ "target": "bridge-small-plug-2",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 734.3815517145625,
+ "y": 255.39616492373693,
+ "w": 33.26769452636461,
+ "h": 48.250106768817886
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 89 step 14 operation 1",
+ "target": "bridge-large-valve",
+ "drag": true,
+ "distance": 2.6062982499292233,
+ "projected": {
+ "x": 710.2512801908182,
+ "y": 220.69540001554472,
+ "w": 82.42293895668956,
+ "h": 118.27900785582213
+ },
+ "labels": 12
+ },
+ {
+ "name": "task 89 step 14 operation 2",
+ "target": "bridge-small-bolt-1",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 725.8282859732907,
+ "y": 221.9512018941729,
+ "w": 50.627760499197166,
+ "h": 114.81260701135218
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 14 operation 3",
+ "target": "bridge-small-bolt-2",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 725.8282216003923,
+ "y": 221.95118166502374,
+ "w": 50.627890131494496,
+ "h": 114.81264759934965
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 14 operation 4",
+ "target": "bridge-small-bolt-3",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 725.8282930429814,
+ "y": 221.95120386968313,
+ "w": 50.62774677978814,
+ "h": 114.81260257095443
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 14 operation 5",
+ "target": "bridge-small-bolt-4",
+ "drag": true,
+ "distance": 2.606298249929224,
+ "projected": {
+ "x": 725.8282216003923,
+ "y": 221.9511816650243,
+ "w": 50.62789013149472,
+ "h": 114.81264759934942
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 15 observation retained for instructor review",
+ "pass": true
+ },
+ {
+ "name": "task 89 step 15 operation 1",
+ "target": "bridge-small-bag",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 737.1727104103626,
+ "y": 262.5404214396442,
+ "w": 27.667610573511638,
+ "h": 33.982920448655136
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 15 operation 2",
+ "target": "bridge-small-pipe",
+ "drag": true,
+ "distance": 2.6062982499292233,
+ "projected": {
+ "x": 741.2370513107613,
+ "y": 267.5903199122409,
+ "w": 19.53163674862253,
+ "h": 23.884275458246236
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 16 operation 1",
+ "target": "bridge-small-bolt-1",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 730.1020178600464,
+ "y": 225.56375225947545,
+ "w": 41.90386337448217,
+ "h": 107.35748348612509
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 16 operation 2",
+ "target": "bridge-small-bolt-2",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 730.101956369818,
+ "y": 225.56374836709816,
+ "w": 41.90398643298022,
+ "h": 107.35748980923583
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 16 operation 3",
+ "target": "bridge-small-bolt-3",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 730.1020468486516,
+ "y": 225.56377086244714,
+ "w": 41.90380531004871,
+ "h": 107.35744460559681
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 16 operation 4",
+ "target": "bridge-small-bolt-4",
+ "drag": true,
+ "distance": 2.6062982499292238,
+ "projected": {
+ "x": 730.1019563698185,
+ "y": 225.56374836709918,
+ "w": 41.903986432980105,
+ "h": 107.35748980923628
+ },
+ "labels": 11
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-new-models-006-008-20260917/task-116-initial.png b/reports/bridge-new-models-006-008-20260917/task-116-initial.png
new file mode 100644
index 0000000..a4896f7
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-116-initial.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-86-initial.png b/reports/bridge-new-models-006-008-20260917/task-86-initial.png
new file mode 100644
index 0000000..8a0a0ef
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-86-initial.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-87-fullscreen.png b/reports/bridge-new-models-006-008-20260917/task-87-fullscreen.png
new file mode 100644
index 0000000..e389ba1
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-87-fullscreen.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-87-initial.png b/reports/bridge-new-models-006-008-20260917/task-87-initial.png
new file mode 100644
index 0000000..c3fb899
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-87-initial.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-87-rescue-moving.png b/reports/bridge-new-models-006-008-20260917/task-87-rescue-moving.png
new file mode 100644
index 0000000..0e820fc
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-87-rescue-moving.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-87-step-1.png b/reports/bridge-new-models-006-008-20260917/task-87-step-1.png
new file mode 100644
index 0000000..30e1b12
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-87-step-1.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-87-step-2.png b/reports/bridge-new-models-006-008-20260917/task-87-step-2.png
new file mode 100644
index 0000000..bfe8967
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-87-step-2.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-87-step-3.png b/reports/bridge-new-models-006-008-20260917/task-87-step-3.png
new file mode 100644
index 0000000..74ffd6a
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-87-step-3.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-87-step-4.png b/reports/bridge-new-models-006-008-20260917/task-87-step-4.png
new file mode 100644
index 0000000..08d6444
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-87-step-4.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-87-step-5.png b/reports/bridge-new-models-006-008-20260917/task-87-step-5.png
new file mode 100644
index 0000000..6ec2987
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-87-step-5.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-87-step-6.png b/reports/bridge-new-models-006-008-20260917/task-87-step-6.png
new file mode 100644
index 0000000..f406026
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-87-step-6.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-87-step-7.png b/reports/bridge-new-models-006-008-20260917/task-87-step-7.png
new file mode 100644
index 0000000..2a1830a
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-87-step-7.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-87-translucent.png b/reports/bridge-new-models-006-008-20260917/task-87-translucent.png
new file mode 100644
index 0000000..7787f36
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-87-translucent.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-88-fullscreen.png b/reports/bridge-new-models-006-008-20260917/task-88-fullscreen.png
new file mode 100644
index 0000000..c7ba364
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-88-fullscreen.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-88-initial.png b/reports/bridge-new-models-006-008-20260917/task-88-initial.png
new file mode 100644
index 0000000..c8b9c3a
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-88-initial.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-88-step-1.png b/reports/bridge-new-models-006-008-20260917/task-88-step-1.png
new file mode 100644
index 0000000..6bb57e2
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-88-step-1.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-88-step-10.png b/reports/bridge-new-models-006-008-20260917/task-88-step-10.png
new file mode 100644
index 0000000..4a48945
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-88-step-10.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-88-step-11.png b/reports/bridge-new-models-006-008-20260917/task-88-step-11.png
new file mode 100644
index 0000000..2bb1509
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-88-step-11.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-88-step-2.png b/reports/bridge-new-models-006-008-20260917/task-88-step-2.png
new file mode 100644
index 0000000..eb826eb
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-88-step-2.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-88-step-3.png b/reports/bridge-new-models-006-008-20260917/task-88-step-3.png
new file mode 100644
index 0000000..30c2605
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-88-step-3.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-88-step-4.png b/reports/bridge-new-models-006-008-20260917/task-88-step-4.png
new file mode 100644
index 0000000..37ee6c2
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-88-step-4.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-88-step-5.png b/reports/bridge-new-models-006-008-20260917/task-88-step-5.png
new file mode 100644
index 0000000..3eeeabb
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-88-step-5.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-88-step-6.png b/reports/bridge-new-models-006-008-20260917/task-88-step-6.png
new file mode 100644
index 0000000..3f9c5d6
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-88-step-6.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-88-step-7.png b/reports/bridge-new-models-006-008-20260917/task-88-step-7.png
new file mode 100644
index 0000000..ebecc76
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-88-step-7.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-88-step-8.png b/reports/bridge-new-models-006-008-20260917/task-88-step-8.png
new file mode 100644
index 0000000..83f02f3
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-88-step-8.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-88-step-9.png b/reports/bridge-new-models-006-008-20260917/task-88-step-9.png
new file mode 100644
index 0000000..001845a
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-88-step-9.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-88-translucent.png b/reports/bridge-new-models-006-008-20260917/task-88-translucent.png
new file mode 100644
index 0000000..19a4911
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-88-translucent.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-89-fullscreen.png b/reports/bridge-new-models-006-008-20260917/task-89-fullscreen.png
new file mode 100644
index 0000000..ea48e02
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-89-fullscreen.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-89-initial.png b/reports/bridge-new-models-006-008-20260917/task-89-initial.png
new file mode 100644
index 0000000..6521f6a
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-89-initial.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-89-step-1.png b/reports/bridge-new-models-006-008-20260917/task-89-step-1.png
new file mode 100644
index 0000000..01addf6
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-89-step-1.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-89-step-10.png b/reports/bridge-new-models-006-008-20260917/task-89-step-10.png
new file mode 100644
index 0000000..7aa8c86
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-89-step-10.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-89-step-11.png b/reports/bridge-new-models-006-008-20260917/task-89-step-11.png
new file mode 100644
index 0000000..28424c2
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-89-step-11.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-89-step-12.png b/reports/bridge-new-models-006-008-20260917/task-89-step-12.png
new file mode 100644
index 0000000..e0af6bf
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-89-step-12.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-89-step-13.png b/reports/bridge-new-models-006-008-20260917/task-89-step-13.png
new file mode 100644
index 0000000..12d8c1a
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-89-step-13.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-89-step-14.png b/reports/bridge-new-models-006-008-20260917/task-89-step-14.png
new file mode 100644
index 0000000..20fb113
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-89-step-14.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-89-step-15.png b/reports/bridge-new-models-006-008-20260917/task-89-step-15.png
new file mode 100644
index 0000000..7eda99f
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-89-step-15.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-89-step-16.png b/reports/bridge-new-models-006-008-20260917/task-89-step-16.png
new file mode 100644
index 0000000..4ac6a83
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-89-step-16.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-89-step-2.png b/reports/bridge-new-models-006-008-20260917/task-89-step-2.png
new file mode 100644
index 0000000..38754c0
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-89-step-2.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-89-step-3.png b/reports/bridge-new-models-006-008-20260917/task-89-step-3.png
new file mode 100644
index 0000000..4257a4a
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-89-step-3.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-89-step-4.png b/reports/bridge-new-models-006-008-20260917/task-89-step-4.png
new file mode 100644
index 0000000..10b9a6a
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-89-step-4.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-89-step-5.png b/reports/bridge-new-models-006-008-20260917/task-89-step-5.png
new file mode 100644
index 0000000..c03f040
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-89-step-5.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-89-step-6.png b/reports/bridge-new-models-006-008-20260917/task-89-step-6.png
new file mode 100644
index 0000000..44c75c2
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-89-step-6.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-89-step-7.png b/reports/bridge-new-models-006-008-20260917/task-89-step-7.png
new file mode 100644
index 0000000..3ddc9eb
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-89-step-7.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-89-step-8.png b/reports/bridge-new-models-006-008-20260917/task-89-step-8.png
new file mode 100644
index 0000000..2979c61
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-89-step-8.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-89-step-9.png b/reports/bridge-new-models-006-008-20260917/task-89-step-9.png
new file mode 100644
index 0000000..2763d67
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-89-step-9.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/task-89-translucent.png b/reports/bridge-new-models-006-008-20260917/task-89-translucent.png
new file mode 100644
index 0000000..f62c942
Binary files /dev/null and b/reports/bridge-new-models-006-008-20260917/task-89-translucent.png differ
diff --git a/reports/bridge-new-models-006-008-20260917/unchanged-116.json b/reports/bridge-new-models-006-008-20260917/unchanged-116.json
new file mode 100644
index 0000000..e14f058
--- /dev/null
+++ b/reports/bridge-new-models-006-008-20260917/unchanged-116.json
@@ -0,0 +1,2183 @@
+{
+ "id": "116",
+ "code": "BRIDGE-005-AUTHORING-PILOT",
+ "name": "005 液压泵应急切换(编排验证)",
+ "description": "独立编排验证,不替换现有005",
+ "channel": "VIRTUAL",
+ "assignmentKind": "TRAINING",
+ "executionMode": "PRACTICE",
+ "audienceType": "COMMON",
+ "collaborationMode": "INDIVIDUAL",
+ "digitalHumanAllowed": false,
+ "digitalInstructorAgentSlug": "",
+ "digitalInstructorAgentName": "",
+ "digitalInstructorKnowledgeSource": "AGENT",
+ "contentProjectId": "458",
+ "contentVersionId": "552",
+ "definitionSnapshot": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "trainingMode": "VIRTUAL",
+ "enabledChannels": [
+ "VIRTUAL"
+ ],
+ "channelProfiles": {
+ "VIRTUAL": {
+ "type": "VIRTUAL",
+ "renderMode": "三维实时仿真",
+ "interactionMode": "三维操作、动画引导与规则自动判定",
+ "assistance": "演示、训练与模拟考试"
+ }
+ },
+ "level": "标准",
+ "durationMinutes": 10,
+ "totalScore": 100,
+ "objectives": [],
+ "steps": [
+ {
+ "id": "front-pump-step-01",
+ "stepCode": "front-pump-step-01",
+ "order": 1,
+ "title": "根据故障现象确定是哪一个液压泵发生故障",
+ "summary": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-01",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-hydraulic-pump",
+ "targetName": "液压泵",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "guidance": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "warning": "",
+ "destination": "液压泵",
+ "success": "根据故障现象确定是哪一个液压泵发生故障",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-hydraulic-pump",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "identify",
+ "axisSpace": "world",
+ "highlightColor": "#e53935",
+ "steps": [
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第1步,确定故障液压泵。根据故障现象确定发生故障的液压泵。",
+ "narrationAssetCode": "PILOT-005-1-AUDIO",
+ "safetyText": "安全提示:请按规定顺序操作并远离危险区域。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-1-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "exterior",
+ "number": 1,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "bridge-0916-node-92",
+ "nodePath": "0/46/0",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-hydraulic-pump",
+ "targetNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-02",
+ "stepCode": "front-pump-step-02",
+ "order": 2,
+ "title": "断开架桥车取力器",
+ "summary": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-02",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "guidance": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "断开架桥车取力器",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": -30,
+ "toleranceDegrees": 6,
+ "directionHint": "向断开方向摇动"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第2步,断开架桥车取力器。将架桥车取力器断开。",
+ "narrationAssetCode": "PILOT-005-2-AUDIO",
+ "safetyText": "安全提示:请确认压力归零并可靠支承后再进行拆卸。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-2-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "exterior",
+ "number": 2,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-03",
+ "stepCode": "front-pump-step-03",
+ "order": 3,
+ "title": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "summary": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-03",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-ball-valve-switch",
+ "targetName": "球阀开关",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "guidance": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "warning": "",
+ "destination": "球阀开关",
+ "success": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-ball-valve-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "steps": [
+ {
+ "targetId": "front-pump-ball-valve-switch",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "由垂直与官道方向旋转至平行于管道方向"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第3步,打开互救球阀。打开备胎上方两个红色滤油器之间的连通球阀,手柄由垂直管道转为平行管道。",
+ "narrationAssetCode": "PILOT-005-3-AUDIO",
+ "safetyText": "安全提示:请按规定顺序操作并远离危险区域。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-3-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "focus",
+ "number": 3,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "bridge-0916-node-96",
+ "nodePath": "0/48/0",
+ "sourceNodeName": "1_26球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-ball-valve-switch",
+ "targetNodeName": "1_26球阀开关",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-04",
+ "stepCode": "front-pump-step-04",
+ "order": 4,
+ "title": "重新联通取力器",
+ "summary": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-04",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "guidance": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "重新联通取力器",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "按步骤2的相反方向摇回去"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第4步,重新接通取力器。将架桥车取力器重新接通。",
+ "narrationAssetCode": "PILOT-005-4-AUDIO",
+ "safetyText": "安全提示:请按规定顺序操作并远离危险区域。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-4-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "exterior",
+ "number": 4,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-05",
+ "stepCode": "front-pump-step-05",
+ "order": 5,
+ "title": "打开辅助控制盒内的“互救”开关",
+ "summary": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-05",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-aux-control-box-cover",
+ "targetName": "辅助控制盒盖",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "guidance": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "warning": "",
+ "destination": "辅助控制盒盖",
+ "success": "打开辅助控制盒内的“互救”开关",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-aux-control-box-cover",
+ "mode": "inspect",
+ "durationMs": 1600,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "sequence",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-aux-control-box"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-aux-control-box-cover",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 100,
+ "toleranceDegrees": 8,
+ "directionHint": "沿控制盒盖边缘铰链打开",
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ }
+ },
+ {
+ "targetId": "front-pump-rescue-switch",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "往上搬"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第5步,打开辅助控制盒互救开关。打开辅助控制盒盖,再打开互救开关,进入单泵作业状态。",
+ "narrationAssetCode": "PILOT-005-5-AUDIO",
+ "safetyText": "安全提示:请确认压力归零并可靠支承后再进行拆卸。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-5-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "focus",
+ "number": 5,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "bridge-0916-node-78",
+ "nodePath": "0/39/0",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-aux-control-box-cover",
+ "targetNodeName": "1_28辅助控制盒盖",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ }
+ ],
+ "modeConfig": {
+ "type": "VIRTUAL",
+ "renderMode": "三维实时仿真",
+ "interactionMode": "三维操作、动画引导与规则自动判定",
+ "assistance": "演示、训练与模拟考试"
+ },
+ "task": {
+ "code": "BRIDGE-005-AUTHORING-PILOT",
+ "title": "005 液压泵应急切换(编排验证)",
+ "category": "小修",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ],
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "categoryId": "minor-repair",
+ "image": "/models/step-model-front-pump-thumb.png"
+ },
+ "scenario": {
+ "environmentName": "真实野外训练场",
+ "sceneLayout": "2 个场景对象 · 设备与物模型绑定已继承",
+ "equipmentState": "压力不足 · 内泄待定位",
+ "sceneTags": [],
+ "visibleParts": [
+ "front-pump-hydraulic-pump",
+ "front-pump-pto-switch",
+ "front-pump-ball-valve-switch",
+ "front-pump-aux-control-box-cover"
+ ],
+ "operableParts": [
+ "front-pump-hydraulic-pump",
+ "front-pump-pto-switch",
+ "front-pump-ball-valve-switch",
+ "front-pump-aux-control-box-cover"
+ ],
+ "sensorFeeds": [
+ {
+ "id": "STATE",
+ "label": "装备状态",
+ "value": "就绪",
+ "unit": "",
+ "state": "ok"
+ },
+ {
+ "id": "STEP",
+ "label": "流程节点",
+ "value": "1 / 8",
+ "unit": "",
+ "state": "ready"
+ },
+ {
+ "id": "RULE",
+ "label": "规则判定",
+ "value": "等待操作",
+ "unit": "",
+ "state": "ready"
+ }
+ ],
+ "id": "hydraulic-fault-scenario",
+ "publishedSceneId": "457@551",
+ "publishedSceneVersion": "7",
+ "sceneResource": {
+ "sceneId": "457@551",
+ "sourceProjectId": "457",
+ "sourceVersionId": "551",
+ "version": "7",
+ "sourceKind": "published",
+ "status": "已发布",
+ "publishedAt": "2026-09-17T14:33:41.000Z",
+ "objectCount": 2,
+ "assetKey": "",
+ "presetId": "terrain-1",
+ "type": "outdoor",
+ "name": "005 液压泵应急切换(编排验证)",
+ "environment": {
+ "schema": "edit3dv4.scene-environment",
+ "version": "1.0",
+ "presetId": "terrain-1",
+ "type": "outdoor",
+ "floorOnly": false,
+ "useModelFloor": true
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "deviceId": "front-pump-training-yard",
+ "modelId": "front-pump-field-terrain",
+ "semantic": "环境地形",
+ "assetRole": "environment",
+ "builtinAssetId": "front-pump-field-terrain",
+ "modelEditorAssetId": "",
+ "modelEditorModelId": "",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "partOverrides": {},
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "",
+ "assetKey": "",
+ "resourceUrl": "/models/terrain-005-20260917.glb",
+ "sourceName": "terrain-005-20260917.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ -3.1597256741842212,
+ 10.30528511389146,
+ -40.10715876774236
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1.7159231079037875,
+ 1.7159231079037875,
+ 1.7159231079037875
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "deviceId": "front-pump-rescue-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "semantic": "实训装备",
+ "assetRole": "equipment",
+ "builtinAssetId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "bridge-erector-0916",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "sceneId": "front-pump-hydraulic-pump",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "bridge-0916-node-92",
+ "nodePath": "0/46/0",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-power-take-off",
+ "interactionId": "front-pump-power-take-off",
+ "sourceInteractionId": "front-pump-power-take-off",
+ "editorId": "bridge-0916-node-80",
+ "nodePath": "0/40/0",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-pto-switch",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-ball-valve-switch",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "bridge-0916-node-96",
+ "nodePath": "0/48/0",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box",
+ "interactionId": "front-pump-aux-control-box",
+ "sourceInteractionId": "front-pump-aux-control-box",
+ "editorId": "bridge-0916-node-84",
+ "nodePath": "0/42/0",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box-cover",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "bridge-0916-node-78",
+ "nodePath": "0/39/0",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-rescue-switch",
+ "interactionId": "front-pump-rescue-switch",
+ "sourceInteractionId": "front-pump-rescue-switch",
+ "editorId": "bridge-0916-node-86",
+ "nodePath": "0/43/0",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ],
+ "partOverrides": {
+ "front-pump-hydraulic-pump": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-power-take-off": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-pto-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-ball-valve-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-aux-control-box": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-aux-control-box-cover": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-rescue-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ }
+ },
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "Group",
+ "assetKey": "",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "sourceName": "0916架桥车.glb",
+ "sizeBytes": 37160920,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ 1.5698558846140135e-16,
+ 0.00012730681329620186,
+ 0.13180482636746585
+ ],
+ "rotation": [
+ 3.0865583248298285e-17,
+ -3.96331642134641e-33,
+ -2.568113739801058e-16
+ ],
+ "scale": [
+ 0.9715696607300419,
+ 0.9715696607300419,
+ 0.9715696607300419
+ ]
+ }
+ ],
+ "assetReferences": [
+ {
+ "assetKey": "",
+ "resourceUrl": "/models/terrain-005-20260917.glb",
+ "sourceName": "terrain-005-20260917.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "environment",
+ "builtinAssetId": "front-pump-field-terrain"
+ },
+ {
+ "assetKey": "",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "sourceName": "0916架桥车.glb",
+ "sizeBytes": 37160920,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "equipment",
+ "builtinAssetId": "front-pump-step-vehicle"
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "7",
+ "presetId": "terrain-1",
+ "name": "真实野外训练场",
+ "type": "outdoor",
+ "assetKey": "",
+ "environment": {
+ "schema": "edit3dv4.scene-environment",
+ "version": "1.0",
+ "presetId": "terrain-1",
+ "type": "outdoor",
+ "floorOnly": false,
+ "useModelFloor": true
+ },
+ "rendering": {
+ "schema": "edit3dv4.scene-rendering",
+ "version": "1.0",
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 34,
+ "far": 88
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.05,
+ "far": 800,
+ "position": [
+ 7.138234886169582,
+ 3.695554761077557,
+ 7.955160424286649
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ]
+ },
+ "lights": {
+ "hemisphere": {
+ "skyColor": 15594743,
+ "groundColor": 6910582,
+ "intensity": 1.45
+ },
+ "directional": {
+ "color": 16777215,
+ "intensity": 2,
+ "position": [
+ 12,
+ 18,
+ 10
+ ],
+ "castShadow": true,
+ "shadowMapSize": 2048,
+ "shadowBounds": 82
+ }
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "deviceId": "front-pump-training-yard",
+ "modelId": "front-pump-field-terrain",
+ "semantic": "环境地形",
+ "assetRole": "environment",
+ "builtinAssetId": "front-pump-field-terrain",
+ "modelEditorAssetId": "",
+ "modelEditorModelId": "",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "partOverrides": {},
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "",
+ "assetKey": "",
+ "resourceUrl": "/models/terrain-005-20260917.glb",
+ "sourceName": "terrain-005-20260917.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ -3.1597256741842212,
+ 10.30528511389146,
+ -40.10715876774236
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1.7159231079037875,
+ 1.7159231079037875,
+ 1.7159231079037875
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "deviceId": "front-pump-rescue-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "semantic": "实训装备",
+ "assetRole": "equipment",
+ "builtinAssetId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "bridge-erector-0916",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "sceneId": "front-pump-hydraulic-pump",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "bridge-0916-node-92",
+ "nodePath": "0/46/0",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-power-take-off",
+ "interactionId": "front-pump-power-take-off",
+ "sourceInteractionId": "front-pump-power-take-off",
+ "editorId": "bridge-0916-node-80",
+ "nodePath": "0/40/0",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-pto-switch",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-ball-valve-switch",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "bridge-0916-node-96",
+ "nodePath": "0/48/0",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box",
+ "interactionId": "front-pump-aux-control-box",
+ "sourceInteractionId": "front-pump-aux-control-box",
+ "editorId": "bridge-0916-node-84",
+ "nodePath": "0/42/0",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box-cover",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "bridge-0916-node-78",
+ "nodePath": "0/39/0",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-rescue-switch",
+ "interactionId": "front-pump-rescue-switch",
+ "sourceInteractionId": "front-pump-rescue-switch",
+ "editorId": "bridge-0916-node-86",
+ "nodePath": "0/43/0",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ],
+ "partOverrides": {
+ "front-pump-hydraulic-pump": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-power-take-off": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-pto-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-ball-valve-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-aux-control-box": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-aux-control-box-cover": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-rescue-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ }
+ },
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "Group",
+ "assetKey": "",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "sourceName": "0916架桥车.glb",
+ "sizeBytes": 37160920,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ 1.5698558846140135e-16,
+ 0.00012730681329620186,
+ 0.13180482636746585
+ ],
+ "rotation": [
+ 3.0865583248298285e-17,
+ -3.96331642134641e-33,
+ -2.568113739801058e-16
+ ],
+ "scale": [
+ 0.9715696607300419,
+ 0.9715696607300419,
+ 0.9715696607300419
+ ]
+ }
+ ]
+ }
+ },
+ "baseVisualKey": "diagnostic-bay",
+ "environment": {
+ "type": "outdoor",
+ "mode": "external",
+ "sourceName": "005 液压泵应急切换(编排验证) · 场景发布包",
+ "resourceUrl": "/models/terrain-005-20260917.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "accent": "#e98a2f",
+ "background": 12178915,
+ "fog": 12178915,
+ "ground": 6450803,
+ "camera": {
+ "position": [
+ 9.6,
+ 6.2,
+ 12.3
+ ],
+ "target": [
+ -0.25,
+ 2.45,
+ 0
+ ]
+ },
+ "retainStoredParts": false
+ },
+ "tools": [
+ {
+ "id": "pressure-gauge",
+ "name": "数字压力表",
+ "purpose": "卸压确认与压力复测",
+ "thumbnailKey": "pressure-gauge",
+ "modelKind": "pressure-gauge",
+ "defaultScale": 1
+ },
+ {
+ "id": "leak-detector",
+ "name": "泄漏检测灯",
+ "purpose": "油管与密封外泄检查",
+ "thumbnailKey": "leak-detector",
+ "modelKind": "leak-detector",
+ "defaultScale": 1
+ },
+ {
+ "id": "leakage-tester",
+ "name": "内泄保压仪",
+ "purpose": "压力衰减诊断",
+ "thumbnailKey": "leakage-tester",
+ "modelKind": "leakage-tester",
+ "defaultScale": 1
+ },
+ {
+ "id": "hose-wrench",
+ "name": "油管扳手",
+ "purpose": "接头拆装",
+ "thumbnailKey": "hose-wrench",
+ "modelKind": "hose-wrench",
+ "defaultScale": 1
+ },
+ {
+ "id": "pin-puller",
+ "name": "液压拔销器",
+ "purpose": "销轴同轴分离",
+ "thumbnailKey": "pin-puller",
+ "modelKind": "pin-puller",
+ "defaultScale": 1
+ },
+ {
+ "id": "lifting-sling",
+ "name": "起吊带与平衡梁",
+ "purpose": "液压缸总成吊运",
+ "thumbnailKey": "lifting-sling",
+ "modelKind": "lifting-sling",
+ "defaultScale": 1
+ },
+ {
+ "id": "seal-kit",
+ "name": "密封拆装工具",
+ "purpose": "密封组件更换",
+ "thumbnailKey": "seal-kit",
+ "modelKind": "seal-kit",
+ "defaultScale": 1
+ },
+ {
+ "id": "torque-wrench",
+ "name": "数字扭矩扳手",
+ "purpose": "规范力矩紧固",
+ "thumbnailKey": "torque-wrench",
+ "modelKind": "torque-wrench",
+ "defaultScale": 1
+ },
+ {
+ "id": "checklist-terminal",
+ "name": "数字点检终端",
+ "purpose": "路线签到与清单确认",
+ "thumbnailKey": "checklist-terminal",
+ "modelKind": "checklist-terminal",
+ "defaultScale": 1
+ },
+ {
+ "id": "feeler-gauge",
+ "name": "间隙规",
+ "purpose": "销轴配合间隙测量",
+ "thumbnailKey": "feeler-gauge",
+ "modelKind": "feeler-gauge",
+ "defaultScale": 1
+ },
+ {
+ "id": "lock-tool",
+ "name": "锁止件拆装钳",
+ "purpose": "解除与恢复锁止件",
+ "thumbnailKey": "lock-tool",
+ "modelKind": "lock-tool",
+ "defaultScale": 1
+ },
+ {
+ "id": "alignment-tool",
+ "name": "同轴装配导向器",
+ "purpose": "反向复装校准",
+ "thumbnailKey": "alignment-tool",
+ "modelKind": "alignment-tool",
+ "defaultScale": 1
+ }
+ ],
+ "faults": [],
+ "authoring": {
+ "schema": "unreal-tran.training-authoring/v1",
+ "version": 1,
+ "nodes": [
+ {
+ "id": "flow-start",
+ "type": "start",
+ "title": "训练开始",
+ "x": 32,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-01",
+ "type": "step",
+ "title": "根据故障现象确定是哪一个液压泵发生故障",
+ "stepId": "front-pump-step-01",
+ "x": 240,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-02",
+ "type": "step",
+ "title": "断开架桥车取力器",
+ "stepId": "front-pump-step-02",
+ "x": 500,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-03",
+ "type": "step",
+ "title": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "stepId": "front-pump-step-03",
+ "x": 760,
+ "y": 120,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-04",
+ "type": "step",
+ "title": "重新联通取力器",
+ "stepId": "front-pump-step-04",
+ "x": 240,
+ "y": 270,
+ "config": {}
+ },
+ {
+ "id": "step-node:front-pump-step-05",
+ "type": "step",
+ "title": "打开辅助控制盒内的“互救”开关",
+ "stepId": "front-pump-step-05",
+ "x": 500,
+ "y": 270,
+ "config": {}
+ },
+ {
+ "id": "flow-end",
+ "type": "end",
+ "title": "训练结束",
+ "x": 760,
+ "y": 270,
+ "config": {}
+ }
+ ],
+ "edges": [
+ {
+ "id": "edge:flow-start:step-node:front-pump-step-01",
+ "from": "flow-start",
+ "to": "step-node:front-pump-step-01",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-01:step-node:front-pump-step-02",
+ "from": "step-node:front-pump-step-01",
+ "to": "step-node:front-pump-step-02",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-02:step-node:front-pump-step-03",
+ "from": "step-node:front-pump-step-02",
+ "to": "step-node:front-pump-step-03",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-03:step-node:front-pump-step-04",
+ "from": "step-node:front-pump-step-03",
+ "to": "step-node:front-pump-step-04",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-04:step-node:front-pump-step-05",
+ "from": "step-node:front-pump-step-04",
+ "to": "step-node:front-pump-step-05",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ },
+ {
+ "id": "edge:step-node:front-pump-step-05:flow-end",
+ "from": "step-node:front-pump-step-05",
+ "to": "flow-end",
+ "label": "",
+ "kind": "base-sequence",
+ "rule": ""
+ }
+ ],
+ "timeline": {
+ "currentTime": 0,
+ "tracks": {
+ "front-pump-step-01": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-1-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-02": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-2-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-03": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-3-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-04": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-4-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ },
+ "front-pump-step-05": {
+ "duration": 8,
+ "action": "mechanism-operation",
+ "camera": "跟随目标",
+ "audioAssetCode": "PILOT-005-5-AUDIO",
+ "animationAssetId": "",
+ "animationName": ""
+ }
+ }
+ }
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN"
+ },
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥液压泵应急切换",
+ "status": "published",
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/4.jpg",
+ "resources": {
+ "models": [],
+ "animations": []
+ },
+ "legacyBridge": {
+ "schema": "unreal-tran.training-legacy-bridge/v1",
+ "uris": [],
+ "tracks": {
+ "front-pump-step-01": {
+ "audio": ""
+ },
+ "front-pump-step-02": {
+ "audio": ""
+ },
+ "front-pump-step-03": {
+ "audio": ""
+ },
+ "front-pump-step-04": {
+ "audio": ""
+ },
+ "front-pump-step-05": {
+ "audio": ""
+ }
+ }
+ },
+ "teachingScene": {
+ "version": "1.5",
+ "schema": "edit3dv4.scene",
+ "sourceVersionId": "551",
+ "name": "真实野外训练场",
+ "sceneType": "OUTDOOR",
+ "sourceProjectId": "457",
+ "objects": [
+ {
+ "semantic": "环境地形",
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "position": [
+ -3.1597256741842212,
+ 10.30528511389146,
+ -40.10715876774236
+ ],
+ "scale": [
+ 1.7159231079037875,
+ 1.7159231079037875,
+ 1.7159231079037875
+ ],
+ "contentUri": "/models/terrain-005-20260917.glb",
+ "mimeType": "model/gltf-binary",
+ "visible": true,
+ "sourceVersionId": "551",
+ "assetCode": "PILOT-TERRAIN-005",
+ "sourceName": "terrain-005-20260917.glb",
+ "sourceNodeName": "",
+ "name": "野外山地训练场",
+ "id": "scene-object-1",
+ "type": "imported",
+ "splitGroupId": ""
+ },
+ {
+ "semantic": "实训装备",
+ "rotation": [
+ 3.0865583248298285e-17,
+ -3.96331642134641e-33,
+ -2.568113739801058e-16
+ ],
+ "position": [
+ 1.5698558846140135e-16,
+ 0.00012730681329620186,
+ 0.13180482636746585
+ ],
+ "scale": [
+ 0.9715696607300419,
+ 0.9715696607300419,
+ 0.9715696607300419
+ ],
+ "contentUri": "/models/bridge-erector-20260916.glb",
+ "mimeType": "model/gltf-binary",
+ "visible": true,
+ "sourceVersionId": "551",
+ "assetCode": "PILOT-VEHICLE-0916",
+ "sourceName": "0916架桥车.glb",
+ "sourceNodeName": "Group",
+ "name": "架桥车前泵互救操作整车模型",
+ "id": "scene-object-2",
+ "type": "imported",
+ "splitGroupId": ""
+ }
+ ],
+ "templateRevision": 1,
+ "rendering": {
+ "background": 11062241
+ }
+ }
+ },
+ "definitionChecksum": "5d7d01134c9ef3960cc92788b7b69547132e4b7334fbf18b964f6916f596f883",
+ "ownerUserId": "99",
+ "ownerUsername": "root",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "departmentName": "",
+ "status": "DRAFT",
+ "scheduleStartAt": null,
+ "dueAt": null,
+ "publishedAt": null,
+ "withdrawnAt": null,
+ "archivedAt": null,
+ "lifecycleReason": "",
+ "version": 7,
+ "addTime": 1789566632,
+ "updateTime": "2026-09-16T21:50:33",
+ "serverNow": 1789657499,
+ "members": [],
+ "runCount": 0,
+ "pendingReviewCount": 0
+}
\ No newline at end of file
diff --git a/reports/bridge-new-models-006-008-20260917/unchanged-86.json b/reports/bridge-new-models-006-008-20260917/unchanged-86.json
new file mode 100644
index 0000000..c5c56af
--- /dev/null
+++ b/reports/bridge-new-models-006-008-20260917/unchanged-86.json
@@ -0,0 +1,1205 @@
+{
+ "id": "86",
+ "code": "TASK-VIRTUAL-005",
+ "name": "重型支援桥液压泵应急切换",
+ "description": "原稿:桥梁/文件2/4.jpg",
+ "channel": "VIRTUAL",
+ "assignmentKind": "TRAINING",
+ "executionMode": "PRACTICE",
+ "audienceType": "COMMON",
+ "collaborationMode": "INDIVIDUAL",
+ "digitalHumanAllowed": false,
+ "digitalInstructorAgentSlug": "",
+ "digitalInstructorAgentName": "",
+ "digitalInstructorKnowledgeSource": "AGENT",
+ "contentProjectId": "438",
+ "contentVersionId": "533",
+ "definitionSnapshot": {
+ "schema": "digital-workshop-training-project",
+ "version": 1,
+ "id": "front-pump-rescue-operation-v1",
+ "projectId": "front-pump-rescue-operation-v1",
+ "name": "重型支援桥液压泵应急切换",
+ "status": "published",
+ "trainingMode": "VIRTUAL",
+ "resources": {
+ "models": [
+ {
+ "id": "front-pump-step-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "name": "架桥车前泵互救操作整车模型",
+ "baseModelName": "架桥车前泵互救操作整车模型",
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "revision": 1,
+ "materialPreset": null,
+ "parts": [
+ {
+ "editorId": "",
+ "interactionId": "front-pump-hydraulic-pump",
+ "nodeName": "1液压泵",
+ "sourceNodeName": "1液压泵",
+ "nodePath": "",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-power-take-off",
+ "nodeName": "2取力器",
+ "sourceNodeName": "2取力器",
+ "nodePath": "",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-pto-switch",
+ "nodeName": "2取力器开关",
+ "sourceNodeName": "2取力器开关",
+ "nodePath": "",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-ball-valve-switch",
+ "nodeName": "3球阀开关",
+ "sourceNodeName": "3球阀开关",
+ "nodePath": "",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box",
+ "nodeName": "5辅助控制盒",
+ "sourceNodeName": "5辅助控制盒",
+ "nodePath": "",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "nodeName": "5辅助控制盒盖",
+ "sourceNodeName": "5辅助控制盒盖",
+ "nodePath": "",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "editorId": "",
+ "interactionId": "front-pump-rescue-switch",
+ "nodeName": "5互救开关",
+ "sourceNodeName": "5互救开关",
+ "nodePath": "",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "animations": []
+ },
+ "task": {
+ "id": "TR-FRONT-PUMP-RESCUE-001",
+ "code": "TR-FRONT-PUMP-RESCUE-001",
+ "title": "架桥车前泵故障互救处置训练(虚拟仿真)",
+ "categoryId": "minor-repair",
+ "difficulty": "标准",
+ "level": "标准",
+ "duration": 10,
+ "description": "前泵损坏的情况下如何操作。",
+ "image": "/models/step-model-front-pump-thumb.png",
+ "equipment": "架桥车",
+ "skills": [
+ "液压泵故障识别",
+ "取力器断开与联通",
+ "球阀开启",
+ "互救开关操作"
+ ]
+ },
+ "scenario": {
+ "id": "front-pump-rescue-scenario",
+ "publishedSceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "publishedSceneVersion": "1.0",
+ "baseVisualKey": "front-pump-rescue",
+ "visualKey": "front-pump-rescue",
+ "environmentName": "架桥车互救操作训练场",
+ "sceneLayout": "架桥车整车操作位",
+ "equipmentState": "前泵故障 · 待执行互救处置",
+ "tools": [],
+ "faults": [],
+ "environment": {
+ "type": "outdoor",
+ "mode": "builtin",
+ "sourceName": "内置架桥车互救操作训练场",
+ "resourceUrl": "",
+ "sizeBytes": 0,
+ "lastModified": 0,
+ "embeddedDataUrl": ""
+ },
+ "sceneResource": {
+ "sceneId": "SCENE-FRONT-PUMP-RESCUE-01",
+ "version": "1.0",
+ "sourceKind": "published",
+ "status": "已发布",
+ "name": "架桥车前泵故障互救处置训练场景",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "objectCount": 2,
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ],
+ "snapshot": {
+ "schema": "edit3dv4.scene",
+ "version": "1.0",
+ "name": "架桥车前泵故障互救处置训练场景",
+ "presetId": "outdoor-1",
+ "type": "outdoor",
+ "environment": {
+ "presetId": "outdoor-1",
+ "type": "outdoor"
+ },
+ "rendering": {
+ "background": 11062241,
+ "fog": {
+ "color": 11062241,
+ "near": 70,
+ "far": 240
+ },
+ "toneMappingExposure": 1.05,
+ "environment": {
+ "type": "room",
+ "sigma": 0.04
+ },
+ "camera": {
+ "fov": 45,
+ "near": 0.1,
+ "far": 800,
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ }
+ },
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ]
+ },
+ "assetReferences": [
+ {
+ "resourceUrl": "/models/步骤模型.glb",
+ "sourceName": "步骤模型.glb",
+ "sizeBytes": 32195288,
+ "mimeType": "model/gltf-binary",
+ "assetRole": "training-content"
+ }
+ ]
+ },
+ "accent": "#2d86d8",
+ "background": 11062241,
+ "fog": 11062241,
+ "ground": 7110499,
+ "camera": {
+ "position": [
+ 10.6,
+ 6.4,
+ 13.2
+ ],
+ "target": [
+ 0,
+ 1.9,
+ 0
+ ]
+ },
+ "retainStoredParts": true,
+ "sceneTags": [
+ "真实整车步骤模型",
+ "前泵故障互救",
+ "机构顺序操作"
+ ],
+ "sensorFeeds": []
+ },
+ "tools": [],
+ "faults": [],
+ "steps": [
+ {
+ "id": "front-pump-step-01",
+ "code": "FRONT-PUMP-STEP-01",
+ "stepCode": "front-pump-step-01",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-01",
+ "number": 1,
+ "title": "根据故障现象确定是哪一个液压泵发生故障",
+ "targetId": "front-pump-hydraulic-pump",
+ "targetName": "液压泵",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "guidance": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "warning": "",
+ "destination": "液压泵",
+ "success": "根据故障现象确定是哪一个液压泵发生故障",
+ "cameraPolicy": "exterior",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-hydraulic-pump",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "identify",
+ "axisSpace": "world",
+ "highlightColor": "#e53935",
+ "steps": [
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-hydraulic-pump",
+ "targetNodeName": "1液压泵",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,确定故障液压泵。根据故障现象确定发生故障的液压泵。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_FF17FDE117E94B80BB30DF3E058821FD",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "53",
+ "videoName": "重型支援桥液压泵应急切换 · 1 根据故障现象确定是哪一个液压泵发生故障",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-02",
+ "code": "FRONT-PUMP-STEP-02",
+ "stepCode": "front-pump-step-02",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-02",
+ "number": 2,
+ "title": "断开架桥车取力器",
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "guidance": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "断开架桥车取力器",
+ "cameraPolicy": "exterior",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": -30,
+ "toleranceDegrees": 6,
+ "directionHint": "向断开方向摇动"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "2取力器开关",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,断开架桥车取力器。将架桥车取力器断开。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_6E75DADE9D0649DCA16A2499D1EE8776",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "54",
+ "videoName": "重型支援桥液压泵应急切换 · 2 断开架桥车取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-03",
+ "code": "FRONT-PUMP-STEP-03",
+ "stepCode": "front-pump-step-03",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-03",
+ "number": 3,
+ "title": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "targetId": "front-pump-ball-valve-switch",
+ "targetName": "球阀开关",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "guidance": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "warning": "",
+ "destination": "球阀开关",
+ "success": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-ball-valve-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "steps": [
+ {
+ "targetId": "front-pump-ball-valve-switch",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "由垂直与官道方向旋转至平行于管道方向"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-ball-valve-switch",
+ "targetNodeName": "3球阀开关",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,打开互救球阀。打开备胎上方两个红色滤油器之间的连通球阀,手柄由垂直管道转为平行管道。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_9A4629F90E614E60835441B5D0AAE86C",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "55",
+ "videoName": "重型支援桥液压泵应急切换 · 3 将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-04",
+ "code": "FRONT-PUMP-STEP-04",
+ "stepCode": "front-pump-step-04",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-04",
+ "number": 4,
+ "title": "重新联通取力器",
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "guidance": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "重新联通取力器",
+ "cameraPolicy": "exterior",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "按步骤2的相反方向摇回去"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "2取力器开关",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,重新接通取力器。将架桥车取力器重新接通。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_DA42FE5C995F4C67A559E6E94DB1C440",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "56",
+ "videoName": "重型支援桥液压泵应急切换 · 4 重新联通取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-05",
+ "code": "FRONT-PUMP-STEP-05",
+ "stepCode": "front-pump-step-05",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-05",
+ "number": 5,
+ "title": "打开辅助控制盒内的“互救”开关",
+ "targetId": "front-pump-aux-control-box-cover",
+ "targetName": "辅助控制盒盖",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "guidance": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "warning": "",
+ "destination": "辅助控制盒盖",
+ "success": "打开辅助控制盒内的“互救”开关",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-aux-control-box-cover",
+ "mode": "inspect",
+ "durationMs": 1600,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "sequence",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-aux-control-box"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-aux-control-box-cover",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 100,
+ "toleranceDegrees": 8,
+ "directionHint": "沿控制盒盖边缘铰链打开",
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ }
+ },
+ {
+ "targetId": "front-pump-rescue-switch",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "往上搬"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-aux-control-box-cover",
+ "targetNodeName": "5辅助控制盒盖",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,打开辅助控制盒互救开关。打开辅助控制盒盖,再打开互救开关,进入单泵作业状态。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D85C34259BB34E0C966C5A79569DBF10",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "57",
+ "videoName": "重型支援桥液压泵应急切换 · 5 打开辅助控制盒内的“互救”开关",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ }
+ ],
+ "executionPlan": {
+ "schema": "digital-workshop.training-execution-plan",
+ "version": 1,
+ "entryNodeId": "front-pump-step-01",
+ "traversalOrder": [
+ "front-pump-step-01",
+ "front-pump-step-02",
+ "front-pump-step-03",
+ "front-pump-step-04",
+ "front-pump-step-05"
+ ]
+ },
+ "assessment": {
+ "passScore": 80,
+ "maxScore": 100,
+ "totalScore": 100,
+ "scoringMode": "weighted-rules",
+ "allowRetry": true,
+ "recordProcess": true
+ },
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-pump-switch",
+ "scriptVersion": "2"
+ },
+ "schemaVersion": 1,
+ "source": "桥梁/文件2/4.jpg"
+ },
+ "definitionChecksum": "18bc3f2472cbb125354438c2058f05bea45daa71cc352590b214c12894c51b27",
+ "ownerUserId": "99",
+ "ownerUsername": "root",
+ "ownerName": "内部维护",
+ "departmentId": "1",
+ "departmentName": "",
+ "status": "PUBLISHED",
+ "scheduleStartAt": null,
+ "dueAt": null,
+ "publishedAt": 1789311584,
+ "withdrawnAt": 1789311583,
+ "archivedAt": null,
+ "lifecycleReason": "发布教学任务",
+ "version": 5,
+ "addTime": 1789309630,
+ "updateTime": "2026-09-13T22:27:11",
+ "serverNow": 1789657499,
+ "members": [
+ {
+ "id": "169",
+ "userId": "99",
+ "username": "root",
+ "displayName": "内部维护",
+ "departmentId": "1",
+ "departmentName": "",
+ "memberType": "LEARNER",
+ "roleCode": "LEARNER",
+ "teamCode": "NEUTRAL",
+ "groupCode": "INDIVIDUAL",
+ "positionCode": "LEARNER",
+ "stationCode": "",
+ "sortOrder": 0,
+ "version": 0
+ },
+ {
+ "id": "184",
+ "userId": "66",
+ "username": "baidengdeng",
+ "displayName": "白澄澄",
+ "departmentId": "25",
+ "departmentName": "",
+ "memberType": "LEARNER",
+ "roleCode": "LEARNER",
+ "teamCode": "NEUTRAL",
+ "groupCode": "INDIVIDUAL",
+ "positionCode": "LEARNER",
+ "stationCode": "",
+ "sortOrder": 0,
+ "version": 0
+ }
+ ],
+ "runCount": 2,
+ "pendingReviewCount": 0
+}
\ No newline at end of file
diff --git a/reports/bridge-pump-overview-20260915/after-pump-removal.png b/reports/bridge-pump-overview-20260915/after-pump-removal.png
new file mode 100644
index 0000000..189cc61
Binary files /dev/null and b/reports/bridge-pump-overview-20260915/after-pump-removal.png differ
diff --git a/reports/bridge-pump-overview-20260915/index.html b/reports/bridge-pump-overview-20260915/index.html
new file mode 100644
index 0000000..5b7c3f6
--- /dev/null
+++ b/reports/bridge-pump-overview-20260915/index.html
@@ -0,0 +1,15 @@
+
+
+
+
+前泵换件修复 · 默认视角与封面验证
+
+前泵换件修复 · 默认视角与封面验证
+通过:默认整车视角、正常材质、切步保持视角、手动聚焦/高亮/复位,以及卡片新封面。
+本次调整
- 虚拟仿真列表卡片不再显示任务编号与“固化定义版本”小标题。
- TASK-VIRTUAL-007 进入时按整车边界设置镜头,取消自动部件近景及场景透明;操作和切步保留用户视角。
- 重新截取正常材质的整车封面,使用独立新路径,避免继续读取旧封面缓存。
+验证范围
本机和局域网分别验证首次进入、刷新、手动高亮开关及复位。实际点击执行前五步及其子操作,验证操作后、切步后都不自动变透明或拉近。结构树选择原模型部件后仍可手动聚焦,取消选择并复位可回到正常整车画面,共 26 项检查。
使用现有任务的教员预览,仅调用预览校验接口;任务发布定义与版本前后相同,没有写入训练成绩。浏览器检查记录 · 列表与封面 HTTP 核验
构建 pnpm run build 通过;正式路由检查、桥梁 3D 脚本/模型几何/落地检查(9 项)、数字人视频绑定检查(7 项)通过。列表在 1920 和 1440 宽度验证,四张封面本机/局域网共 8 次加载通过。
+默认进入:整车与环境正常显示
+
+重新生成的封面
+列表效果:移除小标题并使用新封面
+
diff --git a/reports/bridge-pump-overview-20260915/lan-overview.png b/reports/bridge-pump-overview-20260915/lan-overview.png
new file mode 100644
index 0000000..88d893a
Binary files /dev/null and b/reports/bridge-pump-overview-20260915/lan-overview.png differ
diff --git a/reports/bridge-pump-overview-20260915/local-overview.png b/reports/bridge-pump-overview-20260915/local-overview.png
new file mode 100644
index 0000000..eebec52
Binary files /dev/null and b/reports/bridge-pump-overview-20260915/local-overview.png differ
diff --git a/reports/bridge-pump-overview-20260915/manual-focus.png b/reports/bridge-pump-overview-20260915/manual-focus.png
new file mode 100644
index 0000000..ceef831
Binary files /dev/null and b/reports/bridge-pump-overview-20260915/manual-focus.png differ
diff --git a/reports/bridge-pump-overview-20260915/result.json b/reports/bridge-pump-overview-20260915/result.json
new file mode 100644
index 0000000..ec36b72
--- /dev/null
+++ b/reports/bridge-pump-overview-20260915/result.json
@@ -0,0 +1,518 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "local first load uses solid vehicle overview",
+ "compared": 79,
+ "faded": 0,
+ "opaque": 69,
+ "detail": false,
+ "distance": 9.131196295498196,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 4.066143599777776,
+ 3.809837568496557,
+ 9.009822115466914
+ ],
+ "target": [
+ -1.2331987368076383,
+ 0.6784080059688121,
+ 2.2652045961763876
+ ],
+ "step": 0
+ },
+ {
+ "name": "local explicit highlight off restores original materials",
+ "compared": 82,
+ "faded": 0,
+ "opaque": 72,
+ "detail": false,
+ "distance": 9.131196295498196,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 4.066143599777776,
+ 3.809837568496557,
+ 9.009822115466914
+ ],
+ "target": [
+ -1.2331987368076383,
+ 0.6784080059688121,
+ 2.2652045961763876
+ ],
+ "step": 0
+ },
+ {
+ "name": "local reset keeps overview solid",
+ "compared": 82,
+ "faded": 0,
+ "opaque": 72,
+ "detail": false,
+ "distance": 9.131196295498196,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 5.299342336585415,
+ 4.114997815325758,
+ 6.744617519290527
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "step": 0
+ },
+ {
+ "name": "local reload keeps overview solid",
+ "compared": 79,
+ "faded": 0,
+ "opaque": 69,
+ "detail": false,
+ "distance": 9.131196295498196,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 5.299342336585415,
+ 4.114997815325758,
+ 6.744617519290527
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "step": 0
+ },
+ {
+ "name": "lan first load uses solid vehicle overview",
+ "compared": 79,
+ "faded": 0,
+ "opaque": 69,
+ "detail": false,
+ "distance": 9.131196295498196,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 4.066143599777776,
+ 3.809837568496557,
+ 9.009822115466914
+ ],
+ "target": [
+ -1.2331987368076383,
+ 0.6784080059688121,
+ 2.2652045961763876
+ ],
+ "step": 0
+ },
+ {
+ "name": "lan explicit highlight off restores original materials",
+ "compared": 82,
+ "faded": 0,
+ "opaque": 72,
+ "detail": false,
+ "distance": 9.131196295498196,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 4.066143599777776,
+ 3.809837568496557,
+ 9.009822115466914
+ ],
+ "target": [
+ -1.2331987368076383,
+ 0.6784080059688121,
+ 2.2652045961763876
+ ],
+ "step": 0
+ },
+ {
+ "name": "lan reset keeps overview solid",
+ "compared": 82,
+ "faded": 0,
+ "opaque": 72,
+ "detail": false,
+ "distance": 9.131196295498196,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 5.299342336585415,
+ 4.114997815325758,
+ 6.744617519290527
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "step": 0
+ },
+ {
+ "name": "lan reload keeps overview solid",
+ "compared": 79,
+ "faded": 0,
+ "opaque": 69,
+ "detail": false,
+ "distance": 9.131196295498196,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 4.066143599777776,
+ 3.809837568496557,
+ 9.009822115466914
+ ],
+ "target": [
+ -1.2331987368076383,
+ 0.6784080059688121,
+ 2.2652045961763876
+ ],
+ "step": 0
+ },
+ {
+ "name": "step 1, operation 1",
+ "compared": 78,
+ "faded": 0,
+ "opaque": 68,
+ "detail": false,
+ "distance": 9.131196295498196,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 4.066143599777776,
+ 3.809837568496557,
+ 9.009822115466914
+ ],
+ "target": [
+ -1.2331987368076383,
+ 0.6784080059688121,
+ 2.2652045961763876
+ ],
+ "step": 0
+ },
+ {
+ "name": "step 1, operation 2",
+ "compared": 78,
+ "faded": 0,
+ "opaque": 68,
+ "detail": false,
+ "distance": 9.131196295498196,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 4.066143599777776,
+ 3.809837568496557,
+ 9.009822115466914
+ ],
+ "target": [
+ -1.2331987368076383,
+ 0.6784080059688121,
+ 2.2652045961763876
+ ],
+ "step": 0
+ },
+ {
+ "name": "enter step 2",
+ "compared": 75,
+ "faded": 0,
+ "opaque": 65,
+ "detail": false,
+ "distance": 9.131196295498196,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 4.119935218418679,
+ 3.809837568496557,
+ 8.794655640903304
+ ],
+ "target": [
+ -1.1794071181667358,
+ 0.6784080059688122,
+ 2.0500381216127774
+ ],
+ "step": 1
+ },
+ {
+ "name": "step 2, operation 1",
+ "compared": 75,
+ "faded": 0,
+ "opaque": 65,
+ "detail": false,
+ "distance": 9.131196295498196,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 4.119935218418679,
+ 3.809837568496557,
+ 8.794655640903304
+ ],
+ "target": [
+ -1.1794071181667358,
+ 0.6784080059688122,
+ 2.0500381216127774
+ ],
+ "step": 1
+ },
+ {
+ "name": "enter step 3",
+ "compared": 74,
+ "faded": 0,
+ "opaque": 64,
+ "detail": false,
+ "distance": 9.131196295498196,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 4.433397482641517,
+ 3.825262015725078,
+ 8.805510211390747
+ ],
+ "target": [
+ -0.8659448539438972,
+ 0.6938324531973334,
+ 2.0608926921002197
+ ],
+ "step": 2
+ },
+ {
+ "name": "step 3, operation 1",
+ "compared": 73,
+ "faded": 0,
+ "opaque": 64,
+ "detail": false,
+ "distance": 9.131196295498196,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 4.325814245359712,
+ 3.825262015725078,
+ 8.805510211390747
+ ],
+ "target": [
+ -0.973528091225702,
+ 0.6938324531973334,
+ 2.0608926921002197
+ ],
+ "step": 2
+ },
+ {
+ "name": "step 3, operation 2",
+ "compared": 72,
+ "faded": 0,
+ "opaque": 63,
+ "detail": false,
+ "distance": 9.131196295498196,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 4.325814245359712,
+ 3.825262015725078,
+ 8.805510211390747
+ ],
+ "target": [
+ -0.973528091225702,
+ 0.6938324531973334,
+ 2.0608926921002197
+ ],
+ "step": 2
+ },
+ {
+ "name": "step 3, operation 3",
+ "compared": 71,
+ "faded": 0,
+ "opaque": 63,
+ "detail": false,
+ "distance": 9.131196295498196,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 4.325814245359712,
+ 3.825262015725078,
+ 8.805510211390747
+ ],
+ "target": [
+ -0.973528091225702,
+ 0.6938324531973334,
+ 2.0608926921002197
+ ],
+ "step": 2
+ },
+ {
+ "name": "step 3, operation 4",
+ "compared": 71,
+ "faded": 0,
+ "opaque": 63,
+ "detail": false,
+ "distance": 9.131196295498196,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 4.325814245359712,
+ 3.825262015725078,
+ 8.805510211390747
+ ],
+ "target": [
+ -0.973528091225702,
+ 0.6938324531973334,
+ 2.0608926921002197
+ ],
+ "step": 2
+ },
+ {
+ "name": "enter step 4",
+ "compared": 70,
+ "faded": 0,
+ "opaque": 62,
+ "detail": false,
+ "distance": 9.131196295498196,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 4.563310686864589,
+ 3.8638919995115186,
+ 8.878551143943694
+ ],
+ "target": [
+ -0.7360316497208261,
+ 0.732462436983774,
+ 2.1339336246531677
+ ],
+ "step": 3
+ },
+ {
+ "name": "step 4, operation 1",
+ "compared": 69,
+ "faded": 0,
+ "opaque": 61,
+ "detail": false,
+ "distance": 9.131196295498194,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 4.563310686864587,
+ 3.863891999511518,
+ 8.995099650998984
+ ],
+ "target": [
+ -0.7360316497208264,
+ 0.7324624369837741,
+ 2.2504821317084565
+ ],
+ "step": 3
+ },
+ {
+ "name": "step 4, operation 2",
+ "compared": 68,
+ "faded": 0,
+ "opaque": 60,
+ "detail": false,
+ "distance": 9.131196295498194,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 4.563310686864587,
+ 3.863891999511518,
+ 8.995099650998984
+ ],
+ "target": [
+ -0.736031649720826,
+ 0.7324624369837741,
+ 2.2504821317084565
+ ],
+ "step": 3
+ },
+ {
+ "name": "step 4, operation 3",
+ "compared": 67,
+ "faded": 0,
+ "opaque": 59,
+ "detail": false,
+ "distance": 9.131196295498194,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 4.563310686864587,
+ 3.863891999511518,
+ 8.995099650998984
+ ],
+ "target": [
+ -0.736031649720826,
+ 0.7324624369837741,
+ 2.2504821317084565
+ ],
+ "step": 3
+ },
+ {
+ "name": "step 4, operation 4",
+ "compared": 67,
+ "faded": 0,
+ "opaque": 59,
+ "detail": false,
+ "distance": 9.131196295498194,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 4.563310686864587,
+ 3.863891999511518,
+ 8.995099650998984
+ ],
+ "target": [
+ -0.736031649720826,
+ 0.7324624369837741,
+ 2.2504821317084565
+ ],
+ "step": 3
+ },
+ {
+ "name": "enter step 5",
+ "compared": 62,
+ "faded": 0,
+ "opaque": 54,
+ "detail": false,
+ "distance": 9.131196295498196,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 4.604059780843084,
+ 3.8573534902871245,
+ 8.785242160009576
+ ],
+ "target": [
+ -0.6952825557423296,
+ 0.7259239277593801,
+ 2.0406246407190474
+ ],
+ "step": 4
+ },
+ {
+ "name": "step 5, operation 1",
+ "compared": 62,
+ "faded": 0,
+ "opaque": 54,
+ "detail": false,
+ "distance": 9.131196295498196,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 4.604059780843084,
+ 3.8573534902871245,
+ 8.785242160009576
+ ],
+ "target": [
+ -0.6952825557423296,
+ 0.7259239277593801,
+ 2.0406246407190474
+ ],
+ "step": 4
+ },
+ {
+ "name": "manual focus then deselect/reset returns solid overview",
+ "compared": 62,
+ "faded": 0,
+ "opaque": 54,
+ "detail": false,
+ "distance": 9.131196295498192,
+ "homeDistance": 9.131196295498194,
+ "position": [
+ 5.299342336585415,
+ 4.114997815325756,
+ 6.744617519290524
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "step": 4
+ },
+ {
+ "name": "manual structure selection and focus remain available",
+ "partKey": "root/车[0]/车_1[0]"
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://192.168.31.168:6180/api/tran/v1/teaching/assignments/88/preview/validate"
+ ],
+ "taskVersionUnchanged": true
+}
\ No newline at end of file
diff --git a/reports/bridge-solid-view-20260915/access-survey.json b/reports/bridge-solid-view-20260915/access-survey.json
new file mode 100644
index 0000000..082ce16
--- /dev/null
+++ b/reports/bridge-solid-view-20260915/access-survey.json
@@ -0,0 +1,1259 @@
+[
+ {
+ "id": "front-pump-hydraulic-pump",
+ "views": [
+ {
+ "angle": 0,
+ "elevation": 0,
+ "direction": [
+ 0,
+ 0,
+ 1
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 45,
+ "elevation": 0,
+ "direction": [
+ 0.7071067811865475,
+ 0,
+ 0.7071067811865476
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8",
+ "车_9"
+ ]
+ },
+ {
+ "angle": 90,
+ "elevation": 0,
+ "direction": [
+ 1,
+ 0,
+ 6.123233995736766e-17
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_7",
+ "车_9"
+ ]
+ },
+ {
+ "angle": 135,
+ "elevation": 0,
+ "direction": [
+ 0.7071067811865476,
+ 0,
+ -0.7071067811865475
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_9"
+ ]
+ },
+ {
+ "angle": 180,
+ "elevation": 0,
+ "direction": [
+ 1.2246467991473532e-16,
+ 0,
+ -1
+ ],
+ "hits": 4,
+ "blockers": [
+ "车_3"
+ ]
+ },
+ {
+ "angle": 225,
+ "elevation": 0,
+ "direction": [
+ -0.7071067811865475,
+ 0,
+ -0.7071067811865477
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_7",
+ "车_8"
+ ]
+ },
+ {
+ "angle": 270,
+ "elevation": 0,
+ "direction": [
+ -1,
+ 0,
+ -1.8369701987210297e-16
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_7",
+ "车_9"
+ ]
+ },
+ {
+ "angle": 315,
+ "elevation": 0,
+ "direction": [
+ -0.7071067811865477,
+ 0,
+ 0.7071067811865474
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_7",
+ "车_10"
+ ]
+ },
+ {
+ "angle": 0,
+ "elevation": 0.2,
+ "direction": [
+ 0,
+ 0.19611613513818404,
+ 0.9805806756909201
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 45,
+ "elevation": 0.2,
+ "direction": [
+ 0.6933752452815363,
+ 0.19611613513818404,
+ 0.6933752452815364
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10"
+ ]
+ },
+ {
+ "angle": 90,
+ "elevation": 0.2,
+ "direction": [
+ 0.9805806756909201,
+ 0.19611613513818404,
+ 6.004324928953171e-17
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10",
+ "车_3",
+ "车_8"
+ ]
+ },
+ {
+ "angle": 135,
+ "elevation": 0.2,
+ "direction": [
+ 0.6933752452815364,
+ 0.19611613513818404,
+ -0.6933752452815363
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_9"
+ ]
+ },
+ {
+ "angle": 180,
+ "elevation": 0.2,
+ "direction": [
+ 1.2008649857906342e-16,
+ 0.19611613513818404,
+ -0.9805806756909201
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10"
+ ]
+ },
+ {
+ "angle": 225,
+ "elevation": 0.2,
+ "direction": [
+ -0.6933752452815363,
+ 0.19611613513818404,
+ -0.6933752452815365
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 270,
+ "elevation": 0.2,
+ "direction": [
+ -0.9805806756909201,
+ 0.19611613513818404,
+ -1.801297478685951e-16
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8",
+ "车_10"
+ ]
+ },
+ {
+ "angle": 315,
+ "elevation": 0.2,
+ "direction": [
+ -0.6933752452815365,
+ 0.19611613513818404,
+ 0.6933752452815362
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10",
+ "车_8"
+ ]
+ },
+ {
+ "angle": 0,
+ "elevation": 0.5,
+ "direction": [
+ 0,
+ 0.4472135954999579,
+ 0.8944271909999159
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_7"
+ ]
+ },
+ {
+ "angle": 45,
+ "elevation": 0.5,
+ "direction": [
+ 0.6324555320336758,
+ 0.4472135954999579,
+ 0.6324555320336759
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_7"
+ ]
+ },
+ {
+ "angle": 90,
+ "elevation": 0.5,
+ "direction": [
+ 0.8944271909999159,
+ 0.4472135954999579,
+ 5.476786982642026e-17
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 135,
+ "elevation": 0.5,
+ "direction": [
+ 0.6324555320336759,
+ 0.4472135954999579,
+ -0.6324555320336758
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10",
+ "车_8"
+ ]
+ },
+ {
+ "angle": 180,
+ "elevation": 0.5,
+ "direction": [
+ 1.0953573965284052e-16,
+ 0.4472135954999579,
+ -0.8944271909999159
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10"
+ ]
+ },
+ {
+ "angle": 225,
+ "elevation": 0.5,
+ "direction": [
+ -0.6324555320336758,
+ 0.4472135954999579,
+ -0.632455532033676
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10"
+ ]
+ },
+ {
+ "angle": 270,
+ "elevation": 0.5,
+ "direction": [
+ -0.8944271909999159,
+ 0.4472135954999579,
+ -1.6430360947926078e-16
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10"
+ ]
+ },
+ {
+ "angle": 315,
+ "elevation": 0.5,
+ "direction": [
+ -0.632455532033676,
+ 0.4472135954999579,
+ 0.6324555320336757
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "front-pump-pto-switch",
+ "views": [
+ {
+ "angle": 0,
+ "elevation": 0,
+ "direction": [
+ 0,
+ 0,
+ 1
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 45,
+ "elevation": 0,
+ "direction": [
+ 0.7071067811865475,
+ 0,
+ 0.7071067811865476
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 90,
+ "elevation": 0,
+ "direction": [
+ 1,
+ 0,
+ 6.123233995736766e-17
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 135,
+ "elevation": 0,
+ "direction": [
+ 0.7071067811865476,
+ 0,
+ -0.7071067811865475
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 180,
+ "elevation": 0,
+ "direction": [
+ 1.2246467991473532e-16,
+ 0,
+ -1
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_9"
+ ]
+ },
+ {
+ "angle": 225,
+ "elevation": 0,
+ "direction": [
+ -0.7071067811865475,
+ 0,
+ -0.7071067811865477
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10"
+ ]
+ },
+ {
+ "angle": 270,
+ "elevation": 0,
+ "direction": [
+ -1,
+ 0,
+ -1.8369701987210297e-16
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 315,
+ "elevation": 0,
+ "direction": [
+ -0.7071067811865477,
+ 0,
+ 0.7071067811865474
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 0,
+ "elevation": 0.2,
+ "direction": [
+ 0,
+ 0.19611613513818404,
+ 0.9805806756909201
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 45,
+ "elevation": 0.2,
+ "direction": [
+ 0.6933752452815363,
+ 0.19611613513818404,
+ 0.6933752452815364
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 90,
+ "elevation": 0.2,
+ "direction": [
+ 0.9805806756909201,
+ 0.19611613513818404,
+ 6.004324928953171e-17
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 135,
+ "elevation": 0.2,
+ "direction": [
+ 0.6933752452815364,
+ 0.19611613513818404,
+ -0.6933752452815363
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 180,
+ "elevation": 0.2,
+ "direction": [
+ 1.2008649857906342e-16,
+ 0.19611613513818404,
+ -0.9805806756909201
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 225,
+ "elevation": 0.2,
+ "direction": [
+ -0.6933752452815363,
+ 0.19611613513818404,
+ -0.6933752452815365
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10"
+ ]
+ },
+ {
+ "angle": 270,
+ "elevation": 0.2,
+ "direction": [
+ -0.9805806756909201,
+ 0.19611613513818404,
+ -1.801297478685951e-16
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 315,
+ "elevation": 0.2,
+ "direction": [
+ -0.6933752452815365,
+ 0.19611613513818404,
+ 0.6933752452815362
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 0,
+ "elevation": 0.5,
+ "direction": [
+ 0,
+ 0.4472135954999579,
+ 0.8944271909999159
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 45,
+ "elevation": 0.5,
+ "direction": [
+ 0.6324555320336758,
+ 0.4472135954999579,
+ 0.6324555320336759
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 90,
+ "elevation": 0.5,
+ "direction": [
+ 0.8944271909999159,
+ 0.4472135954999579,
+ 5.476786982642026e-17
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 135,
+ "elevation": 0.5,
+ "direction": [
+ 0.6324555320336759,
+ 0.4472135954999579,
+ -0.6324555320336758
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 180,
+ "elevation": 0.5,
+ "direction": [
+ 1.0953573965284052e-16,
+ 0.4472135954999579,
+ -0.8944271909999159
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 225,
+ "elevation": 0.5,
+ "direction": [
+ -0.6324555320336758,
+ 0.4472135954999579,
+ -0.632455532033676
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 270,
+ "elevation": 0.5,
+ "direction": [
+ -0.8944271909999159,
+ 0.4472135954999579,
+ -1.6430360947926078e-16
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10"
+ ]
+ },
+ {
+ "angle": 315,
+ "elevation": 0.5,
+ "direction": [
+ -0.632455532033676,
+ 0.4472135954999579,
+ 0.6324555320336757
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "front-pump-ball-valve-switch",
+ "views": [
+ {
+ "angle": 0,
+ "elevation": 0,
+ "direction": [
+ 0,
+ 0,
+ 1
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10"
+ ]
+ },
+ {
+ "angle": 45,
+ "elevation": 0,
+ "direction": [
+ 0.7071067811865475,
+ 0,
+ 0.7071067811865476
+ ],
+ "hits": 2,
+ "blockers": [
+ "车_9"
+ ]
+ },
+ {
+ "angle": 90,
+ "elevation": 0,
+ "direction": [
+ 1,
+ 0,
+ 6.123233995736766e-17
+ ],
+ "hits": 5,
+ "blockers": []
+ },
+ {
+ "angle": 135,
+ "elevation": 0,
+ "direction": [
+ 0.7071067811865476,
+ 0,
+ -0.7071067811865475
+ ],
+ "hits": 2,
+ "blockers": [
+ "车_9",
+ "车_7"
+ ]
+ },
+ {
+ "angle": 180,
+ "elevation": 0,
+ "direction": [
+ 1.2246467991473532e-16,
+ 0,
+ -1
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10"
+ ]
+ },
+ {
+ "angle": 225,
+ "elevation": 0,
+ "direction": [
+ -0.7071067811865475,
+ 0,
+ -0.7071067811865477
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10"
+ ]
+ },
+ {
+ "angle": 270,
+ "elevation": 0,
+ "direction": [
+ -1,
+ 0,
+ -1.8369701987210297e-16
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 315,
+ "elevation": 0,
+ "direction": [
+ -0.7071067811865477,
+ 0,
+ 0.7071067811865474
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10"
+ ]
+ },
+ {
+ "angle": 0,
+ "elevation": 0.2,
+ "direction": [
+ 0,
+ 0.19611613513818404,
+ 0.9805806756909201
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 45,
+ "elevation": 0.2,
+ "direction": [
+ 0.6933752452815363,
+ 0.19611613513818404,
+ 0.6933752452815364
+ ],
+ "hits": 2,
+ "blockers": [
+ "车_6"
+ ]
+ },
+ {
+ "angle": 90,
+ "elevation": 0.2,
+ "direction": [
+ 0.9805806756909201,
+ 0.19611613513818404,
+ 6.004324928953171e-17
+ ],
+ "hits": 5,
+ "blockers": []
+ },
+ {
+ "angle": 135,
+ "elevation": 0.2,
+ "direction": [
+ 0.6933752452815364,
+ 0.19611613513818404,
+ -0.6933752452815363
+ ],
+ "hits": 2,
+ "blockers": [
+ "车_6"
+ ]
+ },
+ {
+ "angle": 180,
+ "elevation": 0.2,
+ "direction": [
+ 1.2008649857906342e-16,
+ 0.19611613513818404,
+ -0.9805806756909201
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10"
+ ]
+ },
+ {
+ "angle": 225,
+ "elevation": 0.2,
+ "direction": [
+ -0.6933752452815363,
+ 0.19611613513818404,
+ -0.6933752452815365
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10"
+ ]
+ },
+ {
+ "angle": 270,
+ "elevation": 0.2,
+ "direction": [
+ -0.9805806756909201,
+ 0.19611613513818404,
+ -1.801297478685951e-16
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10"
+ ]
+ },
+ {
+ "angle": 315,
+ "elevation": 0.2,
+ "direction": [
+ -0.6933752452815365,
+ 0.19611613513818404,
+ 0.6933752452815362
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 0,
+ "elevation": 0.5,
+ "direction": [
+ 0,
+ 0.4472135954999579,
+ 0.8944271909999159
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 45,
+ "elevation": 0.5,
+ "direction": [
+ 0.6324555320336758,
+ 0.4472135954999579,
+ 0.6324555320336759
+ ],
+ "hits": 4,
+ "blockers": [
+ "车_6"
+ ]
+ },
+ {
+ "angle": 90,
+ "elevation": 0.5,
+ "direction": [
+ 0.8944271909999159,
+ 0.4472135954999579,
+ 5.476786982642026e-17
+ ],
+ "hits": 5,
+ "blockers": []
+ },
+ {
+ "angle": 135,
+ "elevation": 0.5,
+ "direction": [
+ 0.6324555320336759,
+ 0.4472135954999579,
+ -0.6324555320336758
+ ],
+ "hits": 4,
+ "blockers": [
+ "车_6"
+ ]
+ },
+ {
+ "angle": 180,
+ "elevation": 0.5,
+ "direction": [
+ 1.0953573965284052e-16,
+ 0.4472135954999579,
+ -0.8944271909999159
+ ],
+ "hits": 4,
+ "blockers": [
+ "车_6"
+ ]
+ },
+ {
+ "angle": 225,
+ "elevation": 0.5,
+ "direction": [
+ -0.6324555320336758,
+ 0.4472135954999579,
+ -0.632455532033676
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10"
+ ]
+ },
+ {
+ "angle": 270,
+ "elevation": 0.5,
+ "direction": [
+ -0.8944271909999159,
+ 0.4472135954999579,
+ -1.6430360947926078e-16
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10",
+ "车_6"
+ ]
+ },
+ {
+ "angle": 315,
+ "elevation": 0.5,
+ "direction": [
+ -0.632455532033676,
+ 0.4472135954999579,
+ 0.6324555320336757
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "front-pump-aux-control-box-cover",
+ "views": [
+ {
+ "angle": 0,
+ "elevation": 0,
+ "direction": [
+ 0,
+ 0,
+ 1
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 45,
+ "elevation": 0,
+ "direction": [
+ 0.7071067811865475,
+ 0,
+ 0.7071067811865476
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10"
+ ]
+ },
+ {
+ "angle": 90,
+ "elevation": 0,
+ "direction": [
+ 1,
+ 0,
+ 6.123233995736766e-17
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_9"
+ ]
+ },
+ {
+ "angle": 135,
+ "elevation": 0,
+ "direction": [
+ 0.7071067811865476,
+ 0,
+ -0.7071067811865475
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_7",
+ "车_10",
+ "车_4"
+ ]
+ },
+ {
+ "angle": 180,
+ "elevation": 0,
+ "direction": [
+ 1.2246467991473532e-16,
+ 0,
+ -1
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10"
+ ]
+ },
+ {
+ "angle": 225,
+ "elevation": 0,
+ "direction": [
+ -0.7071067811865475,
+ 0,
+ -0.7071067811865477
+ ],
+ "hits": 5,
+ "blockers": []
+ },
+ {
+ "angle": 270,
+ "elevation": 0,
+ "direction": [
+ -1,
+ 0,
+ -1.8369701987210297e-16
+ ],
+ "hits": 5,
+ "blockers": []
+ },
+ {
+ "angle": 315,
+ "elevation": 0,
+ "direction": [
+ -0.7071067811865477,
+ 0,
+ 0.7071067811865474
+ ],
+ "hits": 5,
+ "blockers": []
+ },
+ {
+ "angle": 0,
+ "elevation": 0.2,
+ "direction": [
+ 0,
+ 0.19611613513818404,
+ 0.9805806756909201
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 45,
+ "elevation": 0.2,
+ "direction": [
+ 0.6933752452815363,
+ 0.19611613513818404,
+ 0.6933752452815364
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 90,
+ "elevation": 0.2,
+ "direction": [
+ 0.9805806756909201,
+ 0.19611613513818404,
+ 6.004324928953171e-17
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_9"
+ ]
+ },
+ {
+ "angle": 135,
+ "elevation": 0.2,
+ "direction": [
+ 0.6933752452815364,
+ 0.19611613513818404,
+ -0.6933752452815363
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10"
+ ]
+ },
+ {
+ "angle": 180,
+ "elevation": 0.2,
+ "direction": [
+ 1.2008649857906342e-16,
+ 0.19611613513818404,
+ -0.9805806756909201
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 225,
+ "elevation": 0.2,
+ "direction": [
+ -0.6933752452815363,
+ 0.19611613513818404,
+ -0.6933752452815365
+ ],
+ "hits": 5,
+ "blockers": []
+ },
+ {
+ "angle": 270,
+ "elevation": 0.2,
+ "direction": [
+ -0.9805806756909201,
+ 0.19611613513818404,
+ -1.801297478685951e-16
+ ],
+ "hits": 5,
+ "blockers": []
+ },
+ {
+ "angle": 315,
+ "elevation": 0.2,
+ "direction": [
+ -0.6933752452815365,
+ 0.19611613513818404,
+ 0.6933752452815362
+ ],
+ "hits": 5,
+ "blockers": []
+ },
+ {
+ "angle": 0,
+ "elevation": 0.5,
+ "direction": [
+ 0,
+ 0.4472135954999579,
+ 0.8944271909999159
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 45,
+ "elevation": 0.5,
+ "direction": [
+ 0.6324555320336758,
+ 0.4472135954999579,
+ 0.6324555320336759
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_8"
+ ]
+ },
+ {
+ "angle": 90,
+ "elevation": 0.5,
+ "direction": [
+ 0.8944271909999159,
+ 0.4472135954999579,
+ 5.476786982642026e-17
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_9",
+ "车_7"
+ ]
+ },
+ {
+ "angle": 135,
+ "elevation": 0.5,
+ "direction": [
+ 0.6324555320336759,
+ 0.4472135954999579,
+ -0.6324555320336758
+ ],
+ "hits": 0,
+ "blockers": [
+ "车_10"
+ ]
+ },
+ {
+ "angle": 180,
+ "elevation": 0.5,
+ "direction": [
+ 1.0953573965284052e-16,
+ 0.4472135954999579,
+ -0.8944271909999159
+ ],
+ "hits": 5,
+ "blockers": []
+ },
+ {
+ "angle": 225,
+ "elevation": 0.5,
+ "direction": [
+ -0.6324555320336758,
+ 0.4472135954999579,
+ -0.632455532033676
+ ],
+ "hits": 5,
+ "blockers": []
+ },
+ {
+ "angle": 270,
+ "elevation": 0.5,
+ "direction": [
+ -0.8944271909999159,
+ 0.4472135954999579,
+ -1.6430360947926078e-16
+ ],
+ "hits": 5,
+ "blockers": []
+ },
+ {
+ "angle": 315,
+ "elevation": 0.5,
+ "direction": [
+ -0.632455532033676,
+ 0.4472135954999579,
+ 0.6324555320336757
+ ],
+ "hits": 5,
+ "blockers": []
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/reports/bridge-solid-view-20260915/index.html b/reports/bridge-solid-view-20260915/index.html
new file mode 100644
index 0000000..490bf4d
--- /dev/null
+++ b/reports/bridge-solid-view-20260915/index.html
@@ -0,0 +1,7 @@
+双面材质与视角镂空修复
+双面材质与视角镂空修复
2026-09-15 · 四套正式桥梁脚本 · 管理员 / 教员预览
+结论:双面材质已生效,镂空来自自动隐藏网格。聚焦/旋转视角时自动将遮挡网格 visible 设为 false。实际 GLB 的一块网格可能涵盖大片车身或地形,DoubleSide 无法显示已被隐藏的网格。
现已删除该逻辑。聚焦、旋转、增强辉光均不改变完整网格集合;显隐仅由实际步骤动画或用户主动操作控制。
+复现与回归证据
修复前 005 聚焦后可见网格由 41 块变成 38 块。修复后四个场景均保持数量和网格标识完全一致,检查双面材质、三个方向旋转、辉光切换、半透明、隐藏其他及恢复。
| 任务 | 聚焦前 | 聚焦后 | 自动隐藏 |
|---|
| 005 液压泵应急切换 | 41 | 41 | 0 |
| 006 液压泵应急替代 | 69 | 69 | 0 |
| 007 前泵换件修复 | 66 | 66 | 0 |
| 008 平衡阀拆拼互换 | 77 | 77 | 0 |
+旋转视角后的实际画面
+实际操作回归
+环境:本机与局域网,经 6100 Gateway。未新增任务、未写学员成绩;操作回归只使用现有任务的 preview/validate。
构建(含类型检查及模型发布包校验)、正式路由契约、Git 差异检查通过。
四场景显隐回归 · 局域网记录 · 修复前复现 · 汇总记录
\ No newline at end of file
diff --git a/reports/bridge-solid-view-20260915/report-overview.png b/reports/bridge-solid-view-20260915/report-overview.png
new file mode 100644
index 0000000..5330e74
Binary files /dev/null and b/reports/bridge-solid-view-20260915/report-overview.png differ
diff --git a/reports/bridge-solid-view-20260915/result.json b/reports/bridge-solid-view-20260915/result.json
new file mode 100644
index 0000000..496b325
--- /dev/null
+++ b/reports/bridge-solid-view-20260915/result.json
@@ -0,0 +1,59 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "id": "86",
+ "name": "focus keeps every previously visible mesh",
+ "before": 41,
+ "after": 41,
+ "automaticHidden": 0
+ },
+ {
+ "id": "86",
+ "name": "three orbit directions, glow, explicit opacity/hide and restore",
+ "pass": true,
+ "meshes": 41
+ },
+ {
+ "id": "87",
+ "name": "focus keeps every previously visible mesh",
+ "before": 69,
+ "after": 69,
+ "automaticHidden": 0
+ },
+ {
+ "id": "87",
+ "name": "three orbit directions, glow, explicit opacity/hide and restore",
+ "pass": true,
+ "meshes": 71
+ },
+ {
+ "id": "88",
+ "name": "focus keeps every previously visible mesh",
+ "before": 66,
+ "after": 66,
+ "automaticHidden": 0
+ },
+ {
+ "id": "88",
+ "name": "three orbit directions, glow, explicit opacity/hide and restore",
+ "pass": true,
+ "meshes": 74
+ },
+ {
+ "id": "89",
+ "name": "focus keeps every previously visible mesh",
+ "before": 77,
+ "after": 77,
+ "automaticHidden": 0
+ },
+ {
+ "id": "89",
+ "name": "three orbit directions, glow, explicit opacity/hide and restore",
+ "pass": true,
+ "meshes": 77
+ }
+ ],
+ "errors": [],
+ "writes": []
+}
\ No newline at end of file
diff --git a/reports/bridge-solid-view-20260915/summary.json b/reports/bridge-solid-view-20260915/summary.json
new file mode 100644
index 0000000..4cd6bbc
--- /dev/null
+++ b/reports/bridge-solid-view-20260915/summary.json
@@ -0,0 +1,229 @@
+{
+ "pass": true,
+ "generatedAt": "2026-09-15T15:30:39.664Z",
+ "rootCause": "聚焦/旋转视角时自动将遮挡网格 visible 设为 false。实际 GLB 的一块网格可能涵盖大片车身或地形,DoubleSide 无法显示已被隐藏的网格。",
+ "changes": [
+ "删除自动遮挡隐藏及其恢复/逐帧射线逻辑",
+ "保留物理材质 DoubleSide",
+ "校准液压泵和球阀的可见观察面",
+ "只允许步骤动画及主动查看工具改变显隐"
+ ],
+ "visibility": [
+ {
+ "id": "86",
+ "name": "focus keeps every previously visible mesh",
+ "before": 41,
+ "after": 41,
+ "automaticHidden": 0
+ },
+ {
+ "id": "86",
+ "name": "three orbit directions, glow, explicit opacity/hide and restore",
+ "pass": true,
+ "meshes": 41
+ },
+ {
+ "id": "87",
+ "name": "focus keeps every previously visible mesh",
+ "before": 69,
+ "after": 69,
+ "automaticHidden": 0
+ },
+ {
+ "id": "87",
+ "name": "three orbit directions, glow, explicit opacity/hide and restore",
+ "pass": true,
+ "meshes": 71
+ },
+ {
+ "id": "88",
+ "name": "focus keeps every previously visible mesh",
+ "before": 66,
+ "after": 66,
+ "automaticHidden": 0
+ },
+ {
+ "id": "88",
+ "name": "three orbit directions, glow, explicit opacity/hide and restore",
+ "pass": true,
+ "meshes": 74
+ },
+ {
+ "id": "89",
+ "name": "focus keeps every previously visible mesh",
+ "before": 77,
+ "after": 77,
+ "automaticHidden": 0
+ },
+ {
+ "id": "89",
+ "name": "three orbit directions, glow, explicit opacity/hide and restore",
+ "pass": true,
+ "meshes": 77
+ }
+ ],
+ "lan": [
+ {
+ "id": "86",
+ "name": "focus keeps every previously visible mesh",
+ "before": 41,
+ "after": 41,
+ "automaticHidden": 0
+ },
+ {
+ "id": "86",
+ "name": "three orbit directions, glow, explicit opacity/hide and restore",
+ "pass": true,
+ "meshes": 41
+ }
+ ],
+ "operations": 94,
+ "serverValidations": 39,
+ "explicitTools": [
+ {
+ "name": "task 86 internal target inspected with explicit translucent tool",
+ "targetId": "front-pump-pto-switch",
+ "pass": true
+ },
+ {
+ "name": "task 87 internal target inspected with explicit translucent tool",
+ "targetId": "front-pump-pto-switch",
+ "pass": true
+ },
+ {
+ "name": "task 88 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-engine",
+ "pass": true
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-small-seat",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-small-seat",
+ "pass": true
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-large-seat",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-large-seat",
+ "pass": true
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-large-seat",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-large-seat",
+ "pass": true
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-large-plug-1",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-large-plug-1",
+ "pass": true
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-large-plug-2",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-large-plug-2",
+ "pass": true
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-large-bolt-1",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-large-bolt-1",
+ "pass": true
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-large-bolt-2",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-large-bolt-2",
+ "pass": true
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-large-bolt-3",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-large-bolt-3",
+ "pass": true
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-large-bolt-4",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-large-bolt-4",
+ "pass": true
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-large-bolt-3",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-large-bolt-3",
+ "pass": true
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-large-bolt-4",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-large-bolt-4",
+ "pass": true
+ }
+ ],
+ "commands": [
+ {
+ "command": "pnpm run build",
+ "pass": true
+ },
+ {
+ "command": "node scripts/virtual-training-formal-route.contract.test.mjs",
+ "pass": true
+ },
+ {
+ "command": "git diff --check",
+ "pass": true
+ }
+ ],
+ "environment": [
+ "http://127.0.0.1:6180",
+ "http://192.168.31.168:6180"
+ ],
+ "account": "管理员 / 教员预览",
+ "data": "未新增任务、未写学员成绩;操作回归只使用现有任务的 preview/validate。"
+}
\ No newline at end of file
diff --git a/reports/bridge-solid-view-20260915/task-86-focused.png b/reports/bridge-solid-view-20260915/task-86-focused.png
new file mode 100644
index 0000000..24a9295
Binary files /dev/null and b/reports/bridge-solid-view-20260915/task-86-focused.png differ
diff --git a/reports/bridge-solid-view-20260915/task-86-orbit-1.png b/reports/bridge-solid-view-20260915/task-86-orbit-1.png
new file mode 100644
index 0000000..51e317c
Binary files /dev/null and b/reports/bridge-solid-view-20260915/task-86-orbit-1.png differ
diff --git a/reports/bridge-solid-view-20260915/task-86-orbit-2.png b/reports/bridge-solid-view-20260915/task-86-orbit-2.png
new file mode 100644
index 0000000..89d1e51
Binary files /dev/null and b/reports/bridge-solid-view-20260915/task-86-orbit-2.png differ
diff --git a/reports/bridge-solid-view-20260915/task-86-orbit-3.png b/reports/bridge-solid-view-20260915/task-86-orbit-3.png
new file mode 100644
index 0000000..e2dbf94
Binary files /dev/null and b/reports/bridge-solid-view-20260915/task-86-orbit-3.png differ
diff --git a/reports/bridge-solid-view-20260915/task-86-restored.png b/reports/bridge-solid-view-20260915/task-86-restored.png
new file mode 100644
index 0000000..7c2e69e
Binary files /dev/null and b/reports/bridge-solid-view-20260915/task-86-restored.png differ
diff --git a/reports/bridge-solid-view-20260915/task-87-focused.png b/reports/bridge-solid-view-20260915/task-87-focused.png
new file mode 100644
index 0000000..ce9d048
Binary files /dev/null and b/reports/bridge-solid-view-20260915/task-87-focused.png differ
diff --git a/reports/bridge-solid-view-20260915/task-87-orbit-1.png b/reports/bridge-solid-view-20260915/task-87-orbit-1.png
new file mode 100644
index 0000000..b014666
Binary files /dev/null and b/reports/bridge-solid-view-20260915/task-87-orbit-1.png differ
diff --git a/reports/bridge-solid-view-20260915/task-87-orbit-2.png b/reports/bridge-solid-view-20260915/task-87-orbit-2.png
new file mode 100644
index 0000000..e521b71
Binary files /dev/null and b/reports/bridge-solid-view-20260915/task-87-orbit-2.png differ
diff --git a/reports/bridge-solid-view-20260915/task-87-orbit-3.png b/reports/bridge-solid-view-20260915/task-87-orbit-3.png
new file mode 100644
index 0000000..25f5e20
Binary files /dev/null and b/reports/bridge-solid-view-20260915/task-87-orbit-3.png differ
diff --git a/reports/bridge-solid-view-20260915/task-87-restored.png b/reports/bridge-solid-view-20260915/task-87-restored.png
new file mode 100644
index 0000000..1856f54
Binary files /dev/null and b/reports/bridge-solid-view-20260915/task-87-restored.png differ
diff --git a/reports/bridge-solid-view-20260915/task-88-focused.png b/reports/bridge-solid-view-20260915/task-88-focused.png
new file mode 100644
index 0000000..5c03116
Binary files /dev/null and b/reports/bridge-solid-view-20260915/task-88-focused.png differ
diff --git a/reports/bridge-solid-view-20260915/task-88-orbit-1.png b/reports/bridge-solid-view-20260915/task-88-orbit-1.png
new file mode 100644
index 0000000..379d1f6
Binary files /dev/null and b/reports/bridge-solid-view-20260915/task-88-orbit-1.png differ
diff --git a/reports/bridge-solid-view-20260915/task-88-orbit-2.png b/reports/bridge-solid-view-20260915/task-88-orbit-2.png
new file mode 100644
index 0000000..41913c0
Binary files /dev/null and b/reports/bridge-solid-view-20260915/task-88-orbit-2.png differ
diff --git a/reports/bridge-solid-view-20260915/task-88-orbit-3.png b/reports/bridge-solid-view-20260915/task-88-orbit-3.png
new file mode 100644
index 0000000..d04509b
Binary files /dev/null and b/reports/bridge-solid-view-20260915/task-88-orbit-3.png differ
diff --git a/reports/bridge-solid-view-20260915/task-88-restored.png b/reports/bridge-solid-view-20260915/task-88-restored.png
new file mode 100644
index 0000000..4601d6a
Binary files /dev/null and b/reports/bridge-solid-view-20260915/task-88-restored.png differ
diff --git a/reports/bridge-solid-view-20260915/task-89-focused.png b/reports/bridge-solid-view-20260915/task-89-focused.png
new file mode 100644
index 0000000..b7f9746
Binary files /dev/null and b/reports/bridge-solid-view-20260915/task-89-focused.png differ
diff --git a/reports/bridge-solid-view-20260915/task-89-orbit-1.png b/reports/bridge-solid-view-20260915/task-89-orbit-1.png
new file mode 100644
index 0000000..586fc88
Binary files /dev/null and b/reports/bridge-solid-view-20260915/task-89-orbit-1.png differ
diff --git a/reports/bridge-solid-view-20260915/task-89-orbit-2.png b/reports/bridge-solid-view-20260915/task-89-orbit-2.png
new file mode 100644
index 0000000..6ef318c
Binary files /dev/null and b/reports/bridge-solid-view-20260915/task-89-orbit-2.png differ
diff --git a/reports/bridge-solid-view-20260915/task-89-orbit-3.png b/reports/bridge-solid-view-20260915/task-89-orbit-3.png
new file mode 100644
index 0000000..567e91a
Binary files /dev/null and b/reports/bridge-solid-view-20260915/task-89-orbit-3.png differ
diff --git a/reports/bridge-solid-view-20260915/task-89-restored.png b/reports/bridge-solid-view-20260915/task-89-restored.png
new file mode 100644
index 0000000..eaa544f
Binary files /dev/null and b/reports/bridge-solid-view-20260915/task-89-restored.png differ
diff --git a/reports/bridge-solid-view-before-20260915/failure.png b/reports/bridge-solid-view-before-20260915/failure.png
new file mode 100644
index 0000000..b50f640
Binary files /dev/null and b/reports/bridge-solid-view-before-20260915/failure.png differ
diff --git a/reports/bridge-solid-view-before-20260915/result.json b/reports/bridge-solid-view-before-20260915/result.json
new file mode 100644
index 0000000..4359745
--- /dev/null
+++ b/reports/bridge-solid-view-before-20260915/result.json
@@ -0,0 +1,15 @@
+{
+ "pass": false,
+ "error": "focusing must not hide vehicle or terrain meshes\n+ actual - expected\n... Skipped lines\n\n [\n '00b327b1-6033-4282-890e-5377f7073c0e',\n '040360eb-6fb0-42e2-9c67-46c72b17bab3',\n '0b913f30-6f2b-423d-bd89-c1b2d6ad6864',\n '0be79242-5512-441a-a668-914bd712b33a',\n...\n '641093c9-fcb5-41c6-acbe-1e594963d03b',\n- '6462fa40-bcba-45c1-b7c2-02dad80bb1f7',\n '6a01d990-04f8-4c5d-8571-020f30ab4dca',\n '6c3e67ab-e06e-47ae-95bc-a52f997cc6cc',\n '7275b449-e0aa-43a5-9ee5-a02344f651a4',\n '784c3a65-1ad4-480d-a29d-bab975561a8e',\n '7b260606-0a8e-476f-bf0f-d0a974e48ffc',\n...\n '9f716465-9272-4c6e-81b4-206a46132ba7',\n- 'ade86b94-d60e-4597-a52c-2d31c23fe647',\n 'bacd1926-d05d-4fdb-bb3f-01006508a5e8',\n 'caac949f-0d21-42eb-9980-59780645fe10',\n 'cb502f2b-1f99-4097-b69d-e347114fdd58',\n 'd9e2f03e-4ec1-4204-a4a1-418829b73318',\n 'e9441592-4fcb-418a-8a6c-e07dfd81c109',\n- 'f49a93d6-5eb6-4364-9c6d-055c22c3cba9',\n 'f8328840-00ea-4e94-90a6-b5bca6f29e7b',\n 'fce6b7a5-6ab9-46f3-b76c-302abbef4504'\n ]\n",
+ "checks": [
+ {
+ "id": "86",
+ "name": "focus keeps every previously visible mesh",
+ "before": 41,
+ "after": 38,
+ "automaticHidden": 3
+ }
+ ],
+ "errors": [],
+ "writes": []
+}
\ No newline at end of file
diff --git a/reports/bridge-solid-view-before-20260915/task-86-focused.png b/reports/bridge-solid-view-before-20260915/task-86-focused.png
new file mode 100644
index 0000000..b50f640
Binary files /dev/null and b/reports/bridge-solid-view-before-20260915/task-86-focused.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/failure.png b/reports/bridge-solid-view-flow-20260915/failure.png
new file mode 100644
index 0000000..c524c71
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/failure.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-86-fullscreen.png b/reports/bridge-solid-view-flow-20260915/task-86-fullscreen.png
new file mode 100644
index 0000000..aa0876c
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-86-fullscreen.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-86-initial.png b/reports/bridge-solid-view-flow-20260915/task-86-initial.png
new file mode 100644
index 0000000..b31796d
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-86-initial.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-86-rescue-moving.png b/reports/bridge-solid-view-flow-20260915/task-86-rescue-moving.png
new file mode 100644
index 0000000..b5b7890
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-86-rescue-moving.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-86-step-1.png b/reports/bridge-solid-view-flow-20260915/task-86-step-1.png
new file mode 100644
index 0000000..144269f
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-86-step-1.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-86-step-2.png b/reports/bridge-solid-view-flow-20260915/task-86-step-2.png
new file mode 100644
index 0000000..0a791d0
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-86-step-2.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-86-step-3.png b/reports/bridge-solid-view-flow-20260915/task-86-step-3.png
new file mode 100644
index 0000000..6d8e485
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-86-step-3.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-86-step-4.png b/reports/bridge-solid-view-flow-20260915/task-86-step-4.png
new file mode 100644
index 0000000..56bb1ae
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-86-step-4.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-86-step-5.png b/reports/bridge-solid-view-flow-20260915/task-86-step-5.png
new file mode 100644
index 0000000..1a095ef
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-86-step-5.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-86-translucent.png b/reports/bridge-solid-view-flow-20260915/task-86-translucent.png
new file mode 100644
index 0000000..a57ec4b
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-86-translucent.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-86.json b/reports/bridge-solid-view-flow-20260915/task-86.json
new file mode 100644
index 0000000..76c0fcb
--- /dev/null
+++ b/reports/bridge-solid-view-flow-20260915/task-86.json
@@ -0,0 +1,421 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 86 first view",
+ "state": {
+ "id": "front-pump-hydraulic-pump",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 11.052363924053688,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 937.1159093565705,
+ "y": 510.8943121357542,
+ "localX": 678.1159093565705,
+ "localY": 322.3943121357542,
+ "visible": true
+ },
+ "bounds": [
+ 0.10935024518472723,
+ 0.13537492625037484,
+ 0.19723593501664283
+ ],
+ "projected": {
+ "x": 670.919240275776,
+ "y": 316.01579133562,
+ "w": 14.309325962616413,
+ "h": 12.873100207788639
+ },
+ "pivot": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 6.098689649701348e-32,
+ 2.5291018817332963e-16,
+ -1
+ ],
+ "workflowCoverage": [
+ {
+ "name": "front-pump-hydraulic-pump",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 6.688026389433602,
+ 3.8228247388783156,
+ 8.328485692502216
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 液压泵",
+ "x": 881.0625,
+ "y": 533.375,
+ "w": 112,
+ "h": 30,
+ "id": "front-pump-hydraulic-pump"
+ }
+ ],
+ "operationData": {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵",
+ "index": 0,
+ "kind": "identify",
+ "deltaDegrees": 0
+ },
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 86 step 1 operation 1",
+ "target": "front-pump-hydraulic-pump",
+ "drag": false,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 705.1374098658791,
+ "y": 222.81006115045116,
+ "w": 91.72518026824184,
+ "h": 113.44868046645237
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 86 internal target inspected with explicit translucent tool",
+ "targetId": "front-pump-pto-switch",
+ "pass": true
+ },
+ {
+ "name": "task 86 step 2 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 709.0006218750913,
+ "y": 263.03238137674134,
+ "w": 83.99875624981757,
+ "h": 33.023591730971475
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 86 step 3 operation 1",
+ "target": "front-pump-ball-valve-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 742.9515028622343,
+ "y": 259.69721416379815,
+ "w": 16.096994275529482,
+ "h": 40.44894573262036
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 86 step 4 operation 1",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 706.5903063366927,
+ "y": 244.5697698769074,
+ "w": 88.81938732661342,
+ "h": 69.87239851232039
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 86 step 5 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 699.1228274926349,
+ "y": 249.2085662189188,
+ "w": 103.7543450147308,
+ "h": 60.65167032951712
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 86 step 5 operation 2",
+ "target": "front-pump-rescue-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 748.0136091802624,
+ "y": 276.397277651574,
+ "w": 5.972781639476352,
+ "h": 6.274247464206724
+ },
+ "labels": 4
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/86/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-solid-view-flow-20260915/task-87-fullscreen.png b/reports/bridge-solid-view-flow-20260915/task-87-fullscreen.png
new file mode 100644
index 0000000..1cb42b3
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-87-fullscreen.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-87-initial.png b/reports/bridge-solid-view-flow-20260915/task-87-initial.png
new file mode 100644
index 0000000..e3342ee
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-87-initial.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-87-rescue-moving.png b/reports/bridge-solid-view-flow-20260915/task-87-rescue-moving.png
new file mode 100644
index 0000000..91b0b01
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-87-rescue-moving.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-87-step-1.png b/reports/bridge-solid-view-flow-20260915/task-87-step-1.png
new file mode 100644
index 0000000..00e28fd
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-87-step-1.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-87-step-2.png b/reports/bridge-solid-view-flow-20260915/task-87-step-2.png
new file mode 100644
index 0000000..94c918c
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-87-step-2.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-87-step-3.png b/reports/bridge-solid-view-flow-20260915/task-87-step-3.png
new file mode 100644
index 0000000..4ffe39b
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-87-step-3.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-87-step-4.png b/reports/bridge-solid-view-flow-20260915/task-87-step-4.png
new file mode 100644
index 0000000..fd2566b
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-87-step-4.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-87-step-5.png b/reports/bridge-solid-view-flow-20260915/task-87-step-5.png
new file mode 100644
index 0000000..087700d
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-87-step-5.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-87-step-6.png b/reports/bridge-solid-view-flow-20260915/task-87-step-6.png
new file mode 100644
index 0000000..4d8491e
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-87-step-6.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-87-step-7.png b/reports/bridge-solid-view-flow-20260915/task-87-step-7.png
new file mode 100644
index 0000000..2a30efc
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-87-step-7.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-87-translucent.png b/reports/bridge-solid-view-flow-20260915/task-87-translucent.png
new file mode 100644
index 0000000..c76910a
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-87-translucent.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-88-fullscreen.png b/reports/bridge-solid-view-flow-20260915/task-88-fullscreen.png
new file mode 100644
index 0000000..88bf579
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-88-fullscreen.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-88-initial.png b/reports/bridge-solid-view-flow-20260915/task-88-initial.png
new file mode 100644
index 0000000..9287fd9
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-88-initial.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-88-step-1.png b/reports/bridge-solid-view-flow-20260915/task-88-step-1.png
new file mode 100644
index 0000000..2e273eb
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-88-step-1.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-88-step-10.png b/reports/bridge-solid-view-flow-20260915/task-88-step-10.png
new file mode 100644
index 0000000..21f59fa
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-88-step-10.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-88-step-11.png b/reports/bridge-solid-view-flow-20260915/task-88-step-11.png
new file mode 100644
index 0000000..42ba656
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-88-step-11.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-88-step-2.png b/reports/bridge-solid-view-flow-20260915/task-88-step-2.png
new file mode 100644
index 0000000..9342968
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-88-step-2.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-88-step-3.png b/reports/bridge-solid-view-flow-20260915/task-88-step-3.png
new file mode 100644
index 0000000..6599007
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-88-step-3.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-88-step-4.png b/reports/bridge-solid-view-flow-20260915/task-88-step-4.png
new file mode 100644
index 0000000..bd364e7
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-88-step-4.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-88-step-5.png b/reports/bridge-solid-view-flow-20260915/task-88-step-5.png
new file mode 100644
index 0000000..7be5014
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-88-step-5.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-88-step-6.png b/reports/bridge-solid-view-flow-20260915/task-88-step-6.png
new file mode 100644
index 0000000..e1d4681
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-88-step-6.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-88-step-7.png b/reports/bridge-solid-view-flow-20260915/task-88-step-7.png
new file mode 100644
index 0000000..1c80bcf
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-88-step-7.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-88-step-8.png b/reports/bridge-solid-view-flow-20260915/task-88-step-8.png
new file mode 100644
index 0000000..22adbb5
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-88-step-8.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-88-step-9.png b/reports/bridge-solid-view-flow-20260915/task-88-step-9.png
new file mode 100644
index 0000000..1293a28
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-88-step-9.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-88-translucent.png b/reports/bridge-solid-view-flow-20260915/task-88-translucent.png
new file mode 100644
index 0000000..20601f8
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-88-translucent.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-89-fullscreen.png b/reports/bridge-solid-view-flow-20260915/task-89-fullscreen.png
new file mode 100644
index 0000000..ebaadf4
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-89-fullscreen.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-89-initial.png b/reports/bridge-solid-view-flow-20260915/task-89-initial.png
new file mode 100644
index 0000000..9b93f64
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-89-initial.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-89-step-1.png b/reports/bridge-solid-view-flow-20260915/task-89-step-1.png
new file mode 100644
index 0000000..cbdb170
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-89-step-1.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-89-step-10.png b/reports/bridge-solid-view-flow-20260915/task-89-step-10.png
new file mode 100644
index 0000000..aa61fc7
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-89-step-10.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-89-step-11.png b/reports/bridge-solid-view-flow-20260915/task-89-step-11.png
new file mode 100644
index 0000000..78209d5
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-89-step-11.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-89-step-12.png b/reports/bridge-solid-view-flow-20260915/task-89-step-12.png
new file mode 100644
index 0000000..634b19e
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-89-step-12.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-89-step-13.png b/reports/bridge-solid-view-flow-20260915/task-89-step-13.png
new file mode 100644
index 0000000..288ec61
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-89-step-13.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-89-step-14.png b/reports/bridge-solid-view-flow-20260915/task-89-step-14.png
new file mode 100644
index 0000000..3ff306a
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-89-step-14.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-89-step-15.png b/reports/bridge-solid-view-flow-20260915/task-89-step-15.png
new file mode 100644
index 0000000..e535245
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-89-step-15.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-89-step-16.png b/reports/bridge-solid-view-flow-20260915/task-89-step-16.png
new file mode 100644
index 0000000..dd15258
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-89-step-16.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-89-step-2.png b/reports/bridge-solid-view-flow-20260915/task-89-step-2.png
new file mode 100644
index 0000000..d025d13
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-89-step-2.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-89-step-3.png b/reports/bridge-solid-view-flow-20260915/task-89-step-3.png
new file mode 100644
index 0000000..e5da9ad
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-89-step-3.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-89-step-4.png b/reports/bridge-solid-view-flow-20260915/task-89-step-4.png
new file mode 100644
index 0000000..99adcd8
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-89-step-4.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-89-step-5.png b/reports/bridge-solid-view-flow-20260915/task-89-step-5.png
new file mode 100644
index 0000000..9beebbd
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-89-step-5.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-89-step-6.png b/reports/bridge-solid-view-flow-20260915/task-89-step-6.png
new file mode 100644
index 0000000..23453f6
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-89-step-6.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-89-step-7.png b/reports/bridge-solid-view-flow-20260915/task-89-step-7.png
new file mode 100644
index 0000000..dfd5227
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-89-step-7.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-89-step-8.png b/reports/bridge-solid-view-flow-20260915/task-89-step-8.png
new file mode 100644
index 0000000..532a411
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-89-step-8.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-89-step-9.png b/reports/bridge-solid-view-flow-20260915/task-89-step-9.png
new file mode 100644
index 0000000..62e2685
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-89-step-9.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-89-translucent.png b/reports/bridge-solid-view-flow-20260915/task-89-translucent.png
new file mode 100644
index 0000000..8696604
Binary files /dev/null and b/reports/bridge-solid-view-flow-20260915/task-89-translucent.png differ
diff --git a/reports/bridge-solid-view-flow-20260915/task-89.json b/reports/bridge-solid-view-flow-20260915/task-89.json
new file mode 100644
index 0000000..2657b7d
--- /dev/null
+++ b/reports/bridge-solid-view-flow-20260915/task-89.json
@@ -0,0 +1,1472 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 89 first view",
+ "state": {
+ "id": "bridge-small-cloth",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 18.74530082917896,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 825.346900451233,
+ "y": 494.36864763278925,
+ "localX": 566.346900451233,
+ "localY": 305.86864763278925,
+ "visible": true
+ },
+ "bounds": [
+ 0.3001091125469584,
+ 0.20019644975604534,
+ 0.025263652634544442
+ ],
+ "projected": {
+ "x": 561.946835396814,
+ "y": 300.7632182750632,
+ "w": 8.823313170200777,
+ "h": 10.249360431990738
+ },
+ "pivot": [
+ -2.299399785448256,
+ 1.1078425712343078,
+ 6.251449528772805
+ ],
+ "pickPoints": [
+ {
+ "x": 825.3584919819143,
+ "y": 494.38789849105854
+ },
+ {
+ "x": 824.0349950063843,
+ "y": 494.38789849105854
+ },
+ {
+ "x": 826.6819889574444,
+ "y": 494.38789849105854
+ },
+ {
+ "x": 822.7114980308542,
+ "y": 494.38789849105854
+ },
+ {
+ "x": 828.0054859329746,
+ "y": 494.38789849105854
+ },
+ {
+ "x": 825.3584919819143,
+ "y": 492.85049442625996
+ },
+ {
+ "x": 824.0349950063843,
+ "y": 492.85049442625996
+ },
+ {
+ "x": 826.6819889574444,
+ "y": 492.85049442625996
+ },
+ {
+ "x": 822.7114980308542,
+ "y": 492.85049442625996
+ },
+ {
+ "x": 828.0054859329746,
+ "y": 492.85049442625996
+ },
+ {
+ "x": 825.3584919819143,
+ "y": 495.9253025558572
+ },
+ {
+ "x": 824.0349950063843,
+ "y": 495.9253025558572
+ },
+ {
+ "x": 826.6819889574444,
+ "y": 495.9253025558572
+ },
+ {
+ "x": 822.7114980308542,
+ "y": 495.9253025558572
+ },
+ {
+ "x": 828.0054859329746,
+ "y": 495.9253025558572
+ },
+ {
+ "x": 825.3584919819143,
+ "y": 491.3130903614613
+ },
+ {
+ "x": 824.0349950063843,
+ "y": 491.3130903614613
+ },
+ {
+ "x": 826.6819889574444,
+ "y": 491.3130903614613
+ },
+ {
+ "x": 822.7114980308542,
+ "y": 491.3130903614613
+ },
+ {
+ "x": 825.3584919819143,
+ "y": 497.4627066206558
+ },
+ {
+ "x": 824.0349950063843,
+ "y": 497.4627066206558
+ },
+ {
+ "x": 826.6819889574444,
+ "y": 497.4627066206558
+ },
+ {
+ "x": 828.0054859329746,
+ "y": 497.4627066206558
+ }
+ ],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 0.00006465834627876286,
+ 0.11783665604487886,
+ 0.9930329895383433
+ ],
+ "workflowCoverage": [
+ {
+ "name": "bridge-small-cloth",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-pipe",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-3",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-bolt-4",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-valve",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-plug-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-plug-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-small-seat",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-cloth",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-pipe",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-3",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-bolt-4",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-valve",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-plug-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-plug-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-large-seat",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 10.879297762405727,
+ 7.41203471823875,
+ 15.346405327132661
+ ],
+ "target": [
+ 0.0003545131983222482,
+ 0.9835682527980125,
+ 1.5004775554141494
+ ],
+ "outline": 1,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 0.65,
+ "baseline": 0.65,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 0.65,
+ "baseline": 0.65,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 小腔清洗擦拭布",
+ "x": 755.34375,
+ "y": 515.5,
+ "w": 140,
+ "h": 30,
+ "id": "bridge-small-cloth"
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-small-cloth",
+ "kind": "identify",
+ "directionHint": "清洗并擦净阀体",
+ "effects": [
+ {
+ "targetId": "bridge-small-cloth",
+ "offset": [
+ 0.7,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-small-valve",
+ "color": 8492701
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ -2.3,
+ 1.1,
+ 1.05
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 89 step 1 operation 1",
+ "target": "bridge-small-cloth",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 662.162700899815,
+ "y": 220.45127335325841,
+ "w": 177.6743117037796,
+ "h": 118.2016522464734
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 89 step 2 operation 1",
+ "target": "bridge-small-pipe",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 710.4795096334417,
+ "y": 244.94070098766431,
+ "w": 81.03671734159616,
+ "h": 73.20305790024159
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 2 operation 2",
+ "target": "bridge-small-bag",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 715.995267978146,
+ "y": 236.8246057076068,
+ "w": 70.00581725199777,
+ "h": 88.88604631812535
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 3 operation 1",
+ "target": "bridge-small-bolt-1",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 724.2373402081731,
+ "y": 245.97480088397478,
+ "w": 53.519208051092505,
+ "h": 69.64153818656504
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 89 step 3 operation 2",
+ "target": "bridge-small-bolt-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.2373402081731,
+ "y": 245.97480088397475,
+ "w": 53.519208051092505,
+ "h": 69.64153818656524
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 89 step 3 operation 3",
+ "target": "bridge-small-bolt-3",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.237340208173,
+ "y": 245.97480088397467,
+ "w": 53.51920805109262,
+ "h": 69.64153818656516
+ },
+ "labels": 6
+ },
+ {
+ "name": "task 89 step 3 operation 4",
+ "target": "bridge-small-bolt-4",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 724.2373402081731,
+ "y": 245.97480088397475,
+ "w": 53.519208051092505,
+ "h": 69.64153818656507
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 3 operation 5",
+ "target": "bridge-small-valve",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 692.1892620756336,
+ "y": 244.1715855748232,
+ "w": 117.61970726416473,
+ "h": 74.91825388242052
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 4 operation 1",
+ "target": "bridge-small-plug-1",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 711.8105705216219,
+ "y": 239.84868779146134,
+ "w": 78.37537147823696,
+ "h": 81.51578448801845
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 89 step 4 operation 2",
+ "target": "bridge-small-plug-2",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 711.810570521622,
+ "y": 239.84868779146132,
+ "w": 78.37537147823684,
+ "h": 81.51578448801848
+ },
+ "labels": 8
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-small-seat",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-small-seat",
+ "pass": true
+ },
+ {
+ "name": "task 89 step 4 operation 3",
+ "target": "bridge-small-seat",
+ "drag": false,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 656.0709703650542,
+ "y": 226.20934406509596,
+ "w": 189.8570785543269,
+ "h": 111.3959315865956
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 89 step 5 operation 1",
+ "target": "bridge-large-cloth",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 700.6588638432286,
+ "y": 246.05396216643993,
+ "w": 100.6821099654752,
+ "h": 66.98093627300176
+ },
+ "labels": 6
+ },
+ {
+ "name": "task 89 step 6 operation 1",
+ "target": "bridge-large-pipe",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 710.4795096334416,
+ "y": 244.9407009876643,
+ "w": 81.03671734159627,
+ "h": 73.20305790024162
+ },
+ "labels": 14
+ },
+ {
+ "name": "task 89 step 6 operation 2",
+ "target": "bridge-large-bag",
+ "drag": true,
+ "distance": 2.532200435574363,
+ "projected": {
+ "x": 715.9952679781462,
+ "y": 236.82460570760693,
+ "w": 70.00581725199777,
+ "h": 88.88604631812527
+ },
+ "labels": 15
+ },
+ {
+ "name": "task 89 step 7 operation 1",
+ "target": "bridge-large-bolt-1",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 724.2373402081729,
+ "y": 245.9748008839748,
+ "w": 53.519208051092505,
+ "h": 69.64153818656513
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 89 step 7 operation 2",
+ "target": "bridge-large-bolt-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.237340208173,
+ "y": 245.97480088397478,
+ "w": 53.51920805109262,
+ "h": 69.64153818656516
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 89 step 7 operation 3",
+ "target": "bridge-large-bolt-3",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.2373402081732,
+ "y": 245.97480088397472,
+ "w": 53.519208051092505,
+ "h": 69.6415381865651
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 89 step 7 operation 4",
+ "target": "bridge-large-bolt-4",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 724.2373402081731,
+ "y": 245.97480088397475,
+ "w": 53.519208051092505,
+ "h": 69.64153818656507
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 7 operation 5",
+ "target": "bridge-large-valve",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 692.1892620756337,
+ "y": 244.17158557482324,
+ "w": 117.61970726416462,
+ "h": 74.91825388242054
+ },
+ "labels": 17
+ },
+ {
+ "name": "task 89 step 8 operation 1",
+ "target": "bridge-large-plug-1",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 711.810570521622,
+ "y": 239.84868779146146,
+ "w": 78.37537147823684,
+ "h": 81.5157844880184
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 8 operation 2",
+ "target": "bridge-large-plug-2",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 711.8105705216219,
+ "y": 239.84868779146137,
+ "w": 78.37537147823684,
+ "h": 81.51578448801843
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-large-seat",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-large-seat",
+ "pass": true
+ },
+ {
+ "name": "task 89 step 8 operation 3",
+ "target": "bridge-large-seat",
+ "drag": false,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 656.0709703650542,
+ "y": 226.20934406509593,
+ "w": 189.8570785543268,
+ "h": 111.39593158659557
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-large-seat",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-large-seat",
+ "pass": true
+ },
+ {
+ "name": "task 89 step 9 operation 1",
+ "target": "bridge-large-seat",
+ "drag": false,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 656.0709703650542,
+ "y": 226.20934406509593,
+ "w": 189.8570785543268,
+ "h": 111.39593158659557
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-large-plug-1",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-large-plug-1",
+ "pass": true
+ },
+ {
+ "name": "task 89 step 9 operation 2",
+ "target": "bridge-large-plug-1",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 681.8421832734501,
+ "y": 209.50078916211987,
+ "w": 138.30947907924178,
+ "h": 143.85138439062086
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-large-plug-2",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-large-plug-2",
+ "pass": true
+ },
+ {
+ "name": "task 89 step 9 operation 3",
+ "target": "bridge-large-plug-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 681.8421832734504,
+ "y": 209.5007891621197,
+ "w": 138.30947907924167,
+ "h": 143.85138439062092
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 89 step 10 operation 1",
+ "target": "bridge-small-valve",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 692.1892620756336,
+ "y": 244.17158557482327,
+ "w": 117.61970726416473,
+ "h": 74.91825388242052
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-large-bolt-1",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-large-bolt-1",
+ "pass": true
+ },
+ {
+ "name": "task 89 step 10 operation 2",
+ "target": "bridge-large-bolt-1",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 703.7717768379523,
+ "y": 220.31157697243765,
+ "w": 94.44566126663415,
+ "h": 122.89683209393837
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-large-bolt-2",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-large-bolt-2",
+ "pass": true
+ },
+ {
+ "name": "task 89 step 10 operation 3",
+ "target": "bridge-large-bolt-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 703.7717768379525,
+ "y": 220.31157697243754,
+ "w": 94.44566126663392,
+ "h": 122.89683209393826
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-large-bolt-3",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-large-bolt-3",
+ "pass": true
+ },
+ {
+ "name": "task 89 step 10 operation 4",
+ "target": "bridge-large-bolt-3",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 703.7717768379522,
+ "y": 220.3115769724374,
+ "w": 94.44566126663403,
+ "h": 122.89683209393851
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-large-bolt-4",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-large-bolt-4",
+ "pass": true
+ },
+ {
+ "name": "task 89 step 10 operation 5",
+ "target": "bridge-large-bolt-4",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 703.771776837952,
+ "y": 220.31157697243756,
+ "w": 94.44566126663426,
+ "h": 122.89683209393846
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 89 step 11 observation retained for instructor review",
+ "pass": true
+ },
+ {
+ "name": "task 89 step 11 operation 1",
+ "target": "bridge-large-bag",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 715.9952679781461,
+ "y": 236.82460570760685,
+ "w": 70.00581725199766,
+ "h": 88.88604631812524
+ },
+ "labels": 13
+ },
+ {
+ "name": "task 89 step 11 operation 2",
+ "target": "bridge-large-pipe",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 710.4795096334415,
+ "y": 244.9407009876643,
+ "w": 81.03671734159627,
+ "h": 73.20305790024156
+ },
+ "labels": 14
+ },
+ {
+ "name": "task 89 step 12 operation 1",
+ "target": "bridge-large-bolt-1",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 724.237340208173,
+ "y": 245.9748008839748,
+ "w": 53.519208051092505,
+ "h": 69.64153818656513
+ },
+ "labels": 2
+ },
+ {
+ "name": "task 89 step 12 operation 2",
+ "target": "bridge-large-bolt-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.237340208173,
+ "y": 245.97480088397478,
+ "w": 53.51920805109262,
+ "h": 69.64153818656516
+ },
+ "labels": 6
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-large-bolt-3",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-large-bolt-3",
+ "pass": true
+ },
+ {
+ "name": "task 89 step 12 operation 3",
+ "target": "bridge-large-bolt-3",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 703.7717768379526,
+ "y": 220.31157697243754,
+ "w": 94.44566126663358,
+ "h": 122.89683209393849
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 89 explicit isolate for overlapping workflow targets",
+ "targetId": "bridge-large-bolt-4",
+ "pass": true
+ },
+ {
+ "name": "task 89 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-large-bolt-4",
+ "pass": true
+ },
+ {
+ "name": "task 89 step 12 operation 4",
+ "target": "bridge-large-bolt-4",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 703.7717768379525,
+ "y": 220.31157697243742,
+ "w": 94.44566126663369,
+ "h": 122.89683209393837
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 89 step 13 operation 1",
+ "target": "bridge-small-seat",
+ "drag": false,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 682.6054469852947,
+ "y": 241.11471592167288,
+ "w": 136.7883994425748,
+ "h": 80.25864140632916
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 89 step 13 operation 2",
+ "target": "bridge-small-plug-1",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 711.810570521622,
+ "y": 239.84868779146134,
+ "w": 78.37537147823684,
+ "h": 81.5157844880184
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 89 step 13 operation 3",
+ "target": "bridge-small-plug-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 711.8105705216219,
+ "y": 239.8486877914614,
+ "w": 78.37537147823684,
+ "h": 81.51578448801845
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 14 operation 1",
+ "target": "bridge-large-valve",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 692.1892620756337,
+ "y": 244.17158557482327,
+ "w": 117.61970726416462,
+ "h": 74.91825388242046
+ },
+ "labels": 17
+ },
+ {
+ "name": "task 89 step 14 operation 2",
+ "target": "bridge-small-bolt-1",
+ "drag": true,
+ "distance": 2.53220043557436,
+ "projected": {
+ "x": 724.2373402081729,
+ "y": 245.97480088397467,
+ "w": 53.51920805109273,
+ "h": 69.6415381865651
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 89 step 14 operation 3",
+ "target": "bridge-small-bolt-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.2373402081729,
+ "y": 245.97480088397467,
+ "w": 53.519208051092846,
+ "h": 69.6415381865651
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 14 operation 4",
+ "target": "bridge-small-bolt-3",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.237340208173,
+ "y": 245.97480088397464,
+ "w": 53.51920805109262,
+ "h": 69.64153818656519
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 89 step 14 operation 5",
+ "target": "bridge-small-bolt-4",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.237340208173,
+ "y": 245.97480088397472,
+ "w": 53.51920805109273,
+ "h": 69.64153818656521
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 89 step 15 observation retained for instructor review",
+ "pass": true
+ },
+ {
+ "name": "task 89 step 15 operation 1",
+ "target": "bridge-small-bag",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 715.9952679781461,
+ "y": 236.82460570760682,
+ "w": 70.00581725199766,
+ "h": 88.88604631812532
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 89 step 15 operation 2",
+ "target": "bridge-small-pipe",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 710.4795096334416,
+ "y": 244.94070098766431,
+ "w": 81.03671734159627,
+ "h": 73.20305790024159
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 89 step 16 operation 1",
+ "target": "bridge-small-bolt-1",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 724.237340208173,
+ "y": 245.97480088397478,
+ "w": 53.519208051092505,
+ "h": 69.64153818656504
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 89 step 16 operation 2",
+ "target": "bridge-small-bolt-2",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.237340208173,
+ "y": 245.9748008839746,
+ "w": 53.51920805109262,
+ "h": 69.64153818656516
+ },
+ "labels": 6
+ },
+ {
+ "name": "task 89 step 16 operation 3",
+ "target": "bridge-small-bolt-3",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 724.237340208173,
+ "y": 245.97480088397467,
+ "w": 53.51920805109262,
+ "h": 69.64153818656516
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 89 step 16 operation 4",
+ "target": "bridge-small-bolt-4",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 724.2373402081731,
+ "y": 245.9748008839748,
+ "w": 53.519208051092505,
+ "h": 69.64153818656513
+ },
+ "labels": 9
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/89/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-solid-view-flow-20260915/tasks-87-88.json b/reports/bridge-solid-view-flow-20260915/tasks-87-88.json
new file mode 100644
index 0000000..429fb53
--- /dev/null
+++ b/reports/bridge-solid-view-flow-20260915/tasks-87-88.json
@@ -0,0 +1,1628 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "name": "task 87 first view",
+ "state": {
+ "id": "bridge-engine",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 18.74530082917896,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 802.1258271375215,
+ "y": 489.1311049751384,
+ "localX": 543.1258271375215,
+ "localY": 300.6311049751384,
+ "visible": true
+ },
+ "bounds": [
+ 0.3501201177055142,
+ 0.29044535054327036,
+ 0.7553749591221814
+ ],
+ "projected": {
+ "x": 525.8451092307747,
+ "y": 289.8747758906051,
+ "w": 34.09957427464701,
+ "h": 21.94543461410774
+ },
+ "pivot": [
+ -2.999317882937463,
+ 1.2580267211289828,
+ 6.401647324786939
+ ],
+ "pickPoints": [
+ {
+ "x": 801.8948963680982,
+ "y": 489.347493197659
+ },
+ {
+ "x": 796.7799602269012,
+ "y": 489.347493197659
+ },
+ {
+ "x": 807.0098325092953,
+ "y": 489.347493197659
+ },
+ {
+ "x": 812.1247686504923,
+ "y": 489.347493197659
+ },
+ {
+ "x": 801.8948963680982,
+ "y": 486.0556780055428
+ },
+ {
+ "x": 796.7799602269012,
+ "y": 486.0556780055428
+ },
+ {
+ "x": 807.0098325092953,
+ "y": 486.0556780055428
+ },
+ {
+ "x": 812.1247686504923,
+ "y": 486.0556780055428
+ },
+ {
+ "x": 801.8948963680982,
+ "y": 492.6393083897751
+ },
+ {
+ "x": 796.7799602269012,
+ "y": 492.6393083897751
+ },
+ {
+ "x": 807.0098325092953,
+ "y": 492.6393083897751
+ },
+ {
+ "x": 812.1247686504923,
+ "y": 492.6393083897751
+ },
+ {
+ "x": 801.8948963680982,
+ "y": 495.9311235818913
+ }
+ ],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 0.0003647744232217721,
+ 0.6679845154427327,
+ 0.7441750829397326
+ ],
+ "workflowCoverage": [
+ {
+ "name": "bridge-engine",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-pto-switch",
+ "glowing": true
+ },
+ {
+ "name": "bridge-hose-a",
+ "glowing": true
+ },
+ {
+ "name": "bridge-hose-b",
+ "glowing": true
+ },
+ {
+ "name": "bridge-return-valve",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-aux-control-box-cover",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-rescue-switch",
+ "glowing": true
+ },
+ {
+ "name": "front-pump-ball-valve-switch",
+ "glowing": true
+ },
+ {
+ "name": "bridge-support-pto",
+ "glowing": true
+ },
+ {
+ "name": "bridge-supply",
+ "glowing": true
+ },
+ {
+ "name": "bridge-normal-control",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 10.879297762405727,
+ 7.41203471823875,
+ 15.346405327132661
+ ],
+ "target": [
+ 0.0003545131983222482,
+ 0.9835682527980125,
+ 1.5004775554141494
+ ],
+ "outline": 3,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 架桥车发动机控制(示意)",
+ "x": 701.890625,
+ "y": 516.3125,
+ "w": 200,
+ "h": 30,
+ "id": "bridge-engine"
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "保持架桥车发动机运行",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 2209160
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ -3,
+ 1.1,
+ 1.2
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 87 step 1 operation 1",
+ "target": "bridge-engine",
+ "drag": false,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 701.463480141453,
+ "y": 198.81442547361482,
+ "w": 98.97130801230662,
+ "h": 174.09916086513002
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 87 internal target inspected with explicit translucent tool",
+ "targetId": "front-pump-pto-switch",
+ "pass": true
+ },
+ {
+ "name": "task 87 step 1 operation 2",
+ "target": "front-pump-pto-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 709.0006218750913,
+ "y": 263.03238137674134,
+ "w": 83.99875624981757,
+ "h": 33.023591730971475
+ },
+ "labels": 1
+ },
+ {
+ "name": "task 87 step 2 operation 1",
+ "target": "bridge-hose-a",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 726.492836293097,
+ "y": 227.43836323869513,
+ "w": 49.01165952027122,
+ "h": 107.61496519436363
+ },
+ "labels": 8
+ },
+ {
+ "name": "task 87 step 2 operation 2",
+ "target": "bridge-hose-b",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 726.492836293097,
+ "y": 227.4383632386951,
+ "w": 49.01165952027122,
+ "h": 107.61496519436366
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 87 step 3 operation 1",
+ "target": "bridge-return-valve",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 722.9293054134898,
+ "y": 233.7930817013087,
+ "w": 56.083741206973855,
+ "h": 98.656191156907
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 87 step 4 operation 1",
+ "target": "front-pump-aux-control-box-cover",
+ "drag": true,
+ "distance": 2.5322004355743615,
+ "projected": {
+ "x": 699.1228274926345,
+ "y": 249.20856621891878,
+ "w": 103.75434501473103,
+ "h": 60.65167032951709
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 4 operation 2",
+ "target": "front-pump-rescue-switch",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 748.0136091802624,
+ "y": 276.397277651574,
+ "w": 5.972781639476352,
+ "h": 6.274247464206724
+ },
+ "labels": 0
+ },
+ {
+ "name": "task 87 step 5 operation 1",
+ "target": "front-pump-ball-valve-switch",
+ "drag": true,
+ "distance": 2.53220043557436,
+ "projected": {
+ "x": 742.951502862234,
+ "y": 259.69721416379804,
+ "w": 16.09699427552971,
+ "h": 40.44894573262036
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 87 step 6 operation 1",
+ "target": "bridge-support-pto",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 722.92930541349,
+ "y": 233.79308170130878,
+ "w": 56.08374120697363,
+ "h": 98.65619115690691
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 87 step 6 operation 2",
+ "target": "bridge-supply",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 722.9293054134898,
+ "y": 233.7930817013088,
+ "w": 56.083741206973855,
+ "h": 98.65619115690711
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 87 step 7 operation 1",
+ "target": "bridge-normal-control",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 722.9293054134898,
+ "y": 233.79308170130872,
+ "w": 56.083741206973855,
+ "h": 98.65619115690697
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 88 first view",
+ "state": {
+ "id": "bridge-engine",
+ "step": 0,
+ "operation": 0,
+ "errors": 0,
+ "complete": false,
+ "pending": false,
+ "hdr": "venice_sunset_1k",
+ "distance": 12.042465133634778,
+ "zoom": 1,
+ "exposure": 1,
+ "light": [
+ 0.8,
+ 1.4
+ ],
+ "screen": {
+ "x": 913.4102219920421,
+ "y": 511.3825199485665,
+ "localX": 654.4102219920421,
+ "localY": 322.8825199485665,
+ "visible": true
+ },
+ "bounds": [
+ 0.062756887345643,
+ 0.051998564459097896,
+ 0.13537557144211787
+ ],
+ "projected": {
+ "x": 650.2204266738713,
+ "y": 319.83560990970796,
+ "w": 8.349220606546169,
+ "h": 6.126281661357268
+ },
+ "pivot": [
+ -0.6660927457083943,
+ 0.5878027287808987,
+ 1.861848146330254
+ ],
+ "pickPoints": [],
+ "freePoints": [],
+ "tip": null,
+ "front": [
+ 0,
+ 0.6689647316224496,
+ 0.7432941462471662
+ ],
+ "workflowCoverage": [
+ {
+ "name": "bridge-engine",
+ "glowing": true
+ },
+ {
+ "name": "bridge-paper",
+ "glowing": true
+ },
+ {
+ "name": "bridge-tank-valve",
+ "glowing": true
+ },
+ {
+ "name": "bridge-inlet",
+ "glowing": true
+ },
+ {
+ "name": "bridge-inlet-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-outlet",
+ "glowing": true
+ },
+ {
+ "name": "bridge-outlet-bag",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-1",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-2",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-3",
+ "glowing": true
+ },
+ {
+ "name": "bridge-pump-bolt-4",
+ "glowing": true
+ },
+ {
+ "name": "bridge-old-pump",
+ "glowing": true
+ },
+ {
+ "name": "bridge-new-pump",
+ "glowing": true
+ },
+ {
+ "name": "bridge-fill-cap",
+ "glowing": true
+ },
+ {
+ "name": "bridge-oil-can",
+ "glowing": true
+ },
+ {
+ "name": "bridge-test-control",
+ "glowing": true
+ }
+ ],
+ "camera": [
+ 6.988913966397507,
+ 5.113381051123811,
+ 8.894981411778645
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "outline": 3,
+ "cutaway": 0,
+ "materials": [
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 0.65,
+ "baseline": 0.65,
+ "side": 2
+ },
+ {
+ "opacity": 0.65,
+ "baseline": 0.65,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ },
+ {
+ "opacity": 1,
+ "baseline": 1,
+ "side": 2
+ }
+ ],
+ "labels": [
+ {
+ "text": "聚焦 · 架桥车发动机控制(示意)",
+ "x": 813.390625,
+ "y": 530.453125,
+ "w": 200,
+ "h": 30,
+ "id": "bridge-engine"
+ }
+ ],
+ "operationData": {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "关闭架桥车发动机",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 13195851
+ }
+ ],
+ "index": 0,
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 0,
+ "toleranceDegrees": 6
+ },
+ "position": [
+ -3,
+ 1.1,
+ 1.2
+ ],
+ "quaternion": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "task 88 internal target inspected with explicit translucent tool",
+ "targetId": "bridge-engine",
+ "pass": true
+ },
+ {
+ "name": "task 88 step 1 operation 1",
+ "target": "bridge-engine",
+ "drag": false,
+ "distance": 2.53220043557436,
+ "projected": {
+ "x": 707.73588542338,
+ "y": 194.03143956830726,
+ "w": 86.52822915324009,
+ "h": 173.25833164231446
+ },
+ "labels": 3
+ },
+ {
+ "name": "task 88 step 1 operation 2",
+ "target": "bridge-paper",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 707.4690865023292,
+ "y": 250.93173490352874,
+ "w": 87.06182699534145,
+ "h": 58.55758060570318
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 88 step 2 operation 1",
+ "target": "bridge-tank-valve",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 726.4836684065816,
+ "y": 231.08272302163462,
+ "w": 49.03266318683609,
+ "h": 98.179721263978
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 88 step 3 operation 1",
+ "target": "bridge-inlet",
+ "drag": true,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 709.0457933757752,
+ "y": 241.8513175506897,
+ "w": 83.90841324844962,
+ "h": 76.2012614843099
+ },
+ "labels": 12
+ },
+ {
+ "name": "task 88 step 3 operation 2",
+ "target": "bridge-inlet-bag",
+ "drag": true,
+ "distance": 2.5322004355743624,
+ "projected": {
+ "x": 717.582219650757,
+ "y": 235.44052399348558,
+ "w": 66.83556069848669,
+ "h": 88.8058672469484
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 88 step 3 operation 3",
+ "target": "bridge-outlet",
+ "drag": true,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 709.0457933757751,
+ "y": 241.8513175506897,
+ "w": 83.90841324844973,
+ "h": 76.2012614843099
+ },
+ "labels": 12
+ },
+ {
+ "name": "task 88 step 3 operation 4",
+ "target": "bridge-outlet-bag",
+ "drag": true,
+ "distance": 2.5322004355743712,
+ "projected": {
+ "x": 717.5822196507568,
+ "y": 235.44052399348567,
+ "w": 66.83556069848635,
+ "h": 88.80586724694814
+ },
+ "labels": 8
+ },
+ {
+ "name": "task 88 step 4 operation 1",
+ "target": "bridge-pump-bolt-1",
+ "drag": true,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 736.6006671619051,
+ "y": 263.37928348130146,
+ "w": 28.798665676189785,
+ "h": 32.40406238614611
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 88 step 4 operation 2",
+ "target": "bridge-pump-bolt-2",
+ "drag": true,
+ "distance": 2.5322004355743712,
+ "projected": {
+ "x": 736.6006671619051,
+ "y": 263.3792834813013,
+ "w": 28.79866567618967,
+ "h": 32.40406238614611
+ },
+ "labels": 8
+ },
+ {
+ "name": "task 88 step 4 operation 3",
+ "target": "bridge-pump-bolt-3",
+ "drag": true,
+ "distance": 2.5322004355743712,
+ "projected": {
+ "x": 736.6006671463118,
+ "y": 263.3792815395063,
+ "w": 28.798665707376585,
+ "h": 32.404066314038914
+ },
+ "labels": 8
+ },
+ {
+ "name": "task 88 step 4 operation 4",
+ "target": "bridge-pump-bolt-4",
+ "drag": true,
+ "distance": 2.5322004355743712,
+ "projected": {
+ "x": 736.600667161451,
+ "y": 263.3792821577108,
+ "w": 28.79866567709803,
+ "h": 32.40406503999304
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 88 step 5 operation 1",
+ "target": "bridge-old-pump",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 724.9323365980705,
+ "y": 244.73479638293182,
+ "w": 52.13532680385913,
+ "h": 72.15967433583043
+ },
+ "labels": 14
+ },
+ {
+ "name": "task 88 step 6 operation 1",
+ "target": "bridge-paper",
+ "drag": false,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 707.6302239970034,
+ "y": 250.6825519412415,
+ "w": 86.73955200599278,
+ "h": 58.853694467408616
+ },
+ "labels": 10
+ },
+ {
+ "name": "task 88 step 7 operation 1",
+ "target": "bridge-gasket",
+ "drag": true,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 708.3666200322472,
+ "y": 237.24441477489736,
+ "w": 85.26675993550543,
+ "h": 84.28133006446657
+ },
+ "labels": 11
+ },
+ {
+ "name": "task 88 step 8 operation 1",
+ "target": "bridge-new-pump",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 724.9323365980705,
+ "y": 244.73479638293182,
+ "w": 52.13532680385913,
+ "h": 72.15967433583043
+ },
+ "labels": 15
+ },
+ {
+ "name": "task 88 step 8 operation 2",
+ "target": "bridge-pump-bolt-1",
+ "drag": true,
+ "distance": 2.532200435574362,
+ "projected": {
+ "x": 736.6006671619051,
+ "y": 263.37928348130134,
+ "w": 28.798665676189785,
+ "h": 32.40406238614622
+ },
+ "labels": 4
+ },
+ {
+ "name": "task 88 step 8 operation 3",
+ "target": "bridge-pump-bolt-2",
+ "drag": true,
+ "distance": 2.5322004355743712,
+ "projected": {
+ "x": 736.6006671619052,
+ "y": 263.3792834813014,
+ "w": 28.79866567618967,
+ "h": 32.40406238614611
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 88 step 8 operation 4",
+ "target": "bridge-pump-bolt-3",
+ "drag": true,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 736.6006671463116,
+ "y": 263.37928153950617,
+ "w": 28.798665707376927,
+ "h": 32.404066314039085
+ },
+ "labels": 6
+ },
+ {
+ "name": "task 88 step 8 operation 5",
+ "target": "bridge-pump-bolt-4",
+ "drag": true,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 736.6006671614508,
+ "y": 263.37928215771063,
+ "w": 28.798665677098256,
+ "h": 32.40406503999327
+ },
+ "labels": 9
+ },
+ {
+ "name": "task 88 step 9 operation 1",
+ "target": "bridge-fill-cap",
+ "drag": true,
+ "distance": 2.5322004355743615,
+ "projected": {
+ "x": 709.6431583630005,
+ "y": 238.41041534361207,
+ "w": 82.71368327399898,
+ "h": 81.95895256969274
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 88 step 9 operation 2",
+ "target": "bridge-oil-can",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 719.4577385700463,
+ "y": 228.82028362710247,
+ "w": 63.08452285990734,
+ "h": 101.02942636902065
+ },
+ "labels": 12
+ },
+ {
+ "name": "task 88 step 10 operation 1",
+ "target": "bridge-inlet-bag",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 717.5822196507567,
+ "y": 235.4405239934855,
+ "w": 66.83556069848669,
+ "h": 88.80586724694848
+ },
+ "labels": 7
+ },
+ {
+ "name": "task 88 step 10 operation 2",
+ "target": "bridge-inlet",
+ "drag": true,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 709.0457933757751,
+ "y": 241.8513175506897,
+ "w": 83.90841324844973,
+ "h": 76.2012614843099
+ },
+ "labels": 8
+ },
+ {
+ "name": "task 88 step 10 operation 3",
+ "target": "bridge-outlet-bag",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 717.5822196507567,
+ "y": 235.4405239934855,
+ "w": 66.8355606984868,
+ "h": 88.80586724694848
+ },
+ "labels": 12
+ },
+ {
+ "name": "task 88 step 10 operation 4",
+ "target": "bridge-outlet",
+ "drag": true,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 709.0457933757751,
+ "y": 241.8513175506898,
+ "w": 83.90841324844973,
+ "h": 76.20126148430987
+ },
+ "labels": 15
+ },
+ {
+ "name": "task 88 step 11 operation 1",
+ "target": "bridge-engine",
+ "drag": false,
+ "distance": 2.5322004355743606,
+ "projected": {
+ "x": 726.4836684065818,
+ "y": 231.08272302163485,
+ "w": 49.0326631868362,
+ "h": 98.179721263978
+ },
+ "labels": 5
+ },
+ {
+ "name": "task 88 step 11 operation 2",
+ "target": "bridge-test-control",
+ "drag": true,
+ "distance": 2.532200435574361,
+ "projected": {
+ "x": 726.4836684065812,
+ "y": 231.0827230216337,
+ "w": 49.032663186835975,
+ "h": 98.17972126397811
+ },
+ "labels": 13
+ }
+ ],
+ "errors": [],
+ "writes": [
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/87/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate",
+ "http://127.0.0.1:6180/api/tran/v1/teaching/assignments/88/preview/validate"
+ ]
+}
\ No newline at end of file
diff --git a/reports/bridge-solid-view-lan-20260915/result.json b/reports/bridge-solid-view-lan-20260915/result.json
new file mode 100644
index 0000000..1f80d20
--- /dev/null
+++ b/reports/bridge-solid-view-lan-20260915/result.json
@@ -0,0 +1,20 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "id": "86",
+ "name": "focus keeps every previously visible mesh",
+ "before": 41,
+ "after": 41,
+ "automaticHidden": 0
+ },
+ {
+ "id": "86",
+ "name": "three orbit directions, glow, explicit opacity/hide and restore",
+ "pass": true,
+ "meshes": 41
+ }
+ ],
+ "errors": [],
+ "writes": []
+}
\ No newline at end of file
diff --git a/reports/bridge-solid-view-lan-20260915/task-86-focused.png b/reports/bridge-solid-view-lan-20260915/task-86-focused.png
new file mode 100644
index 0000000..8b5e427
Binary files /dev/null and b/reports/bridge-solid-view-lan-20260915/task-86-focused.png differ
diff --git a/reports/bridge-solid-view-lan-20260915/task-86-orbit-1.png b/reports/bridge-solid-view-lan-20260915/task-86-orbit-1.png
new file mode 100644
index 0000000..ca2a08e
Binary files /dev/null and b/reports/bridge-solid-view-lan-20260915/task-86-orbit-1.png differ
diff --git a/reports/bridge-solid-view-lan-20260915/task-86-orbit-2.png b/reports/bridge-solid-view-lan-20260915/task-86-orbit-2.png
new file mode 100644
index 0000000..484a6b2
Binary files /dev/null and b/reports/bridge-solid-view-lan-20260915/task-86-orbit-2.png differ
diff --git a/reports/bridge-solid-view-lan-20260915/task-86-orbit-3.png b/reports/bridge-solid-view-lan-20260915/task-86-orbit-3.png
new file mode 100644
index 0000000..c1e8b49
Binary files /dev/null and b/reports/bridge-solid-view-lan-20260915/task-86-orbit-3.png differ
diff --git a/reports/bridge-solid-view-lan-20260915/task-86-restored.png b/reports/bridge-solid-view-lan-20260915/task-86-restored.png
new file mode 100644
index 0000000..1f0647e
Binary files /dev/null and b/reports/bridge-solid-view-lan-20260915/task-86-restored.png differ
diff --git a/reports/bridge-task-covers-20260915/TASK-VIRTUAL-005-scene.jpg b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-005-scene.jpg
new file mode 100644
index 0000000..3b83ea7
Binary files /dev/null and b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-005-scene.jpg differ
diff --git a/reports/bridge-task-covers-20260915/TASK-VIRTUAL-005-scene.png b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-005-scene.png
new file mode 100644
index 0000000..2a16ade
Binary files /dev/null and b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-005-scene.png differ
diff --git a/reports/bridge-task-covers-20260915/TASK-VIRTUAL-005-workspace.png b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-005-workspace.png
new file mode 100644
index 0000000..6fe21f2
Binary files /dev/null and b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-005-workspace.png differ
diff --git a/reports/bridge-task-covers-20260915/TASK-VIRTUAL-006-scene.jpg b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-006-scene.jpg
new file mode 100644
index 0000000..58bea60
Binary files /dev/null and b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-006-scene.jpg differ
diff --git a/reports/bridge-task-covers-20260915/TASK-VIRTUAL-006-scene.png b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-006-scene.png
new file mode 100644
index 0000000..1474398
Binary files /dev/null and b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-006-scene.png differ
diff --git a/reports/bridge-task-covers-20260915/TASK-VIRTUAL-006-workspace.png b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-006-workspace.png
new file mode 100644
index 0000000..67010c2
Binary files /dev/null and b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-006-workspace.png differ
diff --git a/reports/bridge-task-covers-20260915/TASK-VIRTUAL-007-scene.jpg b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-007-scene.jpg
new file mode 100644
index 0000000..ea2620e
Binary files /dev/null and b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-007-scene.jpg differ
diff --git a/reports/bridge-task-covers-20260915/TASK-VIRTUAL-007-scene.png b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-007-scene.png
new file mode 100644
index 0000000..b7592f7
Binary files /dev/null and b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-007-scene.png differ
diff --git a/reports/bridge-task-covers-20260915/TASK-VIRTUAL-007-workspace.png b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-007-workspace.png
new file mode 100644
index 0000000..23a509c
Binary files /dev/null and b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-007-workspace.png differ
diff --git a/reports/bridge-task-covers-20260915/TASK-VIRTUAL-008-scene.jpg b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-008-scene.jpg
new file mode 100644
index 0000000..e9202f4
Binary files /dev/null and b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-008-scene.jpg differ
diff --git a/reports/bridge-task-covers-20260915/TASK-VIRTUAL-008-scene.png b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-008-scene.png
new file mode 100644
index 0000000..da964fe
Binary files /dev/null and b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-008-scene.png differ
diff --git a/reports/bridge-task-covers-20260915/TASK-VIRTUAL-008-workspace.png b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-008-workspace.png
new file mode 100644
index 0000000..1b3c06d
Binary files /dev/null and b/reports/bridge-task-covers-20260915/TASK-VIRTUAL-008-workspace.png differ
diff --git a/reports/bridge-task-covers-20260915/VALIDATION.md b/reports/bridge-task-covers-20260915/VALIDATION.md
new file mode 100644
index 0000000..c77ba1c
--- /dev/null
+++ b/reports/bridge-task-covers-20260915/VALIDATION.md
@@ -0,0 +1,19 @@
+# 场景封面验证
+
+- `pnpm run build`:通过,包含 TypeScript 检查和构建后模型资源核验;存在既有大分块提示。
+- `node scripts/virtual-training-formal-route.contract.test.mjs`:通过。
+- `node tools/bridge-task-cover-verify.mjs`(`LAN_URL=http://192.168.31.168:6180`):通过。本机与局域网共 8 次图片加载,验证四个独立封面路径、1200 × 1000 尺寸、HTTP 字节与本地一致,以及 1920/1440 宽度页面。
+- 四张最终 JPG 共 579677 字节,`public` 与 `dist` 文件逐字节一致。007 使用新的 `bridge-pump-replace-v3-overview.jpg` 路径,避免沿用旧透明近景封面缓存。
+- 使用维护账号只读浏览;页面验证没有任何教学业务写入或遗留测试任务。
+
+## 既有检查问题
+
+`node scripts/list-cover-contract.test.mjs` 未通过:第 42 行仍要求模型/场景行缩略图为 3:1,当前 `ContentProjectsView.vue` 已为 16:9。
+对 `git show HEAD:src/views/content/ContentProjectsView.vue` 执行同一断言也为 false,证明此项在本次修改前已经不满足。
+本次没有修改该内容制作页面或放宽其测试,四张新封面另由实际浏览器和 HTTP 资源验证。
+
+## 取景说明
+
+取景工具只在专用浏览器的开发模块响应中加入相机控制,按原脚本动作设置动画姿态。发布定义、任务版本、训练记录与成绩均不改变。
+005 第 5 步、006 第 6 步、008 第 3 步动作后的姿态用于封面;并非用户已经执行到这些步骤。007 已重新取景,使用开场整车视角,保留正常材质和完整环境。
+006、008 的工位是已有补充操作示意,007 泵体与安装螺栓是原模型部件。
diff --git a/reports/bridge-task-covers-20260915/frames.json b/reports/bridge-task-covers-20260915/frames.json
new file mode 100644
index 0000000..db64f50
--- /dev/null
+++ b/reports/bridge-task-covers-20260915/frames.json
@@ -0,0 +1,2391 @@
+[
+ {
+ "code": "TASK-VIRTUAL-005",
+ "name": "重型支援桥液压泵应急切换",
+ "taskId": "86",
+ "contentVersionId": "533",
+ "vehicle": {
+ "min": [
+ -0.9185929777866628,
+ -2.672506549394882e-9,
+ -4
+ ],
+ "max": [
+ 0.918592977786663,
+ 1.9671365082685308,
+ 4
+ ],
+ "center": [
+ 1.1102230246251565e-16,
+ 0.9835682527980121,
+ 0
+ ],
+ "size": [
+ 1.8371859555733259,
+ 1.9671365109410375,
+ 8
+ ]
+ },
+ "workshop": null,
+ "parts": [
+ {
+ "id": "front-pump-hydraulic-pump",
+ "name": "1液压泵",
+ "bounds": {
+ "min": [
+ -0.18285168189173207,
+ 0.5470110749761625,
+ 1.5480637042583225
+ ],
+ "max": [
+ -0.07350143670700487,
+ 0.6823860012265371,
+ 1.7452996392749651
+ ],
+ "center": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "size": [
+ 0.10935024518472719,
+ 0.13537492625037462,
+ 0.1972359350166426
+ ]
+ }
+ },
+ {
+ "id": "front-pump-power-take-off",
+ "name": "2取力器",
+ "bounds": {
+ "min": [
+ 0.28591953751410293,
+ 0.8004144888458099,
+ 3.3268872852958875
+ ],
+ "max": [
+ 0.49275256932594524,
+ 0.8743410502855345,
+ 3.461711959378971
+ ],
+ "center": [
+ 0.3893360534200241,
+ 0.8373777695656722,
+ 3.3942996223374293
+ ],
+ "size": [
+ 0.20683303181184232,
+ 0.07392656143972465,
+ 0.13482467408308363
+ ]
+ }
+ },
+ {
+ "id": "front-pump-pto-switch",
+ "name": "2取力器开关",
+ "bounds": {
+ "min": [
+ 0.23976173223624084,
+ 0.653700600552082,
+ 3.1673047521869897
+ ],
+ "max": [
+ 0.6397617248237526,
+ 1.0537005931395937,
+ 3.5673047447745017
+ ],
+ "center": [
+ 0.43976172852999673,
+ 0.8537005968458379,
+ 3.3673047484807457
+ ],
+ "size": [
+ 0.39999999258751173,
+ 0.39999999258751173,
+ 0.39999999258751195
+ ]
+ }
+ },
+ {
+ "id": "front-pump-ball-valve-switch",
+ "name": "3球阀开关",
+ "bounds": {
+ "min": [
+ 0.45091461395409094,
+ 0.7391242092456413,
+ -0.1493838572980378
+ ],
+ "max": [
+ 0.8509146065416027,
+ 1.139124201833153,
+ 0.250616135289474
+ ],
+ "center": [
+ 0.6509146102478468,
+ 0.9391242055393971,
+ 0.05061613899571811
+ ],
+ "size": [
+ 0.39999999258751173,
+ 0.39999999258751184,
+ 0.39999999258751184
+ ]
+ }
+ },
+ {
+ "id": "front-pump-aux-control-box",
+ "name": "5辅助控制盒",
+ "bounds": {
+ "min": [
+ -0.5503767990155324,
+ 0.810865569147408,
+ 0.3835028235835577
+ ],
+ "max": [
+ -0.5161800847621736,
+ 0.9230974098761625,
+ 0.5774436110707437
+ ],
+ "center": [
+ -0.533278441888853,
+ 0.8669814895117853,
+ 0.4804732173271507
+ ],
+ "size": [
+ 0.034196714253358795,
+ 0.11223184072875447,
+ 0.19394078748718602
+ ]
+ }
+ },
+ {
+ "id": "front-pump-aux-control-box-cover",
+ "name": "5辅助控制盒盖",
+ "bounds": {
+ "min": [
+ -0.5703066913309799,
+ 0.8108655413505772,
+ 0.38242965279942054
+ ],
+ "max": [
+ -0.5525490379646522,
+ 0.9249718845392214,
+ 0.5774436203363541
+ ],
+ "center": [
+ -0.561427864647816,
+ 0.8679187129448993,
+ 0.4799366365678873
+ ],
+ "size": [
+ 0.01775765336632773,
+ 0.11410634318864421,
+ 0.19501396753693356
+ ]
+ }
+ },
+ {
+ "id": "front-pump-rescue-switch",
+ "name": "5互救开关",
+ "bounds": {
+ "min": [
+ -0.745038039824186,
+ 0.6500922522297712,
+ 0.3353021562316806
+ ],
+ "max": [
+ -0.3450380472366743,
+ 1.050092244817283,
+ 0.7353021488191923
+ ],
+ "center": [
+ -0.5450380435304302,
+ 0.850092248523527,
+ 0.5353021525254364
+ ],
+ "size": [
+ 0.39999999258751173,
+ 0.39999999258751173,
+ 0.39999999258751173
+ ]
+ }
+ }
+ ],
+ "camera": [
+ 10.481506990768331,
+ 5.211801168460705,
+ 14.722277299381599
+ ],
+ "target": [
+ -0.11849300923167061,
+ 0.7118011684607071,
+ 1.522277299381597
+ ],
+ "composition": {
+ "step": 4,
+ "position": [
+ -8.6,
+ 4.7,
+ 7.6
+ ],
+ "target": [
+ 0,
+ 1.05,
+ 0.1
+ ],
+ "subject": "整车侧面、辅助控制盒打开、互救开关切换"
+ }
+ },
+ {
+ "code": "TASK-VIRTUAL-006",
+ "name": "重型支援桥液压泵应急替代",
+ "taskId": "87",
+ "contentVersionId": "534",
+ "vehicle": {
+ "min": [
+ -0.9185929777866628,
+ -2.672506549394882e-9,
+ -4
+ ],
+ "max": [
+ 0.918592977786663,
+ 1.9671365082685308,
+ 4
+ ],
+ "center": [
+ 1.1102230246251565e-16,
+ 0.9835682527980121,
+ 0
+ ],
+ "size": [
+ 1.8371859555733259,
+ 1.9671365109410375,
+ 8
+ ]
+ },
+ "workshop": {
+ "min": [
+ -3.5996862489908814,
+ 0.0040830512400840124,
+ 4.4007572004770985
+ ],
+ "max": [
+ 3.600395275387526,
+ 3.0590606052183498,
+ 7.000955110828299
+ ],
+ "center": [
+ 0.00035451319832224826,
+ 1.5315718282292168,
+ 5.700856155652699
+ ],
+ "size": [
+ 7.200081524378407,
+ 3.054977553978266,
+ 2.6001979103512003
+ ]
+ },
+ "parts": [
+ {
+ "id": "front-pump-hydraulic-pump",
+ "name": "1液压泵",
+ "bounds": {
+ "min": [
+ -0.18285168189173207,
+ 0.5470110749761625,
+ 1.5480637042583225
+ ],
+ "max": [
+ -0.07350143670700487,
+ 0.6823860012265371,
+ 1.7452996392749651
+ ],
+ "center": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "size": [
+ 0.10935024518472719,
+ 0.13537492625037462,
+ 0.1972359350166426
+ ]
+ }
+ },
+ {
+ "id": "front-pump-power-take-off",
+ "name": "2取力器",
+ "bounds": {
+ "min": [
+ 0.28591953751410293,
+ 0.8004144888458099,
+ 3.3268872852958875
+ ],
+ "max": [
+ 0.49275256932594524,
+ 0.8743410502855345,
+ 3.461711959378971
+ ],
+ "center": [
+ 0.3893360534200241,
+ 0.8373777695656722,
+ 3.3942996223374293
+ ],
+ "size": [
+ 0.20683303181184232,
+ 0.07392656143972465,
+ 0.13482467408308363
+ ]
+ }
+ },
+ {
+ "id": "front-pump-pto-switch",
+ "name": "2取力器开关",
+ "bounds": {
+ "min": [
+ 0.23976173223624084,
+ 0.653700600552082,
+ 3.1673047521869897
+ ],
+ "max": [
+ 0.6397617248237526,
+ 1.0537005931395937,
+ 3.5673047447745017
+ ],
+ "center": [
+ 0.43976172852999673,
+ 0.8537005968458379,
+ 3.3673047484807457
+ ],
+ "size": [
+ 0.39999999258751173,
+ 0.39999999258751173,
+ 0.39999999258751195
+ ]
+ }
+ },
+ {
+ "id": "front-pump-ball-valve-switch",
+ "name": "3球阀开关",
+ "bounds": {
+ "min": [
+ 0.45091461395409094,
+ 0.7391242092456413,
+ -0.1493838572980378
+ ],
+ "max": [
+ 0.8509146065416027,
+ 1.139124201833153,
+ 0.250616135289474
+ ],
+ "center": [
+ 0.6509146102478468,
+ 0.9391242055393971,
+ 0.05061613899571811
+ ],
+ "size": [
+ 0.39999999258751173,
+ 0.39999999258751184,
+ 0.39999999258751184
+ ]
+ }
+ },
+ {
+ "id": "front-pump-aux-control-box",
+ "name": "5辅助控制盒",
+ "bounds": {
+ "min": [
+ -0.5503767990155324,
+ 0.810865569147408,
+ 0.3835028235835577
+ ],
+ "max": [
+ -0.5161800847621736,
+ 0.9230974098761625,
+ 0.5774436110707437
+ ],
+ "center": [
+ -0.533278441888853,
+ 0.8669814895117853,
+ 0.4804732173271507
+ ],
+ "size": [
+ 0.034196714253358795,
+ 0.11223184072875447,
+ 0.19394078748718602
+ ]
+ }
+ },
+ {
+ "id": "front-pump-aux-control-box-cover",
+ "name": "5辅助控制盒盖",
+ "bounds": {
+ "min": [
+ -0.5703066913309799,
+ 0.8108655413505772,
+ 0.38242965279942054
+ ],
+ "max": [
+ -0.5525490379646522,
+ 0.9249718845392214,
+ 0.5774436203363541
+ ],
+ "center": [
+ -0.561427864647816,
+ 0.8679187129448993,
+ 0.4799366365678873
+ ],
+ "size": [
+ 0.01775765336632773,
+ 0.11410634318864421,
+ 0.19501396753693356
+ ]
+ }
+ },
+ {
+ "id": "front-pump-rescue-switch",
+ "name": "5互救开关",
+ "bounds": {
+ "min": [
+ -0.745038039824186,
+ 0.6500922522297712,
+ 0.3353021562316806
+ ],
+ "max": [
+ -0.3450380472366743,
+ 1.050092244817283,
+ 0.7353021488191923
+ ],
+ "center": [
+ -0.5450380435304302,
+ 0.850092248523527,
+ 0.5353021525254364
+ ],
+ "size": [
+ 0.39999999258751173,
+ 0.39999999258751173,
+ 0.39999999258751173
+ ]
+ }
+ },
+ {
+ "id": "bridge-engine",
+ "name": "架桥车发动机控制(示意)",
+ "bounds": {
+ "min": [
+ -3.1744597940157613,
+ 0.9977008716087504,
+ 6.076311572137711
+ ],
+ "max": [
+ -2.824339676310247,
+ 1.2881462221520208,
+ 6.831686504293038
+ ],
+ "center": [
+ -2.999399735163004,
+ 1.1429235468803856,
+ 6.4539990382153745
+ ],
+ "size": [
+ 0.3501201177055142,
+ 0.29044535054327036,
+ 0.7553749321553269
+ ]
+ }
+ },
+ {
+ "id": "bridge-port-a",
+ "name": "架桥车快速接头",
+ "bounds": {
+ "min": [
+ -1.9795904961788355,
+ 0.5787892556668387,
+ 5.026213206190691
+ ],
+ "max": [
+ -1.619399439078369,
+ 1.2891838968882032,
+ 5.376687315308877
+ ],
+ "center": [
+ -1.7994949676286023,
+ 0.933986576277521,
+ 5.201450260749784
+ ],
+ "size": [
+ 0.3601910571004665,
+ 0.7103946412213645,
+ 0.35047410911818666
+ ]
+ }
+ },
+ {
+ "id": "bridge-port-b",
+ "name": "保障车快速接头",
+ "bounds": {
+ "min": [
+ 1.6204089678379459,
+ 0.5768248022538488,
+ 5.026211911781725
+ ],
+ "max": [
+ 1.9806000249384124,
+ 1.2872194434752133,
+ 5.376686020899911
+ ],
+ "center": [
+ 1.800504496388179,
+ 0.9320221228645311,
+ 5.201448966340818
+ ],
+ "size": [
+ 0.3601910571004665,
+ 0.7103946412213645,
+ 0.35047410911818666
+ ]
+ }
+ },
+ {
+ "id": "bridge-hose-a",
+ "name": "架桥车端软管接头",
+ "bounds": {
+ "min": [
+ -1.939590801202034,
+ 0.6176690656130431,
+ 5.925803894260281
+ ],
+ "max": [
+ -1.6593997632817503,
+ 1.2479978835784022,
+ 6.176633910389398
+ ],
+ "center": [
+ -1.7994952822418921,
+ 0.9328334745957227,
+ 6.051218902324839
+ ],
+ "size": [
+ 0.28019103792028366,
+ 0.6303288179653591,
+ 0.25083001612911726
+ ]
+ }
+ },
+ {
+ "id": "bridge-hose-b",
+ "name": "保障车端软管接头",
+ "bounds": {
+ "min": [
+ 1.6604086628147474,
+ 0.6157046122000532,
+ 5.925802599851315
+ ],
+ "max": [
+ 1.940599700735031,
+ 1.2460334301654123,
+ 6.176632615980433
+ ],
+ "center": [
+ 1.8005041817748892,
+ 0.9308690211827328,
+ 6.0512176079158735
+ ],
+ "size": [
+ 0.28019103792028366,
+ 0.6303288179653591,
+ 0.25083001612911726
+ ]
+ }
+ },
+ {
+ "id": "bridge-hose-line",
+ "name": "两车供油软管",
+ "bounds": {
+ "min": [
+ -1.8425931061668324,
+ 0.7500838412776296,
+ 5.358250573308058
+ ],
+ "max": [
+ 1.8437737189047358,
+ 1.1672591352200143,
+ 6.408780896336216
+ ],
+ "center": [
+ 0.0005903063689517429,
+ 0.958671488248822,
+ 5.8835157348221365
+ ],
+ "size": [
+ 3.686366825071568,
+ 0.41717529394238473,
+ 1.0505303230281582
+ ]
+ }
+ },
+ {
+ "id": "bridge-return-line",
+ "name": "两车回油软管",
+ "bounds": {
+ "min": [
+ -1.8470845483909777,
+ 0.6955758165624879,
+ 5.369316497446223
+ ],
+ "max": [
+ 1.847902845951026,
+ 0.8186901800575196,
+ 6.849121956118175
+ ],
+ "center": [
+ 0.0004091487800241822,
+ 0.7571329983100037,
+ 6.1092192267822
+ ],
+ "size": [
+ 3.6949873943420037,
+ 0.12311436349503169,
+ 1.4798054586719518
+ ]
+ }
+ },
+ {
+ "id": "bridge-return-valve",
+ "name": "保障车回油截止阀",
+ "bounds": {
+ "min": [
+ 2.5255397528579935,
+ 0.9960401005834839,
+ 4.976310477829802
+ ],
+ "max": [
+ 2.8756598705635077,
+ 1.2864854511267543,
+ 5.731685409985129
+ ],
+ "center": [
+ 2.7005998117107506,
+ 1.141262775855119,
+ 5.353997943907466
+ ],
+ "size": [
+ 0.3501201177055142,
+ 0.29044535054327036,
+ 0.7553749321553269
+ ]
+ }
+ },
+ {
+ "id": "bridge-support-pto",
+ "name": "保障车取力器",
+ "bounds": {
+ "min": [
+ 2.5255393932999475,
+ 0.9947222700877559,
+ 5.976309609490753
+ ],
+ "max": [
+ 2.8756595110054617,
+ 1.2851676206310263,
+ 6.7316845416460795
+ ],
+ "center": [
+ 2.7005994521527046,
+ 1.139944945359391,
+ 6.353997075568416
+ ],
+ "size": [
+ 0.3501201177055142,
+ 0.29044535054327036,
+ 0.7553749321553269
+ ]
+ }
+ },
+ {
+ "id": "bridge-supply",
+ "name": "供油回路观察点",
+ "bounds": {
+ "min": [
+ -0.1745143773491488,
+ 0.897645325415127,
+ 4.876179752420859
+ ],
+ "max": [
+ 0.17560574035636536,
+ 1.1880906759583973,
+ 5.631554684576186
+ ],
+ "center": [
+ 0.0005456815036082863,
+ 1.042868000686762,
+ 5.253867218498523
+ ],
+ "size": [
+ 0.35012011770551416,
+ 0.29044535054327036,
+ 0.7553749321553269
+ ]
+ }
+ },
+ {
+ "id": "bridge-normal-control",
+ "name": "架桥车正常作业控制",
+ "bounds": {
+ "min": [
+ -2.8744594072113743,
+ 0.9991185637525416,
+ 4.876312506277157
+ ],
+ "max": [
+ -2.52433928950586,
+ 1.289563914295812,
+ 5.6316874384324835
+ ],
+ "center": [
+ -2.699399348358617,
+ 1.1443412390241767,
+ 5.25399997235482
+ ],
+ "size": [
+ 0.3501201177055142,
+ 0.29044535054327036,
+ 0.7553749321553269
+ ]
+ }
+ }
+ ],
+ "camera": [
+ 0.00035451319832224826,
+ 6.909997070168722,
+ 17.088444496381374
+ ],
+ "target": [
+ 0.00035451319832224826,
+ 0.646823482767948,
+ 5.700856155652699
+ ],
+ "composition": {
+ "step": 5,
+ "position": [
+ 6.4,
+ 6.2,
+ 13.5
+ ],
+ "target": [
+ 0,
+ 1,
+ 4.5
+ ],
+ "subject": "架桥车与供回油快速接头,已连接的供回油软管"
+ }
+ },
+ {
+ "code": "TASK-VIRTUAL-007",
+ "name": "重型支援桥前泵换件修复",
+ "taskId": "88",
+ "contentVersionId": "535",
+ "vehicle": {
+ "min": [
+ -0.9185929777866628,
+ -2.672506549394882e-9,
+ -4
+ ],
+ "max": [
+ 0.918592977786663,
+ 1.9671365082685308,
+ 4
+ ],
+ "center": [
+ 1.1102230246251565e-16,
+ 0.9835682527980121,
+ 0
+ ],
+ "size": [
+ 1.8371859555733259,
+ 1.9671365109410375,
+ 8
+ ]
+ },
+ "workshop": {
+ "min": [
+ -0.6974711893812158,
+ 0.5048739833427757,
+ 1.5122026251643872
+ ],
+ "max": [
+ 0.44111807078247883,
+ 0.9105524406263141,
+ 1.9389494663822144
+ ],
+ "center": [
+ -0.12817655929936847,
+ 0.7077132119845448,
+ 1.725576045773301
+ ],
+ "size": [
+ 1.1385892601636947,
+ 0.40567845728353846,
+ 0.42674684121782724
+ ]
+ },
+ "parts": [
+ {
+ "id": "front-pump-hydraulic-pump",
+ "name": "1液压泵",
+ "bounds": {
+ "min": [
+ -0.18285168189173207,
+ 0.5470110749761625,
+ 1.5480637042583225
+ ],
+ "max": [
+ -0.07350143670700487,
+ 0.6823860012265371,
+ 1.7452996392749651
+ ],
+ "center": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "size": [
+ 0.10935024518472719,
+ 0.13537492625037462,
+ 0.1972359350166426
+ ]
+ }
+ },
+ {
+ "id": "front-pump-power-take-off",
+ "name": "2取力器",
+ "bounds": {
+ "min": [
+ 0.28591953751410293,
+ 0.8004144888458099,
+ 3.3268872852958875
+ ],
+ "max": [
+ 0.49275256932594524,
+ 0.8743410502855345,
+ 3.461711959378971
+ ],
+ "center": [
+ 0.3893360534200241,
+ 0.8373777695656722,
+ 3.3942996223374293
+ ],
+ "size": [
+ 0.20683303181184232,
+ 0.07392656143972465,
+ 0.13482467408308363
+ ]
+ }
+ },
+ {
+ "id": "front-pump-pto-switch",
+ "name": "2取力器开关",
+ "bounds": {
+ "min": [
+ 0.23976173223624084,
+ 0.653700600552082,
+ 3.1673047521869897
+ ],
+ "max": [
+ 0.6397617248237526,
+ 1.0537005931395937,
+ 3.5673047447745017
+ ],
+ "center": [
+ 0.43976172852999673,
+ 0.8537005968458379,
+ 3.3673047484807457
+ ],
+ "size": [
+ 0.39999999258751173,
+ 0.39999999258751173,
+ 0.39999999258751195
+ ]
+ }
+ },
+ {
+ "id": "front-pump-ball-valve-switch",
+ "name": "3球阀开关",
+ "bounds": {
+ "min": [
+ 0.45091461395409094,
+ 0.7391242092456413,
+ -0.1493838572980378
+ ],
+ "max": [
+ 0.8509146065416027,
+ 1.139124201833153,
+ 0.250616135289474
+ ],
+ "center": [
+ 0.6509146102478468,
+ 0.9391242055393971,
+ 0.05061613899571811
+ ],
+ "size": [
+ 0.39999999258751173,
+ 0.39999999258751184,
+ 0.39999999258751184
+ ]
+ }
+ },
+ {
+ "id": "front-pump-aux-control-box",
+ "name": "5辅助控制盒",
+ "bounds": {
+ "min": [
+ -0.5503767990155324,
+ 0.810865569147408,
+ 0.3835028235835577
+ ],
+ "max": [
+ -0.5161800847621736,
+ 0.9230974098761625,
+ 0.5774436110707437
+ ],
+ "center": [
+ -0.533278441888853,
+ 0.8669814895117853,
+ 0.4804732173271507
+ ],
+ "size": [
+ 0.034196714253358795,
+ 0.11223184072875447,
+ 0.19394078748718602
+ ]
+ }
+ },
+ {
+ "id": "front-pump-aux-control-box-cover",
+ "name": "5辅助控制盒盖",
+ "bounds": {
+ "min": [
+ -0.5703066913309799,
+ 0.8108655413505772,
+ 0.38242965279942054
+ ],
+ "max": [
+ -0.5525490379646522,
+ 0.9249718845392214,
+ 0.5774436203363541
+ ],
+ "center": [
+ -0.561427864647816,
+ 0.8679187129448993,
+ 0.4799366365678873
+ ],
+ "size": [
+ 0.01775765336632773,
+ 0.11410634318864421,
+ 0.19501396753693356
+ ]
+ }
+ },
+ {
+ "id": "front-pump-rescue-switch",
+ "name": "5互救开关",
+ "bounds": {
+ "min": [
+ -0.745038039824186,
+ 0.6500922522297712,
+ 0.3353021562316806
+ ],
+ "max": [
+ -0.3450380472366743,
+ 1.050092244817283,
+ 0.7353021488191923
+ ],
+ "center": [
+ -0.5450380435304302,
+ 0.850092248523527,
+ 0.5353021525254364
+ ],
+ "size": [
+ 0.39999999258751173,
+ 0.39999999258751173,
+ 0.39999999258751173
+ ]
+ }
+ },
+ {
+ "id": "bridge-engine",
+ "name": "架桥车发动机控制(示意)",
+ "bounds": {
+ "min": [
+ -0.6974711893812158,
+ 0.5411833260656574,
+ 1.8035738949400966
+ ],
+ "max": [
+ -0.6347143020355728,
+ 0.5931818905247553,
+ 1.9389494663822144
+ ],
+ "center": [
+ -0.6660927457083943,
+ 0.5671826082952064,
+ 1.8712616806611555
+ ],
+ "size": [
+ 0.062756887345643,
+ 0.051998564459097896,
+ 0.13537557144211787
+ ]
+ }
+ },
+ {
+ "id": "bridge-old-pump",
+ "name": "旧前泵 · 原车安装位置",
+ "bounds": {
+ "min": [
+ -0.18285168890500836,
+ 0.5470110777057942,
+ 1.5480637555580075
+ ],
+ "max": [
+ -0.07350144038116299,
+ 0.682385982465754,
+ 1.745299694849624
+ ],
+ "center": [
+ -0.1281765646430857,
+ 0.6146985300857741,
+ 1.6466817252038157
+ ],
+ "size": [
+ 0.10935024852384537,
+ 0.13537490475995984,
+ 0.19723593929161654
+ ]
+ }
+ },
+ {
+ "id": "bridge-new-pump",
+ "name": "新液压泵 · 待安装",
+ "bounds": {
+ "min": [
+ 0.1757591020343422,
+ 0.5470110777057942,
+ 1.5480637555580075
+ ],
+ "max": [
+ 0.2851093505581876,
+ 0.682385982465754,
+ 1.745299694849624
+ ],
+ "center": [
+ 0.2304342262962649,
+ 0.6146985300857741,
+ 1.6466817252038157
+ ],
+ "size": [
+ 0.1093502485238454,
+ 0.13537490475995984,
+ 0.19723593929161654
+ ]
+ }
+ },
+ {
+ "id": "bridge-pump-seat",
+ "name": "取力器结合面(补充示意)",
+ "bounds": {
+ "min": [
+ -0.18555428456717243,
+ 0.5698721892339311,
+ 1.7524718552139857
+ ],
+ "max": [
+ -0.0707988340315645,
+ 0.6595248869687687,
+ 1.7632301787016988
+ ],
+ "center": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.7578510169578423
+ ],
+ "size": [
+ 0.11475545053560793,
+ 0.08965269773483753,
+ 0.010758323487713106
+ ]
+ }
+ },
+ {
+ "id": "bridge-pump-bolt-1",
+ "name": "原模型泵安装螺栓 1",
+ "bounds": {
+ "min": [
+ -0.18129260597425773,
+ 0.6088700919574924,
+ 1.7276237617852601
+ ],
+ "max": [
+ -0.15655871126890647,
+ 0.6336039866628437,
+ 1.7523576564906111
+ ],
+ "center": [
+ -0.1689256586215821,
+ 0.621237039310168,
+ 1.7399907091379356
+ ],
+ "size": [
+ 0.024733894705351256,
+ 0.024733894705351256,
+ 0.024733894705351034
+ ]
+ }
+ },
+ {
+ "id": "bridge-pump-bolt-2",
+ "name": "原模型泵安装螺栓 2",
+ "bounds": {
+ "min": [
+ -0.10014292990943864,
+ 0.6088700919574924,
+ 1.7276238793470384
+ ],
+ "max": [
+ -0.07540903520408739,
+ 0.6336039866628437,
+ 1.7523577740523895
+ ],
+ "center": [
+ -0.08777598255676301,
+ 0.621237039310168,
+ 1.739990826699714
+ ],
+ "size": [
+ 0.024733894705351256,
+ 0.024733894705351256,
+ 0.024733894705351034
+ ]
+ }
+ },
+ {
+ "id": "bridge-pump-bolt-3",
+ "name": "原模型泵安装螺栓 3",
+ "bounds": {
+ "min": [
+ -0.18129260998204563,
+ 0.548793851310464,
+ 1.727623637543835
+ ],
+ "max": [
+ -0.15655870726111856,
+ 0.573527754031391,
+ 1.7523575402647622
+ ],
+ "center": [
+ -0.1689256586215821,
+ 0.5611608026709275,
+ 1.7399905889042986
+ ],
+ "size": [
+ 0.02473390272092707,
+ 0.024733902720927015,
+ 0.024733902720927237
+ ]
+ }
+ },
+ {
+ "id": "bridge-pump-bolt-4",
+ "name": "原模型泵安装螺栓 4",
+ "bounds": {
+ "min": [
+ -0.10014292990943864,
+ 0.5487938553182519,
+ 1.7276237617852601
+ ],
+ "max": [
+ -0.07540903520408739,
+ 0.5735277500236031,
+ 1.7523576564906111
+ ],
+ "center": [
+ -0.08777598255676301,
+ 0.5611608026709275,
+ 1.7399907091379356
+ ],
+ "size": [
+ 0.024733894705351256,
+ 0.024733894705351256,
+ 0.024733894705351034
+ ]
+ }
+ },
+ {
+ "id": "bridge-tank-valve",
+ "name": "油箱出油口一号球阀",
+ "bounds": {
+ "min": [
+ -0.6436795707403132,
+ 0.5411833260656574,
+ 1.5884074203764862
+ ],
+ "max": [
+ -0.5809226833946702,
+ 0.5931818905247553,
+ 1.723782991818604
+ ],
+ "center": [
+ -0.6123011270674917,
+ 0.5671826082952064,
+ 1.6560952060975451
+ ],
+ "size": [
+ 0.062756887345643,
+ 0.051998564459097896,
+ 0.13537557144211787
+ ]
+ }
+ },
+ {
+ "id": "bridge-paper",
+ "name": "初裁牛皮纸",
+ "bounds": {
+ "min": [
+ -0.6212663947034885,
+ 0.5048739833427757,
+ 1.637716404130647
+ ],
+ "max": [
+ -0.4598915430557545,
+ 0.509356618296314,
+ 1.799091255778381
+ ],
+ "center": [
+ -0.5405789688796215,
+ 0.5071153008195448,
+ 1.718403829954514
+ ],
+ "size": [
+ 0.16137485164773402,
+ 0.004482634953538289,
+ 0.16137485164773402
+ ]
+ }
+ },
+ {
+ "id": "bridge-gasket",
+ "name": "修裁后的纸垫",
+ "bounds": {
+ "min": [
+ -0.6158872326256496,
+ 0.5393902743553218,
+ 1.5122026251643872
+ ],
+ "max": [
+ -0.4652707051335935,
+ 0.690006801847378,
+ 1.5122026251643872
+ ],
+ "center": [
+ -0.5405789688796215,
+ 0.6146985381013499,
+ 1.5122026251643872
+ ],
+ "size": [
+ 0.15061652749205612,
+ 0.15061652749205612,
+ 0
+ ]
+ }
+ },
+ {
+ "id": "bridge-inlet",
+ "name": "进油管接头",
+ "bounds": {
+ "min": [
+ -0.35295371138761605,
+ 0.5363196942955012,
+ 1.6334456796932533
+ ],
+ "max": [
+ -0.24472401430169025,
+ 0.6288944167519539,
+ 1.7004538734767225
+ ],
+ "center": [
+ -0.29883886284465316,
+ 0.5826070555237275,
+ 1.6669497765849879
+ ],
+ "size": [
+ 0.10822969708592581,
+ 0.09257472245645271,
+ 0.06700819378346923
+ ]
+ }
+ },
+ {
+ "id": "bridge-outlet",
+ "name": "出油管接头",
+ "bounds": {
+ "min": [
+ -0.011629104297046704,
+ 0.5363196942955012,
+ 1.6334456796932533
+ ],
+ "max": [
+ 0.09660059278887913,
+ 0.6288944167519539,
+ 1.7004538734767225
+ ],
+ "center": [
+ 0.04248574424591621,
+ 0.5826070555237275,
+ 1.6669497765849879
+ ],
+ "size": [
+ 0.10822969708592584,
+ 0.09257472245645271,
+ 0.06700819378346923
+ ]
+ }
+ },
+ {
+ "id": "bridge-inlet-bag",
+ "name": "进油管封口袋",
+ "bounds": {
+ "min": [
+ -0.37741105910909145,
+ 0.5833200944285284,
+ 1.7417135318465062
+ ],
+ "max": [
+ -0.32720554816383374,
+ 0.6460769817741714,
+ 1.784746825797359
+ ],
+ "center": [
+ -0.3523083036364626,
+ 0.6146985381013499,
+ 1.7632301788219327
+ ],
+ "size": [
+ 0.050205510945257714,
+ 0.062756887345643,
+ 0.04303329395085287
+ ]
+ }
+ },
+ {
+ "id": "bridge-outlet-bag",
+ "name": "出油管封口袋",
+ "bounds": {
+ "min": [
+ 0.07085242956509674,
+ 0.5833200944285284,
+ 1.7417135318465062
+ ],
+ "max": [
+ 0.12105794051035451,
+ 0.6460769817741714,
+ 1.784746825797359
+ ],
+ "center": [
+ 0.09595518503772563,
+ 0.6146985381013499,
+ 1.7632301788219327
+ ],
+ "size": [
+ 0.05020551094525777,
+ 0.062756887345643,
+ 0.04303329395085287
+ ]
+ }
+ },
+ {
+ "id": "bridge-fill-cap",
+ "name": "新泵加油口盖",
+ "bounds": {
+ "min": [
+ -0.15148625985543152,
+ 0.698972074827092,
+ 1.637716401859567
+ ],
+ "max": [
+ -0.10486685874330544,
+ 0.7455914759392182,
+ 1.6556469416737205
+ ],
+ "center": [
+ -0.12817655929936847,
+ 0.7222817753831551,
+ 1.6466816717666437
+ ],
+ "size": [
+ 0.04661940111212608,
+ 0.046619401112126146,
+ 0.0179305398141536
+ ]
+ }
+ },
+ {
+ "id": "bridge-oil-can",
+ "name": "液压油加注壶",
+ "bounds": {
+ "min": [
+ 0.09147255068535545,
+ 0.6415943474218013,
+ 1.7094385591122865
+ ],
+ "max": [
+ 0.15422943803099834,
+ 0.7312470451566389,
+ 1.763230179890676
+ ],
+ "center": [
+ 0.1228509943581769,
+ 0.6864206962892201,
+ 1.7363343695014812
+ ],
+ "size": [
+ 0.06275688734564289,
+ 0.08965269773483753,
+ 0.053791620778389504
+ ]
+ }
+ },
+ {
+ "id": "bridge-oil-stream",
+ "name": "液压油加注示意",
+ "bounds": {
+ "min": [
+ -0.13835291417702386,
+ 0.6891968621123294,
+ 1.6373530580795213
+ ],
+ "max": [
+ -0.10006966447396676,
+ 0.746401420884391,
+ 1.6829060957093678
+ ],
+ "center": [
+ -0.11921128932549531,
+ 0.7177991414983602,
+ 1.6601295768944446
+ ],
+ "size": [
+ 0.038283249703057104,
+ 0.05720455877206154,
+ 0.04555303762984653
+ ]
+ }
+ },
+ {
+ "id": "bridge-test-control",
+ "name": "试验操作手柄",
+ "bounds": {
+ "min": [
+ 0.37836118343683595,
+ 0.5411833260656574,
+ 1.7677128158461615
+ ],
+ "max": [
+ 0.44111807078247883,
+ 0.5931818905247553,
+ 1.9030883872882793
+ ],
+ "center": [
+ 0.4097396271096574,
+ 0.5671826082952064,
+ 1.8354006015672204
+ ],
+ "size": [
+ 0.06275688734564289,
+ 0.051998564459097896,
+ 0.13537557144211787
+ ]
+ }
+ }
+ ],
+ "camera": [
+ 6.56796938918832,
+ 4.864641073682019,
+ 8.35923376805786
+ ],
+ "target": [
+ 2.220446049250313e-16,
+ 0.9835682527980127,
+ 0
+ ],
+ "composition": {
+ "step": -1,
+ "position": [
+ 8.2,
+ 4.6,
+ 6.4
+ ],
+ "target": [
+ 0,
+ 1.05,
+ 0.8
+ ],
+ "subject": "前泵换件场景整车外观,保留正常材质与完整环境"
+ }
+ },
+ {
+ "code": "TASK-VIRTUAL-008",
+ "name": "重型支援桥平衡阀拆拼互换",
+ "taskId": "89",
+ "contentVersionId": "536",
+ "vehicle": {
+ "min": [
+ -0.9185929777866628,
+ -2.672506549394882e-9,
+ -4
+ ],
+ "max": [
+ 0.918592977786663,
+ 1.9671365082685308,
+ 4
+ ],
+ "center": [
+ 1.1102230246251565e-16,
+ 0.9835682527980121,
+ 0
+ ],
+ "size": [
+ 1.8371859555733259,
+ 1.9671365109410375,
+ 8
+ ]
+ },
+ "workshop": {
+ "min": [
+ -3.5996862489908814,
+ 0.0040830512400840124,
+ 4.341449686693339
+ ],
+ "max": [
+ 3.600395275387526,
+ 3.0590606052183498,
+ 7.000955110828299
+ ],
+ "center": [
+ 0.00035451319832224826,
+ 1.5315718282292168,
+ 5.671202398760819
+ ],
+ "size": [
+ 7.200081524378407,
+ 3.054977553978266,
+ 2.6595054241349594
+ ]
+ },
+ "parts": [
+ {
+ "id": "front-pump-hydraulic-pump",
+ "name": "1液压泵",
+ "bounds": {
+ "min": [
+ -0.18285168189173207,
+ 0.5470110749761625,
+ 1.5480637042583225
+ ],
+ "max": [
+ -0.07350143670700487,
+ 0.6823860012265371,
+ 1.7452996392749651
+ ],
+ "center": [
+ -0.12817655929936847,
+ 0.6146985381013499,
+ 1.6466816717666437
+ ],
+ "size": [
+ 0.10935024518472719,
+ 0.13537492625037462,
+ 0.1972359350166426
+ ]
+ }
+ },
+ {
+ "id": "front-pump-power-take-off",
+ "name": "2取力器",
+ "bounds": {
+ "min": [
+ 0.28591953751410293,
+ 0.8004144888458099,
+ 3.3268872852958875
+ ],
+ "max": [
+ 0.49275256932594524,
+ 0.8743410502855345,
+ 3.461711959378971
+ ],
+ "center": [
+ 0.3893360534200241,
+ 0.8373777695656722,
+ 3.3942996223374293
+ ],
+ "size": [
+ 0.20683303181184232,
+ 0.07392656143972465,
+ 0.13482467408308363
+ ]
+ }
+ },
+ {
+ "id": "front-pump-pto-switch",
+ "name": "2取力器开关",
+ "bounds": {
+ "min": [
+ 0.23976173223624084,
+ 0.653700600552082,
+ 3.1673047521869897
+ ],
+ "max": [
+ 0.6397617248237526,
+ 1.0537005931395937,
+ 3.5673047447745017
+ ],
+ "center": [
+ 0.43976172852999673,
+ 0.8537005968458379,
+ 3.3673047484807457
+ ],
+ "size": [
+ 0.39999999258751173,
+ 0.39999999258751173,
+ 0.39999999258751195
+ ]
+ }
+ },
+ {
+ "id": "front-pump-ball-valve-switch",
+ "name": "3球阀开关",
+ "bounds": {
+ "min": [
+ 0.45091461395409094,
+ 0.7391242092456413,
+ -0.1493838572980378
+ ],
+ "max": [
+ 0.8509146065416027,
+ 1.139124201833153,
+ 0.250616135289474
+ ],
+ "center": [
+ 0.6509146102478468,
+ 0.9391242055393971,
+ 0.05061613899571811
+ ],
+ "size": [
+ 0.39999999258751173,
+ 0.39999999258751184,
+ 0.39999999258751184
+ ]
+ }
+ },
+ {
+ "id": "front-pump-aux-control-box",
+ "name": "5辅助控制盒",
+ "bounds": {
+ "min": [
+ -0.5503767990155324,
+ 0.810865569147408,
+ 0.3835028235835577
+ ],
+ "max": [
+ -0.5161800847621736,
+ 0.9230974098761625,
+ 0.5774436110707437
+ ],
+ "center": [
+ -0.533278441888853,
+ 0.8669814895117853,
+ 0.4804732173271507
+ ],
+ "size": [
+ 0.034196714253358795,
+ 0.11223184072875447,
+ 0.19394078748718602
+ ]
+ }
+ },
+ {
+ "id": "front-pump-aux-control-box-cover",
+ "name": "5辅助控制盒盖",
+ "bounds": {
+ "min": [
+ -0.5703066913309799,
+ 0.8108655413505772,
+ 0.38242965279942054
+ ],
+ "max": [
+ -0.5525490379646522,
+ 0.9249718845392214,
+ 0.5774436203363541
+ ],
+ "center": [
+ -0.561427864647816,
+ 0.8679187129448993,
+ 0.4799366365678873
+ ],
+ "size": [
+ 0.01775765336632773,
+ 0.11410634318864421,
+ 0.19501396753693356
+ ]
+ }
+ },
+ {
+ "id": "front-pump-rescue-switch",
+ "name": "5互救开关",
+ "bounds": {
+ "min": [
+ -0.745038039824186,
+ 0.6500922522297712,
+ 0.3353021562316806
+ ],
+ "max": [
+ -0.3450380472366743,
+ 1.050092244817283,
+ 0.7353021488191923
+ ],
+ "center": [
+ -0.5450380435304302,
+ 0.850092248523527,
+ 0.5353021525254364
+ ],
+ "size": [
+ 0.39999999258751173,
+ 0.39999999258751173,
+ 0.39999999258751173
+ ]
+ }
+ },
+ {
+ "id": "bridge-engine",
+ "name": "架桥车发动机控制(示意)",
+ "bounds": {
+ "min": [
+ -3.1744597940157613,
+ 0.9977008716087504,
+ 6.076311572137711
+ ],
+ "max": [
+ -2.824339676310247,
+ 1.2881462221520208,
+ 6.831686504293038
+ ],
+ "center": [
+ -2.999399735163004,
+ 1.1429235468803856,
+ 6.4539990382153745
+ ],
+ "size": [
+ 0.3501201177055142,
+ 0.29044535054327036,
+ 0.7553749321553269
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-seat",
+ "name": "小腔阀座",
+ "bounds": {
+ "min": [
+ -2.0995631331577895,
+ 0.8086047144589517,
+ 4.926054898687963
+ ],
+ "max": [
+ -1.0992357832373305,
+ 1.4094792670943594,
+ 5.216608394124778
+ ],
+ "center": [
+ -1.59939945819756,
+ 1.1090419907766556,
+ 5.071331646406371
+ ],
+ "size": [
+ 1.000327349920459,
+ 0.6008745526354078,
+ 0.2905534954368152
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-valve",
+ "name": "小腔平衡阀",
+ "bounds": {
+ "min": [
+ -2.024549640049506,
+ 0.8331843804255162,
+ 5.176087657320527
+ ],
+ "max": [
+ -1.1742494920804414,
+ 1.384108902830358,
+ 5.526812459854107
+ ],
+ "center": [
+ -1.5993995660649738,
+ 1.108646641627937,
+ 5.351450058587317
+ ],
+ "size": [
+ 0.8503001479690648,
+ 0.5509245224048417,
+ 0.3507248025335805
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-bolt-1",
+ "name": "小腔固定螺栓 1",
+ "bounds": {
+ "min": [
+ -1.9756053492208023,
+ 1.2333335376549828,
+ 5.521614753353247
+ ],
+ "max": [
+ -1.8629865228132143,
+ 1.3635969667506629,
+ 5.721785900623828
+ ],
+ "center": [
+ -1.9192959360170083,
+ 1.2984652522028228,
+ 5.621700326988537
+ ],
+ "size": [
+ 0.11261882640758802,
+ 0.13026342909568012,
+ 0.20017114727058072
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-bolt-2",
+ "name": "小腔固定螺栓 2",
+ "bounds": {
+ "min": [
+ -1.3356054445067078,
+ 1.2329843014926734,
+ 5.521614523236098
+ ],
+ "max": [
+ -1.2229866180991198,
+ 1.3632477305883535,
+ 5.721785670506678
+ ],
+ "center": [
+ -1.2792960313029138,
+ 1.2981160160405134,
+ 5.621700096871388
+ ],
+ "size": [
+ 0.11261882640758802,
+ 0.13026342909568012,
+ 0.20017114727058072
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-bolt-3",
+ "name": "小腔固定螺栓 3",
+ "bounds": {
+ "min": [
+ -1.9758127081921735,
+ 0.8533339241998279,
+ 5.52111397776487
+ ],
+ "max": [
+ -1.8631938817845854,
+ 0.9835973532955082,
+ 5.72128512503545
+ ],
+ "center": [
+ -1.9195032949883795,
+ 0.9184656387476681,
+ 5.62119955140016
+ ],
+ "size": [
+ 0.11261882640758802,
+ 0.13026342909568034,
+ 0.20017114727058072
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-bolt-4",
+ "name": "小腔固定螺栓 4",
+ "bounds": {
+ "min": [
+ -1.335812803478079,
+ 0.8529846880375186,
+ 5.52111374764772
+ ],
+ "max": [
+ -1.223193977070491,
+ 0.9832481171331989,
+ 5.721284894918301
+ ],
+ "center": [
+ -1.279503390274285,
+ 0.9181164025853588,
+ 5.621199321283011
+ ],
+ "size": [
+ 0.11261882640758802,
+ 0.13026342909568034,
+ 0.20017114727058072
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-pipe",
+ "name": "小腔控制油管",
+ "bounds": {
+ "min": [
+ -1.1994279781123307,
+ 0.8674102596835696,
+ 5.058181413519776
+ ],
+ "max": [
+ -0.8411508845806733,
+ 1.178780994304933,
+ 5.374778612631555
+ ],
+ "center": [
+ -1.020289431346502,
+ 1.0230956269942513,
+ 5.216480013075666
+ ],
+ "size": [
+ 0.3582770935316574,
+ 0.31137073462136344,
+ 0.3165971991117793
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-bag",
+ "name": "小腔管口封口袋",
+ "bounds": {
+ "min": [
+ -0.7894954404005422,
+ 0.932103191829592,
+ 5.831218632215685
+ ],
+ "max": [
+ -0.5093044060790936,
+ 1.2825718999745528,
+ 6.071679759791803
+ ],
+ "center": [
+ -0.6493999232398179,
+ 1.1073375459020725,
+ 5.951449196003744
+ ],
+ "size": [
+ 0.28019103432144865,
+ 0.3504687081449608,
+ 0.24046112757611837
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-cloth",
+ "name": "小腔清洗擦拭布",
+ "bounds": {
+ "min": [
+ -2.449454341721735,
+ 1.0077443463562852,
+ 6.238817702455533
+ ],
+ "max": [
+ -2.1493452291747768,
+ 1.2079407961123305,
+ 6.264081355090077
+ ],
+ "center": [
+ -2.299399785448256,
+ 1.1078425712343078,
+ 6.251449528772805
+ ],
+ "size": [
+ 0.3001091125469584,
+ 0.20019644975604534,
+ 0.025263652634544442
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-plug-1",
+ "name": "小腔油堵 1",
+ "bounds": {
+ "min": [
+ -1.9290995461201073,
+ 1.5481995774657287,
+ 5.622029750445588
+ ],
+ "max": [
+ -1.7090995225374437,
+ 1.7684102053591195,
+ 5.782319530642553
+ ],
+ "center": [
+ -1.8190995343287755,
+ 1.658304891412424,
+ 5.7021746405440705
+ ],
+ "size": [
+ 0.22000002358266357,
+ 0.22021062789339085,
+ 0.16028978019696538
+ ]
+ }
+ },
+ {
+ "id": "bridge-small-plug-2",
+ "name": "小腔油堵 2",
+ "bounds": {
+ "min": [
+ -1.4890996116291673,
+ 1.547959477604141,
+ 5.622029592240048
+ ],
+ "max": [
+ -1.2690995880465041,
+ 1.7681701054975318,
+ 5.782319372437013
+ ],
+ "center": [
+ -1.3790995998378357,
+ 1.6580647915508364,
+ 5.70217448233853
+ ],
+ "size": [
+ 0.22000002358266313,
+ 0.22021062789339085,
+ 0.16028978019696538
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-seat",
+ "name": "大腔阀座",
+ "bounds": {
+ "min": [
+ 1.1004363904126826,
+ 0.8068585336474052,
+ 4.926053748102215
+ ],
+ "max": [
+ 2.100763740333142,
+ 1.407733086282813,
+ 5.2166072435390305
+ ],
+ "center": [
+ 1.6006000653729124,
+ 1.1072958099651091,
+ 5.071330495820623
+ ],
+ "size": [
+ 1.0003273499204595,
+ 0.6008745526354078,
+ 0.2905534954368152
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-valve",
+ "name": "大腔平衡阀",
+ "bounds": {
+ "min": [
+ 1.1754498835209661,
+ 0.8314381996139698,
+ 5.176086506734779
+ ],
+ "max": [
+ 2.025750031490031,
+ 1.3823627220188115,
+ 5.52681130926836
+ ],
+ "center": [
+ 1.6005999575054985,
+ 1.1069004608163906,
+ 5.3514489080015695
+ ],
+ "size": [
+ 0.8503001479690648,
+ 0.5509245224048417,
+ 0.3507248025335805
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-bolt-1",
+ "name": "大腔固定螺栓 1",
+ "bounds": {
+ "min": [
+ 1.2243941743496702,
+ 1.2315873568434361,
+ 5.521613602767499
+ ],
+ "max": [
+ 1.3370130007572583,
+ 1.3618507859391162,
+ 5.72178475003808
+ ],
+ "center": [
+ 1.2807035875534643,
+ 1.2967190713912762,
+ 5.62169917640279
+ ],
+ "size": [
+ 0.11261882640758802,
+ 0.13026342909568012,
+ 0.20017114727058072
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-bolt-2",
+ "name": "大腔固定螺栓 2",
+ "bounds": {
+ "min": [
+ 1.8643940790637648,
+ 1.2312381206811267,
+ 5.52161337265035
+ ],
+ "max": [
+ 1.9770129054713528,
+ 1.3615015497768068,
+ 5.721784519920931
+ ],
+ "center": [
+ 1.9207034922675588,
+ 1.2963698352289668,
+ 5.62169894628564
+ ],
+ "size": [
+ 0.11261882640758802,
+ 0.13026342909568012,
+ 0.20017114727058072
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-bolt-3",
+ "name": "大腔固定螺栓 3",
+ "bounds": {
+ "min": [
+ 1.224186815378299,
+ 0.8515877433882814,
+ 5.521112827179122
+ ],
+ "max": [
+ 1.3368056417858871,
+ 0.9818511724839617,
+ 5.721283974449703
+ ],
+ "center": [
+ 1.280496228582093,
+ 0.9167194579361215,
+ 5.6211984008144125
+ ],
+ "size": [
+ 0.11261882640758802,
+ 0.13026342909568034,
+ 0.20017114727058072
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-bolt-4",
+ "name": "大腔固定螺栓 4",
+ "bounds": {
+ "min": [
+ 1.8641867200923936,
+ 0.851238507225972,
+ 5.521112597061973
+ ],
+ "max": [
+ 1.9768055464999816,
+ 0.9815019363216524,
+ 5.7212837443325535
+ ],
+ "center": [
+ 1.9204961332961876,
+ 0.9163702217738122,
+ 5.621198170697263
+ ],
+ "size": [
+ 0.11261882640758802,
+ 0.13026342909568034,
+ 0.20017114727058072
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-pipe",
+ "name": "大腔控制油管",
+ "bounds": {
+ "min": [
+ 2.0005715454581416,
+ 0.8656640788720229,
+ 5.0581802629340284
+ ],
+ "max": [
+ 2.358848638989799,
+ 1.1770348134933863,
+ 5.374777462045808
+ ],
+ "center": [
+ 2.1797100922239703,
+ 1.0213494461827046,
+ 5.216478862489918
+ ],
+ "size": [
+ 0.35827709353165726,
+ 0.31137073462136344,
+ 0.3165971991117793
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-bag",
+ "name": "大腔管口封口袋",
+ "bounds": {
+ "min": [
+ 2.41050408316993,
+ 0.9303570110180454,
+ 5.831217481629937
+ ],
+ "max": [
+ 2.6906951174913782,
+ 1.2808257191630061,
+ 6.071678609206056
+ ],
+ "center": [
+ 2.550599600330654,
+ 1.1055913650905258,
+ 5.9514480454179965
+ ],
+ "size": [
+ 0.2801910343214482,
+ 0.3504687081449608,
+ 0.24046112757611837
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-cloth",
+ "name": "大腔清洗擦拭布",
+ "bounds": {
+ "min": [
+ 0.7505451818487371,
+ 1.0059981655447385,
+ 6.238816551869785
+ ],
+ "max": [
+ 1.0506542943956954,
+ 1.2061946153007839,
+ 6.26408020450433
+ ],
+ "center": [
+ 0.9005997381222162,
+ 1.1060963904227612,
+ 6.251448378187058
+ ],
+ "size": [
+ 0.30010911254695827,
+ 0.20019644975604534,
+ 0.025263652634544442
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-plug-1",
+ "name": "大腔油堵 1",
+ "bounds": {
+ "min": [
+ 1.2708999774503655,
+ 1.5464533966541822,
+ 5.62202859985984
+ ],
+ "max": [
+ 1.4909000010330287,
+ 1.766664024547573,
+ 5.782318380056806
+ ],
+ "center": [
+ 1.380899989241697,
+ 1.6565587106008777,
+ 5.702173489958323
+ ],
+ "size": [
+ 0.22000002358266313,
+ 0.22021062789339085,
+ 0.16028978019696538
+ ]
+ }
+ },
+ {
+ "id": "bridge-large-plug-2",
+ "name": "大腔油堵 2",
+ "bounds": {
+ "min": [
+ 1.710899911941305,
+ 1.5462132967925946,
+ 5.6220284416543
+ ],
+ "max": [
+ 1.9308999355239687,
+ 1.7664239246859854,
+ 5.782318221851265
+ ],
+ "center": [
+ 1.8208999237326369,
+ 1.65631861073929,
+ 5.702173331752783
+ ],
+ "size": [
+ 0.22000002358266357,
+ 0.22021062789339085,
+ 0.16028978019696538
+ ]
+ }
+ }
+ ],
+ "camera": [
+ -2.1907992565281673,
+ 7.452102285754378,
+ 17.77808180128149
+ ],
+ "target": [
+ -2.1907992565281673,
+ 1.0973796373235252,
+ 6.224040622316306
+ ],
+ "composition": {
+ "step": 2,
+ "position": [
+ -5.8,
+ 5.3,
+ 12.8
+ ],
+ "target": [
+ 0,
+ 1.02,
+ 4.8
+ ],
+ "subject": "大小腔平衡阀,拆开的阀体及油缸接口"
+ }
+ }
+]
\ No newline at end of file
diff --git a/reports/bridge-task-covers-20260915/index.html b/reports/bridge-task-covers-20260915/index.html
new file mode 100644
index 0000000..08170a8
--- /dev/null
+++ b/reports/bridge-task-covers-20260915/index.html
@@ -0,0 +1 @@
+四套桥梁虚拟仿真场景封面四套桥梁虚拟仿真 · 场景封面
原列表四条任务没有配置封面,统一回退至 vehicle-closeup-thumb.png。现从正式发布的三维预览取景,沿用对应脚本动作,保存为独立静态图片;按脚本标识和版本匹配,任务自行配置的封面仍优先。拍摄时隐藏界面浮层和场景文字牌,没有修改任务定义、训练记录或成绩。
006 的软管工位和 008 的平衡阀工位属于当前训练的操作示意;007 泵体与四颗安装螺栓来自整车模型。封面反映项目现有模型能力。本机/局域网加载及零业务写入核验 · 原场景边界、相机与取景步骤

TASK-VIRTUAL-005 · 内容版本 533 · 第 5 步动作后重型支援桥液压泵应急切换
整车侧面、辅助控制盒打开、互救开关切换

TASK-VIRTUAL-006 · 内容版本 534 · 第 6 步动作后重型支援桥液压泵应急替代
架桥车与供回油快速接头,已连接的供回油软管

TASK-VIRTUAL-007 · 内容版本 535 · 开场整车视角重型支援桥前泵换件修复
前泵换件场景整车外观,保留正常材质与完整环境

TASK-VIRTUAL-008 · 内容版本 536 · 第 3 步动作后重型支援桥平衡阀拆拼互换
大小腔平衡阀,拆开的阀体及油缸接口
任务列表实际效果

\ No newline at end of file
diff --git a/reports/bridge-task-covers-20260915/lan-list-1440.png b/reports/bridge-task-covers-20260915/lan-list-1440.png
new file mode 100644
index 0000000..37f65be
Binary files /dev/null and b/reports/bridge-task-covers-20260915/lan-list-1440.png differ
diff --git a/reports/bridge-task-covers-20260915/lan-list-1920.png b/reports/bridge-task-covers-20260915/lan-list-1920.png
new file mode 100644
index 0000000..4761d35
Binary files /dev/null and b/reports/bridge-task-covers-20260915/lan-list-1920.png differ
diff --git a/reports/bridge-task-covers-20260915/local-list-1440.png b/reports/bridge-task-covers-20260915/local-list-1440.png
new file mode 100644
index 0000000..6a32276
Binary files /dev/null and b/reports/bridge-task-covers-20260915/local-list-1440.png differ
diff --git a/reports/bridge-task-covers-20260915/local-list-1920.png b/reports/bridge-task-covers-20260915/local-list-1920.png
new file mode 100644
index 0000000..5a0621d
Binary files /dev/null and b/reports/bridge-task-covers-20260915/local-list-1920.png differ
diff --git a/reports/bridge-task-covers-20260915/verification.json b/reports/bridge-task-covers-20260915/verification.json
new file mode 100644
index 0000000..4409d34
--- /dev/null
+++ b/reports/bridge-task-covers-20260915/verification.json
@@ -0,0 +1,63 @@
+{
+ "pass": true,
+ "checks": [
+ {
+ "origin": "http://127.0.0.1:6180",
+ "code": "TASK-VIRTUAL-005",
+ "file": "bridge-pump-switch-v2.jpg",
+ "bytes": 148324,
+ "sha256": "be4c4c61e0747ba9783c294443897f46a00c74edacd2bb937d69e69185b7a3aa"
+ },
+ {
+ "origin": "http://127.0.0.1:6180",
+ "code": "TASK-VIRTUAL-006",
+ "file": "bridge-pump-substitute-v3.jpg",
+ "bytes": 156852,
+ "sha256": "931df276a06f2a09d77127b91ea695615180fe934f5b2b7d876ca2e391595af4"
+ },
+ {
+ "origin": "http://127.0.0.1:6180",
+ "code": "TASK-VIRTUAL-007",
+ "file": "bridge-pump-replace-v3-overview.jpg",
+ "bytes": 146917,
+ "sha256": "7c91c5a04555bf78ed9624df1aa74d106cbae2740e4225d3a7879e33460a3a2d"
+ },
+ {
+ "origin": "http://127.0.0.1:6180",
+ "code": "TASK-VIRTUAL-008",
+ "file": "bridge-balance-valve-swap-v3.jpg",
+ "bytes": 127584,
+ "sha256": "65b393e12d6d06fb11d090161e68920dae4851f56c2abf6b03fcf05e25ae9687"
+ },
+ {
+ "origin": "http://192.168.31.168:6180",
+ "code": "TASK-VIRTUAL-005",
+ "file": "bridge-pump-switch-v2.jpg",
+ "bytes": 148324,
+ "sha256": "be4c4c61e0747ba9783c294443897f46a00c74edacd2bb937d69e69185b7a3aa"
+ },
+ {
+ "origin": "http://192.168.31.168:6180",
+ "code": "TASK-VIRTUAL-006",
+ "file": "bridge-pump-substitute-v3.jpg",
+ "bytes": 156852,
+ "sha256": "931df276a06f2a09d77127b91ea695615180fe934f5b2b7d876ca2e391595af4"
+ },
+ {
+ "origin": "http://192.168.31.168:6180",
+ "code": "TASK-VIRTUAL-007",
+ "file": "bridge-pump-replace-v3-overview.jpg",
+ "bytes": 146917,
+ "sha256": "7c91c5a04555bf78ed9624df1aa74d106cbae2740e4225d3a7879e33460a3a2d"
+ },
+ {
+ "origin": "http://192.168.31.168:6180",
+ "code": "TASK-VIRTUAL-008",
+ "file": "bridge-balance-valve-swap-v3.jpg",
+ "bytes": 127584,
+ "sha256": "65b393e12d6d06fb11d090161e68920dae4851f56c2abf6b03fcf05e25ae9687"
+ }
+ ],
+ "errors": [],
+ "businessWrites": []
+}
\ No newline at end of file
diff --git a/reports/bridge-workbook-review-20260917/current-tasks.json b/reports/bridge-workbook-review-20260917/current-tasks.json
new file mode 100644
index 0000000..59ce360
--- /dev/null
+++ b/reports/bridge-workbook-review-20260917/current-tasks.json
@@ -0,0 +1,6231 @@
+[
+ {
+ "id": "86",
+ "code": "TASK-VIRTUAL-005",
+ "name": "重型支援桥液压泵应急切换",
+ "version": "533",
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-pump-switch",
+ "scriptVersion": "2"
+ },
+ "steps": [
+ {
+ "id": "front-pump-step-01",
+ "code": "FRONT-PUMP-STEP-01",
+ "stepCode": "front-pump-step-01",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-01",
+ "number": 1,
+ "title": "根据故障现象确定是哪一个液压泵发生故障",
+ "targetId": "front-pump-hydraulic-pump",
+ "targetName": "液压泵",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "guidance": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "warning": "",
+ "destination": "液压泵",
+ "success": "根据故障现象确定是哪一个液压泵发生故障",
+ "cameraPolicy": "exterior",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-hydraulic-pump",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "identify",
+ "axisSpace": "world",
+ "highlightColor": "#e53935",
+ "steps": [
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-hydraulic-pump",
+ "targetNodeName": "1液压泵",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,确定故障液压泵。根据故障现象确定发生故障的液压泵。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_FF17FDE117E94B80BB30DF3E058821FD",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "53",
+ "videoName": "重型支援桥液压泵应急切换 · 1 根据故障现象确定是哪一个液压泵发生故障",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-02",
+ "code": "FRONT-PUMP-STEP-02",
+ "stepCode": "front-pump-step-02",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-02",
+ "number": 2,
+ "title": "断开架桥车取力器",
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "guidance": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "断开架桥车取力器",
+ "cameraPolicy": "exterior",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": -30,
+ "toleranceDegrees": 6,
+ "directionHint": "向断开方向摇动"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "2取力器开关",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,断开架桥车取力器。将架桥车取力器断开。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_6E75DADE9D0649DCA16A2499D1EE8776",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "54",
+ "videoName": "重型支援桥液压泵应急切换 · 2 断开架桥车取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-03",
+ "code": "FRONT-PUMP-STEP-03",
+ "stepCode": "front-pump-step-03",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-03",
+ "number": 3,
+ "title": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "targetId": "front-pump-ball-valve-switch",
+ "targetName": "球阀开关",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "guidance": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "warning": "",
+ "destination": "球阀开关",
+ "success": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-ball-valve-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "steps": [
+ {
+ "targetId": "front-pump-ball-valve-switch",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "由垂直与官道方向旋转至平行于管道方向"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-ball-valve-switch",
+ "targetNodeName": "3球阀开关",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,打开互救球阀。打开备胎上方两个红色滤油器之间的连通球阀,手柄由垂直管道转为平行管道。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_9A4629F90E614E60835441B5D0AAE86C",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "55",
+ "videoName": "重型支援桥液压泵应急切换 · 3 将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-04",
+ "code": "FRONT-PUMP-STEP-04",
+ "stepCode": "front-pump-step-04",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-04",
+ "number": 4,
+ "title": "重新联通取力器",
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "guidance": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "重新联通取力器",
+ "cameraPolicy": "exterior",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "按步骤2的相反方向摇回去"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "2取力器开关",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,重新接通取力器。将架桥车取力器重新接通。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_DA42FE5C995F4C67A559E6E94DB1C440",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "56",
+ "videoName": "重型支援桥液压泵应急切换 · 4 重新联通取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ },
+ {
+ "id": "front-pump-step-05",
+ "code": "FRONT-PUMP-STEP-05",
+ "stepCode": "front-pump-step-05",
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-05",
+ "number": 5,
+ "title": "打开辅助控制盒内的“互救”开关",
+ "targetId": "front-pump-aux-control-box-cover",
+ "targetName": "辅助控制盒盖",
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "guidance": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "warning": "",
+ "destination": "辅助控制盒盖",
+ "success": "打开辅助控制盒内的“互救”开关",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-aux-control-box-cover",
+ "mode": "inspect",
+ "durationMs": 1600,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "sequence",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-aux-control-box"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-aux-control-box-cover",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 100,
+ "toleranceDegrees": 8,
+ "directionHint": "沿控制盒盖边缘铰链打开",
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ }
+ },
+ {
+ "targetId": "front-pump-rescue-switch",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "往上搬"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "targetNodeId": "front-pump-aux-control-box-cover",
+ "targetNodeName": "5辅助控制盒盖",
+ "measurement": "",
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,打开辅助控制盒互救开关。打开辅助控制盒盖,再打开互救开关,进入单泵作业状态。",
+ "narrationUrl": "",
+ "safetyText": "",
+ "safetyUrl": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D85C34259BB34E0C966C5A79569DBF10",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "57",
+ "videoName": "重型支援桥液压泵应急切换 · 5 打开辅助控制盒内的“互救”开关",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ },
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ }
+ }
+ ],
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1液压泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "2取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "2取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "3球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "5辅助控制盒",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "5辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "5互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true
+ }
+ ],
+ "sourceName": "步骤模型.glb",
+ "resourceUrl": "/models/步骤模型.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 32195288,
+ "fitToScene": true,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ }
+ ]
+ },
+ {
+ "id": "87",
+ "code": "TASK-VIRTUAL-006",
+ "name": "重型支援桥液压泵应急替代",
+ "version": "553",
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-pump-substitute",
+ "scriptVersion": "4"
+ },
+ "steps": [
+ {
+ "id": "BRIDGE-STEP-1",
+ "stepCode": "BRIDGE-STEP-1",
+ "actionCode": "COMPLETE_BRIDGE-STEP-1",
+ "number": 1,
+ "title": "保持架桥车运行并断开取力器",
+ "targetId": "bridge-engine",
+ "targetName": "保持架桥车发动机运行",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "保持架桥车发动机运转,确保架桥车取力器处于断开状态。",
+ "guidance": "保持架桥车发动机运转,确保架桥车取力器处于断开状态。",
+ "warning": "",
+ "success": "保持架桥车运行并断开取力器:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-engine",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "保持架桥车发动机运行",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 2209160
+ }
+ ]
+ },
+ {
+ "targetId": "front-pump-pto-switch",
+ "kind": "rotate",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": -30,
+ "toleranceDegrees": 8,
+ "directionHint": "断开架桥车取力器"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,保持架桥车运行并断开取力器。保持架桥车发动机运转,确保架桥车取力器处于断开状态。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_5AEA5274E6664D43B8C53F55859D5717",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "58",
+ "videoName": "重型支援桥液压泵应急替代 · 1 保持架桥车运行并断开取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-2",
+ "stepCode": "BRIDGE-STEP-2",
+ "actionCode": "COMPLETE_BRIDGE-STEP-2",
+ "number": 2,
+ "title": "连接两车液压软管",
+ "targetId": "bridge-hose-a",
+ "targetName": "连接架桥车快速接头",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "连接支援车与架桥车液压软管。架桥车快接接头位于液压油箱右侧;支援车快接接头位于驾驶室外右下方。",
+ "guidance": "连接支援车与架桥车液压软管。架桥车快接接头位于液压油箱右侧;支援车快接接头位于驾驶室外右下方。",
+ "warning": "",
+ "success": "连接两车液压软管:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-hose-a",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-hose-a",
+ "kind": "identify",
+ "directionHint": "连接架桥车快速接头",
+ "effects": [
+ {
+ "targetId": "bridge-hose-a",
+ "offset": [
+ 0,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-hose-line",
+ "visible": true
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-hose-b",
+ "kind": "identify",
+ "directionHint": "连接保障车快速接头",
+ "effects": [
+ {
+ "targetId": "bridge-hose-b",
+ "offset": [
+ 0,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-return-line",
+ "visible": true
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,连接两车液压软管。连接支援车与架桥车液压软管。架桥车快接接头位于液压油箱右侧;支援车快接接头位于驾驶室外右下方。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_B9F2CBFE36274528825899153DB98195",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "59",
+ "videoName": "重型支援桥液压泵应急替代 · 2 连接两车液压软管",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-3",
+ "stepCode": "BRIDGE-STEP-3",
+ "actionCode": "COMPLETE_BRIDGE-STEP-3",
+ "number": 3,
+ "title": "打开支援车回油截止阀",
+ "targetId": "bridge-return-valve",
+ "targetName": "打开保障车回油截止阀",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开支援车液压油箱快接接头处的回油截止阀。",
+ "guidance": "打开支援车液压油箱快接接头处的回油截止阀。",
+ "warning": "",
+ "success": "打开支援车回油截止阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-return-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "rotate",
+ "steps": [
+ {
+ "targetId": "bridge-return-valve",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "打开保障车回油截止阀"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,打开支援车回油截止阀。打开支援车液压油箱快接接头处的回油截止阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_983218ACA84345B5B032A5DFA8F08E4E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "60",
+ "videoName": "重型支援桥液压泵应急替代 · 3 打开支援车回油截止阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-4",
+ "stepCode": "BRIDGE-STEP-4",
+ "actionCode": "COMPLETE_BRIDGE-STEP-4",
+ "number": 4,
+ "title": "打开互救作业开关",
+ "targetId": "front-pump-aux-control-box-cover",
+ "targetName": "打开辅助控制盒盖",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开辅助控制盒上的“互救作业”开关。",
+ "guidance": "打开辅助控制盒上的“互救作业”开关。",
+ "warning": "",
+ "success": "打开互救作业开关:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-aux-control-box-cover",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "front-pump-aux-control-box-cover",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "deltaDegrees": 100,
+ "toleranceDegrees": 8,
+ "directionHint": "打开辅助控制盒盖"
+ },
+ {
+ "targetId": "front-pump-rescue-switch",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 8,
+ "directionHint": "打开互救作业开关"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,打开互救作业开关。打开辅助控制盒上的“互救作业”开关。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_AC0F121CD04B44B5A373BE82D5083AE1",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "61",
+ "videoName": "重型支援桥液压泵应急替代 · 4 打开互救作业开关",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-5",
+ "stepCode": "BRIDGE-STEP-5",
+ "actionCode": "COMPLETE_BRIDGE-STEP-5",
+ "number": 5,
+ "title": "打开滤油器出口连通球阀",
+ "targetId": "bridge-filter-valve-1",
+ "targetName": "滤油器出口球阀 1",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开两个输油滤油器出口处的连通球阀。",
+ "guidance": "打开两个输油滤油器出口处的连通球阀。",
+ "warning": "",
+ "success": "打开滤油器出口连通球阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-filter-valve-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-filter-valve-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "打开第 1 个滤油器出口球阀"
+ },
+ {
+ "targetId": "bridge-filter-valve-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "打开第 2 个滤油器出口球阀"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,打开滤油器出口连通球阀。打开两个输油滤油器出口处的连通球阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_774F7400E0B54F4696EBDAD800A289C3",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "62",
+ "videoName": "重型支援桥液压泵应急替代 · 5 打开滤油器出口连通球阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-6",
+ "stepCode": "BRIDGE-STEP-6",
+ "actionCode": "COMPLETE_BRIDGE-STEP-6",
+ "number": 6,
+ "title": "接通支援车液压取力器",
+ "targetId": "bridge-support-pto",
+ "targetName": "接通保障车取力器",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "接通支援车液压系统取力器,向架桥车供油。",
+ "guidance": "接通支援车液压系统取力器,向架桥车供油。",
+ "warning": "",
+ "success": "接通支援车液压取力器:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-support-pto",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-support-pto",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 8,
+ "directionHint": "接通保障车取力器"
+ },
+ {
+ "targetId": "bridge-supply",
+ "kind": "identify",
+ "directionHint": "观察供油示意",
+ "effects": [
+ {
+ "targetId": "bridge-hose-line",
+ "color": 15312947
+ },
+ {
+ "targetId": "bridge-return-line",
+ "color": 3325905
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第6步,接通支援车液压取力器。接通支援车液压系统取力器,向架桥车供油。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_64D9ECF315DA41568D936CFEBF28E403",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "63",
+ "videoName": "重型支援桥液压泵应急替代 · 6 接通支援车液压取力器",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-7",
+ "stepCode": "BRIDGE-STEP-7",
+ "actionCode": "COMPLETE_BRIDGE-STEP-7",
+ "number": 7,
+ "title": "按正常步骤操作架桥车",
+ "targetId": "bridge-normal-control",
+ "targetName": "操作正常作业控制手柄",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "原图只概括“按正常操作步骤操作架桥车”,没有展开后续作业。",
+ "guidance": "原图只概括“按正常操作步骤操作架桥车”,没有展开后续作业。",
+ "warning": "该项为原稿概括项,本预演不代表后续正常作业已经完成。",
+ "success": "按正常步骤操作架桥车:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-normal-control",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-normal-control",
+ "kind": "identify",
+ "directionHint": "操作正常作业控制手柄",
+ "effects": [
+ {
+ "targetId": "bridge-normal-control",
+ "offset": [
+ 0,
+ 0,
+ -0.25
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 14.285714285714286,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第7步,按正常步骤操作架桥车。原图只概括“按正常操作步骤操作架桥车”,没有展开后续作业。该项为原稿概括项,本预演不代表后续正常作业已经完成。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_356ADFCC874448D28ADB2DF8067582E8",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "64",
+ "videoName": "重型支援桥液压泵应急替代 · 7 按正常步骤操作架桥车",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ }
+ ],
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ }
+ ],
+ "sourceName": "0916架桥车.glb",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "support-vehicle",
+ "sceneId": "support-vehicle",
+ "interactionId": "scene:support-vehicle",
+ "type": "imported",
+ "name": "0916保障车.glb",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "support-vehicle",
+ "modelEditorAssetId": "support-vehicle",
+ "modelEditorModelId": "support-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "0916保障车.glb",
+ "resourceUrl": "/models/bridge-support-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "rescue-hoses",
+ "sceneId": "rescue-hoses",
+ "interactionId": "scene:rescue-hoses",
+ "type": "imported",
+ "name": "双车连接油管.glb",
+ "semantic": "实训装备",
+ "assetRole": "script-accessory",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "rescue-hoses",
+ "modelEditorAssetId": "rescue-hoses",
+ "modelEditorModelId": "rescue-hoses",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "双车连接油管.glb",
+ "resourceUrl": "/models/bridge-rescue-hoses-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ }
+ ]
+ },
+ {
+ "id": "88",
+ "code": "TASK-VIRTUAL-007",
+ "name": "重型支援桥前泵换件修复",
+ "version": "554",
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-pump-replace",
+ "scriptVersion": "4"
+ },
+ "steps": [
+ {
+ "id": "BRIDGE-STEP-1",
+ "stepCode": "BRIDGE-STEP-1",
+ "actionCode": "COMPLETE_BRIDGE-STEP-1",
+ "number": 1,
+ "title": "停机并初裁牛皮纸",
+ "targetId": "bridge-engine",
+ "targetName": "关闭架桥车发动机",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "架桥车熄火;按液压泵与取力器结合面形状初步裁剪牛皮纸。",
+ "guidance": "架桥车熄火;按液压泵与取力器结合面形状初步裁剪牛皮纸。",
+ "warning": "",
+ "success": "停机并初裁牛皮纸:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-engine",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "关闭架桥车发动机",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 13195851
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-paper",
+ "kind": "identify",
+ "directionHint": "按结合面初裁牛皮纸",
+ "effects": [
+ {
+ "targetId": "bridge-paper",
+ "scale": [
+ 0.85,
+ 1,
+ 0.85
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,停机并初裁牛皮纸。架桥车熄火;按液压泵与取力器结合面形状初步裁剪牛皮纸。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_1CE71ECA76194F06B098A012B360BB06",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "65",
+ "videoName": "重型支援桥前泵换件修复 · 1 停机并初裁牛皮纸",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-2",
+ "stepCode": "BRIDGE-STEP-2",
+ "actionCode": "COMPLETE_BRIDGE-STEP-2",
+ "number": 2,
+ "title": "关闭液压油箱出油口一号球阀",
+ "targetId": "bridge-tank-valve",
+ "targetName": "关闭一号出油球阀",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将一号球阀手柄从平行管道转到垂直管道。",
+ "guidance": "将一号球阀手柄从平行管道转到垂直管道。",
+ "warning": "",
+ "success": "关闭液压油箱出油口一号球阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-tank-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "rotate",
+ "steps": [
+ {
+ "targetId": "bridge-tank-valve",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "关闭一号出油球阀"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,关闭液压油箱出油口一号球阀。将一号球阀手柄从平行管道转到垂直管道。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_34129B61FA1F4E628AF295E3EF714364",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "66",
+ "videoName": "重型支援桥前泵换件修复 · 2 关闭液压油箱出油口一号球阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-3",
+ "stepCode": "BRIDGE-STEP-3",
+ "actionCode": "COMPLETE_BRIDGE-STEP-3",
+ "number": 3,
+ "title": "拆开并包扎进出油管",
+ "targetId": "bridge-inlet",
+ "targetName": "拆开进油管",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用大活动扳手拆开液压泵进、出油管接头,用塑料袋包扎管口。",
+ "guidance": "用大活动扳手拆开液压泵进、出油管接头,用塑料袋包扎管口。",
+ "warning": "",
+ "success": "拆开并包扎进出油管:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-inlet",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-inlet",
+ "kind": "identify",
+ "directionHint": "拆开进油管",
+ "effects": [
+ {
+ "targetId": "bridge-inlet",
+ "offset": [
+ -0.6,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-inlet-bag",
+ "kind": "identify",
+ "directionHint": "包扎进油管口",
+ "effects": [
+ {
+ "targetId": "bridge-inlet-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet",
+ "kind": "identify",
+ "directionHint": "拆开出油管",
+ "effects": [
+ {
+ "targetId": "bridge-outlet",
+ "offset": [
+ 0.6,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet-bag",
+ "kind": "identify",
+ "directionHint": "包扎出油管口",
+ "effects": [
+ {
+ "targetId": "bridge-outlet-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,拆开并包扎进出油管。用大活动扳手拆开液压泵进、出油管接头,用塑料袋包扎管口。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_533EAE94D45D49A2BECD7E24E48835E6",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "67",
+ "videoName": "重型支援桥前泵换件修复 · 3 拆开并包扎进出油管",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-4",
+ "stepCode": "BRIDGE-STEP-4",
+ "actionCode": "COMPLETE_BRIDGE-STEP-4",
+ "number": 4,
+ "title": "拆下四个安装螺栓",
+ "targetId": "bridge-pump-bolt-1",
+ "targetName": "拆下第 1 个安装螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用开口扳手拆下液压泵与取力器之间的四个安装螺栓。",
+ "guidance": "用开口扳手拆下液压泵与取力器之间的四个安装螺栓。",
+ "warning": "",
+ "success": "拆下四个安装螺栓:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-pump-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 1 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 2 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 3 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 4 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,拆下四个安装螺栓。用开口扳手拆下液压泵与取力器之间的四个安装螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_787B4C212CF644AE9A3D8D49DEDCB65E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "68",
+ "videoName": "重型支援桥前泵换件修复 · 4 拆下四个安装螺栓",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-5",
+ "stepCode": "BRIDGE-STEP-5",
+ "actionCode": "COMPLETE_BRIDGE-STEP-5",
+ "number": 5,
+ "title": "取下旧前泵",
+ "targetId": "bridge-old-pump",
+ "targetName": "取下旧前泵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "取下原前泵。",
+ "guidance": "取下原前泵。",
+ "warning": "",
+ "success": "取下旧前泵:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-old-pump",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-old-pump",
+ "kind": "identify",
+ "directionHint": "取下旧前泵",
+ "effects": [
+ {
+ "targetId": "bridge-old-pump",
+ "offset": [
+ -2,
+ 0,
+ 0
+ ]
+ },
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "visible": false
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,取下旧前泵。取下原前泵。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_5672FD367E8F41A5A026E3C68E8C8726",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "69",
+ "videoName": "重型支援桥前泵换件修复 · 5 取下旧前泵",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-6",
+ "stepCode": "BRIDGE-STEP-6",
+ "actionCode": "COMPLETE_BRIDGE-STEP-6",
+ "number": 6,
+ "title": "修裁牛皮纸",
+ "targetId": "bridge-paper",
+ "targetName": "按安装面修裁纸垫",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "进一步裁剪牛皮纸,使其与液压泵安装面及取力器结合面吻合。",
+ "guidance": "进一步裁剪牛皮纸,使其与液压泵安装面及取力器结合面吻合。",
+ "warning": "",
+ "success": "修裁牛皮纸:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-paper",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-paper",
+ "kind": "identify",
+ "directionHint": "按安装面修裁纸垫",
+ "effects": [
+ {
+ "targetId": "bridge-gasket",
+ "visible": true
+ },
+ {
+ "targetId": "bridge-paper",
+ "visible": false
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第6步,修裁牛皮纸。进一步裁剪牛皮纸,使其与液压泵安装面及取力器结合面吻合。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_C0E73EC20FD44C608A795A03DE4F7401",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "70",
+ "videoName": "重型支援桥前泵换件修复 · 6 修裁牛皮纸",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-7",
+ "stepCode": "BRIDGE-STEP-7",
+ "actionCode": "COMPLETE_BRIDGE-STEP-7",
+ "number": 7,
+ "title": "放置牛皮纸垫",
+ "targetId": "bridge-gasket",
+ "targetName": "将纸垫放到取力器结合面",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将裁好的牛皮纸放在取力器接口处。",
+ "guidance": "将裁好的牛皮纸放在取力器接口处。",
+ "warning": "",
+ "success": "放置牛皮纸垫:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-gasket",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-gasket",
+ "kind": "identify",
+ "directionHint": "将纸垫放到取力器结合面",
+ "effects": [
+ {
+ "targetId": "bridge-gasket",
+ "offset": [
+ 2.3,
+ 0,
+ -0.4
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第7步,放置牛皮纸垫。将裁好的牛皮纸放在取力器接口处。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_17FAC41643804A22A8B71A2FF8DCBC28",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "71",
+ "videoName": "重型支援桥前泵换件修复 · 7 放置牛皮纸垫",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-8",
+ "stepCode": "BRIDGE-STEP-8",
+ "actionCode": "COMPLETE_BRIDGE-STEP-8",
+ "number": 8,
+ "title": "安装新液压泵",
+ "targetId": "bridge-new-pump",
+ "targetName": "安装新泵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "安装新的液压泵。原稿没有给出拧紧力矩。",
+ "guidance": "安装新的液压泵。原稿没有给出拧紧力矩。",
+ "warning": "",
+ "success": "安装新液压泵:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-new-pump",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-new-pump",
+ "kind": "identify",
+ "directionHint": "安装新泵",
+ "effects": [
+ {
+ "targetId": "bridge-new-pump",
+ "offset": [
+ -2,
+ 0,
+ 0
+ ]
+ },
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "visible": true
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 1 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 2 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 3 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "安装第 4 个安装螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-pump-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第8步,安装新液压泵。安装新的液压泵。原稿没有给出拧紧力矩。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_2284ABD91F544E2EB7799E9FA1C4BCF6",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "72",
+ "videoName": "重型支援桥前泵换件修复 · 8 安装新液压泵",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-9",
+ "stepCode": "BRIDGE-STEP-9",
+ "actionCode": "COMPLETE_BRIDGE-STEP-9",
+ "number": 9,
+ "title": "向新泵加注液压油",
+ "targetId": "bridge-fill-cap",
+ "targetName": "打开加油口",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "打开新液压泵加油口,加注液压油。原稿没有给出定量值。",
+ "guidance": "打开新液压泵加油口,加注液压油。原稿没有给出定量值。",
+ "warning": "",
+ "success": "向新泵加注液压油:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-fill-cap",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-fill-cap",
+ "kind": "identify",
+ "directionHint": "打开加油口",
+ "effects": [
+ {
+ "targetId": "bridge-fill-cap",
+ "offset": [
+ 0,
+ 0.45,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-oil-can",
+ "kind": "identify",
+ "directionHint": "向新泵加注液压油",
+ "effects": [
+ {
+ "targetId": "bridge-oil-can",
+ "offset": [
+ -1.3,
+ 0.6,
+ -0.3
+ ]
+ },
+ {
+ "targetId": "bridge-oil-stream",
+ "visible": true
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第9步,向新泵加注液压油。打开新液压泵加油口,加注液压油。原稿没有给出定量值。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_BF468C49DDCB462E8E2C75CF8C6BD172",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "73",
+ "videoName": "重型支援桥前泵换件修复 · 9 向新泵加注液压油",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-10",
+ "stepCode": "BRIDGE-STEP-10",
+ "actionCode": "COMPLETE_BRIDGE-STEP-10",
+ "number": 10,
+ "title": "恢复进出油管连接",
+ "targetId": "bridge-inlet-bag",
+ "targetName": "取下进油管封口袋",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用大活动扳手连接并拧紧液压泵进、出油管。",
+ "guidance": "用大活动扳手连接并拧紧液压泵进、出油管。",
+ "warning": "",
+ "success": "恢复进出油管连接:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-inlet-bag",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-inlet-bag",
+ "kind": "identify",
+ "directionHint": "取下进油管封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-inlet-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-inlet",
+ "kind": "identify",
+ "directionHint": "连接并拧紧进油管",
+ "effects": [
+ {
+ "targetId": "bridge-inlet",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet-bag",
+ "kind": "identify",
+ "directionHint": "取下出油管封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-outlet-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-outlet",
+ "kind": "identify",
+ "directionHint": "连接并拧紧出油管",
+ "effects": [
+ {
+ "targetId": "bridge-outlet",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第10步,恢复进出油管连接。用大活动扳手连接并拧紧液压泵进、出油管。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_88908FEBE6054EE99087F8653A8C5FAA",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "74",
+ "videoName": "重型支援桥前泵换件修复 · 10 恢复进出油管连接",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-11",
+ "stepCode": "BRIDGE-STEP-11",
+ "actionCode": "COMPLETE_BRIDGE-STEP-11",
+ "number": 11,
+ "title": "启动设备试验",
+ "targetId": "bridge-engine",
+ "targetName": "启动设备试验",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "启动设备进行试验。原稿没有展开具体试验项目和判定数值。",
+ "guidance": "启动设备进行试验。原稿没有展开具体试验项目和判定数值。",
+ "warning": "",
+ "success": "启动设备试验:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-engine",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-engine",
+ "kind": "identify",
+ "directionHint": "启动设备试验",
+ "effects": [
+ {
+ "targetId": "bridge-engine",
+ "color": 2209160
+ },
+ {
+ "targetId": "bridge-oil-stream",
+ "visible": false
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-test-control",
+ "kind": "identify",
+ "directionHint": "操作试验手柄并观察",
+ "effects": [
+ {
+ "targetId": "bridge-test-control",
+ "offset": [
+ 0,
+ 0,
+ -0.25
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 9.090909090909092,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第11步,启动设备试验。启动设备进行试验。原稿没有展开具体试验项目和判定数值。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_4D873387CF324AAF9C6D3BE1A72C247E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "75",
+ "videoName": "重型支援桥前泵换件修复 · 11 启动设备试验",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ }
+ ],
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ }
+ ],
+ "sourceName": "0916架桥车.glb",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "pump-bags",
+ "sceneId": "pump-bags",
+ "interactionId": "scene:pump-bags",
+ "type": "imported",
+ "name": "3封口袋.glb",
+ "semantic": "实训装备",
+ "assetRole": "script-accessory",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "pump-bags",
+ "modelEditorAssetId": "pump-bags",
+ "modelEditorModelId": "pump-bags",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "3封口袋.glb",
+ "resourceUrl": "/models/bridge-pump-bags-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "gasket-paper",
+ "sceneId": "gasket-paper",
+ "interactionId": "scene:gasket-paper",
+ "type": "imported",
+ "name": "牛皮纸.glb",
+ "semantic": "实训装备",
+ "assetRole": "script-accessory",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "gasket-paper",
+ "modelEditorAssetId": "gasket-paper",
+ "modelEditorModelId": "gasket-paper",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "牛皮纸.glb",
+ "resourceUrl": "/models/bridge-paper-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ }
+ ]
+ },
+ {
+ "id": "89",
+ "code": "TASK-VIRTUAL-008",
+ "name": "重型支援桥平衡阀拆拼互换",
+ "version": "555",
+ "runtime": {
+ "startMode": "practice",
+ "offline": true,
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN",
+ "definitionSource": "SCRIPT",
+ "scriptId": "bridge-balance-valve-swap",
+ "scriptVersion": "4"
+ },
+ "steps": [
+ {
+ "id": "BRIDGE-STEP-1",
+ "stepCode": "BRIDGE-STEP-1",
+ "actionCode": "COMPLETE_BRIDGE-STEP-1",
+ "number": 1,
+ "title": "清洗小腔平衡阀",
+ "targetId": "bridge-small-cloth",
+ "targetName": "清洗并擦净阀体",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "guidance": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "warning": "",
+ "success": "清洗小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-cloth",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-small-cloth",
+ "kind": "identify",
+ "directionHint": "清洗并擦净阀体",
+ "effects": [
+ {
+ "targetId": "bridge-small-cloth",
+ "offset": [
+ 0.7,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-small-valve",
+ "color": 8492701
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第1步,清洗小腔平衡阀。用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_76F80444AA9C4C3183A0EEDF6E655C25",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "76",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 1 清洗小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-2",
+ "stepCode": "BRIDGE-STEP-2",
+ "actionCode": "COMPLETE_BRIDGE-STEP-2",
+ "number": 2,
+ "title": "拆开小腔控制油口管路",
+ "targetId": "bridge-small-pipe",
+ "targetName": "拆开控制油管",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "guidance": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "warning": "",
+ "success": "拆开小腔控制油口管路:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-pipe",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-pipe",
+ "kind": "identify",
+ "directionHint": "拆开控制油管",
+ "effects": [
+ {
+ "targetId": "bridge-small-pipe",
+ "offset": [
+ 0.55,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bag",
+ "kind": "identify",
+ "directionHint": "封袋包扎管口",
+ "effects": [
+ {
+ "targetId": "bridge-small-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第2步,拆开小腔控制油口管路。用十九号开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_EAF5F0A89D454E6FBAFB061C93D2F760",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "77",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 2 拆开小腔控制油口管路",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-3",
+ "stepCode": "BRIDGE-STEP-3",
+ "actionCode": "COMPLETE_BRIDGE-STEP-3",
+ "number": 3,
+ "title": "拆下小腔平衡阀",
+ "targetId": "bridge-small-bolt-1",
+ "targetName": "拆下第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "guidance": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "warning": "",
+ "success": "拆下小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-valve",
+ "kind": "identify",
+ "directionHint": "取下平衡阀",
+ "effects": [
+ {
+ "targetId": "bridge-small-valve",
+ "offset": [
+ 0,
+ 0,
+ 1.2
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第3步,拆下小腔平衡阀。用八号内六角扳手拆下安装螺栓,取下平衡阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_981034D69E3047C6B9D1DAE9BBF4F7D4",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "78",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 3 拆下小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-4",
+ "stepCode": "BRIDGE-STEP-4",
+ "actionCode": "COMPLETE_BRIDGE-STEP-4",
+ "number": 4,
+ "title": "封堵小腔油口",
+ "targetId": "bridge-small-plug-1",
+ "targetName": "封堵第 1 个油堵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "guidance": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "warning": "",
+ "success": "封堵小腔油口:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-plug-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-plug-1",
+ "kind": "identify",
+ "directionHint": "封堵第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-plug-2",
+ "kind": "identify",
+ "directionHint": "封堵第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-seat",
+ "kind": "identify",
+ "directionHint": "擦净阀座结合面",
+ "effects": [
+ {
+ "targetId": "bridge-small-seat",
+ "color": 12965080
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第4步,封堵小腔油口。用两个油堵封住两个油口,擦净阀座结合面。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_60D40306A9E74E96ADD7641932934BE4",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "79",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 4 封堵小腔油口",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-5",
+ "stepCode": "BRIDGE-STEP-5",
+ "actionCode": "COMPLETE_BRIDGE-STEP-5",
+ "number": 5,
+ "title": "清洗大腔平衡阀",
+ "targetId": "bridge-large-cloth",
+ "targetName": "清洗并擦净阀体",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "guidance": "用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "warning": "",
+ "success": "清洗大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-cloth",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "identify",
+ "steps": [
+ {
+ "targetId": "bridge-large-cloth",
+ "kind": "identify",
+ "directionHint": "清洗并擦净阀体",
+ "effects": [
+ {
+ "targetId": "bridge-large-cloth",
+ "offset": [
+ 0.7,
+ 0,
+ -0.7
+ ]
+ },
+ {
+ "targetId": "bridge-large-valve",
+ "color": 8492701
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第5步,清洗大腔平衡阀。用清洗剂清洗平衡阀和管接头,并用抹布擦净。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_A6EFEC7D339E4BA8994C525CA3709E2E",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "80",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 5 清洗大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-6",
+ "stepCode": "BRIDGE-STEP-6",
+ "actionCode": "COMPLETE_BRIDGE-STEP-6",
+ "number": 6,
+ "title": "拆开大腔控制油口管路",
+ "targetId": "bridge-large-pipe",
+ "targetName": "拆开控制油管",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "guidance": "用19开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "warning": "",
+ "success": "拆开大腔控制油口管路:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-pipe",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-pipe",
+ "kind": "identify",
+ "directionHint": "拆开控制油管",
+ "effects": [
+ {
+ "targetId": "bridge-large-pipe",
+ "offset": [
+ 0.55,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bag",
+ "kind": "identify",
+ "directionHint": "封袋包扎管口",
+ "effects": [
+ {
+ "targetId": "bridge-large-bag",
+ "offset": [
+ 0,
+ 0,
+ -0.65
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第6步,拆开大腔控制油口管路。用十九号开口扳手拆开控制油口管路,用塑料袋包扎管口。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D9E1BAFBD89D48019B9445B2A5752E68",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "81",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 6 拆开大腔控制油口管路",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-7",
+ "stepCode": "BRIDGE-STEP-7",
+ "actionCode": "COMPLETE_BRIDGE-STEP-7",
+ "number": 7,
+ "title": "拆下大腔平衡阀",
+ "targetId": "bridge-large-bolt-1",
+ "targetName": "拆下第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "guidance": "用8内六角扳手拆下安装螺栓,取下平衡阀。",
+ "warning": "",
+ "success": "拆下大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": -180,
+ "toleranceDegrees": 8,
+ "directionHint": "拆下第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0.65
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-valve",
+ "kind": "identify",
+ "directionHint": "取下平衡阀",
+ "effects": [
+ {
+ "targetId": "bridge-large-valve",
+ "offset": [
+ 0,
+ 0,
+ 1.2
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第7步,拆下大腔平衡阀。用八号内六角扳手拆下安装螺栓,取下平衡阀。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_E83DDAB19F774A418C82EBA7E8EDCF8A",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "82",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 7 拆下大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-8",
+ "stepCode": "BRIDGE-STEP-8",
+ "actionCode": "COMPLETE_BRIDGE-STEP-8",
+ "number": 8,
+ "title": "封堵大腔油口",
+ "targetId": "bridge-large-plug-1",
+ "targetName": "封堵第 1 个油堵",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "guidance": "用两个油堵封住两个油口,擦净阀座结合面。",
+ "warning": "",
+ "success": "封堵大腔油口:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-plug-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-plug-1",
+ "kind": "identify",
+ "directionHint": "封堵第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-plug-2",
+ "kind": "identify",
+ "directionHint": "封堵第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-seat",
+ "kind": "identify",
+ "directionHint": "擦净阀座结合面",
+ "effects": [
+ {
+ "targetId": "bridge-large-seat",
+ "color": 12965080
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第8步,封堵大腔油口。用两个油堵封住两个油口,擦净阀座结合面。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_4FE31068F3EB410BAC72E19F1D1BAF49",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "83",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 8 封堵大腔油口",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-9",
+ "stepCode": "BRIDGE-STEP-9",
+ "actionCode": "COMPLETE_BRIDGE-STEP-9",
+ "number": 9,
+ "title": "准备安装大腔平衡阀",
+ "targetId": "bridge-large-seat",
+ "targetName": "擦净安装结合面",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "guidance": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "warning": "",
+ "success": "准备安装大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-seat",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-seat",
+ "kind": "identify",
+ "directionHint": "擦净安装结合面",
+ "effects": [
+ {
+ "targetId": "bridge-large-seat",
+ "color": 14477797
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-plug-1",
+ "kind": "identify",
+ "directionHint": "取下第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-1",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-plug-2",
+ "kind": "identify",
+ "directionHint": "取下第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-large-plug-2",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第9步,准备安装大腔平衡阀。擦净平衡阀及阀座结合面,取下两个油堵。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D0A3CAC5278C4A57AC9BEF13DA2690BC",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "84",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 9 准备安装大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-10",
+ "stepCode": "BRIDGE-STEP-10",
+ "actionCode": "COMPLETE_BRIDGE-STEP-10",
+ "number": 10,
+ "title": "安装大腔平衡阀",
+ "targetId": "bridge-small-valve",
+ "targetName": "将互换平衡阀装到阀座",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "guidance": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "warning": "",
+ "success": "安装大腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-valve",
+ "kind": "identify",
+ "directionHint": "将互换平衡阀装到阀座",
+ "effects": [
+ {
+ "targetId": "bridge-small-valve",
+ "offset": [
+ 3.2,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第10步,安装大腔平衡阀。将平衡阀放置于阀座上,用八号内六角扳手安装四个安装螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_0F40DAF3E28F4FA088EA943D9470CAA7",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "85",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 10 安装大腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-11",
+ "stepCode": "BRIDGE-STEP-11",
+ "actionCode": "COMPLETE_BRIDGE-STEP-11",
+ "number": 11,
+ "title": "核对大腔控制油口管路连接",
+ "targetId": "bridge-large-bag",
+ "targetName": "取下封口袋",
+ "mode": "measure",
+ "interaction": "mechanism-operation",
+ "instruction": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "guidance": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "warning": "请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "success": "核对大腔控制油口管路连接:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-bag",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-bag",
+ "kind": "identify",
+ "directionHint": "取下封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-large-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-pipe",
+ "kind": "identify",
+ "directionHint": "按记录的处理依据连接管路",
+ "effects": [
+ {
+ "targetId": "bridge-large-pipe",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第11步,核对大腔控制油口管路连接。原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用十九号开口扳手拆开管路并包扎”的相反描述。请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_F6427532AF5F40348CEB154F031F2AED",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "86",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 11 核对大腔控制油口管路连接",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-12",
+ "stepCode": "BRIDGE-STEP-12",
+ "actionCode": "COMPLETE_BRIDGE-STEP-12",
+ "number": 12,
+ "title": "紧固大腔阀体连接螺栓",
+ "targetId": "bridge-large-bolt-1",
+ "targetName": "紧固第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "guidance": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "warning": "",
+ "success": "紧固大腔阀体连接螺栓:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-large-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-large-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第12步,紧固大腔阀体连接螺栓。用内六角扳手拧紧四个阀体连接螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_F601DB08C8D44934AD3A1B1582E804DB",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "87",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 12 紧固大腔阀体连接螺栓",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-13",
+ "stepCode": "BRIDGE-STEP-13",
+ "actionCode": "COMPLETE_BRIDGE-STEP-13",
+ "number": 13,
+ "title": "准备安装小腔平衡阀",
+ "targetId": "bridge-small-seat",
+ "targetName": "擦净安装结合面",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "guidance": "擦净平衡阀及阀座结合面,取下两个油堵。",
+ "warning": "",
+ "success": "准备安装小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-seat",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-seat",
+ "kind": "identify",
+ "directionHint": "擦净安装结合面",
+ "effects": [
+ {
+ "targetId": "bridge-small-seat",
+ "color": 14477797
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-plug-1",
+ "kind": "identify",
+ "directionHint": "取下第 1 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-1",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-plug-2",
+ "kind": "identify",
+ "directionHint": "取下第 2 个油堵",
+ "effects": [
+ {
+ "targetId": "bridge-small-plug-2",
+ "offset": [
+ 0,
+ 0.55,
+ 0.5
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第13步,准备安装小腔平衡阀。擦净平衡阀及阀座结合面,取下两个油堵。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_B1BBA42CE5F346228B6B39A51F190CB3",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "88",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 13 准备安装小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-14",
+ "stepCode": "BRIDGE-STEP-14",
+ "actionCode": "COMPLETE_BRIDGE-STEP-14",
+ "number": 14,
+ "title": "安装小腔平衡阀",
+ "targetId": "bridge-large-valve",
+ "targetName": "将互换平衡阀装到阀座",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "guidance": "将平衡阀放置于阀座上,用8内六角扳手安装四个安装螺栓。",
+ "warning": "",
+ "success": "安装小腔平衡阀:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-large-valve",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-large-valve",
+ "kind": "identify",
+ "directionHint": "将互换平衡阀装到阀座",
+ "effects": [
+ {
+ "targetId": "bridge-large-valve",
+ "offset": [
+ -3.2,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第14步,安装小腔平衡阀。将平衡阀放置于阀座上,用八号内六角扳手安装四个安装螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_2BCD762C693242FF8DA420BD9A5D4DF9",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "89",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 14 安装小腔平衡阀",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-15",
+ "stepCode": "BRIDGE-STEP-15",
+ "actionCode": "COMPLETE_BRIDGE-STEP-15",
+ "number": 15,
+ "title": "核对小腔控制油口管路连接",
+ "targetId": "bridge-small-bag",
+ "targetName": "取下封口袋",
+ "mode": "measure",
+ "interaction": "mechanism-operation",
+ "instruction": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "guidance": "原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用19开口扳手拆开管路并包扎”的相反描述。",
+ "warning": "请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "success": "核对小腔控制油口管路连接:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-bag",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-bag",
+ "kind": "identify",
+ "directionHint": "取下封口袋",
+ "effects": [
+ {
+ "targetId": "bridge-small-bag",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-pipe",
+ "kind": "identify",
+ "directionHint": "按记录的处理依据连接管路",
+ "effects": [
+ {
+ "targetId": "bridge-small-pipe",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第15步,核对小腔控制油口管路连接。原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用十九号开口扳手拆开管路并包扎”的相反描述。请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_5F8309BF74344C568C2C9EEFDD9E74BF",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "90",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 15 核对小腔控制油口管路连接",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ },
+ {
+ "id": "BRIDGE-STEP-16",
+ "stepCode": "BRIDGE-STEP-16",
+ "actionCode": "COMPLETE_BRIDGE-STEP-16",
+ "number": 16,
+ "title": "紧固小腔阀体连接螺栓",
+ "targetId": "bridge-small-bolt-1",
+ "targetName": "紧固第 1 个螺栓",
+ "mode": "inspect",
+ "interaction": "mechanism-operation",
+ "instruction": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "guidance": "用内六角扳手拧紧四个阀体连接螺栓。",
+ "warning": "",
+ "success": "紧固小腔阀体连接螺栓:三维操作已保存",
+ "cameraPolicy": "focus",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "bridge-small-bolt-1",
+ "requiresPlacement": false,
+ "durationMs": 700,
+ "mechanism": {
+ "type": "sequence",
+ "steps": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 1 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-1",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-2",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 2 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-2",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-3",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 3 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-3",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ },
+ {
+ "targetId": "bridge-small-bolt-4",
+ "kind": "rotate",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 180,
+ "toleranceDegrees": 8,
+ "directionHint": "紧固第 4 个螺栓",
+ "effects": [
+ {
+ "targetId": "bridge-small-bolt-4",
+ "offset": [
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "measurement": "",
+ "assessment": {
+ "weight": 6.25,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "audio": {
+ "narrationSource": "digital-generate",
+ "narrationText": "第16步,紧固小腔阀体连接螺栓。用内六角扳手拧紧四个阀体连接螺栓。",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationUrl": "",
+ "narrationAssetCode": "",
+ "narrationVideoAssetCode": "DH_D525E35EDA12402DA13302C2B3874CC3",
+ "digitalHuman": {
+ "enabled": true,
+ "mode": "video",
+ "videoSource": "library",
+ "videoId": "91",
+ "videoName": "重型支援桥平衡阀拆拼互换 · 16 紧固小腔阀体连接螺栓",
+ "appId": "AP_238179E0A10F97927EA49FA3",
+ "videoUrl": "",
+ "generatedVideoUrl": "",
+ "generationStatus": "generated"
+ }
+ }
+ }
+ ],
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "semantic": "场景地形",
+ "assetRole": "environment",
+ "operable": false,
+ "visible": true,
+ "modelId": "front-pump-field-terrain",
+ "modelEditorAssetId": "front-pump-field-terrain",
+ "modelEditorModelId": "front-pump-field-terrain",
+ "modelEditorRevision": 1,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "sourceName": "地形.glb",
+ "resourceUrl": "/models/地形.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 10726472,
+ "fitToScene": true,
+ "fitSize": 140,
+ "groundLevelY": 0,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "semantic": "实训装备",
+ "assetRole": "training-content",
+ "operable": true,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "front-pump-step-vehicle",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-power-take-off",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-pto-switch",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ },
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ },
+ {
+ "interactionId": "front-pump-rescue-switch",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "sceneId": "front-pump-rescue-vehicle",
+ "operable": true,
+ "visible": true,
+ "nodePath": "",
+ "editorId": ""
+ }
+ ],
+ "sourceName": "0916架桥车.glb",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ },
+ {
+ "id": "valve-bags",
+ "sceneId": "valve-bags",
+ "interactionId": "scene:valve-bags",
+ "type": "imported",
+ "name": "4封口袋.glb",
+ "semantic": "实训装备",
+ "assetRole": "script-accessory",
+ "operable": false,
+ "visible": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "modelId": "valve-bags",
+ "modelEditorAssetId": "valve-bags",
+ "modelEditorModelId": "valve-bags",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "sourceName": "4封口袋.glb",
+ "resourceUrl": "/models/bridge-valve-bags-20260916.glb",
+ "assetKey": "",
+ "mimeType": "model/gltf-binary",
+ "sizeBytes": 37160920,
+ "fitToScene": false,
+ "fitSize": 8,
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1,
+ 1,
+ 1
+ ],
+ "partOverrides": {}
+ }
+ ]
+ },
+ {
+ "id": "116",
+ "code": "BRIDGE-005-AUTHORING-PILOT",
+ "name": "005 液压泵应急切换(编排验证)",
+ "version": "552",
+ "runtime": {
+ "startMode": "practice",
+ "teacherEnabled": true,
+ "teacherVoiceEnabled": true,
+ "actionSoundEnabled": true,
+ "showStepPanel": true,
+ "showProgress": true,
+ "allowReplay": true,
+ "language": "zh-CN"
+ },
+ "steps": [
+ {
+ "id": "front-pump-step-01",
+ "stepCode": "front-pump-step-01",
+ "order": 1,
+ "title": "根据故障现象确定是哪一个液压泵发生故障",
+ "summary": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-01",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-hydraulic-pump",
+ "targetName": "液压泵",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "guidance": "根据故障现象确定是哪一个液压泵发生故障(注:模型_1液压泵标记出来。例如显红色)",
+ "warning": "",
+ "destination": "液压泵",
+ "success": "根据故障现象确定是哪一个液压泵发生故障",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-hydraulic-pump",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "identify",
+ "axisSpace": "world",
+ "highlightColor": "#e53935",
+ "steps": [
+ {
+ "targetId": "front-pump-hydraulic-pump",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "toleranceDegrees": 6,
+ "directionHint": "点击并确认发生故障的液压泵"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第1步,确定故障液压泵。根据故障现象确定发生故障的液压泵。",
+ "narrationAssetCode": "PILOT-005-1-AUDIO",
+ "safetyText": "安全提示:请按规定顺序操作并远离危险区域。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-1-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "exterior",
+ "number": 1,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "bridge-0916-node-92",
+ "nodePath": "0/46/0",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-hydraulic-pump",
+ "targetNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-02",
+ "stepCode": "front-pump-step-02",
+ "order": 2,
+ "title": "断开架桥车取力器",
+ "summary": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-02",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "guidance": "断开架桥车取力器。(注:显示模型2取力器和2取力器开关,摇动模型2取力器开关。特别说明这个这边是早上随手补的不准确,车外看就行,不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "断开架桥车取力器",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": -30,
+ "toleranceDegrees": 6,
+ "directionHint": "向断开方向摇动"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第2步,断开架桥车取力器。将架桥车取力器断开。",
+ "narrationAssetCode": "PILOT-005-2-AUDIO",
+ "safetyText": "安全提示:请确认压力归零并可靠支承后再进行拆卸。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-2-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "exterior",
+ "number": 2,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-03",
+ "stepCode": "front-pump-step-03",
+ "order": 3,
+ "title": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "summary": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-03",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-ball-valve-switch",
+ "targetName": "球阀开关",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "guidance": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开。(注;把模型3球阀开关由垂直与官道方向旋转至平行于管道方向)",
+ "warning": "",
+ "destination": "球阀开关",
+ "success": "将架桥车备胎斜上方链接两个红色滤油器的球阀打开",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-ball-valve-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "steps": [
+ {
+ "targetId": "front-pump-ball-valve-switch",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 90,
+ "toleranceDegrees": 8,
+ "directionHint": "由垂直与官道方向旋转至平行于管道方向"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第3步,打开互救球阀。打开备胎上方两个红色滤油器之间的连通球阀,手柄由垂直管道转为平行管道。",
+ "narrationAssetCode": "PILOT-005-3-AUDIO",
+ "safetyText": "安全提示:请按规定顺序操作并远离危险区域。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-3-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "focus",
+ "number": 3,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "bridge-0916-node-96",
+ "nodePath": "0/48/0",
+ "sourceNodeName": "1_26球阀开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-ball-valve-switch",
+ "targetNodeName": "1_26球阀开关",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-04",
+ "stepCode": "front-pump-step-04",
+ "order": 4,
+ "title": "重新联通取力器",
+ "summary": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-04",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-pto-switch",
+ "targetName": "取力器开关",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "guidance": "重新联通取力器(注:把步骤2的2取力器开关摇回去:还是不要拉近)",
+ "warning": "",
+ "destination": "取力器开关",
+ "success": "重新联通取力器",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-pto-switch",
+ "mode": "inspect",
+ "durationMs": 900,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "exterior",
+ "mechanism": {
+ "type": "rotate",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-power-take-off"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-pto-switch",
+ "axis": [
+ 1,
+ 0,
+ 0
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "按步骤2的相反方向摇回去"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第4步,重新接通取力器。将架桥车取力器重新接通。",
+ "narrationAssetCode": "PILOT-005-4-AUDIO",
+ "safetyText": "安全提示:请按规定顺序操作并远离危险区域。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-4-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "exterior",
+ "number": 4,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-pto-switch",
+ "targetNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ },
+ {
+ "id": "front-pump-step-05",
+ "stepCode": "front-pump-step-05",
+ "order": 5,
+ "title": "打开辅助控制盒内的“互救”开关",
+ "summary": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "score": 10,
+ "actionCode": "COMPLETE_FRONT-PUMP-STEP-05",
+ "allowedPositions": [],
+ "physicalEventRule": {},
+ "targetId": "front-pump-aux-control-box-cover",
+ "targetName": "辅助控制盒盖",
+ "mode": "inspect",
+ "interaction": "rule-check",
+ "instruction": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "guidance": "打开辅助控制盒内的“互救”开关(注:打开5辅助控制盒盖在5辅助控制盒面板上,把5互救开关往上搬)",
+ "warning": "",
+ "destination": "辅助控制盒盖",
+ "success": "打开辅助控制盒内的“互救”开关",
+ "action": {
+ "kind": "mechanism-operation",
+ "targetId": "front-pump-aux-control-box-cover",
+ "mode": "inspect",
+ "durationMs": 1600,
+ "tolerance": 0,
+ "requiresPlacement": false,
+ "cameraPolicy": "focus",
+ "mechanism": {
+ "type": "sequence",
+ "axisSpace": "world",
+ "visualTargetIds": [
+ "front-pump-aux-control-box"
+ ],
+ "steps": [
+ {
+ "targetId": "front-pump-aux-control-box-cover",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "deltaDegrees": 100,
+ "toleranceDegrees": 8,
+ "directionHint": "沿控制盒盖边缘铰链打开",
+ "pivotEdge": {
+ "space": "world",
+ "axis": [
+ 0,
+ 1,
+ 0
+ ],
+ "edge": "nearest-vertical-edge"
+ }
+ },
+ {
+ "targetId": "front-pump-rescue-switch",
+ "axis": [
+ 0,
+ 0,
+ 1
+ ],
+ "deltaDegrees": 30,
+ "toleranceDegrees": 6,
+ "directionHint": "往上搬"
+ }
+ ]
+ }
+ },
+ "toolId": "",
+ "safetyRules": [
+ {
+ "id": "ppeConfirmed",
+ "label": "个人防护用品齐全",
+ "required": true
+ },
+ {
+ "id": "routeAuthorized",
+ "label": "作业路线已授权",
+ "required": true
+ }
+ ],
+ "audio": {
+ "narrationText": "第5步,打开辅助控制盒互救开关。打开辅助控制盒盖,再打开互救开关,进入单泵作业状态。",
+ "narrationAssetCode": "PILOT-005-5-AUDIO",
+ "safetyText": "安全提示:请确认压力归零并可靠支承后再进行拆卸。",
+ "safetyAssetCode": "",
+ "successCue": "ui",
+ "errorCue": "collision-error",
+ "narrationSource": "offline",
+ "offlineSource": "upload",
+ "offlineMediaType": "video",
+ "offlineFileName": "",
+ "offlineAssetKey": "",
+ "offlineMimeType": "",
+ "offlineSizeBytes": 0,
+ "narrationVideoAssetCode": "PILOT-005-5-VIDEO",
+ "narrationUrl": "",
+ "safetyUrl": "",
+ "digitalHuman": {
+ "enabled": false,
+ "mode": "video",
+ "videoSource": "upload",
+ "videoId": "",
+ "appId": "",
+ "videoUrl": "",
+ "videoFileName": "",
+ "folderId": "equipment-hydraulic-fault",
+ "folderPath": "装备维修 / 液压系统 / 故障排查",
+ "videoName": "",
+ "avatarId": "",
+ "avatarName": "",
+ "backgroundImage": "",
+ "backgroundName": "",
+ "audioUrl": "",
+ "audioName": "",
+ "voiceId": "",
+ "voiceName": "",
+ "scriptText": "",
+ "generatedVideoId": "",
+ "generatedVideoUrl": "",
+ "generatedAt": "",
+ "generationStatus": "generated"
+ }
+ },
+ "animationBinding": null,
+ "faultIds": [],
+ "assessment": {
+ "weight": 20,
+ "requiredDimensions": [
+ "action",
+ "sequence"
+ ],
+ "passPolicy": "all-required"
+ },
+ "cameraPolicy": "focus",
+ "number": 5,
+ "targetRef": {
+ "sceneId": "front-pump-rescue-vehicle",
+ "sceneObjectId": "front-pump-rescue-vehicle",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "bridge-0916-node-78",
+ "nodePath": "0/39/0",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ "toolRequirements": [],
+ "targetNodeId": "front-pump-aux-control-box-cover",
+ "targetNodeName": "1_28辅助控制盒盖",
+ "toolPlacement": {
+ "placed": false,
+ "position": [
+ -3.2,
+ 0.18,
+ 1.8
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": 1,
+ "attachedTargetId": "",
+ "pose": "tray"
+ }
+ }
+ ],
+ "objects": [
+ {
+ "id": "front-pump-training-yard",
+ "sceneId": "front-pump-training-yard",
+ "interactionId": "scene:front-pump-training-yard",
+ "type": "imported",
+ "name": "野外山地训练场",
+ "deviceId": "front-pump-training-yard",
+ "modelId": "front-pump-field-terrain",
+ "semantic": "环境地形",
+ "assetRole": "environment",
+ "builtinAssetId": "front-pump-field-terrain",
+ "modelEditorAssetId": "",
+ "modelEditorModelId": "",
+ "modelEditorRevision": 0,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [],
+ "partOverrides": {},
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "",
+ "assetKey": "",
+ "resourceUrl": "/models/terrain-005-20260917.glb",
+ "sourceName": "terrain-005-20260917.glb",
+ "sizeBytes": 0,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ -3.1597256741842212,
+ 10.30528511389146,
+ -40.10715876774236
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 1.7159231079037875,
+ 1.7159231079037875,
+ 1.7159231079037875
+ ]
+ },
+ {
+ "id": "front-pump-rescue-vehicle",
+ "sceneId": "front-pump-rescue-vehicle",
+ "interactionId": "scene:front-pump-rescue-vehicle",
+ "type": "imported",
+ "name": "架桥车前泵互救操作整车模型",
+ "deviceId": "front-pump-rescue-vehicle",
+ "modelId": "front-pump-step-vehicle",
+ "semantic": "实训装备",
+ "assetRole": "equipment",
+ "builtinAssetId": "front-pump-step-vehicle",
+ "modelEditorAssetId": "bridge-erector-0916",
+ "modelEditorModelId": "front-pump-step-vehicle",
+ "modelEditorRevision": 2,
+ "modelOverrides": {},
+ "materialPreset": null,
+ "modelPartTargets": [
+ {
+ "sceneId": "front-pump-hydraulic-pump",
+ "interactionId": "front-pump-hydraulic-pump",
+ "sourceInteractionId": "front-pump-hydraulic-pump",
+ "editorId": "bridge-0916-node-92",
+ "nodePath": "0/46/0",
+ "sourceNodeName": "1_24柱塞泵3_05前泵3_08新泵",
+ "name": "液压泵",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-power-take-off",
+ "interactionId": "front-pump-power-take-off",
+ "sourceInteractionId": "front-pump-power-take-off",
+ "editorId": "bridge-0916-node-80",
+ "nodePath": "0/40/0",
+ "sourceNodeName": "1_25取力器",
+ "name": "取力器",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-pto-switch",
+ "interactionId": "front-pump-pto-switch",
+ "sourceInteractionId": "front-pump-pto-switch",
+ "editorId": "bridge-0916-node-82",
+ "nodePath": "0/41/0",
+ "sourceNodeName": "1_25和1_27和2_03和2_08取力器开关",
+ "name": "取力器开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-ball-valve-switch",
+ "interactionId": "front-pump-ball-valve-switch",
+ "sourceInteractionId": "front-pump-ball-valve-switch",
+ "editorId": "bridge-0916-node-96",
+ "nodePath": "0/48/0",
+ "sourceNodeName": "1_26球阀开关",
+ "name": "球阀开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box",
+ "interactionId": "front-pump-aux-control-box",
+ "sourceInteractionId": "front-pump-aux-control-box",
+ "editorId": "bridge-0916-node-84",
+ "nodePath": "0/42/0",
+ "sourceNodeName": "1_28辅助控制盒内",
+ "name": "辅助控制盒",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-aux-control-box-cover",
+ "interactionId": "front-pump-aux-control-box-cover",
+ "sourceInteractionId": "front-pump-aux-control-box-cover",
+ "editorId": "bridge-0916-node-78",
+ "nodePath": "0/39/0",
+ "sourceNodeName": "1_28辅助控制盒盖",
+ "name": "辅助控制盒盖",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ },
+ {
+ "sceneId": "front-pump-rescue-switch",
+ "interactionId": "front-pump-rescue-switch",
+ "sourceInteractionId": "front-pump-rescue-switch",
+ "editorId": "bridge-0916-node-86",
+ "nodePath": "0/43/0",
+ "sourceNodeName": "1_28和2_06互救开关",
+ "name": "互救开关",
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ],
+ "visible": true
+ }
+ ],
+ "partOverrides": {
+ "front-pump-hydraulic-pump": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-power-take-off": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-pto-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-ball-valve-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-aux-control-box": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect"
+ ]
+ },
+ "front-pump-aux-control-box-cover": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ },
+ "front-pump-rescue-switch": {
+ "position": [
+ 0,
+ 0,
+ 0
+ ],
+ "rotation": [
+ 0,
+ 0,
+ 0
+ ],
+ "scale": [
+ 0.01,
+ 0.01,
+ 0.01
+ ],
+ "visible": true,
+ "operable": true,
+ "capabilities": [
+ "select",
+ "inspect",
+ "mechanism"
+ ]
+ }
+ },
+ "operable": false,
+ "capabilities": [
+ "select",
+ "inspect"
+ ],
+ "splitGroupId": "",
+ "splitParts": [],
+ "sourceNodeName": "Group",
+ "assetKey": "",
+ "resourceUrl": "/models/bridge-erector-20260916.glb",
+ "sourceName": "0916架桥车.glb",
+ "sizeBytes": 37160920,
+ "mimeType": "model/gltf-binary",
+ "fitToScene": false,
+ "fitSize": 7,
+ "groundLevelY": null,
+ "visible": true,
+ "position": [
+ 1.5698558846140135e-16,
+ 0.00012730681329620186,
+ 0.13180482636746585
+ ],
+ "rotation": [
+ 3.0865583248298285e-17,
+ -3.96331642134641e-33,
+ -2.568113739801058e-16
+ ],
+ "scale": [
+ 0.9715696607300419,
+ 0.9715696607300419,
+ 0.9715696607300419
+ ]
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/reports/bridge-workbook-review-20260917/index.html b/reports/bridge-workbook-review-20260917/index.html
new file mode 100644
index 0000000..6658c11
--- /dev/null
+++ b/reports/bridge-workbook-review-20260917/index.html
@@ -0,0 +1,156 @@
+四个桥梁脚本核对四个桥梁脚本与说明文本核对
+
+核对时间:2026-09-17。源文件:E:/work/edit_3d/模型/重型支援桥四份脚本说明文本.xlsx。读取三个工作表全部非空内容;只读核对,没有修改原表、已发布任务或业务代码。
+
+结论
+
+当前流程可走通,但不能据此认定已完整满足65条动画/讲解要求。文档包含005的29条、006的9条、007的11条、008的16条;系统操作步骤为5/7/11/16,共39步,二者统计口径不同。005缺23条导入/原理条目及最后单泵联动作业,006缺独立概念讲解,三套末尾的整机作业/试验仍有缺口。
+
+此前34步、89项交互通过,指006~008当前已配置动作的可执行性,不是这份文档的内容完整性或实装准确性验收。
+
+核验了实时任务接口:005=任务86/内容533;006=87/553;007=88/554;008=89/555。005新模型编排验证另为任务116/内容552,未替换原列表005。
+
+优先处理
+
+1. 补005末尾单泵联动、006双车供油联动、007起动试车结果;旧12条动画需要先找来源再适配新节点。新GLB没有内嵌动画,当前步骤也未绑定整机动画。
+2. 接头旋松/旋紧目前只有位移;007/008需补工具动作。步骤toolId均为空,19号开口扳手、8号内六角未形成精确工具约束。
+3. 008清洗补脏净材质、管接头清洗和阀体/阀座擦拭;目前只有布块移动或变色。
+4. 明确008同一组还是两组螺栓、接管方向;明确自救阀、互救开关及球阀编号。这些文档已列待确认,不应凭代码猜定。
+5. 补005导入与原理讲解;原理图、三类环境画面需要对应资料。不得用当前步骤视频充当未制作的原理动画。
+6. 已发布006第7步、007第8/9/11步的屏幕说明仍有“原图/原稿未展开”字样。语音有覆盖文案不代表屏幕说明已清理;008矛盾说明宜放教师审核说明,不当作正常操作口播。
+
+本报告的“动作对应”只表示目标与顺序已有实现,不表示模型尺寸、维修安全条件、扭矩或压力判据已实装核验。“部分对应”表示代码实现与文字目标之间仍有可见差距。
+
+65条逐项核对
+
+原表部分编号被Excel储存为日期序列值(如46056);下表按所在脚本和顺序恢复展示编号,原文件未改。
+
+
+| 编号 | 原表位置 | 内容 | 当前位置 | 判断 | 差异与说明 |
+| 1-01 | 1-动画!B5:F5 | 片头字幕 | 005 导入/原理 | 缺项 | 未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。 |
+| 1-02 | 1-动画!B6:F6 | 受损装备全景 | 005 导入/原理 | 缺项 | 未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。 |
+| 1-03 | 1-动画!B7:F7 | 液压泵作用讲解 | 005 导入/原理 | 缺项 | 未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。 |
+| 1-04 | 1-动画!B8:F8 | 架设环境画面 | 005 导入/原理 | 缺项 | 没有此独立环境素材段;训练场地背景不能替代三类画面。 |
+| 1-05 | 1-动画!B9:F9 | 战场环境画面 | 005 导入/原理 | 缺项 | 没有此独立环境素材段;训练场地背景不能替代三类画面。 |
+| 1-06 | 1-动画!B10:F10 | 救灾场景画面 | 005 导入/原理 | 缺项 | 没有此独立环境素材段;训练场地背景不能替代三类画面。 |
+| 1-07 | 1-动画!B11:F11 | 故障后果设问 | 005 导入/原理 | 缺项 | 未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。 |
+| 1-08 | 1-动画!B12:F12 | 原理图总览 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-09 | 1-动画!B13:F13 | 双泵独立供油 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-10 | 1-动画!B14:F14 | 章节字幕 | 005 导入/原理 | 缺项 | 未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。 |
+| 1-11 | 1-动画!B15:F15 | 三问目录 | 005 导入/原理 | 缺项 | 未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。 |
+| 1-12 | 1-动画!B16:F16 | 切换概念说明 | 005 导入/原理 | 缺项 | 未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。 |
+| 1-13 | 1-动画!B17:F17 | 两个液压泵定位 | 005 导入/原理 | 缺项 | 没有双泵定位讲解;新模型没有可按名称确认的独立后泵节点。 |
+| 1-14 | 1-动画!B19:F19 | 前泵供油回路 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-15 | 1-动画!B20:F20 | 后泵供油回路 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-16 | 1-动画!B21:F21 | 球阀关闭状态 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-17 | 1-动画!B22:F22 | 三通阀被关闭 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-18 | 1-动画!B23:F23 | 油路受阻 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-19 | 1-动画!B24:F24 | 油路改道(关键) | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-20 | 1-动画!B25:F25 | 任一机构均如此 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-21 | 1-动画!B26:F26 | 两阀同时关闭推论 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-22 | 1-动画!B27:F27 | 自救阀作用 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-23 | 1-动画!B28:F28 | 切换需开自救阀 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-24 | 1-动画!B30:F30 | 确定故障泵 | 005 第1步 | 部分对应 | 能确认预设故障泵;没有双泵对照或根据不同故障现象选择故障泵的诊断分支。 |
+| 1-25 | 1-动画!B31:F31 | 断开取力器 | 005 第2步 | 动作对应 | 断开取力器;实物开关外形仍受模型准确度限制。 |
+| 1-26 | 1-动画!B32:F32 | 打开球阀 | 005 第3步 | 动作对应 | 球阀打开动作已有;文档要求垂直到平行,几何正确性应以实际管轴为准,不能仅用固定90°证明。 |
+| 1-27 | 1-动画!B33:F33 | 接通取力器 | 005 第4步 | 动作对应 | 按相反方向重新接通取力器。 |
+| 1-28 | 1-动画!B34:F34 | 开盖拨互救开关 | 005 第5步 | 动作对应 | 开盖后操作互救开关;新模型验证入口已修复准备保存后的盖子状态恢复。 |
+| 1-29 | 1-动画!B35:F35 | 单泵继续作业 | 005 末尾 | 缺项 | 没有单泵继续驱动支腿、移动架、架设架或吊机的联动结果演示。 |
+| 2-01 | 1-动画!B37:F37 | 替代概念 | 006 导入 | 缺项 | 现有任务从具体操作开始,没有独立的替代概念讲解段。 |
+| 2-02 | 1-动画!B38:F38 | 互救概念·双车 | 006 导入 | 部分对应 | 新模型已经有双车场景,但缺独立的互救原理讲解和供动力过程演示。 |
+| 2-03 | 1-动画!B39:F39 | 确认取力器脱离 | 006 第1步 | 部分对应 | 顺序对应;发动机运行仅点击着色,不是发动机运行状态或动力联动。 |
+| 2-04 | 1-动画!B40:F40 | 连接双车油管 | 006 第2步 | 部分对应 | 双车和原形软管已接入;操作实际是移动两个接口盖并显示已成形软管,缺接头插接/锁紧过程。 |
+| 2-05 | 1-动画!B41:F41 | 开回油截止阀 | 006 第3步 | 动作对应 | 使用保障车回油截止阀节点并旋转;位置准确性仍需按文档待确认项核定。 |
+| 2-06 | 1-动画!B42:F42 | 开互救作业开关 | 006 第4步 | 动作对应 | 开盒盖、开互救开关已实现;与005是否同一开关仍是原稿待确认项。 |
+| 2-07 | 1-动画!B43:F43 | 打开两个球阀 | 006 第5步 | 动作对应 | 现在是两个独立球阀,分别完成操作,不再只操作一个。 |
+| 2-08 | 1-动画!B44:F44 | 接通保障车取力器 | 006 第6步 | 部分对应 | 保障车取力器开关仍为补充示意件;供油用软管颜色提示,未呈现真实液压泵和动力传递。 |
+| 2-09 | 1-动画!B45:F45 | 双车联动作业 | 006 第7步 | 部分对应 | 仅移动示意手柄,未完成双车供油后的整机作业演示。 |
+| 3-01 | 1-动画!B47:F47 | 熄火·裁切牛皮纸 | 007 第1步 | 部分对应 | 有停机着色和初裁纸片缩放;没有依结合面轮廓裁剪的工具动作。 |
+| 3-02 | 1-动画!B48:F48 | 关 1 号球阀 | 007 第2步 | 待确认 | 有旋转关闭动作;当前将2_07球阀开关02和3-02球阀开关复用为1号球阀,文档要求确认编号对应。 |
+| 3-03 | 1-动画!B49:F49 | 拆油管接头 | 007 第3步 | 部分对应 | 真实接头和封口袋已绑定;接头仅位移,没有大活动扳手旋松过程或工具规格约束。 |
+| 3-04 | 1-动画!B50:F50 | 拆 4 颗螺栓 | 007 第4步 | 部分对应 | 已逐个拆4颗真实螺栓,原模型5颗的问题已处理;未展示开口扳手操作,螺栓半圈是示意行程。 |
+| 3-05 | 1-动画!B51:F51 | 取下前泵 | 007 第5步 | 动作对应 | 使用新模型原位前泵执行取下;工程配合尺寸不由流程通关证明。 |
+| 3-06 | 1-动画!B52:F52 | 二次裁剪牛皮纸 | 007 第6步 | 部分对应 | 切换精裁纸垫模型,没有实际沿安装轮廓裁剪过程。 |
+| 3-07 | 1-动画!B53:F53 | 贴牛皮纸 | 007 第7步 | 部分对应 | 纸垫移动到推定结合面位置,未按文档要求取得法兰轮廓与尺寸核验。 |
+| 3-08 | 1-动画!B54:F54 | 装新泵 | 007 第8步 | 动作对应 | 新泵归位并逐个安装4颗螺栓;未推定拧紧扭矩。 |
+| 3-09 | 1-动画!B55:F55 | 注入液压油 | 007 第9步 | 部分对应 | 新泵注油口盖随泵移动并可打开;加油壶和油流为示意。后续没有关盖动作(文档也未列,属流程闭合建议)。 |
+| 3-10 | 1-动画!B56:F56 | 装回油管 | 007 第10步 | 部分对应 | 取袋、接头归位顺序对应;“并拧紧”没有接头旋转或扳手动作。 |
+| 3-11 | 1-动画!B57:F57 | 起动试车 | 007 第11步 | 部分对应 | 只启动着色并移动示意试验手柄;未接整机试车,也没有泄漏、压力等合格判据,文档明确需甲方补充。 |
+| 4-01 | 1-动画!B59:F59 | 清洗小腔阀 | 008 第1步 | 部分对应 | 仅布块擦拭和阀体变色;没有油污到洁净贴图,也没有各管接头的清洗覆盖。 |
+| 4-02 | 1-动画!B60:F60 | 拆控制端接头 | 008 第2步 | 部分对应 | 接头移开、袋子封口已有;缺19号开口扳手及旋松动作。 |
+| 4-03 | 1-动画!B61:F61 | 拆螺栓取下阀 | 008 第3步 | 部分对应 | 4颗螺栓逐件旋转拆下并取阀;缺8号内六角工具动作与规格约束。 |
+| 4-04 | 1-动画!B62:F62 | 堵油口·擦阀座 | 008 第4步 | 部分对应 | 2个真实油堵逐件封堵;擦阀座是点击变色的示意平面。 |
+| 4-05 | 1-动画!B64:F64 | 清洗大腔阀 | 008 第5步 | 部分对应 | 同小腔:无油污贴图和接头清洗覆盖。 |
+| 4-06 | 1-动画!B65:F65 | 拆控制端接头 | 008 第6步 | 部分对应 | 同小腔:有接头/封袋位移,缺19号扳手旋松。 |
+| 4-07 | 1-动画!B66:F66 | 拆螺栓取下阀 | 008 第7步 | 部分对应 | 同小腔:4颗螺栓与阀体已有,缺8号内六角工具。 |
+| 4-08 | 1-动画!B67:F67 | 堵油口·擦阀座 | 008 第8步 | 部分对应 | 2个真实油堵已有;阀座仍是补充接触平面示意。 |
+| 4-09 | 1-动画!B69:F69 | 擦拭·拆油堵头 | 008 第9步 | 部分对应 | 取下2油堵已有;只对阀座着色,没有阀体和阀座两者的擦拭去污过程。 |
+| 4-10 | 1-动画!B70:F70 | 装阀·上 4 螺栓 | 008 第10步 | 部分对应 | 小腔来源阀体换装到大腔安装面,按四螺栓安装面校准姿态;有4颗螺栓,无8号工具。文案未清楚区分阀体来源与安装位置。 |
+| 4-11 | 1-动画!B71:F71 | 接头旋紧 | 008 第11步 | 待确认 | 当前执行取袋、接管,并要求填写依据交教员核对。与C列装配方向一致,但D列及第三表仍明确指出原稿反向拆卸矛盾;不能认作已澄清。 |
+| 4-12 | 1-动画!B72:F72 | 阀体螺栓旋紧 | 008 第12步 | 待确认 | 当前复用第10步同一组4颗螺栓再次旋转;原稿未确认固定螺栓与阀体连接螺栓是否同一组。 |
+| 4-13 | 1-动画!B74:F74 | 擦拭·拆油堵头 | 008 第13步 | 部分对应 | 同第9步:取油堵已有,缺阀体/阀座擦拭全流程。 |
+| 4-14 | 1-动画!B75:F75 | 装阀·上 4 螺栓 | 008 第14步 | 部分对应 | 大腔来源阀体换装到小腔安装面,姿态已校准;工具和来源/目的地提示仍需完善。 |
+| 4-15 | 1-动画!B76:F76 | 接头旋紧 | 008 第15步 | 待确认 | 同第11步:取袋接管并记录依据;原稿相反动作仍待确认。 |
+| 4-16 | 1-动画!B77:F77 | 阀体螺栓旋紧 | 008 第16步 | 待确认 | 同第12步:复用第14步同一组4颗螺栓,需确认是否应有另一组。 |
+
+
+建模需求19项复核
+
+此表的“缺模型”包含旧交付状态,不能直接视为0916新模型仍然全部缺失。
+
+
+| 原表位置 | 需求 | 当前情况 |
+| 2-团队提供模型!B5:D5 | 前泵移到取力器输出端,做出安装法兰面与取力口 | 已按0916模型在原位绑定旧泵、新泵与取力器面;纸垫贴合仍是推定位置,不能用新模型存在替代装配尺寸验收。 |
+| 2-团队提供模型!B6:D6 | 前泵固定螺栓 4 颗(同规格,放在泵与取力器结合面) | 已分离为4颗真实螺栓;旧的5颗不再用于007操作。 |
+| 2-团队提供模型!B7:D7 | 一个含四份脚本全部所需件的统一模型 | 006~008已用统一0916架桥车坐标,附件保留共同导出坐标;005原发布入口仍旧模型,新模型在独立编排验证入口。 |
+| 2-团队提供模型!B8:D8 | 保障车整车(含取力器、开关、液压泵、油箱、回油截止阀、快速接头) | 保障车整车、接口盖和回油阀已有;独立取力器/液压泵未完整绑定,开关仍补充示意。 |
+| 2-团队提供模型!B10:D10 | 后泵(第二个液压泵) | 未找到可按节点名称确认的独立后泵,也没有双泵定位步骤。 |
+| 2-团队提供模型!B11:D11 | 互救液压油管(给连接好的形态) | 双车连接油管.glb已使用;符合给定成形软管的交付方式,接头连接过程仍简化。 |
+| 2-团队提供模型!B12:D12 | 两处快速接头 | 当前操作件绑定接口盖,不等同于快速接头插接与锁紧。实装位置仍需确认。 |
+| 2-团队提供模型!B13:D13 | 第二个出油滤油器球阀手柄 | 两个独立球阀已绑定,006第5步分别操作。 |
+| 2-团队提供模型!B14:D14 | 液压油箱出口 1 号球阀手柄 | 模型节点注明2_07与3-02复用;编号与工况仍需按第三表确认。 |
+| 2-团队提供模型!B15:D15 | 前泵进出油管接头 2 个 | 两个管接头已有且可分开;动作只有位移,未实现扳手旋松/旋紧。 |
+| 2-团队提供模型!B16:D16 | 牛皮纸 1 张平片 | 已使用牛皮纸附件的初裁/精裁形态;与建议单片贴图方案不同,但可表现状态;裁切轮廓未核定。 |
+| 2-团队提供模型!B17:D17 | 封口袋 1 个 | 007和008已用新封口袋附件;袋口包扎动作简化为移动就位。 |
+| 2-团队提供模型!B18:D18 | 油堵头 1 个 | 008每侧两个油堵已由实际模型分离使用。 |
+| 2-团队提供模型!B19:D19 | 平衡阀带油污贴图 1 套 | 未实现带油污贴图到洁净贴图切换,当前为颜色变化。 |
+| 2-团队提供模型!B20:D20 | 前泵注油口盖(可选) | 已用真实注油口盖并随新泵移动;开盖有动作。 |
+| 2-团队提供模型!B22:D22 | 成对平衡阀与螺栓加区分后缀(如 _大腔 / _小腔) | 已按4_01/4_05等不同来源名和稳定交互ID区分,螺栓按独立几何拆分。 |
+| 2-团队提供模型!B24:D24 | 平衡阀阀体 + 每阀 4 颗固定螺栓 + 阀座 + 管道 | 已接两侧真实阀体与四螺栓;阀座接触面仍为示意平面。 |
+| 2-团队提供模型!B25:D25 | 取力器、取力器开关、球阀开关、辅助控制盒、盒盖、互救开关 | 005五步已有,新模型验证入口也可运行;006复用同一辅助控制盒开关。 |
+| 2-团队提供模型!B26:D26 | 整机联动演示(支腿、移动架、架设架、吊机) | 当前新GLB无内嵌动画,三个任务未绑定整机联动轨道。文档所说12条/12秒旧演示尚未接到末步,需定位可迁移来源。 |
+
+
+甲方资料与待澄清14项
+
+
+| 原表位置 | 事项 | 对当前实现的影响 |
+| 3-甲方提供!B5:D5 | 重型支援桥液压系统原理图(供油回路) | 当前未接入;缺原理图会阻挡005原理演示,不阻挡现有五步操作。 |
+| 3-甲方提供!B6:D6 | 架设环境、战场环境、抢修救灾场景三类画面素材 | 当前未接三类独立素材段。 |
+| 3-甲方提供!B7:D7 | 大腔、小腔平衡阀在装备上的安装位置 | 按新模型命名绑定大小腔阀;未获得实装位置指认确认,不能称已工程核定。 |
+| 3-甲方提供!B8:D8 | 架桥车侧、保障车侧两处快速接头的实装位置 | 按新模型给定坐标放置;仍需实装位置确认。 |
+| 3-甲方提供!B9:D9 | 前泵与取力器连接处的形状与尺寸 | 纸垫位置可演示,但形状尺寸未取得可验收依据。 |
+| 3-甲方提供!B10:D10 | 液压油箱出口球阀的编号对应关系 | 当前采用模型合并命名的同一球阀;需确认编号与功能。 |
+| 3-甲方提供!B11:D11 | 试车验证的合格判据 | 尚缺;目前试验手柄动作不能代表试车合格。 |
+| 3-甲方提供!B13:D13 | 自救阀在实装上是否需人工打开 | 005没有额外手动自救阀步骤;保持原5步,不能擅加或认为互救开关必然等同该阀。 |
+| 3-甲方提供!B14:D14 | 「互救」开关与「互救作业」开关是否同一个 | 当前005和006确实复用同一互救开关;对应关系尚待甲方确认。 |
+| 3-甲方提供!B15:D15 | 《应急替代》的故障背景与正文工况不一致 | 现有006展示外部供油操作;未区分前泵故障和液压系统完全失效情景。 |
+| 3-甲方提供!B16:D16 | 平衡阀装配的螺栓是一组 4 颗还是两组 8 颗 | 当前按同一组4颗处理两次紧固;是实现假设,需确认后决定是否增加另一组。 |
+| 3-甲方提供!B17:D17 | 平衡阀装配段中的拆卸表述 | 当前008第11/15步取袋接管并要求人工核对,不自动宣告管路处置正确;文档仍未解决相反动作。 |
+| 3-甲方提供!B18:D18 | 第 10 项「大活动把手」是否即大活动扳手 | 当前统一写大活动扳手;属于合理文字归一,最终仍可按原稿确认。 |
+| 3-甲方提供!B19:D19 | 第 4 项开口扳手的规格号数 | 目前未设具体规格;不应凭空指定开口尺寸。 |
+
+
+实现依据
+
+- src/features/virtual-training-scripts/bridge-pump-switch.js:005操作五步。
+- bridge-pump-substitute.js:006软管显示、供油着色、末步示意手柄。
+- bridge-pump-replace.js:007接头位移、纸片状态、新泵安装与试验手柄。
+- bridge-balance-valve-swap.js:008同一组螺栓复用、清洗着色、未决接管步骤。
+- bridge-new-model-definition.js:006两独立球阀和新模型来源。
+- bridge-new-model-runtime.js:真实部件映射、示意件、阀体互换安装面校准。
+- bridge-3d-definition.js:工具ID为空,动作与顺序为主要评定维度。
+- 实时任务接口返回的步骤与模型路径;0916三个主要GLB的animations数组为空。
+
+本次没有再运行全套浏览器回归;依据为工作簿原文、实时接口定义、动作代码和模型结构。先前通关截图属于前一轮执行验证,不能替代本次发现的内容差异。
+
\ No newline at end of file
diff --git a/reports/bridge-workbook-review-20260917/source.json b/reports/bridge-workbook-review-20260917/source.json
new file mode 100644
index 0000000..5d07f16
--- /dev/null
+++ b/reports/bridge-workbook-review-20260917/source.json
@@ -0,0 +1,779 @@
+[
+ {
+ "name": "1-动画",
+ "rows": [
+ {
+ "A1": "动画清单(65 条) 难度:低=现有能力直接做 中=要补小件或新动作 高=缺模型或缺资料"
+ },
+ {
+ "A3": "序号",
+ "B3": "动画",
+ "C3": "原始脚本内容",
+ "D3": "缺什么模型",
+ "E3": "难度"
+ },
+ {
+ "A4": "脚本一 · 液压泵应急切换(序幕)"
+ },
+ {
+ "A5": "1-01",
+ "B5": "片头字幕",
+ "C5": "字幕:重型支援桥液压泵应急切换修复",
+ "D5": "不缺",
+ "E5": "低"
+ },
+ {
+ "A6": "1-02",
+ "B6": "受损装备全景",
+ "C6": "(1)画面显示受损重型支援桥",
+ "D6": "不缺",
+ "E6": "低"
+ },
+ {
+ "A7": "1-03",
+ "B7": "液压泵作用讲解",
+ "C7": "解说:液压泵是液压系统的心脏,可靠性直接关系架设撤收作业",
+ "D7": "不缺",
+ "E7": "低"
+ },
+ {
+ "A8": "1-04",
+ "B8": "架设环境画面",
+ "C8": "(2)画面依次显示架设环境",
+ "D8": "不缺(用图片)",
+ "E8": "低"
+ },
+ {
+ "A9": "1-05",
+ "B9": "战场环境画面",
+ "C9": "(2)画面依次显示战场环境",
+ "D9": "不缺(用图片)",
+ "E9": "低"
+ },
+ {
+ "A10": "1-06",
+ "B10": "救灾场景画面",
+ "C10": "(2)画面依次显示抢修救灾场景",
+ "D10": "不缺(用图片)",
+ "E10": "低"
+ },
+ {
+ "A11": "1-07",
+ "B11": "故障后果设问",
+ "C11": "解说:液压泵故障导致作业中断甚至危险状态;战时如何快速完成架桥",
+ "D11": "不缺",
+ "E11": "低"
+ },
+ {
+ "A12": "1-08",
+ "B12": "原理图总览",
+ "C12": "(3)画面显示重型支援桥液压系统原理图",
+ "D12": "不缺模型,缺原理图",
+ "E12": "高"
+ },
+ {
+ "A13": "1-09",
+ "B13": "双泵独立供油",
+ "C13": "解说:采取\"双泵独立供油\"设计理念,一泵损伤可应急切换",
+ "D13": "缺原理图",
+ "E13": "高"
+ },
+ {
+ "A14": "1-10",
+ "B14": "章节字幕",
+ "C14": "字幕:应急切换",
+ "D14": "不缺",
+ "E14": "低"
+ },
+ {
+ "A15": "1-11",
+ "B15": "三问目录",
+ "C15": "字幕:一、是什么 二、怎么实现 三、该怎么做",
+ "D15": "不缺",
+ "E15": "低"
+ },
+ {
+ "A16": "1-12",
+ "B16": "切换概念说明",
+ "C16": "解说:切换是通过回路转换或改接,脱开损伤部分,接通备用部分",
+ "D16": "不缺",
+ "E16": "低"
+ },
+ {
+ "A17": "1-13",
+ "B17": "两个液压泵定位",
+ "C17": "(4)画面:重型支援桥两个液压泵",
+ "D17": "缺后泵",
+ "E17": "中"
+ },
+ {
+ "A18": "脚本一 · 应急切换怎么实现(画面:液压系统原理图 · 供油回路)"
+ },
+ {
+ "A19": "1-14",
+ "B19": "前泵供油回路",
+ "C19": "解说:前泵回路由油箱、前泵、前泵出油滤油器、托架多路换向阀三通流量调节阀、回油滤油器构成",
+ "D19": "缺原理图",
+ "E19": "高"
+ },
+ {
+ "A20": "1-15",
+ "B20": "后泵供油回路",
+ "C20": "解说:后泵回路由油箱、后泵、后泵出油滤油器、支腿多路换向阀三通流量调节阀、回油滤油器构成",
+ "D20": "缺原理图",
+ "E20": "高"
+ },
+ {
+ "A21": "1-16",
+ "B21": "球阀关闭状态",
+ "C21": "解说:两个出油滤油器出口处设一球阀,正常处于关闭状态",
+ "D21": "缺原理图",
+ "E21": "高"
+ },
+ {
+ "A22": "1-17",
+ "B22": "三通阀被关闭",
+ "C22": "(1)打开球阀。解说:托架马达向前时负载压力将三通流量调节阀关闭",
+ "D22": "缺原理图",
+ "E22": "高"
+ },
+ {
+ "A23": "1-18",
+ "B23": "油路受阻",
+ "C23": "解说:液压油无法经三通阀回油箱,应经内部通道进马达换向联推动马达",
+ "D23": "缺原理图",
+ "E23": "高"
+ },
+ {
+ "A24": "1-19",
+ "B24": "油路改道(关键)",
+ "C24": "解说:马达侧压力大,油经打开的球阀进支腿多路换向阀,经其三通阀回油箱",
+ "D24": "缺原理图",
+ "E24": "高"
+ },
+ {
+ "A25": "1-20",
+ "B25": "任一机构均如此",
+ "C25": "解说:操作托架、架设架任一执行机构均如此;支腿、吊机同理",
+ "D25": "缺原理图",
+ "E25": "高"
+ },
+ {
+ "A26": "1-21",
+ "B26": "两阀同时关闭推论",
+ "C26": "解说:提前关闭两个三通流量调节阀,则任一泵的油都不回油箱",
+ "D26": "缺原理图",
+ "E26": "高"
+ },
+ {
+ "A27": "1-22",
+ "B27": "自救阀作用",
+ "C27": "(2)打开自救阀。解说:两个多路换向阀 M 口各串联一自救阀,打开后油将三通阀关闭",
+ "D27": "缺原理图",
+ "E27": "高"
+ },
+ {
+ "A28": "1-23",
+ "B28": "切换需开自救阀",
+ "C28": "解说:因此在实施切换时,还需打开自救阀",
+ "D28": "缺原理图",
+ "E28": "高"
+ },
+ {
+ "A29": "脚本一 · 应急切换该怎么做(画面:重型支援桥实装,具体操作)"
+ },
+ {
+ "A30": "1-24",
+ "B30": "确定故障泵",
+ "C30": "首先,根据故障现象确定是哪一个液压泵发生故障",
+ "D30": "不缺",
+ "E30": "低"
+ },
+ {
+ "A31": "1-25",
+ "B31": "断开取力器",
+ "C31": "而后,断开架桥车取力器",
+ "D31": "不缺",
+ "E31": "低",
+ "F31": "不准确/补的模型"
+ },
+ {
+ "A32": "1-26",
+ "B32": "打开球阀",
+ "C32": "而后,将备胎斜上方连接两个红色滤油器的球阀打开(手柄由垂直转至平行于管路)",
+ "D32": "不缺",
+ "E32": "低"
+ },
+ {
+ "A33": "1-27",
+ "B33": "接通取力器",
+ "C33": "而后,重新接通取力器",
+ "D33": "不缺",
+ "E33": "低"
+ },
+ {
+ "A34": "1-28",
+ "B34": "开盖拨互救开关",
+ "C34": "而后,打开辅助控制盒内的\"互救\"开关",
+ "D34": "不缺",
+ "E34": "低"
+ },
+ {
+ "A35": "1-29",
+ "B35": "单泵继续作业",
+ "C35": "最后,利用一个液压泵继续完成作业",
+ "D35": "不缺",
+ "E35": "低",
+ "F35": "缺/没有交代过第二个液压泵"
+ },
+ {
+ "A36": "脚本二 · 液压泵应急替代(互救)"
+ },
+ {
+ "A37": "2-01",
+ "B37": "替代概念",
+ "C37": "解说:替代是用性能相似的单元、油液、仪表暂时替换损伤资源,恢复基本功能",
+ "D37": "不缺",
+ "E37": "低"
+ },
+ {
+ "A38": "2-02",
+ "B38": "互救概念·双车",
+ "C38": "解说:互救是架桥车液压系统失效时,连接保障车液压系统,用其液压泵供动力",
+ "D38": "缺保障车整车、互救油管",
+ "E38": "高"
+ },
+ {
+ "A39": "46056",
+ "B39": "确认取力器脱离",
+ "C39": "(1)确保架桥车油泵取力器处于脱离状态并保持车辆启动",
+ "D39": "不缺",
+ "E39": "低",
+ "F39": "不准确/补的模型"
+ },
+ {
+ "A40": "46057",
+ "B40": "连接双车油管",
+ "C40": "(2)架桥车端接液压油箱右侧快速接头,保障车端接驾驶室外右下方快速接头",
+ "D40": "缺互救油管、两个快速接头",
+ "E40": "高",
+ "F40": "有"
+ },
+ {
+ "A41": "46058",
+ "B41": "开回油截止阀",
+ "C41": "(3)打开保障车液压油箱快速接头处的回油截止阀,保证回油油路畅通",
+ "D41": "缺保障车回油截止阀、油箱",
+ "E41": "高",
+ "F41": "有/不准确"
+ },
+ {
+ "A42": "46059",
+ "B42": "开互救作业开关",
+ "C42": "(4)开启互救工作模式,在辅助控制盒将\"互救作业\"开关打开",
+ "D42": "不缺",
+ "E42": "低",
+ "F42": "有"
+ },
+ {
+ "A43": "46060",
+ "B43": "打开两个球阀",
+ "C43": "(5)打开两出油滤油器出口处的球阀",
+ "D43": "缺第二个球阀手柄",
+ "E43": "中",
+ "F43": "有/不准确"
+ },
+ {
+ "A44": "46061",
+ "B44": "接通保障车取力器",
+ "C44": "(6)接通保障车液压泵取力器",
+ "D44": "缺保障车取力器、开关、液压泵",
+ "E44": "高",
+ "F44": "不准确/补的模型"
+ },
+ {
+ "A45": "2-09",
+ "B45": "双车联动作业",
+ "C45": "(7)按正常操作步骤操作架桥车",
+ "D45": "缺保障车整车",
+ "E45": "高",
+ "F45": "缺/有车模型不知道具体指怎么操作架桥车"
+ },
+ {
+ "A46": "脚本三 · 前泵换件修复"
+ },
+ {
+ "A47": "46082",
+ "B47": "熄火·裁切牛皮纸",
+ "C47": "(1)桥车熄火,按前泵与取力器连接处形状裁切一块牛皮纸",
+ "D47": "缺牛皮纸",
+ "E47": "中",
+ "F47": "不准确/补的模型"
+ },
+ {
+ "A48": "3-02",
+ "B48": "关 1 号球阀",
+ "C48": "(2)关闭液压油箱出口处的 1 号球阀(手柄由平行转至垂直于油管)",
+ "D48": "缺 1 号球阀手柄",
+ "E48": "中",
+ "F48": "有/不准确"
+ },
+ {
+ "A49": "46084",
+ "B49": "拆油管接头",
+ "C49": "(3)用大活动扳手拆开前泵进出油管接头,用封口袋封住",
+ "D49": "缺进出油管接头、封口袋",
+ "E49": "中",
+ "F49": "有/不准确"
+ },
+ {
+ "A50": "3-04",
+ "B50": "拆 4 颗螺栓",
+ "C50": "(4)用开口扳手拆下液压泵与取力器处的 4 颗固定螺栓",
+ "D50": "现有 5 颗螺丝规格不一、位置不对,需重做",
+ "E50": "高",
+ "F50": "有"
+ },
+ {
+ "A51": "3-05",
+ "B51": "取下前泵",
+ "C51": "(5)取下前泵",
+ "D51": "前泵与取力器不相邻,需重做装配关系",
+ "E51": "高",
+ "F51": "有"
+ },
+ {
+ "A52": "3-06",
+ "B52": "二次裁剪牛皮纸",
+ "C52": "(6)按液压泵安装形式继续裁剪,使其与取力器贴合完整",
+ "D52": "缺牛皮纸",
+ "E52": "中",
+ "F52": "有/不准确"
+ },
+ {
+ "A53": "3-07",
+ "B53": "贴牛皮纸",
+ "C53": "(7)将裁剪好的牛皮纸贴在取力口处",
+ "D53": "缺牛皮纸、取力口安装面",
+ "E53": "高",
+ "F53": "有/不准确"
+ },
+ {
+ "A54": "3-08",
+ "B54": "装新泵",
+ "C54": "(8)装上新泵",
+ "D54": "同 3-04、3-05",
+ "E54": "高",
+ "F54": "有"
+ },
+ {
+ "A55": "3-09",
+ "B55": "注入液压油",
+ "C55": "(9)打开新泵注油口,注入液压油",
+ "D55": "缺注油口盖(可用字幕代替)",
+ "E55": "中",
+ "F55": "有"
+ },
+ {
+ "A56": "3-10",
+ "B56": "装回油管",
+ "C56": "(10)用大活动把手装上前泵进出油管,并拧紧",
+ "D56": "缺进出油管接头",
+ "E56": "中",
+ "F56": "有"
+ },
+ {
+ "A57": "3-11",
+ "B57": "起动试车",
+ "C57": "(11)起动装备,试车验证",
+ "D57": "不缺",
+ "E57": "低",
+ "F57": "缺/有车模型不知道具体指什么试车"
+ },
+ {
+ "A58": "脚本四 · 平衡阀拆拼互换 —— 拆卸小腔平衡阀"
+ },
+ {
+ "A59": "46113",
+ "B59": "清洗小腔阀",
+ "C59": "① 用清洗液清洗平衡阀表面和各油管接头,用抹布擦拭干净",
+ "D59": "缺带油污贴图",
+ "E59": "中",
+ "F59": "有平衡阀/缺油污贴图不知道则怎么表现"
+ },
+ {
+ "A60": "4-02",
+ "B60": "拆控制端接头",
+ "C60": "② 用 19 号开口扳手拧下控制端油管接头,用封口袋封住管口",
+ "D60": "缺封口袋",
+ "E60": "中",
+ "F60": "有/不准确"
+ },
+ {
+ "A61": "4-03",
+ "B61": "拆螺栓取下阀",
+ "C61": "③ 用 8 号内六角拧下平衡阀固定螺栓,取下平衡阀",
+ "D61": "不缺",
+ "E61": "中",
+ "F61": "有"
+ },
+ {
+ "A62": "4-04",
+ "B62": "堵油口·擦阀座",
+ "C62": "④ 用 2 个油堵头堵住阀体座上 2 个油口,擦拭阀座表面",
+ "D62": "缺油堵头",
+ "E62": "中",
+ "F62": "有"
+ },
+ {
+ "A63": "脚本四 · 拆卸大腔平衡阀"
+ },
+ {
+ "A64": "46117",
+ "B64": "清洗大腔阀",
+ "C64": "① 清洗平衡阀表面和各油管接头,用抹布擦拭干净",
+ "D64": "缺带油污贴图",
+ "E64": "中",
+ "F64": "有平衡阀/缺油污贴图不知道则怎么表现"
+ },
+ {
+ "A65": "4-06",
+ "B65": "拆控制端接头",
+ "C65": "② 用 19 号开口扳手拧下控制端油管接头,封口袋封住管口",
+ "D65": "缺封口袋",
+ "E65": "中",
+ "F65": "有/不准确"
+ },
+ {
+ "A66": "4-07",
+ "B66": "拆螺栓取下阀",
+ "C66": "③ 用 8 号内六角拧下平衡阀固定螺栓,取下平衡阀",
+ "D66": "不缺",
+ "E66": "中",
+ "F66": "有"
+ },
+ {
+ "A67": "4-08",
+ "B67": "堵油口·擦阀座",
+ "C67": "④ 用 2 个油堵头堵住阀体座 2 个油口,擦拭阀座",
+ "D67": "缺油堵头",
+ "E67": "中",
+ "F67": "有"
+ },
+ {
+ "A68": "脚本四 · 装配大腔平衡阀"
+ },
+ {
+ "A69": "4-09",
+ "B69": "擦拭·拆油堵头",
+ "C69": "① 擦拭平衡阀与阀座去除污渍,拆下阀座上 2 个油堵头",
+ "D69": "缺油堵头",
+ "E69": "中",
+ "F69": "有/不准确"
+ },
+ {
+ "A70": "4-10",
+ "B70": "装阀·上 4 螺栓",
+ "C70": "② 将平衡阀安装于阀座上,用 8 号内六角装上 4 个固定螺栓",
+ "D70": "不缺",
+ "E70": "中",
+ "F70": "有"
+ },
+ {
+ "A71": "4-11",
+ "B71": "接头旋紧",
+ "C71": "③ 将控制端油管接头封口袋取下并用扳手旋紧",
+ "D71": "缺封口袋(脚本此条有矛盾)",
+ "E71": "中",
+ "F71": "有/不准确"
+ },
+ {
+ "A72": "4-12",
+ "B72": "阀体螺栓旋紧",
+ "C72": "④ 用内六角将阀体 4 个连接螺栓旋紧",
+ "D72": "不缺(螺栓组待甲方确认)",
+ "E72": "中",
+ "F72": "有"
+ },
+ {
+ "A73": "脚本四 · 装配小腔平衡阀"
+ },
+ {
+ "A74": "4-13",
+ "B74": "擦拭·拆油堵头",
+ "C74": "① 擦拭平衡阀与阀座去除污渍,拆下阀座上 2 个油堵头",
+ "D74": "缺油堵头",
+ "E74": "中",
+ "F74": "有/不准确"
+ },
+ {
+ "A75": "4-14",
+ "B75": "装阀·上 4 螺栓",
+ "C75": "② 将平衡阀安装于阀座上,用 8 号内六角装上 4 个固定螺栓",
+ "D75": "不缺",
+ "E75": "中",
+ "F75": "有"
+ },
+ {
+ "A76": "4-15",
+ "B76": "接头旋紧",
+ "C76": "③ 将控制端油管接头封口袋取下并用扳手旋紧",
+ "D76": "缺封口袋(脚本此条有矛盾)",
+ "E76": "中",
+ "F76": "有/不准确"
+ },
+ {
+ "A77": "4-16",
+ "B77": "阀体螺栓旋紧",
+ "C77": "④ 用内六角将阀体 4 个连接螺栓旋紧",
+ "D77": "不缺(螺栓组待甲方确认)",
+ "E77": "中",
+ "F77": "有"
+ }
+ ]
+ },
+ {
+ "name": "2-团队提供模型",
+ "rows": [
+ {
+ "A1": "团队(建模)需要提供什么"
+ },
+ {
+ "A3": "序号",
+ "B3": "需要提供的模型",
+ "C3": "用在哪",
+ "D3": "说明"
+ },
+ {
+ "A4": "必须先解决(现有模型做不出脚本要求的效果)"
+ },
+ {
+ "A5": "1",
+ "B5": "前泵移到取力器输出端,做出安装法兰面与取力口",
+ "C5": "3-04 3-05 3-07 3-08",
+ "D5": "实测两者中心距 1.890,是前泵尺寸的 9.3 倍,相当于整车长的 23%,不是装配关系"
+ },
+ {
+ "A6": "2",
+ "B6": "前泵固定螺栓 4 颗(同规格,放在泵与取力器结合面)",
+ "C6": "3-04 3-08",
+ "D6": "现有 5 颗螺丝是三种规格,且都在泵一侧,不在结合面上"
+ },
+ {
+ "A7": "3",
+ "B7": "一个含四份脚本全部所需件的统一模型",
+ "C7": "全部 65 条",
+ "D7": "脚本一二的 7 个操作件与脚本四的平衡阀现在分处两个文件,比例差 3.5~6 倍,不能合用"
+ },
+ {
+ "A8": "4",
+ "B8": "保障车整车(含取力器、开关、液压泵、油箱、回油截止阀、快速接头)",
+ "C8": "2-02 2-04 2-05 2-08 2-09",
+ "D8": "白膜先发来核验分件、UV、面数"
+ },
+ {
+ "A9": "要补的小件"
+ },
+ {
+ "A10": "5",
+ "B10": "后泵(第二个液压泵)",
+ "C10": "1-13",
+ "D10": "脚本要\"两个液压泵\",现在只有一个"
+ },
+ {
+ "A11": "6",
+ "B11": "互救液压油管(给连接好的形态)",
+ "C11": "2-04",
+ "D11": "软管弯曲算不出来,直接给装配好的形状"
+ },
+ {
+ "A12": "7",
+ "B12": "两处快速接头",
+ "C12": "2-04",
+ "D12": "位置等甲方指认后建"
+ },
+ {
+ "A13": "8",
+ "B13": "第二个出油滤油器球阀手柄",
+ "C13": "2-07",
+ "D13": "脚本要开两个球阀,现在只有一个手柄"
+ },
+ {
+ "A14": "9",
+ "B14": "液压油箱出口 1 号球阀手柄",
+ "C14": "3-02",
+ "D14": "—"
+ },
+ {
+ "A15": "10",
+ "B15": "前泵进出油管接头 2 个",
+ "C15": "3-03 3-10",
+ "D15": "要能和油管分开"
+ },
+ {
+ "A16": "11",
+ "B16": "牛皮纸 1 张平片",
+ "C16": "3-01 3-06 3-07",
+ "D16": "粗裁精裁用贴图区分,不用做三个模型"
+ },
+ {
+ "A17": "12",
+ "B17": "封口袋 1 个",
+ "C17": "3-03 3-10 4-02 4-06 4-11 4-15",
+ "D17": "多处复用,做一个"
+ },
+ {
+ "A18": "13",
+ "B18": "油堵头 1 个",
+ "C18": "4-04 4-08 4-09 4-13",
+ "D18": "复制两份用"
+ },
+ {
+ "A19": "14",
+ "B19": "平衡阀带油污贴图 1 套",
+ "C19": "4-01 4-05",
+ "D19": "清洗动画靠脏净材质切换"
+ },
+ {
+ "A20": "15",
+ "B20": "前泵注油口盖(可选)",
+ "C20": "3-09",
+ "D20": "不做就用字幕代替"
+ },
+ {
+ "A21": "要改的命名"
+ },
+ {
+ "A22": "16",
+ "B22": "成对平衡阀与螺栓加区分后缀(如 _大腔 / _小腔)",
+ "C22": "脚本四 16 条",
+ "D22": "现有 19 组同名节点,按名字找零件会撞车。这些件不能删,是成对阀各自的螺栓"
+ },
+ {
+ "A23": "已核验可用,不用做"
+ },
+ {
+ "A24": "17",
+ "B24": "平衡阀阀体 + 每阀 4 颗固定螺栓 + 阀座 + 管道",
+ "C24": "4-03 4-07 4-10 4-14",
+ "D24": "实测 12 个阀体每个都配齐 4 颗螺栓(距离 0.07~0.14)+ 阀座 + 管道,成组完整"
+ },
+ {
+ "A25": "18",
+ "B25": "取力器、取力器开关、球阀开关、辅助控制盒、盒盖、互救开关",
+ "C25": "1-24~1-28 2-03 2-06",
+ "D25": "这 7 件成组关系正确,脚本一操作五步已实装可运行"
+ },
+ {
+ "A26": "19",
+ "B26": "整机联动演示(支腿、移动架、架设架、吊机)",
+ "C26": "1-29 2-09 3-11",
+ "D26": "已有 12 条动作,12 秒循环"
+ }
+ ]
+ },
+ {
+ "name": "3-甲方提供",
+ "rows": [
+ {
+ "A1": "甲方需要提供什么"
+ },
+ {
+ "A3": "序号",
+ "B3": "需要甲方提供",
+ "C3": "影响的动画",
+ "D3": "脚本出处"
+ },
+ {
+ "A4": "资料"
+ },
+ {
+ "A5": "1",
+ "B5": "重型支援桥液压系统原理图(供油回路)",
+ "C5": "1-08 1-09 及 1-14~1-23,共 12 条",
+ "D5": "序幕第 3 项「画面显示液压系统原理图」;「怎么实现」全段画面栏「液压系统原理图(供油回路)」"
+ },
+ {
+ "A6": "2",
+ "B6": "架设环境、战场环境、抢修救灾场景三类画面素材",
+ "C6": "1-04 1-05 1-06",
+ "D6": "序幕第 2 项「画面依次显示架设环境、战场环境、抢修救灾场景」"
+ },
+ {
+ "A7": "3",
+ "B7": "大腔、小腔平衡阀在装备上的安装位置",
+ "C7": "脚本四 16 条",
+ "D7": "《平衡阀拆拼互换》故障背景栏为空、画面栏未填写;模型里有前中后三组,需指认是哪一组"
+ },
+ {
+ "A8": "4",
+ "B8": "架桥车侧、保障车侧两处快速接头的实装位置",
+ "C8": "2-04",
+ "D8": "《应急替代》第 2 项「液压油箱右侧的快速接头」「驾驶室外右下方的快速接头」"
+ },
+ {
+ "A9": "5",
+ "B9": "前泵与取力器连接处的形状与尺寸",
+ "C9": "3-01 3-06 3-07",
+ "D9": "《前泵换件修复》第 1 项「按前泵与取力器连接处形状裁切」、第 6 项「按液压泵安装形式继续裁剪」"
+ },
+ {
+ "A10": "6",
+ "B10": "液压油箱出口球阀的编号对应关系",
+ "C10": "3-02",
+ "D10": "《前泵换件修复》第 2 项「1 号球阀」;另两份脚本称「两出油滤油器出口处的球阀」"
+ },
+ {
+ "A11": "7",
+ "B11": "试车验证的合格判据",
+ "C11": "3-11",
+ "D11": "《前泵换件修复》第 11 项「起动装备,试车验证」"
+ },
+ {
+ "A12": "脚本待澄清"
+ },
+ {
+ "A13": "8",
+ "B13": "自救阀在实装上是否需人工打开",
+ "C13": "1-22 1-23",
+ "D13": "原理段「实施切换时还需打开自救阀」,但操作段 5 步未列此步"
+ },
+ {
+ "A14": "9",
+ "B14": "「互救」开关与「互救作业」开关是否同一个",
+ "C14": "1-28 2-06",
+ "D14": "《应急切换》第 5 步称「互救」开关,《应急替代》第 4 项称「互救作业」开关"
+ },
+ {
+ "A15": "10",
+ "B15": "《应急替代》的故障背景与正文工况不一致",
+ "C15": "2-01 2-02",
+ "D15": "故障背景为前泵损坏,正文为「架桥车液压系统完全失效」,两者不是同一工况"
+ },
+ {
+ "A16": "11",
+ "B16": "平衡阀装配的螺栓是一组 4 颗还是两组 8 颗",
+ "C16": "4-10 4-12 4-14 4-16",
+ "D16": "装配段②「4 个固定螺栓」,④「阀体 4 个连接螺栓」"
+ },
+ {
+ "A17": "12",
+ "B17": "平衡阀装配段中的拆卸表述",
+ "C17": "4-11 4-15",
+ "D17": "装配段③前半句为取下封口袋、旋紧接头(装配),后半句为拧下接头、封住管口(拆卸),动作方向相反"
+ },
+ {
+ "A18": "13",
+ "B18": "第 10 项「大活动把手」是否即大活动扳手",
+ "C18": "3-10",
+ "D18": "《前泵换件修复》第 3 项写「大活动扳手」,第 10 项写「大活动把手」"
+ },
+ {
+ "A19": "14",
+ "B19": "第 4 项开口扳手的规格号数",
+ "C19": "3-04",
+ "D19": "《前泵换件修复》第 4 项未标号数;平衡阀脚本各步均标明了 19 号、8 号"
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/reports/bridge-workbook-review-20260917/核对报告.md b/reports/bridge-workbook-review-20260917/核对报告.md
new file mode 100644
index 0000000..f06b0a8
--- /dev/null
+++ b/reports/bridge-workbook-review-20260917/核对报告.md
@@ -0,0 +1,152 @@
+# 四个桥梁脚本与说明文本核对
+
+核对时间:2026-09-17。源文件:E:/work/edit_3d/模型/重型支援桥四份脚本说明文本.xlsx。读取三个工作表全部非空内容;只读核对,没有修改原表、已发布任务或业务代码。
+
+## 结论
+
+当前流程可走通,但不能据此认定已完整满足65条动画/讲解要求。文档包含005的29条、006的9条、007的11条、008的16条;系统操作步骤为5/7/11/16,共39步,二者统计口径不同。005缺23条导入/原理条目及最后单泵联动作业,006缺独立概念讲解,三套末尾的整机作业/试验仍有缺口。
+
+此前34步、89项交互通过,指006~008当前已配置动作的可执行性,不是这份文档的内容完整性或实装准确性验收。
+
+核验了实时任务接口:005=任务86/内容533;006=87/553;007=88/554;008=89/555。005新模型编排验证另为任务116/内容552,未替换原列表005。
+
+## 优先处理
+
+1. 补005末尾单泵联动、006双车供油联动、007起动试车结果;旧12条动画需要先找来源再适配新节点。新GLB没有内嵌动画,当前步骤也未绑定整机动画。
+2. 接头旋松/旋紧目前只有位移;007/008需补工具动作。步骤toolId均为空,19号开口扳手、8号内六角未形成精确工具约束。
+3. 008清洗补脏净材质、管接头清洗和阀体/阀座擦拭;目前只有布块移动或变色。
+4. 明确008同一组还是两组螺栓、接管方向;明确自救阀、互救开关及球阀编号。这些文档已列待确认,不应凭代码猜定。
+5. 补005导入与原理讲解;原理图、三类环境画面需要对应资料。不得用当前步骤视频充当未制作的原理动画。
+6. 已发布006第7步、007第8/9/11步的屏幕说明仍有“原图/原稿未展开”字样。语音有覆盖文案不代表屏幕说明已清理;008矛盾说明宜放教师审核说明,不当作正常操作口播。
+
+本报告的“动作对应”只表示目标与顺序已有实现,不表示模型尺寸、维修安全条件、扭矩或压力判据已实装核验。“部分对应”表示代码实现与文字目标之间仍有可见差距。
+
+## 65条逐项核对
+
+原表部分编号被Excel储存为日期序列值(如46056);下表按所在脚本和顺序恢复展示编号,原文件未改。
+
+| 编号 | 原表位置 | 内容 | 当前位置 | 判断 | 差异与说明 |
+|---|---|---|---|---|---|
+| 1-01 | 1-动画!B5:F5 | 片头字幕 | 005 导入/原理 | 缺项 | 未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。 |
+| 1-02 | 1-动画!B6:F6 | 受损装备全景 | 005 导入/原理 | 缺项 | 未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。 |
+| 1-03 | 1-动画!B7:F7 | 液压泵作用讲解 | 005 导入/原理 | 缺项 | 未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。 |
+| 1-04 | 1-动画!B8:F8 | 架设环境画面 | 005 导入/原理 | 缺项 | 没有此独立环境素材段;训练场地背景不能替代三类画面。 |
+| 1-05 | 1-动画!B9:F9 | 战场环境画面 | 005 导入/原理 | 缺项 | 没有此独立环境素材段;训练场地背景不能替代三类画面。 |
+| 1-06 | 1-动画!B10:F10 | 救灾场景画面 | 005 导入/原理 | 缺项 | 没有此独立环境素材段;训练场地背景不能替代三类画面。 |
+| 1-07 | 1-动画!B11:F11 | 故障后果设问 | 005 导入/原理 | 缺项 | 未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。 |
+| 1-08 | 1-动画!B12:F12 | 原理图总览 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-09 | 1-动画!B13:F13 | 双泵独立供油 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-10 | 1-动画!B14:F14 | 章节字幕 | 005 导入/原理 | 缺项 | 未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。 |
+| 1-11 | 1-动画!B15:F15 | 三问目录 | 005 导入/原理 | 缺项 | 未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。 |
+| 1-12 | 1-动画!B16:F16 | 切换概念说明 | 005 导入/原理 | 缺项 | 未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。 |
+| 1-13 | 1-动画!B17:F17 | 两个液压泵定位 | 005 导入/原理 | 缺项 | 没有双泵定位讲解;新模型没有可按名称确认的独立后泵节点。 |
+| 1-14 | 1-动画!B19:F19 | 前泵供油回路 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-15 | 1-动画!B20:F20 | 后泵供油回路 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-16 | 1-动画!B21:F21 | 球阀关闭状态 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-17 | 1-动画!B22:F22 | 三通阀被关闭 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-18 | 1-动画!B23:F23 | 油路受阻 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-19 | 1-动画!B24:F24 | 油路改道(关键) | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-20 | 1-动画!B25:F25 | 任一机构均如此 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-21 | 1-动画!B26:F26 | 两阀同时关闭推论 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-22 | 1-动画!B27:F27 | 自救阀作用 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-23 | 1-动画!B28:F28 | 切换需开自救阀 | 005 导入/原理 | 缺项 | 没有原理图及回路演示,文档明确要求提供液压原理图。 |
+| 1-24 | 1-动画!B30:F30 | 确定故障泵 | 005 第1步 | 部分对应 | 能确认预设故障泵;没有双泵对照或根据不同故障现象选择故障泵的诊断分支。 |
+| 1-25 | 1-动画!B31:F31 | 断开取力器 | 005 第2步 | 动作对应 | 断开取力器;实物开关外形仍受模型准确度限制。 |
+| 1-26 | 1-动画!B32:F32 | 打开球阀 | 005 第3步 | 动作对应 | 球阀打开动作已有;文档要求垂直到平行,几何正确性应以实际管轴为准,不能仅用固定90°证明。 |
+| 1-27 | 1-动画!B33:F33 | 接通取力器 | 005 第4步 | 动作对应 | 按相反方向重新接通取力器。 |
+| 1-28 | 1-动画!B34:F34 | 开盖拨互救开关 | 005 第5步 | 动作对应 | 开盖后操作互救开关;新模型验证入口已修复准备保存后的盖子状态恢复。 |
+| 1-29 | 1-动画!B35:F35 | 单泵继续作业 | 005 末尾 | 缺项 | 没有单泵继续驱动支腿、移动架、架设架或吊机的联动结果演示。 |
+| 2-01 | 1-动画!B37:F37 | 替代概念 | 006 导入 | 缺项 | 现有任务从具体操作开始,没有独立的替代概念讲解段。 |
+| 2-02 | 1-动画!B38:F38 | 互救概念·双车 | 006 导入 | 部分对应 | 新模型已经有双车场景,但缺独立的互救原理讲解和供动力过程演示。 |
+| 2-03 | 1-动画!B39:F39 | 确认取力器脱离 | 006 第1步 | 部分对应 | 顺序对应;发动机运行仅点击着色,不是发动机运行状态或动力联动。 |
+| 2-04 | 1-动画!B40:F40 | 连接双车油管 | 006 第2步 | 部分对应 | 双车和原形软管已接入;操作实际是移动两个接口盖并显示已成形软管,缺接头插接/锁紧过程。 |
+| 2-05 | 1-动画!B41:F41 | 开回油截止阀 | 006 第3步 | 动作对应 | 使用保障车回油截止阀节点并旋转;位置准确性仍需按文档待确认项核定。 |
+| 2-06 | 1-动画!B42:F42 | 开互救作业开关 | 006 第4步 | 动作对应 | 开盒盖、开互救开关已实现;与005是否同一开关仍是原稿待确认项。 |
+| 2-07 | 1-动画!B43:F43 | 打开两个球阀 | 006 第5步 | 动作对应 | 现在是两个独立球阀,分别完成操作,不再只操作一个。 |
+| 2-08 | 1-动画!B44:F44 | 接通保障车取力器 | 006 第6步 | 部分对应 | 保障车取力器开关仍为补充示意件;供油用软管颜色提示,未呈现真实液压泵和动力传递。 |
+| 2-09 | 1-动画!B45:F45 | 双车联动作业 | 006 第7步 | 部分对应 | 仅移动示意手柄,未完成双车供油后的整机作业演示。 |
+| 3-01 | 1-动画!B47:F47 | 熄火·裁切牛皮纸 | 007 第1步 | 部分对应 | 有停机着色和初裁纸片缩放;没有依结合面轮廓裁剪的工具动作。 |
+| 3-02 | 1-动画!B48:F48 | 关 1 号球阀 | 007 第2步 | 待确认 | 有旋转关闭动作;当前将2_07球阀开关02和3-02球阀开关复用为1号球阀,文档要求确认编号对应。 |
+| 3-03 | 1-动画!B49:F49 | 拆油管接头 | 007 第3步 | 部分对应 | 真实接头和封口袋已绑定;接头仅位移,没有大活动扳手旋松过程或工具规格约束。 |
+| 3-04 | 1-动画!B50:F50 | 拆 4 颗螺栓 | 007 第4步 | 部分对应 | 已逐个拆4颗真实螺栓,原模型5颗的问题已处理;未展示开口扳手操作,螺栓半圈是示意行程。 |
+| 3-05 | 1-动画!B51:F51 | 取下前泵 | 007 第5步 | 动作对应 | 使用新模型原位前泵执行取下;工程配合尺寸不由流程通关证明。 |
+| 3-06 | 1-动画!B52:F52 | 二次裁剪牛皮纸 | 007 第6步 | 部分对应 | 切换精裁纸垫模型,没有实际沿安装轮廓裁剪过程。 |
+| 3-07 | 1-动画!B53:F53 | 贴牛皮纸 | 007 第7步 | 部分对应 | 纸垫移动到推定结合面位置,未按文档要求取得法兰轮廓与尺寸核验。 |
+| 3-08 | 1-动画!B54:F54 | 装新泵 | 007 第8步 | 动作对应 | 新泵归位并逐个安装4颗螺栓;未推定拧紧扭矩。 |
+| 3-09 | 1-动画!B55:F55 | 注入液压油 | 007 第9步 | 部分对应 | 新泵注油口盖随泵移动并可打开;加油壶和油流为示意。后续没有关盖动作(文档也未列,属流程闭合建议)。 |
+| 3-10 | 1-动画!B56:F56 | 装回油管 | 007 第10步 | 部分对应 | 取袋、接头归位顺序对应;“并拧紧”没有接头旋转或扳手动作。 |
+| 3-11 | 1-动画!B57:F57 | 起动试车 | 007 第11步 | 部分对应 | 只启动着色并移动示意试验手柄;未接整机试车,也没有泄漏、压力等合格判据,文档明确需甲方补充。 |
+| 4-01 | 1-动画!B59:F59 | 清洗小腔阀 | 008 第1步 | 部分对应 | 仅布块擦拭和阀体变色;没有油污到洁净贴图,也没有各管接头的清洗覆盖。 |
+| 4-02 | 1-动画!B60:F60 | 拆控制端接头 | 008 第2步 | 部分对应 | 接头移开、袋子封口已有;缺19号开口扳手及旋松动作。 |
+| 4-03 | 1-动画!B61:F61 | 拆螺栓取下阀 | 008 第3步 | 部分对应 | 4颗螺栓逐件旋转拆下并取阀;缺8号内六角工具动作与规格约束。 |
+| 4-04 | 1-动画!B62:F62 | 堵油口·擦阀座 | 008 第4步 | 部分对应 | 2个真实油堵逐件封堵;擦阀座是点击变色的示意平面。 |
+| 4-05 | 1-动画!B64:F64 | 清洗大腔阀 | 008 第5步 | 部分对应 | 同小腔:无油污贴图和接头清洗覆盖。 |
+| 4-06 | 1-动画!B65:F65 | 拆控制端接头 | 008 第6步 | 部分对应 | 同小腔:有接头/封袋位移,缺19号扳手旋松。 |
+| 4-07 | 1-动画!B66:F66 | 拆螺栓取下阀 | 008 第7步 | 部分对应 | 同小腔:4颗螺栓与阀体已有,缺8号内六角工具。 |
+| 4-08 | 1-动画!B67:F67 | 堵油口·擦阀座 | 008 第8步 | 部分对应 | 2个真实油堵已有;阀座仍是补充接触平面示意。 |
+| 4-09 | 1-动画!B69:F69 | 擦拭·拆油堵头 | 008 第9步 | 部分对应 | 取下2油堵已有;只对阀座着色,没有阀体和阀座两者的擦拭去污过程。 |
+| 4-10 | 1-动画!B70:F70 | 装阀·上 4 螺栓 | 008 第10步 | 部分对应 | 小腔来源阀体换装到大腔安装面,按四螺栓安装面校准姿态;有4颗螺栓,无8号工具。文案未清楚区分阀体来源与安装位置。 |
+| 4-11 | 1-动画!B71:F71 | 接头旋紧 | 008 第11步 | 待确认 | 当前执行取袋、接管,并要求填写依据交教员核对。与C列装配方向一致,但D列及第三表仍明确指出原稿反向拆卸矛盾;不能认作已澄清。 |
+| 4-12 | 1-动画!B72:F72 | 阀体螺栓旋紧 | 008 第12步 | 待确认 | 当前复用第10步同一组4颗螺栓再次旋转;原稿未确认固定螺栓与阀体连接螺栓是否同一组。 |
+| 4-13 | 1-动画!B74:F74 | 擦拭·拆油堵头 | 008 第13步 | 部分对应 | 同第9步:取油堵已有,缺阀体/阀座擦拭全流程。 |
+| 4-14 | 1-动画!B75:F75 | 装阀·上 4 螺栓 | 008 第14步 | 部分对应 | 大腔来源阀体换装到小腔安装面,姿态已校准;工具和来源/目的地提示仍需完善。 |
+| 4-15 | 1-动画!B76:F76 | 接头旋紧 | 008 第15步 | 待确认 | 同第11步:取袋接管并记录依据;原稿相反动作仍待确认。 |
+| 4-16 | 1-动画!B77:F77 | 阀体螺栓旋紧 | 008 第16步 | 待确认 | 同第12步:复用第14步同一组4颗螺栓,需确认是否应有另一组。 |
+
+## 建模需求19项复核
+
+此表的“缺模型”包含旧交付状态,不能直接视为0916新模型仍然全部缺失。
+
+| 原表位置 | 需求 | 当前情况 |
+|---|---|---|
+| 2-团队提供模型!B5:D5 | 前泵移到取力器输出端,做出安装法兰面与取力口 | 已按0916模型在原位绑定旧泵、新泵与取力器面;纸垫贴合仍是推定位置,不能用新模型存在替代装配尺寸验收。 |
+| 2-团队提供模型!B6:D6 | 前泵固定螺栓 4 颗(同规格,放在泵与取力器结合面) | 已分离为4颗真实螺栓;旧的5颗不再用于007操作。 |
+| 2-团队提供模型!B7:D7 | 一个含四份脚本全部所需件的统一模型 | 006~008已用统一0916架桥车坐标,附件保留共同导出坐标;005原发布入口仍旧模型,新模型在独立编排验证入口。 |
+| 2-团队提供模型!B8:D8 | 保障车整车(含取力器、开关、液压泵、油箱、回油截止阀、快速接头) | 保障车整车、接口盖和回油阀已有;独立取力器/液压泵未完整绑定,开关仍补充示意。 |
+| 2-团队提供模型!B10:D10 | 后泵(第二个液压泵) | 未找到可按节点名称确认的独立后泵,也没有双泵定位步骤。 |
+| 2-团队提供模型!B11:D11 | 互救液压油管(给连接好的形态) | 双车连接油管.glb已使用;符合给定成形软管的交付方式,接头连接过程仍简化。 |
+| 2-团队提供模型!B12:D12 | 两处快速接头 | 当前操作件绑定接口盖,不等同于快速接头插接与锁紧。实装位置仍需确认。 |
+| 2-团队提供模型!B13:D13 | 第二个出油滤油器球阀手柄 | 两个独立球阀已绑定,006第5步分别操作。 |
+| 2-团队提供模型!B14:D14 | 液压油箱出口 1 号球阀手柄 | 模型节点注明2_07与3-02复用;编号与工况仍需按第三表确认。 |
+| 2-团队提供模型!B15:D15 | 前泵进出油管接头 2 个 | 两个管接头已有且可分开;动作只有位移,未实现扳手旋松/旋紧。 |
+| 2-团队提供模型!B16:D16 | 牛皮纸 1 张平片 | 已使用牛皮纸附件的初裁/精裁形态;与建议单片贴图方案不同,但可表现状态;裁切轮廓未核定。 |
+| 2-团队提供模型!B17:D17 | 封口袋 1 个 | 007和008已用新封口袋附件;袋口包扎动作简化为移动就位。 |
+| 2-团队提供模型!B18:D18 | 油堵头 1 个 | 008每侧两个油堵已由实际模型分离使用。 |
+| 2-团队提供模型!B19:D19 | 平衡阀带油污贴图 1 套 | 未实现带油污贴图到洁净贴图切换,当前为颜色变化。 |
+| 2-团队提供模型!B20:D20 | 前泵注油口盖(可选) | 已用真实注油口盖并随新泵移动;开盖有动作。 |
+| 2-团队提供模型!B22:D22 | 成对平衡阀与螺栓加区分后缀(如 _大腔 / _小腔) | 已按4_01/4_05等不同来源名和稳定交互ID区分,螺栓按独立几何拆分。 |
+| 2-团队提供模型!B24:D24 | 平衡阀阀体 + 每阀 4 颗固定螺栓 + 阀座 + 管道 | 已接两侧真实阀体与四螺栓;阀座接触面仍为示意平面。 |
+| 2-团队提供模型!B25:D25 | 取力器、取力器开关、球阀开关、辅助控制盒、盒盖、互救开关 | 005五步已有,新模型验证入口也可运行;006复用同一辅助控制盒开关。 |
+| 2-团队提供模型!B26:D26 | 整机联动演示(支腿、移动架、架设架、吊机) | 当前新GLB无内嵌动画,三个任务未绑定整机联动轨道。文档所说12条/12秒旧演示尚未接到末步,需定位可迁移来源。 |
+
+## 甲方资料与待澄清14项
+
+| 原表位置 | 事项 | 对当前实现的影响 |
+|---|---|---|
+| 3-甲方提供!B5:D5 | 重型支援桥液压系统原理图(供油回路) | 当前未接入;缺原理图会阻挡005原理演示,不阻挡现有五步操作。 |
+| 3-甲方提供!B6:D6 | 架设环境、战场环境、抢修救灾场景三类画面素材 | 当前未接三类独立素材段。 |
+| 3-甲方提供!B7:D7 | 大腔、小腔平衡阀在装备上的安装位置 | 按新模型命名绑定大小腔阀;未获得实装位置指认确认,不能称已工程核定。 |
+| 3-甲方提供!B8:D8 | 架桥车侧、保障车侧两处快速接头的实装位置 | 按新模型给定坐标放置;仍需实装位置确认。 |
+| 3-甲方提供!B9:D9 | 前泵与取力器连接处的形状与尺寸 | 纸垫位置可演示,但形状尺寸未取得可验收依据。 |
+| 3-甲方提供!B10:D10 | 液压油箱出口球阀的编号对应关系 | 当前采用模型合并命名的同一球阀;需确认编号与功能。 |
+| 3-甲方提供!B11:D11 | 试车验证的合格判据 | 尚缺;目前试验手柄动作不能代表试车合格。 |
+| 3-甲方提供!B13:D13 | 自救阀在实装上是否需人工打开 | 005没有额外手动自救阀步骤;保持原5步,不能擅加或认为互救开关必然等同该阀。 |
+| 3-甲方提供!B14:D14 | 「互救」开关与「互救作业」开关是否同一个 | 当前005和006确实复用同一互救开关;对应关系尚待甲方确认。 |
+| 3-甲方提供!B15:D15 | 《应急替代》的故障背景与正文工况不一致 | 现有006展示外部供油操作;未区分前泵故障和液压系统完全失效情景。 |
+| 3-甲方提供!B16:D16 | 平衡阀装配的螺栓是一组 4 颗还是两组 8 颗 | 当前按同一组4颗处理两次紧固;是实现假设,需确认后决定是否增加另一组。 |
+| 3-甲方提供!B17:D17 | 平衡阀装配段中的拆卸表述 | 当前008第11/15步取袋接管并要求人工核对,不自动宣告管路处置正确;文档仍未解决相反动作。 |
+| 3-甲方提供!B18:D18 | 第 10 项「大活动把手」是否即大活动扳手 | 当前统一写大活动扳手;属于合理文字归一,最终仍可按原稿确认。 |
+| 3-甲方提供!B19:D19 | 第 4 项开口扳手的规格号数 | 目前未设具体规格;不应凭空指定开口尺寸。 |
+
+## 实现依据
+
+- src/features/virtual-training-scripts/bridge-pump-switch.js:005操作五步。
+- bridge-pump-substitute.js:006软管显示、供油着色、末步示意手柄。
+- bridge-pump-replace.js:007接头位移、纸片状态、新泵安装与试验手柄。
+- bridge-balance-valve-swap.js:008同一组螺栓复用、清洗着色、未决接管步骤。
+- bridge-new-model-definition.js:006两独立球阀和新模型来源。
+- bridge-new-model-runtime.js:真实部件映射、示意件、阀体互换安装面校准。
+- bridge-3d-definition.js:工具ID为空,动作与顺序为主要评定维度。
+- 实时任务接口返回的步骤与模型路径;0916三个主要GLB的animations数组为空。
+
+本次没有再运行全套浏览器回归;依据为工作簿原文、实时接口定义、动作代码和模型结构。先前通关截图属于前一轮执行验证,不能替代本次发现的内容差异。
diff --git a/tools/bridge-005-authoring-audit.mjs b/tools/bridge-005-authoring-audit.mjs
new file mode 100644
index 0000000..07b9f85
--- /dev/null
+++ b/tools/bridge-005-authoring-audit.mjs
@@ -0,0 +1,53 @@
+import fs from 'node:fs';
+import assert from 'node:assert/strict';
+import { login, call } from './role-permissions-live.mjs';
+
+// Read-only final audit. Never publishes or changes an existing assignment.
+const dir = 'reports/bridge-005-authoring-20260916';
+const read = name => JSON.parse(fs.readFileSync(`${dir}/${name}.json`, 'utf8'));
+const fixture = read('pilot');
+const before = read('original-assignments');
+const session = await login('root');
+async function api(endpoint) {
+ const result = await call(`tran/v1/${endpoint}`, session.accessToken);
+ assert.equal(result.status, 200, endpoint);
+ return result.data;
+}
+const originals = [];
+for (const id of ['86', '87', '88', '89']) {
+ const current = await api(`teaching/assignments/${id}`);
+ delete current.serverNow;
+ delete before[id].serverNow;
+ assert.deepEqual(current, before[id], `Original assignment ${id} changed`);
+ const project = await api(`content/projects/${current.contentProjectId}`);
+ assert.equal(project.project.publishedVersionId, current.contentVersionId);
+ originals.push({ id, code: current.code, versionId: current.contentVersionId, unchanged: true });
+}
+const task = await api(`teaching/assignments/${fixture.taskId}`);
+assert.equal(task.status, 'DRAFT');
+assert.equal(task.contentVersionId, fixture.trainingVersionId);
+const training = await api(`content/projects/${fixture.trainingId}`);
+const scene = await api(`content/projects/${fixture.sceneId}`);
+assert.equal(scene.project.publishedVersionId, fixture.sceneVersionId);
+const content = training.currentVersion.content;
+assert.equal(content.runtime?.scriptId, undefined);
+assert.notEqual(content.runtime?.definitionSource, 'SCRIPT');
+assert.equal(content.steps.length, 5);
+assert.equal(content.steps.flatMap(s => s.action.mechanism.steps).length, 6);
+assert.equal(content.steps[2].action.mechanism.steps[0].deltaDegrees, 90);
+assert.equal(scene.currentVersion.content.objects.flatMap(o => o.modelPartTargets || []).length, 7);
+assert.ok(training.currentVersion.dependencies.some(d => d.relationType === 'TRAINING_SCENE' && d.targetVersionId === fixture.sceneVersionId));
+const media = content.steps.map((s, index) => {
+ const codes = [s.audio.narrationVideoAssetCode, s.audio.narrationAssetCode];
+ for (const code of codes) assert.ok(training.currentVersion.assets.some(a => a.code === code && a.status === 'READY'), code);
+ return { step: index + 1, video: codes[0], audio: codes[1] };
+});
+const edited = await api(`content/projects/${fixture.trainingId}/versions/543`);
+assert.equal(edited.content.steps[2].action.mechanism.steps[0].deltaDegrees, 75);
+const evidence = ['editor-result', 'editor-result-90', 'runtime-edited-75', 'runtime-final-90-lan', 'original-tasks-regression', 'original-005-full-regression'];
+for (const name of evidence) assert.equal(read(name).pass, true, name);
+const audit = { pass: true, checkedAt: new Date().toISOString(), fixture, originals, steps: 5, operations: 6, partTargets: 7, editedAngle: 75, restoredAngle: 90, media, evidence };
+fs.writeFileSync(`${dir}/audit.json`, JSON.stringify(audit, null, 2));
+const links = evidence.map(name => `${name}:通过`).join('');
+fs.writeFileSync(`${dir}/index.html`, `005 场景与编排验收005 液压泵应急切换:场景制作 → 训练编排 → 教学预览
验收时间:${audit.checkedAt}。独立验证工程,原四个已发布任务数据和版本完整对比一致。
验证结果
实际编辑场景并发布后,训练重新绑定已发布场景。球阀从 90° 改为 75°,保存、刷新、发布后,完成全部六次鼠标操作及服务端预览校验;随后恢复 90° 并在局域网完整复测。五段视频和五段语音已作为训练资产绑定。
原 005 完整流程回归、原四任务初始场景回归均通过。前端构建与合同测试、后端单元测试和打包通过。当前验证仅覆盖教员预览,不代表新增学员成绩验收。
场景制作

训练编排

球阀操作与互救开关

`);
+console.log('AUDIT PASS: original tasks unchanged; 005 authoring and runtime verified');
diff --git a/tools/bridge-005-authoring-capture.mjs b/tools/bridge-005-authoring-capture.mjs
new file mode 100644
index 0000000..a2f49d7
--- /dev/null
+++ b/tools/bridge-005-authoring-capture.mjs
@@ -0,0 +1,26 @@
+import fs from 'node:fs';
+import {chromium,expect} from '@playwright/test';
+import {login,call} from './role-permissions-live.mjs';
+const dir='reports/bridge-005-authoring-20260916';fs.mkdirSync(dir,{recursive:true});
+const session=await login('root');
+const before={};
+for(const id of [86,87,88,89]) before[id]=(await call('tran/v1/teaching/assignments/'+id,session.accessToken)).data;
+if(!fs.existsSync(dir+'/original-assignments.json'))fs.writeFileSync(dir+'/original-assignments.json',JSON.stringify(before,null,2));
+const browser=await chromium.launch({channel:'msedge',headless:true,args:['--enable-unsafe-swiftshader']});
+try {
+const page=await browser.newPage({viewport:{width:1440,height:900}});
+await page.addInitScript(s=>{sessionStorage.setItem('unreal-tran:web:access-token:v1',s.accessToken);sessionStorage.setItem('unreal-tran:web:refresh-token:v1',s.refreshToken);},session);
+await page.route(/\/src\/features\/virtual-training-legacy\/upstream\/views\/training\.js(?:\?|$)/,async route=>{
+ const response=await route.fetch();await route.fulfill({response,body:(await response.text())+`
+globalThis.capture005=()=>{const e=activeTraining;if(!e?.sceneReady)return null;return {
+ objects:e.publishedContentRoot.children.map(wrapper=>{const object=wrapper.children[0];object.updateWorldMatrix(true,true);const p=new THREE.Vector3(),q=new THREE.Quaternion(),s=new THREE.Vector3();object.matrixWorld.decompose(p,q,s);return {name:wrapper.name,position:p.toArray(),rotation:new THREE.Euler().setFromQuaternion(q).toArray().slice(0,3),scale:s.toArray()};}),
+ camera:{position:e.cameraHome.position.toArray(),target:e.cameraHome.target.toArray()},
+ parts:[...e.parts].filter(([id])=>id.startsWith('front-pump-')).map(([id,o])=>({id,hinge:o.userData.trainingHingeLocal?.toArray(),front:o.userData.trainingInspectionFront?.toArray(),axis:o.userData.trainingMechanismAxis?.toArray()}))};};`});
+});
+await page.goto('http://127.0.0.1:6180/teaching/virtual-training/preview/86');
+await expect(page.locator('[data-role="loading"]')).toHaveClass(/is-hidden/,{timeout:120000});
+await expect.poll(()=>page.evaluate(()=>globalThis.capture005?.()),{timeout:30000}).not.toBeNull();
+const snapshot=await page.evaluate(()=>globalThis.capture005());
+fs.writeFileSync(dir+'/model-placement.json',JSON.stringify(snapshot,null,2));
+console.log(JSON.stringify(snapshot));
+}finally{await browser.close();}
diff --git a/tools/bridge-005-authoring-editor-live.mjs b/tools/bridge-005-authoring-editor-live.mjs
new file mode 100644
index 0000000..86b024f
--- /dev/null
+++ b/tools/bridge-005-authoring-editor-live.mjs
@@ -0,0 +1,68 @@
+import fs from 'node:fs';
+import assert from 'node:assert/strict';
+import {chromium,expect} from '@playwright/test';
+import {login,call} from './role-permissions-live.mjs';
+const dir='reports/bridge-005-authoring-20260916',fixture=JSON.parse(fs.readFileSync(dir+'/pilot.json','utf8'));
+const angle=Number(process.env.TARGET_ANGLE||75);
+const signed=await login('root'),errors=[];
+const browser=await chromium.launch({channel:'msedge',headless:true,args:['--enable-unsafe-swiftshader']});
+const page=await browser.newPage({viewport:{width:1680,height:1050}});
+await page.addInitScript(s=>{sessionStorage.setItem('unreal-tran:web:access-token:v1',s.accessToken);sessionStorage.setItem('unreal-tran:web:refresh-token:v1',s.refreshToken);},signed);
+await page.route(/\/src\/features\/guide-legacy\/demo-src\/training-editor\.js(?:\?|$)/,async route=>{const response=await route.fetch();await route.fulfill({response,body:(await response.text()).replace('const editor = new TrainingProjectEditor(root, options);','const editor = new TrainingProjectEditor(root, options); globalThis.pilotEditor = editor;')});});
+await page.route(/\/src\/features\/guide-legacy\/demo-src\/scene-editor\.js(?:\?|$)/,async route=>{const response=await route.fetch();await route.fulfill({response,body:(await response.text())+'\nglobalThis.pilotScene=()=>activeSceneEditor;'});});
+page.on('pageerror',e=>errors.push(e.message));
+await page.route(/\/src\/views\/content\/LegacyScenePageView\.vue(?:\?|$)/,async route=>{const response=await route.fetch();await route.fulfill({response,body:(await response.text()).replace('mountError.value = error instanceof Error', 'globalThis.__sceneError = String(error?.stack || error); mountError.value = error instanceof Error')});});
+try{
+ await page.goto('http://127.0.0.1:6180/content/scenes/'+fixture.sceneId+'/edit');
+ await expect.poll(()=>page.evaluate(()=>{if(globalThis.__sceneError)throw new Error(globalThis.__sceneError);return !!globalThis.pilotScene?.()?.readySettled;}),{timeout:120000}).toBe(true);
+ const scene=await page.evaluate(()=>{const e=globalThis.pilotScene();return {objects:e.serialize().objects,ready:e.pendingLoads};});
+ fs.writeFileSync(dir+'/scene-editor-roundtrip.json',JSON.stringify(scene,null,2));
+ assert.equal(scene.objects.filter(o=>o.type==='imported').length,2);assert.equal(scene.objects.flatMap(o=>o.modelPartTargets||[]).length,7);
+ await page.screenshot({path:dir+'/scene-editor.png'});
+ if(!process.env.FINALIZE||process.env.SAVE_SCENE==='1')await page.evaluate(async keepCamera=>{const e=globalThis.pilotScene();if(!keepCamera)e.camera.position.x+=0.25;await e.saveProject();await e.publishScene();},process.env.SAVE_SCENE==='1');
+ const sceneSaved=(await call('tran/v1/content/projects/'+fixture.sceneId,signed.accessToken)).data;
+ assert.equal(sceneSaved.currentVersion.status,'PUBLISHED');
+ assert.equal(sceneSaved.currentVersion.content.objects.flatMap(o=>o.modelPartTargets||[]).length,7);
+ fixture.sceneVersionId=sceneSaved.project.publishedVersionId;
+ fs.writeFileSync(dir+'/pilot.json',JSON.stringify(fixture,null,2));
+ await page.goto('http://127.0.0.1:6180/content/training-projects/'+fixture.trainingId+'/legacy');
+ await expect(page.locator('[data-action="configure-mechanism"]')).toBeVisible({timeout:120000});
+ await page.evaluate(async id=>{const e=globalThis.pilotEditor;await e.getPublishedScenes();await e.bindPublishedScene(id);for(const s of e.project.steps)e.setStepToolRequirements(s.id,[]);},fixture.sceneId+'@'+fixture.sceneVersionId);
+ assert.equal(await page.evaluate(()=>globalThis.pilotEditor.project.scenario.sceneResource.sourceVersionId),fixture.sceneVersionId);
+ const before=await page.evaluate(()=>structuredClone(globalThis.pilotEditor.project));
+ assert.equal(before.steps.length,5);assert.ok(before.steps.every(s=>s.action.kind==='mechanism-operation'));
+ assert.equal(before.steps[4].action.mechanism.steps.length,2);
+ fs.writeFileSync(dir+'/training-editor-roundtrip.json',JSON.stringify(before,null,2));
+ await page.locator('[data-action="select-step"][data-step-id="'+before.steps[2].id+'"]').first().click();
+ await page.locator('[data-action="configure-mechanism"]').click();
+ const dialog=page.getByRole('dialog',{name:'配置机构动作'});
+ await dialog.getByRole('spinbutton').first().fill(String(angle));
+ await dialog.getByRole('button',{name:'应用到步骤'}).click();
+ await expect(dialog).toBeHidden();
+ assert.equal(await page.evaluate(()=>globalThis.pilotEditor.project.steps[2].action.mechanism.steps[0].deltaDegrees),angle);
+ await page.screenshot({path:dir+'/training-editor.png'});
+ const saved=page.waitForResponse(r=>r.url().includes('/content/projects/'+fixture.trainingId)&&r.request().method()==='PUT');
+ await page.locator('[data-action="save"]').click();assert.equal((await saved).status(),200);
+ await page.reload();
+ await expect(page.locator('[data-action="configure-mechanism"]')).toBeVisible({timeout:120000});
+ assert.equal(await page.evaluate(()=>globalThis.pilotEditor.project.steps[2].action.mechanism.steps[0].deltaDegrees),angle);
+ const detail=(await call('tran/v1/content/projects/'+fixture.trainingId,signed.accessToken)).data;
+ assert.equal(detail.currentVersion.content.steps[2].action.mechanism.steps[0].deltaDegrees,angle);
+ assert.ok(detail.currentVersion.content.steps.every(s=>s.action.kind==='mechanism-operation'));
+ assert.equal(detail.currentVersion.content.steps[4].action.mechanism.steps.length,2);
+ for(const [i,step] of detail.currentVersion.content.steps.entries()){
+ assert.equal(step.audio.narrationVideoAssetCode,'PILOT-005-'+(i+1)+'-VIDEO');
+ assert.equal(step.audio.narrationAssetCode,'PILOT-005-'+(i+1)+'-AUDIO');
+ }
+ const published=page.waitForResponse(r=>r.url().endsWith('/content/projects/'+fixture.trainingId+'/publish')&&r.request().method()==='POST',{timeout:30000});
+ await page.locator('[data-action="publish"]').click();assert.equal((await published).status(),200);
+ const publishedDetail=(await call('tran/v1/content/projects/'+fixture.trainingId,signed.accessToken)).data;
+ fixture.trainingVersionId=publishedDetail.project.publishedVersionId;
+ const task=(await call('tran/v1/teaching/assignments/'+fixture.taskId,signed.accessToken)).data;
+ assert.equal(task.status,'DRAFT');
+ const rebound=await call('tran/v1/teaching/assignments/'+fixture.taskId,signed.accessToken,{...task,contentVersionId:fixture.trainingVersionId,version:task.version},'PUT');
+ assert.equal(rebound.status,200,rebound.message);
+ fs.writeFileSync(dir+'/pilot.json',JSON.stringify(fixture,null,2));
+ fs.writeFileSync(dir+'/editor-result-'+angle+'.json',JSON.stringify({pass:true,sceneObjects:2,partTargets:7,steps:5,operations:6,savedAngle:angle,originalPublishedVersion:fixture.trainingVersionId,draftVersion:detail.currentVersion.id,errors},null,2));
+ console.log('EDITOR PASS',detail.currentVersion.id);
+}catch(error){await page.screenshot({path:dir+'/editor-failure.png'});fs.writeFileSync(dir+'/editor-error.json',JSON.stringify({error:error.stack,errors,body:(await page.locator('body').innerText()).slice(-6500)},null,2));throw error;}finally{await browser.close();}
diff --git a/tools/bridge-005-authoring-import.mjs b/tools/bridge-005-authoring-import.mjs
new file mode 100644
index 0000000..62824f5
--- /dev/null
+++ b/tools/bridge-005-authoring-import.mjs
@@ -0,0 +1,83 @@
+import fs from 'node:fs';
+import path from 'node:path';
+import crypto from 'node:crypto';
+import assert from 'node:assert/strict';
+import {chromium} from '@playwright/test';
+import {login,call} from './role-permissions-live.mjs';
+import speech from '../../unreal_tran_web/src/features/virtual-training-scripts/narration-manifest.js';
+import videos from '../../unreal_tran_web/src/features/virtual-training-scripts/narration-video-manifest.js';
+const dir='reports/bridge-005-authoring-20260916';fs.mkdirSync(dir,{recursive:true});
+const file=dir+'/pilot.json', fixture=fs.existsSync(file)?JSON.parse(fs.readFileSync(file,'utf8')):{};
+const save=()=>fs.writeFileSync(file,JSON.stringify(fixture,null,2));
+const signed=await login('root');
+const api=async(endpoint,body,method)=>{const r=await call('tran/v1/'+endpoint,signed.accessToken,body,method);assert.equal(r.status,200,endpoint+': '+r.message);return r.data;};
+const placements=JSON.parse(fs.readFileSync(dir+'/model-placement.json','utf8'));
+const original=await api('content/projects/438');
+assert.equal(original.currentVersion.id,'533','The source must be the verified published version');
+const source=structuredClone(original.currentVersion.content);
+const snapshot=source.scenario.sceneResource.snapshot;
+const prefix='BRIDGE-005-AUTHORING-PILOT';
+async function create(key,type,content,assets=[],dependencies=[]){
+ if(fixture[key]){
+ const current=await api('content/projects/'+fixture[key]);
+ if(type==='SCENE' && !current.project.publishedVersionId)return api('content/projects/'+current.project.id,{...current.project,content,assets,dependencies,version:current.project.version},'PUT');
+ return current;
+ }
+ const code=prefix+'-'+type;
+ const pilotName='005 液压泵应急切换(编排验证)';
+ const found=await api('content/projects?type='+type+'&keyword='+encodeURIComponent(pilotName)+'&size=100');
+ assert.ok(!found.records.some(p=>p.name===pilotName),'Untracked pilot already exists; inspect before adopting');
+ const detail=await api('content/projects',{code,type,name:'005 液压泵应急切换(编排验证)',description:'独立验证工程;不替换 TASK-VIRTUAL-005 及其发布版本。',categoryCode:'MAINTENANCE',trainingMode:type==='TRAINING'?'VIRTUAL':undefined,coverUri:'/models/step-model-front-pump-thumb.png',content,assets,dependencies});
+ fixture[key]=detail.project.id;save();return detail;
+}
+async function publish(detail){
+ if(detail.project.publishedVersionId===detail.currentVersion.id)return detail;
+ return api('content/projects/'+detail.project.id+'/publish',{version:detail.project.version});
+}
+const asset=(code,url,type)=>{const b=fs.readFileSync(path.resolve('../unreal_tran_web/public',url.replace(/^\//,'')));return {code,name:code,type,storageUri:url,mimeType:'model/gltf-binary',sizeBytes:b.length,sha256:crypto.createHash('sha256').update(b).digest('hex'),metadata:{builtin:true},status:'READY',sortOrder:0};};
+const sceneObjects=snapshot.objects.map((o,i)=>({id:o.sceneId,type:'model',name:o.name,sourceName:o.sourceName,assetId:o.modelId,assetCode:i?'PILOT-VEHICLE':'PILOT-TERRAIN',assetUrl:o.resourceUrl,...placements.objects[i],visible:true,opacity:1,color:'#ffffff',semantic:{category:i?'实训装备':'环境地形',deviceId:o.sceneId,modelId:o.modelId,interactionId:o.interactionId,operable:false,capabilities:['select','inspect']}}));
+const vehicle=snapshot.objects[1];
+for(const p of vehicle.modelPartTargets)sceneObjects.push({id:p.interactionId,parentId:vehicle.sceneId,type:'model-part',name:p.name,sourceNodeName:p.sourceNodeName,sourceInteractionId:p.interactionId,position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],visible:true,opacity:1,semantic:{category:'液压机构',deviceId:vehicle.sceneId,modelId:vehicle.modelId,interactionId:p.interactionId,operable:true,capabilities:p.capabilities}});
+const sceneContent={id:prefix+'-SCENE',settings:{translateSnap:0,rotateSnap:0,scaleSnap:0,snapEnabled:false},schema:'unreal-tran.scene',version:'2.0',name:'005 液压泵应急切换(编排验证)',templateId:'outdoor-1',sceneType:'outdoor',objects:sceneObjects,rendering:{background:'#a8cbe1',transparentBackground:false,fogColor:'#a8cbe1',fogNear:34,fogFar:88,gridSize:40,gridDivisions:80,fogEnabled:false,exposure:1.05,hemisphereSkyColor:'#edf4f7',hemisphereGroundColor:'#697276',hemisphereIntensity:1.45,directionalColor:'#ffffff',directionalIntensity:2,directionalPosition:[12,18,10],environmentIntensity:1,gridVisible:false,cameraFov:45,cameraNear:0.05,cameraFar:800,cameraPosition:placements.camera.position,cameraTarget:placements.camera.target}};
+for(const o of sceneObjects){Object.assign(o,{deleted:false,locked:false,color:'#ffffff',castShadow:true,receiveShadow:true,components:[]});o.semantic.deviceId=o.id;o.semantic.tags=[];}
+let scene=await create('sceneId','SCENE',sceneContent,[asset('PILOT-TERRAIN','/models/地形.glb','MODEL_FILE'),asset('PILOT-VEHICLE','/models/步骤模型.glb','MODEL_FILE')]);
+scene=await publish(scene);fixture.sceneVersionId=scene.project.publishedVersionId;save();
+const content=structuredClone(source);
+delete content.scenario.sceneResource;delete content.resources;delete content.runtime.definitionSource;delete content.runtime.scriptId;delete content.runtime.scriptVersion;
+content.task.title='005 液压泵应急切换(编排验证)';content.task.code=prefix;content.scenario={sceneProjectId:scene.project.id,sceneVersionId:scene.project.publishedVersionId};
+content.steps.forEach(s=>{s.interaction='rule-check';s.targetRef={sceneObjectId:s.targetId,interactionId:s.targetId,sourceNodeName:s.targetNodeName,capabilities:['select','inspect','mechanism'],visible:true};s.audio={narrationSource:'offline',narrationText:'',narrationUrl:'',safetyUrl:'',successCue:'ui',errorCue:'collision-error'};});
+const browser=await chromium.launch({channel:'msedge',headless:true});
+let normalized;
+try{const page=await browser.newPage();await page.goto('http://127.0.0.1:6180');normalized=await page.evaluate(async content=>{const m=await import('/src/features/training/trainingDocument.ts');return m.normalizeTrainingContent(content,'VIRTUAL');},content);}finally{await browser.close();}
+const dependencies=[{targetProjectId:scene.project.id,targetVersionId:scene.project.publishedVersionId,relationType:'TRAINING_SCENE',required:true}];
+let training=await create('trainingId','TRAINING',normalized,[],dependencies);
+if(!fixture.mediaUploaded){
+ const assets=[];
+ const pack=speech.scripts.find(p=>p.id==='bridge-pump-switch'),vp=videos.scripts.find(p=>p.id==='bridge-pump-switch');
+ for(let i=0;i a.code === code && a.status === 'READY'));
+ Object.assign(step.audio, { narrationVideoAssetCode: video, narrationAssetCode: audio, offlineMediaType: 'video' });
+}
+const saved = await call(`tran/v1/content/projects/${project.id}`, session.accessToken,
+ { ...project, content, assets: currentVersion.assets, dependencies: currentVersion.dependencies, version: project.version }, 'PUT');
+assert.equal(saved.status, 200, saved.message);
+console.log('Pilot media bindings restored; save/reopen/publish through editor next');
diff --git a/tools/bridge-005-new-model-import.mjs b/tools/bridge-005-new-model-import.mjs
new file mode 100644
index 0000000..012991c
--- /dev/null
+++ b/tools/bridge-005-new-model-import.mjs
@@ -0,0 +1,55 @@
+import fs from 'node:fs';
+import crypto from 'node:crypto';
+import assert from 'node:assert/strict';
+import {login,call} from './role-permissions-live.mjs';
+const dir='reports/bridge-005-new-model-20260917';fs.mkdirSync(dir,{recursive:true});
+const signed=await login('root');
+const api=async(endpoint,body,method)=>{const r=await call('tran/v1/'+endpoint,signed.accessToken,body,method);assert.equal(r.status,200,endpoint+': '+r.message);return r.data;};
+const fixturePath='reports/bridge-005-authoring-20260916/pilot.json';
+const fixture=JSON.parse(fs.readFileSync(fixturePath));
+assert.equal(fixture.sceneId,'457');assert.equal(fixture.trainingId,'458');assert.equal(fixture.taskId,'116');
+const task=await api('teaching/assignments/116');assert.equal(task.status,'DRAFT');
+const scene=await api('content/projects/457'),training=await api('content/projects/458');
+assert.equal(scene.project.name,'005 液压泵应急切换(编排验证)');
+for(const [name,data]of [['before-457',scene],['before-458',training],['before-116',task]])if(!fs.existsSync(dir+'/'+name+'.json'))fs.writeFileSync(dir+'/'+name+'.json',JSON.stringify(data,null,2));
+const map={
+ '1液压泵':'1_24柱塞泵3_05前泵3_08新泵',
+ '2取力器':'1_25取力器',
+ '2取力器开关':'1_25和1_27和2_03和2_08取力器开关',
+ '3球阀开关':'1_26球阀开关',
+ '5辅助控制盒':'1_28辅助控制盒内',
+ '5辅助控制盒盖':'1_28辅助控制盒盖',
+ '5互救开关':'1_28和2_06互救开关',
+};
+const bytes=fs.readFileSync('../../模型/0916架桥车.glb');
+const gltf=JSON.parse(bytes.subarray(20,20+bytes.readUInt32LE(12)));
+for(const name of Object.values(map))assert.equal(gltf.nodes.filter(n=>n.name===name).length,1,name);
+const filename='bridge-erector-20260916.glb',resourceUrl='/models/'+filename;
+const dest='../unreal_tran_web/public/models/'+filename;
+if(fs.existsSync(dest))assert.deepEqual(fs.readFileSync(dest),bytes);else fs.copyFileSync('../../模型/0916架桥车.glb',dest);
+const replace=value=>typeof value==='string'?(map[value]||value):Array.isArray(value)?value.map(replace):value&&typeof value==='object'?Object.fromEntries(Object.entries(value).map(([k,v])=>[k,replace(v)])):value;
+const content=replace(structuredClone(scene.currentVersion.content));
+content.presetId='terrain-1';content.name='真实野外训练场';
+content.environment={...content.environment,presetId:'terrain-1',useModelFloor:true};
+content.objects=content.objects.filter(o=>o.type!=='scene-environment');
+const terrain=content.objects.find(o=>o.sceneId==='front-pump-training-yard');
+Object.assign(terrain,{assetCode:'PILOT-TERRAIN-005',sourceName:'terrain-005-20260917.glb',resourceUrl:'/models/terrain-005-20260917.glb',sourceAssetId:''});
+const vehicle=content.objects.find(o=>o.sceneId==='front-pump-rescue-vehicle');assert.ok(vehicle);
+if(vehicle.sourceName!=='0916架桥车.glb'){
+ // GLB world minima: original -0.6291751861572266; new -0.00013103485107424.
+ // Preserve the existing wheel contact height under the published scene scale.
+ vehicle.position[1]-=0.6290441513061523*vehicle.scale[1];
+}
+Object.assign(vehicle,{sourceName:'0916架桥车.glb',resourceUrl,assetKey:'',sourceAssetId:'',assetCode:'PILOT-VEHICLE-0916',sizeBytes:bytes.length,modelEditorRevision:2,modelEditorAssetId:'bridge-erector-0916',modelOverrides:{},partOverrides:{}});
+for(const p of vehicle.modelPartTargets){const nodeIndex=gltf.nodes.findIndex(n=>n.name===p.sourceNodeName);const parentIndex=gltf.nodes.findIndex(n=>n.children?.includes(nodeIndex));const rootIndex=gltf.scenes[0].nodes.indexOf(parentIndex);p.nodePath=`0/${rootIndex}/0`;p.editorId=`bridge-0916-node-${nodeIndex}`;}
+const assets=scene.currentVersion.assets.filter(a=>!['PILOT-VEHICLE-0916','PILOT-TERRAIN-005'].includes(a.code));
+const terrainBytes=fs.readFileSync('../unreal_tran_web/public/models/terrain-005-20260917.glb');
+assets.push({code:'PILOT-TERRAIN-005',name:terrain.sourceName,type:'MODEL_FILE',storageUri:terrain.resourceUrl,mimeType:'model/gltf-binary',sizeBytes:terrainBytes.length,sha256:crypto.createHash('sha256').update(terrainBytes).digest('hex'),metadata:{builtin:true},status:'READY',sortOrder:4});
+assets.push({code:'PILOT-VEHICLE-0916',name:'0916架桥车.glb',type:'MODEL_FILE',storageUri:resourceUrl,mimeType:'model/gltf-binary',sizeBytes:bytes.length,sha256:crypto.createHash('sha256').update(bytes).digest('hex'),metadata:{builtin:true,modelRevision:'20260916'},status:'READY',sortOrder:3});
+let saved=await api('content/projects/457',{...scene.project,content,assets,dependencies:scene.currentVersion.dependencies,version:scene.project.version,changeSummary:'005 验证工程更换 0916 架桥车,重绑七个部件,保持轮胎高度'},'PUT');
+saved=await api('content/projects/457/publish',{version:saved.project.version});
+fixture.sceneVersionId=saved.project.publishedVersionId;fs.writeFileSync(fixturePath,JSON.stringify(fixture,null,2));
+const trainingContent=replace(structuredClone(training.currentVersion.content));
+await api('content/projects/458',{...training.project,content:trainingContent,assets:training.currentVersion.assets,dependencies:training.currentVersion.dependencies,version:training.project.version,changeSummary:'更新新版架桥车源节点名称,待编排编辑器重绑新场景'},'PUT');
+fs.writeFileSync(dir+'/mapping.json',JSON.stringify({source:'0916架桥车.glb',sha256:assets.at(-1).sha256,resourceUrl,sceneVersionId:fixture.sceneVersionId,map,targets:vehicle.modelPartTargets,position:vehicle.position},null,2));
+console.log('New scene published',fixture.sceneVersionId,'; bind and publish training through the editor next');
diff --git a/tools/bridge-005-new-model-report.mjs b/tools/bridge-005-new-model-report.mjs
new file mode 100644
index 0000000..042202e
--- /dev/null
+++ b/tools/bridge-005-new-model-report.mjs
@@ -0,0 +1,33 @@
+import fs from 'node:fs';
+import crypto from 'node:crypto';
+import assert from 'node:assert/strict';
+import {login,call} from './role-permissions-live.mjs';
+const dir='reports/bridge-005-new-model-20260917';
+const prior='reports/bridge-005-authoring-20260916';
+const read=(p)=>JSON.parse(fs.readFileSync(p,'utf8'));
+const fixture=read(prior+'/pilot.json'),before=read(prior+'/original-assignments.json');
+const session=await login('root');
+const api=async endpoint=>{const r=await call('tran/v1/'+endpoint,session.accessToken);assert.equal(r.status,200);return r.data;};
+const originals=[];
+for(const id of ['86','87','88','89']){const current=await api('teaching/assignments/'+id);delete current.serverNow;delete before[id].serverNow;assert.deepEqual(current,before[id]);originals.push({id,code:current.code,versionId:current.contentVersionId,unchanged:true});}
+const scene=await api('content/projects/'+fixture.sceneId),training=await api('content/projects/'+fixture.trainingId),task=await api('teaching/assignments/'+fixture.taskId);
+assert.equal(task.status,'DRAFT');assert.equal(task.contentVersionId,training.project.publishedVersionId);
+assert.ok(training.currentVersion.dependencies.some(d=>d.targetVersionId===scene.project.publishedVersionId));
+const vehicle=scene.currentVersion.content.objects.find(o=>o.sourceName==='0916架桥车.glb');
+assert.ok(vehicle);assert.equal(vehicle.modelPartTargets.length,7);
+assert.equal(scene.currentVersion.content.environment.useModelFloor,true);
+assert.equal(scene.currentVersion.content.objects.some(o=>o.type==='scene-environment'),false);
+const asset=scene.currentVersion.assets.find(a=>a.code===vehicle.assetCode);
+const source=fs.readFileSync('../../模型/0916架桥车.glb');
+const installed=fs.readFileSync('../unreal_tran_web/public'+vehicle.resourceUrl);
+assert.deepEqual(installed,source);assert.equal(asset.sha256,crypto.createHash('sha256').update(source).digest('hex'));
+const steps=training.currentVersion.content.steps;
+assert.equal(steps.length,5);assert.equal(steps.flatMap(s=>s.action.mechanism.steps).length,6);
+for(const step of steps){assert.ok(vehicle.modelPartTargets.some(p=>p.interactionId===step.targetId&&p.sourceNodeName===step.targetRef.sourceNodeName));assert.ok(step.audio.narrationVideoAssetCode&&step.audio.narrationAssetCode);}
+const live=read(dir+'/runtime-final-lan.json'),regression=read(dir+'/original-005-regression.json');
+assert.equal(live.pass,true);assert.equal(regression.pass,true);
+const audit={pass:true,time:new Date().toISOString(),fixture,model:asset.storageUri,sha256:asset.sha256,targets:vehicle.modelPartTargets,originals,grounding:live.checks.find(c=>c.grounding)?.grounding,media:live.checks.find(c=>c.media)?.media,steps:5,operations:6};
+fs.writeFileSync(dir+'/audit.json',JSON.stringify(audit,null,2));
+fs.copyFileSync(prior+'/scene-editor.png',dir+'/scene-editor.png');fs.copyFileSync(prior+'/training-editor.png',dir+'/training-editor.png');
+fs.writeFileSync(dir+'/index.html',`005 新模型验收005 新版架桥车:替换与完整流程验收
${audit.time} · 本地与局域网 · 管理员教员预览
结果
已替换为 0916架桥车.glb,七个目标全部重新绑定。五步六个动作、真实鼠标拖拽、服务端预览校验、数字人视频与语音回退通过。前端构建和新模型几何测试通过。
新增场景资产保留了原运行中的平整作业区,移除重复的基础地面;车轮贴地检查通过。盖板沿新版铰链向外开启,互救手柄向上拨动。
验证任务 ${fixture.taskId} 保持草稿。原四个已发布任务的完整数据逐项对比一致,旧版 005 的完整流程回归通过。未切换原学员任务,未验证新增学员成绩。
新版整车

球阀操作

开盖与互救开关

场景制作与训练编排

`);
+console.log(JSON.stringify({pass:true,sceneVersion:fixture.sceneVersionId,trainingVersion:fixture.trainingVersionId,originalsUnchanged:true}));
diff --git a/tools/bridge-access-survey.mjs b/tools/bridge-access-survey.mjs
new file mode 100644
index 0000000..027189f
--- /dev/null
+++ b/tools/bridge-access-survey.mjs
@@ -0,0 +1,28 @@
+import fs from 'node:fs/promises';
+import {chromium,expect} from '@playwright/test';
+import {login} from './role-permissions-live.mjs';
+const browser=await chromium.launch({channel:'msedge',headless:true,args:['--enable-unsafe-swiftshader']});
+const page=await browser.newPage();
+await page.addInitScript(s=>{sessionStorage.setItem('unreal-tran:web:access-token:v1',s.accessToken);sessionStorage.setItem('unreal-tran:web:refresh-token:v1',s.refreshToken);},await login('root'));
+await page.route(/\/src\/features\/virtual-training-legacy\/upstream\/views\/training\.js(?:\?|$)/,async route=>{
+ const response=await route.fetch();await route.fulfill({response,body:await response.text()+`
+ globalThis.__accessSurvey=()=>{
+ const e=activeTraining,result=[];
+ for(const id of ['front-pump-hydraulic-pump','front-pump-pto-switch','front-pump-ball-valve-switch','front-pump-aux-control-box-cover']){
+ const o=e.parts.get(id),box=physicalBounds(o),center=box.getCenter(new THREE.Vector3()),size=box.getSize(new THREE.Vector3()),views=[];
+ const meshes=[];e.publishedContentRoot.traverse(n=>{if(n.isMesh&&!n.userData.trainingPickProxy&&effectivelyVisible(n))meshes.push(n);});
+ for(const elevation of [0,.2,.5])for(let angle=0;angle<360;angle+=45){
+ const a=angle*Math.PI/180,direction=new THREE.Vector3(Math.sin(a),elevation,Math.cos(a)).normalize(),camera=center.clone().addScaledVector(direction,2.5322),ray=new THREE.Raycaster(),blockers=[];let hits=0;
+ for(const offset of [[0,0,0],[.3,0,0],[-.3,0,0],[0,.3,0],[0,-.3,0]]){
+ const target=center.clone().add(new THREE.Vector3(...offset).multiply(size));ray.set(camera,target.sub(camera).normalize());
+ const hit=ray.intersectObjects(meshes,false)[0];if(hit&&e.isObjectInsideTarget(hit.object,o))hits++;else if(hit)blockers.push(hit.object.name);
+ }
+ views.push({angle,elevation,direction:direction.toArray(),hits,blockers:[...new Set(blockers)]});
+ }result.push({id,views});}return result;
+ };`});
+});
+try{
+ await page.goto('http://127.0.0.1:6180/teaching/virtual-training/preview/86');await expect(page.locator('[data-role="loading"]')).toHaveClass(/is-hidden/,{timeout:120000});
+ const result=await page.evaluate(()=>__accessSurvey());await fs.writeFile('reports/bridge-solid-view-20260915/access-survey.json',JSON.stringify(result,null,2));
+ for(const item of result)console.log(JSON.stringify({id:item.id,best:item.views.sort((a,b)=>b.hits-a.hits).slice(0,5)}));
+}finally{await browser.close();}
diff --git a/tools/bridge-controls-live.mjs b/tools/bridge-controls-live.mjs
new file mode 100644
index 0000000..8bb3701
--- /dev/null
+++ b/tools/bridge-controls-live.mjs
@@ -0,0 +1,262 @@
+import fs from 'node:fs/promises';
+import path from 'node:path';
+import assert from 'node:assert/strict';
+import {chromium,expect} from '@playwright/test';
+import {login,call} from './role-permissions-live.mjs';
+import {scripts,scriptDefinition} from '../../unreal_tran_web/src/features/virtual-training-scripts/definition.js';
+
+const dir=path.resolve('reports/'+(process.env.REPORT_NAME||'bridge-controls-review-20260915'));await fs.mkdir(dir,{recursive:true});
+const resultFile=process.env.RESULT_FILE||'result.json';
+const signed=await login('root'),checks=[],errors=[],writes=[];
+const pending=new Map(),networkErrors=[];
+const browser=await chromium.launch({channel:'msedge',headless:true,args:['--enable-unsafe-swiftshader']});
+const page=await browser.newPage({viewport:{width:Number(process.env.WIDTH)||1366,height:Number(process.env.HEIGHT)||768}});
+await page.addInitScript(s=>{sessionStorage.setItem('unreal-tran:web:access-token:v1',s.accessToken);sessionStorage.setItem('unreal-tran:web:refresh-token:v1',s.refreshToken);localStorage.setItem('unreal-tran:web:preferences:v1',JSON.stringify({themeMode:'military'}));},signed);
+// Read-only geometry preflight before publishing a migration. Never use this
+// mode to claim completion: server validation remains on the existing version.
+if(process.env.PROPOSED_MODELS==='1'){
+ assert.notEqual(process.env.EXECUTE,'1');
+ await page.route(/\/api\/tran\/v1\/teaching\/assignments\/\d+$/,async route=>{
+ const response=await route.fetch(),body=await response.json(),script=scripts.find(s=>s.code===body.data?.code);
+ if(script?.version==='4')body.data.definitionSnapshot=scriptDefinition(script);
+ await route.fulfill({response,json:body});
+ });
+}
+await page.route(/\/src\/features\/virtual-training-legacy\/upstream\/views\/training\.js(?:\?|$)/,async route=>{
+ const response=await route.fetch();await route.fulfill({response,body:(await response.text()).replace("this.showFeedback('error', `编辑场景加载失败:", "globalThis.__bridgeLoadError=error.stack; this.showFeedback('error', `编辑场景加载失败:").replace('const partId = hit.object.userData.partId;', 'globalThis.__lastPointerPick={id:hit.object.userData.partId,x:event.clientX,y:event.clientY,active:this.getActiveTargetId()}; const partId = hit.object.userData.partId;')+`
+globalThis.__inspectionSnapshot=(options={})=>{
+ const e=activeTraining;if(!e?.sceneReady)return null;
+ const id=e.getActiveTargetId(),object=e.parts.get(id),box=object?physicalBounds(object):null;
+ const screen=object?e.worldToScreen(box.getCenter(new THREE.Vector3())):null;
+ const materials=[];e.publishedContentRoot.traverse(o=>{if(o.isMesh&&!o.userData.trainingPickProxy)for(const m of Array.isArray(o.material)?o.material:[o.material])materials.push({opacity:m.opacity,baseline:e.viewerMaterialBaseline.get(m)?.opacity,side:m.side});});
+ const labels=[...e.viewport.querySelectorAll('.training-part-label.is-visible')].map(n=>{const r=n.getBoundingClientRect();return {text:n.textContent.trim(),x:r.x,y:r.y,w:r.width,h:r.height,id:n.dataset.labelTarget||id};});
+ const op=e.getActiveMechanismOperation()?.operation;
+ const lid=e.parts.get('front-pump-aux-control-box-cover');
+ const projected=object?e.inspection.projectBounds(object):null;
+ const canvas=e.canvas.getBoundingClientRect();
+ const pickPoints=[];
+ if(projected){const ray=new THREE.Raycaster();for(const fy of [0.5,0.35,0.65,0.2,0.8,0.05,0.95])for(const fx of [0.5,0.35,0.65,0.2,0.8,0.05,0.95]){
+ const x=projected.x+projected.w*fx,y=projected.y+projected.h*fy;
+ if(document.elementFromPoint(x+canvas.left,y+canvas.top)!==e.canvas)continue;
+ ray.setFromCamera(new THREE.Vector2(x/canvas.width*2-1,1-y/canvas.height*2),e.camera);
+ const hit=ray.intersectObjects(e.pickables,false).find(h=>!h.object.userData.trainingPickProxy&&effectivelyVisible(h.object)&&!(Array.isArray(h.object.material)?h.object.material:[h.object.material]).some(m=>m.transparent&&m.opacity!h.object.userData.trainingPickProxy&&effectivelyVisible(h.object));
+ if(hit?.object.userData.partId==='scene:front-pump-rescue-vehicle')freePoints.push({x:canvas.left+x,y:canvas.top+y});
+ }}
+ let grounding=null;
+ if(options.newModel){
+ const vehicle=e.viewerPrimaryObject,terrain=e.publishedContentRoot.children.filter(o=>o!==vehicle),bounds=physicalBounds(vehicle),ray=new THREE.Raycaster(),gaps=[];
+ vehicle.traverse(mesh=>{if(!mesh.isMesh||mesh.userData.trainingPickProxy)return;const a=mesh.geometry.attributes.position,p=new THREE.Vector3();for(let i=0;ibounds.min.y+.002)continue;ray.set(new THREE.Vector3(p.x,p.y+2,p.z),new THREE.Vector3(0,-1,0));const hit=ray.intersectObjects(terrain,true)[0];if(hit)gaps.push(p.y-hit.point.y);}});
+ grounding={samples:gaps.length,minGap:Math.min(...gaps),maxGap:Math.max(...gaps)};
+ }
+ return {id,step:e.session.stepIndex,operation:e.getActiveMechanismOperation()?.state.index,errors:e.errorCount,complete:e.session.isComplete(),pending:!!e.bridgeOperationPending||!!e.serverCommitPending,
+ drag:e.bridgeDrag?.operation.targetId,cameraTween:!!e.viewerCameraTween,lastPointerPick:globalThis.__lastPointerPick,
+ lid:lid?{position:lid.position.toArray(),quaternion:lid.quaternion.toArray()}:null,evidenceCount:e.mechanismState?.evidence.length,
+ grounding,modelSources:e.scenario.sceneResource.snapshot.objects.filter(o=>o.type==='imported').map(o=>({name:o.sourceName,url:o.resourceUrl})),
+ hdr:e.scene.environment?.name,distance:e.camera.position.distanceTo(e.controls.target),zoom:e.camera.zoom,exposure:e.renderer.toneMappingExposure,light:[e.ambient.intensity,e.sun.intensity],
+ screen,bounds:box?box.getSize(new THREE.Vector3()).toArray():null,projected,pivot,pickPoints,freePoints,
+ tip:object?.userData.trainingHandleTipLocal ? object.localToWorld(object.userData.trainingHandleTipLocal.clone()).toArray():null,
+ front:object?.userData.trainingInspectionFront?.toArray(),
+ workflowCoverage:e.inspection.workflowTargets().filter(effectivelyVisible).map(o=>{const meshes=[];o.traverse(n=>{if(n.isMesh&&!n.userData.trainingPickProxy&&effectivelyVisible(n))meshes.push(n);});return {name:o.userData.partId,glowing:meshes.every(m=>e.inspection.outline.selectedObjects.includes(m)||e.inspection.workflowOutline.selectedObjects.includes(m))};}),
+ camera:e.camera.position.toArray(),target:e.controls.target.toArray(),outline:e.inspection.outline.selectedObjects.length,cutaway:e.inspection.cutaway?.size||0,materials,labels,
+ narration:e.steps.map(s=>({video:e.context.videoUrls?.includes(s.audio?.narrationUrl)===true,fallback:!!s.audio?.narrationFallbackUrl})),
+ operationData:op,position:object?.position.toArray(),quaternion:(object?.userData.bridgeRotatingPart||object)?.quaternion.toArray()};
+};`});
+});
+page.on('pageerror',error=>errors.push(error.message));
+page.on('request',r=>pending.set(r,new URL(r.url()).pathname));
+page.on('requestfinished',r=>pending.delete(r));
+page.on('requestfailed',r=>{networkErrors.push({path:new URL(r.url()).pathname,error:r.failure()?.errorText});pending.delete(r);});
+page.on('request',request=>{if(request.url().includes('/api/tran/')&&!['GET','HEAD'].includes(request.method()))writes.push(request.url());});
+const snapshot=()=>page.evaluate(()=>globalThis.__inspectionSnapshot?.());
+const ready=async()=>{await expect(page.locator('[data-role="loading"]')).toHaveClass(/is-hidden/,{timeout:120000});const error=await page.evaluate(()=>globalThis.__bridgeLoadError);if(error)throw new Error(error);await expect.poll(snapshot,{timeout:30000}).not.toBeNull();await page.waitForTimeout(1800);};
+try {
+ for(const id of (process.env.TASK_IDS||'86,87,88,89').split(',')){
+ console.log('OPEN',id);
+ await page.goto((process.env.BASE_URL||'http://127.0.0.1:6180')+'/teaching/virtual-training/preview/'+id);await ready();
+ const introSkip=page.locator('.training-introduction [data-intro-command="skip"]');
+ if(await introSkip.isVisible())await introSkip.click();
+ const state=await snapshot();
+ await page.screenshot({path:path.join(dir,`task-${id}-initial.png`)});
+ assert.equal(state.hdr,'venice_sunset_1k');assert.ok(state.outline>0);
+ assert.ok(state.materials.every(m=>m.side===2),'DoubleSide physical materials');
+ assert.ok(state.materials.every(m=>m.baseline==null||m.opacity===m.baseline),'original opacity');
+ assert.equal(state.zoom,1,'initial overview is not magnified');assert.ok(state.workflowCoverage.every(t=>t.glowing),'all visible workflow parts glow on entry');
+ assert.ok(state.labels.some(l=>l.id===state.id),'active target label visible');
+ checks.push({name:'task '+id+' first view',state});console.log('VIEW',id,JSON.stringify({projected:state.projected,labels:state.labels.map(l=>l.text),cutaway:state.cutaway}));
+ if(process.env.CHECK_NEW_MODEL==='1'){
+ const inspected=await page.evaluate(()=>globalThis.__inspectionSnapshot({newModel:true}));
+ assert.ok(inspected.modelSources.some(m=>m.name==='0916架桥车.glb'&&m.url.includes('bridge-erector-20260916.glb')));
+ assert.ok(inspected.grounding.samples>0);assert.ok(inspected.grounding.minGap>-.003&&inspected.grounding.maxGap<.003,'new vehicle contacts authored terrain');
+ checks.push({name:'new model source and ground contacts',pass:true,grounding:inspected.grounding,modelSources:inspected.modelSources});
+ }
+ if(process.env.REQUIRE_VIDEO==='1'){
+ assert.ok(state.narration.length>0);assert.ok(state.narration.every(s=>s.video&&s.fallback),'all steps have video and voice fallback');
+ await page.locator('[data-action="teacher-speak"]').click();
+ const video=page.locator('.training-server-video');
+ await expect(video).toBeVisible();
+ await expect.poll(()=>video.evaluate(v=>v.readyState>=2&&v.videoWidth>0&&v.currentTime>0),{timeout:45000}).toBe(true);
+ checks.push({name:'task '+id+' digital-human video playback',pass:true,media:await video.evaluate(v=>({width:v.videoWidth,height:v.videoHeight,duration:v.duration,currentTime:v.currentTime}))});
+ }
+ if(process.env.EXECUTE==='1'||process.env.EXTRA_CONTROLS==='1'){
+ for(const action of ['steps','tools']){
+ const button=page.locator(`[data-viewer-action="${action}"]`);
+ if(await button.getAttribute('aria-expanded')==='true')await button.click();
+ }
+ await page.waitForTimeout(400);
+ }
+ if(process.env.EXTRA_CONTROLS==='1'){
+ await page.locator('[data-viewer-action="tools"]').click();
+ await page.locator('[data-action="viewer-reset-view"]').click();await page.waitForTimeout(1000);
+ const free=await page.evaluate(()=>globalThis.__inspectionSnapshot({free:true}));assert.ok(free.freePoints.length,'vehicle body can be selected');
+ const point=free.freePoints[0],beforeWrites=writes.length;
+ await page.mouse.click(point.x,point.y);await page.waitForTimeout(900);
+ const selected=await snapshot();assert.equal(selected.errors,free.errors);assert.equal(selected.step,free.step);assert.equal(selected.operation,free.operation);assert.equal(writes.length,beforeWrites);
+ for(let i=0;i<4;i++)await page.locator('[data-action="toggle-issue-highlight"]').click();
+ assert.ok((await snapshot()).materials.every(m=>m.baseline==null||m.opacity===m.baseline));
+ await page.locator('[data-action="viewer-reset-view"]').click();await page.waitForTimeout(1000);
+ const orbit=await page.evaluate(()=>globalThis.__inspectionSnapshot({free:true}));assert.ok(orbit.freePoints.length);
+ const dragPoint=orbit.freePoints[0];await page.mouse.move(dragPoint.x,dragPoint.y);await page.mouse.down();await page.mouse.move(dragPoint.x+45,dragPoint.y+20,{steps:8});await page.mouse.up();await page.waitForTimeout(900);
+ const moved=await snapshot();assert.equal(moved.errors,0);assert.notDeepEqual(moved.camera,orbit.camera);assert.equal(writes.length,beforeWrites);
+ await page.locator('[data-viewer-action="tools"]').click();
+ await page.locator('[data-viewer-action="fullscreen"]').click();await page.waitForTimeout(400);await page.keyboard.press('Escape');await page.waitForTimeout(500);
+ await expect(page.locator('[data-viewer-action="fullscreen"]')).toHaveAttribute('title','全屏操作');await expect(page.locator('[data-role="modal"]')).toBeHidden();
+ assert.ok(await page.evaluate(()=>document.documentElement.scrollWidth<=innerWidth),'no page horizontal overflow');
+ await page.screenshot({path:path.join(dir,'free-inspection-controls.png')});checks.push({name:'non-workflow body click/orbit, selection-highlight restoration, Escape fullscreen exit',pass:true});
+ }
+ if(process.env.EXECUTE==='1'){
+ // Labels only focus: no operation, no validation request, no score/error change.
+ const beforeWrites=writes.length;
+ await page.locator('[data-role="part-label"]').click();await page.waitForTimeout(900);
+ const enlarged=await snapshot();assert.equal(enlarged.step,state.step);assert.equal(enlarged.operation,state.operation);assert.equal(writes.length,beforeWrites);assert.ok(enlarged.projected.w+enlarged.projected.h>state.projected.w+state.projected.h,'label enlarges the target from overview');
+ const standOff=enlarged.distance;
+ // Native fullscreen and both collapsible panels remain reversible on laptops.
+ await page.locator('[data-viewer-action="steps"]').click();await expect(page.locator('.training-steps-panel')).toBeVisible();
+ await page.locator('[data-viewer-action="steps"]').click();await expect(page.locator('.training-steps-panel')).toBeHidden();
+ await page.locator('[data-viewer-action="tools"]').click();await expect(page.locator('[data-role="model-commandbar"]')).toBeVisible();
+ assert.equal(await page.locator('.training-bottom-bar [data-viewer-action]').count(),3,'display controls are in the bottom bar');
+ assert.equal(await page.locator('.training-viewer-actions').innerText(),'','icon-only controls');
+ for(const button of await page.locator('[data-viewer-action]').all())assert.ok(await button.getAttribute('title'),'icons have hover titles');
+ await page.locator('[data-action="toggle-translucent-others"]').click();await page.waitForTimeout(250);
+ assert.ok((await snapshot()).materials.some(m=>m.baseline>0 && m.opacitym.baseline>0 && m.opacitym.baseline==null||m.opacity===m.baseline),'opacity restored after separate translucency is off');
+ await page.locator('[data-action="toggle-part-labels"]').click();
+ for(let n=0;n<2;n++){await page.locator('[data-action="toggle-issue-highlight"]').click();await page.waitForTimeout(100);}
+ assert.ok((await snapshot()).materials.every(m=>m.baseline==null||m.opacity===m.baseline));
+ await page.locator('[data-action="toggle-hide-others"]').click();await page.waitForTimeout(300);
+ const isolated=await snapshot();
+ assert.ok(isolated.labels.length>0 && isolated.labels.every(l=>l.id===enlarged.id),'hide others keeps the focused label and hides all others');
+ await page.locator('[data-action="toggle-hide-others"]').click();
+ await page.locator('[data-viewer-action="tools"]').click();
+ await page.locator('[data-viewer-action="fullscreen"]').click();await page.waitForTimeout(500);
+ await expect(page.locator('[data-viewer-action="fullscreen"]')).toHaveAttribute('title','退出全屏');
+ await page.screenshot({path:path.join(dir,`task-${id}-fullscreen.png`)});
+ await page.locator('[data-viewer-action="fullscreen"]').click();await page.waitForTimeout(500);
+ await expect(page.locator('[data-viewer-action="fullscreen"]')).toHaveAttribute('title','全屏操作');
+ const assignment=await call('tran/v1/teaching/assignments/'+id,signed.accessToken);
+ const total=assignment.data.definitionSnapshot.steps.length;
+ const prepared=new Set();
+ let gestures=0;
+ while(true){
+ await expect.poll(async()=>!!(await snapshot())&&!(await snapshot()).cameraTween,{timeout:10000}).toBe(true);
+ let start=await snapshot();
+ if(process.env.PREPARE_SAFETY==='1'&&!prepared.has(start.step)&&!(process.env.LATE_PREPARATION==='1'&&start.step===4)){
+ await page.locator('[data-open-preparation]').click();
+ for(const box of await page.locator('[data-safety]').all())await box.check();
+ if(assignment.data.definitionSnapshot.steps[start.step].mode==='measure')await page.locator('[data-measurement]').fill('本次教员预览按脚本演示连接管路;管路处理方向与依据需由教员核对,此记录仅用于验证交互,不作实装质量判定。');
+ await page.locator('[data-save-preparation]').click();
+ await page.locator('[data-close-preparation]').click();prepared.add(start.step);
+ }
+ if(process.env.MANUAL_OCCLUSION_TOOLS==='1'&&!start.pickPoints.length){
+ const toolsButton=page.locator('[data-viewer-action="tools"]');
+ if(await toolsButton.getAttribute('aria-expanded')!=='true')await toolsButton.click();
+ const transparent=page.locator('[data-action="toggle-translucent-others"]');
+ if(await transparent.getAttribute('aria-pressed')!=='true')await transparent.click();
+ await toolsButton.click();await page.waitForTimeout(500);start=await snapshot();
+ if(!start.pickPoints.length){
+ await page.locator('[data-role="part-label"]').click();await page.waitForTimeout(900);
+ await toolsButton.click();await page.locator('[data-action="toggle-hide-others"]').click();await toolsButton.click();
+ await page.waitForTimeout(400);start=await snapshot();
+ checks.push({name:'task '+id+' explicit isolate for overlapping workflow targets',targetId:start.id,pass:start.pickPoints.length>0});
+ }
+ checks.push({name:'task '+id+' internal target inspected with explicit translucent tool',targetId:start.id,pass:start.pickPoints.length>0});
+ }
+ if(assignment.data.definitionSnapshot.steps[start.step].mode==='measure' && !prepared.has(start.step)){
+ await page.locator('[data-open-preparation]').click();
+ await page.locator('[data-measurement]').fill('本次教员预览按脚本演示连接管路;管路处理方向与依据需由教员核对,此记录仅用于验证交互,不作实装质量判定。');
+ await page.locator('[data-save-preparation]').click();await expect(page.locator('[data-save-status]')).toContainText('已保留');
+ await page.locator('[data-close-preparation]').click();prepared.add(start.step);
+ checks.push({name:'task '+id+' step '+(start.step+1)+' observation retained for instructor review',pass:true});
+ }
+ if(start.step===0 && start.zoom===1){await page.locator('[data-role=part-label]').click();await page.waitForTimeout(900);continue;}
+ assert.ok(start.pickPoints.length,'visible target has a real mesh hit: '+start.id);
+ assert.ok(Math.abs(start.distance-standOff)<0.015,'consistent stand-off '+start.id);
+ if(start.front)assert.ok(start.front.reduce((n,v,i)=>n+v*(start.camera[i]-start.target[i])/start.distance,0)>.99,'camera faces the authored control front');
+ assert.equal(start.exposure,state.exposure);assert.deepEqual(start.light,state.light);
+ for(let i=0;if.offset||f.scale));
+ if(draggable){
+ await page.mouse.move(point.x-68,point.y,{steps:6});await page.waitForTimeout(100);
+ const mid=await snapshot();
+ if(operation.kind==='rotate'){
+ if(start.tip){assert.ok(mid.tip[1]>start.tip[1]+0.0001,'rescue handle moves upwards toward panel open arrow');await page.screenshot({path:path.join(dir,`task-${id}-rescue-moving.png`)});}
+ assert.notDeepEqual(mid.quaternion,start.quaternion,'rotation follows held pointer '+start.id);
+ if(!operation.effects?.some(effect=>effect.offset))assert.ok(Math.hypot(...mid.pivot.map((v,i)=>v-start.pivot[i]))<0.0001,'hinge remains anchored '+start.id);
+ }
+ await page.mouse.move(point.x-175,point.y,{steps:8});
+ }
+ await page.mouse.up();
+ if(process.env.LATE_PREPARATION==='1'&&start.step===4&&start.operation===1&&!prepared.has(start.step)){
+ await expect(page.locator('.training-server-preparation')).toHaveAttribute('open','',{timeout:20000});
+ await expect.poll(async()=>!(await snapshot()).pending,{timeout:20000}).toBe(true);
+ const rejected=await snapshot();
+ assert.deepEqual(rejected.lid,start.lid,'preparation rejection must keep the already opened lid in place');
+ assert.equal(rejected.operation,1);assert.equal(rejected.evidenceCount,1);assert.equal(rejected.complete,false);
+ assert.deepEqual(rejected.quaternion,start.quaternion,'unaccepted rescue rotation is rolled back');
+ for(const box of await page.locator('[data-safety]').all())await box.check();
+ for(let save=0;save<2;save++){
+ await page.locator('[data-save-preparation]').click();
+ await expect(page.locator('[data-save-status]')).toContainText('已保留');
+ assert.deepEqual((await snapshot()).lid,start.lid,'saving preparation preserves the open lid');
+ }
+ await page.locator('[data-close-preparation]').click();prepared.add(start.step);
+ await page.screenshot({path:path.join(dir,`task-${id}-late-preparation-lid-open.png`)});
+ checks.push({name:'late preparation: rejected switch resets only its own motion; open lid survives repeated saves',pass:true,lid:start.lid});
+ continue;
+ }
+ await expect.poll(async()=>{const s=await snapshot();return !s.pending&&(s.complete||s.operation!==start.operation);},{timeout:20000}).toBe(true);
+ await page.waitForTimeout(850);const done=await snapshot();if(start.tip)assert.ok(done.tip[1]>start.tip[1]+0.0001,'completed rescue switch stays upwards');assert.equal(done.errors,0,'no false operation error');
+ if(process.env.MANUAL_OCCLUSION_TOOLS==='1'&&await page.locator('[data-action="toggle-hide-others"]').getAttribute('aria-pressed')==='true'){
+ await page.locator('[data-viewer-action="tools"]').click();await page.locator('[data-action="toggle-hide-others"]').click();await page.locator('[data-viewer-action="tools"]').click();
+ }
+ checks.push({name:'task '+id+' step '+(start.step+1)+' operation '+(start.operation+1),target:start.id,drag:!!draggable,distance:start.distance,projected:start.projected,labels:start.labels.length});
+ console.log('ACTION',id,start.step+1,start.operation+1,start.id);
+ if(++gestures>120)throw new Error('unexpected operation loop');
+ if(done.complete){
+ await page.screenshot({path:path.join(dir,`task-${id}-step-${start.step+1}.png`)});
+ if(start.step+1>=total)break;
+ await page.locator('[data-action="next"]').click();await page.waitForTimeout(1200);
+ }
+ }
+ const after=await call('tran/v1/teaching/assignments/'+id,signed.accessToken);
+ assert.deepEqual(after.data.definitionSnapshot,assignment.data.definitionSnapshot);assert.equal(after.data.version,assignment.data.version);
+ }
+ }
+ assert.deepEqual(errors,[]);
+ await fs.writeFile(path.join(dir,resultFile),JSON.stringify({pass:true,checks,errors,writes},null,2));
+ console.log('PASS',checks.length);
+}catch(error){await page.screenshot({path:path.join(dir,'failure.png')}).catch(()=>{});await fs.writeFile(path.join(dir,resultFile),JSON.stringify({pass:false,error:error.message,checks,state:await snapshot(),errors,writes,networkErrors,pending:[...pending.values()]},null,2));throw error;}
+finally{await browser.close();}
diff --git a/tools/bridge-controls-report.mjs b/tools/bridge-controls-report.mjs
new file mode 100644
index 0000000..15be0be
--- /dev/null
+++ b/tools/bridge-controls-report.mjs
@@ -0,0 +1,63 @@
+import fs from 'node:fs/promises';
+import path from 'node:path';
+import assert from 'node:assert/strict';
+import {pathToFileURL} from 'node:url';
+import {chromium} from '@playwright/test';
+
+const folder=path.resolve('reports/bridge-controls-review-20260915');
+const read=async file=>JSON.parse((await fs.readFile(path.join(folder,file),'utf8')).replace(/^\uFEFF/,''));
+const tasks=[
+ {id:86,code:'005',title:'液压泵应急切换',steps:5},
+ {id:87,code:'006',title:'液压泵应急替代',steps:7},
+ {id:88,code:'007',title:'前泵换件修复',steps:11},
+ {id:89,code:'008',title:'平衡阀拆拼互换',steps:16},
+];
+for(const task of tasks){
+ const result=await read(`task-${task.id}-verification.json`);
+ assert.equal(result.pass,true);assert.deepEqual(result.errors,[]);
+ assert.ok(result.writes.every(url=>url.endsWith(`/assignments/${task.id}/preview/validate`)));
+ task.actions=result.checks.filter(check=>check.target).length;
+ task.validations=result.writes.length;
+ task.workflowTargets=result.checks[0].state.workflowCoverage.length;
+}
+const lan='../bridge-controls-lan-20260915';
+const small='../bridge-controls-small-20260915';
+assert.equal((await read(`${lan}/desktop-1920.json`)).pass,true);
+assert.equal((await read(`${small}/controls-1024.json`)).pass,true);
+const validation=await read('validation.json');assert.equal(validation.build.pass,true);
+const summary={pass:true,generatedAt:new Date().toISOString(),tasks,
+ steps:tasks.reduce((n,t)=>n+t.steps,0),actions:tasks.reduce((n,t)=>n+t.actions,0),
+ validationRequests:tasks.reduce((n,t)=>n+t.validations,0),validation,
+ environments:['http://127.0.0.1:6180','http://192.168.31.168:6180'],
+ resolutions:['1920×1080','1366×768','1280×720','1024×768'],
+ boundary:'现有任务的管理员/教员预览;未创建任务或写入学员成绩。005 小屏使用点击,006–008 使用拖动;另在局域网大屏验证 005 拖动。',
+};
+await fs.writeFile(path.join(folder,'summary.json'),JSON.stringify(summary,null,2));
+const requirements=[
+ ['底栏图标','收起/展开步骤、面板及全屏放到底栏右侧。按钮仅显示图标,title 和无障碍名称随状态切换;全屏仍保留底栏和退出按钮。'],
+ ['初始化取景','进入场景显示整车与操作台总览,按可用显示区域取景,避开教员和工具。点击标签或进入后续步骤时再聚焦,普通聚焦与主动放大分别限制显示尺寸。'],
+ ['全部流程辉光','训练/预览进入场景时,所有当前可见的流程部件以青色轮廓显示,当前操作目标以金色区分。正式考试保持原有提示限制。'],
+ ['独立半透明工具','新增“其他半透明”,保持流程部件实体显示。与“高亮问题设备”独立切换;关闭后恢复保存的材质透明度,不影响地形。'],
+ ['正面与动作方向','根据实际 GLB 校准各类部件观察方向。互救面板从 -X 侧正视,文字可正读;开关绕靠近面板的固定端向“开”的上方旋转。005、006 共用校准;取力器手柄铰点也改为靠近壳体的一端。'],
+ ['同类回归','逐项执行四套流程,验证所有目标的实际网格命中、固定观察距离、灯光一致、标签不重叠和服务端预览校验。008 两处观察记录仍按界面流程填写并留给教员复核。'],
+];
+const photo=(file,alt)=>`
`;
+const html=`桥梁流程 · 取景与操作控件验收
+
+桥梁流程 · 取景与操作控件验收
2026-09-15 · 正式 HTML + JavaScript 工作区
+通过 ${summary.steps} 个步骤、${summary.actions} 个模型操作、${summary.validationRequests} 次服务端预览校验。
本地及局域网通过;生产构建、正式路由契约和 16 项相关测试通过。
+本轮六项调整
${requirements.map(([title,body])=>`| ${title} | ${body} |
`).join('')}
+初始总览
${tasks.map(t=>`
TASK-VIRTUAL-${t.code} · ${t.title}${t.steps} 步 / ${t.actions} 次模型操作 / ${t.workflowTargets} 个可见流程目标
${photo(`task-${t.id}-initial.png`,t.title+'初始总览')}逐步截图和校验
${Array.from({length:t.steps},(_,i)=>`
第 ${i+1} 步`).join('')}
完整校验 JSON · 其他半透明
`).join('')}
+大屏初始视角与互救开关
${photo(`${lan}/task-86-initial.png`,'1920 初始总览')}1920×1080:保留整车环境,初始不直接放大液压泵。
${photo(`${lan}/task-86-rescue-moving.png`,'互救开关向上转动')}实际拖动中:从面板正面观察,手柄端点向上移动,固定端不位移。脚本同时验证世界坐标变化。
+底栏、全屏与小屏
${photo('task-86-fullscreen.png','1280 全屏及底栏')}1280×720 全屏:底栏右侧保留面板和退出全屏图标。
${photo(`${small}/free-inspection-controls.png`,'1024 小屏控件')}1024×768:模型自由查看、材质切换及 Esc 退出,无页面横向溢出。
+局域网 1920 完整拖动流程 · 局域网 1024 控件回归
+验证范围
${summary.boundary} 所有操作均使用真实鼠标输入;浏览器注入仅用于读取相机、材质、网格和旋转端点。观察距离、可操作性与方向校验对应现有模型,未新增机械受力仿真。
汇总 JSON · 构建和命令记录
以本报告链接的通过记录为准;目录内可能保留此前调试截图。`;
+await fs.writeFile(path.join(folder,'index.html'),html);
+const browser=await chromium.launch({channel:'msedge',headless:true});
+try{
+ const page=await browser.newPage({viewport:{width:1440,height:1000}});
+ await page.goto(pathToFileURL(path.join(folder,'index.html')).href);
+ assert.ok(await page.locator('img').evaluateAll(imgs=>imgs.every(img=>img.complete&&img.naturalWidth>0)));
+ await page.screenshot({path:path.join(folder,'report-overview.png')});
+}finally{await browser.close();}
+console.log(JSON.stringify({pass:true,steps:summary.steps,actions:summary.actions,report:path.join(folder,'index.html')}));
diff --git a/tools/bridge-controls-survey.mjs b/tools/bridge-controls-survey.mjs
new file mode 100644
index 0000000..2a350c1
--- /dev/null
+++ b/tools/bridge-controls-survey.mjs
@@ -0,0 +1,24 @@
+import fs from 'node:fs/promises';
+import path from 'node:path';
+import {chromium,expect} from '@playwright/test';
+import {login} from './role-permissions-live.mjs';
+const dir=path.resolve('reports/bridge-controls-review-20260915');await fs.mkdir(dir,{recursive:true});
+const signed=await login('root');
+const browser=await chromium.launch({channel:'msedge',headless:true,args:['--enable-unsafe-swiftshader']});
+const page=await browser.newPage({viewport:{width:1440,height:1000}});
+await page.addInitScript(s=>{sessionStorage.setItem('unreal-tran:web:access-token:v1',s.accessToken);sessionStorage.setItem('unreal-tran:web:refresh-token:v1',s.refreshToken);},signed);
+await page.route(/\/src\/features\/virtual-training-legacy\/upstream\/views\/training\.js(?:\?|$)/,async route=>{
+ const response=await route.fetch();await route.fulfill({response,body:await response.text()+`
+ globalThis.__controlSurvey={
+ data(){const e=activeTraining;return [...e.parts].filter(([id])=>id.startsWith('front-pump-')).map(([id,o])=>{const b=physicalBounds(o);const meshes=[];o.traverse(n=>{if(n.isMesh&&!n.userData.trainingPickProxy){n.geometry.computeBoundingBox();meshes.push({name:n.name,min:n.geometry.boundingBox.min.toArray(),max:n.geometry.boundingBox.max.toArray(),world:n.matrixWorld.toArray()});}});return {id,center:b.getCenter(new THREE.Vector3()).toArray(),size:b.getSize(new THREE.Vector3()).toArray(),meshes};});},
+ view(id,direction){const e=activeTraining;e.stopTeacherSpeech();e.teacherEnabled=false;e.teacherPanel.classList.remove('is-open');e.inspection.direction=new THREE.Vector3(...direction).normalize();e.inspection.distance=2.6;e.inspection.focus(e.parts.get(id),{animated:false,enlarge:true});},
+ };`});
+});
+try{
+await page.goto('http://127.0.0.1:6180/teaching/virtual-training/preview/86');await expect(page.locator('[data-role="loading"]')).toHaveClass(/is-hidden/,{timeout:120000});
+await fs.writeFile(path.join(dir,'geometry.json'),JSON.stringify(await page.evaluate(()=>__controlSurvey.data()),null,2));
+for(const [name,dirn] of [['positive-z',[0,0,1]],['negative-z',[0,0,-1]],['positive-x',[1,0,0]],['negative-x',[-1,0,0]]]){
+ await page.evaluate(d=>__controlSurvey.view('front-pump-rescue-switch',d),dirn);await page.waitForTimeout(500);await page.screenshot({path:path.join(dir,name+'.png')});
+}
+console.log('survey ready');
+}finally{await browser.close();}
diff --git a/tools/bridge-inspection-live.mjs b/tools/bridge-inspection-live.mjs
new file mode 100644
index 0000000..e67d6e8
--- /dev/null
+++ b/tools/bridge-inspection-live.mjs
@@ -0,0 +1,156 @@
+import fs from 'node:fs/promises';
+import path from 'node:path';
+import assert from 'node:assert/strict';
+import {chromium,expect} from '@playwright/test';
+import {login,call} from './role-permissions-live.mjs';
+
+const dir=path.resolve('reports/'+(process.env.REPORT_NAME||'bridge-inspection-20260915'));await fs.mkdir(dir,{recursive:true});
+const resultFile=process.env.RESULT_FILE||'result.json';
+const signed=await login('root'),checks=[],errors=[],writes=[];
+const pending=new Map(),networkErrors=[];
+const browser=await chromium.launch({channel:'msedge',headless:true,args:['--enable-unsafe-swiftshader']});
+const page=await browser.newPage({viewport:{width:Number(process.env.WIDTH)||1366,height:Number(process.env.HEIGHT)||768}});
+await page.addInitScript(s=>{sessionStorage.setItem('unreal-tran:web:access-token:v1',s.accessToken);sessionStorage.setItem('unreal-tran:web:refresh-token:v1',s.refreshToken);localStorage.setItem('unreal-tran:web:preferences:v1',JSON.stringify({themeMode:'military'}));},signed);
+await page.route(/\/src\/features\/virtual-training-legacy\/upstream\/views\/training\.js(?:\?|$)/,async route=>{
+ const response=await route.fetch();await route.fulfill({response,body:(await response.text())+`
+globalThis.__inspectionSnapshot=(options={})=>{
+ const e=activeTraining;if(!e?.sceneReady)return null;
+ const id=e.getActiveTargetId(),object=e.parts.get(id),box=object?physicalBounds(object):null;
+ const screen=object?e.worldToScreen(box.getCenter(new THREE.Vector3())):null;
+ const materials=[];e.publishedContentRoot.traverse(o=>{if(o.isMesh&&!o.userData.trainingPickProxy)for(const m of Array.isArray(o.material)?o.material:[o.material])materials.push({opacity:m.opacity,baseline:e.viewerMaterialBaseline.get(m)?.opacity,side:m.side});});
+ const labels=[...e.viewport.querySelectorAll('.training-part-label.is-visible')].map(n=>{const r=n.getBoundingClientRect();return {text:n.textContent.trim(),x:r.x,y:r.y,w:r.width,h:r.height,id:n.dataset.labelTarget||id};});
+ const op=e.getActiveMechanismOperation()?.operation;
+ const projected=object?e.inspection.projectBounds(object):null;
+ const canvas=e.canvas.getBoundingClientRect();
+ const pickPoints=[];
+ if(projected){const ray=new THREE.Raycaster();for(const fy of [0.5,0.35,0.65,0.2,0.8])for(const fx of [0.5,0.35,0.65,0.2,0.8]){
+ const x=projected.x+projected.w*fx,y=projected.y+projected.h*fy;
+ ray.setFromCamera(new THREE.Vector2(x/canvas.width*2-1,1-y/canvas.height*2),e.camera);
+ const hit=ray.intersectObjects(e.pickables,false).find(h=>!h.object.userData.trainingPickProxy&&effectivelyVisible(h.object));
+ if(hit&&e.isObjectInsideTarget(hit.object,object))pickPoints.push({x:x+canvas.left,y:y+canvas.top});
+ }}
+ const pivot=op&&object?e.getMechanismPivot(object,op).toArray():null;
+ const freePoints=[];
+ if(options.free){const ray=new THREE.Raycaster();for(let y=70;y!h.object.userData.trainingPickProxy&&effectivelyVisible(h.object));
+ if(hit?.object.userData.partId==='scene:front-pump-rescue-vehicle')freePoints.push({x:canvas.left+x,y:canvas.top+y});
+ }}
+ return {id,step:e.session.stepIndex,operation:e.getActiveMechanismOperation()?.state.index,errors:e.errorCount,complete:e.session.isComplete(),pending:!!e.bridgeOperationPending||!!e.serverCommitPending,
+ hdr:e.scene.environment?.name,distance:e.camera.position.distanceTo(e.controls.target),zoom:e.camera.zoom,exposure:e.renderer.toneMappingExposure,light:[e.ambient.intensity,e.sun.intensity],
+ screen,bounds:box?box.getSize(new THREE.Vector3()).toArray():null,projected,pivot,pickPoints,freePoints,
+ camera:e.camera.position.toArray(),target:e.controls.target.toArray(),outline:e.inspection.outline.selectedObjects.length,cutaway:e.inspection.cutaway.size,materials,labels,
+ operationData:op,position:object?.position.toArray(),quaternion:(object?.userData.bridgeRotatingPart||object)?.quaternion.toArray()};
+};`});
+});
+page.on('pageerror',error=>errors.push(error.message));
+page.on('request',r=>pending.set(r,new URL(r.url()).pathname));
+page.on('requestfinished',r=>pending.delete(r));
+page.on('requestfailed',r=>{networkErrors.push({path:new URL(r.url()).pathname,error:r.failure()?.errorText});pending.delete(r);});
+page.on('request',request=>{if(request.url().includes('/api/tran/')&&!['GET','HEAD'].includes(request.method()))writes.push(request.url());});
+const snapshot=()=>page.evaluate(()=>globalThis.__inspectionSnapshot?.());
+const ready=async()=>{await expect(page.locator('[data-role="loading"]')).toHaveClass(/is-hidden/,{timeout:120000});await expect.poll(snapshot,{timeout:30000}).not.toBeNull();await page.waitForTimeout(1800);};
+try {
+ for(const id of (process.env.TASK_IDS||'86,87,88,89').split(',')){
+ console.log('OPEN',id);
+ await page.goto((process.env.BASE_URL||'http://127.0.0.1:6180')+'/teaching/virtual-training/preview/'+id);await ready();
+ const state=await snapshot();
+ await page.screenshot({path:path.join(dir,`task-${id}-initial.png`)});
+ assert.equal(state.hdr,'venice_sunset_1k');assert.ok(state.outline>0);
+ assert.ok(state.materials.every(m=>m.side===2),'DoubleSide physical materials');
+ assert.ok(state.materials.every(m=>m.baseline==null||m.opacity===m.baseline),'original opacity');
+ assert.ok(state.projected.w>25&&state.projected.h>15,'target is readable');
+ assert.ok(state.labels.some(l=>l.id===state.id),'active target label visible');
+ checks.push({name:'task '+id+' first view',state});console.log('VIEW',id,JSON.stringify({projected:state.projected,labels:state.labels.map(l=>l.text),cutaway:state.cutaway}));
+ if(process.env.EXTRA_CONTROLS==='1'){
+ await page.locator('[data-viewer-action="tools"]').click();
+ await page.locator('[data-action="viewer-reset-view"]').click();await page.waitForTimeout(1000);
+ const free=await page.evaluate(()=>globalThis.__inspectionSnapshot({free:true}));assert.ok(free.freePoints.length,'vehicle body can be selected');
+ const point=free.freePoints[0],beforeWrites=writes.length;
+ await page.mouse.click(point.x,point.y);await page.waitForTimeout(900);
+ const selected=await snapshot();assert.equal(selected.errors,free.errors);assert.equal(selected.step,free.step);assert.equal(selected.operation,free.operation);assert.equal(writes.length,beforeWrites);
+ for(let i=0;i<4;i++)await page.locator('[data-action="toggle-issue-highlight"]').click();
+ assert.ok((await snapshot()).materials.every(m=>m.baseline==null||m.opacity===m.baseline));
+ await page.locator('[data-action="viewer-reset-view"]').click();await page.waitForTimeout(1000);
+ const orbit=await page.evaluate(()=>globalThis.__inspectionSnapshot({free:true}));assert.ok(orbit.freePoints.length);
+ const dragPoint=orbit.freePoints[0];await page.mouse.move(dragPoint.x,dragPoint.y);await page.mouse.down();await page.mouse.move(dragPoint.x+45,dragPoint.y+20,{steps:8});await page.mouse.up();await page.waitForTimeout(900);
+ const moved=await snapshot();assert.equal(moved.errors,0);assert.notDeepEqual(moved.camera,orbit.camera);assert.equal(writes.length,beforeWrites);
+ await page.locator('[data-viewer-action="tools"]').click();
+ await page.locator('[data-viewer-action="fullscreen"]').click();await page.waitForTimeout(400);await page.keyboard.press('Escape');await page.waitForTimeout(500);
+ await expect(page.locator('[data-viewer-action="fullscreen"]')).toHaveText('全屏操作');await expect(page.locator('[data-role="modal"]')).toBeHidden();
+ assert.ok(await page.evaluate(()=>document.documentElement.scrollWidth<=innerWidth),'no page horizontal overflow');
+ await page.screenshot({path:path.join(dir,'free-inspection-controls.png')});checks.push({name:'non-workflow body click/orbit, selection-highlight restoration, Escape fullscreen exit',pass:true});
+ }
+ if(process.env.EXECUTE==='1'){
+ // Labels only focus: no operation, no validation request, no score/error change.
+ const beforeWrites=writes.length;
+ await page.locator('[data-role="part-label"]').click();await page.waitForTimeout(900);
+ const enlarged=await snapshot();assert.equal(enlarged.step,state.step);assert.equal(enlarged.operation,state.operation);assert.equal(writes.length,beforeWrites);assert.ok(enlarged.zoom>state.zoom);
+ // Native fullscreen and both collapsible panels remain reversible on laptops.
+ await page.locator('[data-viewer-action="steps"]').click();await expect(page.locator('.training-steps-panel')).toBeVisible();
+ await page.locator('[data-viewer-action="steps"]').click();await expect(page.locator('.training-steps-panel')).toBeHidden();
+ await page.locator('[data-viewer-action="tools"]').click();await expect(page.locator('[data-role="model-commandbar"]')).toBeVisible();
+ await page.locator('[data-action="toggle-part-labels"]').click();
+ for(let n=0;n<2;n++){await page.locator('[data-action="toggle-issue-highlight"]').click();await page.waitForTimeout(100);}
+ assert.ok((await snapshot()).materials.every(m=>m.baseline==null||m.opacity===m.baseline));
+ await page.locator('[data-action="toggle-hide-others"]').click();await page.waitForTimeout(300);
+ const isolated=await snapshot();
+ assert.ok(isolated.labels.length>0 && isolated.labels.every(l=>l.id===enlarged.id),'hide others keeps the focused label and hides all others');
+ await page.locator('[data-action="toggle-hide-others"]').click();
+ await page.locator('[data-viewer-action="tools"]').click();
+ await page.locator('[data-viewer-action="fullscreen"]').click();await page.waitForTimeout(500);
+ await expect(page.locator('[data-viewer-action="fullscreen"]')).toHaveText('退出全屏');
+ await page.screenshot({path:path.join(dir,`task-${id}-fullscreen.png`)});
+ await page.locator('[data-viewer-action="fullscreen"]').click();await page.waitForTimeout(500);
+ await expect(page.locator('[data-viewer-action="fullscreen"]')).toHaveText('全屏操作');
+ const assignment=await call('tran/v1/teaching/assignments/'+id,signed.accessToken);
+ const total=assignment.data.definitionSnapshot.steps.length;
+ const prepared=new Set();
+ let gestures=0;
+ while(true){
+ const start=await snapshot();
+ if(assignment.data.definitionSnapshot.steps[start.step].mode==='measure' && !prepared.has(start.step)){
+ await page.locator('[data-open-preparation]').click();
+ await page.locator('[data-measurement]').fill('本次教员预览按脚本演示连接管路;管路处理方向与依据需由教员核对,此记录仅用于验证交互,不作实装质量判定。');
+ await page.locator('[data-save-preparation]').click();await expect(page.locator('[data-save-status]')).toContainText('已保留');
+ await page.locator('[data-close-preparation]').click();prepared.add(start.step);
+ checks.push({name:'task '+id+' step '+(start.step+1)+' observation retained for instructor review',pass:true});
+ }
+ assert.ok(start.pickPoints.length,'visible target has a real mesh hit: '+start.id);
+ assert.ok(Math.abs(start.distance-state.distance)<0.015,'consistent stand-off '+start.id);
+ assert.equal(start.exposure,state.exposure);assert.deepEqual(start.light,state.light);
+ for(let i=0;if.offset||f.scale));
+ if(draggable){
+ await page.mouse.move(point.x-68,point.y,{steps:6});await page.waitForTimeout(100);
+ const mid=await snapshot();
+ if(operation.kind==='rotate'){
+ assert.notDeepEqual(mid.quaternion,start.quaternion,'rotation follows held pointer '+start.id);
+ if(!operation.effects?.some(effect=>effect.offset))assert.ok(Math.hypot(...mid.pivot.map((v,i)=>v-start.pivot[i]))<0.0001,'hinge remains anchored '+start.id);
+ }
+ await page.mouse.move(point.x-175,point.y,{steps:8});
+ }
+ await page.mouse.up();
+ await expect.poll(async()=>{const s=await snapshot();return !s.pending&&(s.complete||s.operation!==start.operation);},{timeout:20000}).toBe(true);
+ await page.waitForTimeout(850);const done=await snapshot();assert.equal(done.errors,0,'no false operation error');
+ checks.push({name:'task '+id+' step '+(start.step+1)+' operation '+(start.operation+1),target:start.id,drag:!!draggable,distance:start.distance,projected:start.projected,labels:start.labels.length});
+ console.log('ACTION',id,start.step+1,start.operation+1,start.id);
+ if(++gestures>120)throw new Error('unexpected operation loop');
+ if(done.complete){
+ await page.screenshot({path:path.join(dir,`task-${id}-step-${start.step+1}.png`)});
+ if(start.step+1>=total)break;
+ await page.locator('[data-action="next"]').click();await page.waitForTimeout(1200);
+ }
+ }
+ const after=await call('tran/v1/teaching/assignments/'+id,signed.accessToken);
+ assert.deepEqual(after.data.definitionSnapshot,assignment.data.definitionSnapshot);assert.equal(after.data.version,assignment.data.version);
+ }
+ }
+ assert.deepEqual(errors,[]);
+ await fs.writeFile(path.join(dir,resultFile),JSON.stringify({pass:true,checks,errors,writes},null,2));
+ console.log('PASS',checks.length);
+}catch(error){await page.screenshot({path:path.join(dir,'failure.png')}).catch(()=>{});await fs.writeFile(path.join(dir,resultFile),JSON.stringify({pass:false,error:error.message,checks,state:await snapshot(),errors,writes,networkErrors,pending:[...pending.values()]},null,2));throw error;}
+finally{await browser.close();}
diff --git a/tools/bridge-inspection-report.mjs b/tools/bridge-inspection-report.mjs
new file mode 100644
index 0000000..8396dd3
--- /dev/null
+++ b/tools/bridge-inspection-report.mjs
@@ -0,0 +1,70 @@
+import fs from 'node:fs/promises';
+import path from 'node:path';
+import assert from 'node:assert/strict';
+import { pathToFileURL } from 'node:url';
+import { chromium } from '@playwright/test';
+
+const folder = path.resolve('reports/bridge-inspection-20260915');
+const read = async file => JSON.parse(await fs.readFile(path.join(folder, file), 'utf8'));
+const tasks = [
+ { id: 86, code: '005', title: '液压泵应急切换', steps: 5 },
+ { id: 87, code: '006', title: '液压泵应急替代', steps: 7 },
+ { id: 88, code: '007', title: '前泵换件修复', steps: 11 },
+ { id: 89, code: '008', title: '平衡阀拆拼互换', steps: 16 },
+];
+for (const task of tasks) {
+ const result = await read(`task-${task.id}-verification.json`);
+ assert.equal(result.pass, true);
+ assert.equal(result.errors.length, 0);
+ assert.ok(result.writes.every(url => url.endsWith(`/assignments/${task.id}/preview/validate`)));
+ task.actions = result.checks.filter(check => check.target).length;
+ task.validationRequests = result.writes.length;
+}
+const lan = '../bridge-inspection-lan-20260915';
+for (const file of ['task-87-click-verification.json', `${lan}/click-flow-1280.json`, `${lan}/controls-1024.json`]) {
+ assert.equal((await read(file)).pass, true);
+}
+const validation = await read('validation.json');
+assert.equal(validation.build.pass, true);
+const summary = {
+ pass: true, generatedAt: new Date().toISOString(), tasks,
+ steps: tasks.reduce((sum, task) => sum + task.steps, 0),
+ actions: tasks.reduce((sum, task) => sum + task.actions, 0),
+ validationRequests: tasks.reduce((sum, task) => sum + task.validationRequests, 0),
+ environments: ['http://127.0.0.1:6180', 'http://192.168.31.168:6180'],
+ resolutions: ['1366×768', '1280×720', '1024×768'],
+ accountType: '管理员 / 教员预览',
+ residualData: '未新增教学任务;未写入学员成绩。仅调用现有任务的教员预览校验接口。',
+ validation,
+};
+await fs.writeFile(path.join(folder, 'summary.json'), JSON.stringify(summary, null, 2));
+const requirements = [
+ ['逐步聚焦', '每个步骤和子动作自动对准对应部件,移出的螺栓、泵体随动作跟随。相机取景避开教员和面板。'],
+ ['稳定距离与 HDR', '四套脚本使用统一的相机观察距离(约 2.5322),按部件尺寸调整光学缩放;曝光 1、环境光 0.8、主光 1.4 在步骤间不变。Venice Sunset HDR 已随项目静态交付。'],
+ ['实体与轮廓', '物理网格使用双面材质,OutlinePass 绘制轮廓辉光。聚焦内部部件时局部隐藏遮挡外壳;复位后恢复。实体透明度不因选中或高亮而变化。'],
+ ['小屏与全屏', '步骤栏、右侧面板可收起,小屏默认收起;操作区支持全屏、按钮退出和 Esc 退出。1024×768、1280×720 均无页面横向溢出。'],
+ ['模型动作', '旋转、拆卸、移动和连接采用模型动画;拖动时模型实时跟随。纯旋转开关的端部铰点在动作中保持固定。点击模式也完成实际动画后才提交校验。'],
+ ['标签', '去掉前导圆点,动态避让部件、浮层及其他标签;无法安放的额外标签隐藏。点击只聚焦放大,不产生步骤校验或成绩写入。'],
+ ['高亮恢复', '选中部件后反复开关问题高亮,全部材质透明度与保存的基线一致,不残留整车半透明状态。'],
+ ['隐藏其他', '隐藏其他模型时同时隐藏其标签;点标签后会同步查看目标,避免沿用之前的整车选择。'],
+ ['操作范围', '流程目标继续按步骤顺序判断;非流程整车网格可点击查看、拖动旋转视角,不增加操作错误、不调用步骤校验。'],
+];
+const html = `四套桥梁脚本 · 3D 交互验收
+
+四套桥梁脚本 · 3D 交互验收
2026-09-15 · 正式 HTML + JavaScript 工作区 · 管理员账号 / 教员预览
+通过:${summary.steps} 个步骤、${summary.actions} 个模型操作、${summary.validationRequests} 次真实服务端预览校验。
另完成 005、006 点击动画回归,以及局域网小屏、自由查看、材质恢复和全屏退出检查。构建、正式路由契约及 16 项模型/脚本/讲解视频测试通过。
+检查范围与结果
| 需求 | 实现及验证 |
${requirements.map(([name, detail]) => `| ${name} | ${detail} |
`).join('')}
+各任务实际截图
${tasks.map(task => `
TASK-VIRTUAL-${task.code} · ${task.title}${task.steps} 步 / ${task.actions} 次模型操作 / ${task.validationRequests} 次预览校验

查看各步完成截图与记录
${Array.from({length:task.steps},(_,i)=>`
第 ${i+1} 步`).join('')}
全屏截图 · 完整 JSON
`).join('')}
+局域网与小屏
入口:127.0.0.1:6180、192.168.31.168:6180,页面 API 经 6100 Gateway。分辨率:1366×768、1280×720、1024×768。以下为 1280×720 的截图。

整车选择、拖动视角、切换高亮与 Esc 退出后。

全屏内仍可使用工具、讲解和退出按钮。
1024 小屏记录 · 1280 点击流程记录 · 006 点击动画记录
+验证边界
${summary.residualData} 008 中需要观察记录的管路步骤仍要求记录并保留教员复核,未用界面操作绕过该条件。本轮验证的是三维交互与预览校验,未新增实装尺寸、受力或扭矩测量能力。截图中的补充模型沿用任务原有资源。
+运行方式:Edge / Playwright;检查脚本 tools/bridge-inspection-live.mjs 仅注入只读诊断,模型操作全部由真实鼠标点击或拖动完成。
+HDR 来自 Three.js r185 示例,原资源 Poly Haven / Greg Zaal / Venice Sunset(CC0),静态文件已纳入构建,无运行时外网请求。
汇总 JSON · 命令与构建结果
本报告保留关键截图及通过记录;较早调试文件可能包含失败尝试,以本报告链接记录为准。`;
+await fs.writeFile(path.join(folder, 'index.html'), html);
+const browser = await chromium.launch({channel:'msedge',headless:true});
+try {
+ const page = await browser.newPage({viewport:{width:1440,height:1000}});
+ await page.goto(pathToFileURL(path.join(folder,'index.html')).href);
+ assert.ok(await page.locator('img').evaluateAll(images => images.every(image => image.complete && image.naturalWidth > 0)), 'all report screenshots load');
+ await page.screenshot({path:path.join(folder,'report-overview.png')});
+} finally { await browser.close(); }
+console.log(JSON.stringify({pass:true,steps:summary.steps,actions:summary.actions,report:path.join(folder,'index.html')}));
diff --git a/tools/bridge-introduction-live.mjs b/tools/bridge-introduction-live.mjs
new file mode 100644
index 0000000..98893c7
--- /dev/null
+++ b/tools/bridge-introduction-live.mjs
@@ -0,0 +1,75 @@
+import fs from 'node:fs';
+import assert from 'node:assert/strict';
+import {chromium,expect} from '@playwright/test';
+import {login,call} from './role-permissions-live.mjs';
+const dir='reports/bridge-introduction-20260918';fs.mkdirSync(dir,{recursive:true});
+const signed=await login('root'),checks=[],errors=[],writes=[],network=[];
+const browser=await chromium.launch({channel:'msedge',headless:true,args:['--enable-unsafe-swiftshader']});
+const page=await browser.newPage({viewport:{width:1366,height:768}});
+await page.addInitScript(s=>{sessionStorage.setItem('unreal-tran:web:access-token:v1',s.accessToken);sessionStorage.setItem('unreal-tran:web:refresh-token:v1',s.refreshToken);},signed);
+await page.route(/\/src\/features\/virtual-training-legacy\/upstream\/views\/training\.js(?:\?|$)/,async route=>{const response=await route.fetch();await route.fulfill({response,body:await response.text()+`\nglobalThis.introState=()=>activeTraining?{active:!!activeTraining.introductionActive,step:activeTraining.session.stepIndex,completed:[...activeTraining.session.completed],ready:activeTraining.sceneReady,errors:activeTraining.errorCount}:null;`});});
+page.on('pageerror',e=>errors.push(e.message));page.on('request',r=>{if(r.url().includes('/api/tran/')&&!['GET','HEAD'].includes(r.method()))writes.push(new URL(r.url()).pathname);});
+page.on('response',r=>{if(r.status()>=400)network.push({path:new URL(r.url()).pathname,status:r.status()});});
+page.on('requestfailed',r=>network.push({path:new URL(r.url()).pathname,error:r.failure()?.errorText}));
+const state=()=>page.evaluate(()=>globalThis.introState?.());
+const overlay=page.locator('.training-introduction');
+try{
+ for(const [id,count,steps] of [[86,6,5],[87,3,7],[88,1,11],[89,1,16],[116,6,5]].filter(([id])=>!process.env.TASK_IDS||process.env.TASK_IDS.split(',').includes(String(id)))){
+ await page.goto('http://127.0.0.1:6180/teaching/virtual-training/preview/'+id);
+ await expect(overlay).toBeVisible({timeout:120000});
+ await expect(page.locator('[data-intro-page]')).toHaveCount(count);
+ await expect(page.locator('[data-step-index]')).toHaveCount(steps);
+ await expect(overlay.locator('h2')).toContainText('项目背景');
+ assert.equal((await state()).step,0);assert.deepEqual((await state()).completed,[]);
+ await page.screenshot({path:dir+'/task-'+id+'-background.png'});
+ const beforeWrites=writes.length;
+ for(let i=1;i1)await page.screenshot({path:dir+'/task-'+id+'-lecture.png'});
+ assert.equal(writes.length,beforeWrites,'intro navigation does not post operations or scores');
+ const playing=await page.locator('audio,video').evaluateAll(items=>items.filter(m=>!m.paused).length);assert.equal(playing,0,'no hidden operation narration during intro');
+ await overlay.locator('[data-intro-command="next"]').click();await expect(overlay).toBeHidden();
+ await expect.poll(async()=>!!(await state())?.ready,{timeout:120000}).toBe(true);
+ assert.equal((await state()).step,0);assert.deepEqual((await state()).completed,[]);
+ await page.locator('[data-intro-page="0"]').click();await expect(overlay).toBeVisible();
+ await overlay.locator('[data-intro-command="skip"]').click();await expect(overlay).toBeHidden();
+ if(count>1){await page.locator('[data-intro-page="1"]').click();await overlay.locator('[data-intro-command="skip"]').click();await expect(overlay).toBeHidden();}
+ assert.equal((await state()).step,0);assert.equal((await state()).errors,0);
+ await page.screenshot({path:dir+'/task-'+id+'-operations.png'});
+ checks.push({id,pages:count,operationSteps:steps,next:true,skip:true,operationStateUnchanged:true});console.log('PASS',id,count);
+ }
+ // Isolated presentation fixture; no changes to the published task or scoring.
+ const project=(await call('tran/v1/content/projects/458',signed.accessToken)).data;
+ const inventory=(await call('tran/v1/teaching/assignments/116/assets',signed.accessToken)).data;
+ const video=inventory.find(a=>a.type==='VIDEO');assert.ok(video,'existing controlled video asset');
+ await page.route(/\/api\/tran\/v1\/teaching\/assignments\/116$/,async route=>{const response=await route.fetch(),body=await response.json();body.data.definitionSnapshot.introduction.lectures=[{id:'test-video',title:'视频讲解验证',format:'video',videoAssetCode:video.assetCode}];await route.fulfill({response,json:body});});
+ await page.goto('http://127.0.0.1:6180/teaching/virtual-training/preview/116');await expect(overlay).toBeVisible({timeout:120000});
+ await overlay.locator('[data-intro-command="next"]').click();const media=overlay.locator('video');await expect(media).toBeVisible();
+ await media.evaluate(m=>m.play());await expect.poll(()=>media.evaluate(m=>m.currentTime>0&&m.readyState>=2),{timeout:30000}).toBe(true);
+ await page.screenshot({path:dir+'/video-lecture.png'});
+ await page.evaluate(()=>globalThis.previousIntroVideo=document.querySelector('.training-introduction video'));
+ await overlay.locator('[data-intro-command="skip"]').click();assert.equal(await page.evaluate(()=>globalThis.previousIntroVideo.paused&&!globalThis.previousIntroVideo.getAttribute('src')),true);
+ checks.push({name:'controlled video plays; skip stops playback and releases source',isolatedResponseFixture:true,pass:true});
+ await page.unroute(/\/api\/tran\/v1\/teaching\/assignments\/116$/);
+ // Exercise the actual authoring dialog and save/reopen path on the existing pilot project.
+ await page.goto('http://127.0.0.1:6180/content/training-projects/458/legacy');
+ const open=page.getByRole('button',{name:'背景与前置讲解',exact:true});await expect(open).toBeEnabled({timeout:120000});
+ await expect(page.locator('[data-action="save"]')).toBeVisible({timeout:120000});await open.click();
+ const dialog=page.getByRole('dialog',{name:'背景与前置讲解'});await expect(dialog).toBeVisible();
+ await expect(dialog.locator('textarea')).toHaveValue(project.currentVersion.content.introduction.background.body);
+ await dialog.getByRole('button',{name:/讲解1 ·/}).click();await expect(dialog.locator('textarea')).toHaveValue(project.currentVersion.content.introduction.lectures[0].body);
+ await page.screenshot({path:dir+'/authoring.png'});
+ await dialog.getByRole('button',{name:'应用到编排',exact:true}).click();
+ const saved=page.waitForResponse(r=>r.url().includes('/content/projects/458')&&r.request().method()==='PUT');
+ await page.locator('[data-action="save"]').click();assert.equal((await saved).status(),200);
+ const after=(await call('tran/v1/content/projects/458',signed.accessToken)).data;
+ assert.deepEqual(after.currentVersion.content.introduction,project.currentVersion.content.introduction);
+ await page.reload();await expect(open).toBeEnabled({timeout:120000});await expect(page.locator('[data-action="save"]')).toBeVisible({timeout:120000});await open.click();
+ await expect(dialog.locator('textarea')).toHaveValue(project.currentVersion.content.introduction.background.body);
+ await dialog.getByRole('button',{name:'取消',exact:true}).click();
+ checks.push({name:'authoring save and reload preserve introduction',pass:true,projectId:'458',draftVersionId:after.currentVersion.id});
+ assert.deepEqual(errors,[]);fs.writeFileSync(dir+'/result.json',JSON.stringify({pass:true,checks,errors},null,2));console.log('ALL PASS');
+}catch(error){await page.screenshot({path:dir+'/failure.png'});fs.writeFileSync(dir+'/error.json',JSON.stringify({error:error.stack,errors,network,body:(await page.locator('body').innerText()).slice(-8000)},null,2));throw error;}finally{await browser.close();}
diff --git a/tools/bridge-introduction-migrate.mjs b/tools/bridge-introduction-migrate.mjs
new file mode 100644
index 0000000..e7d4af2
--- /dev/null
+++ b/tools/bridge-introduction-migrate.mjs
@@ -0,0 +1,47 @@
+import fs from 'node:fs';
+import path from 'node:path';
+import assert from 'node:assert/strict';
+import {login,call} from './role-permissions-live.mjs';
+import {normalizeIntroduction,introductionErrors} from '../../unreal_tran_web/src/features/training/introduction.js';
+const dir='reports/bridge-introduction-20260918'; fs.mkdirSync(dir,{recursive:true});
+const source=path.resolve('fixtures/bridge-script-source/脚本Markdown');
+const titles=['液压泵应急切换','液压泵应急替代','前泵换件修复','平衡阀拆拼互换'];
+const covers=['bridge-pump-switch-v2.jpg','bridge-pump-substitute-v4.jpg','bridge-pump-replace-v4.jpg','bridge-balance-valve-swap-v4.jpg'];
+const seeds=titles.map((title,i)=>{
+ const code=`TASK-VIRTUAL-00${i+5}`,md=fs.readFileSync(path.join(source,code+'-'+title+'.md'),'utf8');
+ const sections=md.split(/^## /m).slice(1).map(s=>({title:s.split('\n')[0].trim(),text:s.slice(s.indexOf('\n')+1)}));
+ const body=text=>text.split(/\n\s*\n/).filter(p=>p.trim()&&!/^(来源:|>)/.test(p.trim())).join('\n\n').trim();
+ const intro=normalizeIntroduction({background:{enabled:true,title:'项目背景 · '+title,format:'image-text',body:body(sections.find(s=>s.title.startsWith('项目背景原文')).text),imageUrl:'/models/bridge-training/'+covers[i],source:code+' 图片原文'},lectures:sections.filter(s=>/^讲解\d/.test(s.title)).map((s,index)=>({id:code+'-L'+(index+1),title:s.title.replace(/^讲解\d+:/,'').replace(/(.*$/,''),format:'image-text',body:body(s.text.includes('### 解说词原文')?s.text.split('### 解说词原文')[1]:s.text),imageUrl:'/models/bridge-training/'+covers[i],source:code+' 图片解说词'}))});
+ // Do not read editorial notes or uncertain model codes to the learner.
+ for(const lecture of intro.lectures)lecture.body=lecture.body.replace('GQZ009型重型支援桥','重型支援桥').replaceAll('构成完成的液压回路','构成完整的液压回路').replaceAll('是而是','而是');
+ if(i===2)intro.background.body=intro.background.body.replace('而后桥梁分队分队长指挥操作手试车检查,驾驶员在接通取力器后,操作手按照规定程序试车,此时托架和架设架所有执行机构动作,随即向分队长报告。','');
+ if(i===3){intro.background.body='本项目训练重型支援桥平衡阀的拆拼互换。\n\n按脚本依次完成四组操作:\n1. 拆卸小腔油口连接平衡阀。\n2. 拆卸大腔油口连接平衡阀。\n3. 将拆下的平衡阀互换安装到大腔油口。\n4. 将另一平衡阀安装到小腔油口。\n\n操作阶段包含清洗、拆卸、油口封堵和安装等步骤。';intro.background.source='由9.jpg、10.jpg四组操作归纳的项目概览;原稿未提供故障背景';}
+ assert.deepEqual(introductionErrors(intro),[]);return {code,intro};
+});
+fs.writeFileSync(dir+'/introduction-seeds.json',JSON.stringify(seeds,null,2));
+const signed=await login('root');
+const api=async(endpoint,body,method)=>{const r=await call('tran/v1/'+endpoint,signed.accessToken,body,method);assert.equal(r.status,200,endpoint+': '+r.message);return r.data;};
+const backup=(name,value)=>{const p=dir+'/'+name+'.json';if(!fs.existsSync(p))fs.writeFileSync(p,JSON.stringify(value,null,2));};
+const records=[];
+for(const [id,index] of [[86,0],[87,1],[88,2],[89,3],[116,0]]) {
+ let task=await api('teaching/assignments/'+id),detail=await api('content/projects/'+task.contentProjectId);
+ assert.equal(task.code,id===116?'BRIDGE-005-AUTHORING-PILOT':seeds[index].code);
+ backup('before-task-'+id,task);backup('before-project-'+task.contentProjectId,detail);
+ const content=structuredClone(detail.currentVersion.content),intro=seeds[index].intro;
+ const beforeDefinition=structuredClone(task.definitionSnapshot);
+ if(JSON.stringify(content.introduction)!==JSON.stringify(intro)){
+ content.introduction=intro;
+ detail=await api('content/projects/'+detail.project.id,{...detail.project,content,assets:detail.currentVersion.assets,dependencies:detail.currentVersion.dependencies,version:detail.project.version,changeSummary:'接入图片原文背景与前置讲解;保留原操作步骤、模型和评分'},'PUT');
+ }
+ if(detail.project.publishedVersionId!==detail.currentVersion.id)detail=await api('content/projects/'+detail.project.id+'/publish',{version:detail.project.version});
+ if(task.contentVersionId!==detail.project.publishedVersionId){
+ task=task.status==='PUBLISHED'
+ ? await api('teaching/assignments/'+id+'/introduction-version',{contentVersionId:detail.project.publishedVersionId,version:task.version,reason:'接入可在训练编排配置的背景与前置讲解,不修改现有操作与成绩'},'PUT')
+ : await api('teaching/assignments/'+id,{...task,contentVersionId:detail.project.publishedVersionId,version:task.version},'PUT');
+ }
+ const after=structuredClone(task.definitionSnapshot);delete beforeDefinition.introduction;delete after.introduction;assert.deepEqual(after,beforeDefinition,'only introduction changes');
+ const original=JSON.parse(fs.readFileSync(dir+'/before-task-'+id+'.json','utf8'));
+ assert.deepEqual(task.members,original.members);assert.deepEqual(task.runs,original.runs);
+ records.push({id,code:task.code,projectId:task.contentProjectId,contentVersionId:task.contentVersionId,background:true,lectures:intro.lectures.length,steps:task.definitionSnapshot.steps.length});console.log(records.at(-1));
+}
+fs.writeFileSync(dir+'/migration.json',JSON.stringify({pass:true,records,notes:['005省略原稿不清晰型号;修正两处明显病句。','007背景略去原文有无不字冲突的一句,不扩写故障判断。','008项目概览由四组操作归纳,不补造故障背景。','007、008未添加原稿缺失的独立讲解。']},null,2));
diff --git a/tools/bridge-introduction-report.mjs b/tools/bridge-introduction-report.mjs
new file mode 100644
index 0000000..8e2a911
--- /dev/null
+++ b/tools/bridge-introduction-report.mjs
@@ -0,0 +1,8 @@
+import fs from 'node:fs';
+const dir='reports/bridge-introduction-20260918',read=name=>JSON.parse(fs.readFileSync(dir+'/'+name+'.json','utf8'));
+const result=read('result'),operations=read('operation-regression'),upload=read('upload-result'),migration=read('migration'),health=read('health');
+if(!result.pass||!operations.pass||!upload.pass)throw new Error('Verification incomplete');
+const esc=s=>String(s).replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]));
+const shots=[['task-86-background.png','005 · 项目背景'],['task-86-lecture.png','005 · 原理讲解'],['task-87-background.png','006 · 项目背景'],['task-88-background.png','007 · 项目背景'],['task-89-background.png','008 · 项目概览'],['video-lecture.png','受控视频播放验证(隔离响应配置)'],['authoring.png','训练编排 · 背景与前置讲解'],['authoring-uploaded-video.png','真实上传、发布及重新打开验证']];
+const html=`背景与前置讲解 · 验收记录背景 → 讲解1…N → 操作步骤
2026-09-18 · 本地环境 6180 / Gateway 6100 · 内部维护账号验收
通过:四个现有任务、005新模型入口、视频切换、编排保存、媒体上传与发布、005完整操作回归。
背景及每段讲解支持下一步、上一步、跳过讲解;跳过后仍从当前未完成操作继续。操作编号、动作、评分、已有记录不变。讲解期间不会播放隐藏的步骤数字教员,切页停止视频。
| 入口 | 前置内容 | 原操作 | 发布内容版本 |
${migration.records.map(r=>`| ${esc(r.code)} | 背景 + ${r.lectures} 段讲解 | ${r.steps} 步 | ${r.contentVersionId} |
`).join('')}
内容依据与范围
005、006讲解取自图片转录MD;007、008原稿缺少独立讲解,未补写。008背景页为原稿四组操作归纳的项目概览。配图使用各场景封面;原稿要求的液压原理图和专用讲解视频尚无素材,可在编排中上传替换。
编排入口:内容制作 → 训练编排 → 编辑 → 背景与前置讲解。应用后保存草稿、发布。已发布教学任务固定版本不会因编辑草稿自动改变。
图片原文:脚本Markdown索引;接口及维护:背景与前置讲解。
实际验证
- Java17 mvn test:通过;新增讲解契约4项及含权限/学员投影的策略测试39项通过。
- pnpm run build:通过;既有大包体积提示仍在。
- 前置讲解3项、讲解保存9项及正式路由契约测试通过。
- 1366×768 浏览器:4个任务和005验证入口顺序浏览、背景/讲解跳过、回看、无误推进及无JS异常。
- 005验证入口真实三维五步六动作通过,开盖后补保存操作准备不会重置盖子。
- 上传图片和视频到临时工程,保存、发布、重新打开均通过;临时工程459、460已软删除,没有创建教学测试任务。005编排验证工程保留一份相同讲解配置的保存草稿,任务继续使用560版本。
- 本机及局域网页面、Gateway健康、Auth/Tran ping均200。
证据:页面测试 · 操作回归 · 媒体上传 · 版本更新 · 服务健康
${shots.map(([file,title])=>`${esc(title)}
`).join('')}`;
+fs.writeFileSync(dir+'/index.html',html);console.log(dir+'/index.html');
diff --git a/tools/bridge-introduction-upload-live.mjs b/tools/bridge-introduction-upload-live.mjs
new file mode 100644
index 0000000..e1e43a6
--- /dev/null
+++ b/tools/bridge-introduction-upload-live.mjs
@@ -0,0 +1,46 @@
+import fs from 'node:fs';
+import path from 'node:path';
+import assert from 'node:assert/strict';
+import {chromium,expect} from '@playwright/test';
+import {login,call} from './role-permissions-live.mjs';
+const dir='reports/bridge-introduction-20260918',signed=await login('root');
+const api=async(endpoint,body,method)=>{const r=await call('tran/v1/'+endpoint,signed.accessToken,body,method);assert.equal(r.status,200,endpoint+': '+r.message);return r.data;};
+const original=await api('content/projects/458');
+let fixture=await api('content/projects/458/copy',{version:original.project.version,code:'INTRO-UPLOAD-'+Date.now(),name:'讲解上传验收临时工程'}),pass=false;
+const id=fixture.project.id;
+const browser=await chromium.launch({channel:'msedge',headless:true,args:['--enable-unsafe-swiftshader']});
+const page=await browser.newPage({viewport:{width:1366,height:768}});
+await page.addInitScript(s=>{sessionStorage.setItem('unreal-tran:web:access-token:v1',s.accessToken);sessionStorage.setItem('unreal-tran:web:refresh-token:v1',s.refreshToken);},signed);
+try{
+ await page.goto('http://127.0.0.1:6180/content/training-projects/'+id+'/legacy');
+ await expect(page.locator('[data-action="save"]')).toBeVisible({timeout:120000});
+ await page.getByRole('button',{name:'背景与前置讲解',exact:true}).click();
+ const dialog=page.getByRole('dialog',{name:'背景与前置讲解'});
+ await dialog.locator('input[type="file"]').setInputFiles('../unreal_tran_web/public/models/bridge-training/bridge-pump-switch-v2.jpg');
+ await expect(dialog.locator('button').filter({hasText:'上传背景图'})).not.toHaveClass(/is-loading/,{timeout:60000});
+ await dialog.getByRole('button',{name:/讲解1 ·/}).click();
+ await dialog.getByText('视频',{exact:true}).click();
+ const videos='../unreal_tran_web/public/legacy/virtual-training/videos/narration/bridge-pump-switch/v2/instructor-1-v2';
+ const file=fs.readdirSync(videos).find(f=>f.endsWith('.mp4'));assert.ok(file);
+ await dialog.locator('input[type="file"]').setInputFiles(path.join(videos,file));
+ await expect(dialog.locator('button').filter({hasText:'上传讲解视频'})).not.toHaveClass(/is-loading/,{timeout:60000});
+ await dialog.getByRole('button',{name:'应用到编排',exact:true}).click();
+ const saved=page.waitForResponse(r=>r.url().includes('/content/projects/'+id)&&r.request().method()==='PUT');
+ await page.locator('[data-action="save"]').click();assert.equal((await saved).status(),200);
+ fixture=await api('content/projects/'+id);const intro=fixture.currentVersion.content.introduction;
+ assert.ok(intro.background.imageAssetCode.startsWith('INTRO-'));assert.ok(intro.lectures[0].videoAssetCode.startsWith('INTRO-'));
+ assert.equal(intro.lectures[0].format,'video');
+ for(const [code,type]of [[intro.background.imageAssetCode,'IMAGE'],[intro.lectures[0].videoAssetCode,'VIDEO']]){const asset=fixture.currentVersion.assets.find(a=>a.code===code);assert.equal(asset.type,type);assert.equal(asset.status,'READY');}
+ fixture=await api('content/projects/'+id+'/publish',{version:fixture.project.version});assert.equal(fixture.project.status,'PUBLISHED');
+ await page.reload();await expect(page.locator('[data-action="save"]')).toBeVisible({timeout:120000});await page.getByRole('button',{name:'背景与前置讲解',exact:true}).click();
+ await dialog.getByRole('button',{name:/讲解1 ·/}).click();await expect(dialog.locator('button').filter({hasText:'上传讲解视频'})).toBeVisible();
+ await page.screenshot({path:dir+'/authoring-uploaded-video.png'});pass=true;
+}catch(error){await page.screenshot({path:dir+'/upload-failure.png'});throw error;}
+finally{
+ await browser.close();fixture=await api('content/projects/'+id);
+ if(fixture.project.status==='PUBLISHED')fixture=await api('content/projects/'+id+'/review',{version:fixture.project.version,action:'REVOKE',comment:'讲解上传验收结束,清理临时工程'});
+ await api('content/projects/'+id+'?version='+fixture.project.version,undefined,'DELETE');
+ const deleted=await call('tran/v1/content/projects/'+id,signed.accessToken);assert.equal(deleted.status,404);
+ fs.writeFileSync(dir+'/upload-result.json',JSON.stringify({pass,projectId:id,uploadedImage:true,uploadedVideo:true,published:pass,softDeleted:true},null,2));
+}
+console.log('UPLOAD/PUBLISH/CLEANUP PASS',id);
diff --git a/tools/bridge-new-models-list.mjs b/tools/bridge-new-models-list.mjs
new file mode 100644
index 0000000..2f447af
--- /dev/null
+++ b/tools/bridge-new-models-list.mjs
@@ -0,0 +1,20 @@
+import fs from 'node:fs';
+import assert from 'node:assert/strict';
+import {chromium,expect} from '@playwright/test';
+import {login} from './role-permissions-live.mjs';
+const dir='reports/bridge-new-models-006-008-20260917',signed=await login('root'),browser=await chromium.launch({channel:'msedge',headless:true}),page=await browser.newPage({viewport:{width:1440,height:1000}}),checks=[];
+await page.addInitScript(s=>{sessionStorage.setItem('unreal-tran:web:access-token:v1',s.accessToken);sessionStorage.setItem('unreal-tran:web:refresh-token:v1',s.refreshToken);},signed);
+try{
+ for(const [label,origin]of [['local','http://127.0.0.1:6180'],['lan','http://192.168.31.168:6180']]){
+ await page.goto(origin+'/teaching/virtual-training');
+ for(const [code,file]of [['006','bridge-pump-substitute-v4.jpg'],['007','bridge-pump-replace-v4.jpg'],['008','bridge-balance-valve-swap-v4.jpg']]){
+ const card=page.getByTestId('teaching-assignment-TASK-VIRTUAL-'+code),img=card.locator('figure img');
+ await expect(img).toHaveAttribute('src','/models/bridge-training/'+file,{timeout:30000});
+ await expect.poll(()=>img.evaluate(i=>i.complete&&i.naturalWidth>0)).toBe(true);
+ checks.push({label,code,file,pass:true});
+ }
+ await page.screenshot({path:dir+'/list-'+label+'.png',fullPage:true});
+ assert.ok(await page.evaluate(()=>document.documentElement.scrollWidth<=innerWidth));
+ }
+ fs.writeFileSync(dir+'/list.json',JSON.stringify({pass:true,checks},null,2));console.log('PASS',checks.length);
+}finally{await browser.close();}
diff --git a/tools/bridge-new-models-migrate.mjs b/tools/bridge-new-models-migrate.mjs
new file mode 100644
index 0000000..ffe8700
--- /dev/null
+++ b/tools/bridge-new-models-migrate.mjs
@@ -0,0 +1,39 @@
+import fs from 'node:fs';
+import assert from 'node:assert/strict';
+import {login,call} from './role-permissions-live.mjs';
+import {scripts,scriptDefinition} from '../../unreal_tran_web/src/features/virtual-training-scripts/definition.js';
+const dir='reports/bridge-new-models-006-008-20260917';fs.mkdirSync(dir,{recursive:true});
+const signed=await login('root');
+const api=async(endpoint,body,method)=>{const r=await call('tran/v1/'+endpoint,signed.accessToken,body,method);assert.equal(r.status,200,endpoint+': '+r.message);return r.data;};
+const backup=(name,value)=>{const p=dir+'/'+name+'.json';if(!fs.existsSync(p))fs.writeFileSync(p,JSON.stringify(value,null,2));};
+for(const id of [86,116])backup('unchanged-'+id,await api('teaching/assignments/'+id));
+const migrated=[];
+for(const [id,code]of [[87,'TASK-VIRTUAL-006'],[88,'TASK-VIRTUAL-007'],[89,'TASK-VIRTUAL-008']]){
+ let task=await api('teaching/assignments/'+id),detail=await api('content/projects/'+task.contentProjectId);
+ assert.equal(task.code,code);const script=scripts.find(s=>s.code===code);assert.equal(task.definitionSnapshot.runtime.scriptId,script.id);
+ backup('before-task-'+id,task);backup('before-project-'+task.contentProjectId,detail);
+ if(task.definitionSnapshot.runtime.scriptVersion==='4'){migrated.push({id,code,versionId:task.contentVersionId});continue;}
+ const content=structuredClone(detail.currentVersion.content),next=scriptDefinition(script);
+ // Retain all scoring, speech assets, step codes, observations and task membership.
+ content.scenario=next.scenario;content.runtime={...content.runtime,scriptVersion:'4'};
+ if(code==='TASK-VIRTUAL-006'){
+ const current=content.steps[4],replacement=next.steps[4];
+ current.action=replacement.action;current.targetId=replacement.targetId;current.targetName='滤油器出口球阀 1';
+ }
+ if(detail.currentVersion.content.runtime.scriptVersion!=='4'){
+ detail=await api('content/projects/'+detail.project.id,{...detail.project,content,assets:detail.currentVersion.assets,dependencies:detail.currentVersion.dependencies,version:detail.project.version,changeSummary:'换用0916整车及配套零件,原位操作;保留步骤编码、讲解与成绩规则'},'PUT');
+ }
+ if(detail.project.publishedVersionId!==detail.currentVersion.id)detail=await api('content/projects/'+detail.project.id+'/publish',{version:detail.project.version});
+ if(id!==87 && task.status==='PUBLISHED'){
+ task=await api('teaching/assignments/'+id+'/model-version',{contentVersionId:detail.project.publishedVersionId,version:task.version,reason:'只更新模型,保留步骤、操作、讲解、成绩及已有训练记录'},'PUT');
+ }else{
+ if(task.status==='PUBLISHED')task=await api('teaching/assignments/'+id+'/withdraw',{version:task.version,reason:'更新为已核验的0916模型版本,保留原任务与历史训练记录'});
+ assert.ok(['DRAFT','WITHDRAWN'].includes(task.status));
+ task=await api('teaching/assignments/'+id,{...task,contentVersionId:detail.project.publishedVersionId,version:task.version},'PUT');
+ task=await api('teaching/assignments/'+id+'/publish',{version:task.version});
+ }
+ assert.equal(task.status,'PUBLISHED');assert.equal(task.definitionSnapshot.runtime.scriptVersion,'4');
+ migrated.push({id,code,projectId:task.contentProjectId,versionId:task.contentVersionId,steps:task.definitionSnapshot.steps.length});console.log(migrated.at(-1));
+}
+for(const id of [86,116]){const before=JSON.parse(fs.readFileSync(dir+'/unchanged-'+id+'.json')),after=await api('teaching/assignments/'+id);delete before.serverNow;delete after.serverNow;assert.deepEqual(after,before);}
+fs.writeFileSync(dir+'/migration.json',JSON.stringify({pass:true,migrated,unchanged:[86,116]},null,2));
diff --git a/tools/bridge-new-models-report.mjs b/tools/bridge-new-models-report.mjs
new file mode 100644
index 0000000..8e50beb
--- /dev/null
+++ b/tools/bridge-new-models-report.mjs
@@ -0,0 +1,29 @@
+import fs from 'node:fs';
+import assert from 'node:assert/strict';
+import {createHash} from 'node:crypto';
+import {login,call} from './role-permissions-live.mjs';
+const dir='reports/bridge-new-models-006-008-20260917',read=name=>JSON.parse(fs.readFileSync(dir+'/'+name+'.json','utf8'));
+assert.equal(read('list').pass,true,'local and LAN task covers');
+assert.equal(read('lan-media-and-005').pass,true,'LAN media playback and unchanged 005 entries');
+const session=await login('root');
+const api=async url=>{const r=await call('tran/v1/'+url,session.accessToken);assert.equal(r.status,200,r.message);return r.data;};
+const tasks=[];
+for(const [id,code]of [[87,'006'],[88,'007'],[89,'008']]){
+ const task=await api('teaching/assignments/'+id),before=read('before-task-'+id),live=read('task-'+code+'-live');
+ assert.equal(live.pass,true,code+' browser regression');assert.equal(task.status,'PUBLISHED');assert.equal(task.definitionSnapshot.runtime.scriptVersion,'4');
+ assert.equal(task.code,before.code);assert.equal(task.runCount,before.runCount);assert.deepEqual(task.members,before.members);
+ if(id!==87)assert.deepEqual(task.definitionSnapshot.steps,before.definitionSnapshot.steps,'existing operations and scoring unchanged');
+ const runs=await api('teaching/runs?assignmentId='+id+'&size=100');
+ tasks.push({id,code:task.code,name:task.name,versionId:task.contentVersionId,steps:task.definitionSnapshot.steps.length,operations:live.checks.filter(c=>/ step \d+ operation /.test(c.name)).length,members:task.members.length,runCount:task.runCount,runs:runs.records.map(r=>({id:r.id,status:r.status})),preview:'/teaching/virtual-training/preview/'+id});
+}
+for(const id of [86,116]){const before=read('unchanged-'+id),after=await api('teaching/assignments/'+id);delete before.serverNow;delete after.serverNow;assert.deepEqual(after,before);}
+const models=[];
+for(const [source,file]of [['0916架桥车.glb','bridge-erector-20260916.glb'],['0916保障车.glb','bridge-support-20260916.glb'],['双车连接油管.glb','bridge-rescue-hoses-20260916.glb'],['3封口袋.glb','bridge-pump-bags-20260916.glb'],['4封口袋.glb','bridge-valve-bags-20260916.glb'],['牛皮纸.glb','bridge-paper-20260916.glb']]){
+ const a=fs.readFileSync('../../模型/'+source),b=fs.readFileSync('../unreal_tran_web/public/models/'+file);assert.deepEqual(a,b);models.push({source,url:'/models/'+file,bytes:b.length,sha256:createHash('sha256').update(b).digest('hex')});
+}
+const audit={pass:true,time:new Date().toISOString(),environment:'127.0.0.1:6180 / 192.168.31.168:6180 through Gateway',role:'管理员教员预览',tasks,unchanged:[86,116],models};
+fs.writeFileSync(dir+'/audit.json',JSON.stringify(audit,null,2));
+const rows=tasks.map(t=>`| ${t.code} | ${t.name} | ${t.steps} | ${t.operations} | ${t.versionId} | 通过 |
`).join('');
+const sections=tasks.map(t=>`${t.code} · ${t.name}
打开现有任务预览 · 逐项动作检查

`).join('');
+fs.writeFileSync(dir+'/index.html',`006~008 新模型验收006~008 新模型验收
更新现有任务;005 两个入口未变。新模型来自用户提供文件,保留原始字节;旧内容版本及 v3 定义保留。现有成员、运行记录和成绩规则没有删除或重建。
以管理员教员预览通过真实鼠标点击/拖拽、逐步服务端校验完成;预览不写入学员成绩。006 分别操作两个出口球阀,007 拆装四颗真实螺栓,008 完成两侧阀体互换。数字人视频与语音保留。
保障车取力器开关、试验手柄、清洗布、阀座结合面等没有独立精确模型的项目仍标明操作示意。
校验命令:node --test scripts/bridge-new-models.test.mjs;node scripts/virtual-training-formal-route.contract.test.mjs;pnpm run build;mvn -pl ut_tran -Dtest=ScriptedTrainingContractTest,ScriptModelRevisionTest test。数据与文件校验 · 版本迁移。测试没有新增教学任务。
${sections}`);
+console.log(JSON.stringify(tasks));
diff --git a/tools/bridge-pump-overview-live.mjs b/tools/bridge-pump-overview-live.mjs
new file mode 100644
index 0000000..784c3fc
--- /dev/null
+++ b/tools/bridge-pump-overview-live.mjs
@@ -0,0 +1,74 @@
+import fs from 'node:fs/promises';
+import path from 'node:path';
+import assert from 'node:assert/strict';
+import {chromium,expect} from '@playwright/test';
+import {login,call} from './role-permissions-live.mjs';
+
+const dir=path.resolve('reports/bridge-pump-overview-20260915');
+await fs.mkdir(dir,{recursive:true});
+const signed=await login('root'),checks=[],errors=[],writes=[];
+const before=await call('tran/v1/teaching/assignments/88',signed.accessToken);
+assert.equal(before.status,200);assert.equal(before.data.code,'TASK-VIRTUAL-007');
+const browser=await chromium.launch({channel:'msedge',headless:true,args:['--enable-unsafe-swiftshader']});
+const page=await browser.newPage({viewport:{width:1920,height:1080}});
+await page.addInitScript(s=>{sessionStorage.setItem('unreal-tran:web:access-token:v1',s.accessToken);sessionStorage.setItem('unreal-tran:web:refresh-token:v1',s.refreshToken);localStorage.setItem('unreal-tran:web:preferences:v1',JSON.stringify({themeMode:'military'}));},signed);
+// Read-only material/camera snapshot for this browser; it does not drive the scene.
+await page.route(/\/src\/features\/virtual-training-legacy\/upstream\/views\/training\.js(?:\?|$)/,async route=>{
+ const response=await route.fetch();await route.fulfill({response,body:(await response.text())+`
+globalThis.__pumpOverviewSnapshot = () => {
+ const r=activeTraining;if(!r?.sceneReady)return null;
+ let compared=0,faded=0,opaque=0;
+ r.publishedContentRoot.traverse(o=>{if(!o.isMesh)return;for(const m of Array.isArray(o.material)?o.material:[o.material]){
+ const base=r.viewerMaterialBaseline.get(m);if(!base)continue;compared++;if(m.opacity=0.9)opaque++;
+ }});
+ return {compared,faded,opaque,detail:!!r.bridgeDetailActive,distance:r.camera.position.distanceTo(r.controls.target),homeDistance:r.cameraHome.position.distanceTo(r.cameraHome.target),position:r.camera.position.toArray(),target:r.controls.target.toArray(),step:r.session.stepIndex};
+};`});
+});
+page.on('pageerror',e=>errors.push(e.message));
+page.on('request',r=>{if(r.url().includes('/api/tran/')&&!['GET','HEAD'].includes(r.method()))writes.push(r.url());});
+const snapshot=()=>page.evaluate(()=>globalThis.__pumpOverviewSnapshot?.());
+const ready=async()=>{await expect(page.locator('[data-role="loading"]')).toHaveClass(/is-hidden/,{timeout:120000});await expect.poll(snapshot).not.toBeNull();await page.waitForTimeout(1400);};
+const solid=async(name)=>{const s=await snapshot();assert.ok(s.compared>50);assert.equal(s.faded,0,name);assert.equal(s.detail,false);assert.ok(s.opaque>50);assert.ok(s.distance>4);checks.push({name,...s});return s;};
+try{
+ for(const [label,origin] of [['local','http://127.0.0.1:6180'],['lan',process.env.LAN_URL]].filter(([,origin])=>origin)){
+ await page.goto(origin+'/teaching/virtual-training/preview/88');await ready();
+ await solid(label+' first load uses solid vehicle overview');
+ await page.screenshot({path:path.join(dir,`${label}-overview.png`)});
+ await page.locator('[data-action="toggle-issue-highlight"]').click();
+ await expect.poll(async()=>(await snapshot()).faded).toBeGreaterThan(0);
+ await page.locator('[data-action="toggle-issue-highlight"]').click();await solid(label+' explicit highlight off restores original materials');
+ await page.locator('[data-action="viewer-reset-view"]').click();await page.waitForTimeout(800);await solid(label+' reset keeps overview solid');
+ await page.reload();await ready();await solid(label+' reload keeps overview solid');
+ }
+ // Real preview interactions must still execute and validate; every automatic
+ // operation/step transition should preserve a normal exterior camera distance.
+ for(let index=0;index<5;index++){
+ const step=before.data.definitionSnapshot.steps[index];
+ for(const [operationIndex] of step.action.mechanism.steps.entries()){
+ await page.locator('[data-role="part-label"]').click();
+ await expect.poll(()=>page.evaluate(()=>globalThis.__trainingSceneDiagnostics().bridgeWorkshop.pending)).toBe(false);
+ await page.waitForTimeout(1000);
+ await solid(`step ${index+1}, operation ${operationIndex+1}`);
+ }
+ await expect(page.locator('[data-action="next"]')).toBeEnabled({timeout:15000});
+ if(index<4){await page.locator('[data-action="next"]').click();await page.waitForTimeout(1400);await solid(`enter step ${index+2}`);}
+ }
+ await page.screenshot({path:path.join(dir,'after-pump-removal.png')});
+ // Manual close inspection remains available via existing structure/focus tools.
+ await page.locator('[data-role="model-commandbar"] [data-action="toggle-structure-tree"]').click();
+ const part=page.locator('[data-action="select-structure-part"]').filter({hasText:/^车_1$/}).first();
+ const partKey=await part.getAttribute('data-part-id');
+ await part.click();const previousDistance=(await snapshot()).distance;
+ await page.locator('[data-action="focus-selected-part"]').click();await page.waitForTimeout(850);
+ assert.ok((await snapshot()).distanceurl.endsWith('/preview/validate')));assert.deepEqual(errors,[]);
+ await fs.writeFile(path.join(dir,'result.json'),JSON.stringify({pass:true,checks,errors,writes,taskVersionUnchanged:true},null,2));
+ console.log(`PASS: ${checks.length} overview/material checks, five steps executed, manual focus, preview validation only`);
+}catch(error){await page.screenshot({path:path.join(dir,'failure.png')}).catch(()=>{});await fs.writeFile(path.join(dir,'result.json'),JSON.stringify({pass:false,message:error.message,checks,errors,writes},null,2));throw error;}
+finally{await browser.close();}
diff --git a/tools/bridge-solid-view-live.mjs b/tools/bridge-solid-view-live.mjs
new file mode 100644
index 0000000..e2439e2
--- /dev/null
+++ b/tools/bridge-solid-view-live.mjs
@@ -0,0 +1,64 @@
+import fs from 'node:fs/promises';
+import path from 'node:path';
+import assert from 'node:assert/strict';
+import {chromium,expect} from '@playwright/test';
+import {login} from './role-permissions-live.mjs';
+
+const folder=path.resolve('reports/'+(process.env.REPORT_NAME||'bridge-solid-view-20260915'));
+await fs.mkdir(folder,{recursive:true});
+const checks=[],errors=[],writes=[],signed=await login('root');
+const browser=await chromium.launch({channel:'msedge',headless:true,args:['--enable-unsafe-swiftshader']});
+const page=await browser.newPage({viewport:{width:1366,height:768}});
+await page.addInitScript(s=>{sessionStorage.setItem('unreal-tran:web:access-token:v1',s.accessToken);sessionStorage.setItem('unreal-tran:web:refresh-token:v1',s.refreshToken);localStorage.setItem('unreal-tran:web:preferences:v1',JSON.stringify({themeMode:'military'}));},signed);
+await page.route(/\/src\/features\/virtual-training-legacy\/upstream\/views\/training\.js(?:\?|$)/,async route=>{
+ const response=await route.fetch();await route.fulfill({response,body:(await response.text())+`
+globalThis.__solidSnapshot=(options={})=>{
+ const e=activeTraining;if(!e?.sceneReady)return null;
+ const meshes=[],canvas=e.canvas.getBoundingClientRect(),active=e.parts.get(e.getActiveTargetId()),dragPoints=[];
+ e.publishedContentRoot.traverse(o=>{if(!o.isMesh||o.userData.trainingPickProxy)return;meshes.push({id:o.uuid,visible:effectivelyVisible(o),materials:(Array.isArray(o.material)?o.material:[o.material]).map(m=>({side:m.side,opacity:m.opacity,transparent:m.transparent}))});});
+ const ray=new THREE.Raycaster();
+ if(options.drag)for(let y=110;y!h.object.userData.trainingPickProxy&&effectivelyVisible(h.object));
+ if(!hit||hit.object.userData.partId==='scene:front-pump-rescue-vehicle')dragPoints.push({x:canvas.left+x,y:canvas.top+y});
+ }
+ return {meshes,dragPoints,camera:e.camera.position.toArray(),step:e.session.stepIndex,operation:e.getActiveMechanismOperation()?.state.index,errors:e.errorCount,cutaway:e.inspection.cutaway?.size||0};
+};`});
+});
+page.on('pageerror',e=>errors.push(e.message));
+page.on('request',r=>{if(r.url().includes('/api/tran/')&&!['GET','HEAD'].includes(r.method()))writes.push(r.url());});
+const snap=(options={})=>page.evaluate(o=>globalThis.__solidSnapshot?.(o),options);
+const visible=s=>s.meshes.filter(m=>m.visible).map(m=>m.id).sort();
+try{
+ for(const id of (process.env.TASK_IDS||'86,87,88,89').split(',')){
+ await page.goto((process.env.BASE_URL||'http://127.0.0.1:6180')+'/teaching/virtual-training/preview/'+id);
+ await expect(page.locator('[data-role="loading"]')).toHaveClass(/is-hidden/,{timeout:120000});
+ await expect.poll(snap,{timeout:30000}).not.toBeNull();await page.waitForTimeout(1500);
+ const initial=await snap();assert.ok(initial.meshes.every(m=>m.materials.every(v=>v.side===2)));
+ await page.locator('[data-role="part-label"]').click();await page.waitForTimeout(1100);
+ const focused=await snap();await page.screenshot({path:path.join(folder,`task-${id}-focused.png`)});
+ checks.push({id,name:'focus keeps every previously visible mesh',before:visible(initial).length,after:visible(focused).length,automaticHidden:focused.cutaway});
+ assert.deepEqual(visible(focused),visible(initial),'focusing must not hide vehicle or terrain meshes');
+ for(const [index,dx,dy] of [[1,155,20],[2,-90,135],[3,-170,-75]]){
+ const start=await snap({drag:true});assert.ok(start.dragPoints.length);const point=start.dragPoints[Math.floor(start.dragPoints.length/2)];
+ await page.mouse.move(point.x,point.y);await page.mouse.down();await page.mouse.move(point.x+dx,point.y+dy,{steps:12});await page.mouse.up();await page.waitForTimeout(1000);
+ const after=await snap();assert.notDeepEqual(after.camera,start.camera);assert.deepEqual(visible(after),visible(initial),'orbit keeps complete mesh set');assert.equal(after.errors,0);assert.equal(after.step,initial.step);assert.equal(after.operation,initial.operation);
+ await page.screenshot({path:path.join(folder,`task-${id}-orbit-${index}.png`)});
+ }
+ await page.locator('[data-viewer-action="tools"]').click();
+ for(let n=0;n<4;n++)await page.locator('[data-action="toggle-issue-highlight"]').click();
+ assert.deepEqual(visible(await snap()),visible(initial));
+ await page.locator('[data-action="toggle-translucent-others"]').click();
+ const faded=await snap();assert.deepEqual(visible(faded),visible(initial));assert.ok(faded.meshes.some(m=>m.materials.some(v=>v.opacity<.5)));
+ await page.locator('[data-action="toggle-translucent-others"]').click();assert.deepEqual((await snap()).meshes,initial.meshes);
+ await page.locator('[data-action="toggle-hide-others"]').click();assert.ok(visible(await snap()).length{});await fs.writeFile(path.join(folder,'result.json'),JSON.stringify({pass:false,error:error.message,checks,errors,writes},null,2));throw error;}
+finally{await browser.close();}
diff --git a/tools/bridge-solid-view-report.mjs b/tools/bridge-solid-view-report.mjs
new file mode 100644
index 0000000..44e8b46
--- /dev/null
+++ b/tools/bridge-solid-view-report.mjs
@@ -0,0 +1,38 @@
+import fs from 'node:fs/promises';
+import path from 'node:path';
+import assert from 'node:assert/strict';
+import {pathToFileURL} from 'node:url';
+import {chromium} from '@playwright/test';
+const folder=path.resolve('reports/bridge-solid-view-20260915');
+const read=async file=>JSON.parse(await fs.readFile(path.join(folder,file),'utf8'));
+const before=await read('../bridge-solid-view-before-20260915/result.json');
+const after=await read('result.json'),lan=await read('../bridge-solid-view-lan-20260915/result.json');
+assert.equal(before.pass,false);assert.equal(after.pass,true);assert.equal(lan.pass,true);
+const flowFiles=['task-86.json','tasks-87-88.json','task-89.json'];
+const flows=[];
+for(const file of flowFiles){const result=await read('../bridge-solid-view-flow-20260915/'+file);assert.equal(result.pass,true);flows.push(result);}
+const summary={pass:true,generatedAt:new Date().toISOString(),
+ rootCause:'聚焦/旋转视角时自动将遮挡网格 visible 设为 false。实际 GLB 的一块网格可能涵盖大片车身或地形,DoubleSide 无法显示已被隐藏的网格。',
+ changes:['删除自动遮挡隐藏及其恢复/逐帧射线逻辑','保留物理材质 DoubleSide','校准液压泵和球阀的可见观察面','只允许步骤动画及主动查看工具改变显隐'],
+ visibility:after.checks,lan:lan.checks,
+ operations:flows.reduce((n,r)=>n+r.checks.filter(c=>c.target).length,0),
+ serverValidations:flows.reduce((n,r)=>n+r.writes.length,0),
+ explicitTools:flows.flatMap(r=>r.checks.filter(c=>c.targetId)),
+ commands:[{command:'pnpm run build',pass:true},{command:'node scripts/virtual-training-formal-route.contract.test.mjs',pass:true},{command:'git diff --check',pass:true}],
+ environment:['http://127.0.0.1:6180','http://192.168.31.168:6180'],
+ account:'管理员 / 教员预览',data:'未新增任务、未写学员成绩;操作回归只使用现有任务的 preview/validate。',
+};
+assert.equal(summary.operations,94);assert.equal(summary.serverValidations,39);
+await fs.writeFile(path.join(folder,'summary.json'),JSON.stringify(summary,null,2));
+const titles={86:'005 液压泵应急切换',87:'006 液压泵应急替代',88:'007 前泵换件修复',89:'008 平衡阀拆拼互换'};
+const html=`双面材质与视角镂空修复
+双面材质与视角镂空修复
2026-09-15 · 四套正式桥梁脚本 · 管理员 / 教员预览
+结论:双面材质已生效,镂空来自自动隐藏网格。${summary.rootCause}
现已删除该逻辑。聚焦、旋转、增强辉光均不改变完整网格集合;显隐仅由实际步骤动画或用户主动操作控制。
+复现与回归证据
修复前 005 聚焦后可见网格由 ${before.checks[0].before} 块变成 ${before.checks[0].after} 块。修复后四个场景均保持数量和网格标识完全一致,检查双面材质、三个方向旋转、辉光切换、半透明、隐藏其他及恢复。
| 任务 | 聚焦前 | 聚焦后 | 自动隐藏 |
${after.checks.filter(c=>c.before!=null).map(c=>`| ${titles[c.id]} | ${c.before} | ${c.after} | ${c.automaticHidden} |
`).join('')}
+旋转视角后的实际画面
${Object.entries(titles).map(([id,title])=>`
${title}
方向 2 · 方向 3 · 工具恢复后
`).join('')}
+实际操作回归
39 个步骤、94 次真实模型点击/拖动、39 次服务端预览校验通过。液压泵与球阀的可见观察方向已重新校准。
取力器等位于车体内部的部件,按用户操作打开“其他半透明”后查看和操作;重叠的流程零件可主动使用“隐藏其他”隔离查看。测试记录这些工具使用,不再靠自动移除车身保证命中。
${flowFiles.map(f=>`${f}`).join(' · ')}
+环境:本机与局域网,经 6100 Gateway。${summary.data}
构建(含类型检查及模型发布包校验)、正式路由契约、Git 差异检查通过。
四场景显隐回归 · 局域网记录 · 修复前复现 · 汇总记录
`;
+await fs.writeFile(path.join(folder,'index.html'),html);
+const browser=await chromium.launch({channel:'msedge',headless:true});
+try{const page=await browser.newPage({viewport:{width:1400,height:1000}});await page.goto(pathToFileURL(path.join(folder,'index.html')).href);assert.ok(await page.locator('img').evaluateAll(imgs=>imgs.every(i=>i.complete&&i.naturalWidth>0)));await page.screenshot({path:path.join(folder,'report-overview.png')});}finally{await browser.close();}
+console.log(JSON.stringify({pass:true,operations:summary.operations,report:path.join(folder,'index.html')}));
diff --git a/tools/bridge-task-cover-capture.mjs b/tools/bridge-task-cover-capture.mjs
new file mode 100644
index 0000000..a228327
--- /dev/null
+++ b/tools/bridge-task-cover-capture.mjs
@@ -0,0 +1,89 @@
+import fs from 'node:fs/promises';
+import path from 'node:path';
+import assert from 'node:assert/strict';
+import { chromium, expect } from '@playwright/test';
+import { login, call } from './role-permissions-live.mjs';
+
+// Capture actual published previews. This hook is injected only into this browser's
+// development-module response; no application code, task definition or score is changed.
+const studioHook = `
+globalThis.__bridgeCoverStudio = {
+ prepare() {
+ const r = activeTraining;
+ r.stopTeacherSpeech(); r.teacherVoiceEnabled = false;
+ if (r.targetMarker3D) r.targetMarker3D.visible = false;
+ const bounds = object => {
+ if (!object) return null;
+ const box = new THREE.Box3().setFromObject(object, true);
+ return { min:box.min.toArray(), max:box.max.toArray(), center:box.getCenter(new THREE.Vector3()).toArray(), size:box.getSize(new THREE.Vector3()).toArray() };
+ };
+ return { vehicle:bounds(r.viewerPrimaryObject), workshop:bounds(r.bridgeWorkshop),
+ parts:[...r.parts].filter(([id])=>id.startsWith('bridge-') || id.startsWith('front-pump-')).map(([id,o])=>({id,name:o.name,bounds:bounds(o)})),
+ camera:r.camera.position.toArray(), target:r.controls.target.toArray() };
+ },
+ camera(position, target) {
+ const r = activeTraining;
+ r.cameraAnimation = null;
+ r.viewerCameraTween = null;
+ r.inspection?.reset();
+ if (r.inspection) r.inspection.outline.enabled = false;
+ r.controls.minDistance = 0.05; r.controls.maxDistance = 200;
+ r.camera.position.fromArray(position); r.controls.target.fromArray(target);
+ r.camera.near=0.01; r.camera.updateProjectionMatrix(); r.controls.update();
+ },
+ stage(lastStep) {
+ const r = activeTraining;
+ // Published animation poses only: no session completion or API write.
+ r.applyCompletedMechanismTransforms(lastStep,true);
+ r.bridgeWorkshop?.traverse(o=>{if(o.isSprite)o.visible=false;});
+ if(r.targetMarker3D)r.targetMarker3D.visible=false;
+ },
+};`;
+
+const compositions = {
+ 'TASK-VIRTUAL-005': {step:4,position:[-8.6,4.7,7.6],target:[0,1.05,0.1],subject:'整车侧面、辅助控制盒打开、互救开关切换'},
+ 'TASK-VIRTUAL-006': {step:5,position:[6.4,6.2,13.5],target:[0,1.0,4.5],subject:'架桥车与供回油快速接头,已连接的供回油软管'},
+ 'TASK-VIRTUAL-007': {step:-1,position:[8.2,4.6,6.4],target:[0,1.05,0.8],subject:'前泵换件场景整车外观,保留正常材质与完整环境'},
+ 'TASK-VIRTUAL-008': {step:2,position:[-5.8,5.3,12.8],target:[0,1.02,4.8],subject:'大小腔平衡阀,拆开的阀体及油缸接口'},
+};
+
+const dir = path.resolve(process.env.REPORT_DIR || 'reports/bridge-task-covers-20260915');
+await fs.mkdir(dir, { recursive:true });
+const signed = await login('root');
+const result = await call('tran/v1/teaching/assignments?channel=VIRTUAL&assignmentKind=TRAINING&size=100',signed.accessToken);
+assert.equal(result.status,200);
+const tasks = result.data.records.filter(t=>/^TASK-VIRTUAL-00[5-8]$/.test(t.code)).sort((a,b)=>a.code.localeCompare(b.code));
+assert.equal(tasks.length,4);
+const browser = await chromium.launch({channel:'msedge',headless:true,args:['--enable-unsafe-swiftshader']});
+const page = await browser.newPage({viewport:{width:1200,height:1000},deviceScaleFactor:1});
+await page.addInitScript(s=>{sessionStorage.setItem('unreal-tran:web:access-token:v1',s.accessToken);sessionStorage.setItem('unreal-tran:web:refresh-token:v1',s.refreshToken);localStorage.setItem('unreal-tran:web:preferences:v1',JSON.stringify({themeMode:'military'}));},signed);
+await page.route(/\/src\/features\/virtual-training-legacy\/upstream\/views\/training\.js(?:\?|$)/,async route=>{
+ const response=await route.fetch(); await route.fulfill({response,body:(await response.text())+studioHook});
+});
+const requestedCodes=new Set((process.env.TASK_CODES || '').split(',').filter(Boolean));
+const previousFrames=requestedCodes.size ? JSON.parse(await fs.readFile(path.join(dir,'frames.json'),'utf8').catch(()=>'[]')) : [];
+const frames=previousFrames.filter(f=>!requestedCodes.has(f.code));
+try {
+ for(const task of tasks) {
+ if(requestedCodes.size && !requestedCodes.has(task.code))continue;
+ await page.goto(`http://127.0.0.1:6180/teaching/virtual-training/preview/${task.id}`);
+ await expect(page.locator('[data-role="loading"]')).toHaveClass(/is-hidden/,{timeout:120000});
+ await page.waitForFunction(()=>globalThis.__bridgeCoverStudio && globalThis.__trainingSceneDiagnostics?.()?.publishedContentMounted);
+ await page.screenshot({path:path.join(dir,`${task.code}-workspace.png`)});
+ const info=await page.evaluate(()=>globalThis.__bridgeCoverStudio.prepare());
+ frames.push({code:task.code,name:task.name,taskId:task.id,contentVersionId:task.contentVersionId,...info});
+ await page.addStyleTag({content:'.training-viewport {position:fixed!important;inset:0!important;width:1200px!important;height:1000px!important;z-index:2147483647!important;border:0!important;border-radius:0!important;} .training-viewport > :not(canvas) {display:none!important;} .training-canvas {width:100%!important;height:100%!important;}'});
+ const newModels={
+ 'TASK-VIRTUAL-006':{step:5,position:[-7,5.8,11],target:[1.2,1,1.1],subject:'新版架桥车、保障车与两车连接油管'},
+ 'TASK-VIRTUAL-007':{step:-1,position:[-6.5,4,8],target:[0,1,1],subject:'新版架桥车及原位前泵换件部件'},
+ 'TASK-VIRTUAL-008':{step:2,position:[-3.8,3.8,5],target:[-.05,1.3,.75],subject:'新版架桥车大小腔平衡阀与原位拆装区域'},
+ };
+ const composition=task.definitionSnapshot.runtime?.scriptVersion==='4'?newModels[task.code]:compositions[task.code];
+ await page.evaluate(c=>{globalThis.__bridgeCoverStudio.stage(c.step);globalThis.__bridgeCoverStudio.camera(c.position,c.target);},composition);
+ frames.at(-1).composition=composition;
+ await page.waitForTimeout(600);
+ await page.locator('canvas.training-canvas').screenshot({path:path.join(dir,`${task.code}-scene.jpg`),type:'jpeg',quality:88});
+ console.log(`Captured ${task.code}`);
+ }
+ await fs.writeFile(path.join(dir,'frames.json'),JSON.stringify(frames.sort((a,b)=>a.code.localeCompare(b.code)),null,2));
+} finally { await browser.close(); }
diff --git a/tools/bridge-task-cover-verify.mjs b/tools/bridge-task-cover-verify.mjs
new file mode 100644
index 0000000..6983742
--- /dev/null
+++ b/tools/bridge-task-cover-verify.mjs
@@ -0,0 +1,52 @@
+import fs from 'node:fs/promises';
+import path from 'node:path';
+import crypto from 'node:crypto';
+import assert from 'node:assert/strict';
+import { chromium, expect } from '@playwright/test';
+import { login } from './role-permissions-live.mjs';
+
+const dir=path.resolve('reports/bridge-task-covers-20260915');
+const files={
+ 'TASK-VIRTUAL-005':'bridge-pump-switch-v2.jpg',
+ 'TASK-VIRTUAL-006':'bridge-pump-substitute-v3.jpg',
+ 'TASK-VIRTUAL-007':'bridge-pump-replace-v3-overview.jpg',
+ 'TASK-VIRTUAL-008':'bridge-balance-valve-swap-v3.jpg',
+};
+const signed=await login('root'),checks=[],errors=[],writes=[];
+const browser=await chromium.launch({channel:'msedge',headless:true});
+const page=await browser.newPage({viewport:{width:1920,height:1080}});
+await page.addInitScript(s=>{sessionStorage.setItem('unreal-tran:web:access-token:v1',s.accessToken);sessionStorage.setItem('unreal-tran:web:refresh-token:v1',s.refreshToken);localStorage.setItem('unreal-tran:web:preferences:v1',JSON.stringify({themeMode:'military'}));},signed);
+page.on('pageerror',e=>errors.push(e.message));
+page.on('request',r=>{if(r.url().includes('/api/tran/') && !['GET','HEAD'].includes(r.method()))writes.push(r.url());});
+try{
+ for(const origin of ['http://127.0.0.1:6180',process.env.LAN_URL].filter(Boolean)){
+ const label=origin.includes('127.0.0.1')?'local':'lan';
+ await page.goto(origin+'/teaching/virtual-training');
+ await expect(page.locator('.ttc-assignment-card')).toHaveCount(4,{timeout:30000});
+ for(const [code,file] of Object.entries(files)){
+ const card=page.getByTestId('teaching-assignment-'+code),image=card.locator('figure img');
+ await expect(image).toHaveAttribute('src','/models/bridge-training/'+file);
+ await image.scrollIntoViewIfNeeded();
+ await expect.poll(()=>image.evaluate(i=>i.complete && i.naturalWidth===1200 && i.naturalHeight===1000)).toBe(true);
+ await expect(card.locator('.ttc-capability-tags')).toHaveCount(0);
+ await expect(card.locator('.ttc-card-body > p')).toHaveCount(0);
+ await expect(card.locator('.ttc-card-body > header small')).toHaveCount(0);
+ const response=await page.request.get(origin+'/models/bridge-training/'+file);
+ assert.equal(response.status(),200);
+ const bytes=await response.body(),source=await fs.readFile(path.resolve('../unreal_tran_web/public/models/bridge-training',file));
+ assert.ok(bytes.equals(source));
+ checks.push({origin,code,file,bytes:bytes.length,sha256:crypto.createHash('sha256').update(bytes).digest('hex')});
+ }
+ for(const width of [1920,1440]){
+ await page.setViewportSize({width,height:1080});
+ await page.locator('.ttc-assignment-card').first().scrollIntoViewIfNeeded();
+ await page.screenshot({path:path.join(dir,`${label}-list-${width}.png`),fullPage:true});
+ assert.ok(await page.evaluate(()=>document.documentElement.scrollWidth<=innerWidth));
+ }
+ }
+ assert.deepEqual(errors,[]);assert.deepEqual(writes,[]);
+ await fs.writeFile(path.join(dir,'verification.json'),JSON.stringify({pass:true,checks,errors,businessWrites:writes},null,2));
+ const frames=JSON.parse(await fs.readFile(path.join(dir,'frames.json'),'utf8'));
+ await fs.writeFile(path.join(dir,'index.html'),`四套桥梁虚拟仿真场景封面四套桥梁虚拟仿真 · 场景封面
原列表四条任务没有配置封面,统一回退至 vehicle-closeup-thumb.png。现从正式发布的三维预览取景,沿用对应脚本动作,保存为独立静态图片;按脚本标识和版本匹配,任务自行配置的封面仍优先。拍摄时隐藏界面浮层和场景文字牌,没有修改任务定义、训练记录或成绩。
006 的软管工位和 008 的平衡阀工位属于当前训练的操作示意;007 泵体与四颗安装螺栓来自整车模型。封面反映项目现有模型能力。本机/局域网加载及零业务写入核验 · 原场景边界、相机与取景步骤
${frames.map(f=>`

${f.code} · 内容版本 ${f.contentVersionId} · ${f.composition.step < 0 ? '开场整车视角' : `第 ${f.composition.step+1} 步动作后`}${f.name}
${f.composition.subject}
`).join('')}
任务列表实际效果

`);
+ console.log(`PASS: ${checks.length} cover loads, four distinct published scripts, desktop layouts, no business writes`);
+}finally{await browser.close();}
diff --git a/tools/bridge-workbook-review.mjs b/tools/bridge-workbook-review.mjs
new file mode 100644
index 0000000..50df282
--- /dev/null
+++ b/tools/bridge-workbook-review.mjs
@@ -0,0 +1,170 @@
+import fs from 'node:fs';
+import assert from 'node:assert/strict';
+const dir='reports/bridge-workbook-review-20260917';
+const sheets=JSON.parse(fs.readFileSync(dir+'/source.json','utf8'));
+const tasks=JSON.parse(fs.readFileSync(dir+'/current-tasks.json','utf8'));
+const notes={
+30:['005 第1步','部分对应','能确认预设故障泵;没有双泵对照或根据不同故障现象选择故障泵的诊断分支。'],
+31:['005 第2步','动作对应','断开取力器;实物开关外形仍受模型准确度限制。'],
+32:['005 第3步','动作对应','球阀打开动作已有;文档要求垂直到平行,几何正确性应以实际管轴为准,不能仅用固定90°证明。'],
+33:['005 第4步','动作对应','按相反方向重新接通取力器。'],
+34:['005 第5步','动作对应','开盖后操作互救开关;新模型验证入口已修复准备保存后的盖子状态恢复。'],
+35:['005 末尾','缺项','没有单泵继续驱动支腿、移动架、架设架或吊机的联动结果演示。'],
+37:['006 导入','缺项','现有任务从具体操作开始,没有独立的替代概念讲解段。'],
+38:['006 导入','部分对应','新模型已经有双车场景,但缺独立的互救原理讲解和供动力过程演示。'],
+39:['006 第1步','部分对应','顺序对应;发动机运行仅点击着色,不是发动机运行状态或动力联动。'],
+40:['006 第2步','部分对应','双车和原形软管已接入;操作实际是移动两个接口盖并显示已成形软管,缺接头插接/锁紧过程。'],
+41:['006 第3步','动作对应','使用保障车回油截止阀节点并旋转;位置准确性仍需按文档待确认项核定。'],
+42:['006 第4步','动作对应','开盒盖、开互救开关已实现;与005是否同一开关仍是原稿待确认项。'],
+43:['006 第5步','动作对应','现在是两个独立球阀,分别完成操作,不再只操作一个。'],
+44:['006 第6步','部分对应','保障车取力器开关仍为补充示意件;供油用软管颜色提示,未呈现真实液压泵和动力传递。'],
+45:['006 第7步','部分对应','仅移动示意手柄,未完成双车供油后的整机作业演示。'],
+47:['007 第1步','部分对应','有停机着色和初裁纸片缩放;没有依结合面轮廓裁剪的工具动作。'],
+48:['007 第2步','待确认','有旋转关闭动作;当前将2_07球阀开关02和3-02球阀开关复用为1号球阀,文档要求确认编号对应。'],
+49:['007 第3步','部分对应','真实接头和封口袋已绑定;接头仅位移,没有大活动扳手旋松过程或工具规格约束。'],
+50:['007 第4步','部分对应','已逐个拆4颗真实螺栓,原模型5颗的问题已处理;未展示开口扳手操作,螺栓半圈是示意行程。'],
+51:['007 第5步','动作对应','使用新模型原位前泵执行取下;工程配合尺寸不由流程通关证明。'],
+52:['007 第6步','部分对应','切换精裁纸垫模型,没有实际沿安装轮廓裁剪过程。'],
+53:['007 第7步','部分对应','纸垫移动到推定结合面位置,未按文档要求取得法兰轮廓与尺寸核验。'],
+54:['007 第8步','动作对应','新泵归位并逐个安装4颗螺栓;未推定拧紧扭矩。'],
+55:['007 第9步','部分对应','新泵注油口盖随泵移动并可打开;加油壶和油流为示意。后续没有关盖动作(文档也未列,属流程闭合建议)。'],
+56:['007 第10步','部分对应','取袋、接头归位顺序对应;“并拧紧”没有接头旋转或扳手动作。'],
+57:['007 第11步','部分对应','只启动着色并移动示意试验手柄;未接整机试车,也没有泄漏、压力等合格判据,文档明确需甲方补充。'],
+59:['008 第1步','部分对应','仅布块擦拭和阀体变色;没有油污到洁净贴图,也没有各管接头的清洗覆盖。'],
+60:['008 第2步','部分对应','接头移开、袋子封口已有;缺19号开口扳手及旋松动作。'],
+61:['008 第3步','部分对应','4颗螺栓逐件旋转拆下并取阀;缺8号内六角工具动作与规格约束。'],
+62:['008 第4步','部分对应','2个真实油堵逐件封堵;擦阀座是点击变色的示意平面。'],
+64:['008 第5步','部分对应','同小腔:无油污贴图和接头清洗覆盖。'],
+65:['008 第6步','部分对应','同小腔:有接头/封袋位移,缺19号扳手旋松。'],
+66:['008 第7步','部分对应','同小腔:4颗螺栓与阀体已有,缺8号内六角工具。'],
+67:['008 第8步','部分对应','2个真实油堵已有;阀座仍是补充接触平面示意。'],
+69:['008 第9步','部分对应','取下2油堵已有;只对阀座着色,没有阀体和阀座两者的擦拭去污过程。'],
+70:['008 第10步','部分对应','小腔来源阀体换装到大腔安装面,按四螺栓安装面校准姿态;有4颗螺栓,无8号工具。文案未清楚区分阀体来源与安装位置。'],
+71:['008 第11步','待确认','当前执行取袋、接管,并要求填写依据交教员核对。与C列装配方向一致,但D列及第三表仍明确指出原稿反向拆卸矛盾;不能认作已澄清。'],
+72:['008 第12步','待确认','当前复用第10步同一组4颗螺栓再次旋转;原稿未确认固定螺栓与阀体连接螺栓是否同一组。'],
+74:['008 第13步','部分对应','同第9步:取油堵已有,缺阀体/阀座擦拭全流程。'],
+75:['008 第14步','部分对应','大腔来源阀体换装到小腔安装面,姿态已校准;工具和来源/目的地提示仍需完善。'],
+76:['008 第15步','待确认','同第11步:取袋接管并记录依据;原稿相反动作仍待确认。'],
+77:['008 第16步','待确认','同第12步:复用第14步同一组4颗螺栓,需确认是否应有另一组。'],
+};
+const animationRows=sheets[0].rows.filter(r=>Object.keys(r).some(k=>/^C\d+$/.test(k)) && !r.C3);
+assert.equal(animationRows.length,65);
+const introRows=new Set([...Array.from({length:13},(_,i)=>i+5),...Array.from({length:10},(_,i)=>i+19)]);
+const escape=s=>String(s??'').replaceAll('|','/').replaceAll('\n',' ');
+const lines=animationRows.map(r=>{
+ const row=Number(Object.keys(r)[0].slice(1));const n=notes[row]||(introRows.has(row)?['005 导入/原理','缺项',([12,13,...Array.from({length:10},(_,i)=>i+19)].includes(row)?'没有原理图及回路演示,文档明确要求提供液压原理图。':row===17?'没有双泵定位讲解;新模型没有可按名称确认的独立后泵节点。':row>=8&&row<=10?'没有此独立环境素材段;训练场地背景不能替代三类画面。':'未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。')]:null);
+ assert.ok(n,'missing row '+row);
+ const serial=row>=39&&row<=44?`2-${String(row-36).padStart(2,'0')}`:row===47?'3-01':row===49?'3-03':row===59?'4-01':row===64?'4-05':r['A'+row];
+ return [serial,`1-动画!B${row}:F${row}`,r['B'+row],n[0],n[1],n[2]].map(escape).join(' | ');
+});
+const modelNotes=[
+'已按0916模型在原位绑定旧泵、新泵与取力器面;纸垫贴合仍是推定位置,不能用新模型存在替代装配尺寸验收。',
+'已分离为4颗真实螺栓;旧的5颗不再用于007操作。',
+'006~008已用统一0916架桥车坐标,附件保留共同导出坐标;005原发布入口仍旧模型,新模型在独立编排验证入口。',
+'保障车整车、接口盖和回油阀已有;独立取力器/液压泵未完整绑定,开关仍补充示意。',
+'未找到可按节点名称确认的独立后泵,也没有双泵定位步骤。',
+'双车连接油管.glb已使用;符合给定成形软管的交付方式,接头连接过程仍简化。',
+'当前操作件绑定接口盖,不等同于快速接头插接与锁紧。实装位置仍需确认。',
+'两个独立球阀已绑定,006第5步分别操作。',
+'模型节点注明2_07与3-02复用;编号与工况仍需按第三表确认。',
+'两个管接头已有且可分开;动作只有位移,未实现扳手旋松/旋紧。',
+'已使用牛皮纸附件的初裁/精裁形态;与建议单片贴图方案不同,但可表现状态;裁切轮廓未核定。',
+'007和008已用新封口袋附件;袋口包扎动作简化为移动就位。',
+'008每侧两个油堵已由实际模型分离使用。',
+'未实现带油污贴图到洁净贴图切换,当前为颜色变化。',
+'已用真实注油口盖并随新泵移动;开盖有动作。',
+'已按4_01/4_05等不同来源名和稳定交互ID区分,螺栓按独立几何拆分。',
+'已接两侧真实阀体与四螺栓;阀座接触面仍为示意平面。',
+'005五步已有,新模型验证入口也可运行;006复用同一辅助控制盒开关。',
+'当前新GLB无内嵌动画,三个任务未绑定整机联动轨道。文档所说12条/12秒旧演示尚未接到末步,需定位可迁移来源。',
+];
+const clientNotes=[
+'当前未接入;缺原理图会阻挡005原理演示,不阻挡现有五步操作。',
+'当前未接三类独立素材段。',
+'按新模型命名绑定大小腔阀;未获得实装位置指认确认,不能称已工程核定。',
+'按新模型给定坐标放置;仍需实装位置确认。',
+'纸垫位置可演示,但形状尺寸未取得可验收依据。',
+'当前采用模型合并命名的同一球阀;需确认编号与功能。',
+'尚缺;目前试验手柄动作不能代表试车合格。',
+'005没有额外手动自救阀步骤;保持原5步,不能擅加或认为互救开关必然等同该阀。',
+'当前005和006确实复用同一互救开关;对应关系尚待甲方确认。',
+'现有006展示外部供油操作;未区分前泵故障和液压系统完全失效情景。',
+'当前按同一组4颗处理两次紧固;是实现假设,需确认后决定是否增加另一组。',
+'当前008第11/15步取袋接管并要求人工核对,不自动宣告管路处置正确;文档仍未解决相反动作。',
+'当前统一写大活动扳手;属于合理文字归一,最终仍可按原稿确认。',
+'目前未设具体规格;不应凭空指定开口尺寸。',
+];
+function supporting(sheet,arr){const rows=sheet.rows.filter(r=>Object.keys(r).some(k=>/^B\d+$/.test(k))&&!r.B3);assert.equal(rows.length,arr.length);return rows.map((r,i)=>{const row=Object.keys(r)[0].slice(1);return `| ${sheet.name}!B${row}:D${row} | ${escape(r['B'+row])} | ${arr[i]} |`;}).join('\n');}
+const md=`# 四个桥梁脚本与说明文本核对
+
+核对时间:2026-09-17。源文件:E:/work/edit_3d/模型/重型支援桥四份脚本说明文本.xlsx。读取三个工作表全部非空内容;只读核对,没有修改原表、已发布任务或业务代码。
+
+## 结论
+
+当前流程可走通,但不能据此认定已完整满足65条动画/讲解要求。文档包含005的29条、006的9条、007的11条、008的16条;系统操作步骤为5/7/11/16,共39步,二者统计口径不同。005缺23条导入/原理条目及最后单泵联动作业,006缺独立概念讲解,三套末尾的整机作业/试验仍有缺口。
+
+此前34步、89项交互通过,指006~008当前已配置动作的可执行性,不是这份文档的内容完整性或实装准确性验收。
+
+核验了实时任务接口:005=任务86/内容533;006=87/553;007=88/554;008=89/555。005新模型编排验证另为任务116/内容552,未替换原列表005。
+
+## 优先处理
+
+1. 补005末尾单泵联动、006双车供油联动、007起动试车结果;旧12条动画需要先找来源再适配新节点。新GLB没有内嵌动画,当前步骤也未绑定整机动画。
+2. 接头旋松/旋紧目前只有位移;007/008需补工具动作。步骤toolId均为空,19号开口扳手、8号内六角未形成精确工具约束。
+3. 008清洗补脏净材质、管接头清洗和阀体/阀座擦拭;目前只有布块移动或变色。
+4. 明确008同一组还是两组螺栓、接管方向;明确自救阀、互救开关及球阀编号。这些文档已列待确认,不应凭代码猜定。
+5. 补005导入与原理讲解;原理图、三类环境画面需要对应资料。不得用当前步骤视频充当未制作的原理动画。
+6. 已发布006第7步、007第8/9/11步的屏幕说明仍有“原图/原稿未展开”字样。语音有覆盖文案不代表屏幕说明已清理;008矛盾说明宜放教师审核说明,不当作正常操作口播。
+
+本报告的“动作对应”只表示目标与顺序已有实现,不表示模型尺寸、维修安全条件、扭矩或压力判据已实装核验。“部分对应”表示代码实现与文字目标之间仍有可见差距。
+
+## 65条逐项核对
+
+原表部分编号被Excel储存为日期序列值(如46056);下表按所在脚本和顺序恢复展示编号,原文件未改。
+
+| 编号 | 原表位置 | 内容 | 当前位置 | 判断 | 差异与说明 |
+|---|---|---|---|---|---|
+${lines.map(l=>'| '+l+' |').join('\n')}
+
+## 建模需求19项复核
+
+此表的“缺模型”包含旧交付状态,不能直接视为0916新模型仍然全部缺失。
+
+| 原表位置 | 需求 | 当前情况 |
+|---|---|---|
+${supporting(sheets[1],modelNotes)}
+
+## 甲方资料与待澄清14项
+
+| 原表位置 | 事项 | 对当前实现的影响 |
+|---|---|---|
+${supporting(sheets[2],clientNotes)}
+
+## 实现依据
+
+- src/features/virtual-training-scripts/bridge-pump-switch.js:005操作五步。
+- bridge-pump-substitute.js:006软管显示、供油着色、末步示意手柄。
+- bridge-pump-replace.js:007接头位移、纸片状态、新泵安装与试验手柄。
+- bridge-balance-valve-swap.js:008同一组螺栓复用、清洗着色、未决接管步骤。
+- bridge-new-model-definition.js:006两独立球阀和新模型来源。
+- bridge-new-model-runtime.js:真实部件映射、示意件、阀体互换安装面校准。
+- bridge-3d-definition.js:工具ID为空,动作与顺序为主要评定维度。
+- 实时任务接口返回的步骤与模型路径;0916三个主要GLB的animations数组为空。
+
+本次没有再运行全套浏览器回归;依据为工作簿原文、实时接口定义、动作代码和模型结构。先前通关截图属于前一轮执行验证,不能替代本次发现的内容差异。
+`;
+fs.writeFileSync(dir+'/核对报告.md',md);
+let table=false;const blocks=[];
+for(const line of md.split('\n')){
+ const s=line.replaceAll('&','&').replaceAll('<','<').replaceAll('>','>');
+ if(s.startsWith('|')){
+ if(/^\|[\s|:-]+$/.test(s))continue;
+ const tag=table?'td':'th';if(!table){blocks.push('');table=true;}
+ blocks.push(''+s.split('|').slice(1,-1).map(c=>`<${tag}>${c.trim()}${tag}>`).join('')+'
');continue;
+ }
+ if(table){blocks.push('
');table=false;}
+ blocks.push(s.startsWith('# ')?''+s.slice(2)+'
':s.startsWith('## ')?''+s.slice(3)+'
':s?''+s+'
':'');
+}
+if(table)blocks.push('');
+fs.writeFileSync(dir+'/index.html',`四个桥梁脚本核对${blocks.join('\n')}`);
+console.log(JSON.stringify({animationRows:lines.length,modelRequirements:modelNotes.length,clientRequirements:clientNotes.length,currentTasks:tasks.map(t=>({code:t.code,steps:t.steps.length})),report:dir+'/核对报告.md'}));