diff --git a/apps.json b/apps.json index b5584b55c..57f2d1e1e 100644 --- a/apps.json +++ b/apps.json @@ -2142,5 +2142,21 @@ {"name": "counter.app.js", "url": "counter.js"}, {"name": "counter.img", "url": "counter-icon.js", "evaluate": true} ] - } + }, + { "id": "viewstl", + "name": "STL file viewer", + "shortName":"ViewSTL", + "icon": "icons8-octahedron-48.png", + "version":"0.01", + "description": "This app allows you to view STL 3D models on your watch", + "tags": "tool", + "readme": "README.md", + "storage": [ + {"name":"viewstl.app.js","url":"viewstl.min.js"}, + {"name":"viewstl.img","url":"viewstl-icon.js","evaluate":true}, + {"name":"tetra.stl","url":"tetra.stl"}, + {"name":"cube.stl","url":"cube.stl"}, + {"name":"icosa.stl","url":"icosa.stl"} + ] + } ] diff --git a/apps/viewstl/README.md b/apps/viewstl/README.md new file mode 100644 index 000000000..bd54f15bb --- /dev/null +++ b/apps/viewstl/README.md @@ -0,0 +1,23 @@ +# ViewSTL + +A simple viewer to render 3D models on-screen. The STL files have to be of the ASCII (non-binary) type. The rendering process can become quite slow +for models with more than ~200-300 facets. + +The app contains a number of inlined C routines and makes use of the microcontroller's FPU. Therefore, the app installed on the watch contains a base64 encoded binary +blob with those routines. The full C code is provided on github. + +## Controls + +The app supports 4 different rendering modes, swiping right-to-left on the touch screen cycles through them: +- shaded polygons +- shaded polygons with edge highlighting +- wireframe, only edges between non-coplanar facets visible +- wireframe, all facet (triangle) edges visible + +There are two different rotation modes that slightly alter the function of buttons 1 and 3, swiping left-to-right toggles between the two modes: +- free rotation: button 1 zooms in, button 3 out +- Z-axis (vertical axis) rotation: buttons 1 and 3 tilt the Z-axis + +There is currently no interface to upload STL files to the watch, the web IDE storage icon can be used instead. +A future version might contain rotation based on accelerometer/magnetometer readings. + diff --git a/apps/viewstl/cube.stl b/apps/viewstl/cube.stl new file mode 100644 index 000000000..4214221c9 --- /dev/null +++ b/apps/viewstl/cube.stl @@ -0,0 +1,86 @@ +solid OpenSCAD_Model + facet normal -0 0 1 + outer loop + vertex -5 5 5 + vertex 5 -5 5 + vertex 5 5 5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5 -5 5 + vertex -5 5 5 + vertex -5 -5 5 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -5 -5 -5 + vertex 5 5 -5 + vertex 5 -5 -5 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 5 5 -5 + vertex -5 -5 -5 + vertex -5 5 -5 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -5 -5 -5 + vertex 5 -5 5 + vertex -5 -5 5 + endloop + endfacet + facet normal 0 -1 -0 + outer loop + vertex 5 -5 5 + vertex -5 -5 -5 + vertex 5 -5 -5 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 5 -5 5 + vertex 5 5 -5 + vertex 5 5 5 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 5 5 -5 + vertex 5 -5 5 + vertex 5 -5 -5 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex 5 5 -5 + vertex -5 5 5 + vertex 5 5 5 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -5 5 5 + vertex 5 5 -5 + vertex -5 5 -5 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -5 -5 -5 + vertex -5 5 5 + vertex -5 5 -5 + endloop + endfacet + facet normal -1 -0 0 + outer loop + vertex -5 5 5 + vertex -5 -5 -5 + vertex -5 -5 5 + endloop + endfacet +endsolid OpenSCAD_Model diff --git a/apps/viewstl/fish_s.stl b/apps/viewstl/fish_s.stl new file mode 100644 index 000000000..70fd28b9a --- /dev/null +++ b/apps/viewstl/fish_s.stl @@ -0,0 +1,756 @@ +vertex 14.9126 -29.5887 -2.45 +vertex 14.9126 -30.3423 -2.45 +vertex 14.5569 -30.5817 -2.45 +vertex 6.72119 -16.5392 -2.45 +vertex -1.03592 -22.6875 -2.45 +vertex 6.04466 -15.0197 -2.45 +vertex 6.72119 -16.5392 -2.45 +vertex 7.95726 -17.6521 -2.45 +vertex 4.71675 -23.2921 -2.45 +vertex -6.32993 -13.4515 -2.45 +vertex 6.04466 -15.0197 -2.45 +vertex -6.39731 -15.1134 -2.45 +vertex -10.4974 -6.57382 -2.45 +vertex 11.945 -2.57918 -2.45 +vertex 8.9903 -9.35725 -2.45 +vertex 2.85788 12.68 -2.45 +vertex 12.0948 -2.03583 -2.45 +vertex 11.945 -2.57918 -2.45 +vertex 2.85788 22.58 -2.45 +vertex 8.548 23.2529 -2.45 +vertex 5.71576 17.63 -2.45 +vertex 11.945 15.8392 -2.45 +vertex 5.71576 17.63 -2.45 +vertex 8.9903 22.6172 -2.45 +vertex 8.54802 -9.99295 -2.45 +vertex 7.18376 -11.3057 -2.45 +vertex 8.9903 -9.35725 -2.45 +vertex 13.1679 6.37802 -2.45 +vertex 12.0948 -2.03583 -2.45 +vertex 2.85788 12.68 -2.45 +vertex 3.4908 27.6563 -2.45 +vertex 4.50931 27.1392 -2.45 +vertex 2.85788 22.58 -2.45 +vertex -0.965637 28.4369 -2.45 +vertex 3.4908 27.6563 -2.45 +vertex 2.85788 22.58 -2.45 +vertex -6.16991 25.9155 -2.45 +vertex -2.85788 22.58 -2.45 +vertex -6.87122 25.2755 -2.45 +vertex -6.16991 25.9155 -2.45 +vertex -1.60059 28.3899 -2.45 +vertex -2.85788 22.58 -2.45 +vertex -0.965637 28.4369 -2.45 +vertex -1.60059 28.3899 -2.45 +vertex -1.53212 28.4165 -2.45 +vertex -1.60059 28.3899 -2.45 +vertex -0.965637 28.4369 -2.45 +vertex -2.85788 22.58 -2.45 +vertex -5.71576 17.63 -2.45 +vertex -6.87122 25.2755 -2.45 +vertex -2.85788 22.58 -2.45 +vertex -10.7635 19.2449 -2.45 +vertex -10.4974 19.8338 -2.45 +vertex -5.71576 17.63 -2.45 +vertex -12.8441 11.4566 -2.45 +vertex -10.7635 19.2449 -2.45 +vertex -5.71576 17.63 -2.45 +vertex -12.9115 10.9427 -2.45 +vertex -12.8441 11.4566 -2.45 +vertex -2.85788 12.68 -2.45 +vertex 12.0948 15.2958 -2.45 +vertex 13.1679 6.88196 -2.45 +vertex 2.85788 12.68 -2.45 +vertex -12.8441 1.80342 -2.45 +vertex -12.9115 2.31732 -2.45 +vertex -2.85788 12.68 -2.45 +vertex -10.7635 -5.98489 -2.45 +vertex -12.8441 1.80342 -2.45 +vertex -2.85788 12.68 -2.45 +vertex 2.85788 12.68 -2.45 +vertex 13.1679 6.88196 -2.45 +vertex 13.1679 6.37802 -2.45 +vertex -2.85788 12.68 -2.45 +vertex 11.945 -2.57918 -2.45 +vertex -10.7635 -5.98489 -2.45 +vertex -2.85788 12.68 -2.45 +vertex 2.85788 12.68 -2.45 +vertex 11.945 -2.57918 -2.45 +vertex -10.4974 -6.57382 -2.45 +vertex -10.7635 -5.98489 -2.45 +vertex 11.945 -2.57918 -2.45 +vertex 7.18376 -11.3057 -2.45 +vertex -10.4974 -6.57382 -2.45 +vertex 8.9903 -9.35725 -2.45 +vertex 7.18376 -11.3057 -2.45 +vertex -6.94434 -11.9058 -2.45 +vertex -10.4974 -6.57382 -2.45 +vertex 7.18376 -11.3057 -2.45 +vertex 6.04466 -13.3564 -2.45 +vertex -6.94434 -11.9058 -2.45 +vertex -6.94434 -11.9058 -2.45 +vertex 6.04466 -13.3564 -2.45 +vertex -6.32993 -13.4515 -2.45 +vertex -6.32993 -13.4515 -2.45 +vertex 6.04466 -13.3564 -2.45 +vertex 6.04466 -15.0197 -2.45 +vertex -6.39731 -15.1134 -2.45 +vertex -1.03592 -22.6875 -2.45 +vertex -2.69011 -22.8613 -2.45 +vertex -7.59648 -17.0965 -2.45 +vertex -6.39731 -15.1134 -2.45 +vertex -2.69011 -22.8613 -2.45 +vertex -11.8228 -20.9019 -2.45 +vertex -7.59648 -17.0965 -2.45 +vertex -8.19138 -24.6488 -2.45 +vertex -12.3062 -21.5673 -2.45 +vertex -9.63184 -25.4805 -2.45 +vertex -14.5012 -26.4973 -2.45 +vertex -9.63184 -25.4805 -2.45 +vertex -14.3856 -29.7607 -2.45 +vertex -14.6722 -27.3018 -2.45 +vertex -14.6722 -27.3018 -2.45 +vertex -14.3856 -29.7607 -2.45 +vertex -14.6722 -29.7463 -2.45 +vertex -14.6722 -29.7463 -2.45 +vertex -14.3856 -29.7607 -2.45 +vertex -14.6312 -29.9392 -2.45 +vertex -14.5012 -26.4973 -2.45 +vertex -9.63184 -25.4805 -2.45 +vertex -14.6722 -27.3018 -2.45 +vertex 14.9126 -29.5887 -2.45 +vertex 14.5569 -30.5817 -2.45 +vertex 12.5441 -27.8112 -2.45 +vertex -12.3062 -21.5673 -2.45 +vertex -8.19138 -24.6488 -2.45 +vertex -9.63184 -25.4805 -2.45 +vertex -6.39731 -15.1134 -2.45 +vertex 6.04466 -15.0197 -2.45 +vertex -1.03592 -22.6875 -2.45 +vertex -12.3062 -21.5673 -2.45 +vertex -11.8228 -20.9019 -2.45 +vertex -8.19138 -24.6488 -2.45 +vertex -8.19138 -24.6488 -2.45 +vertex -7.59648 -17.0965 -2.45 +vertex -2.69011 -22.8613 -2.45 +vertex 6.72119 -16.5392 -2.45 +vertex 4.71675 -23.2921 -2.45 +vertex -1.03592 -22.6875 -2.45 +vertex 7.95726 -17.6521 -2.45 +vertex 9.67282 -18.6426 -2.45 +vertex 6.29861 -23.8061 -2.45 +vertex 7.95726 -17.6521 -2.45 +vertex 6.29861 -23.8061 -2.45 +vertex 4.71675 -23.2921 -2.45 +vertex 6.29861 -23.8061 -2.45 +vertex 10.2841 -19.193 -2.45 +vertex 13.456 -23.5588 -2.45 +vertex 9.67282 -18.6426 -2.45 +vertex 10.2841 -19.193 -2.45 +vertex 6.29861 -23.8061 -2.45 +vertex 6.29861 -23.8061 -2.45 +vertex 13.456 -23.5588 -2.45 +vertex 11.308 -26.6983 -2.45 +vertex 12.5441 -27.8112 -2.45 +vertex 11.308 -26.6983 -2.45 +vertex 13.7906 -24.3102 -2.45 +vertex 11.308 -26.6983 -2.45 +vertex 13.456 -23.5588 -2.45 +vertex 13.7906 -24.3102 -2.45 +vertex 14.9126 -29.5887 -2.45 +vertex 12.5441 -27.8112 -2.45 +vertex 13.7906 -24.3102 -2.45 +vertex 14.7 -30.7105 -2.45 +vertex 14.5569 -30.5817 -2.45 +vertex 14.9126 -30.3423 -2.45 +vertex 12.0948 15.2958 -2.45 +vertex 5.71576 17.63 -2.45 +vertex 11.945 15.8392 -2.45 +vertex -12.9115 2.31732 -2.45 +vertex -12.9115 10.9427 -2.45 +vertex -2.85788 12.68 -2.45 +vertex -2.85788 12.68 -2.45 +vertex -12.8441 11.4566 -2.45 +vertex -5.71576 17.63 -2.45 +vertex -5.71576 17.63 -2.45 +vertex -10.4974 19.8338 -2.45 +vertex -6.87122 25.2755 -2.45 +vertex -2.85788 22.58 -2.45 +vertex -0.965637 28.4369 -2.45 +vertex 2.85788 22.58 -2.45 +vertex 2.85788 22.58 -2.45 +vertex 4.50931 27.1392 -2.45 +vertex 8.548 23.2529 -2.45 +vertex 2.85788 12.68 -2.45 +vertex 5.71576 17.63 -2.45 +vertex 12.0948 15.2958 -2.45 +vertex 5.71576 17.63 -2.45 +vertex 8.548 23.2529 -2.45 +vertex 8.9903 22.6172 -2.45 +vertex 14.5569 -30.5817 2.45 +vertex 14.9126 -30.3423 2.45 +vertex 14.9126 -29.5887 2.45 +vertex 6.04466 -15.0197 2.45 +vertex -1.03592 -22.6875 2.45 +vertex 6.72119 -16.5392 2.45 +vertex 4.71675 -23.2921 2.45 +vertex 7.95726 -17.6521 2.45 +vertex 6.72119 -16.5392 2.45 +vertex -6.39731 -15.1134 2.45 +vertex 6.04466 -15.0197 2.45 +vertex -6.32993 -13.4515 2.45 +vertex 8.9903 -9.35725 2.45 +vertex 11.945 -2.57918 2.45 +vertex -10.4974 -6.57382 2.45 +vertex 11.945 -2.57918 2.45 +vertex 12.0948 -2.03583 2.45 +vertex 2.85788 12.68 2.45 +vertex 5.71576 17.63 2.45 +vertex 8.548 23.2529 2.45 +vertex 2.85788 22.58 2.45 +vertex 8.9903 22.6172 2.45 +vertex 5.71576 17.63 2.45 +vertex 11.945 15.8392 2.45 +vertex 8.9903 -9.35725 2.45 +vertex 7.18376 -11.3057 2.45 +vertex 8.54802 -9.99295 2.45 +vertex 2.85788 12.68 2.45 +vertex 12.0948 -2.03583 2.45 +vertex 13.1679 6.37802 2.45 +vertex 2.85788 22.58 2.45 +vertex 4.50931 27.1392 2.45 +vertex 3.4908 27.6563 2.45 +vertex 2.85788 22.58 2.45 +vertex 3.4908 27.6563 2.45 +vertex -0.965637 28.4369 2.45 +vertex -6.87122 25.2755 2.45 +vertex -2.85788 22.58 2.45 +vertex -6.16991 25.9155 2.45 +vertex -2.85788 22.58 2.45 +vertex -1.60059 28.3899 2.45 +vertex -6.16991 25.9155 2.45 +vertex -1.53212 28.4165 2.45 +vertex -1.60059 28.3899 2.45 +vertex -0.965637 28.4369 2.45 +vertex -2.85788 22.58 2.45 +vertex -0.965637 28.4369 2.45 +vertex -1.60059 28.3899 2.45 +vertex -2.85788 22.58 2.45 +vertex -6.87122 25.2755 2.45 +vertex -5.71576 17.63 2.45 +vertex -5.71576 17.63 2.45 +vertex -10.4974 19.8338 2.45 +vertex -10.7635 19.2449 2.45 +vertex -5.71576 17.63 2.45 +vertex -10.7635 19.2449 2.45 +vertex -12.8441 11.4566 2.45 +vertex -2.85788 12.68 2.45 +vertex -12.8441 11.4566 2.45 +vertex -12.9115 10.9427 2.45 +vertex 2.85788 12.68 2.45 +vertex 13.1679 6.88196 2.45 +vertex 12.0948 15.2958 2.45 +vertex -2.85788 12.68 2.45 +vertex -12.9115 2.31732 2.45 +vertex -12.8441 1.80342 2.45 +vertex -2.85788 12.68 2.45 +vertex -12.8441 1.80342 2.45 +vertex -10.7635 -5.98489 2.45 +vertex 13.1679 6.37802 2.45 +vertex 13.1679 6.88196 2.45 +vertex 2.85788 12.68 2.45 +vertex -10.7635 -5.98489 2.45 +vertex 11.945 -2.57918 2.45 +vertex -2.85788 12.68 2.45 +vertex 11.945 -2.57918 2.45 +vertex 2.85788 12.68 2.45 +vertex -2.85788 12.68 2.45 +vertex 11.945 -2.57918 2.45 +vertex -10.7635 -5.98489 2.45 +vertex -10.4974 -6.57382 2.45 +vertex 8.9903 -9.35725 2.45 +vertex -10.4974 -6.57382 2.45 +vertex 7.18376 -11.3057 2.45 +vertex -10.4974 -6.57382 2.45 +vertex -6.94434 -11.9058 2.45 +vertex 7.18376 -11.3057 2.45 +vertex -6.94434 -11.9058 2.45 +vertex 6.04466 -13.3564 2.45 +vertex 7.18376 -11.3057 2.45 +vertex -6.32993 -13.4515 2.45 +vertex 6.04466 -13.3564 2.45 +vertex -6.94434 -11.9058 2.45 +vertex 6.04466 -15.0197 2.45 +vertex 6.04466 -13.3564 2.45 +vertex -6.32993 -13.4515 2.45 +vertex -2.69011 -22.8613 2.45 +vertex -1.03592 -22.6875 2.45 +vertex -6.39731 -15.1134 2.45 +vertex -2.69011 -22.8613 2.45 +vertex -6.39731 -15.1134 2.45 +vertex -7.59648 -17.0965 2.45 +vertex -8.19138 -24.6488 2.45 +vertex -7.59648 -17.0965 2.45 +vertex -11.8228 -20.9019 2.45 +vertex -14.5012 -26.4973 2.45 +vertex -9.63184 -25.4805 2.45 +vertex -12.3062 -21.5673 2.45 +vertex -14.6722 -27.3018 2.45 +vertex -14.3856 -29.7607 2.45 +vertex -9.63184 -25.4805 2.45 +vertex -14.6722 -29.7463 2.45 +vertex -14.3856 -29.7607 2.45 +vertex -14.6722 -27.3018 2.45 +vertex -14.6312 -29.9392 2.45 +vertex -14.3856 -29.7607 2.45 +vertex -14.6722 -29.7463 2.45 +vertex -14.6722 -27.3018 2.45 +vertex -9.63184 -25.4805 2.45 +vertex -14.5012 -26.4973 2.45 +vertex 12.5441 -27.8112 2.45 +vertex 14.5569 -30.5817 2.45 +vertex 14.9126 -29.5887 2.45 +vertex -9.63184 -25.4805 2.45 +vertex -8.19138 -24.6488 2.45 +vertex -12.3062 -21.5673 2.45 +vertex -1.03592 -22.6875 2.45 +vertex 6.04466 -15.0197 2.45 +vertex -6.39731 -15.1134 2.45 +vertex -8.19138 -24.6488 2.45 +vertex -11.8228 -20.9019 2.45 +vertex -12.3062 -21.5673 2.45 +vertex -2.69011 -22.8613 2.45 +vertex -7.59648 -17.0965 2.45 +vertex -8.19138 -24.6488 2.45 +vertex -1.03592 -22.6875 2.45 +vertex 4.71675 -23.2921 2.45 +vertex 6.72119 -16.5392 2.45 +vertex 6.29861 -23.8061 2.45 +vertex 9.67282 -18.6426 2.45 +vertex 7.95726 -17.6521 2.45 +vertex 4.71675 -23.2921 2.45 +vertex 6.29861 -23.8061 2.45 +vertex 7.95726 -17.6521 2.45 +vertex 13.456 -23.5588 2.45 +vertex 10.2841 -19.193 2.45 +vertex 6.29861 -23.8061 2.45 +vertex 6.29861 -23.8061 2.45 +vertex 10.2841 -19.193 2.45 +vertex 9.67282 -18.6426 2.45 +vertex 11.308 -26.6983 2.45 +vertex 13.456 -23.5588 2.45 +vertex 6.29861 -23.8061 2.45 +vertex 13.7906 -24.3102 2.45 +vertex 11.308 -26.6983 2.45 +vertex 12.5441 -27.8112 2.45 +vertex 13.7906 -24.3102 2.45 +vertex 13.456 -23.5588 2.45 +vertex 11.308 -26.6983 2.45 +vertex 13.7906 -24.3102 2.45 +vertex 12.5441 -27.8112 2.45 +vertex 14.9126 -29.5887 2.45 +vertex 14.9126 -30.3423 2.45 +vertex 14.5569 -30.5817 2.45 +vertex 14.7 -30.7105 2.45 +vertex 11.945 15.8392 2.45 +vertex 5.71576 17.63 2.45 +vertex 12.0948 15.2958 2.45 +vertex -2.85788 12.68 2.45 +vertex -12.9115 10.9427 2.45 +vertex -12.9115 2.31732 2.45 +vertex -5.71576 17.63 2.45 +vertex -12.8441 11.4566 2.45 +vertex -2.85788 12.68 2.45 +vertex -6.87122 25.2755 2.45 +vertex -10.4974 19.8338 2.45 +vertex -5.71576 17.63 2.45 +vertex 2.85788 22.58 2.45 +vertex -0.965637 28.4369 2.45 +vertex -2.85788 22.58 2.45 +vertex 8.548 23.2529 2.45 +vertex 4.50931 27.1392 2.45 +vertex 2.85788 22.58 2.45 +vertex 12.0948 15.2958 2.45 +vertex 5.71576 17.63 2.45 +vertex 2.85788 12.68 2.45 +vertex 8.9903 22.6172 2.45 +vertex 8.548 23.2529 2.45 +vertex 5.71576 17.63 2.45 +vertex 14.9126 -29.5887 -2.45 +vertex 14.9126 -30.3423 2.45 +vertex 14.9126 -30.3423 -2.45 +vertex 14.9126 -29.5887 -2.45 +vertex 14.9126 -29.5887 2.45 +vertex 14.9126 -30.3423 2.45 +vertex 13.7906 -24.3102 -2.45 +vertex 14.9126 -29.5887 2.45 +vertex 14.9126 -29.5887 -2.45 +vertex 13.7906 -24.3102 -2.45 +vertex 13.7906 -24.3102 2.45 +vertex 14.9126 -29.5887 2.45 +vertex 13.456 -23.5588 -2.45 +vertex 13.7906 -24.3102 2.45 +vertex 13.7906 -24.3102 -2.45 +vertex 13.456 -23.5588 -2.45 +vertex 13.456 -23.5588 2.45 +vertex 13.7906 -24.3102 2.45 +vertex 10.2841 -19.193 -2.45 +vertex 13.456 -23.5588 2.45 +vertex 13.456 -23.5588 -2.45 +vertex 10.2841 -19.193 -2.45 +vertex 10.2841 -19.193 2.45 +vertex 13.456 -23.5588 2.45 +vertex 9.67282 -18.6426 -2.45 +vertex 10.2841 -19.193 2.45 +vertex 10.2841 -19.193 -2.45 +vertex 9.67282 -18.6426 -2.45 +vertex 9.67282 -18.6426 2.45 +vertex 10.2841 -19.193 2.45 +vertex 7.95726 -17.6521 -2.45 +vertex 9.67282 -18.6426 2.45 +vertex 9.67282 -18.6426 -2.45 +vertex 7.95726 -17.6521 -2.45 +vertex 7.95726 -17.6521 2.45 +vertex 9.67282 -18.6426 2.45 +vertex 6.72119 -16.5392 -2.45 +vertex 7.95726 -17.6521 2.45 +vertex 7.95726 -17.6521 -2.45 +vertex 6.72119 -16.5392 -2.45 +vertex 6.72119 -16.5392 2.45 +vertex 7.95726 -17.6521 2.45 +vertex 6.04466 -15.0197 -2.45 +vertex 6.72119 -16.5392 2.45 +vertex 6.72119 -16.5392 -2.45 +vertex 6.04466 -15.0197 -2.45 +vertex 6.04466 -15.0197 2.45 +vertex 6.72119 -16.5392 2.45 +vertex 6.04466 -13.3564 -2.45 +vertex 6.04466 -15.0197 2.45 +vertex 6.04466 -15.0197 -2.45 +vertex 6.04466 -13.3564 -2.45 +vertex 6.04466 -13.3564 2.45 +vertex 6.04466 -15.0197 2.45 +vertex 7.18376 -11.3057 -2.45 +vertex 6.04466 -13.3564 2.45 +vertex 6.04466 -13.3564 -2.45 +vertex 7.18376 -11.3057 -2.45 +vertex 7.18376 -11.3057 2.45 +vertex 6.04466 -13.3564 2.45 +vertex 8.54802 -9.99295 -2.45 +vertex 7.18376 -11.3057 2.45 +vertex 7.18376 -11.3057 -2.45 +vertex 8.54802 -9.99295 -2.45 +vertex 8.54802 -9.99295 2.45 +vertex 7.18376 -11.3057 2.45 +vertex 8.9903 -9.35725 -2.45 +vertex 8.54802 -9.99295 2.45 +vertex 8.54802 -9.99295 -2.45 +vertex 8.9903 -9.35725 -2.45 +vertex 8.9903 -9.35725 2.45 +vertex 8.54802 -9.99295 2.45 +vertex 11.945 -2.57918 -2.45 +vertex 8.9903 -9.35725 2.45 +vertex 8.9903 -9.35725 -2.45 +vertex 11.945 -2.57918 -2.45 +vertex 11.945 -2.57918 2.45 +vertex 8.9903 -9.35725 2.45 +vertex 12.0948 -2.03583 -2.45 +vertex 11.945 -2.57918 2.45 +vertex 11.945 -2.57918 -2.45 +vertex 12.0948 -2.03583 -2.45 +vertex 12.0948 -2.03583 2.45 +vertex 11.945 -2.57918 2.45 +vertex 13.1679 6.37802 -2.45 +vertex 12.0948 -2.03583 2.45 +vertex 12.0948 -2.03583 -2.45 +vertex 13.1679 6.37802 -2.45 +vertex 13.1679 6.37802 2.45 +vertex 12.0948 -2.03583 2.45 +vertex 13.1679 6.88196 -2.45 +vertex 13.1679 6.37802 2.45 +vertex 13.1679 6.37802 -2.45 +vertex 13.1679 6.88196 -2.45 +vertex 13.1679 6.88196 2.45 +vertex 13.1679 6.37802 2.45 +vertex 12.0948 15.2958 -2.45 +vertex 13.1679 6.88196 2.45 +vertex 13.1679 6.88196 -2.45 +vertex 12.0948 15.2958 -2.45 +vertex 12.0948 15.2958 2.45 +vertex 13.1679 6.88196 2.45 +vertex 11.945 15.8392 -2.45 +vertex 12.0948 15.2958 2.45 +vertex 12.0948 15.2958 -2.45 +vertex 11.945 15.8392 -2.45 +vertex 11.945 15.8392 2.45 +vertex 12.0948 15.2958 2.45 +vertex 8.9903 22.6172 -2.45 +vertex 11.945 15.8392 2.45 +vertex 11.945 15.8392 -2.45 +vertex 8.9903 22.6172 -2.45 +vertex 8.9903 22.6172 2.45 +vertex 11.945 15.8392 2.45 +vertex 8.548 23.2529 -2.45 +vertex 8.9903 22.6172 2.45 +vertex 8.9903 22.6172 -2.45 +vertex 8.548 23.2529 -2.45 +vertex 8.548 23.2529 2.45 +vertex 8.9903 22.6172 2.45 +vertex 4.50931 27.1392 -2.45 +vertex 8.548 23.2529 2.45 +vertex 8.548 23.2529 -2.45 +vertex 4.50931 27.1392 -2.45 +vertex 4.50931 27.1392 2.45 +vertex 8.548 23.2529 2.45 +vertex 3.4908 27.6563 -2.45 +vertex 4.50931 27.1392 2.45 +vertex 4.50931 27.1392 -2.45 +vertex 3.4908 27.6563 -2.45 +vertex 3.4908 27.6563 2.45 +vertex 4.50931 27.1392 2.45 +vertex -0.965637 28.4369 -2.45 +vertex 3.4908 27.6563 2.45 +vertex 3.4908 27.6563 -2.45 +vertex -0.965637 28.4369 -2.45 +vertex -0.965637 28.4369 2.45 +vertex 3.4908 27.6563 2.45 +vertex -1.53212 28.4165 -2.45 +vertex -0.965637 28.4369 2.45 +vertex -0.965637 28.4369 -2.45 +vertex -1.53212 28.4165 -2.45 +vertex -1.53212 28.4165 2.45 +vertex -0.965637 28.4369 2.45 +vertex -1.60059 28.3899 -2.45 +vertex -1.53212 28.4165 2.45 +vertex -1.53212 28.4165 -2.45 +vertex -1.60059 28.3899 -2.45 +vertex -1.60059 28.3899 2.45 +vertex -1.53212 28.4165 2.45 +vertex -6.16991 25.9155 -2.45 +vertex -1.60059 28.3899 2.45 +vertex -1.60059 28.3899 -2.45 +vertex -6.16991 25.9155 -2.45 +vertex -6.16991 25.9155 2.45 +vertex -1.60059 28.3899 2.45 +vertex -6.87122 25.2755 -2.45 +vertex -6.16991 25.9155 2.45 +vertex -6.16991 25.9155 -2.45 +vertex -6.87122 25.2755 -2.45 +vertex -6.87122 25.2755 2.45 +vertex -6.16991 25.9155 2.45 +vertex -10.4974 19.8338 -2.45 +vertex -6.87122 25.2755 2.45 +vertex -6.87122 25.2755 -2.45 +vertex -10.4974 19.8338 -2.45 +vertex -10.4974 19.8338 2.45 +vertex -6.87122 25.2755 2.45 +vertex -10.7635 19.2449 -2.45 +vertex -10.4974 19.8338 2.45 +vertex -10.4974 19.8338 -2.45 +vertex -10.7635 19.2449 -2.45 +vertex -10.7635 19.2449 2.45 +vertex -10.4974 19.8338 2.45 +vertex -12.8441 11.4566 -2.45 +vertex -10.7635 19.2449 2.45 +vertex -10.7635 19.2449 -2.45 +vertex -12.8441 11.4566 -2.45 +vertex -12.8441 11.4566 2.45 +vertex -10.7635 19.2449 2.45 +vertex -12.9115 10.9427 -2.45 +vertex -12.8441 11.4566 2.45 +vertex -12.8441 11.4566 -2.45 +vertex -12.9115 10.9427 -2.45 +vertex -12.9115 10.9427 2.45 +vertex -12.8441 11.4566 2.45 +vertex -12.9115 2.31732 -2.45 +vertex -12.9115 10.9427 2.45 +vertex -12.9115 10.9427 -2.45 +vertex -12.9115 2.31732 -2.45 +vertex -12.9115 2.31732 2.45 +vertex -12.9115 10.9427 2.45 +vertex -12.8441 1.80342 -2.45 +vertex -12.9115 2.31732 2.45 +vertex -12.9115 2.31732 -2.45 +vertex -12.8441 1.80342 -2.45 +vertex -12.8441 1.80342 2.45 +vertex -12.9115 2.31732 2.45 +vertex -10.7635 -5.98489 -2.45 +vertex -12.8441 1.80342 2.45 +vertex -12.8441 1.80342 -2.45 +vertex -10.7635 -5.98489 -2.45 +vertex -10.7635 -5.98489 2.45 +vertex -12.8441 1.80342 2.45 +vertex -10.4974 -6.57382 -2.45 +vertex -10.7635 -5.98489 2.45 +vertex -10.7635 -5.98489 -2.45 +vertex -10.4974 -6.57382 -2.45 +vertex -10.4974 -6.57382 2.45 +vertex -10.7635 -5.98489 2.45 +vertex -6.94434 -11.9058 -2.45 +vertex -10.4974 -6.57382 2.45 +vertex -10.4974 -6.57382 -2.45 +vertex -6.94434 -11.9058 -2.45 +vertex -6.94434 -11.9058 2.45 +vertex -10.4974 -6.57382 2.45 +vertex -6.32993 -13.4515 -2.45 +vertex -6.94434 -11.9058 2.45 +vertex -6.94434 -11.9058 -2.45 +vertex -6.32993 -13.4515 -2.45 +vertex -6.32993 -13.4515 2.45 +vertex -6.94434 -11.9058 2.45 +vertex -6.39731 -15.1134 -2.45 +vertex -6.32993 -13.4515 2.45 +vertex -6.32993 -13.4515 -2.45 +vertex -6.39731 -15.1134 -2.45 +vertex -6.39731 -15.1134 2.45 +vertex -6.32993 -13.4515 2.45 +vertex -7.59648 -17.0965 -2.45 +vertex -6.39731 -15.1134 2.45 +vertex -6.39731 -15.1134 -2.45 +vertex -7.59648 -17.0965 -2.45 +vertex -7.59648 -17.0965 2.45 +vertex -6.39731 -15.1134 2.45 +vertex -11.8228 -20.9019 -2.45 +vertex -7.59648 -17.0965 2.45 +vertex -7.59648 -17.0965 -2.45 +vertex -11.8228 -20.9019 -2.45 +vertex -11.8228 -20.9019 2.45 +vertex -7.59648 -17.0965 2.45 +vertex -12.3062 -21.5673 -2.45 +vertex -11.8228 -20.9019 2.45 +vertex -11.8228 -20.9019 -2.45 +vertex -12.3062 -21.5673 -2.45 +vertex -12.3062 -21.5673 2.45 +vertex -11.8228 -20.9019 2.45 +vertex -14.5012 -26.4973 -2.45 +vertex -12.3062 -21.5673 2.45 +vertex -12.3062 -21.5673 -2.45 +vertex -14.5012 -26.4973 -2.45 +vertex -14.5012 -26.4973 2.45 +vertex -12.3062 -21.5673 2.45 +vertex -14.6722 -27.3018 -2.45 +vertex -14.5012 -26.4973 2.45 +vertex -14.5012 -26.4973 -2.45 +vertex -14.6722 -27.3018 -2.45 +vertex -14.6722 -27.3018 2.45 +vertex -14.5012 -26.4973 2.45 +vertex -14.6722 -29.7463 -2.45 +vertex -14.6722 -27.3018 2.45 +vertex -14.6722 -27.3018 -2.45 +vertex -14.6722 -29.7463 -2.45 +vertex -14.6722 -29.7463 2.45 +vertex -14.6722 -27.3018 2.45 +vertex -14.6312 -29.9392 -2.45 +vertex -14.6722 -29.7463 2.45 +vertex -14.6722 -29.7463 -2.45 +vertex -14.6312 -29.9392 -2.45 +vertex -14.6312 -29.9392 2.45 +vertex -14.6722 -29.7463 2.45 +vertex -14.3856 -29.7607 -2.45 +vertex -14.6312 -29.9392 2.45 +vertex -14.6312 -29.9392 -2.45 +vertex -14.3856 -29.7607 -2.45 +vertex -14.3856 -29.7607 2.45 +vertex -14.6312 -29.9392 2.45 +vertex -9.63184 -25.4805 -2.45 +vertex -14.3856 -29.7607 2.45 +vertex -14.3856 -29.7607 -2.45 +vertex -9.63184 -25.4805 -2.45 +vertex -9.63184 -25.4805 2.45 +vertex -14.3856 -29.7607 2.45 +vertex -8.19138 -24.6488 -2.45 +vertex -9.63184 -25.4805 2.45 +vertex -9.63184 -25.4805 -2.45 +vertex -8.19138 -24.6488 -2.45 +vertex -8.19138 -24.6488 2.45 +vertex -9.63184 -25.4805 2.45 +vertex -2.69011 -22.8613 -2.45 +vertex -8.19138 -24.6488 2.45 +vertex -8.19138 -24.6488 -2.45 +vertex -2.69011 -22.8613 -2.45 +vertex -2.69011 -22.8613 2.45 +vertex -8.19138 -24.6488 2.45 +vertex -1.03592 -22.6875 -2.45 +vertex -2.69011 -22.8613 2.45 +vertex -2.69011 -22.8613 -2.45 +vertex -1.03592 -22.6875 -2.45 +vertex -1.03592 -22.6875 2.45 +vertex -2.69011 -22.8613 2.45 +vertex 4.71675 -23.2921 -2.45 +vertex -1.03592 -22.6875 2.45 +vertex -1.03592 -22.6875 -2.45 +vertex 4.71675 -23.2921 -2.45 +vertex 4.71675 -23.2921 2.45 +vertex -1.03592 -22.6875 2.45 +vertex 6.29861 -23.8061 -2.45 +vertex 4.71675 -23.2921 2.45 +vertex 4.71675 -23.2921 -2.45 +vertex 6.29861 -23.8061 -2.45 +vertex 6.29861 -23.8061 2.45 +vertex 4.71675 -23.2921 2.45 +vertex 11.308 -26.6983 -2.45 +vertex 6.29861 -23.8061 2.45 +vertex 6.29861 -23.8061 -2.45 +vertex 11.308 -26.6983 -2.45 +vertex 11.308 -26.6983 2.45 +vertex 6.29861 -23.8061 2.45 +vertex 12.5441 -27.8112 -2.45 +vertex 11.308 -26.6983 2.45 +vertex 11.308 -26.6983 -2.45 +vertex 12.5441 -27.8112 -2.45 +vertex 12.5441 -27.8112 2.45 +vertex 11.308 -26.6983 2.45 +vertex 14.5569 -30.5817 -2.45 +vertex 12.5441 -27.8112 2.45 +vertex 12.5441 -27.8112 -2.45 +vertex 14.5569 -30.5817 -2.45 +vertex 14.5569 -30.5817 2.45 +vertex 12.5441 -27.8112 2.45 +vertex 14.7 -30.7105 -2.45 +vertex 14.5569 -30.5817 2.45 +vertex 14.5569 -30.5817 -2.45 +vertex 14.7 -30.7105 -2.45 +vertex 14.7 -30.7105 2.45 +vertex 14.5569 -30.5817 2.45 +vertex 14.9126 -30.3423 -2.45 +vertex 14.7 -30.7105 2.45 +vertex 14.7 -30.7105 -2.45 +vertex 14.9126 -30.3423 -2.45 +vertex 14.9126 -30.3423 2.45 +vertex 14.7 -30.7105 2.45 +vertex -5.71576 17.63 -2.45 +vertex -5.71576 17.63 2.45 +vertex -2.85788 12.68 -2.45 +vertex -2.85788 12.68 2.45 +vertex -2.85788 12.68 -2.45 +vertex -5.71576 17.63 2.45 +vertex -2.85788 22.58 -2.45 +vertex -2.85788 22.58 2.45 +vertex -5.71576 17.63 -2.45 +vertex -5.71576 17.63 2.45 +vertex -5.71576 17.63 -2.45 +vertex -2.85788 22.58 2.45 +vertex 2.85788 22.58 -2.45 +vertex 2.85788 22.58 2.45 +vertex -2.85788 22.58 -2.45 +vertex -2.85788 22.58 2.45 +vertex -2.85788 22.58 -2.45 +vertex 2.85788 22.58 2.45 +vertex 5.71576 17.63 -2.45 +vertex 5.71576 17.63 2.45 +vertex 2.85788 22.58 -2.45 +vertex 2.85788 22.58 2.45 +vertex 2.85788 22.58 -2.45 +vertex 5.71576 17.63 2.45 +vertex 2.85788 12.68 -2.45 +vertex 2.85788 12.68 2.45 +vertex 5.71576 17.63 -2.45 +vertex 5.71576 17.63 2.45 +vertex 5.71576 17.63 -2.45 +vertex 2.85788 12.68 2.45 +vertex -2.85788 12.68 -2.45 +vertex -2.85788 12.68 2.45 +vertex 2.85788 12.68 -2.45 +vertex 2.85788 12.68 2.45 +vertex 2.85788 12.68 -2.45 +vertex -2.85788 12.68 2.45 diff --git a/apps/viewstl/icons8-octahedron-48.png b/apps/viewstl/icons8-octahedron-48.png new file mode 100644 index 000000000..1cc129763 Binary files /dev/null and b/apps/viewstl/icons8-octahedron-48.png differ diff --git a/apps/viewstl/icosa.stl b/apps/viewstl/icosa.stl new file mode 100644 index 000000000..7c783fe7b --- /dev/null +++ b/apps/viewstl/icosa.stl @@ -0,0 +1,142 @@ +solid OpenSCAD_Model + facet normal 0 -0.356822 0.934172 + outer loop + vertex 0.5 0 0.809017 + vertex -0.5 0 0.809017 + vertex 0 -0.809017 0.5 + endloop + endfacet + facet normal 0.57735 -0.57735 0.57735 + outer loop + vertex 0.5 0 0.809017 + vertex 0 -0.809017 0.5 + vertex 0.809017 -0.5 0 + endloop + endfacet + facet normal 0.934172 0 0.356822 + outer loop + vertex 0.5 0 0.809017 + vertex 0.809017 -0.5 0 + vertex 0.809017 0.5 0 + endloop + endfacet + facet normal 0.57735 0.57735 0.57735 + outer loop + vertex 0.5 0 0.809017 + vertex 0.809017 0.5 0 + vertex 0 0.809017 0.5 + endloop + endfacet + facet normal 0 0.356822 0.934172 + outer loop + vertex 0.5 0 0.809017 + vertex 0 0.809017 0.5 + vertex -0.5 0 0.809017 + endloop + endfacet + facet normal 0 -0.356822 -0.934172 + outer loop + vertex -0.5 0 -0.809017 + vertex 0.5 0 -0.809017 + vertex 0 -0.809017 -0.5 + endloop + endfacet + facet normal -0.57735 -0.57735 -0.57735 + outer loop + vertex -0.5 0 -0.809017 + vertex 0 -0.809017 -0.5 + vertex -0.809017 -0.5 0 + endloop + endfacet + facet normal -0.934172 0 -0.356822 + outer loop + vertex -0.5 0 -0.809017 + vertex -0.809017 -0.5 0 + vertex -0.809017 0.5 0 + endloop + endfacet + facet normal -0.57735 0.57735 -0.57735 + outer loop + vertex -0.5 0 -0.809017 + vertex -0.809017 0.5 0 + vertex 0 0.809017 -0.5 + endloop + endfacet + facet normal 0 0.356822 -0.934172 + outer loop + vertex -0.5 0 -0.809017 + vertex 0 0.809017 -0.5 + vertex 0.5 0 -0.809017 + endloop + endfacet + facet normal -0.934172 0 0.356822 + outer loop + vertex -0.5 0 0.809017 + vertex -0.809017 0.5 0 + vertex -0.809017 -0.5 0 + endloop + endfacet + facet normal -0.57735 -0.57735 0.57735 + outer loop + vertex -0.5 0 0.809017 + vertex -0.809017 -0.5 0 + vertex 0 -0.809017 0.5 + endloop + endfacet + facet normal -0.356822 -0.934172 -0 + outer loop + vertex 0 -0.809017 0.5 + vertex -0.809017 -0.5 0 + vertex 0 -0.809017 -0.5 + endloop + endfacet + facet normal 0.356822 -0.934172 0 + outer loop + vertex 0 -0.809017 0.5 + vertex 0 -0.809017 -0.5 + vertex 0.809017 -0.5 0 + endloop + endfacet + facet normal 0.57735 -0.57735 -0.57735 + outer loop + vertex 0.809017 -0.5 0 + vertex 0 -0.809017 -0.5 + vertex 0.5 0 -0.809017 + endloop + endfacet + facet normal 0.934172 0 -0.356822 + outer loop + vertex 0.809017 -0.5 0 + vertex 0.5 0 -0.809017 + vertex 0.809017 0.5 0 + endloop + endfacet + facet normal 0.57735 0.57735 -0.57735 + outer loop + vertex 0.809017 0.5 0 + vertex 0.5 0 -0.809017 + vertex 0 0.809017 -0.5 + endloop + endfacet + facet normal 0.356822 0.934172 0 + outer loop + vertex 0.809017 0.5 0 + vertex 0 0.809017 -0.5 + vertex 0 0.809017 0.5 + endloop + endfacet + facet normal -0.356822 0.934172 0 + outer loop + vertex 0 0.809017 0.5 + vertex 0 0.809017 -0.5 + vertex -0.809017 0.5 0 + endloop + endfacet + facet normal -0.57735 0.57735 0.57735 + outer loop + vertex 0 0.809017 0.5 + vertex -0.809017 0.5 0 + vertex -0.5 0 0.809017 + endloop + endfacet +endsolid OpenSCAD_Model diff --git a/apps/viewstl/tetra.stl b/apps/viewstl/tetra.stl new file mode 100644 index 000000000..ca5cc351e --- /dev/null +++ b/apps/viewstl/tetra.stl @@ -0,0 +1,30 @@ +solid OpenSCAD_Model + facet normal 0 -0 -1 + outer loop + vertex 0 5.7735 -2.04124 + vertex 5 -2.88675 -2.04124 + vertex -5 -2.88675 -2.04124 + endloop + endfacet + facet normal -0.816496 0.471405 0.333334 + outer loop + vertex 0 0 6.12372 + vertex 0 5.7735 -2.04124 + vertex -5 -2.88675 -2.04124 + endloop + endfacet + facet normal 0.816496 0.471405 0.333334 + outer loop + vertex 0 5.7735 -2.04124 + vertex 0 0 6.12372 + vertex 5 -2.88675 -2.04124 + endloop + endfacet + facet normal 0 -0.942809 0.333333 + outer loop + vertex 0 0 6.12372 + vertex -5 -2.88675 -2.04124 + vertex 5 -2.88675 -2.04124 + endloop + endfacet +endsolid OpenSCAD_Model diff --git a/apps/viewstl/toilet_s.stl b/apps/viewstl/toilet_s.stl new file mode 100644 index 000000000..78e4dc4f6 --- /dev/null +++ b/apps/viewstl/toilet_s.stl @@ -0,0 +1,516 @@ + vertex 19.7498 20 20 + vertex -32 20 72 + vertex -22.2161 20 20 + vertex -32 20 -50 + vertex -13.6629 20 -15 + vertex -18.2693 20 2.5 + vertex -32 20 -50 + vertex -18.2693 20 2.5 + vertex -22.2161 20 20 + vertex -32 20 -50 + vertex -22.2161 20 20 + vertex -32 20 72 + vertex -13.6629 20 -15 + vertex -32 20 -50 + vertex -12.5096 20 -32.5 + vertex -12.5096 20 -32.5 + vertex -32 20 -50 + vertex -13.3296 20 -50 + vertex -32 20 72 + vertex 19.7498 20 20 + vertex 32 20 72 + vertex 32 20 -50 + vertex 19.7498 20 20 + vertex 16.2412 20 2.5 + vertex 32 20 -50 + vertex 12.1461 20 -15 + vertex 11.1209 20 -32.5 + vertex 12.1461 20 -15 + vertex 32 20 -50 + vertex 16.2412 20 2.5 + vertex 32 20 -50 + vertex 11.1209 20 -32.5 + vertex 11.8499 20 -50 + vertex 19.7498 20 20 + vertex 32 20 -50 + vertex 32 20 72 + vertex -13.3296 20 -50 + vertex -21.1652 7.10585 -32.5 + vertex -12.5096 20 -32.5 + vertex 18.3851 15.2836 -50 + vertex 17.254 15.5738 -32.5 + vertex 22.5235 -2.52352 -32.5 + vertex 24 -4 -50 + vertex 22.5235 -2.52352 -32.5 + vertex 22.5235 -2.52353 -32.5 + vertex 22.5235 -2.52352 -32.5 + vertex 24 -4 -50 + vertex 18.3851 15.2836 -50 + vertex -22.5526 -14.2606 -50 + vertex 24 -4 -50 + vertex 18.3851 -23.2836 -50 + vertex 11.8499 20 -50 + vertex 24 -4 -50 + vertex -22.5526 6.2606 -50 + vertex -12 -29.9808 -50 + vertex 18.3851 -23.2836 -50 + vertex 4.16755 -33.5442 -50 + vertex 11.8499 20 -50 + vertex 32 45 -50 + vertex 32 20 -50 + vertex 18.3851 -23.2836 -50 + vertex -12 -29.9808 -50 + vertex -22.5526 -14.2606 -50 + vertex 24 -4 -50 + vertex -22.5526 -14.2606 -50 + vertex -22.5526 6.2606 -50 + vertex -32 45 -50 + vertex 11.8499 20 -50 + vertex -13.3296 20 -50 + vertex -32 45 -50 + vertex -13.3296 20 -50 + vertex -32 20 -50 + vertex 11.8499 20 -50 + vertex -32 45 -50 + vertex 32 45 -50 + vertex 24 -4 -50 + vertex 11.8499 20 -50 + vertex 18.3851 15.2836 -50 + vertex 11.8499 20 -50 + vertex -22.5526 6.2606 -50 + vertex -13.3296 20 -50 + vertex 24 -4 -50 + vertex 22.5235 -2.52353 -32.5 + vertex 18.3851 -23.2836 -50 + vertex 18.3851 -23.2836 -50 + vertex 17.254 -20.6208 -32.5 + vertex 3.91117 -30.2502 -32.5 + vertex 17.254 15.5738 -32.5 + vertex 18.3851 15.2836 -50 + vertex 11.8499 20 -50 + vertex 11.8499 20 -50 + vertex 11.1209 20 -32.5 + vertex 17.254 15.5738 -32.5 + vertex 3.91117 -30.2502 -32.5 + vertex -11.2618 -26.906 -32.5 + vertex 4.16755 -33.5442 -50 + vertex -11.2618 -26.906 -32.5 + vertex -12 -29.9808 -50 + vertex 4.16755 -33.5442 -50 + vertex -21.1652 -12.1529 -32.5 + vertex -22.5526 -14.2606 -50 + vertex -11.2618 -26.906 -32.5 + vertex -22.5526 6.2606 -50 + vertex -21.1652 -12.1529 -32.5 + vertex -21.1652 7.10584 -32.5 + vertex -21.1652 -12.1529 -32.5 + vertex -22.5526 6.2606 -50 + vertex -22.5526 -14.2606 -50 + vertex -22.5526 6.2606 -50 + vertex -21.1652 7.10585 -32.5 + vertex -13.3296 20 -50 + vertex -21.1652 7.10585 -32.5 + vertex -22.5526 6.2606 -50 + vertex -21.1652 7.10584 -32.5 + vertex 22.5235 -2.52353 -32.5 + vertex 17.254 -20.6208 -32.5 + vertex 18.3851 -23.2836 -50 + vertex 3.91117 -30.2502 -32.5 + vertex 4.16755 -33.5442 -50 + vertex 18.3851 -23.2836 -50 + vertex -12 -29.9808 -50 + vertex -11.2618 -26.906 -32.5 + vertex -22.5526 -14.2606 -50 + vertex 24.6 -4.6 -15 + vertex 22.5235 -2.52352 -32.5 + vertex 18.8447 15.1657 -15 + vertex 22.5235 -2.52352 -32.5 + vertex 24.6 -4.6 -15 + vertex 22.5235 -2.52353 -32.5 + vertex 18.8447 15.1657 -15 + vertex 17.254 15.5738 -32.5 + vertex 12.1461 20 -15 + vertex 17.254 15.5738 -32.5 + vertex 11.1209 20 -32.5 + vertex 12.1461 20 -15 + vertex 4.27174 -34.8828 -15 + vertex -11.2618 -26.906 -32.5 + vertex 3.91117 -30.2502 -32.5 + vertex -21.1652 7.10585 -32.5 + vertex -13.6629 20 -15 + vertex -12.5096 20 -32.5 + vertex 18.8447 15.1657 -15 + vertex 22.5235 -2.52352 -32.5 + vertex 17.254 15.5738 -32.5 + vertex 22.5235 -2.52353 -32.5 + vertex 24.6 -4.6 -15 + vertex 18.8447 -24.3657 -15 + vertex -21.1652 -12.1529 -32.5 + vertex -11.2618 -26.906 -32.5 + vertex -23.1164 -15.1171 -15 + vertex 4.27174 -34.8828 -15 + vertex 3.91117 -30.2502 -32.5 + vertex 17.254 -20.6208 -32.5 + vertex 17.254 -20.6208 -32.5 + vertex 18.8447 -24.3657 -15 + vertex 4.27174 -34.8828 -15 + vertex 22.5235 -2.52353 -32.5 + vertex 18.8447 -24.3657 -15 + vertex 17.254 -20.6208 -32.5 + vertex -21.1652 -12.1529 -32.5 + vertex -23.1164 5.91711 -15 + vertex -21.1652 7.10584 -32.5 + vertex -23.1164 5.91711 -15 + vertex -21.1652 -12.1529 -32.5 + vertex -23.1164 -15.1171 -15 + vertex -12.3 -31.2303 -15 + vertex -11.2618 -26.906 -32.5 + vertex 4.27174 -34.8828 -15 + vertex -23.1164 5.91711 -15 + vertex -21.1652 7.10585 -32.5 + vertex -21.1652 7.10584 -32.5 + vertex -21.1652 7.10585 -32.5 + vertex -23.1164 5.91711 -15 + vertex -13.6629 20 -15 + vertex -11.2618 -26.906 -32.5 + vertex -12.3 -31.2303 -15 + vertex -23.1164 -15.1171 -15 + vertex 32.8939 -12.8939 2.5 + vertex 24.6 -4.6 -15 + vertex 25.1982 13.5358 2.5 + vertex 18.8447 15.1657 -15 + vertex 12.1461 20 -15 + vertex 16.2412 20 2.5 + vertex 18.8447 15.1657 -15 + vertex 16.2412 20 2.5 + vertex 25.1982 13.5358 2.5 + vertex 24.6 -4.6 -15 + vertex 18.8447 15.1657 -15 + vertex 25.1982 13.5358 2.5 + vertex 25.1982 -39.3236 2.5 + vertex 24.6 -4.6 -15 + vertex 32.8939 -12.8939 2.5 + vertex -13.6629 20 -15 + vertex -23.1164 5.91711 -15 + vertex -18.2693 20 2.5 + vertex -16.4469 -48.5026 2.5 + vertex -23.1164 -15.1171 -15 + vertex -12.3 -31.2303 -15 + vertex -23.1164 -15.1171 -15 + vertex -30.9101 1.16907 2.5 + vertex -23.1164 5.91711 -15 + vertex -30.9101 1.16907 2.5 + vertex -23.1164 -15.1171 -15 + vertex -30.9101 -26.9569 2.5 + vertex 5.71196 -53.3866 2.5 + vertex -16.4469 -48.5026 2.5 + vertex 4.27174 -34.8828 -15 + vertex 25.1982 -39.3236 2.5 + vertex 18.8447 -24.3657 -15 + vertex 24.6 -4.6 -15 + vertex 4.27174 -34.8828 -15 + vertex -16.4469 -48.5026 2.5 + vertex -12.3 -31.2303 -15 + vertex 5.71196 -53.3866 2.5 + vertex 4.27174 -34.8828 -15 + vertex 18.8447 -24.3657 -15 + vertex -23.1164 5.91711 -15 + vertex -30.9101 1.16907 2.5 + vertex -18.2693 20 2.5 + vertex 25.1982 -39.3236 2.5 + vertex 5.71196 -53.3866 2.5 + vertex 18.8447 -24.3657 -15 + vertex -16.4469 -48.5026 2.5 + vertex -30.9101 -26.9569 2.5 + vertex -23.1164 -15.1171 -15 + vertex 21.4492 2.49756 20 + vertex 40 -20 20 + vertex 30.6418 12.1394 20 + vertex 40 -20 20 + vertex 21.4492 2.49756 20 + vertex 28 -20 20 + vertex 19.7498 20 20 + vertex 21.4492 2.49756 20 + vertex 30.6418 12.1394 20 + vertex 19.7498 20 20 + vertex 4.86216 14.4683 20 + vertex 21.4492 2.49756 20 + vertex 19.7498 20 20 + vertex 4.86215 14.4683 20 + vertex 4.86216 14.4683 20 + vertex -22.2161 20 20 + vertex 4.86215 14.4683 20 + vertex 19.7498 20 20 + vertex 4.86215 14.4683 20 + vertex -22.2161 20 20 + vertex 4.86214 14.4683 20 + vertex 4.86214 14.4683 20 + vertex -22.2161 20 20 + vertex -14 10.3109 20 + vertex -37.5877 -2.899 20 + vertex -14 10.3109 20 + vertex -22.2161 20 20 + vertex -14 10.3109 20 + vertex -37.5877 -2.899 20 + vertex -26.3114 -8.02929 20 + vertex -26.3114 -8.0293 20 + vertex -37.5877 -2.899 20 + vertex -26.3114 -31.9707 20 + vertex -26.3114 -8.02929 20 + vertex -37.5877 -2.899 20 + vertex -26.3114 -8.0293 20 + vertex 21.4492 -42.4976 20 + vertex 40 -20 20 + vertex 28 -20 20 + vertex 40 -20 20 + vertex 21.4492 -42.4976 20 + vertex 30.6418 -52.1394 20 + vertex 4.86216 -54.4683 20 + vertex 30.6418 -52.1394 20 + vertex 21.4492 -42.4976 20 + vertex 30.6418 -52.1394 20 + vertex 4.86216 -54.4683 20 + vertex 6.94592 -69.2404 20 + vertex 4.86215 -54.4683 20 + vertex 6.94592 -69.2404 20 + vertex 4.86216 -54.4683 20 + vertex 4.86214 -54.4683 20 + vertex 6.94592 -69.2404 20 + vertex 4.86215 -54.4683 20 + vertex -20 -63.3013 20 + vertex 4.86214 -54.4683 20 + vertex -14 -50.3109 20 + vertex 4.86214 -54.4683 20 + vertex -20 -63.3013 20 + vertex 6.94592 -69.2404 20 + vertex -37.5877 -37.101 20 + vertex -14 -50.3109 20 + vertex -26.3114 -31.9707 20 + vertex -37.5877 -37.101 20 + vertex -26.3114 -31.9707 20 + vertex -37.5877 -2.899 20 + vertex -14 -50.3109 20 + vertex -37.5877 -37.101 20 + vertex -20 -63.3013 20 + vertex 32.8939 -12.8939 2.5 + vertex 30.6418 12.1394 20 + vertex 40 -20 20 + vertex 25.1982 13.5358 2.5 + vertex 16.2412 20 2.5 + vertex 19.7498 20 20 + vertex 25.1982 13.5358 2.5 + vertex 19.7498 20 20 + vertex 30.6418 12.1394 20 + vertex 32.8939 -12.8939 2.5 + vertex 25.1982 13.5358 2.5 + vertex 30.6418 12.1394 20 + vertex 40 -20 20 + vertex 30.6418 -52.1394 20 + vertex 32.8939 -12.8939 2.5 + vertex -20 -63.3013 20 + vertex -30.9101 -26.9569 2.5 + vertex -16.4469 -48.5026 2.5 + vertex -30.9101 -26.9569 2.5 + vertex -37.5877 -2.899 20 + vertex -30.9101 1.16907 2.5 + vertex -37.5877 -2.899 20 + vertex -30.9101 -26.9569 2.5 + vertex -37.5877 -37.101 20 + vertex 30.6418 -52.1394 20 + vertex 25.1982 -39.3236 2.5 + vertex 32.8939 -12.8939 2.5 + vertex 5.71196 -53.3866 2.5 + vertex -20 -63.3013 20 + vertex -16.4469 -48.5026 2.5 + vertex 6.94592 -69.2404 20 + vertex -20 -63.3013 20 + vertex 5.71196 -53.3866 2.5 + vertex -18.2693 20 2.5 + vertex -37.5877 -2.899 20 + vertex -22.2161 20 20 + vertex -30.9101 1.16907 2.5 + vertex -37.5877 -2.899 20 + vertex -18.2693 20 2.5 + vertex 6.94592 -69.2404 20 + vertex 5.71196 -53.3866 2.5 + vertex 30.6418 -52.1394 20 + vertex 30.6418 -52.1394 20 + vertex 5.71196 -53.3866 2.5 + vertex 25.1982 -39.3236 2.5 + vertex -20 -63.3013 20 + vertex -37.5877 -37.101 20 + vertex -30.9101 -26.9569 2.5 + vertex 17.3528 -38.2009 6.83361 + vertex 8.65248 -20 -1.30367 + vertex 6.62818 -26.9521 -1.30367 + vertex 4.86214 14.4683 20 + vertex -14 10.3109 20 + vertex 4.86215 14.4683 20 + vertex -26.3114 -8.0293 20 + vertex -26.3114 -31.9707 20 + vertex -26.3114 -8.02929 20 + vertex 28 -20 20 + vertex 21.4492 2.49757 20 + vertex 17.3528 -1.79909 6.83361 + vertex 22.6525 -20 6.83361 + vertex 28 -20 20 + vertex 17.3528 -1.79909 6.83361 + vertex 22.6525 -20 6.83361 + vertex 17.3528 -1.79909 6.83361 + vertex 8.65248 -20 -1.30367 + vertex 17.3528 -1.79909 6.83361 + vertex 21.4492 2.49757 20 + vertex 4.86215 14.4683 20 + vertex 4.86216 -54.4683 20 + vertex 21.4492 -42.4976 20 + vertex 4.86215 -54.4683 20 + vertex -8.13067 -16.3008 -1.30367 + vertex -11.3262 4.52203 6.83361 + vertex -21.2864 -10.3155 6.83361 + vertex 3.93356 7.88542 6.83361 + vertex 4.86215 14.4683 20 + vertex -11.3262 4.52203 6.83361 + vertex -14 -50.3109 20 + vertex 4.86214 -54.4683 20 + vertex 4.86215 -54.4683 20 + vertex 4.86215 -54.4683 20 + vertex 17.3528 -38.2009 6.83361 + vertex 3.93356 -47.8854 6.83361 + vertex -14 -50.3109 20 + vertex -21.2864 -29.6845 6.83361 + vertex -26.3114 -31.9707 20 + vertex 4.86215 -54.4683 20 + vertex -11.3262 -44.522 6.83361 + vertex -14 -50.3109 20 + vertex 21.4492 2.49757 20 + vertex 4.86216 14.4683 20 + vertex 4.86215 14.4683 20 + vertex 4.86216 14.4683 20 + vertex 21.4492 2.49757 20 + vertex 21.4492 2.49756 20 + vertex 21.4492 2.49757 20 + vertex 28 -20 20 + vertex 21.4492 2.49756 20 + vertex -21.2864 -10.3155 6.83361 + vertex -8.13067 -23.6992 -1.30367 + vertex -8.13067 -16.3008 -1.30367 + vertex -8.13067 -23.6992 -1.30367 + vertex -21.2864 -10.3155 6.83361 + vertex -21.2864 -29.6845 6.83361 + vertex 17.3528 -1.79909 6.83361 + vertex 4.86215 14.4683 20 + vertex 3.93356 7.88542 6.83361 + vertex 1.50249 -9.34872 -1.30367 + vertex 3.93356 7.88542 6.83361 + vertex -11.3262 4.52203 6.83361 + vertex -11.3262 4.52203 6.83361 + vertex 4.86215 14.4683 20 + vertex -14 10.3109 20 + vertex 28 -20 20 + vertex 22.6525 -20 6.83361 + vertex 17.3528 -38.2009 6.83361 + vertex 17.3528 -38.2009 6.83361 + vertex 22.6525 -20 6.83361 + vertex 8.65248 -20 -1.30367 + vertex -14 -50.3109 20 + vertex -11.3262 -44.522 6.83361 + vertex -21.2864 -29.6845 6.83361 + vertex 3.93356 -47.8854 6.83361 + vertex 17.3528 -38.2009 6.83361 + vertex 1.50249 -30.6513 -1.30367 + vertex -11.3262 4.52203 6.83361 + vertex -14 10.3109 20 + vertex -26.3114 -8.02929 20 + vertex 21.4492 -42.4976 20 + vertex 17.3528 -38.2009 6.83361 + vertex 4.86215 -54.4683 20 + vertex 21.4492 -42.4976 20 + vertex 28 -20 20 + vertex 17.3528 -38.2009 6.83361 + vertex -21.2864 -10.3155 6.83361 + vertex -11.3262 4.52203 6.83361 + vertex -26.3114 -8.02929 20 + vertex -26.3114 -8.02929 20 + vertex -21.2864 -29.6845 6.83361 + vertex -21.2864 -10.3155 6.83361 + vertex -21.2864 -29.6845 6.83361 + vertex -26.3114 -8.02929 20 + vertex -26.3114 -31.9707 20 + vertex 3.93356 -47.8854 6.83361 + vertex 1.50249 -30.6513 -1.30367 + vertex -11.3262 -44.522 6.83361 + vertex 4.86215 -54.4683 20 + vertex 3.93356 -47.8854 6.83361 + vertex -11.3262 -44.522 6.83361 + vertex 17.3528 -38.2009 6.83361 + vertex 6.62818 -26.9521 -1.30367 + vertex 1.50249 -30.6513 -1.30367 + vertex -4.32624 -10.6334 -1.30367 + vertex 1.50249 -9.34872 -1.30367 + vertex -11.3262 4.52203 6.83361 + vertex 1.50249 -30.6513 -1.30367 + vertex -4.32624 -29.3666 -1.30367 + vertex -11.3262 -44.522 6.83361 + vertex -11.3262 -44.522 6.83361 + vertex -8.13067 -23.6992 -1.30367 + vertex -21.2864 -29.6845 6.83361 + vertex 17.3528 -1.79909 6.83361 + vertex 3.93356 7.88542 6.83361 + vertex 1.50249 -9.34872 -1.30367 + vertex -4.32624 -29.3666 -1.30367 + vertex -8.13067 -23.6992 -1.30367 + vertex -11.3262 -44.522 6.83361 + vertex -8.13067 -16.3008 -1.30367 + vertex 8.65248 -20 -1.30367 + vertex 6.62818 -13.0479 -1.30367 + vertex -4.32624 -10.6334 -1.30367 + vertex 6.62818 -13.0479 -1.30367 + vertex 1.50249 -9.34872 -1.30367 + vertex -8.13067 -23.6992 -1.30367 + vertex 8.65248 -20 -1.30367 + vertex -8.13067 -16.3008 -1.30367 + vertex 6.62818 -13.0479 -1.30367 + vertex -4.32624 -10.6334 -1.30367 + vertex -8.13067 -16.3008 -1.30367 + vertex 8.65248 -20 -1.30367 + vertex -8.13067 -23.6992 -1.30367 + vertex 6.62818 -26.9521 -1.30367 + vertex -4.32624 -29.3666 -1.30367 + vertex 6.62818 -26.9521 -1.30367 + vertex -8.13067 -23.6992 -1.30367 + vertex 6.62818 -26.9521 -1.30367 + vertex -4.32624 -29.3666 -1.30367 + vertex 1.50249 -30.6513 -1.30367 + vertex -8.13067 -16.3008 -1.30367 + vertex -4.32624 -10.6334 -1.30367 + vertex -11.3262 4.52203 6.83361 + vertex 6.62818 -13.0479 -1.30367 + vertex 17.3528 -1.79909 6.83361 + vertex 1.50249 -9.34872 -1.30367 + vertex 8.65248 -20 -1.30367 + vertex 17.3528 -1.79909 6.83361 + vertex 6.62818 -13.0479 -1.30367 + vertex 32 20 72 + vertex 32 45 -50 + vertex 32 45 72 + vertex 32 45 -50 + vertex 32 20 72 + vertex 32 20 -50 + vertex -32 20 -50 + vertex -32 45 72 + vertex -32 45 -50 + vertex -32 45 72 + vertex -32 20 -50 + vertex -32 20 72 + vertex 32 45 -50 + vertex -32 45 72 + vertex 32 45 72 + vertex -32 45 72 + vertex 32 45 -50 + vertex -32 45 -50 + vertex -32 45 72 + vertex 32 20 72 + vertex 32 45 72 + vertex 32 20 72 + vertex -32 45 72 + vertex -32 20 72 diff --git a/apps/viewstl/viewstl-icon.js b/apps/viewstl/viewstl-icon.js new file mode 100644 index 000000000..afa7c1538 --- /dev/null +++ b/apps/viewstl/viewstl-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwxH+AH4A/AH4A/AA07iAutF4IwrFwM7mgwqFwU7nQvBGE4uDSAYwmFwovEGEYuGF4owhFw4vGGD4uIF44wdFxM7mgwiFxU7nQvHGDInExOz2eJSBgwYEoll6/X1vX2YvNGCqGFxPXLoIyBF5wwTWwxfB1oyBL54wSFwwrBAAWtBQk0GDYuGr6KCMILvFF5owNFwyNDYIgADnQvNGBYuHAAOzR4dlBYovOGBU6nQwIxOt1ouGF7QABiE0GRIAHFhkPeJwSCGR4tLhMPFxowEGQQvLmguIhIuRGAwyLnQtIFyYwIAAKXGF4otCFyowKGQy4EFzIwMfoYtFFzIwNRQoucGBwuhGBgujGBYukGBQulGBAunGA4uoGAsPF1IwEF1YwDF1n+mkQF1gA/AH4A/ADI")) diff --git a/apps/viewstl/viewstl.app.js b/apps/viewstl/viewstl.app.js new file mode 100644 index 000000000..c732ef298 --- /dev/null +++ b/apps/viewstl/viewstl.app.js @@ -0,0 +1,422 @@ +// globals +var u = [0, 1, 0]; // axis of rotation +var aux = new Float32Array(12); +var p_aux = E.getAddressOf(aux, true); +var a = 0.5; // angle of rotation +var light = new Float32Array(12); +var p_light = E.getAddressOf(light, true); +light[0] = 1/Math.sqrt(2); +light[1] = 1/Math.sqrt(2); +light[2] = 0; +var filex = new Float32Array(6); +var p_filex = E.getAddressOf(filex, true); +var addr = new Int32Array(12); +var p_addr = E.getAddressOf(addr, true); +var polyp = new Int32Array(6); +var p_polyp = E.getAddressOf(polyp, true); +var polyedge = new Int32Array(8); +var p_polyedge = E.getAddressOf(polyedge, true); +var edges; +var p_edges; +var zbuf; +var p_zbuf; +var zDist; +var points; +var p_points; +var rpoints; +var p_rpoints; +var npoints = 0; +var faces; +var p_faces; +var vpoints; +var p_vpoints; +var normals; +var p_normals; +var rnormals; +var p_rnormals; +var lastTime; +var nFrames = 0; +var interv; +var qZrot = false; +var qWireframe = 0; +var zBeta = 0; + +const c05 = Math.cos(0.05); +const s05 = Math.sin(0.05); + +var c = E.compiledC(` +// void rotatePoints(int, int, int, int) +// void projectPoints(int, int, int, int) +// void popZBuf(int, int, int, int) +// int processFace(int, int, int) +// void initEdges(int, int) +// int findSlot(int, int, int) +void rotatePoints(float *p, float *res, int len, float *u) { + float c = u[3]; + float s = u[4]; + for (int i=0; i*pivot && left0) { + for (int j=0; j<3; ++j) { + polyp[j*2+0] = vpoints[faces[z*3+j]*2]; + polyp[j*2+1] = vpoints[faces[z*3+j]*2+1]; + } + if (qWire) { + char e = edges[z]; + switch(e) { + case 1: + polyedge[0]=polyp[0];polyedge[1]=polyp[1]; + polyedge[2]=polyp[2];polyedge[3]=polyp[3]; + polyedge[4]=polyp[0];polyedge[5]=polyp[1]; + polyedge[6]=polyp[2];polyedge[7]=polyp[3]; + break; + case 2: + polyedge[0]=polyp[2];polyedge[1]=polyp[3]; + polyedge[2]=polyp[4];polyedge[3]=polyp[5]; + polyedge[4]=polyp[2];polyedge[5]=polyp[3]; + polyedge[6]=polyp[4];polyedge[7]=polyp[5]; + break; + case 4: + polyedge[0]=polyp[4];polyedge[1]=polyp[5]; + polyedge[2]=polyp[0];polyedge[3]=polyp[1]; + polyedge[4]=polyp[4];polyedge[5]=polyp[5]; + polyedge[6]=polyp[0];polyedge[7]=polyp[1]; + break; + case 7: + for (int k=0; k<6; ++k) polyedge[k] = polyp[k]; + polyedge[6] = polyp[0]; polyedge[7] = polyp[1]; + break; + case 3: + for (int k=0; k<6; ++k) polyedge[k] = polyp[k]; + polyedge[6]=polyp[4]; polyedge[7]=polyp[5]; + break; + case 5: + polyedge[0]=polyp[4];polyedge[1]=polyp[5]; + polyedge[2]=polyp[0];polyedge[3]=polyp[1]; + polyedge[4]=polyp[2];polyedge[5]=polyp[3]; + polyedge[6]=polyp[2];polyedge[7]=polyp[3]; + break; + case 6: + polyedge[0]=polyp[2];polyedge[1]=polyp[3]; + polyedge[2]=polyp[4];polyedge[3]=polyp[5]; + polyedge[4]=polyp[0];polyedge[5]=polyp[1]; + polyedge[6]=polyp[0];polyedge[7]=polyp[1]; + break; + default: + for (int k=0; k<8; ++k) polyedge[k]=-1; + } + } + float s = 0.2+(1.0+rnormals[3*z+0]*light[0]+rnormals[3*z+1]*light[1]+rnormals[3*z+2]*light[2])/2.9; + shade = int(s*31) | (int(s*63)<<5) | (int(s*31)<<11); + return shade; + } + else return 0; +} +void initEdges(int *p, int len) { + short *faces = (short *)p[0]; + char *edges = (char *)p[5]; + float *normals = (float *)p[7]; + for (int i=0; i-0.0001 && p[3*i+1]-x[1]<0.0001 && p[3*i+1]-x[1]>-0.0001 && p[3*i+2]-x[2]<0.0001 && p[3*i+2]-x[2]>-0.0001) return i; + p[3*len] = x[0]; + p[3*len+1] = x[1]; + p[3*len+2] = x[2]; + return len; +} +typedef unsigned int uint32_t; +typedef signed int int32_t; +typedef unsigned char uint8_t; +/* +https://github.com/espruino/Espruino/blob/master/targetlibs/nrf5x_12/components/toolchain/cmsis/include/cmsis_gcc.h +*/ +__attribute__( ( always_inline ) ) static inline uint32_t __get_FPSCR(void) +{ + uint32_t result; + /* Empty asm statement works as a scheduling barrier */ + __asm volatile (""); + __asm volatile ("VMRS %0, fpscr" : "=r" (result) ); + __asm volatile (""); + return(result); +} +__attribute__( ( always_inline ) ) static inline void __set_FPSCR(uint32_t fpscr) +{ + /* Empty asm statement works as a scheduling barrier */ + __asm volatile (""); + __asm volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc"); + __asm volatile (""); +} +`); + +function initNormals() { + var i = faces.length/3; + while (i--) { + normals[i*3+0] = (points[faces[3*i+1]*3+1]-points[faces[3*i+0]*3+1])*(points[faces[3*i+2]*3+2]-points[faces[3*i+0]*3+2]) - (points[faces[3*i+1]*3+2]-points[faces[3*i+0]*3+2])*(points[faces[3*i+2]*3+1]-points[faces[3*i+0]*3+1]); + normals[i*3+1] = (points[faces[3*i+1]*3+2]-points[faces[3*i+0]*3+2])*(points[faces[3*i+2]*3+0]-points[faces[3*i+0]*3+0]) - (points[faces[3*i+1]*3+0]-points[faces[3*i+0]*3+0])*(points[faces[3*i+2]*3+2]-points[faces[3*i+0]*3+2]); + normals[i*3+2] = (points[faces[3*i+1]*3+0]-points[faces[3*i+0]*3+0])*(points[faces[3*i+2]*3+1]-points[faces[3*i+0]*3+1]) - (points[faces[3*i+1]*3+1]-points[faces[3*i+0]*3+1])*(points[faces[3*i+2]*3+0]-points[faces[3*i+0]*3+0]); + var n = Math.sqrt(normals[i*3]*normals[i*3]+normals[i*3+1]*normals[i*3+1]+normals[i*3+2]*normals[i*3+2]); + if (n>0) { + normals[i*3] /= -n; + normals[i*3+1] /= -n; + normals[i*3+2] /= -n; + } + } +} + +function readSTL(fn) { + var fb = require("Storage").read(fn); + var nverts=0,i=0; while((i=fb.indexOf("vertex",i)+1)!=0) nverts++; + points = new Float32Array(nverts); + p_points = E.getAddressOf(points, true); + faces = new Uint16Array(nverts); + p_faces = E.getAddressOf(faces, true); + edges = new Uint8Array(Math.max(faces.length/3,24)) + p_edges = E.getAddressOf(edges, true); + var fp=0, p=0; + var nf = 0; + g.setColor(0.9, 0.9, 0.9); + g.drawRect(20, 140, 220, 160); + g.setColor(0.6, 0.6, 0.9); + while (px) x = e; + } + return Math.sqrt(x); +} + +function draw() { + "ram" + const n = [1, 0, 0]; + if (qZrot) { + var ca=Math.cos(a), sa=Math.sin(a), cb=Math.cos(zBeta), sb=Math.sin(zBeta); + var ul = Math.sqrt(sb*sb+ca*ca*sb*sb+2*sa*sa*cb+2*ca*sb*sb+2*sa*sa); + u = [(sb+ca*sb)/ul, (-sa-sa*cb)/ul, (-sa*sb)/ul]; + var ra = Math.acos((ca+cb+ca*cb-1)/2); + if (ra<0) ra += Math.PI; + aux[3] = Math.cos(ra); + aux[4] = Math.sin(ra); + } + else { + u = rotV(u, n, c05, s05); + aux[3] = Math.cos(a); + aux[4] = Math.sin(a); + } + a += 0.08; + aux[0] = u[0]; aux[1]=u[1]; aux[2]=u[2]; + c.rotatePoints(p_points, p_rpoints, npoints, p_aux); + c.rotatePoints(p_normals, p_rnormals, faces.length/3, p_aux); + c.projectPoints(p_rpoints, p_vpoints, npoints, 0|zDist*100); + c.popZBuf(p_rpoints, p_faces, p_zbuf, faces.length/3); + g.clear(); + var z, shade; + if (qWireframe>0) { + var i = faces.length/3; + while (i--) { + z = zbuf[i]; + shade = 0|c.processFace(p_addr, z, 1); + if (shade > 0) { + if (qWireframe==1) g.setColor(shade).fillPoly(polyp).setColor(0).drawPoly(polyedge); + else { + g.setColor(0).fillPoly(polyp).setColor(shade); + if (qWireframe==2) g.drawPoly(polyedge); + else g.drawPoly(polyp, true); + } + } + } + } + else { + var i = faces.length/3; + while (i--) { + z = zbuf[i]; + shade = 0|c.processFace(p_addr, z, 0); + if (shade > 0) g.setColor(shade).fillPoly(polyp); + } + } + nFrames++; + var fps = Math.round(nFrames*100000/(Date.now()-lastTime))/100; + g.setColor(0.7, 0.7, 0.7); + g.setFont("6x8", 1); + g.drawString("fps:"+fps.toString(), 20, 0); + g.flip(); +} + +function loadFile(fn) { + Bangle.setLCDMode("direct"); + g.clear(); + E.showMenu(); + E.showMessage("Loading...", fn); + readSTL(fn); + zDist = 5*largestExtent(points); + g.clear(); + g.setColor(1, 1, 1); + g.setFont("6x8", 2); + g.setFontAlign(-1, -1); + g.setColor(1, 0.5, 0.5); + g.drawString("Model info",15, 40); + g.setColor(1, 1, 1); + g.drawString("# faces: "+faces.length/3, 15, 80); + g.drawString("# vertices: "+npoints, 15, 110); + g.drawString("max extent: "+Math.round(100*(zDist/5))/100, 15, 140); + g.flip(); + setWatch(function() { + if (interv) { + interv = clearInterval(interv); + load(); + } + else { + Bangle.setLCDMode("doublebuffered"); + lastTime = Date.now(); + nFrames = 0; + interv = setInterval(function() { draw();}, 30); + } }, BTN2, {repeat:true, debounce:50}); + setWatch(function() { + if (qZrot && zBeta<2*Math.PI/2-0.08) zBeta += 0.08; + else zDist *= 0.9; + }, BTN1, {repeat:true}); + setWatch(function() { + if (qZrot && zBeta>-2*Math.PI/2-0.08) zBeta -= 0.08; + else zDist /= 0.9; + }, BTN3, {repeat:true}); + Bangle.on('swipe', function(direction){ + switch(direction){ + case 1: + qZrot = !qZrot; + break; + case -1: + qWireframe = (qWireframe+1)%4; + break; + }}); +} + +function drawMenu() { + const menu = { + '': { 'title': 'STL files' } + }; + var files = require("Storage").list(".stl"); + for (var i=0; i0) { + normals[i*3] /= -n; + normals[i*3+1] /= -n; + normals[i*3+2] /= -n; + } + } +} + +function readSTL(fn) { + var fb = require("Storage").read(fn); + var nverts=0,i=0; while((i=fb.indexOf("vertex",i)+1)!=0) nverts++; + points = new Float32Array(nverts); + p_points = E.getAddressOf(points, true); + faces = new Uint16Array(nverts); + p_faces = E.getAddressOf(faces, true); + edges = new Uint8Array(Math.max(faces.length/3,24)) + p_edges = E.getAddressOf(edges, true); + var fp=0, p=0; + var nf = 0; + g.setColor(0.9, 0.9, 0.9); + g.drawRect(20, 140, 220, 160); + g.setColor(0.6, 0.6, 0.9); + while (px) x = e; + } + return Math.sqrt(x); +} + +function draw() { + "ram" + const n = [1, 0, 0]; + if (qZrot) { + var ca=Math.cos(a), sa=Math.sin(a), cb=Math.cos(zBeta), sb=Math.sin(zBeta); + var ul = Math.sqrt(sb*sb+ca*ca*sb*sb+2*sa*sa*cb+2*ca*sb*sb+2*sa*sa); + u = [(sb+ca*sb)/ul, (-sa-sa*cb)/ul, (-sa*sb)/ul]; + var ra = Math.acos((ca+cb+ca*cb-1)/2); + if (ra<0) ra += Math.PI; + aux[3] = Math.cos(ra); + aux[4] = Math.sin(ra); + } + else { + u = rotV(u, n, c05, s05); + aux[3] = Math.cos(a); + aux[4] = Math.sin(a); + } + a += 0.08; + aux[0] = u[0]; aux[1]=u[1]; aux[2]=u[2]; + c.rotatePoints(p_points, p_rpoints, npoints, p_aux); + c.rotatePoints(p_normals, p_rnormals, faces.length/3, p_aux); + c.projectPoints(p_rpoints, p_vpoints, npoints, 0|zDist*100); + c.popZBuf(p_rpoints, p_faces, p_zbuf, faces.length/3); + g.clear(); + var z, shade; + if (qWireframe>0) { + var i = faces.length/3; + while (i--) { + z = zbuf[i]; + shade = 0|c.processFace(p_addr, z, 1); + if (shade > 0) { + if (qWireframe==1) { + g.setColor(shade); + g.fillPoly(polyp); + g.setColor(0); + g.drawPoly(polyedge); + } + else { + g.setColor(0); + g.fillPoly(polyp); + g.setColor(shade); + if (qWireframe==2) g.drawPoly(polyedge); + else g.drawPoly(polyp, true); + } + } + } + } + else { + var i = faces.length/3; + while (i--) { + z = zbuf[i]; + shade = 0|c.processFace(p_addr, z, 0); + if (shade > 0) { + g.setColor(shade); + g.fillPoly(polyp); + } + } + } + nFrames++; + var fps = Math.round(nFrames*100000/(Date.now()-lastTime))/100; + g.setColor(0.7, 0.7, 0.7); + g.setFont("6x8", 1); + g.drawString("fps:"+fps.toString(), 20, 0); + g.flip(); +} + +function loadFile(fn) { + Bangle.setLCDMode("direct"); + g.clear(); + E.showMenu(); + E.showMessage("Loading...", fn); + readSTL(fn); + zDist = 5*largestExtent(points); + g.clear(); + g.setColor(1, 1, 1); + g.setFont("6x8", 2); + g.setFontAlign(-1, -1); + g.setColor(1, 0.5, 0.5); + g.drawString("Model info",15, 40); + g.setColor(1, 1, 1); + g.drawString("# faces: "+faces.length/3, 15, 80); + g.drawString("# vertices: "+npoints, 15, 110); + g.drawString("max extent: "+Math.round(100*(zDist/5))/100, 15, 140); + g.flip(); + setWatch(function() { + if (interv) { + interv = clearInterval(interv); + c.clearFPU(); load(); + } + else { + Bangle.setLCDMode("doublebuffered"); + lastTime = Date.now(); + nFrames = 0; + interv = setInterval(function() { draw();}, 30); + } }, BTN2, {repeat:true, debounce:50}); + setWatch(function() { + if (qZrot && zBeta<2*Math.PI/2-0.08) zBeta += 0.08; + else zDist *= 0.9; + }, BTN1, {repeat:true}); + setWatch(function() { + if (qZrot && zBeta>-2*Math.PI/2-0.08) zBeta -= 0.08; + else zDist /= 0.9; + }, BTN3, {repeat:true}); + Bangle.on('swipe', function(direction){ + switch(direction){ + case 1: + qZrot = !qZrot; + break; + case -1: + qWireframe = (qWireframe+1)%4; + break; + }}); +} + +function drawMenu() { + const menu = { + '': { 'title': 'STL files' } + }; + var files = require("Storage").list(".stl"); + for (var i=0; i