diff --git a/coverage/glb-machine-manager/document/browser.report.json b/coverage/glb-machine-manager/document/browser.report.json new file mode 100644 index 0000000..20bdb2b --- /dev/null +++ b/coverage/glb-machine-manager/document/browser.report.json @@ -0,0 +1,15 @@ +{ + "report_id": "GLB-MGR-E17", + "status": "verified", + "url": "http://127.0.0.1:5180/", + "checks": [ + "named GLB downloads and atomic browser-library copy with time/size/checksum; editor display changes mark document dirty", + "reload and local-library open restore eight source files, exact edited hierarchy, axis/sign, visibility, origins and calibration; second save has identical metadata", + "explicit open-file entry restores document; library redownload is byte identical; delete affects only chosen saved copy", + "inconsistent editor metadata is rejected atomically without replacing the current draft", + "saved GLB loads through control-panel importer and can be sent back into editor with eight original parts", + "legacy GLB remains editable via single-assembly fallback", + "local storage failure does not prevent GLB download and is visibly reported" + ], + "errors": [] +} diff --git a/coverage/glb-machine-manager/document/controls.report.json b/coverage/glb-machine-manager/document/controls.report.json new file mode 100644 index 0000000..5ba0ad5 --- /dev/null +++ b/coverage/glb-machine-manager/document/controls.report.json @@ -0,0 +1 @@ +{"schema":"axis-control-inventory.v1","status":"verified","documented_controls":146,"duplicate_command_entries_removed":["machine_menu","view_menu","program_pane_load","tool_probe_commands"],"contract":"linuxcnc-axis-web-control-panel-source-logic.md"} diff --git a/coverage/glb-machine-manager/document/eight-parts.report.json b/coverage/glb-machine-manager/document/eight-parts.report.json new file mode 100644 index 0000000..943c190 --- /dev/null +++ b/coverage/glb-machine-manager/document/eight-parts.report.json @@ -0,0 +1,21 @@ +{ + "schema": "machine-manager-browser.v1", + "report_id": "GLB-MGR-E02", + "mode": "production-preview", + "status": "verified", + "checks": [ + "eight GLB parts rendered with studio PMREM lighting", + "eight-part roots have unique single DOFs; fixed base cannot move; numeric input drives only bound X", + "validated assembly exports a self-contained managed GLB", + "validated hierarchy applied through LOAD_WORKSPACE with geometry and physical zero in userData", + "same component assembly switches to BC hierarchy and applies BC geometry", + "BC five-axis program drives managed model from authoritative WASM joints", + "production bundle exercised through AC/BC UI apply and WASM program motion" + ], + "browser_errors": [], + "final": { + "program": "running", + "machine": "ON", + "path": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc" + } +} diff --git a/coverage/glb-machine-manager/document/files-and-recovery.png b/coverage/glb-machine-manager/document/files-and-recovery.png new file mode 100644 index 0000000..cc867b5 Binary files /dev/null and b/coverage/glb-machine-manager/document/files-and-recovery.png differ diff --git a/coverage/glb-machine-manager/document/history.report.json b/coverage/glb-machine-manager/document/history.report.json new file mode 100644 index 0000000..4c46479 --- /dev/null +++ b/coverage/glb-machine-manager/document/history.report.json @@ -0,0 +1 @@ +{"report_id":"GLB-MGR-E14-HISTORY","status":"verified","checks":["undo/redo","duplicate edits ignored","new edit discards redo","30-entry bound","clear preserves draft","machine type change preserves general axes and clears incompatible tilt","undo restores type and bindings"]} diff --git a/coverage/glb-machine-manager/document/mill700/browser.report.json b/coverage/glb-machine-manager/document/mill700/browser.report.json new file mode 100644 index 0000000..10862a2 --- /dev/null +++ b/coverage/glb-machine-manager/document/mill700/browser.report.json @@ -0,0 +1,1958 @@ +{ + "report_id": "GLB-MGR-E13", + "status": "verified", + "url": "http://127.0.0.1:5180/", + "machines": [ + { + "coordinates": "XYZAC", + "checks": [ + "fixed or single DOF", + "direction/sign and parent isolation", + "pivot and child inheritance", + "duplicate axis rejected", + "JSON on scene and real bed", + "GLB roundtrip restores calibration and bindings", + "single-file apply", + "WASM runtime axis mapping", + "live dialog follows actual joints" + ], + "nodeCount": 134, + "samples": [ + { + "tick": 85, + "q": [ + 1.2389134479519215, + 0.6574092294801889, + 0.6448116444857956, + 1.2603902790766386, + 1.8905854186149578 + ], + "nodes": { + "X": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2", + "localMm": [ + 468.8777588916775, + 1681.300401687622, + -997.8671073913574 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.806400633739475, + 14.883894920349121, + 3.4002411365509015 + ] + }, + "Y": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1", + "localMm": [ + -3.9693117141723633, + -203.618586263455, + 405.63321113586426 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.8460937508812, + 18.940227031707764, + 1.3640552739163505 + ] + }, + "Z": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0", + "localMm": [ + -20.80368995666504, + -904.0489196777344, + 375.2805213785855 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -19.05413065044785, + 22.693032245493615, + -7.676433922860993 + ] + }, + "A": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3", + "localMm": [ + 497.99561500549316, + 1139.9997472763062, + -1603.0043363571167 + ], + "quaternion": [ + -0.09358363453630855, + 0, + 0, + 0.9956114218644615 + ], + "world": [ + -18.51522207260132, + 8.832522630691528, + -2.0127654075622576 + ] + }, + "C": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3/1", + "localMm": [ + -0.08916854858398438, + -634.0826749801636, + -86.4475965499878 + ], + "quaternion": [ + 0, + 0, + -0.06200155297278678, + 0.998076052928314 + ], + "world": [ + -18.516113758087158, + 9.164775530362324, + -8.403619073277603 + ] + } + } + }, + { + "tick": 180, + "q": [ + 2.7007255572479774, + 1.5379467155631636, + 1.4830952979680165, + 2.811733782839189, + 4.217600674258783 + ], + "nodes": { + "X": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2", + "localMm": [ + 470.3395710009736, + 1681.300401687622, + -997.8671073913574 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.791782512646513, + 14.883894920349121, + 3.4002411365509015 + ] + }, + "Y": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1", + "localMm": [ + -3.9693117141723633, + -202.738048777372, + 405.63321113586426 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.831475629788237, + 18.940227031707764, + 1.3728606487771806 + ] + }, + "Z": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0", + "localMm": [ + -20.80368995666504, + -904.0489196777344, + 374.44223772510327 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -19.039512529354887, + 22.684649408958794, + -7.667628548000163 + ] + }, + "A": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3", + "localMm": [ + 497.99561500549316, + 1139.9997472763062, + -1603.0043363571167 + ], + "quaternion": [ + -0.08009685716826766, + 0, + 0, + 0.9967870853255304 + ], + "world": [ + -18.51522207260132, + 8.832522630691528, + -2.0127654075622576 + ] + }, + "C": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3/1", + "localMm": [ + -0.08916854858398438, + -634.0826749801636, + -86.4475965499878 + ], + "quaternion": [ + 0, + 0, + -0.04172219310644397, + 0.999129250198586 + ], + "world": [ + -18.516113758087158, + 8.991635804504972, + -8.41027160637488 + ] + } + } + }, + { + "tick": 275, + "q": [ + 4.085999929781512, + 2.4909264365477166, + 2.3779308599752444, + 4.363077286601698, + 6.544615929902546 + ], + "nodes": { + "X": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2", + "localMm": [ + 471.7248453735071, + 1681.300401687622, + -997.8671073913574 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.77792976892118, + 14.883894920349121, + 3.4002411365509015 + ] + }, + "Y": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1", + "localMm": [ + -3.9693117141723633, + -201.78506905638747, + 405.63321113586426 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.817622886062903, + 18.940227031707764, + 1.382390445987026 + ] + }, + "Z": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0", + "localMm": [ + -20.80368995666504, + -904.0489196777344, + 373.5474021630961 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -19.025659785629554, + 22.67570105333872, + -7.658098750790318 + ] + }, + "A": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3", + "localMm": [ + 497.99561500549316, + 1139.9997472763062, + -1603.0043363571167 + ], + "quaternion": [ + -0.06659540002082798, + 0, + 0, + 0.9977800622863067 + ], + "world": [ + -18.51522207260132, + 8.832522630691528, + -2.0127654075622576 + ] + }, + "C": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3/1", + "localMm": [ + -0.08916854858398438, + -634.0826749801636, + -86.4475965499878 + ], + "quaternion": [ + 0, + 0, + -0.021425628607248472, + 0.9997704448716136 + ], + "world": [ + -18.516113758087158, + 8.818379437902781, + -8.412234333654848 + ] + } + } + }, + { + "tick": 370, + "q": [ + 5.387598173682366, + 3.5088324139082143, + 3.3365312733855843, + 5.914420790364206, + 8.871631185546308 + ], + "nodes": { + "X": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2", + "localMm": [ + 473.02644361740795, + 1681.300401687622, + -997.8671073913574 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.76491378648217, + 14.883894920349121, + 3.4002411365509015 + ] + }, + "Y": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1", + "localMm": [ + -3.9693117141723633, + -200.76716307902697, + 405.63321113586426 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.804606903623892, + 18.940227031707764, + 1.3925695057606307 + ] + }, + "Z": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0", + "localMm": [ + -20.80368995666504, + -904.0489196777344, + 372.58880174968573 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -19.012643803190542, + 22.66611504920462, + -7.647919691016713 + ] + }, + "A": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3", + "localMm": [ + 497.99561500549316, + 1139.9997472763062, + -1603.0043363571167 + ], + "quaternion": [ + -0.05308173757825106, + 0, + 0, + 0.9985901707585919 + ], + "world": [ + -18.51522207260132, + 8.832522630691528, + -2.0127654075622576 + ] + }, + "C": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3/1", + "localMm": [ + -0.08916854858398438, + -634.0826749801636, + -86.4475965499878 + ], + "quaternion": [ + 0, + 0, + -0.001120229000250849, + 0.9999993725432966 + ], + "world": [ + -18.516113758087158, + 8.645133439219864, + -8.409505816305332 + ] + } + } + }, + { + "tick": 465, + "q": [ + 6.598646792860076, + 4.583380703310395, + 4.365425131049058, + 7.46576429412713, + 11.198646441190695 + ], + "nodes": { + "X": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2", + "localMm": [ + 474.2374922365857, + 1681.300401687622, + -997.8671073913574 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.752803300290395, + 14.883894920349121, + 3.4002411365509015 + ] + }, + "Y": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1", + "localMm": [ + -3.9693117141723633, + -199.69261478962477, + 405.63321113586426 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.79249641743212, + 18.940227031707764, + 1.403314988654653 + ] + }, + "Z": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0", + "localMm": [ + -20.80368995666504, + -904.0489196777344, + 371.55990789202224 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -19.00053331699877, + 22.655826110627984, + -7.6371742081226905 + ] + }, + "A": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3", + "localMm": [ + 497.99561500549316, + 1139.9997472763062, + -1603.0043363571167 + ], + "quaternion": [ + -0.039558346561724904, + 0, + 0, + 0.9992172622694738 + ], + "world": [ + -18.51522207260132, + 8.832522630691528, + -2.0127654075622576 + ] + }, + "C": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3/1", + "localMm": [ + -0.08916854858398438, + -634.0826749801636, + -86.4475965499878 + ], + "quaternion": [ + 0, + 0, + 0.01918563254624356, + 0.9998159388126399 + ], + "world": [ + -18.516113758087158, + 8.472024809519901, + -8.402088054514548 + ] + } + } + }, + { + "tick": 560, + "q": [ + 7.712556319100976, + 5.705580113380394, + 5.470391224826209, + 9.017107797890326, + 13.52566169683549 + ], + "nodes": { + "X": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2", + "localMm": [ + 475.3514017628266, + 1681.300401687622, + -997.8671073913574 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.741664205027984, + 14.883894920349121, + 3.4002411365509015 + ] + }, + "Y": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1", + "localMm": [ + -3.9693117141723633, + -198.5704153795548, + 405.63321113586426 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.781357322169708, + 18.940227031707764, + 1.414536982755353 + ] + }, + "Z": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0", + "localMm": [ + -20.80368995666504, + -904.0489196777344, + 370.45494179824504 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.989394221736358, + 22.644776449690212, + -7.625952214021991 + ] + }, + "A": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3", + "localMm": [ + 497.99561500549316, + 1139.9997472763062, + -1603.0043363571167 + ], + "quaternion": [ + -0.02602770547545017, + 0, + 0, + 0.9996612218885372 + ], + "world": [ + -18.51522207260132, + 8.832522630691528, + -2.0127654075622576 + ] + }, + "C": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3/1", + "localMm": [ + -0.08916854858398438, + -634.0826749801636, + -86.4475965499878 + ], + "quaternion": [ + 0, + 0, + 0.039483582673435914, + 0.9992202193206811 + ], + "world": [ + -18.516113758087158, + 8.299180449165855, + -8.389986486004839 + ] + } + } + }, + { + "tick": 655, + "q": [ + 8.72303975359065, + 6.865798191834175, + 6.656398201686621, + 10.568451301653525, + 15.852676952480286 + ], + "nodes": { + "X": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2", + "localMm": [ + 476.36188519731627, + 1681.300401687622, + -997.8671073913574 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.731559370683087, + 14.883894920349121, + 3.4002411365509015 + ] + }, + "Y": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1", + "localMm": [ + -3.9693117141723633, + -197.41019730110102, + 405.63321113586426 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.77125248782481, + 18.940227031707764, + 1.4261391635398906 + ] + }, + "Z": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0", + "localMm": [ + -20.80368995666504, + -904.0489196777344, + 369.2689348213847 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.97928938739146, + 22.632916379921607, + -7.614350033237454 + ] + }, + "A": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3", + "localMm": [ + 497.99561500549316, + 1139.9997472763062, + -1603.0043363571167 + ], + "quaternion": [ + -0.012492294152387668, + 0, + 0, + 0.999921968248928 + ], + "world": [ + -18.51522207260132, + 8.832522630691528, + -2.0127654075622576 + ] + }, + "C": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3/1", + "localMm": [ + -0.08916854858398438, + -634.0826749801636, + -86.4475965499878 + ], + "quaternion": [ + 0, + 0, + 0.0597652512848917, + 0.9982124597192993 + ], + "world": [ + -18.516113758087158, + 8.126727064793355, + -8.37320998204645 + ] + } + } + }, + { + "tick": 745, + "q": [ + 9.579524288290253, + 7.990781709641391, + 7.858468677864376, + 12.038145147323924, + 18.057217720985886 + ], + "nodes": { + "X": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2", + "localMm": [ + 477.2183697320158, + 1681.300401687622, + -997.8671073913574 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.72299452533609, + 14.883894920349121, + 3.4002411365509015 + ] + }, + "Y": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1", + "localMm": [ + -3.9693117141723633, + -196.28521378329378, + 405.63321113586426 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.762687642477815, + 18.940227031707764, + 1.4373889987179629 + ] + }, + "Z": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0", + "localMm": [ + -20.80368995666504, + -904.0489196777344, + 368.0668643452069 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.970724542044465, + 22.62089567515983, + -7.603100198059381 + ] + }, + "A": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3", + "localMm": [ + 497.99561500549316, + 1139.9997472763062, + -1603.0043363571167 + ], + "quaternion": [ + 0.0003328792010827427, + 0, + 0, + 0.9999999445957172 + ], + "world": [ + -18.51522207260132, + 8.832522630691528, + -2.0127654075622576 + ] + }, + "C": { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3/1", + "localMm": [ + -0.08916854858398438, + -634.0826749801636, + -86.4475965499878 + ], + "quaternion": [ + 0, + 0, + 0.07895686550406936, + 0.9968780333570262 + ], + "world": [ + -18.516113758087158, + 7.963825398322858, + -8.353015220022485 + ] + } + } + } + ], + "liveSample": { + "q": { + "x": 5.901822069045549, + "y": 9.59828096904388, + "z": 2.844906943921856, + "a": 2.3271051907522295, + "b": 0, + "c": 11.545175317920382 + }, + "joints": { + "X": { + "localMm": [ + 478.5406675127711, + 1681.300401687622, + -997.8671073913574 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -1.870977154752854, + 0.34002411365509033, + 1.488389492034912 + ] + }, + "Y": { + "localMm": [ + -3.9693117141723633, + -194.6777145238913, + 405.63321113586426 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -1.8749464664670263, + 0.14534639913119904, + 1.8940227031707764 + ] + }, + "Z": { + "localMm": [ + -20.80368995666504, + -904.0489196777344, + 366.08042607914945 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -1.8957501564236914, + -0.7587025205465353, + 2.260103129249926 + ] + }, + "A": { + "localMm": [ + 497.99561500549316, + 1139.9997472763062, + -1603.0043363571167 + ], + "quaternion": [ + 0.020306427987709715, + 0, + 0, + 0.9997938032326366 + ], + "world": [ + -1.8515222072601318, + -0.20127654075622559, + 0.8832522630691528 + ] + }, + "C": { + "localMm": [ + -0.08916854858398438, + -634.0826749801636, + -86.4475965499878 + ], + "quaternion": [ + 0, + 0, + 0.10058029927953424, + 0.9949289438934015 + ], + "world": [ + -1.8516113758087158, + -0.8313261266086045, + 0.7711293616327597 + ] + } + } + } + }, + { + "coordinates": "XYZBC", + "checks": [ + "fixed or single DOF", + "direction/sign and parent isolation", + "pivot and child inheritance", + "duplicate axis rejected", + "JSON on scene and real bed", + "GLB roundtrip restores calibration and bindings", + "single-file apply", + "WASM runtime axis mapping", + "live dialog follows actual joints" + ], + "nodeCount": 134, + "samples": [ + { + "tick": 95, + "q": [ + 1.4134301497621518, + 0.7644020287847099, + 0.6769363674821014, + 1.4236895952621842, + 2.1355343928932764 + ], + "nodes": { + "X": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2", + "localMm": [ + 469.0522755934877, + 1681.300401687622, + -997.8671073913574 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.80465546672137, + 14.883894920349121, + 3.4002411365509015 + ] + }, + "Y": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1", + "localMm": [ + -3.9693117141723633, + -203.51159346415045, + 405.63321113586426 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.844348583863095, + 18.940227031707764, + 1.3651252019093962 + ] + }, + "Z": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0", + "localMm": [ + -20.80368995666504, + -904.0489196777344, + 375.2483966555892 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -19.052385483429745, + 22.692710998263653, + -7.675363994867947 + ] + }, + "B": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3", + "localMm": [ + 497.99561500549316, + 1139.9997472763062, + -1603.0043363571167 + ], + "quaternion": [ + 0, + -0.09216473859249823, + 0, + 0.9957437727448646 + ], + "world": [ + -18.51522207260132, + 8.832522630691528, + -2.0127654075622576 + ] + }, + "C": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3/1", + "localMm": [ + -0.08916854858398438, + -634.0826749801636, + -86.4475965499878 + ], + "quaternion": [ + 0, + 0, + -0.05986794249330311, + 0.9982063060618374 + ], + "world": [ + -18.35742842978479, + 7.982569304727894, + -8.353592157363893 + ] + } + } + }, + { + "tick": 195, + "q": [ + 3.002063626897584, + 1.7677966748761678, + 1.3702091493068735, + 3.05668275711748, + 4.58502413567622 + ], + "nodes": { + "X": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2", + "localMm": [ + 470.6409090706232, + 1681.300401687622, + -997.8671073913574 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.78876913195002, + 14.883894920349121, + 3.4002411365509015 + ] + }, + "Y": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1", + "localMm": [ + -3.9693117141723633, + -202.50819881805901, + 405.63321113586426 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.828462249091743, + 18.940227031707764, + 1.3751591483703107 + ] + }, + "Z": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0", + "localMm": [ + -20.80368995666504, + -904.0489196777344, + 374.55512387376444 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -19.036499148658393, + 22.685778270445407, + -7.665330048407033 + ] + }, + "B": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3", + "localMm": [ + 497.99561500549316, + 1139.9997472763062, + -1603.0043363571167 + ], + "quaternion": [ + 0, + -0.07796596062091521, + 0, + 0.9969560215899486 + ], + "world": [ + -18.51522207260132, + 8.832522630691528, + -2.0127654075622576 + ] + }, + "C": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3/1", + "localMm": [ + -0.08916854858398438, + -634.0826749801636, + -86.4475965499878 + ], + "quaternion": [ + 0, + 0, + -0.03851840150094521, + 0.9992578910100295 + ], + "world": [ + -18.381713845815984, + 7.97841781077152, + -8.353592157363893 + ] + } + } + }, + { + "tick": 290, + "q": [ + 4.468468779001359, + 2.8418226921376712, + 1.9513302101338241, + 4.6080262608799885, + 6.912039391319983 + ], + "nodes": { + "X": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2", + "localMm": [ + 472.1073142227269, + 1681.300401687622, + -997.8671073913574 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.77410508042898, + 14.883894920349121, + 3.4002411365509015 + ] + }, + "Y": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1", + "localMm": [ + -3.9693117141723633, + -201.4341728007975, + 405.63321113586426 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.813798197570705, + 18.940227031707764, + 1.3858994085429255 + ] + }, + "Z": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0", + "localMm": [ + -20.80368995666504, + -904.0489196777344, + 373.97400281293744 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -19.021835097137355, + 22.679967059837136, + -7.654589788234418 + ] + }, + "B": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3", + "localMm": [ + 497.99561500549316, + 1139.9997472763062, + -1603.0043363571167 + ], + "quaternion": [ + 0, + -0.06446241175020236, + 0, + 0.9979201358181663 + ], + "world": [ + -18.51522207260132, + 8.832522630691528, + -2.0127654075622576 + ] + }, + "C": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3/1", + "localMm": [ + -0.08916854858398438, + -634.0826749801636, + -86.4475965499878 + ], + "quaternion": [ + 0, + 0, + -0.018219885427730547, + 0.9998340041101824 + ], + "world": [ + -18.404885742068682, + 7.97511643512577, + -8.353592157363893 + ] + } + } + }, + { + "tick": 390, + "q": [ + 5.95605279607536, + 4.0941355770359475, + 2.487764884318767, + 6.241019422735261, + 9.361529134102891 + ], + "nodes": { + "X": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2", + "localMm": [ + 473.59489823980095, + 1681.300401687622, + -997.8671073913574 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.75922924025824, + 14.883894920349121, + 3.4002411365509015 + ] + }, + "Y": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1", + "localMm": [ + -3.9693117141723633, + -200.18185991589922, + 405.63321113586426 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.798922357399963, + 18.940227031707764, + 1.3984225373919084 + ] + }, + "Z": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0", + "localMm": [ + -20.80368995666504, + -904.0489196777344, + 373.4375681387525 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -19.006959256966613, + 22.674602713095286, + -7.642066659385435 + ] + }, + "B": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3", + "localMm": [ + 497.99561500549316, + 1139.9997472763062, + -1603.0043363571167 + ], + "quaternion": [ + 0, + -0.05023543327239436, + 0, + 0.998737403547066 + ], + "world": [ + -18.51522207260132, + 8.832522630691528, + -2.0127654075622576 + ] + }, + "C": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3/1", + "localMm": [ + -0.08916854858398438, + -634.0826749801636, + -86.4475965499878 + ], + "quaternion": [ + 0, + 0, + 0.0031549316321484574, + 0.9999950231908139 + ], + "world": [ + -18.42936427058568, + 7.972320370834582, + -8.353592157363893 + ] + } + } + }, + { + "tick": 490, + "q": [ + 7.375743160465085, + 5.465338914806284, + 2.9544195116140486, + 7.874012584591129, + 11.811018876886694 + ], + "nodes": { + "X": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2", + "localMm": [ + 475.01458860419064, + 1681.300401687622, + -997.8671073913574 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.745032336614344, + 14.883894920349121, + 3.4002411365509015 + ] + }, + "Y": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1", + "localMm": [ + -3.9693117141723633, + -198.8106565781289, + 405.63321113586426 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.784725453756067, + 18.940227031707764, + 1.4121345707696116 + ] + }, + "Z": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0", + "localMm": [ + -20.80368995666504, + -904.0489196777344, + 372.97091351145724 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.992762353322718, + 22.669936166822332, + -7.628354626007733 + ] + }, + "B": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3", + "localMm": [ + 497.99561500549316, + 1139.9997472763062, + -1603.0043363571167 + ], + "quaternion": [ + 0, + -0.03599825324184887, + 0, + 0.9993518528343938 + ], + "world": [ + -18.51522207260132, + 8.832522630691528, + -2.0127654075622576 + ] + }, + "C": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3/1", + "localMm": [ + -0.08916854858398438, + -634.0826749801636, + -86.4475965499878 + ], + "quaternion": [ + 0, + 0, + 0.02452830717622528, + 0.9996991358139051 + ], + "world": [ + -18.453912537800672, + 7.970223012825161, + -8.353592157363893 + ] + } + } + }, + { + "tick": 590, + "q": [ + 8.717777681873137, + 6.948897990887033, + 3.3597479661648384, + 9.507005746447128, + 14.26050861967069 + ], + "nodes": { + "X": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2", + "localMm": [ + 476.35662312559873, + 1681.300401687622, + -997.8671073913574 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.731611991400264, + 14.883894920349121, + 3.4002411365509015 + ] + }, + "Y": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1", + "localMm": [ + -3.9693117141723633, + -197.32709750204816, + 405.63321113586426 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.771305108541988, + 18.940227031707764, + 1.4269701615304191 + ] + }, + "Z": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0", + "localMm": [ + -20.80368995666504, + -904.0489196777344, + 372.56558505690646 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.979342008108638, + 22.665882882276826, + -7.613519035246925 + ] + }, + "B": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3", + "localMm": [ + 497.99561500549316, + 1139.9997472763062, + -1603.0043363571167 + ], + "quaternion": [ + 0, + -0.021753762871671526, + 0, + 0.9997633589009567 + ], + "world": [ + -18.51522207260132, + 8.832522630691528, + -2.0127654075622576 + ] + }, + "C": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3/1", + "localMm": [ + -0.08916854858398438, + -634.0826749801636, + -86.4475965499878 + ], + "quaternion": [ + 0, + 0, + 0.045890475522586356, + 0.9989464771729819 + ], + "world": [ + -18.478510604183953, + 7.968826064693611, + -8.353592157363893 + ] + } + } + }, + { + "tick": 690, + "q": [ + 9.97335652176835, + 8.537849195661023, + 3.713038421204824, + 11.139998908303125, + 16.709998362454687 + ], + "nodes": { + "X": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2", + "localMm": [ + 477.6122019654939, + 1681.300401687622, + -997.8671073913574 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.719056203001312, + 14.883894920349121, + 3.4002411365509015 + ] + }, + "Y": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1", + "localMm": [ + -3.9693117141723633, + -195.73814629727414, + 405.63321113586426 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.758749320143036, + 18.940227031707764, + 1.4428596735781591 + ] + }, + "Z": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0", + "localMm": [ + -20.80368995666504, + -904.0489196777344, + 372.21229460186646 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.966786219709686, + 22.662349977726425, + -7.597629523199185 + ] + }, + "B": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3", + "localMm": [ + 497.99561500549316, + 1139.9997472763062, + -1603.0043363571167 + ], + "quaternion": [ + 0, + -0.007504854859511122, + 0, + 0.9999718381802248 + ], + "world": [ + -18.51522207260132, + 8.832522630691528, + -2.0127654075622576 + ] + }, + "C": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3/1", + "localMm": [ + -0.08916854858398438, + -634.0826749801636, + -86.4475965499878 + ], + "quaternion": [ + 0, + 0, + 0.06723167610998904, + 0.9977373911643492 + ], + "world": [ + -18.503138489756033, + 7.968130661122412, + -8.353592157363893 + ] + } + } + }, + { + "tick": 790, + "q": [ + 11.13471434809984, + 10.224820521094909, + 4.024322468955219, + 12.772992070159123, + 19.159488105238683 + ], + "nodes": { + "X": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2", + "localMm": [ + 478.7735597918254, + 1681.300401687622, + -997.8671073913574 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.707442624737997, + 14.883894920349121, + 3.4002411365509015 + ] + }, + "Y": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1", + "localMm": [ + -3.9693117141723633, + -194.05117497184025, + 405.63321113586426 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.74713574187972, + 18.940227031707764, + 1.4597293868324979 + ] + }, + "Z": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0", + "localMm": [ + -20.80368995666504, + -904.0489196777344, + 371.90101055411606 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -18.95517264144637, + 22.659237137248923, + -7.580759809944846 + ] + }, + "B": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3", + "localMm": [ + 497.99561500549316, + 1139.9997472763062, + -1603.0043363571167 + ], + "quaternion": [ + 0, + 0.00674557719987273, + 0, + 0.9999772483353011 + ], + "world": [ + -18.51522207260132, + 8.832522630691528, + -2.0127654075622576 + ] + }, + "C": { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3/1", + "localMm": [ + -0.08916854858398438, + -634.0826749801636, + -86.4475965499878 + ], + "quaternion": [ + 0, + 0, + 0.08854215795754448, + 0.9960724302299614 + ], + "world": [ + -18.527776190316562, + 7.968137366958772, + -8.353592157363893 + ] + } + } + } + ], + "liveSample": { + "q": { + "x": 6.5076512862539815, + "y": 10.281713760027511, + "z": -2.9789698810481324, + "a": 0, + "b": 1.0207106612678132, + "c": 9.367851102113022 + }, + "joints": { + "X": { + "localMm": [ + 479.14649672997956, + 1681.300401687622, + -997.8671073913574 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -1.8703713255356456, + 0.34002411365509033, + 1.488389492034912 + ] + }, + "Y": { + "localMm": [ + -3.9693117141723633, + -193.99428173290767, + 405.63321113586426 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -1.874340637249818, + 0.14602983192218266, + 1.8940227031707764 + ] + }, + "Z": { + "localMm": [ + -20.80368995666504, + -904.0489196777344, + 371.9043029041194 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "world": [ + -1.895144327206483, + -0.7580190877555517, + 2.2659270060748957 + ] + }, + "B": { + "localMm": [ + 497.99561500549316, + 1139.9997472763062, + -1603.0043363571167 + ], + "quaternion": [ + 0, + 0.008907263087737854, + 0, + 0.9999603295452705 + ], + "world": [ + -1.8515222072601318, + -0.20127654075622559, + 0.8832522630691528 + ] + }, + "C": { + "localMm": [ + -0.08916854858398438, + -634.0826749801636, + -86.4475965499878 + ], + "quaternion": [ + 0, + 0, + 0.08165889673758704, + 0.9966603356126901 + ], + "world": [ + -1.8531513235377042, + -0.8353592157363892, + 0.7968199723413603 + ] + } + } + } + } + ], + "browser_errors": [] +} diff --git a/coverage/glb-machine-manager/document/mill700/xyzac-live.png b/coverage/glb-machine-manager/document/mill700/xyzac-live.png new file mode 100644 index 0000000..6c941d8 Binary files /dev/null and b/coverage/glb-machine-manager/document/mill700/xyzac-live.png differ diff --git a/coverage/glb-machine-manager/document/mill700/xyzac.json b/coverage/glb-machine-manager/document/mill700/xyzac.json new file mode 100644 index 0000000..eda9c5a --- /dev/null +++ b/coverage/glb-machine-manager/document/mill700/xyzac.json @@ -0,0 +1,4108 @@ +{ + "schema": "linuxcnc.joint-model/1", + "coordinates": "XYZAC", + "units": { + "length": "mm", + "angle": "deg", + "gltfLength": "m" + }, + "controller": { + "source": "linuxcnc-wasm.visual.joints", + "axisOrder": [ + "X", + "Y", + "Z", + "A", + "C" + ] + }, + "calibration": { + "cOriginMm": [ + 0, + 0, + 0 + ], + "tiltOffsetMm": [ + 0, + 0, + 0 + ], + "physicalZero": { + "x": 5, + "y": 0, + "z": 7, + "a": 12, + "b": 0, + "c": 9 + } + }, + "nodes": [ + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene", + "parentId": null, + "name": "MILL700-U_1.glb", + "role": "base", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene" + }, + "zero": { + "positionMm": [ + 0, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:source-scene", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene", + "name": "AuxScene", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "source-scene" + }, + "zero": { + "positionMm": [ + 0, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:source-scene", + "name": "MILL700-U_1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0" + }, + "zero": { + "positionMm": [ + -2349.517822265625, + -1341.2762880325317, + 2486.2565994262695 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0", + "name": "mapl14805146fe3i-None348856022", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/0" + }, + "zero": { + "positionMm": [ + -868.2212829589844, + 1555.3476810455322, + -784.3674421310425 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/1", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0", + "name": "mapl14805146fe3i-None348856022_1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/1" + }, + "zero": { + "positionMm": [ + -157.12809562683105, + 1193.3876276016235, + -794.0124273300171 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0", + "name": "MILL700-A-主轴-JT1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2" + }, + "zero": { + "positionMm": [ + 472.6388454437256, + 1681.300401687622, + -997.8671073913574 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": { + "axis": "X", + "direction": "x", + "sign": 1, + "dof": 1, + "type": "prismatic", + "unit": "mm", + "frame": "parent" + } + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2", + "name": "MILL700-", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0" + }, + "zero": { + "positionMm": [ + -31.702756881713867, + -564.4468069076538, + 187.18719482421875 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0", + "name": "平面004", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/0" + }, + "zero": { + "positionMm": [ + 69.46694850921631, + 0.13110041618347168, + 468.2943820953369 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0", + "name": "立方体064", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1" + }, + "zero": { + "positionMm": [ + -322.7880001068115, + 0.024276018142700174, + 198.69959354400635 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体025", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/0" + }, + "zero": { + "positionMm": [ + 680.0000667572021, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/1", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体026", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/1" + }, + "zero": { + "positionMm": [ + 860.0003719329834, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/2", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体027", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/2" + }, + "zero": { + "positionMm": [ + 880.0003528594971, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/3", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体028", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/3" + }, + "zero": { + "positionMm": [ + 900.0003337860107, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/4", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体029", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/4" + }, + "zero": { + "positionMm": [ + 779.9999713897705, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/5", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体030", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/5" + }, + "zero": { + "positionMm": [ + 799.9999523162842, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/6", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体031", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/6" + }, + "zero": { + "positionMm": [ + 839.9999141693115, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/7", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体032", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/7" + }, + "zero": { + "positionMm": [ + 819.9999332427979, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/8", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体033", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/8" + }, + "zero": { + "positionMm": [ + 740.0000095367432, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/9", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体034", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/9" + }, + "zero": { + "positionMm": [ + 759.9999904632568, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/10", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体035", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/10" + }, + "zero": { + "positionMm": [ + 720.0000286102295, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/11", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体036", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/11" + }, + "zero": { + "positionMm": [ + 700.0000476837158, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/12", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体053", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/12" + }, + "zero": { + "positionMm": [ + -160.00008583068848, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/13", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体054", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/13" + }, + "zero": { + "positionMm": [ + -180.00006675720215, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/14", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体055", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/14" + }, + "zero": { + "positionMm": [ + -220.0000286102295, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/15", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体056", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/15" + }, + "zero": { + "positionMm": [ + -200.00004768371582, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/16", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体057", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/16" + }, + "zero": { + "positionMm": [ + -79.99992370605469, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/17", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体058", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/17" + }, + "zero": { + "positionMm": [ + -99.99990463256836, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/18", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体059", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/18" + }, + "zero": { + "positionMm": [ + -139.9998664855957, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/19", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体060", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/19" + }, + "zero": { + "positionMm": [ + -119.99988555908203, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/20", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体061", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/20" + }, + "zero": { + "positionMm": [ + -39.999961853027344, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/21", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体062", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/21" + }, + "zero": { + "positionMm": [ + -59.999942779541016, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1/22", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/0/1", + "name": "立方体063", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/22" + }, + "zero": { + "positionMm": [ + -19.999980926513672, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2", + "name": "MILL700-A-主轴-JT2", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/1" + }, + "zero": { + "positionMm": [ + -3.9693117141723633, + -204.27599549293518, + 405.63321113586426 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": { + "axis": "Y", + "direction": "y", + "sign": 1, + "dof": 1, + "type": "prismatic", + "unit": "mm", + "frame": "parent" + } + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1", + "name": "MILL700-A-主轴-JT3", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/1/0" + }, + "zero": { + "positionMm": [ + -20.80368995666504, + -904.0489196777344, + 368.9253330230713 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": { + "axis": "Z", + "direction": "z", + "sign": -1, + "dof": 1, + "type": "prismatic", + "unit": "mm", + "frame": "parent" + } + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0", + "name": "123", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/1/0/0" + }, + "zero": { + "positionMm": [ + 0.059604644775390625, + 1.8161535263061523, + -702.0378112792969 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0/0/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0/0", + "name": "_3028378857429004", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/1/0/0/0" + }, + "zero": { + "positionMm": [ + 0.5391836166381836, + -2.054750919342041, + 502.8970241546631 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0/0/0/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0/0/0", + "name": "_3028378857429004_1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/1/0/0/0/0" + }, + "zero": { + "positionMm": [ + -0.5391836166381836, + 2.054750919342041, + -502.8970241546631 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0/0/0/1", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0/0/0", + "name": "_3028378857429004_2", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/1/0/0/0/1" + }, + "zero": { + "positionMm": [ + -0.49185752868652344, + 1.9202828407287598, + -286.04042530059814 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0/1", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0", + "name": "MILL700-A-主轴-JT4", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/1/0/1" + }, + "zero": { + "positionMm": [ + 1.3986825942993164, + 0.9530782699584961, + -850.0750064849854 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0/2", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0", + "name": "SHS25C100020_Track_TSXXX-0000058522006", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/1/0/2" + }, + "zero": { + "positionMm": [ + 0.07891654968261719, + 167.50484704971313, + -9.09280776977539 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/1", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1", + "name": "SHS25C100020_Track_TSXXX-0000058522002", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/1/1" + }, + "zero": { + "positionMm": [ + 3.1614303588867188, + 121.06472253799438, + -268.9887285232544 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/2", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1", + "name": "SHS25CQZSS1_Slide25-55_TSXXX-0000058522012", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/1/2" + }, + "zero": { + "positionMm": [ + -23.18131923675537, + -708.1259489059448, + 123.15058708190918 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/2", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2", + "name": "SHS25CQZSS1_Slide25-55_TSXXX-0000058522001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/2" + }, + "zero": { + "positionMm": [ + -7.143378257751465, + -71.1749792098999, + 10.328888893127441 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/3", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2", + "name": "SHS25CQZSS1_Slide25-55_TSXXX-0000058522001001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/3" + }, + "zero": { + "positionMm": [ + -7.143378257751465, + -71.1749792098999, + 10.328888893127441 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0", + "name": "MILL700-A-工作台-JT1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/3" + }, + "zero": { + "positionMm": [ + 497.99561500549316, + 1139.9997472763062, + -1603.0043363571167 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": { + "axis": "A", + "direction": "x", + "sign": 1, + "dof": 1, + "type": "revolute", + "unit": "deg", + "frame": "parent" + } + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3", + "name": "MILL700-A-工作台-JT1001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/3/0" + }, + "zero": { + "positionMm": [ + 0, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3/1", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3", + "name": "MILL700-A-工作台-JT2", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/3/1" + }, + "zero": { + "positionMm": [ + -0.08916854858398438, + -634.0826749801636, + -86.4475965499878 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": { + "axis": "C", + "direction": "z", + "sign": 1, + "dof": 1, + "type": "revolute", + "unit": "deg", + "frame": "parent" + } + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3/1/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3/1", + "name": "MILL700-A--工件托盘", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/3/1/0" + }, + "zero": { + "positionMm": [ + -0.039458274841308594, + 0.02866983413696289, + 60.18102169036865 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3/1/0/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3/1/0", + "name": "MILL700工件", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/3/1/0/0" + }, + "zero": { + "positionMm": [ + 0, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3/2", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3", + "name": "托底A", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/3/2" + }, + "zero": { + "positionMm": [ + -24.169445037841797, + -631.3432455062866, + -370.8224296569824 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3/2/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3/2", + "name": "MILL700-A-工作台-JT1001_1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/3/2/0" + }, + "zero": { + "positionMm": [ + 24.172663688659668, + 650.3862142562866, + 370.81682682037354 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/4", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0", + "name": "MILL700-A-门1-JT1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/4" + }, + "zero": { + "positionMm": [ + 1380.0005912780762, + 622.5010752677917, + -767.5008773803711 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/4/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/4", + "name": "mapl14805146fe3i014", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/4/0" + }, + "zero": { + "positionMm": [ + 69.13900375366211, + -430.00227212905884, + -264.99879360198975 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/4/1", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/4", + "name": "mapl14805146fe3i016", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/4/1" + }, + "zero": { + "positionMm": [ + -62.04628944396973, + 56.50210380554199, + 775.352954864502 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/4/2", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/4", + "name": "mapl14805146fe3i431", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/4/2" + }, + "zero": { + "positionMm": [ + -6.041586399078369, + 54.02481555938721, + -313.0190372467041 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/5", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0", + "name": "MILL700-A-门2-JT1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/5" + }, + "zero": { + "positionMm": [ + 517.0004367828369, + -263.78095149993896, + -744.2798614501953 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/5/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/5", + "name": "mapl14805146fe3i197", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/5/0" + }, + "zero": { + "positionMm": [ + -78.32932472229004, + 165.7944917678833, + 817.5182342529297 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/5/0/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/5/0", + "name": "_126_807_34061712252_1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/5/0/0" + }, + "zero": { + "positionMm": [ + 0, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/5/0/1", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/5/0", + "name": "mapl14805146fe3i001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/5/0/1" + }, + "zero": { + "positionMm": [ + 648.3297348022461, + -211.74824237823486, + -1078.8166522979736 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/5/0/2", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/5/0", + "name": "mapl14805146fe3i196", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/5/0/2" + }, + "zero": { + "positionMm": [ + 101.07946395874023, + -114.5554780960083, + -789.954662322998 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/5/0/2/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/5/0/2", + "name": "_126_807_35301710201", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/5/0/2/0" + }, + "zero": { + "positionMm": [ + 0, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/5/0/2/1", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/5/0/2", + "name": "_126_807_35301710201_1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/5/0/2/1" + }, + "zero": { + "positionMm": [ + 0, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0", + "name": "MILL700-A底座", + "role": "base", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6" + }, + "zero": { + "positionMm": [ + 459.7148895263672, + 906.7631363868713, + -2320.876121520996 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6", + "name": "SHS25C100020_Track_TSXXX-0000058522001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/0" + }, + "zero": { + "positionMm": [ + 39.36731815338135, + 667.2102808952332, + 1206.9398164749146 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/1", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6", + "name": "底座002", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/1" + }, + "zero": { + "positionMm": [ + 2.282381057739258, + 382.2411298751831, + 456.71534538269043 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/2", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6", + "name": "底座009", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/2" + }, + "zero": { + "positionMm": [ + 323.70173931121826, + -1000.0901222229004, + 292.11002588272095 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/3", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6", + "name": "底座011", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/3" + }, + "zero": { + "positionMm": [ + -3093.5568809509277, + -2605.290651321411, + -2075.2453804016113 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/4", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6", + "name": "底座012", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/4" + }, + "zero": { + "positionMm": [ + 618.5640096664429, + -0.025063753128051758, + 520.3256011009216 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/5", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6", + "name": "底座015", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/5" + }, + "zero": { + "positionMm": [ + 838.29665184021, + -237.21277713775635, + 275.1512825489044 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/6", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6", + "name": "显示器001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/6" + }, + "zero": { + "positionMm": [ + -682.807445526123, + -1648.0319499969482, + 759.9776983261108 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/6/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/6", + "name": "mapl14805146fe3i-None1061424004", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/6/0" + }, + "zero": { + "positionMm": [ + -0.8423328399658203, + -13.741254806518555, + -113.4251356124878 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/6/0/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/6/0", + "name": "Mesh_66", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/6/0/0" + }, + "zero": { + "positionMm": [ + 0, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/6/0/1", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/6/0", + "name": "Mesh_66_1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/6/0/1" + }, + "zero": { + "positionMm": [ + 0, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/6/1", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/6", + "name": "mapl14805146fe3i-None1061424004001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/6/1" + }, + "zero": { + "positionMm": [ + -0.8423328399658203, + -13.741254806518555, + -113.4251356124878 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/6/2", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/6", + "name": "mapl14805146fe3i-None1061424004_1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/6/2" + }, + "zero": { + "positionMm": [ + -81.01844787597656, + -285.07375717163086, + -248.1238842010498 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/6/3", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/6", + "name": "平面", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/6/3" + }, + "zero": { + "positionMm": [ + -59.470415115356445, + -12.278079986572266, + 561.9646310806274 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/6/4", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/6", + "name": "平面001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/6/4" + }, + "zero": { + "positionMm": [ + 3.1015872955322266, + -22.612810134887695, + 530.0655364990234 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/7", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6", + "name": "移动柜", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/7" + }, + "zero": { + "positionMm": [ + -467.17357635498047, + 1571.4397430419922, + 533.7636470794678 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/7/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/7", + "name": "mapl14805146fe3i-None3286791910", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/7/0" + }, + "zero": { + "positionMm": [ + -21.704435348510742, + 3.5028457641601562, + 45.71419954299927 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/7/1", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/7", + "name": "mapl14805146fe3i-None3286791910001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/7/1" + }, + "zero": { + "positionMm": [ + -21.704435348510742, + 3.5028457641601562, + 45.71419954299927 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/7/2", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/7", + "name": "mapl14805146fe3i-None3286791910_1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/7/2" + }, + "zero": { + "positionMm": [ + 408.51664543151855, + -30.3189754486084, + -459.0965211391449 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/7/3", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/7", + "name": "mapl14805146fe3i-None3286791910_1001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/7/3" + }, + "zero": { + "positionMm": [ + 408.51664543151855, + -30.3189754486084, + -459.0965211391449 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6", + "name": "立方体", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8" + }, + "zero": { + "positionMm": [ + 358.4332466125488, + 211.11465990543365, + 1708.8958024978638 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/0", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/0" + }, + "zero": { + "positionMm": [ + 19.999980926513672, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/1", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体002", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/1" + }, + "zero": { + "positionMm": [ + 59.999942779541016, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/2", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体003", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/2" + }, + "zero": { + "positionMm": [ + 39.999961853027344, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/3", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体004", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/3" + }, + "zero": { + "positionMm": [ + 119.99988555908203, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/4", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体005", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/4" + }, + "zero": { + "positionMm": [ + 139.9998664855957, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/5", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体006", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/5" + }, + "zero": { + "positionMm": [ + 99.99990463256836, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/6", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体007", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/6" + }, + "zero": { + "positionMm": [ + 79.99992370605469, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/7", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体008", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/7" + }, + "zero": { + "positionMm": [ + 240.00024795532227, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/8", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体009", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/8" + }, + "zero": { + "positionMm": [ + 260.00022888183594, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/9", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体010", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/9" + }, + "zero": { + "positionMm": [ + 300.0001907348633, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/10", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体011", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/10" + }, + "zero": { + "positionMm": [ + 280.0002098083496, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/11", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体012", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/11" + }, + "zero": { + "positionMm": [ + 200.00028610229492, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/12", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体013", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/12" + }, + "zero": { + "positionMm": [ + 220.0002670288086, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/13", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体014", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/13" + }, + "zero": { + "positionMm": [ + 180.00030517578125, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/14", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体015", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/14" + }, + "zero": { + "positionMm": [ + 160.00032424926758, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/15", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体016", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/15" + }, + "zero": { + "positionMm": [ + 320.00017166137695, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/16", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体017", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/16" + }, + "zero": { + "positionMm": [ + 340.0001525878906, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/17", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体018", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/17" + }, + "zero": { + "positionMm": [ + 380.0005912780762, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/18", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体019", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/18" + }, + "zero": { + "positionMm": [ + 360.0001335144043, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/19", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体020", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/19" + }, + "zero": { + "positionMm": [ + 440.000057220459, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/20", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体021", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/20" + }, + "zero": { + "positionMm": [ + 460.00051498413086, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/21", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体022", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/21" + }, + "zero": { + "positionMm": [ + 420.0005531311035, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/22", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体023", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/22" + }, + "zero": { + "positionMm": [ + 400.00009536743164, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/23", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体024", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/23" + }, + "zero": { + "positionMm": [ + -19.999980926513672, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/24", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体037", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/24" + }, + "zero": { + "positionMm": [ + -700.0000476837158, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/25", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体038", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/25" + }, + "zero": { + "positionMm": [ + -720.0000286102295, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/26", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体039", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/26" + }, + "zero": { + "positionMm": [ + -759.9999904632568, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/27", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体040", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/27" + }, + "zero": { + "positionMm": [ + -740.0000095367432, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/28", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体041", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/28" + }, + "zero": { + "positionMm": [ + -819.9999332427979, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/29", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体042", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/29" + }, + "zero": { + "positionMm": [ + -839.9999141693115, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/30", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体043", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/30" + }, + "zero": { + "positionMm": [ + -799.9999523162842, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/31", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体044", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/31" + }, + "zero": { + "positionMm": [ + -779.9999713897705, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/32", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体045", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/32" + }, + "zero": { + "positionMm": [ + -940.000057220459, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/33", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体046", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/33" + }, + "zero": { + "positionMm": [ + -959.9997997283936, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/34", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体047", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/34" + }, + "zero": { + "positionMm": [ + -999.9997615814209, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/35", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体048", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/35" + }, + "zero": { + "positionMm": [ + -979.9997806549072, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/36", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体049", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/36" + }, + "zero": { + "positionMm": [ + -900.0000953674316, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/37", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体050", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/37" + }, + "zero": { + "positionMm": [ + -920.0000762939453, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/38", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体051", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/38" + }, + "zero": { + "positionMm": [ + -880.000114440918, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/39", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体052", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/39" + }, + "zero": { + "positionMm": [ + -860.0001335144043, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/40", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体065", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/40" + }, + "zero": { + "positionMm": [ + -1020.0002193450928, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/41", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体066", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/41" + }, + "zero": { + "positionMm": [ + -1079.9999237060547, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/42", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体067", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/42" + }, + "zero": { + "positionMm": [ + -1099.9999046325684, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/43", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体068", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/43" + }, + "zero": { + "positionMm": [ + -1059.999942779541, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/44", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体069", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/44" + }, + "zero": { + "positionMm": [ + -1040.0002002716064, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/45", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体070", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/45" + }, + "zero": { + "positionMm": [ + -1160.0000858306885, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/46", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体071", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/46" + }, + "zero": { + "positionMm": [ + -1180.0000667572021, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/47", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体072", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/47" + }, + "zero": { + "positionMm": [ + -1220.0000286102295, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/48", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体073", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/48" + }, + "zero": { + "positionMm": [ + -1200.0000476837158, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/49", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体074", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/49" + }, + "zero": { + "positionMm": [ + -1140.0001049041748, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8/50", + "parentId": "079db774-116d-4606-892c-cb56f656d3de:scene/0/6/8", + "name": "立方体075", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/50" + }, + "zero": { + "positionMm": [ + -1119.999885559082, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + } + ], + "axisMap": { + "X": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2", + "Y": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1", + "Z": "079db774-116d-4606-892c-cb56f656d3de:scene/0/2/1/0", + "A": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3", + "C": "079db774-116d-4606-892c-cb56f656d3de:scene/0/3/1" + } +} diff --git a/coverage/glb-machine-manager/document/mill700/xyzbc-live.png b/coverage/glb-machine-manager/document/mill700/xyzbc-live.png new file mode 100644 index 0000000..2f7b74c Binary files /dev/null and b/coverage/glb-machine-manager/document/mill700/xyzbc-live.png differ diff --git a/coverage/glb-machine-manager/document/mill700/xyzbc.json b/coverage/glb-machine-manager/document/mill700/xyzbc.json new file mode 100644 index 0000000..49b4ee7 --- /dev/null +++ b/coverage/glb-machine-manager/document/mill700/xyzbc.json @@ -0,0 +1,4108 @@ +{ + "schema": "linuxcnc.joint-model/1", + "coordinates": "XYZBC", + "units": { + "length": "mm", + "angle": "deg", + "gltfLength": "m" + }, + "controller": { + "source": "linuxcnc-wasm.visual.joints", + "axisOrder": [ + "X", + "Y", + "Z", + "B", + "C" + ] + }, + "calibration": { + "cOriginMm": [ + 0, + 0, + 0 + ], + "tiltOffsetMm": [ + 0, + 0, + 0 + ], + "physicalZero": { + "x": 5, + "y": 0, + "z": 7, + "a": 0, + "b": 12, + "c": 9 + } + }, + "nodes": [ + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene", + "parentId": null, + "name": "MILL700-U_1.glb", + "role": "base", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene" + }, + "zero": { + "positionMm": [ + 0, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:source-scene", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene", + "name": "AuxScene", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "source-scene" + }, + "zero": { + "positionMm": [ + 0, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:source-scene", + "name": "MILL700-U_1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0" + }, + "zero": { + "positionMm": [ + -2349.517822265625, + -1341.2762880325317, + 2486.2565994262695 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0", + "name": "mapl14805146fe3i-None348856022", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/0" + }, + "zero": { + "positionMm": [ + -868.2212829589844, + 1555.3476810455322, + -784.3674421310425 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/1", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0", + "name": "mapl14805146fe3i-None348856022_1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/1" + }, + "zero": { + "positionMm": [ + -157.12809562683105, + 1193.3876276016235, + -794.0124273300171 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0", + "name": "MILL700-A-主轴-JT1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2" + }, + "zero": { + "positionMm": [ + 472.6388454437256, + 1681.300401687622, + -997.8671073913574 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": { + "axis": "X", + "direction": "x", + "sign": 1, + "dof": 1, + "type": "prismatic", + "unit": "mm", + "frame": "parent" + } + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2", + "name": "MILL700-", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0" + }, + "zero": { + "positionMm": [ + -31.702756881713867, + -564.4468069076538, + 187.18719482421875 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0", + "name": "平面004", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/0" + }, + "zero": { + "positionMm": [ + 69.46694850921631, + 0.13110041618347168, + 468.2943820953369 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0", + "name": "立方体064", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1" + }, + "zero": { + "positionMm": [ + -322.7880001068115, + 0.024276018142700174, + 198.69959354400635 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体025", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/0" + }, + "zero": { + "positionMm": [ + 680.0000667572021, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/1", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体026", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/1" + }, + "zero": { + "positionMm": [ + 860.0003719329834, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/2", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体027", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/2" + }, + "zero": { + "positionMm": [ + 880.0003528594971, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/3", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体028", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/3" + }, + "zero": { + "positionMm": [ + 900.0003337860107, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/4", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体029", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/4" + }, + "zero": { + "positionMm": [ + 779.9999713897705, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/5", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体030", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/5" + }, + "zero": { + "positionMm": [ + 799.9999523162842, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/6", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体031", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/6" + }, + "zero": { + "positionMm": [ + 839.9999141693115, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/7", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体032", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/7" + }, + "zero": { + "positionMm": [ + 819.9999332427979, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/8", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体033", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/8" + }, + "zero": { + "positionMm": [ + 740.0000095367432, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/9", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体034", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/9" + }, + "zero": { + "positionMm": [ + 759.9999904632568, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/10", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体035", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/10" + }, + "zero": { + "positionMm": [ + 720.0000286102295, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/11", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体036", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/11" + }, + "zero": { + "positionMm": [ + 700.0000476837158, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/12", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体053", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/12" + }, + "zero": { + "positionMm": [ + -160.00008583068848, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/13", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体054", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/13" + }, + "zero": { + "positionMm": [ + -180.00006675720215, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/14", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体055", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/14" + }, + "zero": { + "positionMm": [ + -220.0000286102295, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/15", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体056", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/15" + }, + "zero": { + "positionMm": [ + -200.00004768371582, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/16", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体057", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/16" + }, + "zero": { + "positionMm": [ + -79.99992370605469, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/17", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体058", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/17" + }, + "zero": { + "positionMm": [ + -99.99990463256836, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/18", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体059", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/18" + }, + "zero": { + "positionMm": [ + -139.9998664855957, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/19", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体060", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/19" + }, + "zero": { + "positionMm": [ + -119.99988555908203, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/20", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体061", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/20" + }, + "zero": { + "positionMm": [ + -39.999961853027344, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/21", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体062", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/21" + }, + "zero": { + "positionMm": [ + -59.999942779541016, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1/22", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/0/1", + "name": "立方体063", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/0/1/22" + }, + "zero": { + "positionMm": [ + -19.999980926513672, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2", + "name": "MILL700-A-主轴-JT2", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/1" + }, + "zero": { + "positionMm": [ + -3.9693117141723633, + -204.27599549293518, + 405.63321113586426 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": { + "axis": "Y", + "direction": "y", + "sign": 1, + "dof": 1, + "type": "prismatic", + "unit": "mm", + "frame": "parent" + } + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1", + "name": "MILL700-A-主轴-JT3", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/1/0" + }, + "zero": { + "positionMm": [ + -20.80368995666504, + -904.0489196777344, + 368.9253330230713 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": { + "axis": "Z", + "direction": "z", + "sign": -1, + "dof": 1, + "type": "prismatic", + "unit": "mm", + "frame": "parent" + } + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0", + "name": "123", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/1/0/0" + }, + "zero": { + "positionMm": [ + 0.059604644775390625, + 1.8161535263061523, + -702.0378112792969 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0/0/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0/0", + "name": "_3028378857429004", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/1/0/0/0" + }, + "zero": { + "positionMm": [ + 0.5391836166381836, + -2.054750919342041, + 502.8970241546631 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0/0/0/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0/0/0", + "name": "_3028378857429004_1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/1/0/0/0/0" + }, + "zero": { + "positionMm": [ + -0.5391836166381836, + 2.054750919342041, + -502.8970241546631 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0/0/0/1", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0/0/0", + "name": "_3028378857429004_2", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/1/0/0/0/1" + }, + "zero": { + "positionMm": [ + -0.49185752868652344, + 1.9202828407287598, + -286.04042530059814 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0/1", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0", + "name": "MILL700-A-主轴-JT4", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/1/0/1" + }, + "zero": { + "positionMm": [ + 1.3986825942993164, + 0.9530782699584961, + -850.0750064849854 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0/2", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0", + "name": "SHS25C100020_Track_TSXXX-0000058522006", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/1/0/2" + }, + "zero": { + "positionMm": [ + 0.07891654968261719, + 167.50484704971313, + -9.09280776977539 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/1", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1", + "name": "SHS25C100020_Track_TSXXX-0000058522002", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/1/1" + }, + "zero": { + "positionMm": [ + 3.1614303588867188, + 121.06472253799438, + -268.9887285232544 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/2", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1", + "name": "SHS25CQZSS1_Slide25-55_TSXXX-0000058522012", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/1/2" + }, + "zero": { + "positionMm": [ + -23.18131923675537, + -708.1259489059448, + 123.15058708190918 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/2", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2", + "name": "SHS25CQZSS1_Slide25-55_TSXXX-0000058522001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/2" + }, + "zero": { + "positionMm": [ + -7.143378257751465, + -71.1749792098999, + 10.328888893127441 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/3", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2", + "name": "SHS25CQZSS1_Slide25-55_TSXXX-0000058522001001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/2/3" + }, + "zero": { + "positionMm": [ + -7.143378257751465, + -71.1749792098999, + 10.328888893127441 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0", + "name": "MILL700-A-工作台-JT1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/3" + }, + "zero": { + "positionMm": [ + 497.99561500549316, + 1139.9997472763062, + -1603.0043363571167 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": { + "axis": "B", + "direction": "y", + "sign": 1, + "dof": 1, + "type": "revolute", + "unit": "deg", + "frame": "parent" + } + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3", + "name": "MILL700-A-工作台-JT1001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/3/0" + }, + "zero": { + "positionMm": [ + 0, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3/1", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3", + "name": "MILL700-A-工作台-JT2", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/3/1" + }, + "zero": { + "positionMm": [ + -0.08916854858398438, + -634.0826749801636, + -86.4475965499878 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": { + "axis": "C", + "direction": "z", + "sign": 1, + "dof": 1, + "type": "revolute", + "unit": "deg", + "frame": "parent" + } + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3/1/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3/1", + "name": "MILL700-A--工件托盘", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/3/1/0" + }, + "zero": { + "positionMm": [ + -0.039458274841308594, + 0.02866983413696289, + 60.18102169036865 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3/1/0/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3/1/0", + "name": "MILL700工件", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/3/1/0/0" + }, + "zero": { + "positionMm": [ + 0, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3/2", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3", + "name": "托底A", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/3/2" + }, + "zero": { + "positionMm": [ + -24.169445037841797, + -631.3432455062866, + -370.8224296569824 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3/2/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3/2", + "name": "MILL700-A-工作台-JT1001_1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/3/2/0" + }, + "zero": { + "positionMm": [ + 24.172663688659668, + 650.3862142562866, + 370.81682682037354 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/4", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0", + "name": "MILL700-A-门1-JT1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/4" + }, + "zero": { + "positionMm": [ + 1380.0005912780762, + 622.5010752677917, + -767.5008773803711 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/4/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/4", + "name": "mapl14805146fe3i014", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/4/0" + }, + "zero": { + "positionMm": [ + 69.13900375366211, + -430.00227212905884, + -264.99879360198975 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/4/1", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/4", + "name": "mapl14805146fe3i016", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/4/1" + }, + "zero": { + "positionMm": [ + -62.04628944396973, + 56.50210380554199, + 775.352954864502 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/4/2", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/4", + "name": "mapl14805146fe3i431", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/4/2" + }, + "zero": { + "positionMm": [ + -6.041586399078369, + 54.02481555938721, + -313.0190372467041 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/5", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0", + "name": "MILL700-A-门2-JT1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/5" + }, + "zero": { + "positionMm": [ + 517.0004367828369, + -263.78095149993896, + -744.2798614501953 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/5/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/5", + "name": "mapl14805146fe3i197", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/5/0" + }, + "zero": { + "positionMm": [ + -78.32932472229004, + 165.7944917678833, + 817.5182342529297 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/5/0/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/5/0", + "name": "_126_807_34061712252_1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/5/0/0" + }, + "zero": { + "positionMm": [ + 0, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/5/0/1", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/5/0", + "name": "mapl14805146fe3i001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/5/0/1" + }, + "zero": { + "positionMm": [ + 648.3297348022461, + -211.74824237823486, + -1078.8166522979736 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/5/0/2", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/5/0", + "name": "mapl14805146fe3i196", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/5/0/2" + }, + "zero": { + "positionMm": [ + 101.07946395874023, + -114.5554780960083, + -789.954662322998 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/5/0/2/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/5/0/2", + "name": "_126_807_35301710201", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/5/0/2/0" + }, + "zero": { + "positionMm": [ + 0, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/5/0/2/1", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/5/0/2", + "name": "_126_807_35301710201_1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/5/0/2/1" + }, + "zero": { + "positionMm": [ + 0, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0", + "name": "MILL700-A底座", + "role": "base", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6" + }, + "zero": { + "positionMm": [ + 459.7148895263672, + 906.7631363868713, + -2320.876121520996 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6", + "name": "SHS25C100020_Track_TSXXX-0000058522001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/0" + }, + "zero": { + "positionMm": [ + 39.36731815338135, + 667.2102808952332, + 1206.9398164749146 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/1", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6", + "name": "底座002", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/1" + }, + "zero": { + "positionMm": [ + 2.282381057739258, + 382.2411298751831, + 456.71534538269043 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/2", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6", + "name": "底座009", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/2" + }, + "zero": { + "positionMm": [ + 323.70173931121826, + -1000.0901222229004, + 292.11002588272095 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/3", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6", + "name": "底座011", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/3" + }, + "zero": { + "positionMm": [ + -3093.5568809509277, + -2605.290651321411, + -2075.2453804016113 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/4", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6", + "name": "底座012", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/4" + }, + "zero": { + "positionMm": [ + 618.5640096664429, + -0.025063753128051758, + 520.3256011009216 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/5", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6", + "name": "底座015", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/5" + }, + "zero": { + "positionMm": [ + 838.29665184021, + -237.21277713775635, + 275.1512825489044 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/6", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6", + "name": "显示器001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/6" + }, + "zero": { + "positionMm": [ + -682.807445526123, + -1648.0319499969482, + 759.9776983261108 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/6/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/6", + "name": "mapl14805146fe3i-None1061424004", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/6/0" + }, + "zero": { + "positionMm": [ + -0.8423328399658203, + -13.741254806518555, + -113.4251356124878 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/6/0/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/6/0", + "name": "Mesh_66", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/6/0/0" + }, + "zero": { + "positionMm": [ + 0, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/6/0/1", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/6/0", + "name": "Mesh_66_1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/6/0/1" + }, + "zero": { + "positionMm": [ + 0, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/6/1", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/6", + "name": "mapl14805146fe3i-None1061424004001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/6/1" + }, + "zero": { + "positionMm": [ + -0.8423328399658203, + -13.741254806518555, + -113.4251356124878 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/6/2", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/6", + "name": "mapl14805146fe3i-None1061424004_1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/6/2" + }, + "zero": { + "positionMm": [ + -81.01844787597656, + -285.07375717163086, + -248.1238842010498 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/6/3", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/6", + "name": "平面", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/6/3" + }, + "zero": { + "positionMm": [ + -59.470415115356445, + -12.278079986572266, + 561.9646310806274 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/6/4", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/6", + "name": "平面001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/6/4" + }, + "zero": { + "positionMm": [ + 3.1015872955322266, + -22.612810134887695, + 530.0655364990234 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/7", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6", + "name": "移动柜", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/7" + }, + "zero": { + "positionMm": [ + -467.17357635498047, + 1571.4397430419922, + 533.7636470794678 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/7/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/7", + "name": "mapl14805146fe3i-None3286791910", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/7/0" + }, + "zero": { + "positionMm": [ + -21.704435348510742, + 3.5028457641601562, + 45.71419954299927 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/7/1", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/7", + "name": "mapl14805146fe3i-None3286791910001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/7/1" + }, + "zero": { + "positionMm": [ + -21.704435348510742, + 3.5028457641601562, + 45.71419954299927 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/7/2", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/7", + "name": "mapl14805146fe3i-None3286791910_1", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/7/2" + }, + "zero": { + "positionMm": [ + 408.51664543151855, + -30.3189754486084, + -459.0965211391449 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/7/3", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/7", + "name": "mapl14805146fe3i-None3286791910_1001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/7/3" + }, + "zero": { + "positionMm": [ + 408.51664543151855, + -30.3189754486084, + -459.0965211391449 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6", + "name": "立方体", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8" + }, + "zero": { + "positionMm": [ + 358.4332466125488, + 211.11465990543365, + 1708.8958024978638 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/0", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体001", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/0" + }, + "zero": { + "positionMm": [ + 19.999980926513672, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/1", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体002", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/1" + }, + "zero": { + "positionMm": [ + 59.999942779541016, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/2", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体003", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/2" + }, + "zero": { + "positionMm": [ + 39.999961853027344, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/3", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体004", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/3" + }, + "zero": { + "positionMm": [ + 119.99988555908203, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/4", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体005", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/4" + }, + "zero": { + "positionMm": [ + 139.9998664855957, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/5", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体006", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/5" + }, + "zero": { + "positionMm": [ + 99.99990463256836, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/6", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体007", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/6" + }, + "zero": { + "positionMm": [ + 79.99992370605469, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/7", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体008", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/7" + }, + "zero": { + "positionMm": [ + 240.00024795532227, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/8", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体009", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/8" + }, + "zero": { + "positionMm": [ + 260.00022888183594, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/9", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体010", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/9" + }, + "zero": { + "positionMm": [ + 300.0001907348633, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/10", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体011", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/10" + }, + "zero": { + "positionMm": [ + 280.0002098083496, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/11", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体012", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/11" + }, + "zero": { + "positionMm": [ + 200.00028610229492, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/12", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体013", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/12" + }, + "zero": { + "positionMm": [ + 220.0002670288086, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/13", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体014", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/13" + }, + "zero": { + "positionMm": [ + 180.00030517578125, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/14", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体015", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/14" + }, + "zero": { + "positionMm": [ + 160.00032424926758, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/15", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体016", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/15" + }, + "zero": { + "positionMm": [ + 320.00017166137695, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/16", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体017", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/16" + }, + "zero": { + "positionMm": [ + 340.0001525878906, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/17", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体018", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/17" + }, + "zero": { + "positionMm": [ + 380.0005912780762, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/18", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体019", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/18" + }, + "zero": { + "positionMm": [ + 360.0001335144043, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/19", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体020", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/19" + }, + "zero": { + "positionMm": [ + 440.000057220459, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/20", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体021", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/20" + }, + "zero": { + "positionMm": [ + 460.00051498413086, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/21", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体022", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/21" + }, + "zero": { + "positionMm": [ + 420.0005531311035, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/22", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体023", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/22" + }, + "zero": { + "positionMm": [ + 400.00009536743164, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/23", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体024", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/23" + }, + "zero": { + "positionMm": [ + -19.999980926513672, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/24", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体037", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/24" + }, + "zero": { + "positionMm": [ + -700.0000476837158, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/25", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体038", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/25" + }, + "zero": { + "positionMm": [ + -720.0000286102295, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/26", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体039", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/26" + }, + "zero": { + "positionMm": [ + -759.9999904632568, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/27", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体040", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/27" + }, + "zero": { + "positionMm": [ + -740.0000095367432, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/28", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体041", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/28" + }, + "zero": { + "positionMm": [ + -819.9999332427979, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/29", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体042", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/29" + }, + "zero": { + "positionMm": [ + -839.9999141693115, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/30", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体043", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/30" + }, + "zero": { + "positionMm": [ + -799.9999523162842, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/31", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体044", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/31" + }, + "zero": { + "positionMm": [ + -779.9999713897705, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/32", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体045", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/32" + }, + "zero": { + "positionMm": [ + -940.000057220459, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/33", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体046", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/33" + }, + "zero": { + "positionMm": [ + -959.9997997283936, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/34", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体047", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/34" + }, + "zero": { + "positionMm": [ + -999.9997615814209, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/35", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体048", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/35" + }, + "zero": { + "positionMm": [ + -979.9997806549072, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/36", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体049", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/36" + }, + "zero": { + "positionMm": [ + -900.0000953674316, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/37", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体050", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/37" + }, + "zero": { + "positionMm": [ + -920.0000762939453, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/38", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体051", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/38" + }, + "zero": { + "positionMm": [ + -880.000114440918, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/39", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体052", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/39" + }, + "zero": { + "positionMm": [ + -860.0001335144043, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/40", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体065", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/40" + }, + "zero": { + "positionMm": [ + -1020.0002193450928, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/41", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体066", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/41" + }, + "zero": { + "positionMm": [ + -1079.9999237060547, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/42", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体067", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/42" + }, + "zero": { + "positionMm": [ + -1099.9999046325684, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/43", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体068", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/43" + }, + "zero": { + "positionMm": [ + -1059.999942779541, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/44", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体069", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/44" + }, + "zero": { + "positionMm": [ + -1040.0002002716064, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/45", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体070", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/45" + }, + "zero": { + "positionMm": [ + -1160.0000858306885, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/46", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体071", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/46" + }, + "zero": { + "positionMm": [ + -1180.0000667572021, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/47", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体072", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/47" + }, + "zero": { + "positionMm": [ + -1220.0000286102295, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/48", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体073", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/48" + }, + "zero": { + "positionMm": [ + -1200.0000476837158, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/49", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体074", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/49" + }, + "zero": { + "positionMm": [ + -1140.0001049041748, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + }, + { + "id": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8/50", + "parentId": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/6/8", + "name": "立方体075", + "role": "", + "source": { + "file": "MILL700-U_1.glb", + "hash": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66", + "path": "scene/0/6/8/50" + }, + "zero": { + "positionMm": [ + -1119.999885559082, + 0, + 0 + ], + "quaternion": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "joint": null + } + ], + "axisMap": { + "X": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2", + "Y": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1", + "Z": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/2/1/0", + "B": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3", + "C": "8b54ca9d-e775-495a-bd90-281610531d62:scene/0/3/1" + } +} diff --git a/coverage/glb-machine-manager/document/saved-eight-parts.glb b/coverage/glb-machine-manager/document/saved-eight-parts.glb new file mode 100644 index 0000000..5701c7d Binary files /dev/null and b/coverage/glb-machine-manager/document/saved-eight-parts.glb differ diff --git a/coverage/glb-machine-manager/document/workbench.report.json b/coverage/glb-machine-manager/document/workbench.report.json new file mode 100644 index 0000000..bd37c9e --- /dev/null +++ b/coverage/glb-machine-manager/document/workbench.report.json @@ -0,0 +1,14 @@ +{ + "report_id": "GLB-MGR-E14", + "status": "verified", + "url": "http://127.0.0.1:5180/", + "checks": [ + "search expands real nested nodes; axis overview locates selection; binding undo/redo", + "empty input preserves last pose; repeated selection/input does not concatenate; single-axis step and reset", + "TRT forbidden offset blocks export before build; calibration undo/redo", + "view presets and selected fitting; deletion undo restores model with all axis bindings", + "failed batch import leaves existing assembly intact", + "live mode locks edits; desktop, short viewport and narrow viewport keep footer visible without overflow" + ], + "errors": [] +} diff --git a/docs/glb-machine-manager/01-项目功能内容.md b/docs/glb-machine-manager/01-项目功能内容.md index 93ee0d4..5dbbc35 100644 --- a/docs/glb-machine-manager/01-项目功能内容.md +++ b/docs/glb-machine-manager/01-项目功能内容.md @@ -58,3 +58,5 @@ 18. MGR-19:对话框第一步独立选择设计机床类型 XYZAC/XYZBC;控制面板切换不覆盖设计草稿。机型限制轴绑定、运动验证和标定。保存完整机床 GLB,供控制面板“导入机床模型”自动识别机型并使用。 19. MGR-20:导入/应用跨机型模型时同步加载目标机型默认 G 代码,程序路径、源码、预览与运行机型保持一致;同机型标定保留兼容程序。不兼容轴程序在加载及执行入口拒绝。 + +20. MGR-21 文档管理:新建、打开已保存机床、编辑控制面板机床;模型名称/说明;保存 GLB 同时提供浏览器下载和本地机床库副本;刷新后从库恢复,多部件文件分组、节点路径、层级覆盖、显隐、关节和标定完整回填。 diff --git a/docs/glb-machine-manager/02-项目程序开发详细步骤.md b/docs/glb-machine-manager/02-项目程序开发详细步骤.md index c576246..eb3b745 100644 --- a/docs/glb-machine-manager/02-项目程序开发详细步骤.md +++ b/docs/glb-machine-manager/02-项目程序开发详细步骤.md @@ -23,3 +23,5 @@ 16. `MGR-19`:把机型纳入草稿/撤销历史;添加首步机型选择;切换清理不适用倾转绑定;完整模型打开恢复机型;下载前调用控制面板读取器校验;验证从 AC 工作区导入 BC GLB 自动切换及 MILL700 两机型保存/运动闭环。 17. `MGR-20`:修正 applyGeometry 跨机型程序选择;加载前读取并验证目标程序;添加 Worker 轴兼容门控;测试双向模型导入、管理器应用、自定义程序保留、文件/编辑器拒绝和旧程序运行门控。 + +18. `MGR-21`:定义机床编辑文档元数据;重建原部件树再应用覆盖防止双重偏移;实现 IndexedDB 元数据/文件原子保存;文件页提供保存位置解释与恢复;测试刷新、再次保存等价、标准导入、旧版兼容、存储失败下载和 AC/BC 五轴回归。 diff --git a/docs/glb-machine-manager/03-推进台账.md b/docs/glb-machine-manager/03-推进台账.md index ce0eec9..5da12c2 100644 --- a/docs/glb-machine-manager/03-推进台账.md +++ b/docs/glb-machine-manager/03-推进台账.md @@ -119,3 +119,11 @@ - 新增共享 `programMachineMismatch`:检查文件机型标识和有效块中的不支持 A/B 轴字,忽略注释、命名参数、O 标签及表达式内部。通用三轴程序继续可用,不改写 A/B 指令。 - Worker 在 PROGRAM_LOAD 以及 RUN/STEP/RESUME 检查源程序与展开子程序;覆盖绕过 UI 和旧恢复程序。门控缓存源文本/机型/路径,避免每帧重复扫描大程序。 - E16 本地验证通过:AC→BC、BC→AC、管理器应用、错轴文件/编辑器拒绝、同机型保留、自定义程序与正确 BC 运行。11 个可加载 RTCP 目录程序、程序替换和单步回归通过。 + +## R15 / 2026-09-21 / 保存位置与机床文档恢复 + +- 原“保存”只有浏览器下载,无法从网页看到保存位置;新增明确下载说明和本浏览器机床库(IndexedDB),显示名称、机型、时间、大小、部件/关节数和校验摘要。 +- 增加文件与恢复页、新建机床、打开已保存机床、编辑控制面板机床、模型名称与设计说明、保存版本打开/再下载/删除。新建/打开仍可撤销。 +- 增加 `linuxcnc.machine-editor/1` GLB 元数据:原部件配置与源节点零姿态拓扑,打开时根据持久节点 ID 重建原始部件树,再应用编辑覆盖,避免合并分组与双重变换。校验恢复结果与运动 JSON 一致。 +- 文件和元数据在 IndexedDB 一次事务提交;写入失败仍允许下载并明确提示。库打开校验 SHA256;库副本独立于磁盘文件,清站点数据会删除库记录。 +- 8 部件文件往返测试已通过:刷新后逐项回填、再次保存元数据完全等价、控制面板导入再送回编辑、旧 GLB 兼容、存储失败反馈。MILL700 AC/BC 完整回归通过,各 8 个五轴动态 tick,浏览器错误 0。工作台布局与八部件生产回归通过。MGR-21 verified。 diff --git a/docs/glb-machine-manager/04-任务矩阵.md b/docs/glb-machine-manager/04-任务矩阵.md index c9a81a8..75bf38a 100644 --- a/docs/glb-machine-manager/04-任务矩阵.md +++ b/docs/glb-machine-manager/04-任务矩阵.md @@ -23,3 +23,4 @@ |MGR-18 工程化工作台体验|verified|MGR-17|层级搜索与定位、绑定总览、撤销/重做、输入校验、步骤页签、视图预设、单轴步进、实时跟随锁定、响应式布局和失败导入保护通过| |MGR-19 对话框机型与保存整机|verified|MGR-18|先在对话框选择设计机型;绑定/标定受机型约束;草稿独立/可撤销;保存完整 GLB 可由控制面板导入并自动切换机型| |MGR-20 机型程序一致性|verified|MGR-19|导入/应用跨机型时加载目标默认程序;同机型保留;错轴程序加载/运行/单步/继续拒绝;AC↔BC 浏览器及 Worker 验收通过| +|MGR-21 保存位置与完整文档恢复|verified|MGR-20|命名 GLB 下载与本地机床库;显式打开/刷新恢复;多部件配置精确回填;二次保存等价;标准导入、旧版兼容、存储失败和 AC/BC 回归| diff --git a/docs/glb-machine-manager/05-验收证据.md b/docs/glb-machine-manager/05-验收证据.md index 6c003fb..e4e4ad3 100644 --- a/docs/glb-machine-manager/05-验收证据.md +++ b/docs/glb-machine-manager/05-验收证据.md @@ -176,3 +176,17 @@ - `node web/worker/test_boat_trt_programs.mjs`:AC/BC 船形程序均完整运行至 completed;报告 `program-compatibility/boats.report.json`。 - E16 已发布 `0de96bb`,线上资源 `index-VAG1dzJ6.js`。线上重复 AC↔BC 模型导入/管理器应用、错误轴加载拒绝、同机型保留和 BC 运行,全部 verified、浏览器错误 0;`program-compatibility/cloud.report.json`、`deployment.report.json`。 + +## E17 / R15 / 文件保存与编辑文档恢复 + +- `node scripts/test_machine_document_browser.mjs`:GLB-MGR-E17 verified。测试命名保存、浏览器库原子保存、刷新再打开八个部件、层级覆盖/轴反向/显隐/原点辅助/标定/说明逐项恢复;二次保存的三个元数据对象完全等价。 +- 显式磁盘打开、库再次下载字节一致、删除仅影响副本、损坏编辑数据拒绝且保持现有草稿、控制面板标准导入再回到编辑器、旧文件兼容、存储故障时继续下载并显示失败信息全部通过;浏览器错误 0。 +- `JOINT_TEST_OUTPUT=.../coverage/glb-machine-manager/document/mill700 node scripts/test_machine_joint_dof_browser.mjs`:MILL700 AC/BC 各 8 个动态 tick;导出/打开/标准导入及实时映射 verified。 +- `test_machine_manager_workbench.mjs` 和生产 `test_machine_manager_browser.mjs` 通过;静态类型、构建、历史、数学、134→146 控件清单、双画布/XYZAC 契约通过。 + +|文件(相对 document)|SHA-256| +|---|---| +|`browser.report.json`|`5f45884a75acf14d7a3ecff6a9a50b306842216cb2c26f91d44a781aff3f0073`| +|`files-and-recovery.png`|`ae48e693668a8e100b81fa2cbfe1a6d4dbc21600a230994f73f2d85d2876e389`| +|`saved-eight-parts.glb`|`f155f46e6d5566e407a2f708a66ba61332366fb2ba5007b01ac99ed04494769e`| +|`mill700/browser.report.json`|`7f5c87b1a2d5491242aa87248d0cb4085e5d849065520ad56e4e64c6453216b2`| diff --git a/docs/glb-machine-manager/06-决策记录.md b/docs/glb-machine-manager/06-决策记录.md index 5631f40..69e46cf 100644 --- a/docs/glb-machine-manager/06-决策记录.md +++ b/docs/glb-machine-manager/06-决策记录.md @@ -71,3 +71,7 @@ GLB 树节点 ID 使用导入时的子节点索引路径,不使用可能重复 ## D18 / 跨机型加载匹配程序,不转换旋转轴 工作区切换会改变解释器轴语义,不能继续加载旧机型的 G 代码。跨机型导入/应用自动使用目标机型 catalog 指定的默认程序,目标资源在提交配置前读取和校验;同机型标定保留兼容源程序。禁止通过把 A 文本替换为 B 冒充程序适配。加载和执行门控由 Worker 再次校验,注释和参数名不算轴指令。校验范围是 AC/BC 机型隔离,完整 G 代码解析仍由 LinuxCNC WASM 负责。 + +## D19 / 可移植 GLB 与浏览器副本 + +完整机床文档以 GLB 为交付文件;普通网页不能读取浏览器下载文件的绝对磁盘路径,因此界面明确告知查看下载记录。保存时另存完整 GLB 到当前站点 IndexedDB,并提供列表恢复,不暗示上传云端或跨设备同步。每次保存为独立副本,删除库记录不删除磁盘文件或当前草稿。原始编辑拓扑/零姿态保存为 `linuxcnc.machine-editor/1`,与运行关节 JSON 并存;精确恢复原始多文件装配后再施加覆盖,不重复叠加。旧文件缺少编辑元数据时按兼容装配恢复并保留轴/标定。临时关节试动不保存,未完成绑定的会话草稿目前不做跨刷新自动恢复。 diff --git a/docs/glb-machine-manager/08-保存与重新打开机床.md b/docs/glb-machine-manager/08-保存与重新打开机床.md new file mode 100644 index 0000000..61d367b --- /dev/null +++ b/docs/glb-machine-manager/08-保存与重新打开机床.md @@ -0,0 +1,38 @@ +# 保存与重新打开机床 + +## 保存在哪里 + +“保存机床模型 GLB”会生成包含几何、层级、机型、单自由度轴绑定、正负方向、零姿态和标定的完整文件: + +- **磁盘文件**:发起浏览器下载。通常在系统“下载”目录;如果浏览器开启“每次询问保存位置”,则在用户选择的位置。浏览器下载记录可定位文件,网页不能获取其绝对路径,也不能验证用户是否取消了下载。 +- **本浏览器机床库**:保存成功时还会把相同 GLB 存入本网站的 IndexedDB。刷新页面后进入“文件与恢复”,可直接打开配置、重新下载或删除副本。列表显示保存时间、机型、大小及 SHA256 摘要,每次保存生成一个独立版本。 + +本地机床库不会自动上传云端;它只存在于同一浏览器、同一站点地址(包括协议和端口)。清理站点数据、隐私窗口退出或换设备会失去这些本地副本。因此磁盘 GLB 是重要的可移植保存方式。库保存失败时仍会下载 GLB,并显示失败信息。 + +## 再次打开和回填 + +1. 在“三维机床管理”点击“打开已保存机床”,选择之前下载的 GLB;或在“文件与恢复”的机床库点击“打开配置”。 +2. 新版保存文件恢复为原来的多个部件,回填原始部件名、父级关系、源节点路径、层级拖放覆盖、平移/姿态零位、节点结构角色、轴绑定、方向、正负向和显隐/坐标原点显示。 +3. 顶部自动恢复 XYZAC/XYZBC,标定页恢复 C 原点、A/B 偏置、物理零点;文件页恢复模型名称、设计说明。轴总览可定位相应节点。 +4. 打开操作替换当前草稿,原草稿可通过撤销恢复。关节试动值归零,不作为机床设计零姿态保存。 +5. “编辑控制面板机床”将控制面板已加载的受支持配置回填到管理器,不需要再次找磁盘文件;后续编辑不会自动改变正在运行的机床,仍需显式应用。 +6. 名称和说明在“文件与恢复”中修改;保存后生成新的 GLB 和本地版本。默认下载名为 `managed-xyzac.glb` 或 `managed-xyzbc.glb`,命名后为 `名称-xyzac.glb` 或 `名称-xyzbc.glb`。 + +旧版本机床 GLB 若缺少完整编辑数据,仍恢复已有装配层级、轴配置和标定;无法凭空恢复已丢失的原始多文件分组。普通几何 GLB 使用“导入 GLB 部件”,完整机床使用“打开已保存机床”。 + +## 提供给控制面板 + +控制面板关机且程序空闲 → “导入机床模型” → 选择保存的 GLB。文件内的机型会决定控制配置;跨 AC/BC 会加载对应机型默认程序。完成后重新回零再执行程序。 + +## 元数据 + +- `userData.linuxcncMachine`:原 URDF 控制框架。 +- `userData.linuxcncMachineGeometry`:C 原点、偏置、物理零点与部件配置。 +- `userData.linuxcncJointModel`:运行关节 ID、父链与轴映射。 +- `userData.linuxcncMachineEditor`:`linuxcnc.machine-editor/1`,包含 `info.name/description`、每个部件的 `settings`、原始 `sourceNodes`。源节点记录稳定路径、原点位置(米)、四元数、比例、名称和可见性。GLB 节点的 `linuxcncNodeId` 负责匹配实际几何。 + +加载新版文件时会重建源节点拓扑,再复用原装配逻辑应用设置,并对比恢复后的关节 JSON,防止错绑或双重偏移。源 GLB 文件不原地修改。 + +## 当前边界 + +本轮提供完整机床的保存/打开/本地版本恢复。尚未绑定完整五轴的会话草稿、撤销历史、相机视角和临时试动值不会跨刷新自动保存;关闭对话框但不刷新页面仍保留草稿。云端共享、权限审批、碰撞检查及其他机型运动学不属于本轮实现。 diff --git a/docs/glb-machine-manager/README.md b/docs/glb-machine-manager/README.md index dfc23b5..50146ed 100644 --- a/docs/glb-machine-manager/README.md +++ b/docs/glb-machine-manager/README.md @@ -11,7 +11,7 @@ 现有整机 GLB + 内嵌 URDF 导入能力继续保留。新管理器生成与现有 `linuxcnc.machine/1` 相同的严格结构,再通过已有配置、Worker、WASM 和 Three.js 投影链运行。 -当前状态:MGR-20 机型程序一致性 verified;MGR-19 对话框选择机型/整机保存已 verified;MGR-17、MGR-18 已 verified;MGR-01 至 MGR-16 已完成历史验收,MILL700 实测覆盖照明、Z-up、132 节点树、拖放、节点原点、关节局部坐标系、节点相对父级平移旋转、模型删除、轴绑定、XYZ/AC 层级运动和 WebGL 资源降级。最新台账 R14,证据 `GLB-MGR-E01/E02/E05/E07/E08/E09/E10/E12/E13/E14/E15/E16` 位于 `coverage/glb-machine-manager/`。 +当前状态:MGR-21 文件管理与恢复 verified;MGR-20 机型程序一致性 verified;MGR-19 对话框选择机型/整机保存已 verified;MGR-17、MGR-18 已 verified;MGR-01 至 MGR-16 已完成历史验收,MILL700 实测覆盖照明、Z-up、132 节点树、拖放、节点原点、关节局部坐标系、节点相对父级平移旋转、模型删除、轴绑定、XYZ/AC 层级运动和 WebGL 资源降级。最新台账 R15,证据 `GLB-MGR-E01/E02/E05/E07/E08/E09/E10/E12/E13/E14/E15/E16/E17` 位于 `coverage/glb-machine-manager/`。 文档: @@ -26,3 +26,5 @@ - [07-单自由度JSON与实时驱动](07-单自由度JSON与实时驱动.md) - [关节 JSON Schema](joint-model.schema.json) + +- [08-保存与重新打开机床](08-保存与重新打开机床.md) diff --git a/docs/linuxcnc-axis-web-control-panel-source-logic.md b/docs/linuxcnc-axis-web-control-panel-source-logic.md index adb9420..e8b0115 100644 --- a/docs/linuxcnc-axis-web-control-panel-source-logic.md +++ b/docs/linuxcnc-axis-web-control-panel-source-logic.md @@ -1083,3 +1083,7 @@ silently reproduced in the browser. ### MGR-19 document machine type `machine-manager-type`, `machine-manager-type-note`: select XYZAC/XYZBC inside the design dialog before configuring structure. Design type belongs to undoable draft state and is independent of the live controller. Saving validates the GLB through the standard importer; loading a full machine restores type, bindings and calibration, and the control panel switches workspace to match the imported model. + +### MGR-21 document save and recovery + +`machine-document-new`, `machine-document-open`, `machine-document-open-file`, `machine-document-from-controller`, `machine-document-name`, `machine-document-description`, `machine-document-location`, `machine-library-search`, `machine-library-open`, `machine-library-download`, `machine-library-delete`, `machine-manager-tab-files`: named GLB document, complete multi-part editor recovery, explicit file opening, immutable saved copies in browser IndexedDB, location/status information, download and delete. Controller model editing reads current effective calibration. GLB remains compatible with the standard importer. diff --git a/scripts/test_axis_control_inventory.mjs b/scripts/test_axis_control_inventory.mjs index eef6fa0..a84f9c5 100644 --- a/scripts/test_axis_control_inventory.mjs +++ b/scripts/test_axis_control_inventory.mjs @@ -13,7 +13,7 @@ const [contract, app, panel, preview] = await Promise.all([ const controlIds = [ "menu-file", "menu-file-edit-tool-data", "menu-file-quit", "menu-help", "menu-help-about", "about-close", "toolbar-estop", "toolbar-power", "toolbar-open", "toolbar-load-case", "toolbar-reload", "toolbar-run", "toolbar-step", "toolbar-pause-resume", "toolbar-stop", "toolbar-block-delete", "toolbar-optional-pause", "toolbar-zoom-in", "toolbar-zoom-out", "toolbar-view-z", "toolbar-view-z2", "toolbar-view-x", "toolbar-view-y", "toolbar-view-y2", "toolbar-view-p", "toolbar-rotate", "toolbar-clear-live-plot", - "workspace-case-select", "workspace-load-3d-chips", "workspace-rtcp-programs", "rtcp-program-scope", "rtcp-program-select", "rtcp-program-source", "rtcp-program-load", "rtcp-program-download", "machine-manager-settings", "machine-manager-type", "machine-manager-type-note", "machine-manager-import", "machine-manager-files", "machine-manager-delete", "machine-manager-role", "machine-manager-parent", "machine-manager-show-origin", "machine-tree-node", "machine-tree-origin", "machine-tree-axis-role", "machine-joint-direction", "machine-joint-sign", "machine-joint-value", "machine-joint-step-minus", "machine-joint-step-plus", "machine-joint-reset", "machine-joint-follow-live", "machine-joint-live-state", "machine-manager-export-json", "machine-manager-undo", "machine-manager-redo", "machine-manager-draft-state", "machine-tree-search", "machine-tree-expand", "machine-tree-collapse", "machine-manager-validation", "machine-test-x", "machine-test-y", "machine-test-z", "machine-test-a", "machine-test-b", "machine-test-c", "machine-test-reset", "machine-test-state", "machine-manager-apply", "machine-manager-export", "machine-manager-tab-structure", "machine-manager-tab-motion", "machine-manager-tab-calibration", "machine-view-fit", "machine-view-selected", "machine-view-front", "machine-view-top", "manual-home-all", "manual-home-joint-select", + "workspace-case-select", "workspace-load-3d-chips", "workspace-rtcp-programs", "rtcp-program-scope", "rtcp-program-select", "rtcp-program-source", "rtcp-program-load", "rtcp-program-download", "machine-manager-settings", "machine-document-new", "machine-document-open", "machine-document-open-file", "machine-document-from-controller", "machine-document-name", "machine-document-description", "machine-document-location", "machine-library-search", "machine-library-open", "machine-library-download", "machine-library-delete", "machine-manager-tab-files", "machine-manager-type", "machine-manager-type-note", "machine-manager-import", "machine-manager-files", "machine-manager-delete", "machine-manager-role", "machine-manager-parent", "machine-manager-show-origin", "machine-tree-node", "machine-tree-origin", "machine-tree-axis-role", "machine-joint-direction", "machine-joint-sign", "machine-joint-value", "machine-joint-step-minus", "machine-joint-step-plus", "machine-joint-reset", "machine-joint-follow-live", "machine-joint-live-state", "machine-manager-export-json", "machine-manager-undo", "machine-manager-redo", "machine-manager-draft-state", "machine-tree-search", "machine-tree-expand", "machine-tree-collapse", "machine-manager-validation", "machine-test-x", "machine-test-y", "machine-test-z", "machine-test-a", "machine-test-b", "machine-test-c", "machine-test-reset", "machine-test-state", "machine-manager-apply", "machine-manager-export", "machine-manager-tab-structure", "machine-manager-tab-motion", "machine-manager-tab-calibration", "machine-view-fit", "machine-view-selected", "machine-view-front", "machine-view-top", "manual-home-all", "manual-home-joint-select", "switchkins-0", "switchkins-1", "switchkins-2", "tab-manual", "tab-mdi", "tab-diagnostics", "tab-preview", "tab-dro", "manual-axis-x", "manual-axis-y", "manual-axis-z", "manual-axis-a", "manual-axis-c", diff --git a/scripts/test_machine_document_browser.mjs b/scripts/test_machine_document_browser.mjs new file mode 100644 index 0000000..c5e95f6 --- /dev/null +++ b/scripts/test_machine_document_browser.mjs @@ -0,0 +1,59 @@ +import assert from 'node:assert/strict'; +import { readFile,writeFile,mkdir } from 'node:fs/promises'; +import { pathToFileURL } from 'node:url'; +import * as THREE from '../web/react/node_modules/three/build/three.module.js'; +import { GLTFExporter } from '../web/react/node_modules/three/examples/jsm/exporters/GLTFExporter.js'; +globalThis.FileReader=class{readAsArrayBuffer(blob){blob.arrayBuffer().then(v=>{this.result=v;this.onloadend?.();});}readAsDataURL(blob){blob.arrayBuffer().then(v=>{this.result=`data:${blob.type};base64,${Buffer.from(v).toString('base64')}`;this.onloadend?.();});}}; +const fixtures=await Promise.all(Array.from({length:8},async(_,i)=>{const s=new THREE.Scene();s.name=`part_${i}`;const mesh=new THREE.Mesh(new THREE.BoxGeometry(.05,.05,.05),new THREE.MeshStandardMaterial({color:0x458e83}));mesh.name=`mesh_${i}`;mesh.position.set(.01,.02,.03);s.add(mesh);const extra=mesh.clone();extra.name=`extra_${i}`;extra.position.x=.07;s.add(extra);const b=await new GLTFExporter().parseAsync(s,{binary:true,trs:true});return{name:`part-${i}.glb`,mimeType:'model/gltf-binary',buffer:Buffer.from(b)};})); +const pw=await import(pathToFileURL(process.env.PLAYWRIGHT_MODULE??'/home/mes006/.npm/_npx/e41f203b7505f1fb/node_modules/playwright/index.js')); +const browser=await(pw.default??pw).chromium.launch({headless:true,executablePath:'/usr/bin/google-chrome',args:['--no-sandbox','--use-angle=swiftshader','--enable-unsafe-swiftshader']});const page=await browser.newPage({viewport:{width:1440,height:1000}}); +const out=new URL('../coverage/glb-machine-manager/document/',import.meta.url);await mkdir(out,{recursive:true}); +const report={report_id:'GLB-MGR-E17',status:'running',url:process.env.MACHINE_MANAGER_URL??'http://127.0.0.1:5180/',checks:[],errors:[]}; +page.on('pageerror',e=>report.errors.push(e.message));page.on('console',m=>{if(['error','warning'].includes(m.type()))report.errors.push(m.text());}); +const c=id=>page.locator(`[data-axis-control="${id}"]`),preview=page.locator('[data-machine-manager-preview]'); +const idle=()=>page.waitForFunction(()=>document.querySelector('main.axis-app')?.dataset.axisProgramLoading==='false'&&document.querySelector('main.axis-app')?.dataset.axisStateSource==='linuxcnc-wasm',null,{timeout:60000}); +const choose=async(name)=>{await c('machine-manager-tab-structure').click();await c('machine-tree-search').fill(name);await c('machine-tree-node').filter({has:page.locator('span').filter({hasText:new RegExp(`^${name}$`)})}).first().click();}; +const save=async()=>{const p=page.waitForEvent('download');await c('machine-manager-export').click();const d=await p;const bytes=await readFile(await d.path());return{bytes,filename:d.suggestedFilename(),json:JSON.parse(bytes.toString('utf8',20,20+bytes.readUInt32LE(12)))}}; +const editor=saved=>saved.json.scenes[0].extras.linuxcncMachineEditor; +try{ + await page.goto(report.url);await idle();await c('machine-manager-settings').click();await c('machine-manager-files').setInputFiles(fixtures);await page.waitForFunction(()=>document.querySelector('[data-machine-manager-preview]')?.dataset.machineManagerPartCount==='8'); + for(const[i,a]of[[1,'X'],[2,'Y'],[3,'Z'],[5,'A'],[6,'C']]){await choose(`part_${i}`);await c('machine-tree-axis-role').selectOption(a);} + await choose('part_3');await c('machine-joint-sign').selectOption('-1');await c('machine-manager-show-origin').uncheck(); + await choose('extra_3');const extra=c('machine-tree-node').filter({has:page.locator('span').filter({hasText:/^extra_3$/})}).first();const sourcePath=await extra.locator('xpath=ancestor::li[1]').getAttribute('data-machine-tree-path');const partId=await extra.locator('xpath=ancestor::li[1]').getAttribute('data-machine-tree-part'); + await c('machine-tree-search').fill('');const target=c('machine-tree-node').filter({has:page.locator('span').filter({hasText:/^mesh_3$/})}).first();const targetPath=await target.locator('xpath=ancestor::li[1]').getAttribute('data-machine-tree-path'); + await target.evaluate((el,p)=>{const d=new DataTransfer();d.setData('application/x-linuxcnc-machine-tree',JSON.stringify(p));el.dispatchEvent(new DragEvent('drop',{bubbles:true,cancelable:true,dataTransfer:d}));},{partId,path:sourcePath}); + await page.waitForFunction(({partId,sourcePath,targetPath})=>document.querySelector(`[data-machine-tree-part="${partId}"][data-machine-tree-path="${sourcePath}"]`)?.dataset.machineTreeParent===targetPath,{partId,sourcePath,targetPath}); + await choose('part_7');await page.locator('.machine-part-flags input').first().uncheck(); + await c('machine-manager-tab-calibration').click();const field=t=>page.locator('fieldset.machine-vector').filter({hasText:t});await field('C 轴原点').getByLabel('X',{exact:true}).fill('24');await field('A 到 C 轴偏置').getByLabel('Y',{exact:true}).fill('18');await page.locator('fieldset.machine-zero').getByLabel('A',{exact:true}).fill('12'); + await c('machine-manager-tab-files').click();await c('machine-document-name').fill('Workshop Mill');await c('machine-document-description').fill('Revision 2: calibrated A pivot');const first=await save();assert.equal(first.filename,'Workshop Mill-xyzac.glb');assert.equal(editor(first).parts.length,8);assert.equal(editor(first).info.description,'Revision 2: calibrated A pivot'); + await page.waitForFunction(()=>document.querySelectorAll('[data-machine-saved-id]').length===1);assert.match(await c('machine-document-location').textContent(),/下载.*本浏览器机床库/s); + const id=await page.locator('[data-machine-saved-id]').first().getAttribute('data-machine-saved-id');await writeFile(new URL('saved-eight-parts.glb',out),first.bytes); + await choose('part_3');await c('machine-manager-show-origin').check();assert.doesNotMatch(await c('machine-manager-draft-state').textContent(),/与保存版本一致/);await c('machine-manager-undo').click();assert.match(await c('machine-manager-draft-state').textContent(),/与保存版本一致/); + report.checks.push('named GLB downloads and atomic browser-library copy with time/size/checksum; editor display changes mark document dirty'); + await page.reload();await idle();await c('machine-manager-settings').click();await c('machine-manager-tab-files').click();await page.waitForFunction(()=>document.querySelectorAll('[data-machine-saved-id]').length===1);await c('machine-library-open').click();await page.waitForFunction(()=>document.querySelector('[data-machine-manager-preview]')?.dataset.machineManagerPartCount==='8'); + await choose('part_3');assert.equal(await c('machine-tree-axis-role').inputValue(),'Z');assert.equal(await c('machine-joint-sign').inputValue(),'-1');assert.equal(await c('machine-manager-show-origin').isChecked(),false); + await choose('part_7');assert.equal(await page.locator('.machine-part-flags input').first().isChecked(),false); + await c('machine-manager-tab-calibration').click();assert.equal(await field('C 轴原点').getByLabel('X',{exact:true}).inputValue(),'24');assert.equal(await field('A 到 C 轴偏置').getByLabel('Y',{exact:true}).inputValue(),'18');assert.equal(await page.locator('fieldset.machine-zero').getByLabel('A',{exact:true}).inputValue(),'12'); + await c('machine-manager-tab-files').click();assert.equal(await c('machine-document-name').inputValue(),'Workshop Mill');assert.equal(await c('machine-document-description').inputValue(),'Revision 2: calibrated A pivot'); + const second=await save();assert.deepEqual(editor(second),editor(first));assert.deepEqual(second.json.scenes[0].extras.linuxcncJointModel,first.json.scenes[0].extras.linuxcncJointModel);assert.deepEqual(second.json.scenes[0].extras.linuxcncMachineGeometry,first.json.scenes[0].extras.linuxcncMachineGeometry); + report.checks.push('reload and local-library open restore eight source files, exact edited hierarchy, axis/sign, visibility, origins and calibration; second save has identical metadata'); + await c('machine-document-new').click();assert.equal(await preview.getAttribute('data-machine-manager-part-count'),'0');await c('machine-document-open-file').setInputFiles({name:first.filename,mimeType:'model/gltf-binary',buffer:first.bytes});await page.waitForFunction(()=>document.querySelector('[data-machine-manager-preview]')?.dataset.machineManagerPartCount==='8'); + await c('machine-manager-tab-files').click();const dl=page.waitForEvent('download');await page.locator(`[data-machine-saved-id="${id}"] [data-axis-control="machine-library-download"]`).click();assert.deepEqual(await readFile(await(await dl).path()),first.bytes); + page.once('dialog',d=>d.accept());await page.locator(`[data-machine-saved-id="${id}"] [data-axis-control="machine-library-delete"]`).click();await page.waitForFunction(id=>!document.querySelector(`[data-machine-saved-id="${id}"]`),id);assert.equal(await preview.getAttribute('data-machine-manager-part-count'),'8'); + report.checks.push('explicit open-file entry restores document; library redownload is byte identical; delete affects only chosen saved copy'); + const damaged=structuredClone(first.json);damaged.scenes[0].extras.linuxcncMachineEditor.parts[3].settings.nodeJoints.scene.sign=1; + const text=Buffer.from(JSON.stringify(damaged));const pad=(4-text.length%4)%4;const jsonBytes=Buffer.concat([text,Buffer.alloc(pad,32)]);const oldLen=first.bytes.readUInt32LE(12),bin=first.bytes.subarray(20+oldLen),header=Buffer.alloc(20);first.bytes.copy(header,0,0,12);header.writeUInt32LE(20+jsonBytes.length+bin.length,8);header.writeUInt32LE(jsonBytes.length,12);header.writeUInt32LE(0x4e4f534a,16); + await c('machine-document-open-file').setInputFiles({name:'damaged.glb',mimeType:'model/gltf-binary',buffer:Buffer.concat([header,jsonBytes,bin])});await page.waitForFunction(()=>document.querySelector('.machine-manager-workbench')?.getAttribute('aria-busy')==='false');assert.equal(await preview.getAttribute('data-machine-manager-part-count'),'8');assert.match(await page.locator('.machine-manager-footer').textContent(),/无法读取/); + report.checks.push('inconsistent editor metadata is rejected atomically without replacing the current draft'); + await page.getByRole('button',{name:'清除操作消息'}).click();await page.screenshot({path:new URL('files-and-recovery.png',out).pathname}); + await page.keyboard.press('Escape');await c('machine-glb-settings').click();await c('machine-glb-file').setInputFiles({name:first.filename,mimeType:'model/gltf-binary',buffer:first.bytes});await page.waitForFunction(()=>document.querySelector('.xyzac-machine-view')?.dataset.machineJointState);await idle();await page.keyboard.press('Escape'); + await c('machine-manager-settings').click();await c('machine-document-new').click();await c('machine-document-from-controller').click();await page.waitForFunction(()=>document.querySelector('[data-machine-manager-preview]')?.dataset.machineManagerPartCount==='8');await choose('part_3');assert.equal(await c('machine-joint-sign').inputValue(),'-1'); + report.checks.push('saved GLB loads through control-panel importer and can be sent back into editor with eight original parts'); + // The legacy machine remains readable without editor-document metadata. + await c('machine-document-open-file').setInputFiles(new URL('../coverage/glb-machine-manager/machine-type/test-xyzbc.glb',import.meta.url).pathname);await page.waitForFunction(()=>document.querySelector('[data-axis-control="machine-manager-type"]')?.value==='XYZBC');assert.equal(await preview.getAttribute('data-machine-manager-part-count'),'1');report.checks.push('legacy GLB remains editable via single-assembly fallback'); + // A quota/IDB failure must still allow download and report exact persistence result. + await c('machine-manager-tab-files').click();await page.evaluate(()=>{indexedDB.open=()=>{throw new Error('quota');};});const fallback=await save();assert.ok(fallback.bytes.length>0);assert.match(await c('machine-document-location').textContent(),/未保存成功/); + report.checks.push('local storage failure does not prevent GLB download and is visibly reported'); + assert.deepEqual(report.errors,[]);report.status='verified'; +}catch(e){report.status='failed';report.error=e.stack;report.text=await page.locator('body').innerText().catch(()=> '');await page.screenshot({path:new URL('failure.png',out).pathname}).catch(()=>{});throw e;}finally{await writeFile(new URL('browser.report.json',out),JSON.stringify(report,null,2)+'\n');await browser.close();} +console.log(JSON.stringify(report)); diff --git a/web/react/src/App.tsx b/web/react/src/App.tsx index fd61753..c1462b2 100644 --- a/web/react/src/App.tsx +++ b/web/react/src/App.tsx @@ -895,7 +895,7 @@ export function App() { { void loadCase(path); }} /> -
+
{(["path", "live", "limits", "velocity", "offsets", "extents"] as const).map((layer) => )}
diff --git a/web/react/src/MachineManagerPanel.tsx b/web/react/src/MachineManagerPanel.tsx index b07312b..93f3e48 100644 --- a/web/react/src/MachineManagerPanel.tsx +++ b/web/react/src/MachineManagerPanel.tsx @@ -9,14 +9,16 @@ import { configureMachinePartScene, draftNodeDof, makeJointAssembly, reparentMac import { driveJoint, jointZero, defaultDof, isLinear, type JointDof, type CncAxis } from "./machine-joints"; import { projectXyzacVisual, type XyzacVisualSource } from "./xyzac-visual-adapter"; import { useMachineDraft, draftFingerprint, changeMachineType } from "./machine-manager-history"; +import { downloadMachine, listSavedMachines, saveMachineCopy, readMachineCopy, deleteMachineCopy, type SavedMachine } from "./machine-library"; +import { machineDocumentFilename } from "./machine-document"; import { MachineNumberInput } from "./MachineManagerInputs"; import { inspectMachineGlb, MAX_MACHINE_BYTES, type Vec3 } from "./machine-urdf"; -type Props = { snapshot?: XyzacVisualSource | null; coordinates: "XYZAC" | "XYZBC"; disabled: boolean; onApply: (machine: ImportedMachine) => Promise }; +type Props = { currentMachine?: ImportedMachine | null; snapshot?: XyzacVisualSource | null; coordinates: "XYZAC" | "XYZBC"; disabled: boolean; onApply: (machine: ImportedMachine) => Promise }; type TestPose = { x: number; y: number; z: number; a: number; b: number; c: number }; type MotionTransform = { local: number[]; localQuaternion: number[]; world: number[]; worldQuaternion: number[] }; const zero3 = (): Vec3 => [0, 0, 0]; -type EditorTab = "structure" | "motion" | "calibration"; +type EditorTab = "structure" | "motion" | "calibration" | "files"; type PreviewCommand = { action: "fit" | "selected" | "front" | "top"; serial: number }; const formatted = (value: number) => Number.isFinite(value) ? value.toFixed(3) : "—"; @@ -146,7 +148,7 @@ function TreeNode({ part, node, selected, onSelect, onDrop, extra, query, expans ; } -export function MachineManagerPanel({ coordinates: controllerCoordinates, disabled, onApply, snapshot }: Props) { +export function MachineManagerPanel({ coordinates: controllerCoordinates, disabled, onApply, snapshot, currentMachine }: Props) { const [open, setOpen] = useState(false), [pending, setPending] = useState(false), [message, setMessage] = useState(""); const { history, draft, edit, undo, redo } = useMachineDraft(controllerCoordinates); const { coordinates, parts, cOriginMm, tiltOffsetMm, physicalZero } = draft; @@ -154,7 +156,16 @@ export function MachineManagerPanel({ coordinates: controllerCoordinates, disabl const setCOriginMm = (value: Vec3) => edit((current) => ({ ...current, cOriginMm: value })); const setTiltOffsetMm = (value: Vec3) => edit((current) => ({ ...current, tiltOffsetMm: value })); const setPhysicalZero = (value: PhysicalZero) => edit((current) => ({ ...current, physicalZero: value })); - const file = useRef(null); + const file = useRef(null), openFile = useRef(null); + const documentInfo = draft.documentInfo ?? { name: "", description: "" }; + const [library, setLibrary] = useState([]), [libraryError, setLibraryError] = useState(""); + const [saveLocation, setSaveLocation] = useState("尚未保存文件"), [savedSignature, setSavedSignature] = useState(""); + const [libraryQuery, setLibraryQuery] = useState(""); + const refreshLibrary = useCallback(async () => { try { setLibrary(await listSavedMachines()); setLibraryError(""); } catch { setLibraryError("此浏览器无法使用本地机床库;仍可保存下载 GLB 并从磁盘打开。"); } }, []); + useEffect(() => { if (open) void refreshLibrary(); }, [open, refreshLibrary]); + const requestOpen = () => { if (!pending && !followLive) openFile.current?.click(); }; + const newDocument = () => { if (pending || followLive) return; edit(() => ({ coordinates, documentInfo: { name: "", description: "" }, parts: [], cOriginMm: [0, 0, 0], tiltOffsetMm: [0, 0, 0], physicalZero: { x: 0, y: 0, z: 0, a: 0, b: 0, c: 0 } })); setSelectedId(null); setQuery(""); setTab("structure"); setTestPose({ x: 0, y: 0, z: 0, a: 0, b: 0, c: 0 }); setSaveLocation("新建机床尚未保存;旧版本仍在本地机床库"); setMessage("已新建机床,原草稿可撤销恢复"); }; + const disposeSources = (sources: Awaited>[]) => { const scenes = new Set(sources.flatMap((source) => source.restoredParts?.map((part) => part.scene) ?? [source.scene])); scenes.forEach(disposeMachineScene); }; const [selectedId, setSelectedId] = useState(null), [selectedNodePath, setSelectedNodePath] = useState("scene"); const [tab, setTab] = useState("structure"), [query, setQuery] = useState(""); const [expansion, setExpansion] = useState({ all: false, serial: 0 }); @@ -183,32 +194,37 @@ export function MachineManagerPanel({ coordinates: controllerCoordinates, disabl const parentAllowed = (id: string, parentId: string | null) => { let cursor = parentId; const visited = new Set([id]); while (cursor) { if (visited.has(cursor)) return false; visited.add(cursor); cursor = parts.find((part) => part.id === cursor)?.parentId ?? null; } return true; }; const update = (id: string, values: Partial) => { if (pending || followLive) return; if (values.parentId && !parentAllowed(id, values.parentId)) { setMessage("不能将部件挂到自身或后代节点"); return; } setParts((current) => current.map((part) => part.id === id ? { ...part, ...values } : part)); setMessage(""); }; const vectorInput = (label: string, value: Vec3, set: (value: Vec3) => void, unit: string) =>
{label} ({unit}){["X", "Y", "Z"].map((axis, index) => )}
; - const importFiles = async (list: FileList | File[] | null) => { + const importFiles = async (list: FileList | File[] | null, savedOnly = false) => { if (!list?.length || pending || followLive) return; setPending(true); setMessage("正在读取 GLB 部件…"); try { const results = await Promise.allSettled([...list].map(async (item) => { if (!item.name.toLowerCase().endsWith(".glb") || item.size > 32 * 1024 * 1024) throw new Error(`${item.name}:请选择不超过 32 MiB 的 GLB`); try { return await loadMachinePart(await item.arrayBuffer(), item.name); } catch { throw new Error(`${item.name}:模型无法读取,请检查是否为完整的自包含 GLB,或配置是否与模型层级一致`); } })); const loaded = results.flatMap((result) => result.status === "fulfilled" ? [result.value] : []); const failure = results.find((result) => result.status === "rejected"); - if (failure?.status === "rejected") { loaded.forEach((source) => disposeMachineScene(source.scene)); throw failure.reason; } + if (failure?.status === "rejected") { disposeSources(loaded); throw failure.reason; } const restoredSources = loaded.filter((source) => source.restoredModel); - const restored = restoredSources[0]?.restoredModel; + const restoredSource = restoredSources[0]; + const restored = restoredSource?.restoredModel; + if (savedOnly && !restored) { disposeSources(loaded); throw new Error("请选择已保存的机床 GLB;普通几何部件请使用“导入 GLB 部件”"); } // A saved machine is opened as one document, not appended to another // machine. Raw component imports continue to append to this draft. if (restored && loaded.length !== 1) { - loaded.forEach((source) => disposeMachineScene(source.scene)); + disposeSources(loaded); throw new Error("完整机床 GLB 请单独打开;普通部件可批量导入"); } - edit((draft) => { + const nextDraft = (() => { const next = restored ? [] : [...draft.parts]; for (const source of loaded) { + if (source.restoredParts) { next.push(...source.restoredParts); continue; } const role = MACHINE_PART_ROLES.find((candidate) => !next.some((part) => part.role === candidate)) ?? ""; const parentRole = role ? expectedParentRole(role) : null; const parentId = parentRole ? next.find((part) => part.role === parentRole)?.id ?? null : null; next.push({ ...source, role, parentId, visible: true, showOrigin: true, originMm: zero3(), translationMm: zero3(), rotationDeg: zero3(), nodeParents: {}, nodeTransforms: {}, nodeJoints: source.restoredJoints ?? {}, nodeRoles: source.restoredRoles ?? {} }); } - return { ...draft, parts: next, ...(restored ? { coordinates: restored.coordinates, cOriginMm: restored.calibration.cOriginMm, tiltOffsetMm: restored.calibration.tiltOffsetMm, physicalZero: restored.calibration.physicalZero as PhysicalZero } : {}) }; - }); - setTab("structure"); setQuery(""); setSelectedId(loaded[0].id); setSelectedNodePath("scene"); setMessage(restored ? `已打开 ${restored.coordinates} 完整机床,恢复层级、关节和标定;原草稿可撤销恢复` : `已导入 ${loaded.length} 个部件`); + return { ...draft, parts: next, ...(restored ? { coordinates: restored.coordinates, documentInfo: restoredSource?.restoredInfo ?? { name: loaded[0].filename.replace(/\.glb$/i, ""), description: "" }, cOriginMm: restored.calibration.cOriginMm, tiltOffsetMm: restored.calibration.tiltOffsetMm, physicalZero: restored.calibration.physicalZero as PhysicalZero } : {}) }; + })(); + edit(() => nextDraft); + if (restored) setSavedSignature(nextDraft.coordinates + draftFingerprint(nextDraft)); + setTestPose({ x: 0, y: 0, z: 0, a: 0, b: 0, c: 0 }); setTab("structure"); setQuery(""); setSelectedId(loaded[0].restoredParts?.[0].id ?? loaded[0].id); setSelectedNodePath("scene"); if (restored) setSaveLocation(`已打开文件:${loaded[0].filename};可继续编辑并保存新版本`); setMessage(restored ? `已打开 ${restored.coordinates} 完整机床,恢复层级、关节和标定;原草稿可撤销恢复` : `已导入 ${loaded.length} 个部件`); } catch (error) { setMessage(error instanceof Error ? error.message : String(error)); } finally { setPending(false); } }; @@ -234,7 +250,7 @@ export function MachineManagerPanel({ coordinates: controllerCoordinates, disabl }; const apply = async () => { if (disabled || pending || followLive || blockingReason) return; setPending(true); setMessage("正在生成机床层级和 URDF…"); let machine: ImportedMachine | null = null; - try { machine = await buildManagedMachine({ coordinates, parts, cOriginMm, tiltOffsetMm, physicalZero }); await onApply(machine); setApplied(signature); setMessage("三维机床已应用;请重新回零后运行程序"); } + try { machine = await buildManagedMachine({ coordinates, parts, cOriginMm, tiltOffsetMm, physicalZero, documentInfo }); await onApply(machine); setApplied(signature); setMessage("三维机床已应用;请重新回零后运行程序"); } catch (error) { if (machine) disposeMachineScene(machine.scene); setMessage(error instanceof Error ? error.message : String(error)); } finally { setPending(false); } }; @@ -242,19 +258,62 @@ export function MachineManagerPanel({ coordinates: controllerCoordinates, disabl if (pending || followLive || blockingReason) return; setPending(true); setMessage("正在生成包含 userData 的组合 GLB…"); let machine: ImportedMachine | null = null; try { - machine = await buildManagedMachine({ coordinates, parts, cOriginMm, tiltOffsetMm, physicalZero }); + machine = await buildManagedMachine({ coordinates, parts, cOriginMm, tiltOffsetMm, physicalZero, documentInfo }); const exportScene = new THREE.Scene(); exportScene.name = machine.scene.name; exportScene.userData = machine.scene.userData; for (const child of machine.scene.children) exportScene.add(child.clone(true)); const bytes = await new GLTFExporter().parseAsync(exportScene, { binary: true, trs: true, onlyVisible: false }); if (!(bytes instanceof ArrayBuffer) || bytes.byteLength > MAX_MACHINE_BYTES) throw new Error("保存文件超过控制面板支持的 32 MiB,请减小模型后重试"); const saved = inspectMachineGlb(bytes); if (saved.structure.coordinates !== coordinates) throw new Error("保存模型的机型与当前配置不一致"); - const url = URL.createObjectURL(new Blob([bytes as ArrayBuffer], { type: "model/gltf-binary" })); - const link = document.createElement("a"); link.href = url; link.download = machine.filename; link.click(); setTimeout(() => URL.revokeObjectURL(url), 1000); - setExported(signature); setMessage(`已保存 managed-${coordinates.toLowerCase()}.glb,可在控制面板“导入机床模型”中加载,自动识别 ${coordinates} 和轴配置`); + const filename = machineDocumentFilename(documentInfo.name, coordinates); + let localCopy = false; + try { + const sha256 = [...new Uint8Array(await crypto.subtle.digest("SHA-256", bytes))].map((value) => value.toString(16).padStart(2, "0")).join(""); + await saveMachineCopy({ id: crypto.randomUUID(), name: documentInfo.name.trim() || `${coordinates} 机床`, filename, coordinates, savedAt: new Date().toISOString(), size: bytes.byteLength, sha256, partCount: parts.length, jointCount: bindings.length }, bytes); + localCopy = true; await refreshLibrary(); + } catch { setLibraryError("本地机床库保存失败,可能存储空间不足。已继续下载 GLB,请妥善保存下载文件。"); } + downloadMachine(bytes, filename); + setExported(signature); setSavedSignature(localCopy ? signature : ""); + setSaveLocation(`${filename}:已发起浏览器下载${localCopy ? ";同时保存到本浏览器机床库" : ";本地机床库未保存成功"}`); + setMessage(`已保存 ${filename}。磁盘位置见浏览器下载记录(通常为“下载”目录);${localCopy ? "下次可在“文件与恢复”直接打开。" : "请从磁盘打开恢复。"} 控制面板“导入机床模型”可使用此 GLB。`); + } catch (error) { setMessage(error instanceof Error ? error.message : String(error)); } finally { if (machine) disposeMachineScene(machine.scene); setPending(false); } }; + const openLibraryModel = async (entry: SavedMachine, download = false) => { + if (pending || (followLive && !download)) return; + setPending(true); + try { + const bytes = await readMachineCopy(entry.id); + if (!bytes) throw new Error("本地文件不存在,请从磁盘重新打开"); + const digest = [...new Uint8Array(await crypto.subtle.digest("SHA-256", bytes))].map((value) => value.toString(16).padStart(2, "0")).join(""); + if (digest !== entry.sha256) throw new Error("本地机床副本校验失败,请从磁盘备份重新打开"); + if (download) { downloadMachine(bytes, entry.filename); setMessage(`已再次下载 ${entry.filename},请在浏览器下载记录中查看位置`); } + else await importFiles([new File([bytes], entry.filename, { type: "model/gltf-binary" })], true); + } catch (error) { setMessage(error instanceof Error ? error.message : String(error)); } + finally { setPending(false); } + }; + const removeLibraryModel = async (entry: SavedMachine) => { + if (pending || !globalThis.confirm(`删除本浏览器机床库中的“${entry.name}”版本?磁盘下载文件和当前草稿不受影响。`)) return; + setPending(true); + try { await deleteMachineCopy(entry.id); await refreshLibrary(); setMessage("已删除本地保存版本"); } catch { setMessage("删除失败,请稍后重试"); } finally { setPending(false); } + }; + const editControllerModel = async () => { + if (!currentMachine || pending || followLive) return; + setPending(true); + try { + const scene = new THREE.Scene(); scene.userData = JSON.parse(JSON.stringify(currentMachine.scene.userData)); + // Geometry overrides belong to the current controller model even when its + // immutable source GLB was loaded before the override. + if (scene.userData.linuxcncJointModel) { + const offsets = currentMachine.structure.offsets; + scene.userData.linuxcncJointModel.calibration = { cOriginMm: [offsets.x_rot_point, offsets.y_rot_point, offsets.z_rot_point], tiltOffsetMm: [offsets.x_offset, offsets.y_offset, offsets.z_offset], physicalZero: { ...scene.userData.linuxcncJointModel.calibration.physicalZero, ...currentMachine.physicalZero } }; + } + for (const child of currentMachine.scene.children) scene.add(child.clone(true)); + const bytes = await new GLTFExporter().parseAsync(scene, { binary: true, trs: true, onlyVisible: false }); + await importFiles([new File([bytes as ArrayBuffer], currentMachine.filename, { type: "model/gltf-binary" })], true); + } catch (error) { setMessage(error instanceof Error ? error.message : String(error)); } finally { setPending(false); } + }; const roleChange = (part: MachinePartDraft, role: MachinePartRole | "") => { if (selectedNodePath !== "scene") { update(part.id, { nodeRoles: { ...part.nodeRoles, [selectedNodePath]: role } }); return; } const parentRole = role ? expectedParentRole(role) : null; @@ -297,15 +356,15 @@ export function MachineManagerPanel({ coordinates: controllerCoordinates, disabl edit((draft) => changeMachineType(draft, next)); setTab("structure"); setMessage(`设计机型已选择 ${next};保留模型层级和 XYZ/C 绑定,请重新配置 ${next[3]} 轴并核对标定。可撤销恢复。`); }}>
2 · 结构与关节 → 3 · 验证与标定 → 4 · 保存 GLB{coordinates === "XYZAC" ? "A 绕 X 倾转,C 绕 Z 回转" : "B 绕 Y 倾转,C 绕 Z 回转"} · 控制面板当前 {controllerCoordinates}{coordinates !== controllerCoordinates ? ";应用或导入模型时切换" : ""}
-
{parts.length} 个模型 · {bindings.filter((b) => coordinates.includes(b.dof.axis)).length}/5 轴已绑定{!parts.length ? "新建机床" : applied === signature ? "已应用当前配置" : exported === signature ? "已导出 · 尚未应用" : "配置尚未应用"}
+
{parts.length} 个模型 · {bindings.filter((b) => coordinates.includes(b.dof.axis)).length}/5 轴已绑定{!parts.length ? "新建机床" : savedSignature === signature ? "与保存版本一致" : applied === signature ? "已应用当前配置" : exported === signature ? "已导出 · 尚未应用" : "配置尚未应用"}
{[...coordinates].map((axis) => { const binding = bindings.find((b) => b.dof.axis === axis); return ; })}
{([ ["fit", "整机适配"], ["selected", "定位选中"], ["front", "正视"], ["top", "俯视"] ] as const).map(([action, label]) => )}Z ↑ · X 红 / Y 绿 / Z 蓝
{open && } - {!parts.length &&
建立机床的数字装配

选择机床类型 → 导入 GLB → 绑定关节 → 保存机床模型

支持完整层级 · 单文件不超过 32 MiB
} + {!parts.length &&
建立机床的数字装配

选择机床类型 → 导入 GLB → 绑定关节 → 保存机床模型

支持完整层级 · 单文件不超过 32 MiB{library.length > 0 && }
}

左键旋转 · 滚轮缩放 · 右键平移 · 选中关节显示局部坐标系

-
{([ ["structure", "结构与关节"], ["motion", "运动验证"], ["calibration", "机床标定"] ] as const).map(([id, label], index) => )}
+
{([ ["structure", "结构与关节"], ["motion", "运动验证"], ["calibration", "机床标定"], ["files", "文件与恢复"] ] as const).map(([id, label], index) => )}
+