Fix author

pull/546/head
marko 2020-08-13 13:54:33 -04:00
parent 32415c7189
commit e810285486
10 changed files with 2241 additions and 1 deletions

View File

@ -2142,5 +2142,20 @@
{"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",
"storage": [
{"name":"viewstl.min.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"},
]
}
]

86
apps/viewstl/cube.stl Normal file
View File

@ -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

756
apps/viewstl/fish_s.stl Normal file
View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

142
apps/viewstl/icosa.stl Normal file
View File

@ -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

30
apps/viewstl/tetra.stl Normal file
View File

@ -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

516
apps/viewstl/toilet_s.stl Normal file
View File

@ -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

View File

@ -0,0 +1 @@
require("heatshrink").decompress(atob("mEwxH+AH4A/AH4A/AA07iAutF4IwrFwM7mgwqFwU7nQvBGE4uDSAYwmFwovEGEYuGF4owhFw4vGGD4uIF44wdFxM7mgwiFxU7nQvHGDInExOz2eJSBgwYEoll6/X1vX2YvNGCqGFxPXLoIyBF5wwTWwxfB1oyBL54wSFwwrBAAWtBQk0GDYuGr6KCMILvFF5owNFwyNDYIgADnQvNGBYuHAAOzR4dlBYovOGBU6nQwIxOt1ouGF7QABiE0GRIAHFhkPeJwSCGR4tLhMPFxowEGQQvLmguIhIuRGAwyLnQtIFyYwIAAKXGF4otCFyowKGQy4EFzIwMfoYtFFzIwNRQoucGBwuhGBgujGBYukGBQulGBAunGA4uoGAsPF1IwEF1YwDF1n+mkQF1gA/AH4A/ADI"));

422
apps/viewstl/viewstl.app.js Normal file
View File

@ -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<len; ++i) {
res[3*i ] = p[3*i]*(c+u[0]*u[0]*(1-c)) + p[3*i+1]*(u[0]*u[1]*(1-c)-u[2]*s) + p[3*i+2]*(u[0]*u[2]*(1-c)+u[1]*s);
res[3*i+1] = p[3*i]*(u[1]*u[0]*(1-c)+u[2]*s) + p[3*i+1]*(c+u[1]*u[1]*(1-c)) + p[3*i+2]*(u[1]*u[2]*(1-c)-u[0]*s);
res[3*i+2] = p[3*i]*(u[2]*u[0]*(1-c)-u[1]*s) + p[3*i+1]*(u[2]*u[1]*(1-c)+u[0]*s) + p[3*i+2]*(c+u[2]*u[2]*(1-c));
}
}
void projectPoints(float *p, short *res, int len, int zd) {
float zdist = zd/100.0;
for (int i=0; i<len; ++i) {
float dz = p[3*i+2]-zdist;
res[2*i+0] = (short)(120.0+320.0*p[3*i+0]/dz);
res[2*i+1] = (short)(80.0+320.0*p[3*i+1]/dz);
}
}
void quick_sort(int *base, unsigned int nel)
{
int *pivot;
int tmp;
unsigned int left, right;
if (nel < 2) return;
pivot = base;
left = 0;
right = nel-1;
while (left < right) {
while (*(base+left)>*pivot && left<right) left++;
while (*(base+right)<*pivot && left<right) right--;
if (left<right && *(base+left)!=*(base+right)) {
if (base+left==pivot) {
pivot = base+right;
} else if (base+right==pivot) {
pivot = base+left;
}
tmp = *(base+left); *(base+left) = *(base+right); *(base+right) = tmp;
} else {
left++;
}
}
quick_sort(base, left-1);
quick_sort(base+left, nel-left);
}
void popZBuf(float *p, unsigned short *f, int *zb, int len) {
for (int i=0; i<len; ++i) {
int z = int(1000.0*(p[f[i*3]*3+2]+p[f[i*3+1]*3+2]+p[f[i*3+2]*3+2]));
zb[i] = (z<<10) | i;
}
quick_sort(zb, len);
}
int processFace(int *p, int z, int qWire) {
short *faces = (short *)p[0];
float *rnormals = (float *)p[1];
short *vpoints = (short *)p[2];
int *polyp = (int *)p[3];
float *light = (float *)p[4];
char *edges = (char *)p[5];
int *polyedge = (int *)p[6];
int shade;
z = z & 0x3ff;
if (rnormals[z*3+2]>0) {
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<len; ++i) {
char r=0;
for (int j=0; j<3; ++j) {
short e1=faces[j+i*3];
short e2=faces[((j+1) % 3)+i*3];
int k = len;
while (k--) {
if (i!=k && ((faces[k*3+1]==e1 && faces[k*3]==e2) || (faces[k*3+2]==e1 && faces[k*3+1]==e2) || (faces[k*3]==e1 && faces[k*3+2]==e2))) {
if (normals[k*3]*normals[i*3]+normals[k*3+1]*normals[i*3+1]+normals[k*3+2]*normals[i*3+2] < 0.95) r |= (1<<j);
k=0;
}
}
}
edges[i] = r;
}
}
int findSlot(float *p, float *x, int len) {
for (int i=0; i<len; ++i)
if (p[3*i]-x[0]<0.0001 && p[3*i]-x[0]>-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) 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 (p<fb.length) {
var line = '';
while (fb[p]!="\n") line += fb[p++];
p++;
if (line.toLowerCase().includes("vertex")) {
var v = line.trim().split(/\s+/);
filex[0] = v[1];
filex[1] = v[3];
filex[2] = v[2];
var slot = 0|c.findSlot(p_points, p_filex, npoints);
if (slot==npoints) npoints++;
faces[fp++] = slot;
if (fp%3 == 0) g.fillRect(21, 141, 21+198*fp/nverts, 159);
}
}
vpoints = new Uint16Array(Math.max(12,2*npoints));
p_vpoints = E.getAddressOf(vpoints, true);
normals = new Float32Array(faces.length);
p_normals = E.getAddressOf(normals, true);
initNormals();
rnormals = new Float32Array(faces.length);
p_rnormals = E.getAddressOf(rnormals, true);
rpoints = new Float32Array(points.length);
p_rpoints = E.getAddressOf(rpoints, true);
zbuf = new Int32Array(Math.max(12,faces.length/3));
p_zbuf = E.getAddressOf(zbuf, true);
addr[0] = p_faces;
addr[1] = p_rnormals;
addr[2] = p_vpoints;
addr[3] = p_polyp;
addr[4] = p_light;
addr[5] = p_edges;
addr[6] = p_polyedge;
addr[7] = p_normals;
c.initEdges(p_addr, faces.length/3);
console.log(edges);
}
function rotV(v, u, c, s) {
"ram"
return [v[0]*(c+u[0]*u[0]*(1-c)) + v[1]*(u[0]*u[1]*(1-c)-u[2]*s) + v[2]*(u[0]*u[2]*(1-c)+u[1]*s),
v[0]*(u[1]*u[0]*(1-c)+u[2]*s) + v[1]*(c+u[1]*u[1]*(1-c)) + v[2]*(u[1]*u[2]*(1-c)-u[0]*s),
v[0]*(u[2]*u[0]*(1-c)-u[1]*s) + v[1]*(u[2]*u[1]*(1-c)+u[0]*s) + v[2]*(c+u[2]*u[2]*(1-c))];
}
function largestExtent(pts) {
var x = 0;
var i = pts.length/3;
while (i--) {
var e = pts[3*i]*pts[3*i]+pts[3*i+1]*pts[3*i+1]+pts[3*i+2]*pts[3*i+2];
if (e>x) 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; i<files.length; ++i) {
menu[files[i]] = loadFile.bind(null, files[i]);
}
menu['Exit'] = function() { load(); };
E.showMenu(menu);
}
drawMenu();

272
apps/viewstl/viewstl.min.js vendored Normal file
View File

@ -0,0 +1,272 @@
// 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 = (function(){
var bin=atob("8e4QCnBHAAACS9P4BAHA84AQcEcA4QDg8e4QOiPwnwPh7hA68e4QOgJLQCLD+IQhcEcAvwDhAOCf7SN63+0jahC1ACMERpNCke0AajDa1O0Aenfuxnr07sd68e4Q+iTV9O7mevHuEPof3dTtAXqR7QFqd+7GevTux3rx7hD6FNX07uZ68e4Q+g/d1O0CepHtAmp37sZ69O7HevHuEPoE1fTu5nrx7hD6DNwBMww0yucMIwP7AgCA7QBqS2hDYItog2ATRhhGEL0Xt9E4F7fRuC3p8E/Q+BywQ2mf7Tt6BWiHsFhGAZEDkwAiT/AGCAGbmkJl2gLrQgMFkwj7AlMCkwAjHEZfHAMhl/vx/gWZAp4O604Op+sODk/wAQyORDb5E2A1+R7gDPoD81uy3fgEwASTDPH/M7zxAA8H0QMvO0bg0QObDDDUVAEy0OeaQjXQCPsD/AXrDAq6+QKQTkUD0TX5DBBxRQvQuvkEoFZFAdHORQXQNfkMwLRFH9HWRR3RDCEB+wOz0O0BatPtAXqT7QBqZ+6metDtAGrm7iZ6k+0CatDtAmrm7iZ69O7HevHuEPoC1QSbHEPksgAjnEa45wewvejwjwC/MzNzPy3p8ENEaAVo0PgIwMNoB2nB8wkBDCYG+wFE1O0CevXuwHrx7hD6QPO8gND4FICAaQHrQQ4F604OACU++QJrPPkmkEX4A5AM64YGA+sFCQg1tvkCYMn4BGAYLe7RACor0Bj4ASABOgYqAPKSgN/oAvAEFG5UeIRhABpoAmBaaEJgmmiCYNpowmAaaAJhWmhCYZpogmHbaA7gmmgCYNpoQmAaaYJgWmnCYJpoAmHaaEJhGmmCYVtpw2GU7QBq1+0AarfuAHqm7iZ61+0BapTtAWqm7iZ61+0Caqfupnrf7TJqx+4mep/tMXp37od6s+4Peifuh3q97sd6F+4QCp/tLHpn7od6wwL97ud6F+6QKkPqQhMYQ73o8IMaaQJgWmlCYBpogmBaaMJgGmkCYVppQmEI4BofA/EUAcUaUvgEb65QkUL60RpogmFbaLTnGh8D8RQBxRpS+ARvrlCRQvrRp+caaQJgWmlCYBpogmBaaMJgmmgCYdpoiueaaAJg2mhCYBppgmBaacJgGmgCYVpozucDH0/w/zIcMEP4BC+YQvvRiucAIL3o8IOamTlAzcxMPgAAfEIt6fBBBEYORgEuNdlzHiJGACHS+ACABOuBAAdGUPgEW0VFAd2ZQgrTBOuDDGBGXPgE6fBFBd2ZQhTSATv25wEx6+eZQg7SdUUM0JdCCNCQQgi/OkbH+ADgBWANRilG2OcCRvfnTRyrQvjYIEb/98j/BOuFBHYbx+e96PCBn+0XevC0ACUMJp1CAfEGASHaMfgETDH4BnwG+wQE1O0CajH4AkwG+wcH1+0Cegb7BAR37qZ61O0Canfupnpn7od6/e7nehfukEpF6oQkQvglQAE12ecZRhBG8Lz/95K/AAB6RAfukDq47ud63+0aep/tGmqf7Rpa3+0aWsfuJ0oQtQAklEIA8QwAAfEEASHaATQQ7QF6UO0DajfuZHpm7oZqxu6HelDtAmp37oV6Zu6Gav3u53oX7pA6xu6HeiH4BDx37qV6/e7nehfukDoh+AI81+cQvQC/AADIQgAAoEMAAPBCAACgQpPtA1rT7QRaELX37gBKACSUQgDxDAAB8QwBedqT7QBqk+0CStPtAWp07sV6Zu4mOiTuZXqw7kU6p+6jegE0UO0COifuI3pm7gY6Ze6maqPupzom7gRq8O5DOhDtAzrn7oZqo+4jehDtAWqm7iZ6sO5FSgHtA3qT7QFq0+0COtPtAGom7gZ6Ju4mOqfuh0om7iNqsO5EehDtAkon7gR6Je6jSmbu5Wqn7oNKEO0DOufuhmqj7gR6EO0BaqbuJnoB7QJ60+0CapPtAEqT7QFqJe6Eembuhjom7oRKp+6jeibuZWpQ7QI6p+6EaifuI3oQ7QNKZu6maqTuBnqw7kVqp+6malDtAWqm7oZ6Ae0Ben/nEL0AAA==");
return {
rotatePoints:E.nativeCall(1253, "void(int, int, int, int)", bin),
projectPoints:E.nativeCall(1121, "void(int, int, int, int)", bin),
popZBuf:E.nativeCall(1021, "void(int, int, int, int)", bin),
processFace:E.nativeCall(461, "int(int, int, int)", bin),
initEdges:E.nativeCall(209, "void(int, int)", bin),
findSlot:E.nativeCall(57, "int(int, int, int)", bin),
clearFPU:E.nativeCall(25, "void()", bin),
getFPSCR:E.nativeCall(1, "int()", bin),
getFPUPendingIRQ:E.nativeCall(9, "int()", bin),
};
})();
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) 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 (p<fb.length) {
var line = '';
while (fb[p]!="\n") line += fb[p++];
p++;
if (line.toLowerCase().includes("vertex")) {
var v = line.trim().split(/\s+/);
filex[0] = v[1];
filex[1] = v[3];
filex[2] = v[2];
var slot = 0|c.findSlot(p_points, p_filex, npoints);
if (slot==npoints) npoints++;
faces[fp++] = slot;
if (fp%3 == 0) g.fillRect(21, 141, 21+198*fp/nverts, 159);
}
}
vpoints = new Uint16Array(Math.max(12,2*npoints));
p_vpoints = E.getAddressOf(vpoints, true);
normals = new Float32Array(faces.length);
p_normals = E.getAddressOf(normals, true);
initNormals();
rnormals = new Float32Array(faces.length);
p_rnormals = E.getAddressOf(rnormals, true);
rpoints = new Float32Array(points.length);
p_rpoints = E.getAddressOf(rpoints, true);
zbuf = new Int32Array(Math.max(12,faces.length/3));
p_zbuf = E.getAddressOf(zbuf, true);
addr[0] = p_faces;
addr[1] = p_rnormals;
addr[2] = p_vpoints;
addr[3] = p_polyp;
addr[4] = p_light;
addr[5] = p_edges;
addr[6] = p_polyedge;
addr[7] = p_normals;
c.initEdges(p_addr, faces.length/3);
console.log(edges);
}
function rotV(v, u, c, s) {
"ram"
return [v[0]*(c+u[0]*u[0]*(1-c)) + v[1]*(u[0]*u[1]*(1-c)-u[2]*s) + v[2]*(u[0]*u[2]*(1-c)+u[1]*s),
v[0]*(u[1]*u[0]*(1-c)+u[2]*s) + v[1]*(c+u[1]*u[1]*(1-c)) + v[2]*(u[1]*u[2]*(1-c)-u[0]*s),
v[0]*(u[2]*u[0]*(1-c)-u[1]*s) + v[1]*(u[2]*u[1]*(1-c)+u[0]*s) + v[2]*(c+u[2]*u[2]*(1-c))];
}
function largestExtent(pts) {
var x = 0;
var i = pts.length/3;
while (i--) {
var e = pts[3*i]*pts[3*i]+pts[3*i+1]*pts[3*i+1]+pts[3*i+2]*pts[3*i+2];
if (e>x) 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<files.length; ++i) {
menu[files[i]] = loadFile.bind(null, files[i]);
}
menu['Exit'] = function() { c.clearFPU(); load(); };
E.showMenu(menu);
}
drawMenu();