Files
cnc_wams/qa/web-rtcp-5axis-site-test/output/toolpath-preview-cases.json

1157 lines
40 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"generatedAt": "2026-06-22T22:09:28.057Z",
"targetUrl": "http://127.0.0.1:45757/web-rtcp-5axis-sim-plan/app/index.html",
"projectPath": "/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/index.html",
"chromePath": "/usr/bin/google-chrome",
"screenshots": {
"01-home-toolpath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/toolpath-preview-cases/01-home-toolpath.png",
"02-operator-demo-toolpath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/toolpath-preview-cases/02-operator-demo-toolpath.png",
"03-arc-demo-toolpath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/toolpath-preview-cases/03-arc-demo-toolpath.png",
"04-clear-preview-reference": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/toolpath-preview-cases/04-clear-preview-reference.png",
"05-vendored-impeller-toolpath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/toolpath-preview-cases/05-vendored-impeller-toolpath.png",
"09-g20-g21-mixed-units-preview": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/toolpath-preview-cases/09-g20-g21-mixed-units-preview.png",
"06-running-rtcp-toolpath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/toolpath-preview-cases/06-running-rtcp-toolpath.png"
},
"cases": [
{
"name": "01-home-toolpath",
"summary": "默认首屏预览机床参考模型、TCP 球、刀轴线、fixture 路径和执行轨迹可见",
"status": "PASS",
"checks": [
{
"name": "canvas ready",
"pass": true,
"detail": "threeReady=true"
},
{
"name": "WebGL renderer",
"pass": true,
"detail": "renderer=webgl"
},
{
"name": "机床参考模型",
"pass": true,
"detail": "scope=machine-reference-and-toolpath, model=webgl-five-axis-reference"
},
{
"name": "TCP 球标记",
"pass": true,
"detail": "tcp=sphere, marker=true"
},
{
"name": "刀轴线",
"pass": true,
"detail": "toolAxisMarker=line"
},
{
"name": "场景对象数量",
"pass": true,
"detail": "sceneObjects=20"
},
{
"name": "无 G-code 语义生成",
"pass": true,
"detail": "semanticGuard=ok"
},
{
"name": "刀路预览点",
"pass": true,
"detail": "pathPoints=2"
},
{
"name": "执行轨迹点",
"pass": true,
"detail": "executed=1"
}
],
"pixelStats": {
"width": 803,
"height": 874,
"averageLuminance": 68.18,
"nonBlackRatio": 0.8681
},
"dataset": {
"fiveAxisCanvas": "true",
"engine": "three.js r183",
"threeReady": "true",
"threeRevision": "183",
"threePathPoints": "2",
"threeExecutedPathPoints": "1",
"threeSceneObjects": "20",
"threeToolhead": "{\"x\":0,\"y\":0,\"z\":0}",
"threeSceneUnits": "m",
"threeLinearUnits": "mm",
"threeLinearUnitScaleToMeters": "0.001",
"threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}",
"threeTcpPose": "{\"x\":0,\"y\":0,\"z\":0,\"a\":0,\"c\":0}",
"threeRtcpState": "on",
"threeSelectedView": "iso",
"threeFrameApi": "web-rtcp-5axis-motion-frame",
"threeRenderer": "webgl",
"threeSceneMode": "program-preview-and-tool-execution",
"threePreviewScope": "machine-reference-and-toolpath",
"threeMachineReferenceModel": "webgl-five-axis-reference",
"threeCameraControls": "orbit-pan-zoom",
"threeProgramPreviewSource": "linuxcnc-interpreter-wasm",
"threeToolExecutionMarker": "true",
"threeTcpMarker": "sphere",
"threeToolAxisMarker": "line",
"threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion",
"threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback",
"threePathFitBounds": "ok",
"threePathBoundsMeters": "{\"center\":{\"x\":0,\"y\":0,\"z\":0.002},\"size\":{\"x\":0,\"y\":0,\"z\":0.005},\"maxSpan\":0.005}",
"threeCurrentSegmentHighlight": "ok",
"threeRapidFeedVisualDistinction": "ok",
"threeNoGcodeSemanticsGeneration": "ok",
"threeRapidPathPoints": "2",
"threeFeedPathPoints": "0",
"threeArcPathPoints": "0",
"threeCurrentSegmentPoints": "2",
"threeCurrentSegmentType": "STRAIGHT_TRAVERSE"
},
"state": {
"activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc",
"activeLine": 1,
"programSource": "linuxcnc-vendored-5axis-gcode",
"programExecutionSourceMode": "linuxcnc-interpreter-wasm",
"programExecutionSummary": {
"ready": true,
"programLineCount": 1868,
"canonicalEventCount": 29,
"motionEventCount": 2,
"motionTypes": [
"STRAIGHT_TRAVERSE"
],
"finalAxes": {
"x": 0,
"y": 0,
"z": 5,
"a": 0,
"b": 0,
"c": 0,
"u": 0,
"v": 0,
"w": 0
},
"switchkinsEventCount": 2,
"switchkinsCodes": [
"M428",
"M429"
],
"switchkinsRemapBoundary": "linuxcnc_switchkins_remap_mcode_preserved_web_runtime_applied",
"remapRuntimeReady": false,
"plannerRuntimeReady": true,
"plannerSemanticBoundary": "linuxcnc_tp_queue_runtime_timing_from_canonical_motion",
"machineFileExecutionReady": false,
"fullLinuxCncProgramExecutionReady": false
},
"runState": "idle",
"rtcpState": "on",
"kinsType": "tcp-xyzac",
"programExecutionMotionIndex": 0,
"programExecutionSampleIndex": 0,
"programRuntimeFeedbackSource": "linuxcnc-task-motion-hal-wasm"
}
},
{
"name": "02-operator-demo-toolpath",
"summary": "本地矩形 G-code验证 LinuxCNC interpreter canonical motion、rapid/feed 区分、执行轨迹和 TCP 标记",
"status": "PASS",
"checks": [
{
"name": "canvas ready",
"pass": true,
"detail": "threeReady=true"
},
{
"name": "WebGL renderer",
"pass": true,
"detail": "renderer=webgl"
},
{
"name": "机床参考模型",
"pass": true,
"detail": "scope=machine-reference-and-toolpath, model=webgl-five-axis-reference"
},
{
"name": "TCP 球标记",
"pass": true,
"detail": "tcp=sphere, marker=true"
},
{
"name": "刀轴线",
"pass": true,
"detail": "toolAxisMarker=line"
},
{
"name": "场景对象数量",
"pass": true,
"detail": "sceneObjects=20"
},
{
"name": "无 G-code 语义生成",
"pass": true,
"detail": "semanticGuard=ok"
},
{
"name": "刀路预览点",
"pass": true,
"detail": "pathPoints=6"
},
{
"name": "执行轨迹点",
"pass": true,
"detail": "executed=1"
},
{
"name": "rapid/feed 区分",
"pass": true,
"detail": "rapid=2, feed=4"
}
],
"pixelStats": {
"width": 803,
"height": 874,
"averageLuminance": 66.03,
"nonBlackRatio": 0.854
},
"dataset": {
"fiveAxisCanvas": "true",
"engine": "three.js r183",
"threeReady": "true",
"threeRevision": "183",
"threePathPoints": "6",
"threeExecutedPathPoints": "1",
"threeSceneObjects": "20",
"threeToolhead": "{\"x\":0,\"y\":0,\"z\":0}",
"threeSceneUnits": "m",
"threeLinearUnits": "mm",
"threeLinearUnitScaleToMeters": "0.001",
"threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}",
"threeTcpPose": "{\"x\":0,\"y\":0,\"z\":0,\"a\":0,\"c\":0}",
"threeRtcpState": "on",
"threeSelectedView": "iso",
"threeFrameApi": "web-rtcp-5axis-motion-frame",
"threeRenderer": "webgl",
"threeSceneMode": "program-preview-and-tool-execution",
"threePreviewScope": "machine-reference-and-toolpath",
"threeMachineReferenceModel": "webgl-five-axis-reference",
"threeCameraControls": "orbit-pan-zoom",
"threeProgramPreviewSource": "linuxcnc-interpreter-wasm",
"threeToolExecutionMarker": "true",
"threeTcpMarker": "sphere",
"threeToolAxisMarker": "line",
"threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion",
"threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback",
"threePathFitBounds": "ok",
"threePathBoundsMeters": "{\"center\":{\"x\":0.005,\"y\":0.005,\"z\":0.002},\"size\":{\"x\":0.01,\"y\":0.01,\"z\":0.005},\"maxSpan\":0.01}",
"threeCurrentSegmentHighlight": "ok",
"threeRapidFeedVisualDistinction": "ok",
"threeNoGcodeSemanticsGeneration": "ok",
"threeRapidPathPoints": "2",
"threeFeedPathPoints": "4",
"threeArcPathPoints": "0",
"threeCurrentSegmentPoints": "2",
"threeCurrentSegmentType": "STRAIGHT_FEED"
},
"state": {
"activeProgram": "operator-demo.ngc",
"activeLine": 2,
"programSource": "operator-file",
"programExecutionSourceMode": "linuxcnc-interpreter-wasm",
"programExecutionSummary": {
"ready": true,
"programLineCount": 9,
"canonicalEventCount": 37,
"motionEventCount": 6,
"motionTypes": [
"STRAIGHT_TRAVERSE",
"STRAIGHT_FEED"
],
"finalAxes": {
"x": 0,
"y": 0,
"z": 5,
"a": 0,
"b": 0,
"c": 0,
"u": 0,
"v": 0,
"w": 0
},
"switchkinsEventCount": 0,
"switchkinsCodes": [],
"switchkinsRemapBoundary": null,
"remapRuntimeReady": false,
"plannerRuntimeReady": true,
"plannerSemanticBoundary": "linuxcnc_tp_queue_runtime_timing_from_canonical_motion",
"machineFileExecutionReady": false,
"fullLinuxCncProgramExecutionReady": false
},
"runState": "idle",
"rtcpState": "on",
"kinsType": "tcp-xyzac",
"programExecutionMotionIndex": 0,
"programExecutionSampleIndex": 0,
"programRuntimeFeedbackSource": "linuxcnc-tp-runtime-sample"
}
},
{
"name": "03-arc-demo-toolpath",
"summary": "圆弧 G-code验证 ARC_FEED 进入弧线轨迹图层并保留执行轨迹",
"status": "PASS",
"checks": [
{
"name": "canvas ready",
"pass": true,
"detail": "threeReady=true"
},
{
"name": "WebGL renderer",
"pass": true,
"detail": "renderer=webgl"
},
{
"name": "机床参考模型",
"pass": true,
"detail": "scope=machine-reference-and-toolpath, model=webgl-five-axis-reference"
},
{
"name": "TCP 球标记",
"pass": true,
"detail": "tcp=sphere, marker=true"
},
{
"name": "刀轴线",
"pass": true,
"detail": "toolAxisMarker=line"
},
{
"name": "场景对象数量",
"pass": true,
"detail": "sceneObjects=20"
},
{
"name": "无 G-code 语义生成",
"pass": true,
"detail": "semanticGuard=ok"
},
{
"name": "刀路预览点",
"pass": true,
"detail": "pathPoints=2"
},
{
"name": "执行轨迹点",
"pass": true,
"detail": "executed=1"
},
{
"name": "圆弧轨迹点",
"pass": true,
"detail": "arc=1"
}
],
"pixelStats": {
"width": 803,
"height": 874,
"averageLuminance": 67.56,
"nonBlackRatio": 0.8687
},
"dataset": {
"fiveAxisCanvas": "true",
"engine": "three.js r183",
"threeReady": "true",
"threeRevision": "183",
"threePathPoints": "2",
"threeExecutedPathPoints": "1",
"threeSceneObjects": "20",
"threeToolhead": "{\"x\":0,\"y\":0,\"z\":0}",
"threeSceneUnits": "m",
"threeLinearUnits": "mm",
"threeLinearUnitScaleToMeters": "0.001",
"threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}",
"threeTcpPose": "{\"x\":1,\"y\":0,\"z\":0,\"a\":0,\"c\":0}",
"threeRtcpState": "on",
"threeSelectedView": "iso",
"threeFrameApi": "web-rtcp-5axis-motion-frame",
"threeRenderer": "webgl",
"threeSceneMode": "program-preview-and-tool-execution",
"threePreviewScope": "machine-reference-and-toolpath",
"threeMachineReferenceModel": "webgl-five-axis-reference",
"threeCameraControls": "orbit-pan-zoom",
"threeProgramPreviewSource": "linuxcnc-interpreter-wasm",
"threeToolExecutionMarker": "true",
"threeTcpMarker": "sphere",
"threeToolAxisMarker": "line",
"threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion",
"threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback",
"threePathFitBounds": "ok",
"threePathBoundsMeters": "{\"center\":{\"x\":0.001,\"y\":0.001,\"z\":0},\"size\":{\"x\":0.001,\"y\":0.001,\"z\":0},\"maxSpan\":0.001}",
"threeCurrentSegmentHighlight": "ok",
"threeRapidFeedVisualDistinction": "ok",
"threeNoGcodeSemanticsGeneration": "ok",
"threeRapidPathPoints": "1",
"threeFeedPathPoints": "0",
"threeArcPathPoints": "1",
"threeCurrentSegmentPoints": "1",
"threeCurrentSegmentType": "STRAIGHT_TRAVERSE"
},
"state": {
"activeProgram": "operator-arc-demo.ngc",
"activeLine": 2,
"programSource": "operator-file",
"programExecutionSourceMode": "linuxcnc-interpreter-wasm",
"programExecutionSummary": {
"ready": true,
"programLineCount": 4,
"canonicalEventCount": 19,
"motionEventCount": 2,
"motionTypes": [
"STRAIGHT_TRAVERSE",
"ARC_FEED"
],
"finalAxes": {
"x": 0,
"y": 1,
"z": 0,
"a": 0,
"b": 0,
"c": 0,
"u": 0,
"v": 0,
"w": 0,
"arc": {
"plane": 170,
"firstAxis": "x",
"secondAxis": "y",
"thirdAxis": "z",
"firstEnd": 0,
"secondEnd": 1,
"centerFirst": 0,
"centerSecond": 0,
"rotation": -1,
"axisEndPoint": 0
}
},
"switchkinsEventCount": 0,
"switchkinsCodes": [],
"switchkinsRemapBoundary": null,
"remapRuntimeReady": false,
"plannerRuntimeReady": true,
"plannerSemanticBoundary": "linuxcnc_tp_queue_runtime_timing_from_canonical_motion",
"machineFileExecutionReady": false,
"fullLinuxCncProgramExecutionReady": false
},
"runState": "idle",
"rtcpState": "on",
"kinsType": "tcp-xyzac",
"programExecutionMotionIndex": 0,
"programExecutionSampleIndex": 0,
"programRuntimeFeedbackSource": "linuxcnc-tp-runtime-sample"
}
},
{
"name": "04-clear-preview-reference",
"summary": "清空刀路后:路径点为 0但机床参考模型、TCP 球和刀轴线仍应可见",
"status": "PASS",
"checks": [
{
"name": "canvas ready",
"pass": true,
"detail": "threeReady=true"
},
{
"name": "WebGL renderer",
"pass": true,
"detail": "renderer=webgl"
},
{
"name": "机床参考模型",
"pass": true,
"detail": "scope=machine-reference-and-toolpath, model=webgl-five-axis-reference"
},
{
"name": "TCP 球标记",
"pass": true,
"detail": "tcp=sphere, marker=true"
},
{
"name": "刀轴线",
"pass": true,
"detail": "toolAxisMarker=line"
},
{
"name": "场景对象数量",
"pass": true,
"detail": "sceneObjects=20"
},
{
"name": "无 G-code 语义生成",
"pass": true,
"detail": "semanticGuard=ok"
},
{
"name": "路径点期望",
"pass": true,
"detail": "pathPoints=0, expected=0"
}
],
"pixelStats": {
"width": 803,
"height": 874,
"averageLuminance": 67.78,
"nonBlackRatio": 0.8701
},
"dataset": {
"fiveAxisCanvas": "true",
"engine": "three.js r183",
"threeReady": "true",
"threeRevision": "183",
"threePathPoints": "0",
"threeExecutedPathPoints": "0",
"threeSceneObjects": "20",
"threeToolhead": "{\"x\":0,\"y\":0,\"z\":0}",
"threeSceneUnits": "m",
"threeLinearUnits": "mm",
"threeLinearUnitScaleToMeters": "0.001",
"threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}",
"threeTcpPose": "{\"x\":1,\"y\":0,\"z\":0,\"a\":0,\"c\":0}",
"threeRtcpState": "on",
"threeSelectedView": "iso",
"threeFrameApi": "web-rtcp-5axis-motion-frame",
"threeRenderer": "webgl",
"threeSceneMode": "program-preview-and-tool-execution",
"threePreviewScope": "machine-reference-and-toolpath",
"threeMachineReferenceModel": "webgl-five-axis-reference",
"threeCameraControls": "orbit-pan-zoom",
"threeProgramPreviewSource": "linuxcnc-interpreter-wasm",
"threeToolExecutionMarker": "true",
"threeTcpMarker": "sphere",
"threeToolAxisMarker": "line",
"threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion",
"threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback",
"threePathFitBounds": "ok",
"threePathBoundsMeters": "null",
"threeCurrentSegmentHighlight": "pending",
"threeRapidFeedVisualDistinction": "pending",
"threeNoGcodeSemanticsGeneration": "ok",
"threeRapidPathPoints": "0",
"threeFeedPathPoints": "0",
"threeArcPathPoints": "0",
"threeCurrentSegmentPoints": "0",
"threeCurrentSegmentType": "STRAIGHT_TRAVERSE"
},
"state": {
"activeProgram": "operator-arc-demo.ngc",
"activeLine": 2,
"programSource": "operator-file",
"programExecutionSourceMode": "linuxcnc-interpreter-wasm",
"programExecutionSummary": {
"ready": true,
"programLineCount": 4,
"canonicalEventCount": 19,
"motionEventCount": 2,
"motionTypes": [
"STRAIGHT_TRAVERSE",
"ARC_FEED"
],
"finalAxes": {
"x": 0,
"y": 1,
"z": 0,
"a": 0,
"b": 0,
"c": 0,
"u": 0,
"v": 0,
"w": 0,
"arc": {
"plane": 170,
"firstAxis": "x",
"secondAxis": "y",
"thirdAxis": "z",
"firstEnd": 0,
"secondEnd": 1,
"centerFirst": 0,
"centerSecond": 0,
"rotation": -1,
"axisEndPoint": 0
}
},
"switchkinsEventCount": 0,
"switchkinsCodes": [],
"switchkinsRemapBoundary": null,
"remapRuntimeReady": false,
"plannerRuntimeReady": true,
"plannerSemanticBoundary": "linuxcnc_tp_queue_runtime_timing_from_canonical_motion",
"machineFileExecutionReady": false,
"fullLinuxCncProgramExecutionReady": false
},
"runState": "idle",
"rtcpState": "on",
"kinsType": "tcp-xyzac",
"programExecutionMotionIndex": 0,
"programExecutionSampleIndex": 0,
"programRuntimeFeedbackSource": "linuxcnc-tp-runtime-sample"
}
},
{
"name": "05-vendored-impeller-toolpath",
"summary": "LinuxCNC vendored 五轴 impeller 程序验证长路径、switchkins/RTCP 状态、rapid/feed 图层和 TCP 执行轨迹",
"status": "PASS",
"checks": [
{
"name": "canvas ready",
"pass": true,
"detail": "threeReady=true"
},
{
"name": "WebGL renderer",
"pass": true,
"detail": "renderer=webgl"
},
{
"name": "机床参考模型",
"pass": true,
"detail": "scope=machine-reference-and-toolpath, model=webgl-five-axis-reference"
},
{
"name": "TCP 球标记",
"pass": true,
"detail": "tcp=sphere, marker=true"
},
{
"name": "刀轴线",
"pass": true,
"detail": "toolAxisMarker=line"
},
{
"name": "场景对象数量",
"pass": true,
"detail": "sceneObjects=20"
},
{
"name": "无 G-code 语义生成",
"pass": true,
"detail": "semanticGuard=ok"
},
{
"name": "刀路预览点",
"pass": true,
"detail": "pathPoints=1498"
},
{
"name": "执行轨迹点",
"pass": true,
"detail": "executed=1"
},
{
"name": "rapid/feed 区分",
"pass": true,
"detail": "rapid=186, feed=1436"
},
{
"name": "RTCP 状态",
"pass": true,
"detail": "rtcp=on"
}
],
"pixelStats": {
"width": 803,
"height": 874,
"averageLuminance": 65.18,
"nonBlackRatio": 0.8173
},
"dataset": {
"fiveAxisCanvas": "true",
"engine": "three.js r183",
"threeReady": "true",
"threeRevision": "183",
"threePathPoints": "1498",
"threeExecutedPathPoints": "1",
"threeSceneObjects": "20",
"threeToolhead": "{\"x\":0,\"y\":0,\"z\":0}",
"threeSceneUnits": "m",
"threeLinearUnits": "mm",
"threeLinearUnitScaleToMeters": "0.001",
"threeToolAxis": "{\"x\":0.558,\"y\":0.769,\"z\":0.312}",
"threeTcpPose": "{\"x\":36.474,\"y\":-22.486,\"z\":-13.749,\"a\":-71.841,\"c\":-35.93}",
"threeRtcpState": "on",
"threeSelectedView": "iso",
"threeFrameApi": "web-rtcp-5axis-motion-frame",
"threeRenderer": "webgl",
"threeSceneMode": "program-preview-and-tool-execution",
"threePreviewScope": "machine-reference-and-toolpath",
"threeMachineReferenceModel": "webgl-five-axis-reference",
"threeCameraControls": "orbit-pan-zoom",
"threeProgramPreviewSource": "linuxcnc-interpreter-wasm",
"threeToolExecutionMarker": "true",
"threeTcpMarker": "sphere",
"threeToolAxisMarker": "line",
"threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion",
"threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback",
"threePathFitBounds": "ok",
"threePathBoundsMeters": "{\"center\":{\"x\":-0.001,\"y\":0,\"z\":0.019},\"size\":{\"x\":0.088,\"y\":0.089,\"z\":0.043},\"maxSpan\":0.089211}",
"threeCurrentSegmentHighlight": "ok",
"threeRapidFeedVisualDistinction": "ok",
"threeNoGcodeSemanticsGeneration": "ok",
"threeRapidPathPoints": "186",
"threeFeedPathPoints": "1436",
"threeArcPathPoints": "0",
"threeCurrentSegmentPoints": "1",
"threeCurrentSegmentType": "STRAIGHT_TRAVERSE"
},
"state": {
"activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc",
"activeLine": 8,
"programSource": "linuxcnc-vendored-5axis-gcode",
"programExecutionSourceMode": "linuxcnc-interpreter-wasm",
"programExecutionSummary": {
"ready": true,
"programLineCount": 4507,
"canonicalEventCount": 22313,
"motionEventCount": 4492,
"motionTypes": [
"STRAIGHT_TRAVERSE",
"STRAIGHT_FEED"
],
"finalAxes": {
"x": 0,
"y": 0,
"z": 40,
"a": 0,
"b": 0,
"c": 0,
"u": 0,
"v": 0,
"w": 0
},
"switchkinsEventCount": 2,
"switchkinsCodes": [
"M428",
"M429"
],
"switchkinsRemapBoundary": "linuxcnc_switchkins_remap_mcode_preserved_web_runtime_applied",
"remapRuntimeReady": false,
"plannerRuntimeReady": true,
"plannerSemanticBoundary": "linuxcnc_tp_queue_runtime_timing_from_canonical_motion",
"machineFileExecutionReady": false,
"fullLinuxCncProgramExecutionReady": false
},
"runState": "idle",
"rtcpState": "on",
"kinsType": "tcp-xyzac",
"programExecutionMotionIndex": 0,
"programExecutionSampleIndex": 0,
"programRuntimeFeedbackSource": "linuxcnc-tp-runtime-sample"
}
},
{
"name": "08-meter-scene-desktop-mobile",
"summary": "浏览器米尺度 Three.js 证据desktop/mobile canvas 非空、路径 bounds 为米、预览稳定居中",
"status": "PASS",
"screenshotDir": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/meter-scene-evidence",
"output": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/meter-scene-evidence.json",
"sampleCount": 2
},
{
"name": "09-g20-g21-mixed-units-preview",
"summary": "G20/G21 混合单位程序:验证 canonical motion 保留 inch/mmThree.js 统一按米绘制",
"status": "PASS",
"checks": [
{
"name": "canvas ready",
"pass": true,
"detail": "threeReady=true"
},
{
"name": "WebGL renderer",
"pass": true,
"detail": "renderer=webgl"
},
{
"name": "机床参考模型",
"pass": true,
"detail": "scope=machine-reference-and-toolpath, model=webgl-five-axis-reference"
},
{
"name": "TCP 球标记",
"pass": true,
"detail": "tcp=sphere, marker=true"
},
{
"name": "刀轴线",
"pass": true,
"detail": "toolAxisMarker=line"
},
{
"name": "场景对象数量",
"pass": true,
"detail": "sceneObjects=20"
},
{
"name": "无 G-code 语义生成",
"pass": true,
"detail": "semanticGuard=ok"
},
{
"name": "刀路预览点",
"pass": true,
"detail": "pathPoints=2"
},
{
"name": "执行轨迹点",
"pass": true,
"detail": "executed=1"
},
{
"name": "G20/G21 motion units",
"pass": true,
"detail": "units=inch,mm"
},
{
"name": "scene units are meters",
"pass": true,
"detail": "sceneUnits=m"
},
{
"name": "mixed unit path visible",
"pass": true,
"detail": "pathPoints=2"
},
{
"name": "1 inch equals 25.4 mm in scene",
"pass": true,
"detail": "xMeters=0.0254,0.0254"
},
{
"name": "no unit fallback in canonical motion",
"pass": true,
"detail": "source=linuxcnc-interpreter-wasm"
}
],
"pixelStats": {
"width": 803,
"height": 874,
"averageLuminance": 64.71,
"nonBlackRatio": 0.849
},
"dataset": {
"fiveAxisCanvas": "true",
"engine": "three.js r183",
"threeReady": "true",
"threeRevision": "183",
"threePathPoints": "2",
"threeExecutedPathPoints": "1",
"threeSceneObjects": "20",
"threeToolhead": "{\"x\":0,\"y\":0,\"z\":0}",
"threeSceneUnits": "m",
"threeLinearUnits": "mm",
"threeLinearUnitScaleToMeters": "0.001",
"threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}",
"threeTcpPose": "{\"x\":43,\"y\":-32.15,\"z\":-11.306,\"a\":0,\"c\":0}",
"threeRtcpState": "on",
"threeSelectedView": "iso",
"threeFrameApi": "web-rtcp-5axis-motion-frame",
"threeRenderer": "webgl",
"threeSceneMode": "program-preview-and-tool-execution",
"threePreviewScope": "machine-reference-and-toolpath",
"threeMachineReferenceModel": "webgl-five-axis-reference",
"threeCameraControls": "orbit-pan-zoom",
"threeProgramPreviewSource": "linuxcnc-interpreter-wasm",
"threeToolExecutionMarker": "true",
"threeTcpMarker": "sphere",
"threeToolAxisMarker": "line",
"threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion",
"threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback",
"threePathFitBounds": "ok",
"threePathBoundsMeters": "{\"center\":{\"x\":0.013,\"y\":0.013,\"z\":0},\"size\":{\"x\":0.025,\"y\":0.025,\"z\":0},\"maxSpan\":0.0254}",
"threeCurrentSegmentHighlight": "ok",
"threeRapidFeedVisualDistinction": "ok",
"threeNoGcodeSemanticsGeneration": "ok",
"threeRapidPathPoints": "0",
"threeFeedPathPoints": "2",
"threeArcPathPoints": "0",
"threeCurrentSegmentPoints": "1",
"threeCurrentSegmentType": "STRAIGHT_FEED"
},
"state": {
"activeProgram": "operator-g20-g21-mixed-units.ngc",
"activeLine": 2,
"programSource": "operator-file",
"programExecutionSourceMode": "linuxcnc-interpreter-wasm",
"programExecutionSummary": {
"ready": true,
"programLineCount": 5,
"canonicalEventCount": 22,
"motionEventCount": 2,
"motionTypes": [
"STRAIGHT_FEED"
],
"finalAxes": {
"x": 25.4,
"y": 25.4,
"z": 0,
"a": 0,
"b": 0,
"c": 0,
"u": 0,
"v": 0,
"w": 0
},
"switchkinsEventCount": 0,
"switchkinsCodes": [],
"switchkinsRemapBoundary": null,
"remapRuntimeReady": false,
"plannerRuntimeReady": true,
"plannerSemanticBoundary": "linuxcnc_tp_queue_runtime_timing_from_canonical_motion",
"machineFileExecutionReady": false,
"fullLinuxCncProgramExecutionReady": false
},
"runState": "idle",
"rtcpState": "on",
"kinsType": "tcp-xyzac",
"programExecutionMotionIndex": 0,
"programExecutionSampleIndex": 0,
"programRuntimeFeedbackSource": "linuxcnc-tp-runtime-sample"
}
},
{
"name": "06-running-rtcp-toolpath",
"summary": "G-code 运行态:验证 task/HAL runtime feedback 驱动执行轨迹、当前段高亮、TCP 球和刀轴线跟随",
"status": "PASS",
"checks": [
{
"name": "canvas ready",
"pass": true,
"detail": "threeReady=true"
},
{
"name": "WebGL renderer",
"pass": true,
"detail": "renderer=webgl"
},
{
"name": "机床参考模型",
"pass": true,
"detail": "scope=machine-reference-and-toolpath, model=webgl-five-axis-reference"
},
{
"name": "TCP 球标记",
"pass": true,
"detail": "tcp=sphere, marker=true"
},
{
"name": "刀轴线",
"pass": true,
"detail": "toolAxisMarker=line"
},
{
"name": "场景对象数量",
"pass": true,
"detail": "sceneObjects=20"
},
{
"name": "无 G-code 语义生成",
"pass": true,
"detail": "semanticGuard=ok"
},
{
"name": "刀路预览点",
"pass": true,
"detail": "pathPoints=1498"
},
{
"name": "执行轨迹点",
"pass": true,
"detail": "executed=1"
},
{
"name": "rapid/feed 区分",
"pass": true,
"detail": "rapid=186, feed=1436"
},
{
"name": "RTCP 状态",
"pass": true,
"detail": "rtcp=on"
}
],
"pixelStats": {
"width": 803,
"height": 874,
"averageLuminance": 65.86,
"nonBlackRatio": 0.8173
},
"dataset": {
"fiveAxisCanvas": "true",
"engine": "three.js r183",
"threeReady": "true",
"threeRevision": "183",
"threePathPoints": "1498",
"threeExecutedPathPoints": "1",
"threeSceneObjects": "20",
"threeToolhead": "{\"x\":-0.023,\"y\":-0.033,\"z\":0.001}",
"threeSceneUnits": "m",
"threeLinearUnits": "mm",
"threeLinearUnitScaleToMeters": "0.001",
"threeToolAxis": "{\"x\":0.621,\"y\":0.503,\"z\":0.601}",
"threeTcpPose": "{\"x\":-75.066,\"y\":-75.473,\"z\":-49.344,\"a\":-53.043,\"c\":-50.969}",
"threeRtcpState": "on",
"threeSelectedView": "iso",
"threeFrameApi": "web-rtcp-5axis-motion-frame",
"threeRenderer": "webgl",
"threeSceneMode": "program-preview-and-tool-execution",
"threePreviewScope": "machine-reference-and-toolpath",
"threeMachineReferenceModel": "webgl-five-axis-reference",
"threeCameraControls": "orbit-pan-zoom",
"threeProgramPreviewSource": "linuxcnc-interpreter-wasm",
"threeToolExecutionMarker": "true",
"threeTcpMarker": "sphere",
"threeToolAxisMarker": "line",
"threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion",
"threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback",
"threePathFitBounds": "ok",
"threePathBoundsMeters": "{\"center\":{\"x\":-0.001,\"y\":0,\"z\":0.019},\"size\":{\"x\":0.088,\"y\":0.089,\"z\":0.043},\"maxSpan\":0.089211}",
"threeCurrentSegmentHighlight": "ok",
"threeRapidFeedVisualDistinction": "ok",
"threeNoGcodeSemanticsGeneration": "ok",
"threeRapidPathPoints": "186",
"threeFeedPathPoints": "1436",
"threeArcPathPoints": "0",
"threeCurrentSegmentPoints": "1",
"threeCurrentSegmentType": "STRAIGHT_TRAVERSE"
},
"state": {
"activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc",
"activeLine": 65,
"programSource": "linuxcnc-vendored-5axis-gcode",
"programExecutionSourceMode": "linuxcnc-interpreter-wasm",
"programExecutionSummary": {
"ready": true,
"programLineCount": 4507,
"canonicalEventCount": 22313,
"motionEventCount": 4492,
"motionTypes": [
"STRAIGHT_TRAVERSE",
"STRAIGHT_FEED"
],
"finalAxes": {
"x": 0,
"y": 0,
"z": 40,
"a": 0,
"b": 0,
"c": 0,
"u": 0,
"v": 0,
"w": 0
},
"switchkinsEventCount": 2,
"switchkinsCodes": [
"M428",
"M429"
],
"switchkinsRemapBoundary": "linuxcnc_switchkins_remap_mcode_preserved_web_runtime_applied",
"remapRuntimeReady": false,
"plannerRuntimeReady": true,
"plannerSemanticBoundary": "linuxcnc_tp_queue_runtime_timing_from_canonical_motion",
"machineFileExecutionReady": false,
"fullLinuxCncProgramExecutionReady": false
},
"runState": "running",
"rtcpState": "on",
"kinsType": "tcp-xyzac",
"programExecutionMotionIndex": 0,
"programExecutionSampleIndex": 0,
"programRuntimeFeedbackSource": "linuxcnc-task-motion-hal-wasm"
}
},
{
"name": "07-run-preconditions-and-feedback",
"summary": "浏览器 RUN 证据INI/profile/kinematics/task-HAL 同一上下文taskHalStatusLoop 持续推进UI 消费 task/HAL/motion feedback",
"status": "PASS",
"checks": [
{
"name": "INI ready",
"pass": true,
"detail": "iniReady=true,true,true,true,true"
},
{
"name": "selected LinuxCNC G-code",
"pass": true,
"detail": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins_test_1.ngc"
},
{
"name": "task/HAL session opened selected G-code",
"pass": true,
"detail": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt/demos/xyzac_switchkins_test_1.ngc"
},
{
"name": "taskHalStatusLoop 新 RUN sequence",
"pass": true,
"detail": "baselineSequence=1, sequences=2,2,2,2,2"
},
{
"name": "taskHalStatusLoop 本次 RUN tickCount",
"pass": true,
"detail": "ticks=4,4,4,4,4"
},
{
"name": "programRuntimeFeedbackHistory 本次 RUN 采样",
"pass": true,
"detail": "history=5,5,5,5,5"
},
{
"name": "feedback sourceMode 来自 task/HAL",
"pass": true,
"detail": "sourceModes=linuxcnc-task-motion-hal-wasm,linuxcnc-task-motion-hal-wasm,linuxcnc-task-motion-hal-wasm,linuxcnc-task-motion-hal-wasm,linuxcnc-task-motion-hal-wasm"
},
{
"name": "无 fixture-line-playback feedback",
"pass": true,
"detail": "sourceModes=linuxcnc-task-motion-hal-wasm,linuxcnc-task-motion-hal-wasm,linuxcnc-task-motion-hal-wasm,linuxcnc-task-motion-hal-wasm,linuxcnc-task-motion-hal-wasm"
},
{
"name": "semantic boundary",
"pass": true,
"detail": "linuxcnc_task_motion_hal_wasm_simulation_runtime,linuxcnc_task_motion_hal_wasm_simulation_runtime,linuxcnc_task_motion_hal_wasm_simulation_runtime,linuxcnc_task_motion_hal_wasm_simulation_runtime,linuxcnc_task_motion_hal_wasm_simulation_runtime"
},
{
"name": "activeLine 等于 UI 高亮行",
"pass": true,
"detail": "active=29/29,29/29,29/29,29/29,29/29"
},
{
"name": "DRO 等于 runtime feedback axisPose",
"pass": true,
"detail": "droMatchesFeedback=true for all samples"
},
{
"name": "RTCP canvas 与 state 一致",
"pass": true,
"detail": "off/off,off/off,off/off,off/off,off/off"
},
{
"name": "runtime cycle 可见",
"pass": true,
"detail": "33/330,33/330,33/330,33/330,33/330"
},
{
"name": "canvas 执行轨迹",
"pass": true,
"detail": "true/1/ok,true/1/ok,true/1/ok,true/1/ok,true/1/ok"
}
],
"screenshotDir": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/run-preconditions-feedback",
"output": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/run-preconditions-feedback.json",
"sampleCount": 5
}
],
"consoleErrors": [
"Failed to load resource: the server responded with a status of 404 (Not Found)",
"Failed to load resource: the server responded with a status of 404 (Not Found)"
]
}