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 完整流程回归、原四任务初始场景回归均通过。前端构建与合同测试、后端单元测试和打包通过。当前验证仅覆盖教员预览,不代表新增学员成绩验收。

场景制作

005 场景制作

训练编排

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.mjspnpm run build。本次没有创建任务、发布新版本或写入学员成绩;预览准备信息仅用于本次预览,测试只留下本目录报告与截图。

+

保存准备后,盒盖保持打开

+保存准备后盒盖仍打开,互救开关可见 +

继续操作互救开关,完成第 5 步

+新模型第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 两处观察记录仍按界面流程填写并留给教员复核。
+

初始总览

+

大屏初始视角与互救开关

1920 初始总览

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

互救开关向上转动

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

+

底栏、全屏与小屏

1280 全屏及底栏

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

1024 小屏控件

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 均无页面横向溢出。
模型动作旋转、拆卸、移动和连接采用模型动画;拖动时模型实时跟随。纯旋转开关的端部铰点在动作中保持固定。点击模式也完成实际动画后才提交校验。
标签去掉前导圆点,动态避让部件、浮层及其他标签;无法安放的额外标签隐藏。点击只聚焦放大,不产生步骤校验或成绩写入。
高亮恢复选中部件后反复开关问题高亮,全部材质透明度与保存的基线一致,不残留整车半透明状态。
隐藏其他隐藏其他模型时同时隐藏其标签;点标签后会同步查看目标,避免沿用之前的整车选择。
操作范围流程目标继续按步骤顺序判断;非流程整车网格可点击查看、拖动旋转视角,不增加操作错误、不调用步骤校验。
+

各任务实际截图

+

局域网与小屏

入口:127.0.0.1:6180192.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完整操作回归。

背景及每段讲解支持下一步、上一步、跳过讲解;跳过后仍从当前未完成操作继续。操作编号、动作、评分、已有记录不变。讲解期间不会播放隐藏的步骤数字教员,切页停止视频。

入口前置内容原操作发布内容版本
TASK-VIRTUAL-005背景 + 5 段讲解5 步556
TASK-VIRTUAL-006背景 + 2 段讲解7 步557
TASK-VIRTUAL-007背景 + 0 段讲解11 步558
TASK-VIRTUAL-008背景 + 0 段讲解16 步559
BRIDGE-005-AUTHORING-PILOT背景 + 5 段讲解5 步560

内容依据与范围

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 · 项目背景
005 · 原理讲解
005 · 原理讲解
006 · 项目背景
006 · 项目背景
007 · 项目背景
007 · 项目背景
008 · 项目概览
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重型支援桥液压泵应急替代712553通过
TASK-VIRTUAL-007重型支援桥前泵换件修复1127554通过
TASK-VIRTUAL-008重型支援桥平衡阀拆拼互换1650555通过

以管理员教员预览通过真实鼠标点击/拖拽、逐步服务端校验完成;预览不写入学员成绩。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 液压泵应急切换41410
006 液压泵应急替代69690
007 前泵换件修复66660
008 平衡阀拆拼互换77770
+

旋转视角后的实际画面

+

实际操作回归

39 个步骤、94 次真实模型点击/拖动、39 次服务端预览校验通过。液压泵与球阀的可见观察方向已重新校准。

取力器等位于车体内部的部件,按用户操作打开“其他半透明”后查看和操作;重叠的流程零件可主动使用“隐藏其他”隔离查看。测试记录这些工具使用,不再靠自动移除车身保证命中。

task-86.json · tasks-87-88.json · task-89.json

+

环境:本机与局域网,经 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 步动作后

重型支援桥平衡阀拆拼互换

大小腔平衡阀,拆开的阀体及油缸接口

任务列表实际效果

1920宽度任务列表
\ 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-011-动画!B5:F5片头字幕005 导入/原理缺项未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。
1-021-动画!B6:F6受损装备全景005 导入/原理缺项未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。
1-031-动画!B7:F7液压泵作用讲解005 导入/原理缺项未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。
1-041-动画!B8:F8架设环境画面005 导入/原理缺项没有此独立环境素材段;训练场地背景不能替代三类画面。
1-051-动画!B9:F9战场环境画面005 导入/原理缺项没有此独立环境素材段;训练场地背景不能替代三类画面。
1-061-动画!B10:F10救灾场景画面005 导入/原理缺项没有此独立环境素材段;训练场地背景不能替代三类画面。
1-071-动画!B11:F11故障后果设问005 导入/原理缺项未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。
1-081-动画!B12:F12原理图总览005 导入/原理缺项没有原理图及回路演示,文档明确要求提供液压原理图。
1-091-动画!B13:F13双泵独立供油005 导入/原理缺项没有原理图及回路演示,文档明确要求提供液压原理图。
1-101-动画!B14:F14章节字幕005 导入/原理缺项未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。
1-111-动画!B15:F15三问目录005 导入/原理缺项未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。
1-121-动画!B16:F16切换概念说明005 导入/原理缺项未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。
1-131-动画!B17:F17两个液压泵定位005 导入/原理缺项没有双泵定位讲解;新模型没有可按名称确认的独立后泵节点。
1-141-动画!B19:F19前泵供油回路005 导入/原理缺项没有原理图及回路演示,文档明确要求提供液压原理图。
1-151-动画!B20:F20后泵供油回路005 导入/原理缺项没有原理图及回路演示,文档明确要求提供液压原理图。
1-161-动画!B21:F21球阀关闭状态005 导入/原理缺项没有原理图及回路演示,文档明确要求提供液压原理图。
1-171-动画!B22:F22三通阀被关闭005 导入/原理缺项没有原理图及回路演示,文档明确要求提供液压原理图。
1-181-动画!B23:F23油路受阻005 导入/原理缺项没有原理图及回路演示,文档明确要求提供液压原理图。
1-191-动画!B24:F24油路改道(关键)005 导入/原理缺项没有原理图及回路演示,文档明确要求提供液压原理图。
1-201-动画!B25:F25任一机构均如此005 导入/原理缺项没有原理图及回路演示,文档明确要求提供液压原理图。
1-211-动画!B26:F26两阀同时关闭推论005 导入/原理缺项没有原理图及回路演示,文档明确要求提供液压原理图。
1-221-动画!B27:F27自救阀作用005 导入/原理缺项没有原理图及回路演示,文档明确要求提供液压原理图。
1-231-动画!B28:F28切换需开自救阀005 导入/原理缺项没有原理图及回路演示,文档明确要求提供液压原理图。
1-241-动画!B30:F30确定故障泵005 第1步部分对应能确认预设故障泵;没有双泵对照或根据不同故障现象选择故障泵的诊断分支。
1-251-动画!B31:F31断开取力器005 第2步动作对应断开取力器;实物开关外形仍受模型准确度限制。
1-261-动画!B32:F32打开球阀005 第3步动作对应球阀打开动作已有;文档要求垂直到平行,几何正确性应以实际管轴为准,不能仅用固定90°证明。
1-271-动画!B33:F33接通取力器005 第4步动作对应按相反方向重新接通取力器。
1-281-动画!B34:F34开盖拨互救开关005 第5步动作对应开盖后操作互救开关;新模型验证入口已修复准备保存后的盖子状态恢复。
1-291-动画!B35:F35单泵继续作业005 末尾缺项没有单泵继续驱动支腿、移动架、架设架或吊机的联动结果演示。
2-011-动画!B37:F37替代概念006 导入缺项现有任务从具体操作开始,没有独立的替代概念讲解段。
2-021-动画!B38:F38互救概念·双车006 导入部分对应新模型已经有双车场景,但缺独立的互救原理讲解和供动力过程演示。
2-031-动画!B39:F39确认取力器脱离006 第1步部分对应顺序对应;发动机运行仅点击着色,不是发动机运行状态或动力联动。
2-041-动画!B40:F40连接双车油管006 第2步部分对应双车和原形软管已接入;操作实际是移动两个接口盖并显示已成形软管,缺接头插接/锁紧过程。
2-051-动画!B41:F41开回油截止阀006 第3步动作对应使用保障车回油截止阀节点并旋转;位置准确性仍需按文档待确认项核定。
2-061-动画!B42:F42开互救作业开关006 第4步动作对应开盒盖、开互救开关已实现;与005是否同一开关仍是原稿待确认项。
2-071-动画!B43:F43打开两个球阀006 第5步动作对应现在是两个独立球阀,分别完成操作,不再只操作一个。
2-081-动画!B44:F44接通保障车取力器006 第6步部分对应保障车取力器开关仍为补充示意件;供油用软管颜色提示,未呈现真实液压泵和动力传递。
2-091-动画!B45:F45双车联动作业006 第7步部分对应仅移动示意手柄,未完成双车供油后的整机作业演示。
3-011-动画!B47:F47熄火·裁切牛皮纸007 第1步部分对应有停机着色和初裁纸片缩放;没有依结合面轮廓裁剪的工具动作。
3-021-动画!B48:F48关 1 号球阀007 第2步待确认有旋转关闭动作;当前将2_07球阀开关02和3-02球阀开关复用为1号球阀,文档要求确认编号对应。
3-031-动画!B49:F49拆油管接头007 第3步部分对应真实接头和封口袋已绑定;接头仅位移,没有大活动扳手旋松过程或工具规格约束。
3-041-动画!B50:F50拆 4 颗螺栓007 第4步部分对应已逐个拆4颗真实螺栓,原模型5颗的问题已处理;未展示开口扳手操作,螺栓半圈是示意行程。
3-051-动画!B51:F51取下前泵007 第5步动作对应使用新模型原位前泵执行取下;工程配合尺寸不由流程通关证明。
3-061-动画!B52:F52二次裁剪牛皮纸007 第6步部分对应切换精裁纸垫模型,没有实际沿安装轮廓裁剪过程。
3-071-动画!B53:F53贴牛皮纸007 第7步部分对应纸垫移动到推定结合面位置,未按文档要求取得法兰轮廓与尺寸核验。
3-081-动画!B54:F54装新泵007 第8步动作对应新泵归位并逐个安装4颗螺栓;未推定拧紧扭矩。
3-091-动画!B55:F55注入液压油007 第9步部分对应新泵注油口盖随泵移动并可打开;加油壶和油流为示意。后续没有关盖动作(文档也未列,属流程闭合建议)。
3-101-动画!B56:F56装回油管007 第10步部分对应取袋、接头归位顺序对应;“并拧紧”没有接头旋转或扳手动作。
3-111-动画!B57:F57起动试车007 第11步部分对应只启动着色并移动示意试验手柄;未接整机试车,也没有泄漏、压力等合格判据,文档明确需甲方补充。
4-011-动画!B59:F59清洗小腔阀008 第1步部分对应仅布块擦拭和阀体变色;没有油污到洁净贴图,也没有各管接头的清洗覆盖。
4-021-动画!B60:F60拆控制端接头008 第2步部分对应接头移开、袋子封口已有;缺19号开口扳手及旋松动作。
4-031-动画!B61:F61拆螺栓取下阀008 第3步部分对应4颗螺栓逐件旋转拆下并取阀;缺8号内六角工具动作与规格约束。
4-041-动画!B62:F62堵油口·擦阀座008 第4步部分对应2个真实油堵逐件封堵;擦阀座是点击变色的示意平面。
4-051-动画!B64:F64清洗大腔阀008 第5步部分对应同小腔:无油污贴图和接头清洗覆盖。
4-061-动画!B65:F65拆控制端接头008 第6步部分对应同小腔:有接头/封袋位移,缺19号扳手旋松。
4-071-动画!B66:F66拆螺栓取下阀008 第7步部分对应同小腔:4颗螺栓与阀体已有,缺8号内六角工具。
4-081-动画!B67:F67堵油口·擦阀座008 第8步部分对应2个真实油堵已有;阀座仍是补充接触平面示意。
4-091-动画!B69:F69擦拭·拆油堵头008 第9步部分对应取下2油堵已有;只对阀座着色,没有阀体和阀座两者的擦拭去污过程。
4-101-动画!B70:F70装阀·上 4 螺栓008 第10步部分对应小腔来源阀体换装到大腔安装面,按四螺栓安装面校准姿态;有4颗螺栓,无8号工具。文案未清楚区分阀体来源与安装位置。
4-111-动画!B71:F71接头旋紧008 第11步待确认当前执行取袋、接管,并要求填写依据交教员核对。与C列装配方向一致,但D列及第三表仍明确指出原稿反向拆卸矛盾;不能认作已澄清。
4-121-动画!B72:F72阀体螺栓旋紧008 第12步待确认当前复用第10步同一组4颗螺栓再次旋转;原稿未确认固定螺栓与阀体连接螺栓是否同一组。
4-131-动画!B74:F74擦拭·拆油堵头008 第13步部分对应同第9步:取油堵已有,缺阀体/阀座擦拭全流程。
4-141-动画!B75:F75装阀·上 4 螺栓008 第14步部分对应大腔来源阀体换装到小腔安装面,姿态已校准;工具和来源/目的地提示仍需完善。
4-151-动画!B76:F76接头旋紧008 第15步待确认同第11步:取袋接管并记录依据;原稿相反动作仍待确认。
4-161-动画!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 完整流程回归、原四任务初始场景回归均通过。前端构建与合同测试、后端单元测试和打包通过。当前验证仅覆盖教员预览,不代表新增学员成绩验收。

    场景制作

    005 场景制作

    训练编排

    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)=>`${alt}`; +const html=`桥梁流程 · 取景与操作控件验收 + +

    桥梁流程 · 取景与操作控件验收

    2026-09-15 · 正式 HTML + JavaScript 工作区

    +
    通过 ${summary.steps} 个步骤、${summary.actions} 个模型操作、${summary.validationRequests} 次服务端预览校验。
    本地及局域网通过;生产构建、正式路由契约和 16 项相关测试通过。
    +

    本轮六项调整

    ${requirements.map(([title,body])=>``).join('')}
    ${title}${body}
    +

    初始总览

    ${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]) => ``).join('')}
    需求实现及验证
    ${name}${detail}
    +

    各任务实际截图

    ${tasks.map(task => `
    TASK-VIRTUAL-${task.code} · ${task.title}

    ${task.steps} 步 / ${task.actions} 次模型操作 / ${task.validationRequests} 次预览校验

    ${task.title}初始聚焦
    查看各步完成截图与记录
    ${Array.from({length:task.steps},(_,i)=>`第 ${i+1} 步`).join('')}

    全屏截图 · 完整 JSON

    `).join('')}
    +

    局域网与小屏

    入口:127.0.0.1:6180192.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=>``).join('')}
    入口前置内容原操作发布内容版本
    ${esc(r.code)}背景 + ${r.lectures} 段讲解${r.steps} 步${r.contentVersionId}

    内容依据与范围

    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)}
    ${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 定义保留。现有成员、运行记录和成绩规则没有删除或重建。

    ${rows}
    任务名称步骤真实交互内容版本结果

    以管理员教员预览通过真实鼠标点击/拖拽、逐步服务端校验完成;预览不写入学员成绩。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=>``).join('')}
    任务聚焦前聚焦后自动隐藏
    ${titles[c.id]}${c.before}${c.after}${c.automaticHidden}
    +

    旋转视角后的实际画面

    ${Object.entries(titles).map(([id,title])=>``).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.name}
    ${f.code} · 内容版本 ${f.contentVersionId} · ${f.composition.step < 0 ? '开场整车视角' : `第 ${f.composition.step+1} 步动作后`}

    ${f.name}

    ${f.composition.subject}

    `).join('')}

    任务列表实际效果

    1920宽度任务列表
    `); + 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()}`).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'}));