- slicing box default off

- default geology tab
- dynmic email link from service contact
- egdi_disclaimer.html
- add model and border groups to Map.ts
This commit is contained in:
Arno Kaimbacher 2021-07-06 11:08:59 +02:00
parent e27fcaddb2
commit 65a099547c
16 changed files with 504 additions and 458 deletions

View File

@ -16,7 +16,7 @@
"request": "launch", "request": "launch",
"name": "Launch Chrome against localhost", "name": "Launch Chrome against localhost",
// "port": 9222, // "port": 9222,
"url": "http://localhost:8080", "url": "http://localhost:8080?modelid=20",
"webRoot": "${workspaceFolder}", "webRoot": "${workspaceFolder}",
"breakOnLoad": true, "breakOnLoad": true,
"runtimeExecutable": "C:/ProgramData/scoop/apps/googlechrome/current/chrome.exe", "runtimeExecutable": "C:/ProgramData/scoop/apps/googlechrome/current/chrome.exe",

56
egdi_disclaimer.html Normal file
View File

@ -0,0 +1,56 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>GeoTief 3DViewer - Haftungsausschlu&szlig;</title>
<style type="text/css">
#container {
width: 770px;
/* Mit einer Breite, die 20 Pixel unter der vollen Breite von 800 Pixel liegt, können Sie dem Browser-Chrome Rechnung tragen und gleichzeitig eine horizontale Bildlaufleiste vermeiden. */
margin: 0 auto;
/* Durch automatische Ränder (in Verbindung mit einer Breite) wird die Seite zentriert. */
text-align: justify;
/* Hierdurch wird die Einstellung text-align: center im Body-Element überschrieben. */
}
</style>
</head>
<body style="font-family:Verdana, Geneva, sans-serif; text-align:center; font-size:0.9em">
<div id="container">
<p>
<div style="margin-bottom: 1em"><strong>Disclaimer/Haftungsausschluss GBA:</strong></div>
</p>
<p>
Dem in diesem Web Viewer dargestellten, geologischen 3D Modell liegen verschiedene Untergrunddaten zugrunde.
Diese umfassen u. A. geologische Strukturkarten, Profilschnitte, Bohrprofile, geophysikalische Messungen
etc.
Diese Informationen dienen nach Prüfung ihrer Plausibilität als Interpretationsgrundlage für die
Erststellung eines geologischen 3D Modells.
Die Qualität der modellierten Grenzflächen ist abhängig von Dichte und Qualität der verwendeten Datenpunkte,
der regional-geologischen Expertise der modellierenden Personen und der geologischen Komplexität des zu
modellierenden Gebiets.
</p>
<p>
Wenngleich die Geologische Bundesanstalt die verwendeten Informationen mit bestem Wissen und Gewissen bei
der Modellerstellung berücksichtigt hat,
garantiert die Geologische Bundesanstalt weder Vollständigkeit noch Richtigkeit des Modells.
Daraus abgeleitete Informationen (z.B. virtuelle Bohrprofile) entsprechen dem Modell aber nicht der
Realität!
Die Geologische Bundesanstalt haftet weder für Fehler oder Unzulänglichkeiten des Modells, noch für jegliche
Ansprüche oder Kosten,
die durch den Gebrauch des Modells entstehen könnten.
Darüber hinaus gibt das dargestellte Modell nur die Interpretation der bei der Erstellung verwendeten
Untergrunddaten wieder.
Zukünftige oder neu herangezogene Daten sowie technische Fortschritte können die Qualität des Modells
verbessern.
</p>
</div>
</body>
</html>

View File

@ -72,12 +72,12 @@
<a id="menu-dowload-button" class="navbar-item" type="submit" download="file.png"> <a id="menu-dowload-button" class="navbar-item" type="submit" download="file.png">
Download Map Download Map
</a> </a>
<a class="navbar-item"> <a id="menu-disclaimer-button" target="_blank" href="egdi_disclaimer.html" class="navbar-item">
Contact Disclaimer
</a> </a>
<hr class="navbar-divider"> <hr class="navbar-divider">
<a class="navbar-item"> <a id="menu-email-button" class="navbar-item">
Report an issue Contact
</a> </a>
</div> </div>
</div> </div>
@ -184,7 +184,7 @@
<div class="control"> <div class="control">
<label class="checkbox"> <label class="checkbox">
<input type="checkbox" id="chkSlicingBox" <input type="checkbox" id="chkSlicingBox"
autocomplete="off" checked> autocomplete="off">
slicing box slicing box
</label> </label>
</div> </div>

319
package-lock.json generated
View File

@ -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",
"hull.js": "^0.2.11",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"normalize.css": "^8.0.1", "normalize.css": "^8.0.1",
"proj4": "^2.6.3", "proj4": "^2.6.3",
@ -33,7 +32,7 @@
"dotenv": "^10.0.0", "dotenv": "^10.0.0",
"file-loader": "^6.2.0", "file-loader": "^6.2.0",
"img-loader": "^4.0.0", "img-loader": "^4.0.0",
"mini-css-extract-plugin": "^1.3.1", "mini-css-extract-plugin": "^2.0.0",
"node-sass": "^6.0.0", "node-sass": "^6.0.0",
"resolve-url-loader": "^4.0.0", "resolve-url-loader": "^4.0.0",
"sass-loader": "^12.1.0", "sass-loader": "^12.1.0",
@ -1733,9 +1732,9 @@
"peer": true "peer": true
}, },
"node_modules/@types/debug": { "node_modules/@types/debug": {
"version": "4.1.5", "version": "4.1.6",
"resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.6.tgz",
"integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==", "integrity": "sha512-7fDOJFA/x8B+sO1901BmHlf5dE1cxBU8mRXj8QOEDnn16hhGJv/IHxJtZhvsabZsIMn0eLIyeOKAeqSNJJYTpA==",
"dev": true, "dev": true,
"peer": true "peer": true
}, },
@ -1778,9 +1777,9 @@
"dev": true "dev": true
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "15.12.5", "version": "16.0.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.5.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.0.0.tgz",
"integrity": "sha512-se3yX7UHv5Bscf8f1ERKvQOD6sTyycH3hdaoozvaLxgUiY5lIGEeH37AD0G0Qi9kPqihPn0HOfd2yaIEN9VwEg==", "integrity": "sha512-TmCW5HoZ2o2/z2EYi109jLqIaPIi9y/lc2LmDCWzuCi35bcaQ+OtUh6nwBiFK7SOu25FAU5+YKdqFZUwtqGSdg==",
"dev": true "dev": true
}, },
"node_modules/@types/normalize-package-data": { "node_modules/@types/normalize-package-data": {
@ -1790,9 +1789,9 @@
"dev": true "dev": true
}, },
"node_modules/@types/three": { "node_modules/@types/three": {
"version": "0.129.1", "version": "0.129.2",
"resolved": "https://registry.npmjs.org/@types/three/-/three-0.129.1.tgz", "resolved": "https://registry.npmjs.org/@types/three/-/three-0.129.2.tgz",
"integrity": "sha512-31VTcjAQNggIrCH9NVotTYsr5Ws/QMGGTaMK6RP3EgyzW2WEuZdm25TNidd6PJ3e4a6/hbswNacnTsjwc7ksbw==" "integrity": "sha512-fZDNRtUFnq3baNjDiAzi4QoHYcczWtEdsduH/tpiwk91fbVk8COJiT/iLoN3tIOjLKMySoYsjUfP0VTmUfZKLw=="
}, },
"node_modules/@webassemblyjs/ast": { "node_modules/@webassemblyjs/ast": {
"version": "1.11.0", "version": "1.11.0",
@ -2359,9 +2358,9 @@
} }
}, },
"node_modules/caniuse-lite": { "node_modules/caniuse-lite": {
"version": "1.0.30001241", "version": "1.0.30001242",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001241.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001242.tgz",
"integrity": "sha512-1uoSZ1Pq1VpH0WerIMqwptXHNNGfdl7d1cJUFs80CwQ/lVzdhTvsFZCeNFslze7AjsQnb4C85tzclPa1VShbeQ==", "integrity": "sha512-KvNuZ/duufelMB3w2xtf9gEWCSxJwUgoxOx5b6ScLXC4kPc9xsczUVCPrQU26j5kOsHM4pSUL54tAZt5THQKug==",
"dev": true, "dev": true,
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
@ -2744,12 +2743,12 @@
} }
}, },
"node_modules/css-loader/node_modules/schema-utils": { "node_modules/css-loader/node_modules/schema-utils": {
"version": "3.0.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz",
"integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/json-schema": "^7.0.6", "@types/json-schema": "^7.0.7",
"ajv": "^6.12.5", "ajv": "^6.12.5",
"ajv-keywords": "^3.5.2" "ajv-keywords": "^3.5.2"
}, },
@ -2814,9 +2813,9 @@
} }
}, },
"node_modules/debug": { "node_modules/debug": {
"version": "4.3.1", "version": "4.3.2",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
"integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"ms": "2.1.2" "ms": "2.1.2"
@ -2921,9 +2920,9 @@
} }
}, },
"node_modules/electron-to-chromium": { "node_modules/electron-to-chromium": {
"version": "1.3.762", "version": "1.3.768",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.762.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.768.tgz",
"integrity": "sha512-LehWjRpfPcK8F1Lf/NZoAwWLWnjJVo0SZeQ9j/tvnBWYcT99qDqgo4raAfS2oTKZjPrR/jxruh85DGgDUmywEA==", "integrity": "sha512-I4UMZHhVSK2pwt8jOIxTi3GIuc41NkddtKT/hpuxp9GO5UWJgDKTBa4TACppbVAuKtKbMK6BhQZvT5tFF1bcNA==",
"dev": true "dev": true
}, },
"node_modules/emoji-regex": { "node_modules/emoji-regex": {
@ -3143,9 +3142,9 @@
"dev": true "dev": true
}, },
"node_modules/fastq": { "node_modules/fastq": {
"version": "1.11.0", "version": "1.11.1",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz",
"integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==",
"dev": true, "dev": true,
"peer": true, "peer": true,
"dependencies": { "dependencies": {
@ -3187,12 +3186,12 @@
} }
}, },
"node_modules/file-loader/node_modules/schema-utils": { "node_modules/file-loader/node_modules/schema-utils": {
"version": "3.0.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz",
"integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/json-schema": "^7.0.6", "@types/json-schema": "^7.0.7",
"ajv": "^6.12.5", "ajv": "^6.12.5",
"ajv-keywords": "^3.5.2" "ajv-keywords": "^3.5.2"
}, },
@ -3602,11 +3601,6 @@
"npm": ">=1.3.7" "npm": ">=1.3.7"
} }
}, },
"node_modules/hull.js": {
"version": "0.2.11",
"resolved": "https://registry.npmjs.org/hull.js/-/hull.js-0.2.11.tgz",
"integrity": "sha512-WEmMRCFqoZA0d7bD9KY9RK0rTBKRfNqDExi8OvFz5A57hpywyc0Wd5N4egF9cU+E69p1KjE/fTIYU4CjOgXdZQ=="
},
"node_modules/human-signals": { "node_modules/human-signals": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
@ -4228,47 +4222,31 @@
} }
}, },
"node_modules/mini-css-extract-plugin": { "node_modules/mini-css-extract-plugin": {
"version": "1.6.2", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.1.0.tgz",
"integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", "integrity": "sha512-SV1GgjMcfqy6hW07rAniUbQE4qS3inh3v4rZEUySkPRWy3vMbS3jUCjMOvNI4lUnDlQYJEmuUqKktTCNY5koFQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"loader-utils": "^2.0.0", "schema-utils": "^3.0.0"
"schema-utils": "^3.0.0",
"webpack-sources": "^1.1.0"
}, },
"engines": { "engines": {
"node": ">= 10.13.0" "node": ">= 12.13.0"
}, },
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
"url": "https://opencollective.com/webpack" "url": "https://opencollective.com/webpack"
}, },
"peerDependencies": { "peerDependencies": {
"webpack": "^4.4.0 || ^5.0.0" "webpack": "^5.0.0"
}
},
"node_modules/mini-css-extract-plugin/node_modules/loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
"dev": true,
"dependencies": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
},
"engines": {
"node": ">=8.9.0"
} }
}, },
"node_modules/mini-css-extract-plugin/node_modules/schema-utils": { "node_modules/mini-css-extract-plugin/node_modules/schema-utils": {
"version": "3.0.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz",
"integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/json-schema": "^7.0.6", "@types/json-schema": "^7.0.7",
"ajv": "^6.12.5", "ajv": "^6.12.5",
"ajv-keywords": "^3.5.2" "ajv-keywords": "^3.5.2"
}, },
@ -6040,12 +6018,12 @@
} }
}, },
"node_modules/terser-webpack-plugin/node_modules/schema-utils": { "node_modules/terser-webpack-plugin/node_modules/schema-utils": {
"version": "3.0.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz",
"integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/json-schema": "^7.0.6", "@types/json-schema": "^7.0.7",
"ajv": "^6.12.5", "ajv": "^6.12.5",
"ajv-keywords": "^3.5.2" "ajv-keywords": "^3.5.2"
}, },
@ -6306,12 +6284,12 @@
} }
}, },
"node_modules/url-loader/node_modules/schema-utils": { "node_modules/url-loader/node_modules/schema-utils": {
"version": "3.0.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz",
"integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/json-schema": "^7.0.6", "@types/json-schema": "^7.0.7",
"ajv": "^6.12.5", "ajv": "^6.12.5",
"ajv-keywords": "^3.5.2" "ajv-keywords": "^3.5.2"
}, },
@ -6383,9 +6361,9 @@
} }
}, },
"node_modules/webpack": { "node_modules/webpack": {
"version": "5.41.1", "version": "5.42.1",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.41.1.tgz", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.42.1.tgz",
"integrity": "sha512-AJZIIsqJ/MVTmegEq9Tlw5mk5EHdGiJbDdz9qP15vmUH+oxI1FdWcL0E9EO8K/zKaRPWqEs7G/OPxq1P61u5Ug==", "integrity": "sha512-msikozzXrG2Hdx+dElq0fyNvxPFsaM2dKLc/l+xkMmhO/1qwVJ9K9gY+fi/49MYWcpSP7alnK5Q78Evrd1LiqQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/eslint-scope": "^3.7.0", "@types/eslint-scope": "^3.7.0",
@ -6393,7 +6371,7 @@
"@webassemblyjs/ast": "1.11.0", "@webassemblyjs/ast": "1.11.0",
"@webassemblyjs/wasm-edit": "1.11.0", "@webassemblyjs/wasm-edit": "1.11.0",
"@webassemblyjs/wasm-parser": "1.11.0", "@webassemblyjs/wasm-parser": "1.11.0",
"acorn": "^8.2.1", "acorn": "^8.4.1",
"browserslist": "^4.14.5", "browserslist": "^4.14.5",
"chrome-trace-event": "^1.0.2", "chrome-trace-event": "^1.0.2",
"enhanced-resolve": "^5.8.0", "enhanced-resolve": "^5.8.0",
@ -6495,13 +6473,16 @@
} }
}, },
"node_modules/webpack-sources": { "node_modules/webpack-sources": {
"version": "1.4.3", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz",
"integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"source-list-map": "^2.0.0", "source-list-map": "^2.0.1",
"source-map": "~0.6.1" "source-map": "^0.6.1"
},
"engines": {
"node": ">=10.13.0"
} }
}, },
"node_modules/webpack-sources/node_modules/source-map": { "node_modules/webpack-sources/node_modules/source-map": {
@ -6514,12 +6495,12 @@
} }
}, },
"node_modules/webpack/node_modules/schema-utils": { "node_modules/webpack/node_modules/schema-utils": {
"version": "3.0.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz",
"integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/json-schema": "^7.0.6", "@types/json-schema": "^7.0.7",
"ajv": "^6.12.5", "ajv": "^6.12.5",
"ajv-keywords": "^3.5.2" "ajv-keywords": "^3.5.2"
}, },
@ -6531,28 +6512,6 @@
"url": "https://opencollective.com/webpack" "url": "https://opencollective.com/webpack"
} }
}, },
"node_modules/webpack/node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/webpack/node_modules/webpack-sources": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz",
"integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==",
"dev": true,
"dependencies": {
"source-list-map": "^2.0.1",
"source-map": "^0.6.1"
},
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/which": { "node_modules/which": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@ -7964,9 +7923,9 @@
"peer": true "peer": true
}, },
"@types/debug": { "@types/debug": {
"version": "4.1.5", "version": "4.1.6",
"resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.6.tgz",
"integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==", "integrity": "sha512-7fDOJFA/x8B+sO1901BmHlf5dE1cxBU8mRXj8QOEDnn16hhGJv/IHxJtZhvsabZsIMn0eLIyeOKAeqSNJJYTpA==",
"dev": true, "dev": true,
"peer": true "peer": true
}, },
@ -8009,9 +7968,9 @@
"dev": true "dev": true
}, },
"@types/node": { "@types/node": {
"version": "15.12.5", "version": "16.0.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.5.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.0.0.tgz",
"integrity": "sha512-se3yX7UHv5Bscf8f1ERKvQOD6sTyycH3hdaoozvaLxgUiY5lIGEeH37AD0G0Qi9kPqihPn0HOfd2yaIEN9VwEg==", "integrity": "sha512-TmCW5HoZ2o2/z2EYi109jLqIaPIi9y/lc2LmDCWzuCi35bcaQ+OtUh6nwBiFK7SOu25FAU5+YKdqFZUwtqGSdg==",
"dev": true "dev": true
}, },
"@types/normalize-package-data": { "@types/normalize-package-data": {
@ -8021,9 +7980,9 @@
"dev": true "dev": true
}, },
"@types/three": { "@types/three": {
"version": "0.129.1", "version": "0.129.2",
"resolved": "https://registry.npmjs.org/@types/three/-/three-0.129.1.tgz", "resolved": "https://registry.npmjs.org/@types/three/-/three-0.129.2.tgz",
"integrity": "sha512-31VTcjAQNggIrCH9NVotTYsr5Ws/QMGGTaMK6RP3EgyzW2WEuZdm25TNidd6PJ3e4a6/hbswNacnTsjwc7ksbw==" "integrity": "sha512-fZDNRtUFnq3baNjDiAzi4QoHYcczWtEdsduH/tpiwk91fbVk8COJiT/iLoN3tIOjLKMySoYsjUfP0VTmUfZKLw=="
}, },
"@webassemblyjs/ast": { "@webassemblyjs/ast": {
"version": "1.11.0", "version": "1.11.0",
@ -8493,9 +8452,9 @@
} }
}, },
"caniuse-lite": { "caniuse-lite": {
"version": "1.0.30001241", "version": "1.0.30001242",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001241.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001242.tgz",
"integrity": "sha512-1uoSZ1Pq1VpH0WerIMqwptXHNNGfdl7d1cJUFs80CwQ/lVzdhTvsFZCeNFslze7AjsQnb4C85tzclPa1VShbeQ==", "integrity": "sha512-KvNuZ/duufelMB3w2xtf9gEWCSxJwUgoxOx5b6ScLXC4kPc9xsczUVCPrQU26j5kOsHM4pSUL54tAZt5THQKug==",
"dev": true "dev": true
}, },
"caseless": { "caseless": {
@ -8796,12 +8755,12 @@
} }
}, },
"schema-utils": { "schema-utils": {
"version": "3.0.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz",
"integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/json-schema": "^7.0.6", "@types/json-schema": "^7.0.7",
"ajv": "^6.12.5", "ajv": "^6.12.5",
"ajv-keywords": "^3.5.2" "ajv-keywords": "^3.5.2"
} }
@ -8839,9 +8798,9 @@
"dev": true "dev": true
}, },
"debug": { "debug": {
"version": "4.3.1", "version": "4.3.2",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
"integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
"dev": true, "dev": true,
"requires": { "requires": {
"ms": "2.1.2" "ms": "2.1.2"
@ -8919,9 +8878,9 @@
} }
}, },
"electron-to-chromium": { "electron-to-chromium": {
"version": "1.3.762", "version": "1.3.768",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.762.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.768.tgz",
"integrity": "sha512-LehWjRpfPcK8F1Lf/NZoAwWLWnjJVo0SZeQ9j/tvnBWYcT99qDqgo4raAfS2oTKZjPrR/jxruh85DGgDUmywEA==", "integrity": "sha512-I4UMZHhVSK2pwt8jOIxTi3GIuc41NkddtKT/hpuxp9GO5UWJgDKTBa4TACppbVAuKtKbMK6BhQZvT5tFF1bcNA==",
"dev": true "dev": true
}, },
"emoji-regex": { "emoji-regex": {
@ -9092,9 +9051,9 @@
"dev": true "dev": true
}, },
"fastq": { "fastq": {
"version": "1.11.0", "version": "1.11.1",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz",
"integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==",
"dev": true, "dev": true,
"peer": true, "peer": true,
"requires": { "requires": {
@ -9123,12 +9082,12 @@
} }
}, },
"schema-utils": { "schema-utils": {
"version": "3.0.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz",
"integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/json-schema": "^7.0.6", "@types/json-schema": "^7.0.7",
"ajv": "^6.12.5", "ajv": "^6.12.5",
"ajv-keywords": "^3.5.2" "ajv-keywords": "^3.5.2"
} }
@ -9432,11 +9391,6 @@
"sshpk": "^1.7.0" "sshpk": "^1.7.0"
} }
}, },
"hull.js": {
"version": "0.2.11",
"resolved": "https://registry.npmjs.org/hull.js/-/hull.js-0.2.11.tgz",
"integrity": "sha512-WEmMRCFqoZA0d7bD9KY9RK0rTBKRfNqDExi8OvFz5A57hpywyc0Wd5N4egF9cU+E69p1KjE/fTIYU4CjOgXdZQ=="
},
"human-signals": { "human-signals": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
@ -9902,34 +9856,21 @@
"dev": true "dev": true
}, },
"mini-css-extract-plugin": { "mini-css-extract-plugin": {
"version": "1.6.2", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.1.0.tgz",
"integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", "integrity": "sha512-SV1GgjMcfqy6hW07rAniUbQE4qS3inh3v4rZEUySkPRWy3vMbS3jUCjMOvNI4lUnDlQYJEmuUqKktTCNY5koFQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"loader-utils": "^2.0.0", "schema-utils": "^3.0.0"
"schema-utils": "^3.0.0",
"webpack-sources": "^1.1.0"
}, },
"dependencies": { "dependencies": {
"loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
"dev": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
},
"schema-utils": { "schema-utils": {
"version": "3.0.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz",
"integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/json-schema": "^7.0.6", "@types/json-schema": "^7.0.7",
"ajv": "^6.12.5", "ajv": "^6.12.5",
"ajv-keywords": "^3.5.2" "ajv-keywords": "^3.5.2"
} }
@ -11254,12 +11195,12 @@
} }
}, },
"schema-utils": { "schema-utils": {
"version": "3.0.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz",
"integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/json-schema": "^7.0.6", "@types/json-schema": "^7.0.7",
"ajv": "^6.12.5", "ajv": "^6.12.5",
"ajv-keywords": "^3.5.2" "ajv-keywords": "^3.5.2"
} }
@ -11438,12 +11379,12 @@
} }
}, },
"schema-utils": { "schema-utils": {
"version": "3.0.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz",
"integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/json-schema": "^7.0.6", "@types/json-schema": "^7.0.7",
"ajv": "^6.12.5", "ajv": "^6.12.5",
"ajv-keywords": "^3.5.2" "ajv-keywords": "^3.5.2"
} }
@ -11500,9 +11441,9 @@
} }
}, },
"webpack": { "webpack": {
"version": "5.41.1", "version": "5.42.1",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.41.1.tgz", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.42.1.tgz",
"integrity": "sha512-AJZIIsqJ/MVTmegEq9Tlw5mk5EHdGiJbDdz9qP15vmUH+oxI1FdWcL0E9EO8K/zKaRPWqEs7G/OPxq1P61u5Ug==", "integrity": "sha512-msikozzXrG2Hdx+dElq0fyNvxPFsaM2dKLc/l+xkMmhO/1qwVJ9K9gY+fi/49MYWcpSP7alnK5Q78Evrd1LiqQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/eslint-scope": "^3.7.0", "@types/eslint-scope": "^3.7.0",
@ -11510,7 +11451,7 @@
"@webassemblyjs/ast": "1.11.0", "@webassemblyjs/ast": "1.11.0",
"@webassemblyjs/wasm-edit": "1.11.0", "@webassemblyjs/wasm-edit": "1.11.0",
"@webassemblyjs/wasm-parser": "1.11.0", "@webassemblyjs/wasm-parser": "1.11.0",
"acorn": "^8.2.1", "acorn": "^8.4.1",
"browserslist": "^4.14.5", "browserslist": "^4.14.5",
"chrome-trace-event": "^1.0.2", "chrome-trace-event": "^1.0.2",
"enhanced-resolve": "^5.8.0", "enhanced-resolve": "^5.8.0",
@ -11531,31 +11472,15 @@
}, },
"dependencies": { "dependencies": {
"schema-utils": { "schema-utils": {
"version": "3.0.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz",
"integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/json-schema": "^7.0.6", "@types/json-schema": "^7.0.7",
"ajv": "^6.12.5", "ajv": "^6.12.5",
"ajv-keywords": "^3.5.2" "ajv-keywords": "^3.5.2"
} }
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
},
"webpack-sources": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz",
"integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==",
"dev": true,
"requires": {
"source-list-map": "^2.0.1",
"source-map": "^0.6.1"
}
} }
} }
}, },
@ -11599,13 +11524,13 @@
} }
}, },
"webpack-sources": { "webpack-sources": {
"version": "1.4.3", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz",
"integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"source-list-map": "^2.0.0", "source-list-map": "^2.0.1",
"source-map": "~0.6.1" "source-map": "^0.6.1"
}, },
"dependencies": { "dependencies": {
"source-map": { "source-map": {

View File

@ -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",
"hull.js": "^0.2.11",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"normalize.css": "^8.0.1", "normalize.css": "^8.0.1",
"proj4": "^2.6.3", "proj4": "^2.6.3",
@ -30,7 +29,7 @@
"dotenv": "^10.0.0", "dotenv": "^10.0.0",
"file-loader": "^6.2.0", "file-loader": "^6.2.0",
"img-loader": "^4.0.0", "img-loader": "^4.0.0",
"mini-css-extract-plugin": "^1.3.1", "mini-css-extract-plugin": "^2.0.0",
"node-sass": "^6.0.0", "node-sass": "^6.0.0",
"resolve-url-loader": "^4.0.0", "resolve-url-loader": "^4.0.0",
"sass-loader": "^12.1.0", "sass-loader": "^12.1.0",

View File

@ -28,7 +28,7 @@ export class Selection extends Layer {
constructor(parameters, low, high) { constructor(parameters, low, high) {
super(); super();
this.type = 'Selection'; this.type = 'Selection';
this.visible = true; this.visible = false;
this.opacity = 1; this.opacity = 1;
for (var k in parameters) { for (var k in parameters) {
this[k] = parameters[k]; this[k] = parameters[k];
@ -98,6 +98,7 @@ export class Selection extends Layer {
onAdd(map) { onAdd(map) {
this.map = map; this.map = map;
this.build(this.getScene()); this.build(this.getScene());
this.setVisible(this.visible);
this.emit('add'); this.emit('add');
if (this.map.layers) { if (this.map.layers) {

View File

@ -3,6 +3,7 @@ import { Uint16BufferAttribute } from 'three/src/core/BufferAttribute';
import { Vector3 } from 'three/src/math/Vector3'; import { Vector3 } from 'three/src/math/Vector3';
import { Float32BufferAttribute } from 'three/src/core/BufferAttribute'; import { Float32BufferAttribute } from 'three/src/core/BufferAttribute';
import { eventMixin } from '../core/eventMixin'; import { eventMixin } from '../core/eventMixin';
import { Plane } from 'three/src/math/Plane';
class UpdatableBoxGeometry extends BufferGeometry { class UpdatableBoxGeometry extends BufferGeometry {
@ -10,11 +11,14 @@ class UpdatableBoxGeometry extends BufferGeometry {
indexArray: Array<number>; indexArray: Array<number>;
uvs: Array<number>; uvs: Array<number>;
groupStart: number; groupStart: number;
clipPlanes: Array<Plane>;
constructor(vertices: Array<Vector3>) { constructor(vertices: Array<Vector3>) {
// call parent constructor // call parent constructor
super(); super();
this.clipPlanes = [new Plane(new Vector3(0, 1, 0))];
this.type = 'UpdatableBoxGeometry'; this.type = 'UpdatableBoxGeometry';
this.indexArray = new Array(); this.indexArray = new Array();
this.vertices = new Array(); this.vertices = new Array();
@ -23,11 +27,11 @@ class UpdatableBoxGeometry extends BufferGeometry {
// helper variables for material index // helper variables for material index
this.groupStart = 0; this.groupStart = 0;
this.buildPlane(0, vertices[0], vertices[1], vertices[5], vertices[4], 0); //y1 south this.buildPlane(0, vertices[0], vertices[1], vertices[5], vertices[4], 0); //y1 south 0 1 2 3
this.buildPlane(4, vertices[0], vertices[2], vertices[3], vertices[1], 1); //z1 bottom this.buildPlane(4, vertices[0], vertices[2], vertices[3], vertices[1], 1); //z1 bottom 4 5 6 7
this.buildPlane(8, vertices[0], vertices[4], vertices[6], vertices[2], 2); //x1 east this.buildPlane(8, vertices[0], vertices[4], vertices[6], vertices[2], 2); //x1 east 8 9 10 11
this.buildPlane(12, vertices[7], vertices[5], vertices[1], vertices[3], 3); //x2 west this.buildPlane(12, vertices[7], vertices[5], vertices[1], vertices[3], 3); //x2 west 12 13 14 15
this.buildPlane(16, vertices[7], vertices[3], vertices[2], vertices[6], 4); //y2 nort this.buildPlane(16, vertices[7], vertices[3], vertices[2], vertices[6], 4); //y2 nort 15 16 17 18
this.buildPlane(20, vertices[7], vertices[6], vertices[4], vertices[5], 5); //z2 this.buildPlane(20, vertices[7], vertices[6], vertices[4], vertices[5], 5); //z2
this.setFromPoints(this.vertices); this.setFromPoints(this.vertices);
@ -68,8 +72,25 @@ class UpdatableBoxGeometry extends BufferGeometry {
update() { update() {
this.setFromPoints(this.vertices); this.setFromPoints(this.vertices);
this.attributes.position.needsUpdate = true; this.attributes.position.needsUpdate = true;
this.computeBoundingBox();
this.computeBoundingSphere(); this.computeBoundingSphere();
this.dispatchEvent( { type: 'update', message: "example" } ); this.dispatchEvent({ type: 'update', message: "example" } );
}
clippingPlanes() {
const a = this.gVect(0);
const b = this.gVect(1);
const c = this.gVect(2);
this.clipPlanes[0] = new Plane(new Vector3(0, -1, 0), a.y);
// this.clipPlanes[0]= new Plane(new Vector3(-1, 0, 0), a.x);
return this.clipPlanes[0];
}
// grab position from geometry
private gVect(idx) {
return new Vector3().fromBufferAttribute(this.attributes.position, idx);
} }
} }

View File

@ -4,9 +4,11 @@ import { LineBasicMaterial } from 'three/src/materials/LineBasicMaterial';
import { ShaderMaterial } from 'three/src/materials/ShaderMaterial'; import { ShaderMaterial } from 'three/src/materials/ShaderMaterial';
import { uniforms } from "./uniforms"; import { uniforms } from "./uniforms";
import { shader } from './shader'; import { shader } from './shader';
import { DoubleSide, BackSide, FrontSide, EqualStencilFunc, KeepStencilOp, DecrementStencilOp, IncrementStencilOp, InvertStencilOp, GreaterStencilFunc, NeverStencilFunc, LessStencilFunc, LessEqualStencilFunc } from 'three/src/constants'; import { DoubleSide, BackSide, FrontSide, EqualStencilFunc, KeepStencilOp, DecrementStencilOp, IncrementStencilOp, InvertStencilOp } from 'three/src/constants';
import { DecrementWrapStencilOp, IncrementWrapStencilOp } from 'three/src/constants'; import { DecrementWrapStencilOp, IncrementWrapStencilOp } from 'three/src/constants';
import { NotEqualStencilFunc, ReplaceStencilOp, AlwaysStencilFunc } from 'three/src/constants'; import { NotEqualStencilFunc, ReplaceStencilOp, AlwaysStencilFunc } from 'three/src/constants';
import { Vector3 } from 'three/src/math/Vector3';
import { Plane } from 'three/src/math/Plane';
// let profileMaterial = new ShaderMaterial({ // let profileMaterial = new ShaderMaterial({
// // metalness: 0.1, // // metalness: 0.1,
@ -22,34 +24,40 @@ import { NotEqualStencilFunc, ReplaceStencilOp, AlwaysStencilFunc } from 'three/
// vertexShader: shader.vertex, // vertexShader: shader.vertex,
// fragmentShader: shader.fragment // fragmentShader: shader.fragment
// }); // });
// y normal will not clip models on northern hemisphere
// but why not -1 ??
function dummyPlane() {
const normal = new Vector3( 0, 1, 0 );
return new Plane( normal, 0 );
}
let featureMat = new MeshStandardMaterial({
color: 0xC1FF07,
metalness: 0.1,
roughness: 0.75,
flatShading: true,
side: DoubleSide,
// clippingPlanes: [ dummyPlane() ]
});
let profileMaterial = new MeshStandardMaterial( { let profileMaterial = new MeshStandardMaterial( {
color: 0xE91E63, color: 0xE91E63,
metalness: 0.1, metalness: 0.1,
roughness: 0.75, roughness: 0.75,
flatShading: true, flatShading: true,
stencilWrite: true, stencilWrite: true,
stencilRef: 0, // stencilRef: 0,
stencilFunc: NotEqualStencilFunc, stencilFunc: NotEqualStencilFunc,
stencilFail: ReplaceStencilOp, stencilFail: ReplaceStencilOp,
stencilZFail: ReplaceStencilOp, stencilZFail: ReplaceStencilOp,
stencilZPass: ReplaceStencilOp stencilZPass: ReplaceStencilOp,
// stencilFunc: NotEqualStencilFunc, // stencilFunc: NotEqualStencilFunc,
// stencilFail: ReplaceStencilOp, // stencilFail: ReplaceStencilOp,
// stencilZFail: ReplaceStencilOp, // stencilZFail: ReplaceStencilOp,
// stencilZPass: 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({ let frontStencilMaterial = new ShaderMaterial({
depthWrite: false, depthWrite: false,
depthTest: false, depthTest: false,
@ -59,6 +67,7 @@ let frontStencilMaterial = new ShaderMaterial({
uniforms: uniforms.clipping, uniforms: uniforms.clipping,
vertexShader: shader.vertexClipping, vertexShader: shader.vertexClipping,
fragmentShader: shader.fragmentClippingFront, fragmentShader: shader.fragmentClippingFront,
// clippingPlanes: [dummyPlane()],
side: FrontSide, side: FrontSide,
// stencilFail: DecrementWrapStencilOp, // stencilFail: DecrementWrapStencilOp,
// stencilZFail: DecrementWrapStencilOp, // stencilZFail: DecrementWrapStencilOp,
@ -77,6 +86,7 @@ let backStencilMaterial = new ShaderMaterial({
uniforms: uniforms.clipping, uniforms: uniforms.clipping,
vertexShader: shader.vertexClipping, vertexShader: shader.vertexClipping,
fragmentShader: shader.fragmentClippingFront, fragmentShader: shader.fragmentClippingFront,
// clippingPlanes: [ dummyPlane() ],
side: BackSide, side: BackSide,
// stencilFail: IncrementWrapStencilOp, // stencilFail: IncrementWrapStencilOp,
// stencilZFail: IncrementWrapStencilOp, // stencilZFail: IncrementWrapStencilOp,
@ -102,21 +112,6 @@ let Invisible = new ShaderMaterial({
side: DoubleSide 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) { function toBack(mat) {
const material = mat.clone(); const material = mat.clone();
material.side = BackSide, material.side = BackSide,
@ -140,7 +135,7 @@ function toFront(mat) {
export { export {
toBack, toBack,
toFront, toFront,
stencilMaterial, featureMat,
profileMaterial, profileMaterial,
frontStencilMaterial, frontStencilMaterial,
backStencilMaterial, backStencilMaterial,

12
src/js/constants.ts Normal file
View File

@ -0,0 +1,12 @@
declare const POINT_URL: string;
declare const EDGE_URL: string;
declare const SERVICE_URL: string;
const _EDGE_URL = EDGE_URL;
const _POINT_URL = POINT_URL;
const _SERVICE_URL = SERVICE_URL;
export {_EDGE_URL as EDGE_URL};
export {_POINT_URL as POINT_URL};
export {_SERVICE_URL as SERVICE_URL};

View File

@ -101,7 +101,7 @@ export class BoreholePopup extends Control {
domEvent.on(this._clearButton, 'click', domEvent.preventDefault); domEvent.on(this._clearButton, 'click', domEvent.preventDefault);
domEvent.on(this._clearButton, 'click', this.close, this);; domEvent.on(this._clearButton, 'click', this.close, this);;
// this._toggleVisibility(false); this._setVisibility(false);
if (!this.options.parentDiv) { if (!this.options.parentDiv) {
return container; return container;

View File

@ -8,6 +8,7 @@ import * as util from './utilities';
import { TinLayer } from '../layer/TinLayer'; import { TinLayer } from '../layer/TinLayer';
import { PerspectiveCamera } from 'three/src/cameras/PerspectiveCamera'; import { PerspectiveCamera } from 'three/src/cameras/PerspectiveCamera';
import { Vector3 } from 'three/src/math/Vector3'; import { Vector3 } from 'three/src/math/Vector3';
import { Group } from 'three';
class Map extends OrbitControls { class Map extends OrbitControls {
@ -27,6 +28,10 @@ class Map extends OrbitControls {
public basemaps: Object; public basemaps: Object;
public baseExtent: Object; public baseExtent: Object;
public currentBasemap; public currentBasemap;
public contact: string;
private _modelNode: Group;
private _stencilNode: Group;
private _profileNode: Group;
constructor(x, y, z, scene, container) { constructor(x, y, z, scene, container) {
@ -57,6 +62,7 @@ class Map extends OrbitControls {
this.size = size; this.size = size;
this.camera = camera; this.camera = camera;
this.container = container; this.container = container;
this.scene = scene;
this.length = x.max - x.min; this.length = x.max - x.min;
this.width = y.max - y.min; this.width = y.max - y.min;
this.height = z.max - z.min; this.height = z.max - z.min;
@ -68,6 +74,12 @@ class Map extends OrbitControls {
x: x, x: x,
y: y y: y
}; };
this._modelNode = new Group();
this._stencilNode = new Group();
this._profileNode = new Group();
this.scene.add(this._modelNode);
this.scene.add(this._stencilNode);
this.scene.add(this._profileNode);
//init the control corners //init the control corners
if (this._initControlPos) { if (this._initControlPos) {
@ -100,9 +112,22 @@ class Map extends OrbitControls {
map._initControls(); map._initControls();
map.title = modelData.model.model_name; map.title = modelData.model.model_name;
map.contact = modelData.model.model_owner;
return map; return map;
} }
get modelNode(): Group {
return this._modelNode;
}
get stencilNode(): Group {
return this._stencilNode;
}
get profileNode(): Group {
return this._profileNode;
}
get layers() { get layers() {
return this._layers; return this._layers;
} }

View File

@ -2,6 +2,7 @@ import { EventEmitter } from '../core/EventEmitter';
import { BoreholePopup } from '../controls/BoreholePopup'; import { BoreholePopup } from '../controls/BoreholePopup';
import { Map } from '../core/Map'; import { Map } from '../core/Map';
import { Scene } from 'three/src/scenes/Scene'; import { Scene } from 'three/src/scenes/Scene';
import { Group } from 'three';
abstract class Layer extends EventEmitter { abstract class Layer extends EventEmitter {
@ -58,6 +59,10 @@ abstract class Layer extends EventEmitter {
return this._map.scene; return this._map.scene;
} }
getModelNode(): Group {
return this._map.scene;
}
// @method bindPopup(content: String|HTMLElement|Function|Popup, options?: Popup options): this // @method bindPopup(content: String|HTMLElement|Function|Popup, options?: Popup options): this
// Binds a popup to the layer with the passed `content` and sets up the // Binds a popup to the layer with the passed `content` and sets up the
// neccessary event listeners. If a `Function` is passed it will receive // neccessary event listeners. If a `Function` is passed it will receive

View File

@ -6,7 +6,6 @@ import { Layer } from './Layer';
import { BitStream } from '../lib/bitstream'; import { BitStream } from '../lib/bitstream';
import { Vector3 } from 'three/src/math/Vector3'; import { Vector3 } from 'three/src/math/Vector3';
import { MyMeshStandardMaterial } from '../clip/MyMeshStandardMaterial'; import { MyMeshStandardMaterial } from '../clip/MyMeshStandardMaterial';
import { MeshBasicMaterial } from 'three/src/materials/MeshBasicMaterial';
import { Group } from 'three/src/objects/Group'; import { Group } from 'three/src/objects/Group';
import { TextureLoader } from 'three/src/loaders/TextureLoader'; import { TextureLoader } from 'three/src/loaders/TextureLoader';
import proj4 from 'proj4/dist/proj4-src'; import proj4 from 'proj4/dist/proj4-src';
@ -20,22 +19,20 @@ import { uniforms } from '../clip/uniforms';
import { UpdatableBoxGeometry } from '../clip/UpdatableBoxGeometry'; import { UpdatableBoxGeometry } from '../clip/UpdatableBoxGeometry';
import { Scene } from 'three/src/scenes/Scene'; import { Scene } from 'three/src/scenes/Scene';
import * as material from '../clip/material'; import * as material from '../clip/material';
import { POINT_URL, EDGE_URL } from "../constants";
import { Plane } from 'three/src/math/Plane'; import { Plane } from 'three/src/math/Plane';
import { PlaneGeometry } from '../clip/PlaneGeometry'; import { PlaneGeometry } from '../clip/PlaneGeometry';
import { Line3 } from 'three/src/math/Line3'; import { Line3 } from 'three/src/math/Line3';
import { LineBasicMaterial } from 'three/src/materials/LineBasicMaterial'; // import { LineBasicMaterial } from 'three/src/materials/LineBasicMaterial';
import { LineSegments } from 'three/src/objects/LineSegments'; // import { LineSegments } from 'three/src/objects/LineSegments';
import { PointsMaterial } from 'three/src/materials/PointsMaterial'; // 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 { Color } from 'three/src/math/Color'; import { Color } from 'three/src/math/Color';
// const POINTURL = 'https://geusegdi01.geus.dk/geom3d/data/nodes/';
// const EDGEURL = 'https://geusegdi01.geus.dk/geom3d/data/triangles/';
const POINTURL = 'https://geusegdi01.geus.dk/geom3d/data/nodes/';
const EDGEURL = 'https://geusegdi01.geus.dk/geom3d/data/triangles/';
export class Point3 extends Vector3 { export class Point3 extends Vector3 {
// public x: number; // public x: number;
@ -128,6 +125,10 @@ class TinLayer extends Layer {
tolerance: number = 0.01; tolerance: number = 0.01;
pointsOfIntersection: BufferGeometry; pointsOfIntersection: BufferGeometry;
borderMaterial; borderMaterial;
xLocalPlane;
yLocalPlane;
pointUrl: string;
edgeUrl: string;
constructor(params) { constructor(params) {
super(); super();
@ -147,6 +148,18 @@ class TinLayer extends Layer {
this.q = true; this.q = true;
this.uniforms = uniforms; this.uniforms = uniforms;
this.borderGroup = new Group(); this.borderGroup = new Group();
this.xLocalPlane = new Plane(new Vector3(-1, 0, 0), 4508490);
this.yLocalPlane = new Plane(new Vector3(0, 1, 0), 2350280);
this.pointUrl = 'https://geusegdi01.geus.dk/geom3d/data/nodes/';
this.edgeUrl = 'https://geusegdi01.geus.dk/geom3d/data/triangles/';
if (POINT_URL != "") {
this.pointUrl = POINT_URL;
}
if (EDGE_URL != "") {
this.edgeUrl = EDGE_URL;
}
} }
buildBorder(vertices) { buildBorder(vertices) {
@ -155,9 +168,7 @@ class TinLayer extends Layer {
let color = parseInt(this.color, 16); let color = parseInt(this.color, 16);
let planeGeom = this.planeGeom = new PlaneGeometry(this.box.vertices[12], this.box.vertices[13], this.box.vertices[14], this.box.vertices[15]);
let planeGeom = new PlaneGeometry(this.box.vertices[0], this.box.vertices[1], this.box.vertices[2], this.box.vertices[3]);
let caps = { let caps = {
// red // red
color: { type: "c", value: new Color(color) } color: { type: "c", value: new Color(color) }
@ -169,10 +180,7 @@ class TinLayer extends Layer {
// this.borderMesh.name = 'stencilFeatureBack_' + this.index; // this.borderMesh.name = 'stencilFeatureBack_' + this.index;
this.borderMesh.name = 'profilePlane_' + this.name; this.borderMesh.name = 'profilePlane_' + this.name;
// this.borderMesh.onAfterRender = this.debugRenderOrder; // this.borderMesh.onAfterRender = this.debugRenderOrder;
let self = this;
// this.boxMesh = new Mesh(box, material.profileMaterial);
// //let planeGeom = this.planeGeom = new PlaneGeometry(vertices[0], vertices[1], vertices[5], vertices[4]); // //let planeGeom = this.planeGeom = new PlaneGeometry(vertices[0], vertices[1], vertices[5], vertices[4]);
@ -198,7 +206,7 @@ class TinLayer extends Layer {
// var points = new Points(pointsOfIntersection, pointsMaterial); // var points = new Points(pointsOfIntersection, pointsMaterial);
// this._addObject(points, false); // this._addObject(points, false);
// var lines = new LineSegments(pointsOfIntersection, new LineBasicMaterial({ // var lines = new LineSegments(pointsOfIntersection, new LineBasicMaterial({
// color: 0xa9a9a9 // color: 0xa9a9a9
@ -211,7 +219,7 @@ class TinLayer extends Layer {
// let meshMaterial = new MeshBasicMaterial({ // let meshMaterial = new MeshBasicMaterial({
// color: 0xa9a9a9 // color: 0xa9a9a9
// }); // });
let a = new Vector3(), let a = new Vector3(),
b = new Vector3(), b = new Vector3(),
@ -224,127 +232,116 @@ class TinLayer extends Layer {
lineCA = new Line3(); lineCA = new Line3();
// let pointOfIntersection = new Vector3(); // let pointOfIntersection = new Vector3();
// box.addEventListener("update", (event) => { box.addEventListener("update", (event) => {
// let ar = new Array(this.box.vertices[0], this.box.vertices[1], this.box.vertices[2], this.box.vertices[3]); let ar = new Array(this.box.vertices[12], this.box.vertices[13], this.box.vertices[14], this.box.vertices[15]);
// this.planeGeom.setFromPoints(ar); this.planeGeom.setFromPoints(ar);
// this.planeGeom.update(); this.planeGeom.update();
// this.borderGroup.clear(); self.xLocalPlane.constant = self.box.vertices[12].x;
// this.p_vertices = [];
// vertices = [];
// let mathPlane = new Plane();
// plane.localToWorld(planePointA.copy(plane.geometry.vertices[0]));
// plane.localToWorld(planePointB.copy(plane.geometry.vertices[1]));
// plane.localToWorld(planePointC.copy(plane.geometry.vertices[2]));
// mathPlane.setFromCoplanarPoints(planePointA, planePointB, planePointC);
// let geom = this.mainMesh.geometry; // this.borderGroup.clear();
// // this.mainMesh.geometry.faces.forEach(function (face) {
// for (let vi = 0; vi < geom.index.array.length; vi += 3) {
// let idx0 = geom.index.array[vi]; // this.p_vertices = [];
// let idx1 = geom.index.array[vi + 1]; // vertices = [];
// let idx2 = geom.index.array[vi + 2];
// let vx0 = geom.attributes.position.array[3 * idx0]; // let mathPlane = new Plane();
// let vy0 = geom.attributes.position.array[3 * idx0 + 1]; // plane.localToWorld(planePointA.copy(plane.geometry.vertices[0]));
// let vz0 = geom.attributes.position.array[3 * idx0 + 2]; // plane.localToWorld(planePointB.copy(plane.geometry.vertices[1]));
// plane.localToWorld(planePointC.copy(plane.geometry.vertices[2]));
// mathPlane.setFromCoplanarPoints(planePointA, planePointB, planePointC);
// let vx1 = geom.attributes.position.array[3 * idx1];
// let vy1 = geom.attributes.position.array[3 * idx1 + 1];
// let vz1 = geom.attributes.position.array[3 * idx1 + 2];
// let vx2 = geom.attributes.position.array[3 * idx2]; // let geom = this.mainMesh.geometry;
// let vy2 = geom.attributes.position.array[3 * idx2 + 1]; // // this.mainMesh.geometry.faces.forEach(function (face) {
// let vz2 = geom.attributes.position.array[3 * idx2 + 2]; // for (let vi = 0; vi < geom.index.array.length; vi += 3) {
// let v0 = new Vector3(vx0, vy0, vz0); // let idx0 = geom.index.array[vi];
// let v1 = new Vector3(vx1, vy1, vz1); // let idx1 = geom.index.array[vi + 1];
// let v2 = new Vector3(vx2, vy2, vz2); // let idx2 = geom.index.array[vi + 2];
// this.mainMesh.localToWorld(a.copy(v0)); // let vx0 = geom.attributes.position.array[3 * idx0];
// this.mainMesh.localToWorld(b.copy(v1)); // let vy0 = geom.attributes.position.array[3 * idx0 + 1];
// this.mainMesh.localToWorld(c.copy(v2)); // let vz0 = geom.attributes.position.array[3 * idx0 + 2];
// lineAB = new Line3(a, b);
// lineBC = new Line3(b, c);
// lineCA = new Line3(c, a);
// let p1 = this.setPointOfIntersection(lineAB, mathPlane, vi);
// let p2 = this.setPointOfIntersection(lineBC, mathPlane, vi);
// let p3 = this.setPointOfIntersection(lineCA, mathPlane, vi);
// // if (p1.x != 0 && p1.y != 0 && p1.z != 0 && p2.x != 0 && p2.y != 0 && p2.z != 0 && p3.x != 0 && p3.y != 0 && p3.z != 0) {
// // this.p_vertices.push(p1, p2, p3);
// // }
// } // let vx1 = geom.attributes.position.array[3 * idx1];
// if (this.p_vertices.length > 0) { // let vy1 = geom.attributes.position.array[3 * idx1 + 1];
// // pointsOfIntersection.setFromPoints(p_vertices); // let vz1 = geom.attributes.position.array[3 * idx1 + 2];
// // pointsOfIntersection.computeBoundingSphere()
// // pointsOfIntersection.attributes.position.needsUpdate = true;
// // // convexGeometry.setFromPoints(p_vertices); // let vx2 = geom.attributes.position.array[3 * idx2];
// // convexGeometry = new ConvexGeometry( p_vertices ); // let vy2 = geom.attributes.position.array[3 * idx2 + 1];
// // convexGeometry.computeBoundingSphere() // let vz2 = geom.attributes.position.array[3 * idx2 + 2];
// // convexGeometry.attributes.position.needsUpdate = true;
// // let test = this.p_vertices.map(v => { // let v0 = new Vector3(vx0, vy0, vz0);
// // return [v.x, v.z]; // let v1 = new Vector3(vx1, vy1, vz1);
// // }); // let v2 = new Vector3(vx2, vy2, vz2);
// // // const indexHull = hull(test, 20); // returns points of the hull (in clockwise order)
// // const indexHull = concaveman(test, 1.5);
// // let vertices = indexHull.map(a => {
// // return new Vector3(a[0], this.p_vertices[0].y, a[1]);
// // });
// // let cntrGeom = new BufferGeometry();
// // cntrGeom.setFromPoints(vertices);
// // let contour = new Line(cntrGeom, new LineBasicMaterial({
// // color: Math.random() * 0xffffff //0x777777 + 0x777777
// // }));
// // this.borderGroup.add(contour);
// // const indexAlpha = concaveman(test, 1); // this.mainMesh.localToWorld(a.copy(v0));
// // let vertices = indexAlpha.map(a => { // this.mainMesh.localToWorld(b.copy(v1));
// // return new Vector3(a[0], a[1], a[2]); // this.mainMesh.localToWorld(c.copy(v2));
// // }); // lineAB = new Line3(a, b);
// lineBC = new Line3(b, c);
// lineCA = new Line3(c, a);
// let p1 = this.setPointOfIntersection(lineAB, mathPlane, vi);
// let p2 = this.setPointOfIntersection(lineBC, mathPlane, vi);
// let p3 = this.setPointOfIntersection(lineCA, mathPlane, vi);
// // if (p1.x != 0 && p1.y != 0 && p1.z != 0 && p2.x != 0 && p2.y != 0 && p2.z != 0 && p3.x != 0 && p3.y != 0 && p3.z != 0) {
// // this.p_vertices.push(p1, p2, p3);
// // }
// pointsOfIntersection.setFromPoints(this.p_vertices); // }
// pointsOfIntersection.computeBoundingSphere() // if (this.p_vertices.length > 0) {
// pointsOfIntersection.attributes.position.needsUpdate = true; // // pointsOfIntersection.setFromPoints(p_vertices);
// // pointsOfIntersection.computeBoundingSphere()
// // pointsOfIntersection.attributes.position.needsUpdate = true;
// let contours = this.getContours(this.p_vertices, [], true); // // // convexGeometry.setFromPoints(p_vertices);
// contours.forEach(cntr => { // // convexGeometry = new ConvexGeometry( p_vertices );
// let cntrGeom = new BufferGeometry(); // // convexGeometry.computeBoundingSphere()
// cntrGeom.setFromPoints(cntr); // // convexGeometry.attributes.position.needsUpdate = true;
// let contour = new Line(cntrGeom, new LineBasicMaterial({
// color: Math.random() * 0xffffff //0x777777 + 0x777777 // // let test = this.p_vertices.map(v => {
// })); // // return [v.x, v.z];
// this.borderGroup.add(contour); // // });
// }); // // // const indexHull = hull(test, 20); // returns points of the hull (in clockwise order)
// } // // const indexHull = concaveman(test, 1.5);
// // let vertices = indexHull.map(a => {
// // return new Vector3(a[0], this.p_vertices[0].y, a[1]);
// // });
// // let cntrGeom = new BufferGeometry();
// // cntrGeom.setFromPoints(vertices);
// // let contour = new Line(cntrGeom, new LineBasicMaterial({
// // color: Math.random() * 0xffffff //0x777777 + 0x777777
// // }));
// // this.borderGroup.add(contour);
// // const indexAlpha = concaveman(test, 1);
// // let vertices = indexAlpha.map(a => {
// // return new Vector3(a[0], a[1], a[2]);
// // });
// pointsOfIntersection.setFromPoints(this.p_vertices);
// pointsOfIntersection.computeBoundingSphere()
// pointsOfIntersection.attributes.position.needsUpdate = true;
// let contours = this.getContours(this.p_vertices, [], true);
// contours.forEach(cntr => {
// let cntrGeom = new BufferGeometry();
// cntrGeom.setFromPoints(cntr);
// let contour = new Line(cntrGeom, new LineBasicMaterial({
// color: Math.random() * 0xffffff //0x777777 + 0x777777
// }));
// this.borderGroup.add(contour);
// });
// }
// }); });
// this.frontStencil = new Scene();
// let frontMesh = new Mesh(this.geometry.clone(), material.frontStencilMaterial);
// frontMesh.userData.layerId = this.index;
// this.frontStencil.add(frontMesh);
// this.backStencil = new Scene();
// let backMesh = new Mesh(this.geometry.clone(), material.backStencilMaterial);
// backMesh.userData.layerId = this.index;
// this.backStencil.add(frontMesh);
// this.capsScene = new Scene();
// this.capsScene.add(this.borderMesh);
} }
debugRenderOrder() {
private debugRenderOrder() {
console.log(this.name); console.log(this.name);
} }
@ -462,35 +459,6 @@ class TinLayer extends Layer {
return index; return index;
} }
// animate() {
// let gl = this._map.renderer.getContext();
// if (gl != undefined && this.capsScene != undefined) {
// gl.enable(gl.STENCIL_TEST);
// // this.renderer.state.setStencilFunc( true );
// // gl.stencilFunc( gl.ALWAYS, 1, 0xff );
// // gl.stencilOp( gl.REPLACE, gl.REPLACE, gl.REPLACE );
// gl.stencilFunc(gl.ALWAYS, 1, 0xff);
// gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR);
// this._map.renderer.render(this.backStencil, this._map.camera);
// gl.stencilFunc(gl.ALWAYS, 1, 0xff);
// gl.stencilOp(gl.KEEP, gl.KEEP, gl.DECR);
// this._map.renderer.render(this.frontStencil, this._map.camera);
// gl.stencilFunc(gl.EQUAL, 1, 0xff);
// gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);
// this._map.renderer.render(this.capsScene, this._map.camera);
// // disable stencil test
// gl.disable(gl.STENCIL_TEST);
// }
// }
setWireframeMode(wireframe) { setWireframeMode(wireframe) {
this.materialsArray.forEach(function (mat) { this.materialsArray.forEach(function (mat) {
//if (m.w) return; //if (m.w) return;
@ -508,14 +476,15 @@ class TinLayer extends Layer {
scaleZ(z) { scaleZ(z) {
this.scale = z; this.scale = z;
this.objectGroup.scale.z = z; // this.objectGroup.scale.z = z;
this.mainMesh.scale.z = z;
this.emit('scale-change', z); this.emit('scale-change', z);
} }
async onAdd(map) { async onAdd(map) {
proj4.defs("EPSG:4312", "+proj=longlat +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +no_defs"); proj4.defs("EPSG:4312", "+proj=longlat +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +no_defs");
proj4.defs("EPSG:3034", "+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"); proj4.defs("EPSG:3034", "+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
await this.build(this.getScene()); await this.build(this.getModelNode());
map.update(); map.update();
} }
@ -699,7 +668,7 @@ class TinLayer extends Layer {
} }
async build(app_scene) { async build(modelNode) {
let geometry = this.geometry = new BufferGeometry(); let geometry = this.geometry = new BufferGeometry();
let vertices = await (this.points(this.featuregeom_id)); let vertices = await (this.points(this.featuregeom_id));
@ -813,11 +782,23 @@ class TinLayer extends Layer {
flatShading: true, flatShading: true,
side: DoubleSide, side: DoubleSide,
}, this.uniforms.clipping); }, this.uniforms.clipping);
// }, this.uniforms.clipping);
// this.material = new MeshStandardMaterial({
// color: color,
// metalness: 0.1,
// roughness: 0.75,
// flatShading: true,
// side: DoubleSide,
// clippingPlanes: [ this.xLocalPlane ]
// });
} }
this.materialsArray.push(this.material); this.materialsArray.push(this.material);
let mesh = this.mainMesh = new Mesh(geometry, this.material); let mesh = this.mainMesh = new Mesh(geometry, this.material);
mesh.name = this.name;
mesh.userData.layerId = this.index; mesh.userData.layerId = this.index;
mesh.castShadow = true; mesh.castShadow = true;
mesh.receiveShadow = true; mesh.receiveShadow = true;
@ -825,6 +806,9 @@ class TinLayer extends Layer {
// if (app_scene) { // if (app_scene) {
// app_scene.add(this.objectGroup); // app_scene.add(this.objectGroup);
// } // }
if (modelNode) {
modelNode.add(this.mainMesh);
}
} }
private _addObject(object, queryable) { private _addObject(object, queryable) {
@ -845,13 +829,13 @@ class TinLayer extends Layer {
} }
async points(geomId) { async points(geomId) {
const url = POINTURL + geomId; const url = this.pointUrl + geomId;
const buffer = await this._request(url); const buffer = await this._request(url);
return this._unpackVertices(buffer); return this._unpackVertices(buffer);
} }
async edges(geomId) { async edges(geomId) {
const url = EDGEURL + geomId; const url = this.edgeUrl + geomId;
const buffer = await this._request(url); const buffer = await this._request(url);
return this._unpackEdges(buffer); return this._unpackEdges(buffer);
} }

View File

@ -21,8 +21,7 @@ import * as domUtil from './core/domUtil';
import { PickingTool } from './clip/PickingTool'; import { PickingTool } from './clip/PickingTool';
import { ShowModal } from './components/ShowModal'; import { ShowModal } from './components/ShowModal';
import * as material from './clip/material'; import * as material from './clip/material';
import { Group } from 'three/src/objects/Group'; import { Color } from 'three/src/math/Color';
import { Selection } from './clip/Selection'; import { Selection } from './clip/Selection';
import _ from "lodash"; import _ from "lodash";
@ -65,9 +64,9 @@ class Application {
let parentContainer = document.getElementById("app"); let parentContainer = document.getElementById("app");
this.dialog = new ShowModal("Help", parentContainer, { klass: "fm_about" }); this.dialog = new ShowModal("Help", parentContainer, { klass: "fm_about" });
// this.dialog = new MobileDialog("Help", container, { klass: "fm_about" });
this.aboutIcon = document.querySelector('#menu-about-icon'); this.aboutIcon = document.querySelector('#menu-about-icon');
// this.createScene(); this.menuEmailButton = document.querySelector('#menu-email-button');
// this.addEventListeners(); // this.addEventListeners();
} }
async build() { async build() {
@ -94,6 +93,11 @@ class Application {
} }
debugRenderOrder() {
console.log(this.name);
}
async createScene() { async createScene() {
let dirNode = document.getElementsByTagName("body")[0]; let dirNode = document.getElementsByTagName("body")[0];
if (browser.touch == true && browser.mobile == true) { if (browser.touch == true && browser.mobile == true) {
@ -175,91 +179,106 @@ class Application {
// this.camera.position.set(0, -0.1, 150); // this.camera.position.set(0, -0.1, 150);
// this.camera.lookAt(new Vector3(0, 0, 0)); // this.camera.lookAt(new Vector3(0, 0, 0));
const queryString = window.location.search;
const urlParams = new URLSearchParams(queryString);
let modelid = 20;
let serviceUrl = 'https://geusegdi01.geus.dk/meta3d/rpc/model_meta_all?modelid=';
if (urlParams.has('modelid')) {
modelid = urlParams.get('modelid');
}
if (SERVICE_URL != "") {
serviceUrl = SERVICE_URL;
}
let map = this.map = await Map.build( let map = this.map = await Map.build(
this.scene, this.scene,
this.container, this.container,
'https://geusegdi01.geus.dk/meta3d/rpc/model_meta_all?modelid=20' serviceUrl + modelid
); );
this.mapTitle = document.querySelector('#map-title'); this.mapTitle = document.querySelector('#map-title');
this.mapTitle.innerHTML += map.title; this.mapTitle.innerHTML += map.title;
this.menuEmailButton.href = 'mailto:' + map.contact;
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);
// this.selectionBox.toggle();
let modelNode = new Group();
let profileNode = new Group();
let stencilNode = new Group();
for (const [i, layer] of Object.entries(this.map.layers)) { 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); // modelNode.add(layer.mainMesh);
// this.capsScene.add(layer.borderMesh);
profileNode.add(layer.borderMesh);
// const stencilMaterial = material.stencilMaterial.clone(); // let f_color = parseInt(layer.color, 16);
// let featureMaterial = this.material = new MyMeshStandardMaterial({
// color: f_color,
// metalness: 0.1,
// roughness: 0.75,
// flatShading: true,
// side: DoubleSide,
// }, uniforms.clipping);
// featureMaterial.color = new Color(f_color);
// // featureMaterial.clippingPlanes[0] = layer.xLocalPlane;
let stencilFeatureBack = new Mesh(layer.geometry, material.backStencilMaterial.clone()); // let volume = new Mesh(layer.geometry, featureMaterial);
// // featureMaterial.clippingPlanes[0] = layer.yLocalPlane;
// // featureMaterial.clipIntersection = false;
// volume.name = layer.name + i;
// map.modelNode.add(volume);
// volume.onAfterRender = this.debugRenderOrder;
let backStencilMaterial = material.backStencilMaterial;
let stencilFeatureBack = new Mesh(layer.geometry, backStencilMaterial);
stencilFeatureBack.name = 'stencilFeatureBack_' + i; stencilFeatureBack.name = 'stencilFeatureBack_' + i;
stencilFeatureBack.userData.layerId = layer.index; stencilFeatureBack.userData.layerId = layer.index;
stencilNode.add(stencilFeatureBack); // backStencilMaterial.clippingPlanes[0] = layer.xLocalPlane;
map.stencilNode.add(stencilFeatureBack);
// stencilFeatureBack.onAfterRender = this.debugRenderOrder;
let stencilFeatureFront = new Mesh(layer.geometry, material.frontStencilMaterial.clone());
let frontStencilMaterial = material.frontStencilMaterial;
let stencilFeatureFront = new Mesh(layer.geometry, frontStencilMaterial);
stencilFeatureFront.name = 'stencilFeatureFront_' + i; stencilFeatureFront.name = 'stencilFeatureFront_' + i;
stencilFeatureFront.userData.layerId = layer.index; stencilFeatureFront.userData.layerId = layer.index;
stencilNode.add(stencilFeatureFront); // frontStencilMaterial.clippingPlanes[0] = layer.xLocalPlane;
map.stencilNode.add(stencilFeatureFront);
// stencilFeatureFront.onAfterRender = this.debugRenderOrder;
// this.capsScene.add(layer.borderMesh);
// profileNode.add(layer.borderMesh);
// layer.borderMesh.onAfterRender = this.debugRenderOrder;
let profileMaterial = material.profileMaterial.clone();
let color = parseInt(layer.color, 16);
profileMaterial.color = new Color(color);
// profileMaterial.uniforms = caps;
let borderMesh = new Mesh(layer.box, profileMaterial);
// this.borderMesh.name = 'stencilFeatureBack_' + this.index;
borderMesh.name = 'profilePlane_' + i;
map.profileNode.add(borderMesh);
// borderMesh.onAfterRender = this.debugRenderOrder;
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.borderMesh.visible = visible; 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; stencilFeatureFront.scale.z = z;
stencilFeatureBack.scale.z = z; stencilFeatureBack.scale.z = z;
layer.borderMesh.scale.z = z; borderMesh.scale.z = z;
}); });
} }
} }
// this.scene.add(profileNode);
// for (var i in map.layers) {
// let layer = map.layers[i];
// if (layer instanceof TinLayer && layer.name != "Topography") {
// let stencilFeatureBack = new Mesh(layer.geometry, material.backStencilMaterial);
// stencilFeatureBack.name = 'stencilFeatureBack_' + i;
// stencilFeatureBack.userData.layerId = layer.index;
// stencilNode.add(stencilFeatureBack);
// let stencilFeatureFront = new Mesh(layer.geometry, material.frontStencilMaterial);
// stencilFeatureFront.name = 'stencilFeatureFront_' + i;
// stencilFeatureFront.userData.layerId = layer.index;
// stencilNode.add(stencilFeatureFront);
// layer.on('visibility-change', (args) => {
// let visible = args[0];
// stencilFeatureFront.visible = visible;
// stencilFeatureBack.visible = visible;
// });
// layer.on('scale-change', (args) => {
// let z = args[0];
// stencilFeatureFront.scale.z = z;
// stencilFeatureBack.scale.z = z;
// });
// }
// }
// scene.add(node('selectNode'));
this.scene.add(modelNode);
this.scene.add(stencilNode);
this.scene.add(profileNode);
this.animate(); this.animate();
}, this); }, this);
@ -398,7 +417,7 @@ class Application {
// if (this.showCaps && gl != undefined) { // if (this.showCaps && gl != undefined) {
// // enable stencil test // // enable stencil test
// gl.enable(gl.STENCIL_TEST); // gl.enable(gl.STENCIL_TEST);
// // for (let i in this.map.layers) { // // for (let i in this.map.layers) {
// // let layer = this.map.layers[i]; // // let layer = this.map.layers[i];
@ -421,7 +440,7 @@ class Application {
// this.renderer.render(this.capsScene, this.map.camera); // this.renderer.render(this.capsScene, this.map.camera);
// // disable stencil test // // disable stencil test
// gl.disable(gl.STENCIL_TEST); // gl.disable(gl.STENCIL_TEST);
// // gl.stencilMask(0); // // gl.stencilMask(0);
// // this.renderer.state.setStencilFunc( false ); // // this.renderer.state.setStencilFunc( false );
// } // }

View File

@ -136,14 +136,14 @@ export class BoreholeIdentify {
//}; //};
// create a highlight object (if layer type is Point, slightly bigger than the object) // create a highlight object (if layer type is Point, slightly bigger than the object)
var highlightObject = new THREE.Group(); // var highlightObject = new THREE.Group();
//var clone; //var clone;
//var s = (layer.type == Q3D.LayerType.Point) ? 1.01 : 1; //var s = (layer.type == Q3D.LayerType.Point) ? 1.01 : 1;
var geo = new THREE.Geometry(); var geo = new THREE.Geometry();
var v1 = new THREE.Vector3(f.Punkt0.x, f.Punkt0.y, f.Punkt0.z); var v1 = new Vector3(f.Punkt0.x, f.Punkt0.y, f.Punkt0.z);
var v2 = new THREE.Vector3(f.Punkt1.x, f.Punkt1.y, f.Punkt1.z); var v2 = new Vector3(f.Punkt1.x, f.Punkt1.y, f.Punkt1.z);
var v3 = new THREE.Vector3(f.Punkt2.x, f.Punkt2.y, f.Punkt2.z); var v3 = new Vector3(f.Punkt2.x, f.Punkt2.y, f.Punkt2.z);
geo.vertices.push(v1); geo.vertices.push(v1);
geo.vertices.push(v2); geo.vertices.push(v2);
geo.vertices.push(v3); geo.vertices.push(v3);

View File

@ -155,6 +155,10 @@ module.exports = {
CONSTANT_VALUE: JSON.stringify(process.env.CONSTANT_VALUE), CONSTANT_VALUE: JSON.stringify(process.env.CONSTANT_VALUE),
MATOMO_SITE_ID: JSON.stringify(process.env.MATOMO_SITE_ID), MATOMO_SITE_ID: JSON.stringify(process.env.MATOMO_SITE_ID),
MATOMO_TRACKER_URL: JSON.stringify(process.env.MATOMO_TRACKER_URL), MATOMO_TRACKER_URL: JSON.stringify(process.env.MATOMO_TRACKER_URL),
SERVICE_URL : JSON.stringify(process.env.SERVICE_URL),
POINT_URL : JSON.stringify(process.env.POINT_URL),
EDGE_URL : JSON.stringify(process.env.EDGE_URL),
CUSTOM_VAR: JSON.stringify('value5 goes here'), // no quotes needed, string value CUSTOM_VAR: JSON.stringify('value5 goes here'), // no quotes needed, string value
}), }),
// extractLess, // extractLess,