refactor: update GCode Viewer to 3.1.0 (#847)

Co-authored-by: Stefan Dej <meteyou@gmail.com>
This commit is contained in:
Juan Rosario 2022-05-30 15:46:59 -05:00 committed by GitHub
parent 8b4d534e86
commit 9f4fb30b98
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 469 additions and 313 deletions

403
package-lock.json generated
View File

@ -18,7 +18,7 @@
"@codemirror/state": "^0.19.6",
"@codemirror/stream-parser": "^0.19.2",
"@codemirror/view": "^0.19.28",
"@sindarius/gcodeviewer": "^2.1.17",
"@sindarius/gcodeviewer": "^3.1.0",
"@types/node": "^16.11.22",
"@types/overlayscrollbars": "^1.12.1",
"axios": "^0.26.0",
@ -1876,43 +1876,49 @@
}
},
"node_modules/@babylonjs/core": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-4.2.2.tgz",
"integrity": "sha512-gAgetSyoxFZ/xzMVVnGPKaP941NHA59Ho8GGKFW98OTEp8yZcnzJjNOD2zfF1eKmlvR/6WwSmcrKWTJtPF1pyA==",
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-5.8.0.tgz",
"integrity": "sha512-1/p2XxuwoGStoEc0Nh0O4iBrSfWpRAYzkWXRqxjTqD/CU1bufZuHFLlBQp6GuVei33RU/yGjVI/W5d/rhSIXYA==",
"dependencies": {
"tslib": ">=1.10.0"
},
"engines": {
"node": "*"
"tslib": "^2.3.1"
}
},
"node_modules/@babylonjs/gui": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-4.2.2.tgz",
"integrity": "sha512-iFKnSb0m9Zz7oeD1LTZWE9Hxcp0QMytXZenLNgrbHOm8mo2V+Y6OiVEP9SpvZRqks6bTDTFrpfjMTy1DrZyTGQ==",
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-5.8.0.tgz",
"integrity": "sha512-uqrJiu2oqyYmY4IgGMfWx0vabUKjkb3PK/ZTO+75rYne6yFFOp5Wivyi03O3Ew+m69W7Igt/gwtVCMaAit+g6w==",
"dependencies": {
"@babylonjs/core": "4.2.2",
"tslib": ">=1.10.0"
"@babylonjs/core": "^5.8.0",
"tslib": "^2.3.1"
}
},
"node_modules/@babylonjs/gui-editor": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@babylonjs/gui-editor/-/gui-editor-5.8.0.tgz",
"integrity": "sha512-Fa/m+l8tOIeK81diylQ05t0+8JFYoW5Dm+mX7ekZKPNjViZIBDatsUHYiWBbwA0L2YLwYgADIO+NmhQZe1ns0g==",
"dependencies": {
"@babylonjs/core": "^5.8.0",
"@babylonjs/gui": "^5.8.0"
},
"engines": {
"node": "*"
"peerDependencies": {
"@types/react": ">=16.7.3",
"@types/react-dom": ">=16.0.9"
}
},
"node_modules/@babylonjs/inspector": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@babylonjs/inspector/-/inspector-4.2.2.tgz",
"integrity": "sha512-aTK9u+wKv9pvL+/ftRMQxIiwyvxUs4AF0RaN/WQgDRqLKdYf+NGCjc2NX5P4Krcs5hU6CD7CjyOIhhtJXGRk7g==",
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@babylonjs/inspector/-/inspector-5.8.0.tgz",
"integrity": "sha512-HJ/4iDdf5G5Jh67FLDlW+tNdKIMSB0NVrExXgY+Vgbj9AtIFqSR/WU2Zo2P3qNnCvq2w9AmDXxfJPkqVq+/hJw==",
"dependencies": {
"@babylonjs/core": "4.2.2",
"@babylonjs/gui": "4.2.2",
"@babylonjs/loaders": "4.2.2",
"@babylonjs/materials": "4.2.2",
"@babylonjs/serializers": "4.2.2",
"babylonjs-gltf2interface": "4.2.2",
"tslib": ">=1.10.0"
},
"engines": {
"node": "*"
"@babylonjs/core": "^5.8.0",
"@babylonjs/gui": "^5.8.0",
"@babylonjs/gui-editor": "^5.8.0",
"@babylonjs/loaders": "^5.8.0",
"@babylonjs/materials": "^5.8.0",
"@babylonjs/serializers": "^5.8.0",
"@fortawesome/fontawesome-svg-core": "^6.1.0",
"@fortawesome/free-regular-svg-icons": "^6.0.0",
"@fortawesome/free-solid-svg-icons": "^6.0.0"
},
"peerDependencies": {
"@types/react": ">=16.7.3",
@ -1920,41 +1926,32 @@
}
},
"node_modules/@babylonjs/loaders": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-4.2.2.tgz",
"integrity": "sha512-Qk8r4xp4eOznbX3AsNYv8HgwS+tzGu6TwSpDX4il3g0B+k1N5k6KE5ghrnwDytoxUDVjGZ/VKk2cQqiHsg/NLg==",
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-5.8.0.tgz",
"integrity": "sha512-8hA6xGlJcNvktJ7kzLZyNcWUaoy/LgINNjGKc1l6kvzf2sTLZ2xC0w8ZkHPlOB9Y7o4U4VNRvoxgtewYnTI+8g==",
"dependencies": {
"@babylonjs/core": "4.2.2",
"babylonjs-gltf2interface": "4.2.2",
"tslib": ">=1.10.0"
},
"engines": {
"node": "*"
"@babylonjs/core": "^5.8.0",
"babylonjs-gltf2interface": "^5.8.0",
"tslib": "^2.3.1"
}
},
"node_modules/@babylonjs/materials": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-4.2.2.tgz",
"integrity": "sha512-Y7umjVEYV5ZsLYVxgrkb5+4lPsz35acgOEqiZErFBdGXJw3AHJLJmalcmL5WXqUBR2SzyShFLCJOdbFQbkmaxg==",
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-5.8.0.tgz",
"integrity": "sha512-jXP6xFzhctt3zi7JSpLN0FM38P/BO6xfWFN+odnCcA+RZm66Pm9QhcCU3m6vbn/8fZuj3/u2HUve0LusdBr9XQ==",
"dependencies": {
"@babylonjs/core": "4.2.2",
"tslib": ">=1.10.0"
},
"engines": {
"node": "*"
"@babylonjs/core": "^5.8.0",
"tslib": "^2.3.1"
}
},
"node_modules/@babylonjs/serializers": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-4.2.2.tgz",
"integrity": "sha512-PEW09qqScaWV5c9UA44uY2YuF9aQJ6gYTMvjopul9YsiPoJolL4QrHO9OxikaYWQb7rgll3XukoRejhZ+HanTQ==",
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-5.8.0.tgz",
"integrity": "sha512-KZNK5p9dlSaEjeS/jH50pAD9liJjkQCdWg9SXc1l537wiJHSqBdkYQ1akgTrVIbYhrjr5sYh/4+Eh8qx378eBg==",
"dependencies": {
"@babylonjs/core": "4.2.2",
"babylonjs-gltf2interface": "4.2.2",
"tslib": ">=1.10.0"
},
"engines": {
"node": "*"
"@babylonjs/core": "^5.8.0",
"babylonjs-gltf2interface": "^5.8.0",
"tslib": "^2.3.1"
}
},
"node_modules/@codemirror/autocomplete": {
@ -2295,6 +2292,51 @@
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/@fortawesome/fontawesome-common-types": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.1.1.tgz",
"integrity": "sha512-wVn5WJPirFTnzN6tR95abCx+ocH+3IFLXAgyavnf9hUmN0CfWoDjPT/BAWsUVwSlYYVBeCLJxaqi7ZGe4uSjBA==",
"hasInstallScript": true,
"engines": {
"node": ">=6"
}
},
"node_modules/@fortawesome/fontawesome-svg-core": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.1.1.tgz",
"integrity": "sha512-NCg0w2YIp81f4V6cMGD9iomfsIj7GWrqmsa0ZsPh59G7PKiGN1KymZNxmF00ssuAlo/VZmpK6xazsGOwzKYUMg==",
"hasInstallScript": true,
"dependencies": {
"@fortawesome/fontawesome-common-types": "6.1.1"
},
"engines": {
"node": ">=6"
}
},
"node_modules/@fortawesome/free-regular-svg-icons": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.1.1.tgz",
"integrity": "sha512-xXiW7hcpgwmWtndKPOzG+43fPH7ZjxOaoeyooptSztGmJxCAflHZxXNK0GcT0uEsR4jTGQAfGklDZE5NHoBhKg==",
"hasInstallScript": true,
"dependencies": {
"@fortawesome/fontawesome-common-types": "6.1.1"
},
"engines": {
"node": ">=6"
}
},
"node_modules/@fortawesome/free-solid-svg-icons": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.1.1.tgz",
"integrity": "sha512-0/5exxavOhI/D4Ovm2r3vxNojGZioPwmFrKg0ZUH69Q68uFhFPs6+dhAToh6VEQBntxPRYPuT5Cg1tpNa9JUPg==",
"hasInstallScript": true,
"dependencies": {
"@fortawesome/fontawesome-common-types": "6.1.1"
},
"engines": {
"node": ">=6"
}
},
"node_modules/@humanwhocodes/config-array": {
"version": "0.9.5",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
@ -2683,14 +2725,15 @@
}
},
"node_modules/@sindarius/gcodeviewer": {
"version": "2.1.18",
"resolved": "https://registry.npmjs.org/@sindarius/gcodeviewer/-/gcodeviewer-2.1.18.tgz",
"integrity": "sha512-uGD5uozEfUjbQaJw2D4pr1+ai1+X6cNf6W1olpaO/R7Ijr9E4NXllsXMeTKYjeMynNdhElDuefTRC843+egAOA==",
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@sindarius/gcodeviewer/-/gcodeviewer-3.1.0.tgz",
"integrity": "sha512-SS9+tw16aPYi3UGwxUJL5uuBeYN42flYhfy2+4gBS2HPJnbrRXytlPywYRIFir9b1PI5sf9c4M+OEZPRdqYOXA==",
"dependencies": {
"@babylonjs/core": "^4.2.0",
"@babylonjs/inspector": "^4.2.0",
"@babylonjs/materials": "^4.2.0",
"d3": "^7.0.0"
"@babylonjs/core": "^5.8.0",
"@babylonjs/inspector": "^5.8.0",
"@babylonjs/loaders": "^5.8.0",
"@babylonjs/materials": "^5.8.0",
"d3": "^7.4.4"
}
},
"node_modules/@surma/rollup-plugin-off-main-thread": {
@ -2752,15 +2795,15 @@
"integrity": "sha512-V25YHbSoKQN35UasHf0EKD9U2vcmexRSp78qa8UglxFH8H3D+adEa9zGZwrqpH4TdvqeMrgMqVqsLB4woAryrQ=="
},
"node_modules/@types/prop-types": {
"version": "15.7.4",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz",
"integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==",
"version": "15.7.5",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
"integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
"peer": true
},
"node_modules/@types/react": {
"version": "17.0.40",
"resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.40.tgz",
"integrity": "sha512-UrXhD/JyLH+W70nNSufXqMZNuUD2cXHu6UjCllC6pmOQgBX4SGXOH8fjRka0O0Ee0HrFxapDD8Bwn81Kmiz6jQ==",
"version": "18.0.9",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz",
"integrity": "sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw==",
"peer": true,
"dependencies": {
"@types/prop-types": "*",
@ -2769,9 +2812,9 @@
}
},
"node_modules/@types/react-dom": {
"version": "17.0.13",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.13.tgz",
"integrity": "sha512-wEP+B8hzvy6ORDv1QBhcQia4j6ea4SFIBttHYpXKPFZRviBvknq0FRh3VrIxeXUmsPkwuXVZrVGG7KUVONmXCQ==",
"version": "18.0.5",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.5.tgz",
"integrity": "sha512-OWPWTUrY/NIrjsAPkAk1wW9LZeIjSvkXRhclsFO8CZcZGCOg2G0YZy4ft+rOyYxy8B7ui5iZzi9OkDebZ7/QSA==",
"peer": true,
"dependencies": {
"@types/react": "*"
@ -3554,12 +3597,9 @@
}
},
"node_modules/babylonjs-gltf2interface": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-4.2.2.tgz",
"integrity": "sha512-LCQgW1lM+EpKK4yWMiPEgi6ONwJ7W4JrSu3t9JixNRgvnic72OnN2f0bt91rE30EJr1ZaokvkXD/aEiBp/Juyg==",
"engines": {
"node": "*"
}
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-5.8.0.tgz",
"integrity": "sha512-60vqZ100RtwexfYnTD2CuKxOpKi8D0KCdU05GCU87BgV6ZavdmmDi04EsGYaH0AH8ygq3AusFyWFiuhTC0gCKQ=="
},
"node_modules/balanced-match": {
"version": "1.0.2",
@ -4094,9 +4134,9 @@
}
},
"node_modules/csstype": {
"version": "3.0.11",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz",
"integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==",
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz",
"integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==",
"peer": true
},
"node_modules/cypress": {
@ -4163,9 +4203,9 @@
"dev": true
},
"node_modules/d3": {
"version": "7.3.0",
"resolved": "https://registry.npmjs.org/d3/-/d3-7.3.0.tgz",
"integrity": "sha512-MDRLJCMK232OJQRqGljQ/gCxtB8k3/sLKFjftMjzPB3nKVUODpdW9Rb3vcq7U8Ka5YKoZkAmp++Ur6I+6iNWIw==",
"version": "7.4.4",
"resolved": "https://registry.npmjs.org/d3/-/d3-7.4.4.tgz",
"integrity": "sha512-97FE+MYdAlV3R9P74+R3Uar7wUKkIFu89UWMjEaDhiJ9VxKvqaMxauImy8PC2DdBkdM2BxJOIoLxPrcZUyrKoQ==",
"dependencies": {
"d3-array": "3",
"d3-axis": "3",
@ -4203,9 +4243,9 @@
}
},
"node_modules/d3-array": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.1.1.tgz",
"integrity": "sha512-33qQ+ZoZlli19IFiQx4QEpf2CBEayMRzhlisJHSCsSUbDXv6ZishqS1x7uFVClKG4Wr7rZVHvaAttoLow6GqdQ==",
"version": "3.1.6",
"resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.1.6.tgz",
"integrity": "sha512-DCbBBNuKOeiR9h04ySRBMW52TFVc91O9wJziuyXw6Ztmy8D3oZbmCkOO3UHKC7ceNJsN2Mavo9+vwV8EAEUXzA==",
"dependencies": {
"internmap": "1 - 2"
},
@ -4248,9 +4288,9 @@
}
},
"node_modules/d3-color": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.0.1.tgz",
"integrity": "sha512-6/SlHkDOBLyQSJ1j1Ghs82OIUXpKWlR0hCsw0XrLSQhuUPuCSmLQ1QPH98vpnQxMUQM2/gfAkUEWsupVpd9JGw==",
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
"integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
"engines": {
"node": ">=12"
}
@ -4381,9 +4421,9 @@
}
},
"node_modules/d3-hierarchy": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.1.tgz",
"integrity": "sha512-LtAIu54UctRmhGKllleflmHalttH3zkfSi4NlKrTAoFKjC+AFBJohsCAdgCBYQwH0F8hIOGY89X1pPqAchlMkA==",
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
"integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
"engines": {
"node": ">=12"
}
@ -10699,63 +10739,74 @@
}
},
"@babylonjs/core": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-4.2.2.tgz",
"integrity": "sha512-gAgetSyoxFZ/xzMVVnGPKaP941NHA59Ho8GGKFW98OTEp8yZcnzJjNOD2zfF1eKmlvR/6WwSmcrKWTJtPF1pyA==",
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-5.8.0.tgz",
"integrity": "sha512-1/p2XxuwoGStoEc0Nh0O4iBrSfWpRAYzkWXRqxjTqD/CU1bufZuHFLlBQp6GuVei33RU/yGjVI/W5d/rhSIXYA==",
"requires": {
"tslib": ">=1.10.0"
"tslib": "^2.3.1"
}
},
"@babylonjs/gui": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-4.2.2.tgz",
"integrity": "sha512-iFKnSb0m9Zz7oeD1LTZWE9Hxcp0QMytXZenLNgrbHOm8mo2V+Y6OiVEP9SpvZRqks6bTDTFrpfjMTy1DrZyTGQ==",
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-5.8.0.tgz",
"integrity": "sha512-uqrJiu2oqyYmY4IgGMfWx0vabUKjkb3PK/ZTO+75rYne6yFFOp5Wivyi03O3Ew+m69W7Igt/gwtVCMaAit+g6w==",
"requires": {
"@babylonjs/core": "4.2.2",
"tslib": ">=1.10.0"
"@babylonjs/core": "^5.8.0",
"tslib": "^2.3.1"
}
},
"@babylonjs/gui-editor": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@babylonjs/gui-editor/-/gui-editor-5.8.0.tgz",
"integrity": "sha512-Fa/m+l8tOIeK81diylQ05t0+8JFYoW5Dm+mX7ekZKPNjViZIBDatsUHYiWBbwA0L2YLwYgADIO+NmhQZe1ns0g==",
"requires": {
"@babylonjs/core": "^5.8.0",
"@babylonjs/gui": "^5.8.0"
}
},
"@babylonjs/inspector": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@babylonjs/inspector/-/inspector-4.2.2.tgz",
"integrity": "sha512-aTK9u+wKv9pvL+/ftRMQxIiwyvxUs4AF0RaN/WQgDRqLKdYf+NGCjc2NX5P4Krcs5hU6CD7CjyOIhhtJXGRk7g==",
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@babylonjs/inspector/-/inspector-5.8.0.tgz",
"integrity": "sha512-HJ/4iDdf5G5Jh67FLDlW+tNdKIMSB0NVrExXgY+Vgbj9AtIFqSR/WU2Zo2P3qNnCvq2w9AmDXxfJPkqVq+/hJw==",
"requires": {
"@babylonjs/core": "4.2.2",
"@babylonjs/gui": "4.2.2",
"@babylonjs/loaders": "4.2.2",
"@babylonjs/materials": "4.2.2",
"@babylonjs/serializers": "4.2.2",
"babylonjs-gltf2interface": "4.2.2",
"tslib": ">=1.10.0"
"@babylonjs/core": "^5.8.0",
"@babylonjs/gui": "^5.8.0",
"@babylonjs/gui-editor": "^5.8.0",
"@babylonjs/loaders": "^5.8.0",
"@babylonjs/materials": "^5.8.0",
"@babylonjs/serializers": "^5.8.0",
"@fortawesome/fontawesome-svg-core": "^6.1.0",
"@fortawesome/free-regular-svg-icons": "^6.0.0",
"@fortawesome/free-solid-svg-icons": "^6.0.0"
}
},
"@babylonjs/loaders": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-4.2.2.tgz",
"integrity": "sha512-Qk8r4xp4eOznbX3AsNYv8HgwS+tzGu6TwSpDX4il3g0B+k1N5k6KE5ghrnwDytoxUDVjGZ/VKk2cQqiHsg/NLg==",
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-5.8.0.tgz",
"integrity": "sha512-8hA6xGlJcNvktJ7kzLZyNcWUaoy/LgINNjGKc1l6kvzf2sTLZ2xC0w8ZkHPlOB9Y7o4U4VNRvoxgtewYnTI+8g==",
"requires": {
"@babylonjs/core": "4.2.2",
"babylonjs-gltf2interface": "4.2.2",
"tslib": ">=1.10.0"
"@babylonjs/core": "^5.8.0",
"babylonjs-gltf2interface": "^5.8.0",
"tslib": "^2.3.1"
}
},
"@babylonjs/materials": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-4.2.2.tgz",
"integrity": "sha512-Y7umjVEYV5ZsLYVxgrkb5+4lPsz35acgOEqiZErFBdGXJw3AHJLJmalcmL5WXqUBR2SzyShFLCJOdbFQbkmaxg==",
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-5.8.0.tgz",
"integrity": "sha512-jXP6xFzhctt3zi7JSpLN0FM38P/BO6xfWFN+odnCcA+RZm66Pm9QhcCU3m6vbn/8fZuj3/u2HUve0LusdBr9XQ==",
"requires": {
"@babylonjs/core": "4.2.2",
"tslib": ">=1.10.0"
"@babylonjs/core": "^5.8.0",
"tslib": "^2.3.1"
}
},
"@babylonjs/serializers": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-4.2.2.tgz",
"integrity": "sha512-PEW09qqScaWV5c9UA44uY2YuF9aQJ6gYTMvjopul9YsiPoJolL4QrHO9OxikaYWQb7rgll3XukoRejhZ+HanTQ==",
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-5.8.0.tgz",
"integrity": "sha512-KZNK5p9dlSaEjeS/jH50pAD9liJjkQCdWg9SXc1l537wiJHSqBdkYQ1akgTrVIbYhrjr5sYh/4+Eh8qx378eBg==",
"requires": {
"@babylonjs/core": "4.2.2",
"babylonjs-gltf2interface": "4.2.2",
"tslib": ">=1.10.0"
"@babylonjs/core": "^5.8.0",
"babylonjs-gltf2interface": "^5.8.0",
"tslib": "^2.3.1"
}
},
"@codemirror/autocomplete": {
@ -11092,6 +11143,35 @@
"strip-json-comments": "^3.1.1"
}
},
"@fortawesome/fontawesome-common-types": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.1.1.tgz",
"integrity": "sha512-wVn5WJPirFTnzN6tR95abCx+ocH+3IFLXAgyavnf9hUmN0CfWoDjPT/BAWsUVwSlYYVBeCLJxaqi7ZGe4uSjBA=="
},
"@fortawesome/fontawesome-svg-core": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.1.1.tgz",
"integrity": "sha512-NCg0w2YIp81f4V6cMGD9iomfsIj7GWrqmsa0ZsPh59G7PKiGN1KymZNxmF00ssuAlo/VZmpK6xazsGOwzKYUMg==",
"requires": {
"@fortawesome/fontawesome-common-types": "6.1.1"
}
},
"@fortawesome/free-regular-svg-icons": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.1.1.tgz",
"integrity": "sha512-xXiW7hcpgwmWtndKPOzG+43fPH7ZjxOaoeyooptSztGmJxCAflHZxXNK0GcT0uEsR4jTGQAfGklDZE5NHoBhKg==",
"requires": {
"@fortawesome/fontawesome-common-types": "6.1.1"
}
},
"@fortawesome/free-solid-svg-icons": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.1.1.tgz",
"integrity": "sha512-0/5exxavOhI/D4Ovm2r3vxNojGZioPwmFrKg0ZUH69Q68uFhFPs6+dhAToh6VEQBntxPRYPuT5Cg1tpNa9JUPg==",
"requires": {
"@fortawesome/fontawesome-common-types": "6.1.1"
}
},
"@humanwhocodes/config-array": {
"version": "0.9.5",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
@ -11398,14 +11478,15 @@
}
},
"@sindarius/gcodeviewer": {
"version": "2.1.18",
"resolved": "https://registry.npmjs.org/@sindarius/gcodeviewer/-/gcodeviewer-2.1.18.tgz",
"integrity": "sha512-uGD5uozEfUjbQaJw2D4pr1+ai1+X6cNf6W1olpaO/R7Ijr9E4NXllsXMeTKYjeMynNdhElDuefTRC843+egAOA==",
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@sindarius/gcodeviewer/-/gcodeviewer-3.1.0.tgz",
"integrity": "sha512-SS9+tw16aPYi3UGwxUJL5uuBeYN42flYhfy2+4gBS2HPJnbrRXytlPywYRIFir9b1PI5sf9c4M+OEZPRdqYOXA==",
"requires": {
"@babylonjs/core": "^4.2.0",
"@babylonjs/inspector": "^4.2.0",
"@babylonjs/materials": "^4.2.0",
"d3": "^7.0.0"
"@babylonjs/core": "^5.8.0",
"@babylonjs/inspector": "^5.8.0",
"@babylonjs/loaders": "^5.8.0",
"@babylonjs/materials": "^5.8.0",
"d3": "^7.4.4"
}
},
"@surma/rollup-plugin-off-main-thread": {
@ -11467,15 +11548,15 @@
"integrity": "sha512-V25YHbSoKQN35UasHf0EKD9U2vcmexRSp78qa8UglxFH8H3D+adEa9zGZwrqpH4TdvqeMrgMqVqsLB4woAryrQ=="
},
"@types/prop-types": {
"version": "15.7.4",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz",
"integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==",
"version": "15.7.5",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
"integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
"peer": true
},
"@types/react": {
"version": "17.0.40",
"resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.40.tgz",
"integrity": "sha512-UrXhD/JyLH+W70nNSufXqMZNuUD2cXHu6UjCllC6pmOQgBX4SGXOH8fjRka0O0Ee0HrFxapDD8Bwn81Kmiz6jQ==",
"version": "18.0.9",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz",
"integrity": "sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw==",
"peer": true,
"requires": {
"@types/prop-types": "*",
@ -11484,9 +11565,9 @@
}
},
"@types/react-dom": {
"version": "17.0.13",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.13.tgz",
"integrity": "sha512-wEP+B8hzvy6ORDv1QBhcQia4j6ea4SFIBttHYpXKPFZRviBvknq0FRh3VrIxeXUmsPkwuXVZrVGG7KUVONmXCQ==",
"version": "18.0.5",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.5.tgz",
"integrity": "sha512-OWPWTUrY/NIrjsAPkAk1wW9LZeIjSvkXRhclsFO8CZcZGCOg2G0YZy4ft+rOyYxy8B7ui5iZzi9OkDebZ7/QSA==",
"peer": true,
"requires": {
"@types/react": "*"
@ -12045,9 +12126,9 @@
}
},
"babylonjs-gltf2interface": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-4.2.2.tgz",
"integrity": "sha512-LCQgW1lM+EpKK4yWMiPEgi6ONwJ7W4JrSu3t9JixNRgvnic72OnN2f0bt91rE30EJr1ZaokvkXD/aEiBp/Juyg=="
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-5.8.0.tgz",
"integrity": "sha512-60vqZ100RtwexfYnTD2CuKxOpKi8D0KCdU05GCU87BgV6ZavdmmDi04EsGYaH0AH8ygq3AusFyWFiuhTC0gCKQ=="
},
"balanced-match": {
"version": "1.0.2",
@ -12433,9 +12514,9 @@
"dev": true
},
"csstype": {
"version": "3.0.11",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz",
"integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==",
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz",
"integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==",
"peer": true
},
"cypress": {
@ -12497,9 +12578,9 @@
}
},
"d3": {
"version": "7.3.0",
"resolved": "https://registry.npmjs.org/d3/-/d3-7.3.0.tgz",
"integrity": "sha512-MDRLJCMK232OJQRqGljQ/gCxtB8k3/sLKFjftMjzPB3nKVUODpdW9Rb3vcq7U8Ka5YKoZkAmp++Ur6I+6iNWIw==",
"version": "7.4.4",
"resolved": "https://registry.npmjs.org/d3/-/d3-7.4.4.tgz",
"integrity": "sha512-97FE+MYdAlV3R9P74+R3Uar7wUKkIFu89UWMjEaDhiJ9VxKvqaMxauImy8PC2DdBkdM2BxJOIoLxPrcZUyrKoQ==",
"requires": {
"d3-array": "3",
"d3-axis": "3",
@ -12534,9 +12615,9 @@
}
},
"d3-array": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.1.1.tgz",
"integrity": "sha512-33qQ+ZoZlli19IFiQx4QEpf2CBEayMRzhlisJHSCsSUbDXv6ZishqS1x7uFVClKG4Wr7rZVHvaAttoLow6GqdQ==",
"version": "3.1.6",
"resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.1.6.tgz",
"integrity": "sha512-DCbBBNuKOeiR9h04ySRBMW52TFVc91O9wJziuyXw6Ztmy8D3oZbmCkOO3UHKC7ceNJsN2Mavo9+vwV8EAEUXzA==",
"requires": {
"internmap": "1 - 2"
}
@ -12567,9 +12648,9 @@
}
},
"d3-color": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.0.1.tgz",
"integrity": "sha512-6/SlHkDOBLyQSJ1j1Ghs82OIUXpKWlR0hCsw0XrLSQhuUPuCSmLQ1QPH98vpnQxMUQM2/gfAkUEWsupVpd9JGw=="
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
"integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA=="
},
"d3-contour": {
"version": "3.0.1",
@ -12655,9 +12736,9 @@
}
},
"d3-hierarchy": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.1.tgz",
"integrity": "sha512-LtAIu54UctRmhGKllleflmHalttH3zkfSi4NlKrTAoFKjC+AFBJohsCAdgCBYQwH0F8hIOGY89X1pPqAchlMkA=="
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
"integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA=="
},
"d3-interpolate": {
"version": "3.0.1",

View File

@ -32,7 +32,7 @@
"@codemirror/state": "^0.19.6",
"@codemirror/stream-parser": "^0.19.2",
"@codemirror/view": "^0.19.28",
"@sindarius/gcodeviewer": "^2.1.17",
"@sindarius/gcodeviewer": "^3.1.0",
"@types/node": "^16.11.22",
"@types/overlayscrollbars": "^1.12.1",
"axios": "^0.26.0",

View File

@ -2,66 +2,52 @@
<style>
.viewer {
width: 100%;
height: calc(var(--app-height) - 266px);
height: calc(var(--app-height) - 240px);
border: 1px solid #3f3f3f;
}
.slider-autoheight,
.slider-autoheight .v-slider {
height: calc(var(--app-height) - 286px);
.withScrubber .viewer {
height: calc(var(--app-height) - 300px);
}
@media (min-width: 600px) and (max-width: 959px) {
.viewer {
height: calc(var(--app-height) - 318px);
height: calc(var(--app-height) - 295px);
}
.slider-autoheight,
.slider-autoheight .v-slider {
height: calc(var(--app-height) - 338px);
.withScrubber .viewer {
height: calc(var(--app-height) - 360px);
}
}
@media (max-width: 599px) {
.viewer {
height: calc(var(--app-height) - 356px);
height: calc(var(--app-height) - 340px);
}
.slider-autoheight,
.slider-autoheight .v-slider {
height: calc(var(--app-height) - 376px);
}
}
.slider-autoheight .v-slider {
margin-top: 0;
margin-bottom: 0;
}
.slider-autoheight .v-input__slot {
height: 100%;
.withScrubber .viewer {
height: calc(var(--app-height) - 340px);
}
}
</style>
<style scoped>
.progress-text {
font-size: small;
}
.progress-container {
position: absolute;
width: 80.5%;
}
.disable-transition {
transition: none !important;
}
.gcode-viewer-panel {
.scrubber {
position: relative;
left: 0;
right: 0;
bottom: 5px;
z-index: 19 !important;
}
</style>
<template>
<div>
<panel :title="$t('GCodeViewer.Title')" :icon="mdiVideo3d" card-class="gcode-viewer-panel">
<panel
:title="$t('GCodeViewer.Title')"
:icon="mdiVideo3d"
card-class="gcode-viewer-panel"
:margin-bottom="false">
<template #buttons>
<v-btn
v-show="reloadRequired"
@ -79,19 +65,36 @@
</v-btn>
</template>
<v-card-text>
<v-row>
<v-row :class="showScrubber ? 'withScrubber' : ''">
<v-col>
<div ref="viewerCanvasContainer"></div>
</v-col>
<v-col class="col-auto pr-6">
</v-row>
<v-row v-show="showScrubber" class="scrubber">
<v-col class="pt-0">
<v-slider
vertical
:disabled="loading || !loadedFile"
:max="maxZSlider"
:min="0"
:value="zSlider"
class="slider-autoheight mt-3"
@input="updateZSlider"></v-slider>
v-model="scrubPosition"
:hint="scrubPosition + '/' + scrubFileSize"
:max="scrubFileSize"
dense
min="0"
persistent-hint></v-slider>
</v-col>
<v-col class="col-auto pt-0 text-center">
<v-btn class="px-2 minwidth-0" color="primary" @click="scrubPlaying = !scrubPlaying">
<v-icon v-if="scrubPlaying">{{ mdiPause }}</v-icon>
<v-icon v-else>{{ mdiPlay }}</v-icon>
</v-btn>
<v-btn class="px-2 minwidth-0 mx-3" color="primary" @click="fastForward">
<v-icon>{{ mdiFastForward }}</v-icon>
</v-btn>
<v-btn-toggle v-model="scrubSpeed" class="mt-3 mt-sm-0" dense mandatory rounded>
<v-btn :value="1">1x</v-btn>
<v-btn :value="2">2x</v-btn>
<v-btn :value="5">5x</v-btn>
<v-btn :value="10">10x</v-btn>
<v-btn :value="20">20x</v-btn>
</v-btn-toggle>
</v-col>
</v-row>
<v-row class="mt-0 d-flex align-top">
@ -116,7 +119,10 @@
v-html="tracking ? mdiToggleSwitch : mdiToggleSwitchOffOutline"></v-icon>
{{ $t('GCodeViewer.Tracking') }}
</v-btn>
<v-btn @click="clearLoadedFile">{{ $t('GCodeViewer.ClearLoadedFile') }}</v-btn>
<v-btn @click="clearLoadedFile">
<v-icon left>{{ mdiBroom }}</v-icon>
{{ $t('GCodeViewer.ClearLoadedFile') }}
</v-btn>
</template>
</v-col>
<v-col class="col-12 col-sm-6 col-md-4">
@ -129,7 +135,7 @@
hide-details
outlined></v-select>
</v-col>
<v-col order-md="3" class="col-12 col-sm-6 col-md-4">
<v-col order-md="3" class="col-12 col-sm-6 col-md-4 d-flex">
<v-select
v-model="renderQuality"
:items="renderQualities"
@ -138,82 +144,82 @@
dense
hide-details
outlined></v-select>
<v-menu
:offset-y="true"
:offset-x="true"
top
:close-on-content-click="false"
:title="$t('Files.SetupCurrentList')">
<template #activator="{ on, attrs }">
<v-btn class="minwidth-0 px-2 ml-3" v-bind="attrs" v-on="on">
<v-icon>{{ mdiCog }}</v-icon>
</v-btn>
</template>
<v-list>
<v-list-item class="minHeight36">
<v-checkbox
v-model="showCursor"
class="mt-0"
hide-details
:label="$t('GCodeViewer.ShowToolhead')"></v-checkbox>
</v-list-item>
<v-list-item class="minHeight36">
<v-checkbox
v-model="showTravelMoves"
class="mt-0"
hide-details
:label="$t('GCodeViewer.ShowTravelMoves')"></v-checkbox>
</v-list-item>
<v-list-item
v-if="loadedFile === sdCardFilePath && printing_objects.length > 1"
class="minHeight36">
<v-checkbox
v-model="showObjectSelection"
class="mt-0"
hide-details
:label="$t('GCodeViewer.ShowObjectSelection')"></v-checkbox>
</v-list-item>
<v-divider></v-divider>
<v-list-item class="minHeight36">
<v-checkbox
v-model="hdRendering"
class="mt-0"
hide-details
:label="$t('GCodeViewer.HDRendering')"></v-checkbox>
</v-list-item>
<v-list-item class="minHeight36">
<v-checkbox
v-model="forceLineRendering"
class="mt-0"
hide-details
:label="$t('GCodeViewer.ForceLineRendering')"></v-checkbox>
</v-list-item>
<v-list-item class="minHeight36">
<v-checkbox
v-model="transparency"
class="mt-0"
hide-details
:label="$t('GCodeViewer.Transparency')"></v-checkbox>
</v-list-item>
<v-list-item class="minHeight36">
<v-checkbox
v-model="voxelMode"
class="mt-0"
hide-details
:label="$t('GCodeViewer.VoxelMode')"></v-checkbox>
</v-list-item>
<v-list-item class="minHeight36">
<v-checkbox
v-model="specularLighting"
class="mt-0"
hide-details
:label="$t('GCodeViewer.SpecularLighting')"></v-checkbox>
</v-list-item>
</v-list>
</v-menu>
</v-col>
</v-row>
</v-col>
<v-menu
:offset-y="true"
:offset-x="true"
top
:close-on-content-click="false"
:title="$t('Files.SetupCurrentList')">
<template #activator="{ on, attrs }">
<v-btn class="minwidth-0 px-2 mr-3 mt-3" v-bind="attrs" v-on="on">
<v-icon>{{ mdiCog }}</v-icon>
</v-btn>
</template>
<v-list>
<v-list-item class="minHeight36">
<v-checkbox
v-model="showCursor"
class="mt-0"
hide-details
:label="$t('GCodeViewer.ShowToolhead')"></v-checkbox>
</v-list-item>
<v-list-item class="minHeight36">
<v-checkbox
v-model="showTravelMoves"
class="mt-0"
hide-details
:label="$t('GCodeViewer.ShowTravelMoves')"></v-checkbox>
</v-list-item>
<v-list-item
v-if="loadedFile === sdCardFilePath && printing_objects.length > 1"
class="minHeight36">
<v-checkbox
v-model="showObjectSelection"
class="mt-0"
hide-details
:label="$t('GCodeViewer.ShowObjectSelection')"></v-checkbox>
</v-list-item>
<v-divider></v-divider>
<v-list-item class="minHeight36">
<v-checkbox
v-model="hdRendering"
class="mt-0"
hide-details
:label="$t('GCodeViewer.HDRendering')"></v-checkbox>
</v-list-item>
<v-list-item class="minHeight36">
<v-checkbox
v-model="forceLineRendering"
class="mt-0"
hide-details
:label="$t('GCodeViewer.ForceLineRendering')"></v-checkbox>
</v-list-item>
<v-list-item class="minHeight36">
<v-checkbox
v-model="transparency"
class="mt-0"
hide-details
:label="$t('GCodeViewer.Transparency')"></v-checkbox>
</v-list-item>
<v-list-item class="minHeight36">
<v-checkbox
v-model="voxelMode"
class="mt-0"
hide-details
:label="$t('GCodeViewer.VoxelMode')"></v-checkbox>
</v-list-item>
<v-list-item class="minHeight36">
<v-checkbox
v-model="specularLighting"
class="mt-0"
hide-details
:label="$t('GCodeViewer.SpecularLighting')"></v-checkbox>
</v-list-item>
</v-list>
</v-menu>
</v-row>
<input
ref="fileInput"
@ -280,6 +286,10 @@ import {
mdiToggleSwitch,
mdiToggleSwitchOffOutline,
mdiVideo3d,
mdiPlay,
mdiPause,
mdiFastForward,
mdiBroom,
} from '@mdi/js'
import { Debounce } from 'vue-debounce-decorator'
@ -311,6 +321,10 @@ export default class Viewer extends Mixins(BaseMixin) {
mdiClose = mdiClose
mdiCog = mdiCog
mdiVideo3d = mdiVideo3d
mdiPlay = mdiPlay
mdiPause = mdiPause
mdiFastForward = mdiFastForward
mdiBroom = mdiBroom
formatFilesize = formatFilesize
@ -323,11 +337,14 @@ export default class Viewer extends Mixins(BaseMixin) {
private reloadRequired = false
private fileSize = 0
private maxZSlider = 100000
private zSlider = this.maxZSlider
private zSlicerHeight = 100
private renderQuality = this.renderQualities[2]
private scrubPosition = 0
private scrubPlaying = false
private scrubSpeed = 1
private scrubInterval: ReturnType<typeof setInterval> | undefined = undefined
private scrubFileSize = 0
private downloadSnackbar: downloadSnackbar = {
status: false,
filename: '',
@ -362,8 +379,9 @@ export default class Viewer extends Mixins(BaseMixin) {
async mounted() {
this.loadedFile = this.$store.state.gcodeviewer?.loadedFileBackup ?? null
viewer = this.$store.state.gcodeviewer?.viewerBackup ?? null
await this.init()
if (this.loadedFile !== null) this.scrubFileSize = viewer.fileSize
}
beforeDestroy() {
@ -372,6 +390,12 @@ export default class Viewer extends Mixins(BaseMixin) {
this.$store.dispatch('gcodeviewer/setLoadedFileBackup', this.loadedFile)
this.$store.dispatch('gcodeviewer/setViewerBackup', viewer)
}
this.scrubPlaying = false
if (this.scrubInterval) {
clearInterval(this.scrubInterval)
this.scrubInterval = undefined
}
}
@Debounce(200)
@ -424,22 +448,20 @@ export default class Viewer extends Mixins(BaseMixin) {
}
}
if (viewer === null) {
await this.viewerInit(canvasElement)
}
if (viewer === null) await this.viewerInit(canvasElement)
this.registerProgressCallback()
if (this.$route.query?.filename && this.loadedFile !== this.$route.query?.filename?.toString()) {
//TODO: test without sleep
await this.sleep(1000) //Give the store a chance to initializ before loading the file.
await this.sleep(1000) //Give the store a chance to initialize before loading the file.
await this.loadFile(this.$route.query.filename.toString())
}
}
viewerInit(element: HTMLCanvasElement) {
async viewerInit(element: HTMLCanvasElement) {
viewer = new GCodeViewer(element)
viewer.init()
await viewer.init()
viewer.setBackgroundColor(this.backgroundColor)
viewer.bed.setBedColor(this.gridColor)
viewer.setCursorVisiblity(this.showCursor)
@ -495,6 +517,8 @@ export default class Viewer extends Mixins(BaseMixin) {
clearLoadedFile() {
if (viewer) {
this.scrubPlaying = false
this.scrubFileSize = 0
viewer.clearScene(true)
this.loadedFile = null
this.tracking = false
@ -508,8 +532,6 @@ export default class Viewer extends Mixins(BaseMixin) {
}
finishLoad() {
this.maxZSlider = viewer.getMaxHeight() + 1
this.zSlider = this.maxZSlider
this.loading = false
viewer.setCursorVisiblity(this.showCursor)
@ -531,6 +553,7 @@ export default class Viewer extends Mixins(BaseMixin) {
viewer.buildObjects.loadObjectBoundaries(objects)
viewer.buildObjects.showObjectSelection(this.showObjectSelection)
}
this.scrubFileSize = viewer.fileSize
viewer.gcodeProcessor.updateFilePosition(viewer.fileSize)
}
@ -593,6 +616,7 @@ export default class Viewer extends Mixins(BaseMixin) {
await viewer.processFile(text)
this.loadingPercent = 100
this.finishLoad()
this.scrubFileSize = viewer.fileSize
}
cancelDownload() {
@ -672,8 +696,7 @@ export default class Viewer extends Mixins(BaseMixin) {
async trackingChanged(newVal: boolean) {
if (!viewer) return
if (newVal) {
//Set zSlider to max value
this.zSlider = this.maxZSlider
this.scrubPlaying = false
//Force renderers reload.
viewer.gcodeProcessor.updateFilePosition(0)
viewer?.forceRender()
@ -989,12 +1012,6 @@ export default class Viewer extends Mixins(BaseMixin) {
}
}
@Watch('zSlider')
zSliderChanged(newVal: number) {
viewer?.setZClipPlane(newVal, -1)
viewer?.forceRender()
}
get progressColor() {
return this.$store.state.gui.gcodeViewer?.progressColor ?? '#FFFFFF'
}
@ -1004,8 +1021,46 @@ export default class Viewer extends Mixins(BaseMixin) {
viewer?.setProgressColor(newVal)
}
updateZSlider(newVal: any) {
this.zSlider = newVal
@Watch('scrubPlaying')
scrubPlayingChanged(to: boolean): void {
if (to) {
if (this.scrubInterval) {
clearInterval(this.scrubInterval)
this.scrubInterval = undefined
}
this.scrubPlaying = true
if (this.scrubPosition >= this.scrubFileSize) {
this.scrubPosition = 0
}
viewer.gcodeProcessor.updateFilePosition(this.scrubPosition - 30000)
this.scrubInterval = setInterval(() => {
this.scrubPosition += 100 * this.scrubSpeed
viewer.gcodeProcessor.updateFilePosition(this.scrubPosition)
if (this.tracking || this.scrubPosition >= this.scrubFileSize) {
this.scrubPlaying = false
}
}, 200)
} else {
if (this.scrubInterval) clearInterval(this.scrubInterval)
this.scrubPlaying = false
this.scrubInterval = undefined
}
}
get showScrubber() {
return !this.tracking && this.scrubFileSize > 0
}
@Debounce(200)
@Watch('scrubPosition')
updateScrubPosition(to: number): void {
if (!this.tracking) viewer.gcodeProcessor.updateFilePosition(to)
}
fastForward(): void {
this.scrubPosition = this.scrubFileSize
viewer.gcodeProcessor.updateFilePosition(this.scrubPosition)
}
}
</script>

View File

@ -1321,7 +1321,7 @@ export default class GcodefilesPanel extends Mixins(BaseMixin) {
}
view3D(item: FileStateFile) {
this.$router.push({ path: '/viewer', query: { filename: this.currentPath + '/' + item.filename } })
this.$router.push({ path: '/viewer', query: { filename: 'gcodes' + this.currentPath + '/' + item.filename } })
}
deleteSelectedFiles() {

View File

@ -37,6 +37,24 @@
</v-menu>
</settings-row>
<v-divider class="my-2"></v-divider>
<settings-row :title="$t('Settings.GCodeViewerTab.ProgressColor')">
<v-menu :close-on-content-click="false" bottom left offset-y>
<template #activator="{ on, attrs }">
<v-btn
:color="progressColor"
class="minwidth-0 px-5"
small
v-bind="attrs"
v-on="on"></v-btn>
</template>
<v-color-picker
:value="progressColor"
hide-mode-switch
mode="rgba"
@update:color="updateColorValue('progressColor', $event)"></v-color-picker>
</v-menu>
</settings-row>
<v-divider class="my-2"></v-divider>
<settings-row :title="$t('Settings.GCodeViewerTab.ExtruderColor')">
<v-row no-gutters>
<v-menu
@ -172,6 +190,14 @@ export default class SettingsGCodeViewerTab extends Mixins(BaseMixin) {
this.$store.dispatch('gui/saveSetting', { name: 'gcodeViewer.gridColor', value: newVal })
}
get progressColor(): string {
return this.$store.state.gui.gcodeViewer.progressColor
}
set progressColor(newVal: string) {
this.$store.dispatch('gui/saveSetting', { name: 'gcodeViewer.progressColor', value: newVal })
}
@Debounce(500)
updateColorValue(colorElement: string, newVal: any): void {
Vue.set(this, colorElement, this.clearColorObject(newVal))
@ -219,13 +245,5 @@ export default class SettingsGCodeViewerTab extends Mixins(BaseMixin) {
if (this.minFeed < 1) this.minFeed = 1
if (this.maxFeed < this.minFeed) this.maxFeed = this.minFeed + 1
}
get progressColor(): string {
return this.$store.state.gui.gcodeViewer.progressColor
}
set progressColor(newVal: string) {
this.$store.dispatch('gui/saveSetting', { name: 'gcodeViewer.progressColor', value: newVal })
}
}
</script>

View File

@ -724,6 +724,7 @@
"GridColor": "Gitterfarbe",
"MaxFeed": "Max Vorschub",
"MinFeed": "Min Vorschub",
"ProgressColor": "Fortschrittsfarbe",
"ShowAxes": "Zeige Achsen an"
},
"GeneralTab": {

View File

@ -772,6 +772,7 @@
"GridColor": "Grid Color",
"MaxFeed": "Max Feed Rate",
"MinFeed": "Min Feed Rate",
"ProgressColor": "Progress Color",
"ShowAxes": "Show Axes"
},
"GeneralTab": {

View File

@ -118,7 +118,7 @@ export const getDefaultState = (): GuiState => {
maxFeed: 100,
minFeedColor: '#2196f3',
maxFeedColor: '#D41216',
progressColor: '#FFFFFFB2',
progressColor: '#ECECEC',
showCursor: true,
showTravelMoves: false,
showObjectSelection: false,