- order of stencilMeshes
This commit is contained in:
parent
0ba91f51c1
commit
e27fcaddb2
122
package-lock.json
generated
122
package-lock.json
generated
|
@ -12,7 +12,6 @@
|
||||||
"@fortawesome/fontawesome-free": "^5.15.2",
|
"@fortawesome/fontawesome-free": "^5.15.2",
|
||||||
"@types/three": "^0.129.1",
|
"@types/three": "^0.129.1",
|
||||||
"bulma": "^0.9.2",
|
"bulma": "^0.9.2",
|
||||||
"concaveman": "github:grassick/concaveman#patch-1",
|
|
||||||
"hull.js": "^0.2.11",
|
"hull.js": "^0.2.11",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"normalize.css": "^8.0.1",
|
"normalize.css": "^8.0.1",
|
||||||
|
@ -2536,17 +2535,6 @@
|
||||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/concaveman": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "git+ssh://git@github.com/grassick/concaveman.git#05682dcd7c21ef09f391e814d0f5df7cfbc3bbae",
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"point-in-polygon": "^1.0.1",
|
|
||||||
"rbush": "^3.0.0",
|
|
||||||
"robust-predicates": "^2.0.4",
|
|
||||||
"tinyqueue": "^2.0.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/concurrently": {
|
"node_modules/concurrently": {
|
||||||
"version": "6.2.0",
|
"version": "6.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.2.0.tgz",
|
||||||
|
@ -2671,9 +2659,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/core-js-compat": {
|
"node_modules/core-js-compat": {
|
||||||
"version": "3.15.1",
|
"version": "3.15.2",
|
||||||
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.1.tgz",
|
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.2.tgz",
|
||||||
"integrity": "sha512-xGhzYMX6y7oEGQGAJmP2TmtBLvR4nZmRGEcFa3ubHOq5YEp51gGN9AovVa0AoujGZIq+Wm6dISiYyGNfdflYww==",
|
"integrity": "sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"browserslist": "^4.16.6",
|
"browserslist": "^4.16.6",
|
||||||
|
@ -2933,9 +2921,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/electron-to-chromium": {
|
"node_modules/electron-to-chromium": {
|
||||||
"version": "1.3.760",
|
"version": "1.3.762",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.760.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.762.tgz",
|
||||||
"integrity": "sha512-XPKwjX6pHezJWB4FLVuSil9gGmU6XYl27ahUwEHODXF4KjCEB8RuIT05MkU1au2Tdye57o49yY0uCMK+bwUt+A==",
|
"integrity": "sha512-LehWjRpfPcK8F1Lf/NZoAwWLWnjJVo0SZeQ9j/tvnBWYcT99qDqgo4raAfS2oTKZjPrR/jxruh85DGgDUmywEA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/emoji-regex": {
|
"node_modules/emoji-regex": {
|
||||||
|
@ -4807,11 +4795,6 @@
|
||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/point-in-polygon": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.1.0.tgz",
|
|
||||||
"integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw=="
|
|
||||||
},
|
|
||||||
"node_modules/postcss": {
|
"node_modules/postcss": {
|
||||||
"version": "8.3.5",
|
"version": "8.3.5",
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz",
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz",
|
||||||
|
@ -4977,11 +4960,6 @@
|
||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/quickselect": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz",
|
|
||||||
"integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw=="
|
|
||||||
},
|
|
||||||
"node_modules/randombytes": {
|
"node_modules/randombytes": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
|
||||||
|
@ -4991,14 +4969,6 @@
|
||||||
"safe-buffer": "^5.1.0"
|
"safe-buffer": "^5.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/rbush": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz",
|
|
||||||
"integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==",
|
|
||||||
"dependencies": {
|
|
||||||
"quickselect": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/read-pkg": {
|
"node_modules/read-pkg": {
|
||||||
"version": "5.2.0",
|
"version": "5.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
|
||||||
|
@ -5404,11 +5374,6 @@
|
||||||
"url": "https://github.com/sponsors/isaacs"
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/robust-predicates": {
|
|
||||||
"version": "2.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-2.0.4.tgz",
|
|
||||||
"integrity": "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg=="
|
|
||||||
},
|
|
||||||
"node_modules/run-parallel": {
|
"node_modules/run-parallel": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
|
||||||
|
@ -5467,6 +5432,9 @@
|
||||||
"lodash": "^4.0.0",
|
"lodash": "^4.0.0",
|
||||||
"scss-tokenizer": "^0.2.3",
|
"scss-tokenizer": "^0.2.3",
|
||||||
"yargs": "^13.3.2"
|
"yargs": "^13.3.2"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"sassgraph": "bin/sassgraph"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/sass-graph/node_modules/ansi-regex": {
|
"node_modules/sass-graph/node_modules/ansi-regex": {
|
||||||
|
@ -5868,6 +5836,11 @@
|
||||||
"safer-buffer": "^2.0.2",
|
"safer-buffer": "^2.0.2",
|
||||||
"tweetnacl": "~0.14.0"
|
"tweetnacl": "~0.14.0"
|
||||||
},
|
},
|
||||||
|
"bin": {
|
||||||
|
"sshpk-conv": "bin/sshpk-conv",
|
||||||
|
"sshpk-sign": "bin/sshpk-sign",
|
||||||
|
"sshpk-verify": "bin/sshpk-verify"
|
||||||
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
|
@ -6116,11 +6089,6 @@
|
||||||
"three": ">= 0.125.0"
|
"three": ">= 0.125.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/tinyqueue": {
|
|
||||||
"version": "2.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz",
|
|
||||||
"integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA=="
|
|
||||||
},
|
|
||||||
"node_modules/to-fast-properties": {
|
"node_modules/to-fast-properties": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
||||||
|
@ -6415,9 +6383,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/webpack": {
|
"node_modules/webpack": {
|
||||||
"version": "5.41.0",
|
"version": "5.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.41.1.tgz",
|
||||||
"integrity": "sha512-pCVO7hVm8XiL6DpPtXrFLS8ktmH/tpvtbEex6hn4RweTFe6z6Cugh5FlQoEPZotb15HiirjM2Kv7THTA7sKLzQ==",
|
"integrity": "sha512-AJZIIsqJ/MVTmegEq9Tlw5mk5EHdGiJbDdz9qP15vmUH+oxI1FdWcL0E9EO8K/zKaRPWqEs7G/OPxq1P61u5Ug==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/eslint-scope": "^3.7.0",
|
"@types/eslint-scope": "^3.7.0",
|
||||||
|
@ -8669,16 +8637,6 @@
|
||||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"concaveman": {
|
|
||||||
"version": "git+ssh://git@github.com/grassick/concaveman.git#05682dcd7c21ef09f391e814d0f5df7cfbc3bbae",
|
|
||||||
"from": "concaveman@github:grassick/concaveman#patch-1",
|
|
||||||
"requires": {
|
|
||||||
"point-in-polygon": "^1.0.1",
|
|
||||||
"rbush": "^3.0.0",
|
|
||||||
"robust-predicates": "^2.0.4",
|
|
||||||
"tinyqueue": "^2.0.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"concurrently": {
|
"concurrently": {
|
||||||
"version": "6.2.0",
|
"version": "6.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.2.0.tgz",
|
||||||
|
@ -8774,9 +8732,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"core-js-compat": {
|
"core-js-compat": {
|
||||||
"version": "3.15.1",
|
"version": "3.15.2",
|
||||||
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.1.tgz",
|
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.2.tgz",
|
||||||
"integrity": "sha512-xGhzYMX6y7oEGQGAJmP2TmtBLvR4nZmRGEcFa3ubHOq5YEp51gGN9AovVa0AoujGZIq+Wm6dISiYyGNfdflYww==",
|
"integrity": "sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"browserslist": "^4.16.6",
|
"browserslist": "^4.16.6",
|
||||||
|
@ -8961,9 +8919,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"electron-to-chromium": {
|
"electron-to-chromium": {
|
||||||
"version": "1.3.760",
|
"version": "1.3.762",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.760.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.762.tgz",
|
||||||
"integrity": "sha512-XPKwjX6pHezJWB4FLVuSil9gGmU6XYl27ahUwEHODXF4KjCEB8RuIT05MkU1au2Tdye57o49yY0uCMK+bwUt+A==",
|
"integrity": "sha512-LehWjRpfPcK8F1Lf/NZoAwWLWnjJVo0SZeQ9j/tvnBWYcT99qDqgo4raAfS2oTKZjPrR/jxruh85DGgDUmywEA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"emoji-regex": {
|
"emoji-regex": {
|
||||||
|
@ -10353,11 +10311,6 @@
|
||||||
"find-up": "^4.0.0"
|
"find-up": "^4.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"point-in-polygon": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.1.0.tgz",
|
|
||||||
"integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw=="
|
|
||||||
},
|
|
||||||
"postcss": {
|
"postcss": {
|
||||||
"version": "8.3.5",
|
"version": "8.3.5",
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz",
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz",
|
||||||
|
@ -10467,11 +10420,6 @@
|
||||||
"integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
|
"integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"quickselect": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz",
|
|
||||||
"integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw=="
|
|
||||||
},
|
|
||||||
"randombytes": {
|
"randombytes": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
|
||||||
|
@ -10481,14 +10429,6 @@
|
||||||
"safe-buffer": "^5.1.0"
|
"safe-buffer": "^5.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rbush": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz",
|
|
||||||
"integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==",
|
|
||||||
"requires": {
|
|
||||||
"quickselect": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"read-pkg": {
|
"read-pkg": {
|
||||||
"version": "5.2.0",
|
"version": "5.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
|
||||||
|
@ -10806,11 +10746,6 @@
|
||||||
"glob": "^7.1.3"
|
"glob": "^7.1.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"robust-predicates": {
|
|
||||||
"version": "2.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-2.0.4.tgz",
|
|
||||||
"integrity": "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg=="
|
|
||||||
},
|
|
||||||
"run-parallel": {
|
"run-parallel": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
|
||||||
|
@ -11348,11 +11283,6 @@
|
||||||
"integrity": "sha512-9wDhf1FOkXJ70JfsnQxuIFi997TRYGP+AWCEiJchxPy6mQysRdQOXgeym07JahkOB83YSTULOr/5hV6Lx2kXPA==",
|
"integrity": "sha512-9wDhf1FOkXJ70JfsnQxuIFi997TRYGP+AWCEiJchxPy6mQysRdQOXgeym07JahkOB83YSTULOr/5hV6Lx2kXPA==",
|
||||||
"requires": {}
|
"requires": {}
|
||||||
},
|
},
|
||||||
"tinyqueue": {
|
|
||||||
"version": "2.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz",
|
|
||||||
"integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA=="
|
|
||||||
},
|
|
||||||
"to-fast-properties": {
|
"to-fast-properties": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
||||||
|
@ -11570,9 +11500,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"webpack": {
|
"webpack": {
|
||||||
"version": "5.41.0",
|
"version": "5.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.41.1.tgz",
|
||||||
"integrity": "sha512-pCVO7hVm8XiL6DpPtXrFLS8ktmH/tpvtbEex6hn4RweTFe6z6Cugh5FlQoEPZotb15HiirjM2Kv7THTA7sKLzQ==",
|
"integrity": "sha512-AJZIIsqJ/MVTmegEq9Tlw5mk5EHdGiJbDdz9qP15vmUH+oxI1FdWcL0E9EO8K/zKaRPWqEs7G/OPxq1P61u5Ug==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/eslint-scope": "^3.7.0",
|
"@types/eslint-scope": "^3.7.0",
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
"@fortawesome/fontawesome-free": "^5.15.2",
|
"@fortawesome/fontawesome-free": "^5.15.2",
|
||||||
"@types/three": "^0.129.1",
|
"@types/three": "^0.129.1",
|
||||||
"bulma": "^0.9.2",
|
"bulma": "^0.9.2",
|
||||||
"concaveman": "github:grassick/concaveman#patch-1",
|
|
||||||
"hull.js": "^0.2.11",
|
"hull.js": "^0.2.11",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"normalize.css": "^8.0.1",
|
"normalize.css": "^8.0.1",
|
||||||
|
|
|
@ -1,80 +0,0 @@
|
||||||
import { MeshBasicMaterial } from 'three/src/materials/MeshBasicMaterial';
|
|
||||||
import { LineBasicMaterial } from 'three/src/materials/LineBasicMaterial';
|
|
||||||
import { ShaderMaterial } from 'three/src/materials/ShaderMaterial';
|
|
||||||
import { uniforms } from "./uniforms";
|
|
||||||
import { shader } from './shader';
|
|
||||||
import { DoubleSide, BackSide, FrontSide } from 'three/src/constants';
|
|
||||||
import { DecrementWrapStencilOp, IncrementWrapStencilOp } from 'three/src/constants';
|
|
||||||
import { NotEqualStencilFunc, ReplaceStencilOp, AlwaysStencilFunc } from 'three/src/constants';
|
|
||||||
|
|
||||||
let profileMaterial = new ShaderMaterial({
|
|
||||||
color: 0xE91E63,
|
|
||||||
// metalness: 0.1,
|
|
||||||
// roughness: 0.75,
|
|
||||||
// flatShading: true,
|
|
||||||
stencilWrite: true,
|
|
||||||
// stencilRef: 0,
|
|
||||||
stencilFunc: NotEqualStencilFunc,
|
|
||||||
stencilFail: ReplaceStencilOp,
|
|
||||||
stencilZFail: ReplaceStencilOp,
|
|
||||||
stencilZPass: ReplaceStencilOp,
|
|
||||||
uniforms: uniforms.caps,
|
|
||||||
vertexShader: shader.vertex,
|
|
||||||
fragmentShader: shader.fragment
|
|
||||||
});
|
|
||||||
|
|
||||||
let frontStencilMaterial = new ShaderMaterial({
|
|
||||||
depthWrite: false,
|
|
||||||
depthTest: false,
|
|
||||||
colorWrite: false,
|
|
||||||
stencilWrite: true,
|
|
||||||
stencilFunc: AlwaysStencilFunc,
|
|
||||||
uniforms: uniforms.clipping,
|
|
||||||
vertexShader: shader.vertexClipping,
|
|
||||||
fragmentShader: shader.fragmentClippingFront,
|
|
||||||
side: FrontSide,
|
|
||||||
stencilFail: DecrementWrapStencilOp,
|
|
||||||
stencilZFail: DecrementWrapStencilOp,
|
|
||||||
stencilZPass: DecrementWrapStencilOp
|
|
||||||
});
|
|
||||||
|
|
||||||
let backStencilMaterial = new ShaderMaterial({
|
|
||||||
depthWrite: false,
|
|
||||||
depthTest: false,
|
|
||||||
colorWrite: false,
|
|
||||||
stencilWrite: true,
|
|
||||||
stencilFunc: AlwaysStencilFunc,
|
|
||||||
uniforms: uniforms.clipping,
|
|
||||||
vertexShader: shader.vertexClipping,
|
|
||||||
fragmentShader: shader.fragmentClippingFront,
|
|
||||||
side: BackSide,
|
|
||||||
stencilFail: IncrementWrapStencilOp,
|
|
||||||
stencilZFail: IncrementWrapStencilOp,
|
|
||||||
stencilZPass: IncrementWrapStencilOp
|
|
||||||
});
|
|
||||||
|
|
||||||
// beige:
|
|
||||||
// let BoxBackFace = new MeshBasicMaterial({ color: 0xEEDDCC, transparent: true });
|
|
||||||
let BoxBackFace = new MeshBasicMaterial({ color: 0xf8f8ff, transparent: true, opacity: 0.5 });
|
|
||||||
// black box grid: mouse grey:
|
|
||||||
// let BoxWireframe = new LineBasicMaterial({ color: 0x000000, linewidth: 2 });
|
|
||||||
let BoxWireframe = new LineBasicMaterial({ color: 0x6f6f6f, linewidth: 3 });
|
|
||||||
|
|
||||||
// yellow select color
|
|
||||||
let BoxWireActive = new LineBasicMaterial({ color: 0xffff00, linewidth: 4, side: DoubleSide });
|
|
||||||
|
|
||||||
let Invisible = new ShaderMaterial({
|
|
||||||
vertexShader: shader.invisibleVertexShader,
|
|
||||||
fragmentShader: shader.invisibleFragmentShader,
|
|
||||||
side: DoubleSide
|
|
||||||
});
|
|
||||||
|
|
||||||
export {
|
|
||||||
profileMaterial,
|
|
||||||
frontStencilMaterial,
|
|
||||||
backStencilMaterial,
|
|
||||||
BoxBackFace,
|
|
||||||
BoxWireframe,
|
|
||||||
BoxWireActive,
|
|
||||||
Invisible
|
|
||||||
}
|
|
151
src/js/clip/material.ts
Normal file
151
src/js/clip/material.ts
Normal file
|
@ -0,0 +1,151 @@
|
||||||
|
import { MeshBasicMaterial } from 'three/src/materials/MeshBasicMaterial';
|
||||||
|
import { MeshStandardMaterial } from 'three/src/materials/MeshStandardMaterial';
|
||||||
|
import { LineBasicMaterial } from 'three/src/materials/LineBasicMaterial';
|
||||||
|
import { ShaderMaterial } from 'three/src/materials/ShaderMaterial';
|
||||||
|
import { uniforms } from "./uniforms";
|
||||||
|
import { shader } from './shader';
|
||||||
|
import { DoubleSide, BackSide, FrontSide, EqualStencilFunc, KeepStencilOp, DecrementStencilOp, IncrementStencilOp, InvertStencilOp, GreaterStencilFunc, NeverStencilFunc, LessStencilFunc, LessEqualStencilFunc } from 'three/src/constants';
|
||||||
|
import { DecrementWrapStencilOp, IncrementWrapStencilOp } from 'three/src/constants';
|
||||||
|
import { NotEqualStencilFunc, ReplaceStencilOp, AlwaysStencilFunc } from 'three/src/constants';
|
||||||
|
|
||||||
|
// let profileMaterial = new ShaderMaterial({
|
||||||
|
// // metalness: 0.1,
|
||||||
|
// // roughness: 0.75,
|
||||||
|
// // flatShading: true,
|
||||||
|
// stencilWrite: true,
|
||||||
|
// // stencilRef: 0,
|
||||||
|
// stencilFunc: NotEqualStencilFunc,
|
||||||
|
// stencilFail: ReplaceStencilOp,
|
||||||
|
// stencilZFail: ReplaceStencilOp,
|
||||||
|
// stencilZPass: ReplaceStencilOp,
|
||||||
|
// uniforms: uniforms.caps,
|
||||||
|
// vertexShader: shader.vertex,
|
||||||
|
// fragmentShader: shader.fragment
|
||||||
|
// });
|
||||||
|
let profileMaterial = new MeshStandardMaterial( {
|
||||||
|
color: 0xE91E63,
|
||||||
|
metalness: 0.1,
|
||||||
|
roughness: 0.75,
|
||||||
|
flatShading: true,
|
||||||
|
stencilWrite: true,
|
||||||
|
stencilRef: 0,
|
||||||
|
stencilFunc: NotEqualStencilFunc,
|
||||||
|
stencilFail: ReplaceStencilOp,
|
||||||
|
stencilZFail: ReplaceStencilOp,
|
||||||
|
stencilZPass: ReplaceStencilOp
|
||||||
|
// stencilFunc: NotEqualStencilFunc,
|
||||||
|
// stencilFail: ReplaceStencilOp,
|
||||||
|
// stencilZFail: ReplaceStencilOp,
|
||||||
|
// stencilZPass: ReplaceStencilOp
|
||||||
|
} );
|
||||||
|
|
||||||
|
let stencilMaterial = new ShaderMaterial({
|
||||||
|
depthWrite: false,
|
||||||
|
depthTest: false,
|
||||||
|
colorWrite: false,
|
||||||
|
stencilWrite: true,
|
||||||
|
stencilFunc: AlwaysStencilFunc,
|
||||||
|
// uniforms: uniforms.clipping,
|
||||||
|
vertexShader: shader.vertexClipping,
|
||||||
|
fragmentShader: shader.fragmentClippingFront,
|
||||||
|
});
|
||||||
|
|
||||||
|
let frontStencilMaterial = new ShaderMaterial({
|
||||||
|
depthWrite: false,
|
||||||
|
depthTest: false,
|
||||||
|
colorWrite: false,
|
||||||
|
stencilWrite: true,
|
||||||
|
stencilFunc: AlwaysStencilFunc,
|
||||||
|
uniforms: uniforms.clipping,
|
||||||
|
vertexShader: shader.vertexClipping,
|
||||||
|
fragmentShader: shader.fragmentClippingFront,
|
||||||
|
side: FrontSide,
|
||||||
|
// stencilFail: DecrementWrapStencilOp,
|
||||||
|
// stencilZFail: DecrementWrapStencilOp,
|
||||||
|
// stencilZPass: DecrementWrapStencilOp
|
||||||
|
stencilFail: DecrementWrapStencilOp,
|
||||||
|
stencilZFail: DecrementWrapStencilOp,
|
||||||
|
stencilZPass: DecrementWrapStencilOp
|
||||||
|
});
|
||||||
|
|
||||||
|
let backStencilMaterial = new ShaderMaterial({
|
||||||
|
depthWrite: false,
|
||||||
|
depthTest: false,
|
||||||
|
colorWrite: false,
|
||||||
|
stencilWrite: true,
|
||||||
|
stencilFunc: AlwaysStencilFunc,
|
||||||
|
uniforms: uniforms.clipping,
|
||||||
|
vertexShader: shader.vertexClipping,
|
||||||
|
fragmentShader: shader.fragmentClippingFront,
|
||||||
|
side: BackSide,
|
||||||
|
// stencilFail: IncrementWrapStencilOp,
|
||||||
|
// stencilZFail: IncrementWrapStencilOp,
|
||||||
|
// stencilZPass: IncrementWrapStencilOp
|
||||||
|
stencilFail: IncrementWrapStencilOp,
|
||||||
|
stencilZFail: IncrementWrapStencilOp,
|
||||||
|
stencilZPass: IncrementWrapStencilOp
|
||||||
|
});
|
||||||
|
|
||||||
|
// beige:
|
||||||
|
// let BoxBackFace = new MeshBasicMaterial({ color: 0xEEDDCC, transparent: true });
|
||||||
|
let BoxBackFace = new MeshBasicMaterial({ color: 0xf8f8ff, transparent: true, opacity: 0.5 });
|
||||||
|
// black box grid: mouse grey:
|
||||||
|
// let BoxWireframe = new LineBasicMaterial({ color: 0x000000, linewidth: 2 });
|
||||||
|
let BoxWireframe = new LineBasicMaterial({ color: 0x6f6f6f, linewidth: 3 });
|
||||||
|
|
||||||
|
// yellow select color
|
||||||
|
let BoxWireActive = new LineBasicMaterial({ color: 0xffff00, linewidth: 4, side: DoubleSide });
|
||||||
|
|
||||||
|
let Invisible = new ShaderMaterial({
|
||||||
|
vertexShader: shader.invisibleVertexShader,
|
||||||
|
fragmentShader: shader.invisibleFragmentShader,
|
||||||
|
side: DoubleSide
|
||||||
|
});
|
||||||
|
|
||||||
|
// export const profileMat = new MeshStandardMaterial( {
|
||||||
|
|
||||||
|
// color: 0xE91E63,
|
||||||
|
// metalness: 0.1,
|
||||||
|
// roughness: 0.75,
|
||||||
|
// flatShading: true,
|
||||||
|
// stencilWrite: true,
|
||||||
|
// // stencilRef: 0,
|
||||||
|
// stencilFunc: NotEqualStencilFunc,
|
||||||
|
// stencilFail: ReplaceStencilOp,
|
||||||
|
// stencilZFail: ReplaceStencilOp,
|
||||||
|
// stencilZPass: ReplaceStencilOp
|
||||||
|
// } );
|
||||||
|
|
||||||
|
|
||||||
|
function toBack(mat) {
|
||||||
|
const material = mat.clone();
|
||||||
|
material.side = BackSide,
|
||||||
|
material.stencilFail = IncrementWrapStencilOp;
|
||||||
|
material.stencilZFail = IncrementWrapStencilOp;
|
||||||
|
material.stencilZPass = IncrementWrapStencilOp;
|
||||||
|
return material;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
function toFront(mat) {
|
||||||
|
const material = mat.clone();
|
||||||
|
material.side = FrontSide;
|
||||||
|
material.stencilFail = DecrementWrapStencilOp;
|
||||||
|
material.stencilZFail = DecrementWrapStencilOp;
|
||||||
|
material.stencilZPass = DecrementWrapStencilOp;
|
||||||
|
return material;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
export {
|
||||||
|
toBack,
|
||||||
|
toFront,
|
||||||
|
stencilMaterial,
|
||||||
|
profileMaterial,
|
||||||
|
frontStencilMaterial,
|
||||||
|
backStencilMaterial,
|
||||||
|
BoxBackFace,
|
||||||
|
BoxWireframe,
|
||||||
|
BoxWireActive,
|
||||||
|
Invisible
|
||||||
|
}
|
|
@ -30,7 +30,6 @@ import { PointsMaterial } from 'three/src/materials/PointsMaterial';
|
||||||
import { Points } from 'three/src/objects/Points';
|
import { Points } from 'three/src/objects/Points';
|
||||||
import { Line } from 'three/src/objects/Line';
|
import { Line } from 'three/src/objects/Line';
|
||||||
import hull from 'hull.js/src/hull';
|
import hull from 'hull.js/src/hull';
|
||||||
import concaveman from 'concaveman/index';
|
|
||||||
import { Color } from 'three/src/math/Color';
|
import { Color } from 'three/src/math/Color';
|
||||||
|
|
||||||
|
|
||||||
|
@ -164,7 +163,8 @@ class TinLayer extends Layer {
|
||||||
color: { type: "c", value: new Color(color) }
|
color: { type: "c", value: new Color(color) }
|
||||||
}
|
}
|
||||||
let profileMaterial = material.profileMaterial.clone();
|
let profileMaterial = material.profileMaterial.clone();
|
||||||
profileMaterial.uniforms = caps;
|
profileMaterial.color = new Color(color);
|
||||||
|
// profileMaterial.uniforms = caps;
|
||||||
this.borderMesh = new Mesh(box, profileMaterial);
|
this.borderMesh = new Mesh(box, profileMaterial);
|
||||||
// this.borderMesh.name = 'stencilFeatureBack_' + this.index;
|
// this.borderMesh.name = 'stencilFeatureBack_' + this.index;
|
||||||
this.borderMesh.name = 'profilePlane_' + this.name;
|
this.borderMesh.name = 'profilePlane_' + this.name;
|
||||||
|
@ -502,6 +502,7 @@ class TinLayer extends Layer {
|
||||||
setVisible(visible) {
|
setVisible(visible) {
|
||||||
this.visible = visible;
|
this.visible = visible;
|
||||||
this.objectGroup.visible = visible;
|
this.objectGroup.visible = visible;
|
||||||
|
this.mainMesh.visible = visible;
|
||||||
this.emit('visibility-change', visible);
|
this.emit('visibility-change', visible);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -821,9 +822,9 @@ class TinLayer extends Layer {
|
||||||
mesh.castShadow = true;
|
mesh.castShadow = true;
|
||||||
mesh.receiveShadow = true;
|
mesh.receiveShadow = true;
|
||||||
this._addObject(mesh, true);
|
this._addObject(mesh, true);
|
||||||
if (app_scene) {
|
// if (app_scene) {
|
||||||
app_scene.add(this.objectGroup);
|
// app_scene.add(this.objectGroup);
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
private _addObject(object, queryable) {
|
private _addObject(object, queryable) {
|
||||||
|
|
|
@ -126,10 +126,10 @@ class Application {
|
||||||
|
|
||||||
/* Scene: that will hold all our elements such as objects, cameras and lights. */
|
/* Scene: that will hold all our elements such as objects, cameras and lights. */
|
||||||
this.scene = new Scene();
|
this.scene = new Scene();
|
||||||
this.capsScene = new Scene();
|
// this.capsScene = new Scene();
|
||||||
this.backStencil = new Scene();
|
// this.backStencil = new Scene();
|
||||||
this.frontStencil = new Scene();
|
// this.frontStencil = new Scene();
|
||||||
this.capsSceneArray = new Array();
|
// this.capsSceneArray = new Array();
|
||||||
this._buildDefaultLights(this.scene);
|
this._buildDefaultLights(this.scene);
|
||||||
//app.scene.autoUpdate = false;
|
//app.scene.autoUpdate = false;
|
||||||
//// show axes in the screen
|
//// show axes in the screen
|
||||||
|
@ -185,59 +185,79 @@ class Application {
|
||||||
map.on('ready', () => {
|
map.on('ready', () => {
|
||||||
this.selectionBox.setUniforms();
|
this.selectionBox.setUniforms();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// this.capsScene.add(this.selectionBox.boxMesh);
|
// this.capsScene.add(this.selectionBox.boxMesh);
|
||||||
// this.scene.add(this.selection.displayMeshes);
|
// this.scene.add(this.selection.displayMeshes);
|
||||||
// this.scene.add(this.selection.touchMeshes);
|
// this.scene.add(this.selection.touchMeshes);
|
||||||
this.map.addLayer(this.selectionBox);
|
this.map.addLayer(this.selectionBox);
|
||||||
|
|
||||||
|
let modelNode = new Group();
|
||||||
let profileNode = new Group();
|
let profileNode = new Group();
|
||||||
for (const [key, layer] of Object.entries(this.map.layers)) {
|
let stencilNode = new Group();
|
||||||
|
for (const [i, layer] of Object.entries(this.map.layers)) {
|
||||||
// let layer = map.layers[i];
|
// let layer = map.layers[i];
|
||||||
if (layer instanceof TinLayer && layer.name != "Topography") {
|
if (layer instanceof TinLayer && layer.name != "Topography") {
|
||||||
|
modelNode.add(layer.mainMesh);
|
||||||
// this.capsScene.add(layer.borderMesh);
|
// this.capsScene.add(layer.borderMesh);
|
||||||
profileNode.add(layer.borderMesh);
|
profileNode.add(layer.borderMesh);
|
||||||
|
|
||||||
|
// const stencilMaterial = material.stencilMaterial.clone();
|
||||||
|
|
||||||
|
let stencilFeatureBack = new Mesh(layer.geometry, material.backStencilMaterial.clone());
|
||||||
|
stencilFeatureBack.name = 'stencilFeatureBack_' + i;
|
||||||
|
stencilFeatureBack.userData.layerId = layer.index;
|
||||||
|
stencilNode.add(stencilFeatureBack);
|
||||||
|
|
||||||
|
let stencilFeatureFront = new Mesh(layer.geometry, material.frontStencilMaterial.clone());
|
||||||
|
stencilFeatureFront.name = 'stencilFeatureFront_' + i;
|
||||||
|
stencilFeatureFront.userData.layerId = layer.index;
|
||||||
|
stencilNode.add(stencilFeatureFront);
|
||||||
|
|
||||||
layer.on('visibility-change', (args) => {
|
layer.on('visibility-change', (args) => {
|
||||||
let visible = args[0];
|
let visible = args[0];
|
||||||
|
stencilFeatureFront.visible = visible;
|
||||||
|
stencilFeatureBack.visible = visible;
|
||||||
layer.borderMesh.visible = visible;
|
layer.borderMesh.visible = visible;
|
||||||
});
|
});
|
||||||
layer.on('scale-change', (args) => {
|
layer.on('scale-change', (args) => {
|
||||||
let z = args[0];
|
let z = args[0];
|
||||||
|
stencilFeatureFront.scale.z = z;
|
||||||
|
stencilFeatureBack.scale.z = z;
|
||||||
layer.borderMesh.scale.z = z;
|
layer.borderMesh.scale.z = z;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// this.scene.add(profileNode);
|
// this.scene.add(profileNode);
|
||||||
|
|
||||||
let stencilNode = new Group();
|
|
||||||
for (var i in map.layers) {
|
// for (var i in map.layers) {
|
||||||
let layer = map.layers[i];
|
// let layer = map.layers[i];
|
||||||
if (layer instanceof TinLayer && layer.name != "Topography") {
|
// if (layer instanceof TinLayer && layer.name != "Topography") {
|
||||||
let stencilFeatureBack = new Mesh(layer.geometry, material.backStencilMaterial);
|
// let stencilFeatureBack = new Mesh(layer.geometry, material.backStencilMaterial);
|
||||||
stencilFeatureBack.name = 'stencilFeatureBack_' + i;
|
// stencilFeatureBack.name = 'stencilFeatureBack_' + i;
|
||||||
stencilFeatureBack.userData.layerId = layer.index;
|
// stencilFeatureBack.userData.layerId = layer.index;
|
||||||
stencilNode.add(stencilFeatureBack);
|
// stencilNode.add(stencilFeatureBack);
|
||||||
|
|
||||||
let stencilFeatureFront = new Mesh(layer.geometry, material.frontStencilMaterial);
|
// let stencilFeatureFront = new Mesh(layer.geometry, material.frontStencilMaterial);
|
||||||
stencilFeatureFront.name = 'stencilFeatureFront_' + i;
|
// stencilFeatureFront.name = 'stencilFeatureFront_' + i;
|
||||||
stencilFeatureFront.userData.layerId = layer.index;
|
// stencilFeatureFront.userData.layerId = layer.index;
|
||||||
stencilNode.add(stencilFeatureFront);
|
// stencilNode.add(stencilFeatureFront);
|
||||||
layer.on('visibility-change', (args) => {
|
// layer.on('visibility-change', (args) => {
|
||||||
let visible = args[0];
|
// let visible = args[0];
|
||||||
stencilFeatureFront.visible = visible;
|
// stencilFeatureFront.visible = visible;
|
||||||
stencilFeatureBack.visible = visible;
|
// stencilFeatureBack.visible = visible;
|
||||||
});
|
// });
|
||||||
layer.on('scale-change', (args) => {
|
// layer.on('scale-change', (args) => {
|
||||||
let z = args[0];
|
// let z = args[0];
|
||||||
stencilFeatureFront.scale.z = z;
|
// stencilFeatureFront.scale.z = z;
|
||||||
stencilFeatureBack.scale.z = z;
|
// stencilFeatureBack.scale.z = z;
|
||||||
});
|
// });
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
// scene.add(node('selectNode'));
|
// scene.add(node('selectNode'));
|
||||||
// scene.add(node('modelNode'));
|
this.scene.add(modelNode);
|
||||||
this.scene.add(stencilNode);
|
this.scene.add(stencilNode);
|
||||||
this.scene.add(profileNode);
|
this.scene.add(profileNode);
|
||||||
|
|
||||||
|
@ -387,7 +407,7 @@ class Application {
|
||||||
// // break;
|
// // break;
|
||||||
// // }
|
// // }
|
||||||
// // }
|
// // }
|
||||||
|
|
||||||
// gl.stencilFunc(gl.ALWAYS, 1, 0xff);
|
// gl.stencilFunc(gl.ALWAYS, 1, 0xff);
|
||||||
// gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR);
|
// gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR);
|
||||||
// this.renderer.render(this.backStencil, this.map.camera);
|
// this.renderer.render(this.backStencil, this.map.camera);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user