mirror of
https://github.com/openglobus/openglobus.git
synced 2025-12-08 19:25:27 +00:00
1) Migrate to rollup.
2) Eslint cleanup. 3) Fixed layer zoom visibility.
This commit is contained in:
parent
708ec265df
commit
72cd6bcc63
38
.eslintrc.js
Normal file
38
.eslintrc.js
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
module.exports = {
|
||||||
|
"env": {
|
||||||
|
"browser": true,
|
||||||
|
"es6": true
|
||||||
|
},
|
||||||
|
"extends": "standard",
|
||||||
|
"globals": {
|
||||||
|
"Atomics": "readonly",
|
||||||
|
"SharedArrayBuffer": "readonly"
|
||||||
|
},
|
||||||
|
"parserOptions": {
|
||||||
|
"ecmaVersion": 2018,
|
||||||
|
"sourceType": "module"
|
||||||
|
},
|
||||||
|
"rules": {
|
||||||
|
"semi": [2, "always"],
|
||||||
|
"indent": "off",
|
||||||
|
"padded-blocks": "off",
|
||||||
|
"no-trailing-spaces": "off",
|
||||||
|
"one-var": "off",
|
||||||
|
"camelcase": "off",
|
||||||
|
"prefer-const": "off",
|
||||||
|
"quotes": "off",
|
||||||
|
"space-before-function-paren": "off",
|
||||||
|
"eol-last": "off",
|
||||||
|
"standard/no-callback-literal": "off",
|
||||||
|
"eqeqeq": "off",
|
||||||
|
"no-return-assign": "off",
|
||||||
|
"no-undef": "off",
|
||||||
|
"no-multi-spaces": "off",
|
||||||
|
"dot-notation": "off",
|
||||||
|
"no-useless-constructor": "off",
|
||||||
|
"no-void": "off",
|
||||||
|
"spaced-comment": "off",
|
||||||
|
"quote-props": "off",
|
||||||
|
"no-useless-escape": "off"
|
||||||
|
}
|
||||||
|
};
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
@ -5,6 +5,8 @@ Thumbs.db
|
|||||||
Release
|
Release
|
||||||
|
|
||||||
Debug
|
Debug
|
||||||
|
|
||||||
|
eslint
|
||||||
|
|
||||||
node_modules
|
node_modules
|
||||||
.eslintrc
|
.eslintrc
|
||||||
|
|||||||
@ -1,25 +0,0 @@
|
|||||||
{
|
|
||||||
"env": {
|
|
||||||
"browser": true,
|
|
||||||
"es6": true
|
|
||||||
},
|
|
||||||
"extends": "eslint:recommended",
|
|
||||||
"rules": {
|
|
||||||
"indent": [
|
|
||||||
"error",
|
|
||||||
4
|
|
||||||
],
|
|
||||||
"linebreak-style": [
|
|
||||||
"error",
|
|
||||||
"windows"
|
|
||||||
],
|
|
||||||
"quotes": [
|
|
||||||
"error",
|
|
||||||
"double"
|
|
||||||
],
|
|
||||||
"semi": [
|
|
||||||
"error",
|
|
||||||
"always"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
10223
eslint/errors.html
10223
eslint/errors.html
File diff suppressed because it is too large
Load Diff
@ -1 +0,0 @@
|
|||||||
eslint -c .eslintrc.json -o errors.html -f html ../src/og/*.*
|
|
||||||
409
package-lock.json
generated
409
package-lock.json
generated
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "og",
|
"name": "og",
|
||||||
"version": "0.1.1",
|
"version": "0.1.2",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -1415,6 +1415,16 @@
|
|||||||
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
|
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"array.prototype.flat": {
|
||||||
|
"version": "1.2.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz",
|
||||||
|
"integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"define-properties": "^1.1.3",
|
||||||
|
"es-abstract": "^1.17.0-next.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"asn1": {
|
"asn1": {
|
||||||
"version": "0.2.4",
|
"version": "0.2.4",
|
||||||
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
|
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
|
||||||
@ -2722,6 +2732,12 @@
|
|||||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"contains-path": {
|
||||||
|
"version": "0.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
|
||||||
|
"integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"content-disposition": {
|
"content-disposition": {
|
||||||
"version": "0.5.3",
|
"version": "0.5.3",
|
||||||
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
|
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
|
||||||
@ -3245,21 +3261,6 @@
|
|||||||
"esutils": "^2.0.2"
|
"esutils": "^2.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"glob-parent": {
|
|
||||||
"version": "5.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
|
|
||||||
"integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"is-glob": "^4.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ignore": {
|
|
||||||
"version": "4.0.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
|
|
||||||
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"semver": {
|
"semver": {
|
||||||
"version": "6.3.0",
|
"version": "6.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||||
@ -3274,12 +3275,289 @@
|
|||||||
"integrity": "sha1-oJCtwTspNeP0OzzQSKknAWVOWtU=",
|
"integrity": "sha1-oJCtwTspNeP0OzzQSKknAWVOWtU=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"eslint-config-standard": {
|
||||||
|
"version": "14.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-14.1.0.tgz",
|
||||||
|
"integrity": "sha512-EF6XkrrGVbvv8hL/kYa/m6vnvmUT+K82pJJc4JJVMM6+Qgqh0pnwprSxdduDLB9p/7bIxD+YV5O0wfb8lmcPbA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"eslint-import-resolver-node": {
|
||||||
|
"version": "0.3.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz",
|
||||||
|
"integrity": "sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"debug": "^2.6.9",
|
||||||
|
"resolve": "^1.13.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"debug": {
|
||||||
|
"version": "2.6.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||||
|
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ms": "2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"eslint-module-utils": {
|
||||||
|
"version": "2.5.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz",
|
||||||
|
"integrity": "sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"debug": "^2.6.9",
|
||||||
|
"pkg-dir": "^2.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"debug": {
|
||||||
|
"version": "2.6.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||||
|
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ms": "2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"eslint-plugin-es": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-6/Jb/J/ZvSebydwbBJO1R9E5ky7YeElfK56Veh7e4QGFHCXoIXGH9HhVz+ibJLM3XJ1XjP+T7rKBLUa/Y7eIng==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"eslint-utils": "^2.0.0",
|
||||||
|
"regexpp": "^3.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"eslint-utils": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"eslint-visitor-keys": "^1.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"regexpp": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"eslint-plugin-eslint-plugin": {
|
"eslint-plugin-eslint-plugin": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-plugin-eslint-plugin/-/eslint-plugin-eslint-plugin-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-plugin-eslint-plugin/-/eslint-plugin-eslint-plugin-2.1.0.tgz",
|
||||||
"integrity": "sha512-kT3A/ZJftt28gbl/Cv04qezb/NQ1dwYIbi8lyf806XMxkus7DvOVCLIfTXMrorp322Pnoez7+zabXH29tADIDg==",
|
"integrity": "sha512-kT3A/ZJftt28gbl/Cv04qezb/NQ1dwYIbi8lyf806XMxkus7DvOVCLIfTXMrorp322Pnoez7+zabXH29tADIDg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"eslint-plugin-import": {
|
||||||
|
"version": "2.20.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz",
|
||||||
|
"integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"array-includes": "^3.0.3",
|
||||||
|
"array.prototype.flat": "^1.2.1",
|
||||||
|
"contains-path": "^0.1.0",
|
||||||
|
"debug": "^2.6.9",
|
||||||
|
"doctrine": "1.5.0",
|
||||||
|
"eslint-import-resolver-node": "^0.3.2",
|
||||||
|
"eslint-module-utils": "^2.4.1",
|
||||||
|
"has": "^1.0.3",
|
||||||
|
"minimatch": "^3.0.4",
|
||||||
|
"object.values": "^1.1.0",
|
||||||
|
"read-pkg-up": "^2.0.0",
|
||||||
|
"resolve": "^1.12.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"debug": {
|
||||||
|
"version": "2.6.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||||
|
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ms": "2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"doctrine": {
|
||||||
|
"version": "1.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
|
||||||
|
"integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"esutils": "^2.0.2",
|
||||||
|
"isarray": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"find-up": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
|
||||||
|
"integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"locate-path": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"load-json-file": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"graceful-fs": "^4.1.2",
|
||||||
|
"parse-json": "^2.2.0",
|
||||||
|
"pify": "^2.0.0",
|
||||||
|
"strip-bom": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"locate-path": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"p-locate": "^2.0.0",
|
||||||
|
"path-exists": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"p-limit": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
|
||||||
|
"integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"p-try": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"p-locate": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"p-limit": "^1.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"p-try": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"parse-json": {
|
||||||
|
"version": "2.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
|
||||||
|
"integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"error-ex": "^1.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"path-type": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"pify": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pify": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
|
||||||
|
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"read-pkg": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"load-json-file": "^2.0.0",
|
||||||
|
"normalize-package-data": "^2.3.2",
|
||||||
|
"path-type": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"read-pkg-up": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"find-up": "^2.0.0",
|
||||||
|
"read-pkg": "^2.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"eslint-plugin-node": {
|
||||||
|
"version": "11.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.0.0.tgz",
|
||||||
|
"integrity": "sha512-chUs/NVID+sknFiJzxoN9lM7uKSOEta8GC8365hw1nDfwIPIjjpRSwwPvQanWv8dt/pDe9EV4anmVSwdiSndNg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"eslint-plugin-es": "^3.0.0",
|
||||||
|
"eslint-utils": "^2.0.0",
|
||||||
|
"ignore": "^5.1.1",
|
||||||
|
"minimatch": "^3.0.4",
|
||||||
|
"resolve": "^1.10.1",
|
||||||
|
"semver": "^6.1.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"eslint-utils": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"eslint-visitor-keys": "^1.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ignore": {
|
||||||
|
"version": "5.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz",
|
||||||
|
"integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"semver": {
|
||||||
|
"version": "6.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||||
|
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"eslint-plugin-promise": {
|
||||||
|
"version": "4.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz",
|
||||||
|
"integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"eslint-plugin-react": {
|
"eslint-plugin-react": {
|
||||||
"version": "7.17.0",
|
"version": "7.17.0",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.17.0.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.17.0.tgz",
|
||||||
@ -3298,6 +3576,12 @@
|
|||||||
"resolve": "^1.13.1"
|
"resolve": "^1.13.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"eslint-plugin-standard": {
|
||||||
|
"version": "4.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz",
|
||||||
|
"integrity": "sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"eslint-scope": {
|
"eslint-scope": {
|
||||||
"version": "5.0.0",
|
"version": "5.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
|
||||||
@ -3341,9 +3625,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"esquery": {
|
"esquery": {
|
||||||
"version": "1.0.1",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz",
|
||||||
"integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
|
"integrity": "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"estraverse": "^4.0.0"
|
"estraverse": "^4.0.0"
|
||||||
@ -3625,9 +3909,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"figures": {
|
"figures": {
|
||||||
"version": "3.1.0",
|
"version": "3.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
|
||||||
"integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==",
|
"integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"escape-string-regexp": "^1.0.5"
|
"escape-string-regexp": "^1.0.5"
|
||||||
@ -4388,6 +4672,15 @@
|
|||||||
"path-is-absolute": "^1.0.0"
|
"path-is-absolute": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"glob-parent": {
|
||||||
|
"version": "5.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
|
||||||
|
"integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"is-glob": "^4.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"globals": {
|
"globals": {
|
||||||
"version": "12.3.0",
|
"version": "12.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz",
|
||||||
@ -4621,6 +4914,12 @@
|
|||||||
"safer-buffer": ">= 2.1.2 < 3"
|
"safer-buffer": ">= 2.1.2 < 3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"ignore": {
|
||||||
|
"version": "4.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
|
||||||
|
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"import-fresh": {
|
"import-fresh": {
|
||||||
"version": "3.2.1",
|
"version": "3.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
|
||||||
@ -4724,9 +5023,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"inquirer": {
|
"inquirer": {
|
||||||
"version": "7.0.1",
|
"version": "7.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz",
|
||||||
"integrity": "sha512-V1FFQ3TIO15det8PijPLFR9M9baSlnRs9nL7zWu1MNVA2T9YVl9ZbrHJhYs7e9X8jeMZ3lr2JH/rdHFgNCBdYw==",
|
"integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"ansi-escapes": "^4.2.1",
|
"ansi-escapes": "^4.2.1",
|
||||||
@ -7158,6 +7457,60 @@
|
|||||||
"node-modules-regexp": "^1.0.0"
|
"node-modules-regexp": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"pkg-dir": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"find-up": "^2.1.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"find-up": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
|
||||||
|
"integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"locate-path": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"locate-path": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"p-locate": "^2.0.0",
|
||||||
|
"path-exists": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"p-limit": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
|
||||||
|
"integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"p-try": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"p-locate": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"p-limit": "^1.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"p-try": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"pn": {
|
"pn": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
|
||||||
@ -8794,9 +9147,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"v8-compile-cache": {
|
"v8-compile-cache": {
|
||||||
"version": "2.0.3",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
|
||||||
"integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==",
|
"integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"validate-npm-package-license": {
|
"validate-npm-package-license": {
|
||||||
|
|||||||
10
package.json
10
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "og",
|
"name": "og",
|
||||||
"version": "0.1.1",
|
"version": "0.1.2",
|
||||||
"description": "[OpenGlobus](http://www.openglobus.org/) is a javascript library designed to display interactive 3d maps and planets with map tiles, imagery and vector data, markers and 3d objects. It uses the WebGL technology, open source and completely free.",
|
"description": "[OpenGlobus](http://www.openglobus.org/) is a javascript library designed to display interactive 3d maps and planets with map tiles, imagery and vector data, markers and 3d objects. It uses the WebGL technology, open source and completely free.",
|
||||||
"directories": {
|
"directories": {
|
||||||
"example": "./sandbox"
|
"example": "./sandbox"
|
||||||
@ -11,7 +11,8 @@
|
|||||||
"build": "node_modules/.bin/rollup -c",
|
"build": "node_modules/.bin/rollup -c",
|
||||||
"webgl": "node_modules/.bin/rollup -c --environment entry:webgl",
|
"webgl": "node_modules/.bin/rollup -c --environment entry:webgl",
|
||||||
"core": "node_modules/.bin/rollup -c --environment entry:core",
|
"core": "node_modules/.bin/rollup -c --environment entry:core",
|
||||||
"test": "jest --coverage"
|
"test": "jest --coverage",
|
||||||
|
"lint": "node_modules/.bin/eslint src/og"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -32,7 +33,12 @@
|
|||||||
"enhanced-resolve": "^4.1.1",
|
"enhanced-resolve": "^4.1.1",
|
||||||
"eslint": "^6.8.0",
|
"eslint": "^6.8.0",
|
||||||
"eslint-config-defaults": "^9.0.0",
|
"eslint-config-defaults": "^9.0.0",
|
||||||
|
"eslint-config-standard": "^14.1.0",
|
||||||
|
"eslint-plugin-import": "^2.20.1",
|
||||||
|
"eslint-plugin-node": "^11.0.0",
|
||||||
|
"eslint-plugin-promise": "^4.2.1",
|
||||||
"eslint-plugin-react": "^7.3.0",
|
"eslint-plugin-react": "^7.3.0",
|
||||||
|
"eslint-plugin-standard": "^4.0.1",
|
||||||
"jaguarjs-jsdoc": "^1.1.0",
|
"jaguarjs-jsdoc": "^1.1.0",
|
||||||
"jest": "^24.9.0",
|
"jest": "^24.9.0",
|
||||||
"jsdoc": "^3.6.3",
|
"jsdoc": "^3.6.3",
|
||||||
|
|||||||
@ -1,15 +1,15 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { Globe } from '../../src/og/Globe.js';
|
import { Globe } from '../../src/og/Globe.js';
|
||||||
import { GlobusTerrain } from '../../src/og/terrain/GlobusTerrain.js';
|
// import { GlobusTerrain } from '../../src/og/terrain/GlobusTerrain.js';
|
||||||
import { MapboxTerrain } from '../../src/og/terrain/MapboxTerrain.js';
|
import { MapboxTerrain } from '../../src/og/terrain/MapboxTerrain.js';
|
||||||
import { XYZ } from '../../src/og/layer/XYZ.js';
|
import { XYZ } from '../../src/og/layer/XYZ.js';
|
||||||
import { CanvasTiles } from '../../src/og/layer/CanvasTiles.js';
|
import { CanvasTiles } from '../../src/og/layer/CanvasTiles.js';
|
||||||
import { Vector } from '../../src/og/layer/Vector.js';
|
// import { Vector } from '../../src/og/layer/Vector.js';
|
||||||
import { Entity } from '../../src/og/entity/Entity.js';
|
// import { Entity } from '../../src/og/entity/Entity.js';
|
||||||
import { DebugInfo } from '../../src/og/control/DebugInfo.js';
|
import { DebugInfo } from '../../src/og/control/DebugInfo.js';
|
||||||
import { ToggleWireframe } from '../../src/og/control/ToggleWireframe.js';
|
import { ToggleWireframe } from '../../src/og/control/ToggleWireframe.js';
|
||||||
import * as math from '../../src/og/math.js';
|
// import * as math from '../../src/og/math.js';
|
||||||
import { LayerSwitcher } from '../../src/og/control/LayerSwitcher.js';
|
import { LayerSwitcher } from '../../src/og/control/LayerSwitcher.js';
|
||||||
|
|
||||||
let cnv = document.createElement("canvas");
|
let cnv = document.createElement("canvas");
|
||||||
@ -21,10 +21,10 @@ const tg = new CanvasTiles("Tile grid", {
|
|||||||
visibility: true,
|
visibility: true,
|
||||||
isBaseLayer: true,
|
isBaseLayer: true,
|
||||||
drawTile: function (material, applyCanvas) {
|
drawTile: function (material, applyCanvas) {
|
||||||
//Clear canvas
|
// Clear canvas
|
||||||
ctx.clearRect(0, 0, cnv.width, cnv.height);
|
ctx.clearRect(0, 0, cnv.width, cnv.height);
|
||||||
|
|
||||||
//Draw border
|
// Draw border
|
||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
ctx.rect(0, 0, cnv.width, cnv.height);
|
ctx.rect(0, 0, cnv.width, cnv.height);
|
||||||
ctx.lineWidth = 2;
|
ctx.lineWidth = 2;
|
||||||
@ -33,7 +33,7 @@ const tg = new CanvasTiles("Tile grid", {
|
|||||||
|
|
||||||
let size;
|
let size;
|
||||||
|
|
||||||
//Draw text
|
// Draw text
|
||||||
if (material.segment.tileZoom > 17) {
|
if (material.segment.tileZoom > 17) {
|
||||||
size = "18";
|
size = "18";
|
||||||
} else if (material.segment.tileZoom > 14) {
|
} else if (material.segment.tileZoom > 14) {
|
||||||
@ -46,31 +46,30 @@ const tg = new CanvasTiles("Tile grid", {
|
|||||||
ctx.textAlign = 'center';
|
ctx.textAlign = 'center';
|
||||||
ctx.fillText(material.segment.tileX + "," + material.segment.tileY + "," + material.segment.tileZoom, cnv.width / 2, cnv.height / 2);
|
ctx.fillText(material.segment.tileX + "," + material.segment.tileY + "," + material.segment.tileZoom, cnv.width / 2, cnv.height / 2);
|
||||||
|
|
||||||
//Draw canvas tile
|
// Draw canvas tile
|
||||||
applyCanvas(cnv);
|
applyCanvas(cnv);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let osm = new XYZ("OSM", {
|
let osm = new XYZ("OSM", {
|
||||||
'specular': [0.0003, 0.00012, 0.00001],
|
specular: [0.0003, 0.00012, 0.00001],
|
||||||
'shininess': 20,
|
shininess: 20,
|
||||||
'diffuse': [0.89, 0.9, 0.83],
|
diffuse: [0.89, 0.9, 0.83],
|
||||||
'isBaseLayer': true,
|
isBaseLayer: true,
|
||||||
'url': "//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
|
url: "//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
|
||||||
'visibility': true,
|
visibility: true,
|
||||||
'attribution': 'Data @ OpenStreetMap contributors, ODbL'
|
attribution: 'Data @ OpenStreetMap contributors, ODbL'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
window.globe = new Globe({
|
window.globe = new Globe({
|
||||||
'name': "Earth",
|
name: "Earth",
|
||||||
'target': "earth",
|
target: "earth",
|
||||||
'terrain': new MapboxTerrain(),
|
terrain: new MapboxTerrain(),
|
||||||
'layers': [osm, tg]
|
layers: [osm, tg]
|
||||||
});
|
});
|
||||||
|
|
||||||
globe.planet.addControl(new DebugInfo());
|
window.globe.planet.addControl(new DebugInfo());
|
||||||
globe.planet.addControl(new ToggleWireframe({
|
window.globe.planet.addControl(new ToggleWireframe({
|
||||||
isActive: false
|
isActive: false
|
||||||
}));
|
}));
|
||||||
globe.planet.addControl(new LayerSwitcher());
|
window.globe.planet.addControl(new LayerSwitcher());
|
||||||
@ -59,7 +59,7 @@ class Events {
|
|||||||
*/
|
*/
|
||||||
registerNames(eventNames) {
|
registerNames(eventNames) {
|
||||||
for (var i = 0; i < eventNames.length; i++) {
|
for (var i = 0; i < eventNames.length; i++) {
|
||||||
this[eventNames[i]] = { "active": true, "handlers": [] };
|
this[eventNames[i]] = { active: true, handlers: [] };
|
||||||
this._eventNames.push(eventNames[i]);
|
this._eventNames.push(eventNames[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -79,7 +79,7 @@ class Events {
|
|||||||
|
|
||||||
var ogid = stamp(obj);
|
var ogid = stamp(obj);
|
||||||
|
|
||||||
var st = this._getStamp(name, this.__id, ogid);//name + "_" + this.__id + "_" + ogid;
|
var st = this._getStamp(name, this.__id, ogid);
|
||||||
|
|
||||||
if (!this._stampCache[st]) {
|
if (!this._stampCache[st]) {
|
||||||
this._stampCache[st] = ogid;
|
this._stampCache[st] = ogid;
|
||||||
@ -105,7 +105,6 @@ class Events {
|
|||||||
binaryInsert(this[name].handlers, c, (a, b) => {
|
binaryInsert(this[name].handlers, c, (a, b) => {
|
||||||
return b._openglobus_priority - a._openglobus_priority;
|
return b._openglobus_priority - a._openglobus_priority;
|
||||||
});
|
});
|
||||||
//this[name].handlers.unshift(c);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -118,7 +117,7 @@ class Events {
|
|||||||
*/
|
*/
|
||||||
off(name, callback) {
|
off(name, callback) {
|
||||||
if (callback) {
|
if (callback) {
|
||||||
var st = this._getStamp(name, this.__id, callback._openglobus_id);//name + "_" + this.__id + "_" + callback._openglobus_id;
|
var st = this._getStamp(name, this.__id, callback._openglobus_id);
|
||||||
if (callback._openglobus_id && this._stampCache[st]) {
|
if (callback._openglobus_id && this._stampCache[st]) {
|
||||||
var h = this[name].handlers;
|
var h = this[name].handlers;
|
||||||
var i = h.length;
|
var i = h.length;
|
||||||
|
|||||||
@ -182,7 +182,7 @@ Extent.prototype.getWidth = function () {
|
|||||||
* @return {number} Extent height.
|
* @return {number} Extent height.
|
||||||
*/
|
*/
|
||||||
Extent.prototype.getHeight = function () {
|
Extent.prototype.getHeight = function () {
|
||||||
return this.northEast.lat - this.southWest.lat
|
return this.northEast.lat - this.southWest.lat;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -23,9 +23,11 @@ class Frustum {
|
|||||||
* @type {Array.<Array.<number>>}
|
* @type {Array.<Array.<number>>}
|
||||||
*/
|
*/
|
||||||
this._f = new Array(6);
|
this._f = new Array(6);
|
||||||
for (var i = 0; i < 6; i++)
|
for (var i = 0; i < 6; i++) {
|
||||||
this._f[i] = new Array(4);
|
this._f[i] = new Array(4);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Normalize frustum plane.
|
* Normalize frustum plane.
|
||||||
* @static
|
* @static
|
||||||
@ -125,8 +127,9 @@ class Frustum {
|
|||||||
var d;
|
var d;
|
||||||
for (var p = 0; p < 6; p++) {
|
for (var p = 0; p < 6; p++) {
|
||||||
d = point.dotArr(this._f[p]) + this._f[p][3];
|
d = point.dotArr(this._f[p]) + this._f[p][3];
|
||||||
if (d <= 0)
|
if (d <= 0) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -206,17 +209,18 @@ class Frustum {
|
|||||||
|
|
||||||
for (var k = 0; k < 8 && (cin === 0 || cout === 0); k++) {
|
for (var k = 0; k < 8 && (cin === 0 || cout === 0); k++) {
|
||||||
var d = box.vertices[k].dotArr(this._f[i]) + this._f[i][3];
|
var d = box.vertices[k].dotArr(this._f[i]) + this._f[i][3];
|
||||||
if (d < 0)
|
if (d < 0) {
|
||||||
cout++;
|
cout++;
|
||||||
else
|
} else {
|
||||||
cin++;
|
cin++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cin === 0)
|
if (cin === 0) {
|
||||||
return false;
|
return false;
|
||||||
else if (cout > 0)
|
} else if (cout > 0) {
|
||||||
result = true;
|
result = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@ -61,7 +61,7 @@ const PLANET_NAME_PREFIX = "globus_planet_";
|
|||||||
class Globe {
|
class Globe {
|
||||||
constructor(options) {
|
constructor(options) {
|
||||||
|
|
||||||
//Canvas creation.
|
// Canvas creation
|
||||||
var _canvasId = CANVAS_ID_PREFIX + Globe._staticCounter++;
|
var _canvasId = CANVAS_ID_PREFIX + Globe._staticCounter++;
|
||||||
|
|
||||||
this._canvas = document.createElement("canvas");
|
this._canvas = document.createElement("canvas");
|
||||||
@ -92,14 +92,14 @@ class Globe {
|
|||||||
*/
|
*/
|
||||||
this.renderer = new Renderer(
|
this.renderer = new Renderer(
|
||||||
new Handler(_canvasId, {
|
new Handler(_canvasId, {
|
||||||
'context': {
|
context: {
|
||||||
'alpha': false,
|
alpha: false,
|
||||||
'antialias': false,
|
antialias: false,
|
||||||
'powerPreference': "high-performance"
|
powerPreference: "high-performance"
|
||||||
}
|
}
|
||||||
}), {
|
}), {
|
||||||
'autoActivate': false
|
autoActivate: false
|
||||||
});
|
});
|
||||||
this.renderer.initialize();
|
this.renderer.initialize();
|
||||||
this.renderer.div = this.div;
|
this.renderer.div = this.div;
|
||||||
this.renderer.div.attributions = document.createElement("div");
|
this.renderer.div.attributions = document.createElement("div");
|
||||||
@ -110,7 +110,7 @@ class Globe {
|
|||||||
this.div.appendChild(this.renderer.div.attributions);
|
this.div.appendChild(this.renderer.div.attributions);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Skybox
|
// Skybox
|
||||||
if (options.skybox) {
|
if (options.skybox) {
|
||||||
this.renderer.addNode(options.skybox);
|
this.renderer.addNode(options.skybox);
|
||||||
}
|
}
|
||||||
@ -129,13 +129,13 @@ class Globe {
|
|||||||
* @type {og.scene.Planet|og.scene.PlanetAtmosphere}
|
* @type {og.scene.Planet|og.scene.PlanetAtmosphere}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//TODO:
|
// TODO:
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
this.planet = new Planet(this._planetName, options.ellipsoid ? options.ellipsoid : wgs84);
|
this.planet = new Planet(this._planetName, options.ellipsoid ? options.ellipsoid : wgs84);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Attach terrain provider
|
// Attach terrain provider
|
||||||
if (options.terrain) {
|
if (options.terrain) {
|
||||||
this.planet.setTerrain(options.terrain);
|
this.planet.setTerrain(options.terrain);
|
||||||
} else {
|
} else {
|
||||||
@ -144,9 +144,7 @@ class Globe {
|
|||||||
|
|
||||||
this.renderer.addNode(this.planet);
|
this.renderer.addNode(this.planet);
|
||||||
|
|
||||||
this.sun;
|
// Add controls
|
||||||
|
|
||||||
//Add controls
|
|
||||||
if (options.controls) {
|
if (options.controls) {
|
||||||
this.planet.addControls(options.controls);
|
this.planet.addControls(options.controls);
|
||||||
} else {
|
} else {
|
||||||
@ -181,7 +179,7 @@ class Globe {
|
|||||||
this.planet.addLayers(options.layers);
|
this.planet.addLayers(options.layers);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: view center, altitude, extent
|
// TODO: view center, altitude, extent
|
||||||
if (options.viewExtent) {
|
if (options.viewExtent) {
|
||||||
this.planet.viewToExtent(options.viewExtent);
|
this.planet.viewToExtent(options.viewExtent);
|
||||||
}
|
}
|
||||||
@ -190,7 +188,7 @@ class Globe {
|
|||||||
this._fadeHandler = null;
|
this._fadeHandler = null;
|
||||||
this._stopHandler = null;
|
this._stopHandler = null;
|
||||||
|
|
||||||
//Run!
|
// Run!
|
||||||
if (options.autoActivate || isEmpty(options.autoActivate)) {
|
if (options.autoActivate || isEmpty(options.autoActivate)) {
|
||||||
this.renderer.start();
|
this.renderer.start();
|
||||||
this.fadeIn();
|
this.fadeIn();
|
||||||
|
|||||||
@ -187,7 +187,7 @@ class ImageCanvas {
|
|||||||
that.resize(img.width, img.height);
|
that.resize(img.width, img.height);
|
||||||
that._context.drawImage(img, 0, 0, img.width, img.height);
|
that._context.drawImage(img, 0, 0, img.width, img.height);
|
||||||
callback && callback(img);
|
callback && callback(img);
|
||||||
}
|
};
|
||||||
img.src = url;
|
img.src = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,9 +199,9 @@ class ImageCanvas {
|
|||||||
var img = this.getImage();
|
var img = this.getImage();
|
||||||
var dataUrl = img.src;
|
var dataUrl = img.src;
|
||||||
var windowContent = '<!DOCTYPE html>';
|
var windowContent = '<!DOCTYPE html>';
|
||||||
windowContent += '<html>'
|
windowContent += '<html>';
|
||||||
windowContent += '<head><title>Print</title></head>';
|
windowContent += '<head><title>Print</title></head>';
|
||||||
windowContent += '<body>'
|
windowContent += '<body>';
|
||||||
windowContent += '<img src="' + dataUrl + '">';
|
windowContent += '<img src="' + dataUrl + '">';
|
||||||
windowContent += '</body>';
|
windowContent += '</body>';
|
||||||
windowContent += '</html>';
|
windowContent += '</html>';
|
||||||
@ -212,7 +212,6 @@ class ImageCanvas {
|
|||||||
printWin.focus();
|
printWin.focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
destroy() {
|
destroy() {
|
||||||
this._canvas.width = 1;
|
this._canvas.width = 1;
|
||||||
this._canvas.height = 1;
|
this._canvas.height = 1;
|
||||||
|
|||||||
@ -6,21 +6,12 @@
|
|||||||
|
|
||||||
import * as mercator from './mercator.js';
|
import * as mercator from './mercator.js';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const HALF_PI = Math.PI * 0.5;
|
const HALF_PI = Math.PI * 0.5;
|
||||||
|
|
||||||
const PI_BY_180 = Math.PI / 180.0;
|
|
||||||
|
|
||||||
const INV_PI_BY_180 = 180.0 / Math.PI;
|
const INV_PI_BY_180 = 180.0 / Math.PI;
|
||||||
|
|
||||||
const INV_PI_BY_360 = INV_PI_BY_180 * 2.0;
|
const INV_PI_BY_360 = INV_PI_BY_180 * 2.0;
|
||||||
|
|
||||||
const PI_BY_360 = Math.PI / 360.0;
|
const PI_BY_360 = Math.PI / 360.0;
|
||||||
|
|
||||||
const INV_PI_BY_180_HALF_PI = INV_PI_BY_180 * HALF_PI;
|
const INV_PI_BY_180_HALF_PI = INV_PI_BY_180 * HALF_PI;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a geographical point with a certain latitude, longitude and height.
|
* Represents a geographical point with a certain latitude, longitude and height.
|
||||||
* @class
|
* @class
|
||||||
@ -167,7 +158,6 @@ LonLat.prototype.forwardMercatorEPS01 = function () {
|
|||||||
Math.log(Math.tan((90.0 + lat) * PI_BY_360)) * mercator.POLE_BY_PI);
|
Math.log(Math.tan((90.0 + lat) * PI_BY_360)) * mercator.POLE_BY_PI);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts from mercator coordinates.
|
* Converts from mercator coordinates.
|
||||||
* @public
|
* @public
|
||||||
|
|||||||
@ -9,7 +9,7 @@ class QueueArray {
|
|||||||
this.length = 0;
|
this.length = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
reset(){
|
reset() {
|
||||||
this._popIndex = parseInt(this._size * 0.5);
|
this._popIndex = parseInt(this._size * 0.5);
|
||||||
this._shiftIndex = this._popIndex;
|
this._shiftIndex = this._popIndex;
|
||||||
this.length = 0;
|
this.length = 0;
|
||||||
@ -31,7 +31,7 @@ class QueueArray {
|
|||||||
pop() {
|
pop() {
|
||||||
if (this.length) {
|
if (this.length) {
|
||||||
this.length--;
|
this.length--;
|
||||||
var res = this._array[--this._popIndex]
|
var res = this._array[--this._popIndex];
|
||||||
this._array[this._popIndex] = null;
|
this._array[this._popIndex] = null;
|
||||||
if (!this._array[this._popIndex - 1]) {
|
if (!this._array[this._popIndex - 1]) {
|
||||||
this._popIndex = parseInt(this._size * 0.5);
|
this._popIndex = parseInt(this._size * 0.5);
|
||||||
|
|||||||
@ -90,8 +90,8 @@ const defaultParams = {
|
|||||||
|
|
||||||
function createXMLHttp() {
|
function createXMLHttp() {
|
||||||
var xhr = null;
|
var xhr = null;
|
||||||
if (typeof XMLHttpRequest !== undefined) {
|
if (typeof XMLHttpRequest != "undefined") {
|
||||||
xhr = new XMLHttpRequest;
|
xhr = new XMLHttpRequest();
|
||||||
return xhr;
|
return xhr;
|
||||||
} else if (window.ActiveXObject) {
|
} else if (window.ActiveXObject) {
|
||||||
var ieXMLHttpVersions = ['MSXML2.XMLHttp.5.0', 'MSXML2.XMLHttp.4.0', 'MSXML2.XMLHttp.3.0', 'MSXML2.XMLHttp', 'Microsoft.XMLHttp'];
|
var ieXMLHttpVersions = ['MSXML2.XMLHttp.5.0', 'MSXML2.XMLHttp.4.0', 'MSXML2.XMLHttp.3.0', 'MSXML2.XMLHttp', 'Microsoft.XMLHttp'];
|
||||||
@ -100,7 +100,7 @@ function createXMLHttp() {
|
|||||||
xhr = new ActiveXObject(ieXMLHttpVersions[i]);
|
xhr = new ActiveXObject(ieXMLHttpVersions[i]);
|
||||||
return xhr;
|
return xhr;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log('error: og.ajax.createXMLHttp creation filed.');
|
throw new Error('og.ajax.createXMLHttp creation failed.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -166,21 +166,23 @@ ajax.request = function (url, params) {
|
|||||||
xhr.open(p.type, url, p.async);
|
xhr.open(p.type, url, p.async);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p.async)
|
if (p.async) {
|
||||||
xhr.responseType = p.responseType;
|
xhr.responseType = p.responseType;
|
||||||
|
}
|
||||||
|
|
||||||
xhr.overrideMimeType("text/plain");
|
xhr.overrideMimeType("text/plain");
|
||||||
|
|
||||||
xhr.onreadystatechange = function () {
|
xhr.onreadystatechange = function () {
|
||||||
if (xhr.readyState === ajax.ReadyState.Complete) {
|
if (xhr.readyState === ajax.ReadyState.Complete) {
|
||||||
if (xhr.status === ajax.Status.OK) {
|
if (xhr.status === ajax.Status.OK) {
|
||||||
if (params.success)
|
if (params.success) {
|
||||||
/**
|
/**
|
||||||
* Success callback.
|
* Success callback.
|
||||||
* @callback ajax.Xhr~successCallback
|
* @callback ajax.Xhr~successCallback
|
||||||
* @param {Object} Response data
|
* @param {Object} Response data
|
||||||
*/
|
*/
|
||||||
params.success.call(params.sender || customXhr, xhr.response);
|
params.success.call(params.sender || customXhr, xhr.response);
|
||||||
|
}
|
||||||
} else if (xhr.aborted) {
|
} else if (xhr.aborted) {
|
||||||
/**
|
/**
|
||||||
* Abort callback.
|
* Abort callback.
|
||||||
@ -202,7 +204,7 @@ ajax.request = function (url, params) {
|
|||||||
xhr.onreadystatechange = null;
|
xhr.onreadystatechange = null;
|
||||||
xhr = null;
|
xhr = null;
|
||||||
} else {
|
} else {
|
||||||
//still loading
|
// still loading
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -1,10 +1,5 @@
|
|||||||
/**
|
|
||||||
* @module og/astro/astro
|
|
||||||
*/
|
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
|
||||||
import * as jd from './jd.js';
|
import * as jd from './jd.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -4,7 +4,6 @@
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
|
||||||
import * as jd from './jd.js';
|
import * as jd from './jd.js';
|
||||||
import * as math from '../math.js';
|
import * as math from '../math.js';
|
||||||
import * as astro from './astro.js';
|
import * as astro from './astro.js';
|
||||||
@ -17,7 +16,7 @@ import { Vec3 } from '../math/Vec3.js';
|
|||||||
* @returns {og.Vec3} - Sun geocentric coordinates.
|
* @returns {og.Vec3} - Sun geocentric coordinates.
|
||||||
*/
|
*/
|
||||||
export function getSunPosition(jDate) {
|
export function getSunPosition(jDate) {
|
||||||
//http://stjarnhimlen.se/comp/tutorial.html
|
// http://stjarnhimlen.se/comp/tutorial.html
|
||||||
// a Mean distance, or semi-major axis
|
// a Mean distance, or semi-major axis
|
||||||
// e Eccentricity
|
// e Eccentricity
|
||||||
// T Time at perihelion
|
// T Time at perihelion
|
||||||
@ -71,31 +70,31 @@ export function getSunPosition(jDate) {
|
|||||||
|
|
||||||
var d = jDate - jd.J2000;
|
var d = jDate - jd.J2000;
|
||||||
|
|
||||||
var w = 282.9404 + 4.70935E-5 * d; //longitude of perihelion
|
var w = 282.9404 + 4.70935E-5 * d; // longitude of perihelion
|
||||||
var a = 1.000000; //mean distance, a.u.
|
// var a = 1.000000; // mean distance, a.u.
|
||||||
var e = 0.016709 - 1.151E-9 * d; //eccentricity
|
var e = 0.016709 - 1.151E-9 * d; // eccentricity
|
||||||
var M = math.rev(356.0470 + 0.9856002585 * d); //mean anomaly
|
var M = math.rev(356.0470 + 0.9856002585 * d); // mean anomaly
|
||||||
|
|
||||||
var oblecl = astro.J2000_OBLIQUITY - 3.563E-7 * d; //obliquity of the ecliptic
|
var oblecl = astro.J2000_OBLIQUITY - 3.563E-7 * d; // obliquity of the ecliptic
|
||||||
|
|
||||||
var L = math.rev(w + M); //Sun's mean longitude
|
// var L = math.rev(w + M); // Sun's mean longitude
|
||||||
|
|
||||||
var E = M + math.DEGREES * e * Math.sin(M * math.RADIANS) * (1 + e * Math.cos(M * math.RADIANS)); //eccentric anomaly
|
var E = M + math.DEGREES * e * Math.sin(M * math.RADIANS) * (1 + e * Math.cos(M * math.RADIANS)); // eccentric anomaly
|
||||||
|
|
||||||
//Sun rectangular coordiantes, where the X axis points towards the perihelion
|
// Sun rectangular coordiantes, where the X axis points towards the perihelion
|
||||||
var x = Math.cos(E * math.RADIANS) - e;
|
var x = Math.cos(E * math.RADIANS) - e;
|
||||||
var y = Math.sin(E * math.RADIANS) * Math.sqrt(1 - e * e);
|
var y = Math.sin(E * math.RADIANS) * Math.sqrt(1 - e * e);
|
||||||
|
|
||||||
var r = Math.sqrt(x * x + y * y); // distance
|
var r = Math.sqrt(x * x + y * y); // distance
|
||||||
var v = Math.atan2(y, x) * math.DEGREES; // true anomaly
|
var v = Math.atan2(y, x) * math.DEGREES; // true anomaly
|
||||||
|
|
||||||
var lon = math.rev(v + w); //longitude of the Sun
|
var lon = math.rev(v + w); // longitude of the Sun
|
||||||
|
|
||||||
//the Sun's ecliptic rectangular coordinates
|
// the Sun's ecliptic rectangular coordinates
|
||||||
x = r * Math.cos(lon * math.RADIANS);
|
x = r * Math.cos(lon * math.RADIANS);
|
||||||
y = r * Math.sin(lon * math.RADIANS);
|
y = r * Math.sin(lon * math.RADIANS);
|
||||||
|
|
||||||
//We use oblecl, and rotate these coordinates
|
// We use oblecl, and rotate these coordinates
|
||||||
var xequat = x;
|
var xequat = x;
|
||||||
var yequat = y * Math.cos(oblecl * math.RADIANS);
|
var yequat = y * Math.cos(oblecl * math.RADIANS);
|
||||||
var zequat = y * Math.sin(oblecl * math.RADIANS);
|
var zequat = y * Math.sin(oblecl * math.RADIANS);
|
||||||
@ -105,7 +104,7 @@ export function getSunPosition(jDate) {
|
|||||||
return Quat.yRotation(-theta).mulVec3(new Vec3(-yequat * astro.AU_TO_METERS,
|
return Quat.yRotation(-theta).mulVec3(new Vec3(-yequat * astro.AU_TO_METERS,
|
||||||
zequat * astro.AU_TO_METERS, -xequat * astro.AU_TO_METERS));
|
zequat * astro.AU_TO_METERS, -xequat * astro.AU_TO_METERS));
|
||||||
|
|
||||||
//Convert to RA and Decl
|
// Convert to RA and Decl
|
||||||
//var RA = Math.atan2(yequat, xequat) * math.DEGREES;
|
// var RA = Math.atan2(yequat, xequat) * math.DEGREES;
|
||||||
//var Decl = Math.atan2(zequat, Math.sqrt(xequat * xequat + yequat * yequat)) * math.DEGREES;
|
// var Decl = Math.atan2(zequat, Math.sqrt(xequat * xequat + yequat * yequat)) * math.DEGREES;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -475,39 +475,39 @@ export function daysToSeconds(d) {
|
|||||||
|
|
||||||
function __ls(jd, leapSeconds) {
|
function __ls(jd, leapSeconds) {
|
||||||
return {
|
return {
|
||||||
"jd": jd,
|
jd: jd,
|
||||||
"leapSeconds": leapSeconds
|
leapSeconds: leapSeconds
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const leapSecondsTable = [
|
const leapSecondsTable = [
|
||||||
__ls(2441317.5, 10.0), // 1972-01-01T00:00:00.000Z
|
__ls(2441317.5, 10.0), // 1972-01-01T00:00:00.000Z
|
||||||
__ls(2441499.5, 11.0), // 1972-07-01T00:00:00.000Z
|
__ls(2441499.5, 11.0), // 1972-07-01T00:00:00.000Z
|
||||||
__ls(2441683.5, 12.0), // 1973-01-01T00:00:00.000Z
|
__ls(2441683.5, 12.0), // 1973-01-01T00:00:00.000Z
|
||||||
__ls(2442048.5, 13.0), // 1974-01-01T00:00:00.000Z
|
__ls(2442048.5, 13.0), // 1974-01-01T00:00:00.000Z
|
||||||
__ls(2442413.5, 14.0), // 1975-01-01T00:00:00.000Z
|
__ls(2442413.5, 14.0), // 1975-01-01T00:00:00.000Z
|
||||||
__ls(2442778.5, 15.0), // 1976-01-01T00:00:00.000Z
|
__ls(2442778.5, 15.0), // 1976-01-01T00:00:00.000Z
|
||||||
__ls(2443144.5, 16.0), // 1977-01-01T00:00:00.000Z
|
__ls(2443144.5, 16.0), // 1977-01-01T00:00:00.000Z
|
||||||
__ls(2443509.5, 17.0), // 1978-01-01T00:00:00.000Z
|
__ls(2443509.5, 17.0), // 1978-01-01T00:00:00.000Z
|
||||||
__ls(2443874.5, 18.0), // 1979-01-01T00:00:00.000Z
|
__ls(2443874.5, 18.0), // 1979-01-01T00:00:00.000Z
|
||||||
__ls(2444239.5, 19.0), // 1980-01-01T00:00:00.000Z
|
__ls(2444239.5, 19.0), // 1980-01-01T00:00:00.000Z
|
||||||
__ls(2444786.5, 20.0), // 1981-07-01T00:00:00.000Z
|
__ls(2444786.5, 20.0), // 1981-07-01T00:00:00.000Z
|
||||||
__ls(2445151.5, 21.0), // 1982-07-01T00:00:00.000Z
|
__ls(2445151.5, 21.0), // 1982-07-01T00:00:00.000Z
|
||||||
__ls(2445516.5, 22.0), // 1983-01-01T00:00:00.000Z
|
__ls(2445516.5, 22.0), // 1983-01-01T00:00:00.000Z
|
||||||
__ls(2446247.5, 23.0), // 1985-07-01T00:00:00.000Z
|
__ls(2446247.5, 23.0), // 1985-07-01T00:00:00.000Z
|
||||||
__ls(2447161.5, 24.0), // 1988-01-01T00:00:00.000Z
|
__ls(2447161.5, 24.0), // 1988-01-01T00:00:00.000Z
|
||||||
__ls(2447892.5, 25.0), // 1990-01-01T00:00:00.000Z
|
__ls(2447892.5, 25.0), // 1990-01-01T00:00:00.000Z
|
||||||
__ls(2448257.5, 26.0), // 1991-01-01T00:00:00.000Z
|
__ls(2448257.5, 26.0), // 1991-01-01T00:00:00.000Z
|
||||||
__ls(2448804.5, 27.0), // 1992-07-01T00:00:00.000Z
|
__ls(2448804.5, 27.0), // 1992-07-01T00:00:00.000Z
|
||||||
__ls(2449169.5, 28.0), // 1993-07-01T00:00:00.000Z
|
__ls(2449169.5, 28.0), // 1993-07-01T00:00:00.000Z
|
||||||
__ls(2449534.5, 29.0), // 1994-07-01T00:00:00.000Z
|
__ls(2449534.5, 29.0), // 1994-07-01T00:00:00.000Z
|
||||||
__ls(2450083.5, 30.0), // 1996-01-01T00:00:00.000Z
|
__ls(2450083.5, 30.0), // 1996-01-01T00:00:00.000Z
|
||||||
__ls(2450630.5, 31.0), // 1997-07-01T00:00:00.000Z
|
__ls(2450630.5, 31.0), // 1997-07-01T00:00:00.000Z
|
||||||
__ls(2451179.5, 32.0), // 1999-01-01T00:00:00.000Z
|
__ls(2451179.5, 32.0), // 1999-01-01T00:00:00.000Z
|
||||||
__ls(2453736.5, 33.0), // 2006-01-01T00:00:00.000Z
|
__ls(2453736.5, 33.0), // 2006-01-01T00:00:00.000Z
|
||||||
__ls(2454832.5, 34.0), // 2009-01-01T00:00:00.000Z
|
__ls(2454832.5, 34.0), // 2009-01-01T00:00:00.000Z
|
||||||
__ls(2456109.5, 35.0), // 2012-07-01T00:00:00.000Z
|
__ls(2456109.5, 35.0), // 2012-07-01T00:00:00.000Z
|
||||||
__ls(2457204.5, 36.0) // 2015-07-01T00:00:00.000Z
|
__ls(2457204.5, 36.0) // 2015-07-01T00:00:00.000Z
|
||||||
];
|
];
|
||||||
|
|
||||||
export const J2000TAI = UTCtoTAI(J2000);
|
export const J2000TAI = UTCtoTAI(J2000);
|
||||||
|
|||||||
@ -22,14 +22,14 @@ export function getEccentricAnomaly(M, ecc) {
|
|||||||
// Extremely stable Laguerre-Conway method for solving Kepler's
|
// Extremely stable Laguerre-Conway method for solving Kepler's
|
||||||
// equation. Only use this for high-eccentricity orbits, as it
|
// equation. Only use this for high-eccentricity orbits, as it
|
||||||
// requires more calcuation.
|
// requires more calcuation.
|
||||||
var E = M + 0.85 * ecc * sign(sin(M));
|
let E = M + 0.85 * ecc * sign(sin(M));
|
||||||
return math.solve_iteration_fixed(solveKeplerLaguerreConway(ecc, M), E, 8);
|
return math.solve_iteration_fixed(solveKeplerLaguerreConway(ecc, M), E, 8);
|
||||||
} else if (ecc == 1.0) {
|
} else if (ecc == 1.0) {
|
||||||
//TODO: Parabolic orbit
|
// TODO: Parabolic orbit
|
||||||
return M;
|
return M;
|
||||||
} else {
|
} else {
|
||||||
// Laguerre-Conway method for hyperbolic (ecc > 1) orbits.
|
// Laguerre-Conway method for hyperbolic (ecc > 1) orbits.
|
||||||
var E = log(2 * M / ecc + 1.85);
|
let E = log(2 * M / ecc + 1.85);
|
||||||
return math.solve_iteration_fixed(solveKeplerLaguerreConwayHyp(ecc, M), E, 30);
|
return math.solve_iteration_fixed(solveKeplerLaguerreConwayHyp(ecc, M), E, 30);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -38,7 +38,7 @@ export function getEccentricAnomaly(M, ecc) {
|
|||||||
function solveKeplerFunc1(ecc, M) {
|
function solveKeplerFunc1(ecc, M) {
|
||||||
return function (x) {
|
return function (x) {
|
||||||
return M + ecc * Math.sin(x);
|
return M + ecc * Math.sin(x);
|
||||||
}
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
// Faster converging iteration for Kepler's Equation; more efficient
|
// Faster converging iteration for Kepler's Equation; more efficient
|
||||||
@ -47,7 +47,7 @@ function solveKeplerFunc1(ecc, M) {
|
|||||||
function solveKeplerFunc2(ecc, M) {
|
function solveKeplerFunc2(ecc, M) {
|
||||||
return function (x) {
|
return function (x) {
|
||||||
return x + (M + ecc * Math.sin(x) - x) / (1 - ecc * Math.cos(x));
|
return x + (M + ecc * Math.sin(x) - x) / (1 - ecc * Math.cos(x));
|
||||||
}
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
function solveKeplerLaguerreConway(ecc, M) {
|
function solveKeplerLaguerreConway(ecc, M) {
|
||||||
@ -59,7 +59,7 @@ function solveKeplerLaguerreConway(ecc, M) {
|
|||||||
var f2 = s;
|
var f2 = s;
|
||||||
x += -5 * f / (f1 + Math.sign(f1) * Math.sqrt(abs(16 * f1 * f1 - 20 * f * f2)));
|
x += -5 * f / (f1 + Math.sign(f1) * Math.sqrt(abs(16 * f1 * f1 - 20 * f * f2)));
|
||||||
return x;
|
return x;
|
||||||
}
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
function solveKeplerLaguerreConwayHyp(ecc, M) {
|
function solveKeplerLaguerreConwayHyp(ecc, M) {
|
||||||
@ -71,7 +71,7 @@ function solveKeplerLaguerreConwayHyp(ecc, M) {
|
|||||||
var f2 = s;
|
var f2 = s;
|
||||||
x += -5 * f / (f1 + Math.sign(f1) * Math.sqrt(Math.abs(16 * f1 * f1 - 20 * f * f2)));
|
x += -5 * f / (f1 + Math.sign(f1) * Math.sqrt(Math.abs(16 * f1 * f1 - 20 * f * f2)));
|
||||||
return x;
|
return x;
|
||||||
}
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
export function getEllipticalEccentricAnomaly(meanAnomaly, eccentricity) {
|
export function getEllipticalEccentricAnomaly(meanAnomaly, eccentricity) {
|
||||||
|
|||||||
@ -138,14 +138,14 @@ class Camera {
|
|||||||
* @protected
|
* @protected
|
||||||
* @type {og.Vec3}
|
* @type {og.Vec3}
|
||||||
*/
|
*/
|
||||||
this._u = new Vec3(0, 1, 0); //up x n
|
this._u = new Vec3(0, 1, 0); // up x n
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Camera up vector.
|
* Camera up vector.
|
||||||
* @protected
|
* @protected
|
||||||
* @type {og.Vec3}
|
* @type {og.Vec3}
|
||||||
*/
|
*/
|
||||||
this._v = new Vec3(1, 0, 0); //n x u - UP
|
this._v = new Vec3(1, 0, 0); // n x u - UP
|
||||||
|
|
||||||
this.slope = 0;
|
this.slope = 0;
|
||||||
|
|
||||||
@ -154,7 +154,7 @@ class Camera {
|
|||||||
* @protected
|
* @protected
|
||||||
* @type {og.Vec3}
|
* @type {og.Vec3}
|
||||||
*/
|
*/
|
||||||
this._n = new Vec3(0, 0, 1); //eye - look - FORWARD
|
this._n = new Vec3(0, 0, 1); // eye - look - FORWARD
|
||||||
|
|
||||||
this._pu = this._u.clone();
|
this._pu = this._u.clone();
|
||||||
this._pv = this._v.clone();
|
this._pv = this._v.clone();
|
||||||
@ -299,7 +299,7 @@ class Camera {
|
|||||||
this._projectionViewMatrix = this._projectionMatrix.mul(this._viewMatrix);
|
this._projectionViewMatrix = this._projectionMatrix.mul(this._viewMatrix);
|
||||||
this.frustum.setFrustum(this._projectionViewMatrix);
|
this.frustum.setFrustum(this._projectionViewMatrix);
|
||||||
this._inverseProjectionViewMatrix = this._projectionViewMatrix.inverseTo();
|
this._inverseProjectionViewMatrix = this._projectionViewMatrix.inverseTo();
|
||||||
this._normalMatrix = this._viewMatrix.toMatrix3();//this._viewMatrix.toInverseMatrix3().transposeTo();
|
this._normalMatrix = this._viewMatrix.toMatrix3();// this._viewMatrix.toInverseMatrix3().transposeTo();
|
||||||
|
|
||||||
this.events.dispatch(this.events.viewchange, this);
|
this.events.dispatch(this.events.viewchange, this);
|
||||||
}
|
}
|
||||||
@ -646,12 +646,12 @@ const EVENT_NAMES = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
const defaultOptions = {
|
const defaultOptions = {
|
||||||
'viewAngle': 30,
|
viewAngle: 30,
|
||||||
'near': 1,
|
near: 1,
|
||||||
'far': 500000000,
|
far: 500000000,
|
||||||
'eye': new Vec3(),
|
eye: new Vec3(),
|
||||||
'look': new Vec3(),
|
look: new Vec3(),
|
||||||
'up': new Vec3(0.0, 1.0, 0.0)
|
up: new Vec3(0.0, 1.0, 0.0)
|
||||||
};
|
};
|
||||||
|
|
||||||
export { Camera };
|
export { Camera };
|
||||||
@ -10,7 +10,6 @@ import { Camera } from './Camera.js';
|
|||||||
import { Vec3 } from '../math/Vec3.js';
|
import { Vec3 } from '../math/Vec3.js';
|
||||||
import { Key } from '../Lock.js';
|
import { Key } from '../Lock.js';
|
||||||
import { LonLat } from '../LonLat.js';
|
import { LonLat } from '../LonLat.js';
|
||||||
import { Mat4 } from '../math/Mat4.js';
|
|
||||||
import { Ray } from '../math/Ray.js';
|
import { Ray } from '../math/Ray.js';
|
||||||
import { Quat } from '../math/Quat.js';
|
import { Quat } from '../math/Quat.js';
|
||||||
|
|
||||||
@ -93,7 +92,7 @@ class PlanetCamera extends Camera {
|
|||||||
|
|
||||||
this._keyLock = new Key();
|
this._keyLock = new Key();
|
||||||
|
|
||||||
//Camera's flying frames
|
// Camera's flying frames
|
||||||
this._framesArr = [];
|
this._framesArr = [];
|
||||||
this._framesCounter = 0;
|
this._framesCounter = 0;
|
||||||
this._numFrames = 50;
|
this._numFrames = 50;
|
||||||
@ -138,7 +137,7 @@ class PlanetCamera extends Camera {
|
|||||||
|
|
||||||
this._inverseProjectionViewMatrix = this._projectionMatrixPrecise.mul(this._viewMatrix).inverseTo();
|
this._inverseProjectionViewMatrix = this._projectionMatrixPrecise.mul(this._viewMatrix).inverseTo();
|
||||||
|
|
||||||
//this._normalMatrix = this._viewMatrix.toInverseMatrix3().transposeTo();
|
// this._normalMatrix = this._viewMatrix.toInverseMatrix3().transposeTo();
|
||||||
this._normalMatrix = this._viewMatrix.toMatrix3();
|
this._normalMatrix = this._viewMatrix.toMatrix3();
|
||||||
|
|
||||||
this.updateGeodeticPosition();
|
this.updateGeodeticPosition();
|
||||||
@ -257,7 +256,7 @@ class PlanetCamera extends Camera {
|
|||||||
northEast.subA(center);
|
northEast.subA(center);
|
||||||
southWest.subA(center);
|
southWest.subA(center);
|
||||||
|
|
||||||
var direction = center.normal();//ellipsoid.getSurfaceNormal(center).negate().normalize();
|
var direction = center.normal(); // ellipsoid.getSurfaceNormal(center).negate().normalize();
|
||||||
var right = direction.cross(Vec3.UP).normalize();
|
var right = direction.cross(Vec3.UP).normalize();
|
||||||
var up = right.cross(direction).normalize();
|
var up = right.cross(direction).normalize();
|
||||||
|
|
||||||
@ -349,11 +348,6 @@ class PlanetCamera extends Camera {
|
|||||||
*/
|
*/
|
||||||
flyCartesian(cartesian, look, up, ampl = 1.0, completeCallback, startCallback, frameCallback) {
|
flyCartesian(cartesian, look, up, ampl = 1.0, completeCallback, startCallback, frameCallback) {
|
||||||
|
|
||||||
//???????
|
|
||||||
//if (this.eye.distance(cartesian) < 23000) {
|
|
||||||
// return;
|
|
||||||
//}
|
|
||||||
|
|
||||||
this.stopFlying();
|
this.stopFlying();
|
||||||
|
|
||||||
this._completeCallback = completeCallback;
|
this._completeCallback = completeCallback;
|
||||||
@ -396,13 +390,13 @@ class PlanetCamera extends Camera {
|
|||||||
var max_h = currMaxHeight + 2.5 * hM_a * (maxHeight - currMaxHeight);
|
var max_h = currMaxHeight + 2.5 * hM_a * (maxHeight - currMaxHeight);
|
||||||
var zero = Vec3.ZERO;
|
var zero = Vec3.ZERO;
|
||||||
|
|
||||||
//camera path and orientations calculation
|
// camera path and orientations calculation
|
||||||
for (var i = 0; i <= this._numFrames; i++) {
|
for (var i = 0; i <= this._numFrames; i++) {
|
||||||
var d = 1 - i / this._numFrames;
|
var d = 1 - i / this._numFrames;
|
||||||
d = d * d * (3 - 2 * d);
|
d = d * d * (3 - 2 * d);
|
||||||
d *= d;
|
d *= d;
|
||||||
|
|
||||||
//Error here
|
// Error here
|
||||||
var g_i = ground_a.smerp(ground_b, d).normalize();
|
var g_i = ground_a.smerp(ground_b, d).normalize();
|
||||||
var ground_i = this.planet.getRayIntersectionEllipsoid(new Ray(zero, g_i));
|
var ground_i = this.planet.getRayIntersectionEllipsoid(new Ray(zero, g_i));
|
||||||
var t = 1 - d;
|
var t = 1 - d;
|
||||||
@ -419,10 +413,10 @@ class PlanetCamera extends Camera {
|
|||||||
|
|
||||||
var v = n.cross(u);
|
var v = n.cross(u);
|
||||||
this._framesArr[i] = {
|
this._framesArr[i] = {
|
||||||
"eye": eye_i,
|
eye: eye_i,
|
||||||
"n": n,
|
n: n,
|
||||||
"u": u,
|
u: u,
|
||||||
"v": v
|
v: v
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -105,5 +105,4 @@ export class Cons {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const cons = new Cons();
|
export const cons = new Cons();
|
||||||
|
|
||||||
@ -5,7 +5,6 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { Control } from './Control.js';
|
import { Control } from './Control.js';
|
||||||
import { print2d } from '../utils/shared.js';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Debug information
|
* Debug information
|
||||||
@ -54,51 +53,51 @@ class DebugInfo extends Control {
|
|||||||
|
|
||||||
if (p) {
|
if (p) {
|
||||||
this.addWatches([{
|
this.addWatches([{
|
||||||
'label': "Nodes count",
|
label: "Nodes count",
|
||||||
'frame': () => p._renderedNodes.length
|
frame: () => p._renderedNodes.length
|
||||||
}, {
|
}, {
|
||||||
'label': "createdNodes",
|
label: "createdNodes",
|
||||||
'frame': () => p._createdNodesCount
|
frame: () => p._createdNodesCount
|
||||||
}, {
|
}, {
|
||||||
'label': "distBeforeMemClear",
|
label: "distBeforeMemClear",
|
||||||
'frame': () => p._distBeforeMemClear
|
frame: () => p._distBeforeMemClear
|
||||||
},{
|
|
||||||
'label': "maxZoom/minZoom",
|
|
||||||
'frame': () => p.maxCurrZoom + '/' + p.minCurrZoom
|
|
||||||
}, {
|
}, {
|
||||||
'label': "height/alt (km)",
|
label: "maxZoom/minZoom",
|
||||||
'frame': () => (p.camera._lonLat.height / 1000.0).toFixed(2) + '/' + (p.camera.getAltitude() / 1000.0).toFixed(2)
|
frame: () => p.maxCurrZoom + '/' + p.minCurrZoom
|
||||||
}, {
|
}, {
|
||||||
'label': "cam.slope",
|
label: "height/alt (km)",
|
||||||
'frame': () => p.camera.slope
|
frame: () => (p.camera._lonLat.height / 1000.0).toFixed(2) + '/' + (p.camera.getAltitude() / 1000.0).toFixed(2)
|
||||||
}, {
|
}, {
|
||||||
'label': "lodRatio",
|
label: "cam.slope",
|
||||||
'frame': () => p._lodRatio
|
frame: () => p.camera.slope
|
||||||
}, {
|
}, {
|
||||||
'label': "deltaTime",
|
label: "lodRatio",
|
||||||
'frame': () => p.renderer.handler.deltaTime
|
frame: () => p._lodRatio
|
||||||
}, {
|
}, {
|
||||||
'label': "-------------------------"
|
label: "deltaTime",
|
||||||
|
frame: () => p.renderer.handler.deltaTime
|
||||||
}, {
|
}, {
|
||||||
'label': "PlainWorker",
|
label: "-------------------------"
|
||||||
'frame': () => p._plainSegmentWorker._pendingQueue.length
|
|
||||||
}, {
|
}, {
|
||||||
'label': "TileLoader",
|
label: "PlainWorker",
|
||||||
'frame': () => p._tileLoader._loading + ' ' + p._tileLoader._queue.length
|
frame: () => p._plainSegmentWorker._pendingQueue.length
|
||||||
}, {
|
}, {
|
||||||
'label': "TerrainLoader",
|
label: "TileLoader",
|
||||||
'frame': () => {
|
frame: () => p._tileLoader._loading + ' ' + p._tileLoader._queue.length
|
||||||
if (p.terrain && p.terrain._loader)
|
}, {
|
||||||
|
label: "TerrainLoader",
|
||||||
|
frame: () => {
|
||||||
|
if (p.terrain && p.terrain._loader) {
|
||||||
return p.terrain._loader._loading + ' ' + p.terrain._loader._queue.length;
|
return p.terrain._loader._loading + ' ' + p.terrain._loader._queue.length;
|
||||||
else
|
}
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
'label': "TerrainWorker",
|
label: "TerrainWorker",
|
||||||
'frame': () => p._terrainWorker._pendingQueue.length
|
frame: () => p._terrainWorker._pendingQueue.length
|
||||||
}, {
|
}, {
|
||||||
'label': "NormalMapCreator",
|
label: "NormalMapCreator",
|
||||||
'frame': () => p._normalMapCreator._queue.length
|
frame: () => p._normalMapCreator._queue.length
|
||||||
}]);
|
}]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,10 +7,10 @@
|
|||||||
import { Control } from './Control.js';
|
import { Control } from './Control.js';
|
||||||
|
|
||||||
function dec2deg(base) {
|
function dec2deg(base) {
|
||||||
var t, t2;
|
var t;
|
||||||
var degrees = base < 0 ? Math.ceil(base) : Math.floor(base);
|
var degrees = base < 0 ? Math.ceil(base) : Math.floor(base);
|
||||||
var minutes = Math.floor(t = Math.abs((base - degrees)) * 60);
|
var minutes = Math.floor(t = Math.abs((base - degrees)) * 60);
|
||||||
var seconds = Math.floor(t2 = (t - minutes) * 6000);
|
var seconds = Math.floor((t - minutes) * 6000);
|
||||||
seconds = seconds / 100.00;
|
seconds = seconds / 100.00;
|
||||||
return (numToFixedString(degrees, 3) + "\u00B0" +
|
return (numToFixedString(degrees, 3) + "\u00B0" +
|
||||||
numToFixedString(minutes, 2) + "\u0027" +
|
numToFixedString(minutes, 2) + "\u0027" +
|
||||||
@ -107,8 +107,11 @@ class EarthCoordinates extends Control {
|
|||||||
var that = this;
|
var that = this;
|
||||||
|
|
||||||
function _refresh(el) {
|
function _refresh(el) {
|
||||||
if (that._displayType >= DisplayTypesConverters.length)
|
|
||||||
|
if (that._displayType >= DisplayTypesConverters.length) {
|
||||||
that._displayType = 0;
|
that._displayType = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (that._displayType == 0) {
|
if (that._displayType == 0) {
|
||||||
el.style.width = "275px";
|
el.style.width = "275px";
|
||||||
} else if (that._displayType == 1) {
|
} else if (that._displayType == 1) {
|
||||||
@ -175,7 +178,6 @@ class EarthCoordinates extends Control {
|
|||||||
|
|
||||||
_grabCoordinates() {
|
_grabCoordinates() {
|
||||||
var r = this.renderer;
|
var r = this.renderer;
|
||||||
var ts = r.events.touchState;
|
|
||||||
this.position = this.planet.getLonLatFromPixelTerrain(r.handler.getCenter());
|
this.position = this.planet.getLonLatFromPixelTerrain(r.handler.getCenter());
|
||||||
this._showPosition();
|
this._showPosition();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -34,7 +34,7 @@ class GeoImageDragControl extends Control {
|
|||||||
|
|
||||||
_bindLayer(layer) {
|
_bindLayer(layer) {
|
||||||
if (layer instanceof BaseGeoImage) {
|
if (layer instanceof BaseGeoImage) {
|
||||||
|
|
||||||
var p = this.planet;
|
var p = this.planet;
|
||||||
|
|
||||||
layer.events.on('mousemove', function (ms) {
|
layer.events.on('mousemove', function (ms) {
|
||||||
@ -46,7 +46,7 @@ class GeoImageDragControl extends Control {
|
|||||||
} else {
|
} else {
|
||||||
this._cornerIndex = -1;
|
this._cornerIndex = -1;
|
||||||
for (var i = 0; i < layer._cornersWgs84.length; i++) {
|
for (var i = 0; i < layer._cornersWgs84.length; i++) {
|
||||||
var ground = p.getLonLatFromPixelTerrain(ms, true)
|
var ground = p.getLonLatFromPixelTerrain(ms, true);
|
||||||
if (ground && p.ellipsoid.getGreatCircleDistance(layer._cornersWgs84[i], ground) / p.getDistanceFromPixel(ms, true) <= 0.05) {
|
if (ground && p.ellipsoid.getGreatCircleDistance(layer._cornersWgs84[i], ground) / p.getDistanceFromPixel(ms, true) <= 0.05) {
|
||||||
this._cornerIndex = i;
|
this._cornerIndex = i;
|
||||||
break;
|
break;
|
||||||
@ -59,7 +59,6 @@ class GeoImageDragControl extends Control {
|
|||||||
layer.events.on('ldown', function (ms) {
|
layer.events.on('ldown', function (ms) {
|
||||||
if (this._active && this._cornerIndex != -1) {
|
if (this._active && this._cornerIndex != -1) {
|
||||||
this._catchCorner = true;
|
this._catchCorner = true;
|
||||||
//p.renderer.controls.mouseNavigation._active = false;
|
|
||||||
ms.renderer.controls.mouseNavigation.deactivate();
|
ms.renderer.controls.mouseNavigation.deactivate();
|
||||||
}
|
}
|
||||||
}, this);
|
}, this);
|
||||||
@ -67,7 +66,6 @@ class GeoImageDragControl extends Control {
|
|||||||
layer.events.on('lup', function (ms) {
|
layer.events.on('lup', function (ms) {
|
||||||
if (this._active) {
|
if (this._active) {
|
||||||
this._catchCorner = false;
|
this._catchCorner = false;
|
||||||
//p.renderer.controls.mouseNavigation._active = true;
|
|
||||||
ms.renderer.controls.mouseNavigation.activate();
|
ms.renderer.controls.mouseNavigation.activate();
|
||||||
}
|
}
|
||||||
}, this);
|
}, this);
|
||||||
|
|||||||
@ -84,7 +84,7 @@ class LayerSwitcher extends Control {
|
|||||||
|
|
||||||
obj._removeCallback = function () {
|
obj._removeCallback = function () {
|
||||||
container.removeChild(lineDiv);
|
container.removeChild(lineDiv);
|
||||||
}
|
};
|
||||||
|
|
||||||
lineDiv.appendChild(center);
|
lineDiv.appendChild(center);
|
||||||
lineDiv.appendChild(inp);
|
lineDiv.appendChild(inp);
|
||||||
@ -155,5 +155,4 @@ class LayerSwitcher extends Control {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export { LayerSwitcher };
|
export { LayerSwitcher };
|
||||||
|
|
||||||
@ -15,7 +15,6 @@ import { Ray } from '../math/Ray.js';
|
|||||||
import { Sphere } from '../bv/Sphere.js';
|
import { Sphere } from '../bv/Sphere.js';
|
||||||
import { Vec3 } from '../math/Vec3.js';
|
import { Vec3 } from '../math/Vec3.js';
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mouse planet camera dragging control.
|
* Mouse planet camera dragging control.
|
||||||
* @class
|
* @class
|
||||||
@ -52,7 +51,7 @@ class MouseNavigation extends Control {
|
|||||||
|
|
||||||
static getMovePointsFromPixelTerrain(cam, planet, stepsCount, delta, point, forward, dir) {
|
static getMovePointsFromPixelTerrain(cam, planet, stepsCount, delta, point, forward, dir) {
|
||||||
|
|
||||||
var steps = []
|
var steps = [];
|
||||||
|
|
||||||
var eye = cam.eye.clone(),
|
var eye = cam.eye.clone(),
|
||||||
n = cam._n.clone(),
|
n = cam._n.clone(),
|
||||||
@ -86,7 +85,7 @@ class MouseNavigation extends Control {
|
|||||||
grabbedSpheroid.radius = a.length();
|
grabbedSpheroid.radius = a.length();
|
||||||
|
|
||||||
var rotArr = [],
|
var rotArr = [],
|
||||||
eyeArr = []
|
eyeArr = [];
|
||||||
|
|
||||||
var breaked = false;
|
var breaked = false;
|
||||||
for (var i = 0; i < stepsCount; i++) {
|
for (var i = 0; i < stepsCount; i++) {
|
||||||
@ -102,7 +101,7 @@ class MouseNavigation extends Control {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!breaked) {
|
if (!breaked) {
|
||||||
for (var i = 0; i < stepsCount; i++) {
|
for (let i = 0; i < stepsCount; i++) {
|
||||||
var rot = rotArr[i];
|
var rot = rotArr[i];
|
||||||
steps[i] = {};
|
steps[i] = {};
|
||||||
steps[i].eye = rot.mulVec3(eyeArr[i]);
|
steps[i].eye = rot.mulVec3(eyeArr[i]);
|
||||||
@ -112,7 +111,7 @@ class MouseNavigation extends Control {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
eye = cam.eye.clone();
|
eye = cam.eye.clone();
|
||||||
for (var i = 0; i < stepsCount; i++) {
|
for (let i = 0; i < stepsCount; i++) {
|
||||||
steps[i] = {};
|
steps[i] = {};
|
||||||
steps[i].eye = eye.addA(scaled_n).clone();
|
steps[i].eye = eye.addA(scaled_n).clone();
|
||||||
steps[i].v = v;
|
steps[i].v = v;
|
||||||
@ -121,7 +120,7 @@ class MouseNavigation extends Control {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (var i = 0; i < stepsCount; i++) {
|
for (let i = 0; i < stepsCount; i++) {
|
||||||
steps[i] = {};
|
steps[i] = {};
|
||||||
steps[i].eye = eye.addA(dir.scaleTo(-d)).clone();
|
steps[i].eye = eye.addA(dir.scaleTo(-d)).clone();
|
||||||
steps[i].v = v;
|
steps[i].v = v;
|
||||||
@ -176,8 +175,9 @@ class MouseNavigation extends Control {
|
|||||||
|
|
||||||
onMouseWheel(event) {
|
onMouseWheel(event) {
|
||||||
|
|
||||||
if (this.stepIndex)
|
if (this.stepIndex) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.planet.stopFlying();
|
this.planet.stopFlying();
|
||||||
|
|
||||||
@ -243,8 +243,10 @@ class MouseNavigation extends Control {
|
|||||||
|
|
||||||
onMouseLeftButtonDown(e) {
|
onMouseLeftButtonDown(e) {
|
||||||
if (this._active) {
|
if (this._active) {
|
||||||
if (!this.grabbedPoint)
|
|
||||||
|
if (!this.grabbedPoint) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.planet.stopFlying();
|
this.planet.stopFlying();
|
||||||
|
|
||||||
@ -356,8 +358,9 @@ class MouseNavigation extends Control {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r.events.mouseState.leftButtonDown || !this.scaleRot)
|
if (r.events.mouseState.leftButtonDown || !this.scaleRot) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.scaleRot -= this.inertia;
|
this.scaleRot -= this.inertia;
|
||||||
if (this.scaleRot <= 0.0) {
|
if (this.scaleRot <= 0.0) {
|
||||||
|
|||||||
@ -25,8 +25,7 @@ class ShowFps extends Control {
|
|||||||
document.body.appendChild(d);
|
document.body.appendChild(d);
|
||||||
this.renderer.events.on("draw", this._draw, this);
|
this.renderer.events.on("draw", this._draw, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
_draw() {
|
_draw() {
|
||||||
print2d("ogShowFpsControl", (1000.0 / this.renderer.handler.deltaTime).toFixed(1), this.renderer.handler.canvas.clientWidth - 60, 0);
|
print2d("ogShowFpsControl", (1000.0 / this.renderer.handler.deltaTime).toFixed(1), this.renderer.handler.canvas.clientWidth - 60, 0);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,10 +1,5 @@
|
|||||||
/**
|
|
||||||
* @module og/control/SimpleNavigation
|
|
||||||
*/
|
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import * as math from '../math.js';
|
|
||||||
import { Control } from './Control.js';
|
import { Control } from './Control.js';
|
||||||
import { input } from '../input/input.js';
|
import { input } from '../input/input.js';
|
||||||
|
|
||||||
@ -23,7 +18,6 @@ class SimpleNavigation extends Control {
|
|||||||
this.speed = options.speed || 1.0;
|
this.speed = options.speed || 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
oninit() {
|
oninit() {
|
||||||
this.camera = this.renderer.activeCamera;
|
this.camera = this.renderer.activeCamera;
|
||||||
this.renderer.events.on("keypress", input.KEY_W, this.onCameraMoveForward, this);
|
this.renderer.events.on("keypress", input.KEY_W, this.onCameraMoveForward, this);
|
||||||
@ -99,7 +93,6 @@ class SimpleNavigation extends Control {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates simple navigation control instance.
|
* Creates simple navigation control instance.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -6,7 +6,6 @@
|
|||||||
|
|
||||||
import { Control } from './Control.js';
|
import { Control } from './Control.js';
|
||||||
import { getSunPosition } from '../astro/earth.js';
|
import { getSunPosition } from '../astro/earth.js';
|
||||||
import { input } from '../input/input.js';
|
|
||||||
import { LightSource } from '../light/LightSource.js';
|
import { LightSource } from '../light/LightSource.js';
|
||||||
import { Quat } from '../math/Quat.js';
|
import { Quat } from '../math/Quat.js';
|
||||||
import { Vec3 } from '../math/Vec3.js';
|
import { Vec3 } from '../math/Vec3.js';
|
||||||
@ -38,7 +37,7 @@ class Sun extends Control {
|
|||||||
* @private
|
* @private
|
||||||
* @type {boolean}
|
* @type {boolean}
|
||||||
*/
|
*/
|
||||||
//this._isCameraSunlight = false;
|
// this._isCameraSunlight = false;
|
||||||
|
|
||||||
this.offsetVertical = options.offsetVertical || -5000000;
|
this.offsetVertical = options.offsetVertical || -5000000;
|
||||||
|
|
||||||
@ -76,20 +75,20 @@ class Sun extends Control {
|
|||||||
|
|
||||||
this.planet.lightEnabled = true;
|
this.planet.lightEnabled = true;
|
||||||
|
|
||||||
//sunlight initialization
|
// sunlight initialization
|
||||||
this.sunlight = new LightSource("Sun", {
|
this.sunlight = new LightSource("Sun", {
|
||||||
'ambient': new Vec3(0.15, 0.15, 0.25),
|
ambient: new Vec3(0.15, 0.15, 0.25),
|
||||||
'diffuse': new Vec3(0.9, 0.9, 0.8),
|
diffuse: new Vec3(0.9, 0.9, 0.8),
|
||||||
'specular': new Vec3(0.1, 0.1, 0.06),
|
specular: new Vec3(0.1, 0.1, 0.06),
|
||||||
'shininess': 110
|
shininess: 110
|
||||||
});
|
});
|
||||||
this.sunlight.addTo(this.planet);
|
this.sunlight.addTo(this.planet);
|
||||||
|
|
||||||
var that = this;
|
|
||||||
this.renderer.events.on("draw", this._draw, this);
|
this.renderer.events.on("draw", this._draw, this);
|
||||||
|
|
||||||
if (!this._clockPtr)
|
if (!this._clockPtr) {
|
||||||
this._clockPtr = this.renderer.handler.defaultClock;
|
this._clockPtr = this.renderer.handler.defaultClock;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stop() {
|
stop() {
|
||||||
@ -126,8 +125,8 @@ class Sun extends Control {
|
|||||||
var pos = cam.eye.add(d);
|
var pos = cam.eye.add(d);
|
||||||
if (this._k > 0) {
|
if (this._k > 0) {
|
||||||
this._k -= 0.01;
|
this._k -= 0.01;
|
||||||
var rot = Quat.getRotationBetweenVectors(this.sunlight._position.normal(), pos.normal());
|
let rot = Quat.getRotationBetweenVectors(this.sunlight._position.normal(), pos.normal());
|
||||||
var r = rot.slerp(Quat.IDENTITY, this._k).normalize();
|
let r = rot.slerp(Quat.IDENTITY, this._k).normalize();
|
||||||
this.sunlight.setPosition3v(r.mulVec3(this.sunlight._position));
|
this.sunlight.setPosition3v(r.mulVec3(this.sunlight._position));
|
||||||
} else {
|
} else {
|
||||||
this.sunlight.setPosition3v(pos);
|
this.sunlight.setPosition3v(pos);
|
||||||
@ -136,11 +135,11 @@ class Sun extends Control {
|
|||||||
this._k = 1;
|
this._k = 1;
|
||||||
if (this._f > 0) {
|
if (this._f > 0) {
|
||||||
this._f -= 0.01;
|
this._f -= 0.01;
|
||||||
var rot = Quat.getRotationBetweenVectors(this.sunlight._position.normal(), getSunPosition(this._currDate).normal());
|
let rot = Quat.getRotationBetweenVectors(this.sunlight._position.normal(), getSunPosition(this._currDate).normal());
|
||||||
var r = rot.slerp(Quat.IDENTITY, this._f).normalize();
|
let r = rot.slerp(Quat.IDENTITY, this._f).normalize();
|
||||||
this.sunlight.setPosition3v(r.mulVec3(this.sunlight._position));
|
this.sunlight.setPosition3v(r.mulVec3(this.sunlight._position));
|
||||||
} else {
|
} else {
|
||||||
if (Math.abs(this._currDate - this._prevDate) > 0.00034 && this._active || this._lightOn) {
|
if ((Math.abs(this._currDate - this._prevDate) > 0.00034 && this._active) || this._lightOn) {
|
||||||
this._lightOn = false;
|
this._lightOn = false;
|
||||||
this._prevDate = this._currDate;
|
this._prevDate = this._currDate;
|
||||||
this.sunlight.setPosition3v(getSunPosition(this._currDate));
|
this.sunlight.setPosition3v(getSunPosition(this._currDate));
|
||||||
@ -158,5 +157,4 @@ export function sun(options) {
|
|||||||
return Sun(options);
|
return Sun(options);
|
||||||
}
|
}
|
||||||
|
|
||||||
export { Sun };
|
export { Sun };
|
||||||
|
|
||||||
@ -19,7 +19,6 @@ class ToggleWireframe extends Control {
|
|||||||
this._isActive = options.isActive || false;
|
this._isActive = options.isActive || false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
oninit() {
|
oninit() {
|
||||||
this.renderer.events.on("charkeypress", input.KEY_X, this.toogleWireframe, this);
|
this.renderer.events.on("charkeypress", input.KEY_X, this.toogleWireframe, this);
|
||||||
if (this._isActive) {
|
if (this._isActive) {
|
||||||
|
|||||||
@ -6,16 +6,13 @@
|
|||||||
|
|
||||||
import * as math from '../math.js';
|
import * as math from '../math.js';
|
||||||
import { Control } from './Control.js';
|
import { Control } from './Control.js';
|
||||||
import { input } from '../input/input.js';
|
|
||||||
import { Key } from '../Lock.js';
|
import { Key } from '../Lock.js';
|
||||||
import { LonLat } from '../LonLat.js';
|
import { LonLat } from '../LonLat.js';
|
||||||
import { Mat4 } from '../math/Mat4.js';
|
|
||||||
import { Quat } from '../math/Quat.js';
|
import { Quat } from '../math/Quat.js';
|
||||||
import { Ray } from '../math/Ray.js';
|
import { Ray } from '../math/Ray.js';
|
||||||
import { Sphere } from '../bv/Sphere.js';
|
import { Sphere } from '../bv/Sphere.js';
|
||||||
import { Vec3 } from '../math/Vec3.js';
|
import { Vec3 } from '../math/Vec3.js';
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Touch pad planet camera dragging control.
|
* Touch pad planet camera dragging control.
|
||||||
* @class
|
* @class
|
||||||
@ -90,7 +87,7 @@ class TouchNavigation extends Control {
|
|||||||
t1.prev_y = e.sys.touches.item(1).clientY - e.sys.offsetTop;
|
t1.prev_y = e.sys.touches.item(1).clientY - e.sys.offsetTop;
|
||||||
t1.grabbedPoint = this.planet.getCartesianFromPixelTerrain(t1, true);
|
t1.grabbedPoint = this.planet.getCartesianFromPixelTerrain(t1, true);
|
||||||
|
|
||||||
//this.planet._viewChanged = true;
|
// this.planet._viewChanged = true;
|
||||||
this.pointOnEarth = this.planet.getCartesianFromPixelTerrain(this.renderer.handler.getCenter(), true);
|
this.pointOnEarth = this.planet.getCartesianFromPixelTerrain(this.renderer.handler.getCenter(), true);
|
||||||
|
|
||||||
if (this.pointOnEarth) {
|
if (this.pointOnEarth) {
|
||||||
@ -133,8 +130,9 @@ class TouchNavigation extends Control {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onDoubleTouch(e) {
|
onDoubleTouch(e) {
|
||||||
if (this.stepIndex)
|
if (this.stepIndex) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.planet.stopFlying();
|
this.planet.stopFlying();
|
||||||
this.stopRotation();
|
this.stopRotation();
|
||||||
@ -145,16 +143,18 @@ class TouchNavigation extends Control {
|
|||||||
|
|
||||||
onTouchEnd(e) {
|
onTouchEnd(e) {
|
||||||
|
|
||||||
if (e.sys.touches.length === 0)
|
if (e.sys.touches.length === 0) {
|
||||||
this._touching = false;
|
this._touching = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (e.sys.touches.length === 1) {
|
if (e.sys.touches.length === 1) {
|
||||||
this._startTouchOne(e);
|
this._startTouchOne(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Math.abs(this.touches[0].x - this.touches[0].prev_x) < 3 &&
|
if ((Math.abs(this.touches[0].x - this.touches[0].prev_x) < 3) &&
|
||||||
Math.abs(this.touches[0].y - this.touches[0].prev_y) < 3)
|
(Math.abs(this.touches[0].y - this.touches[0].prev_y) < 3)) {
|
||||||
this.scaleRot = 0;
|
this.scaleRot = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onTouchCancel(e) {
|
onTouchCancel(e) {
|
||||||
@ -171,8 +171,9 @@ class TouchNavigation extends Control {
|
|||||||
var t0 = this.touches[0],
|
var t0 = this.touches[0],
|
||||||
t1 = this.touches[1];
|
t1 = this.touches[1];
|
||||||
|
|
||||||
if (!t0.grabbedPoint || !t1.grabbedPoint)
|
if (!t0.grabbedPoint || !t1.grabbedPoint) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.planet.stopFlying();
|
this.planet.stopFlying();
|
||||||
|
|
||||||
@ -186,23 +187,8 @@ class TouchNavigation extends Control {
|
|||||||
t1.x = e.sys.touches.item(1).clientX - e.sys.offsetLeft;
|
t1.x = e.sys.touches.item(1).clientX - e.sys.offsetLeft;
|
||||||
t1.y = e.sys.touches.item(1).clientY - e.sys.offsetTop;
|
t1.y = e.sys.touches.item(1).clientY - e.sys.offsetTop;
|
||||||
|
|
||||||
//var center_x = Math.round(t0.x + (t1.x - t0.x) * 0.5);
|
if ((t0.dY() > 0 && t1.dY() > 0) || (t0.dY() < 0 && t1.dY() < 0) ||
|
||||||
//var center_y = Math.round(t0.y + (t1.y - t0.y) * 0.5);
|
(t0.dX() > 0 && t1.dX() > 0) || (t0.dX() < 0 && t1.dX() < 0)) {
|
||||||
|
|
||||||
//var dirC = cam.unproject(center_x, center_y);
|
|
||||||
//var targetPointC = this.planet.getCartesianFromPixelTerrain(new og.math.Pixel(center_x, center_y));
|
|
||||||
|
|
||||||
//var dir0 = cam.unproject(t0.x, t0.y);
|
|
||||||
//var targetPoint0 = new og.Ray(cam.eye, dir0).hitSphere(t0.grabbedSpheroid);
|
|
||||||
|
|
||||||
//var dir1 = cam.unproject(t1.x, t1.y);
|
|
||||||
//var targetPoint1 = new og.Ray(cam.eye, dir1).hitSphere(t1.grabbedSpheroid);
|
|
||||||
|
|
||||||
//print2d("t1", center_x + "," + center_y, 100, 100);
|
|
||||||
//print2d("t2", targetPointC.x + "," + targetPointC.y + "," + targetPointC.z, 100, 120);
|
|
||||||
|
|
||||||
if (t0.dY() > 0 && t1.dY() > 0 || t0.dY() < 0 && t1.dY() < 0 ||
|
|
||||||
t0.dX() > 0 && t1.dX() > 0 || t0.dX() < 0 && t1.dX() < 0) {
|
|
||||||
var l = 0.5 / cam.eye.distance(this.pointOnEarth) * cam._lonLat.height * math.RADIANS;
|
var l = 0.5 / cam.eye.distance(this.pointOnEarth) * cam._lonLat.height * math.RADIANS;
|
||||||
if (l > 0.007) l = 0.007;
|
if (l > 0.007) l = 0.007;
|
||||||
cam.rotateHorizontal(l * t0.dX(), false, this.pointOnEarth, this.earthUp);
|
cam.rotateHorizontal(l * t0.dX(), false, this.pointOnEarth, this.earthUp);
|
||||||
@ -222,8 +208,9 @@ class TouchNavigation extends Control {
|
|||||||
t.x = e.sys.touches.item(0).clientX - e.sys.offsetLeft;
|
t.x = e.sys.touches.item(0).clientX - e.sys.offsetLeft;
|
||||||
t.y = e.sys.touches.item(0).clientY - e.sys.offsetTop;
|
t.y = e.sys.touches.item(0).clientY - e.sys.offsetTop;
|
||||||
|
|
||||||
if (!t.grabbedPoint)
|
if (!t.grabbedPoint) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.planet.stopFlying();
|
this.planet.stopFlying();
|
||||||
|
|
||||||
@ -262,8 +249,9 @@ class TouchNavigation extends Control {
|
|||||||
|
|
||||||
this.renderer.controlsBag.scaleRot = this.scaleRot;
|
this.renderer.controlsBag.scaleRot = this.scaleRot;
|
||||||
|
|
||||||
if (this._touching)
|
if (this._touching) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var r = this.renderer;
|
var r = this.renderer;
|
||||||
var cam = r.activeCamera;
|
var cam = r.activeCamera;
|
||||||
@ -272,7 +260,6 @@ class TouchNavigation extends Control {
|
|||||||
if (this.stepIndex) {
|
if (this.stepIndex) {
|
||||||
r.controlsBag.scaleRot = 1;
|
r.controlsBag.scaleRot = 1;
|
||||||
var sf = this.stepsForward[this.stepsCount - this.stepIndex--];
|
var sf = this.stepsForward[this.stepsCount - this.stepIndex--];
|
||||||
var cam = this.renderer.activeCamera;
|
|
||||||
cam.eye = sf.eye;
|
cam.eye = sf.eye;
|
||||||
cam._v = sf.v;
|
cam._v = sf.v;
|
||||||
cam._u = sf.u;
|
cam._u = sf.u;
|
||||||
@ -281,15 +268,15 @@ class TouchNavigation extends Control {
|
|||||||
cam.update();
|
cam.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r.events.mouseState.leftButtonDown || !this.scaleRot)
|
if (r.events.mouseState.leftButtonDown || !this.scaleRot) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.scaleRot -= this.inertia;
|
this.scaleRot -= this.inertia;
|
||||||
if (this.scaleRot <= 0)
|
if (this.scaleRot <= 0) {
|
||||||
this.scaleRot = 0;
|
this.scaleRot = 0;
|
||||||
else {
|
} else {
|
||||||
r.controlsBag.scaleRot = this.scaleRot;
|
r.controlsBag.scaleRot = this.scaleRot;
|
||||||
var cam = r.activeCamera;
|
|
||||||
var rot = this.qRot.slerp(Quat.IDENTITY, 1 - this.scaleRot * this.scaleRot * this.scaleRot).normalize();
|
var rot = this.qRot.slerp(Quat.IDENTITY, 1 - this.scaleRot * this.scaleRot * this.scaleRot).normalize();
|
||||||
if (!(rot.x || rot.y || rot.z)) {
|
if (!(rot.x || rot.y || rot.z)) {
|
||||||
this.scaleRot = 0;
|
this.scaleRot = 0;
|
||||||
|
|||||||
@ -46,13 +46,13 @@ class ZoomControl extends Control {
|
|||||||
btnZoomOut.addEventListener("mousedown", (e) => this.zoomOut());
|
btnZoomOut.addEventListener("mousedown", (e) => this.zoomOut());
|
||||||
btnZoomOut.addEventListener("mouseup", (e) => this.stopZoom());
|
btnZoomOut.addEventListener("mouseup", (e) => this.stopZoom());
|
||||||
|
|
||||||
btnZoomIn.addEventListener('touchstart', (e) => { e.preventDefault(); this.zoomIn() });
|
btnZoomIn.addEventListener('touchstart', (e) => { e.preventDefault(); this.zoomIn(); });
|
||||||
btnZoomIn.addEventListener('touchend', (e) => { e.preventDefault(); this.stopZoom() });
|
btnZoomIn.addEventListener('touchend', (e) => { e.preventDefault(); this.stopZoom(); });
|
||||||
btnZoomIn.addEventListener('touchcancel', (e) => { e.preventDefault(); this.stopZoom() });
|
btnZoomIn.addEventListener('touchcancel', (e) => { e.preventDefault(); this.stopZoom(); });
|
||||||
|
|
||||||
btnZoomOut.addEventListener('touchstart', (e) => { e.preventDefault(); this.zoomOut() });
|
btnZoomOut.addEventListener('touchstart', (e) => { e.preventDefault(); this.zoomOut(); });
|
||||||
btnZoomOut.addEventListener('touchend', (e) => { e.preventDefault(); this.stopZoom() });
|
btnZoomOut.addEventListener('touchend', (e) => { e.preventDefault(); this.stopZoom(); });
|
||||||
btnZoomOut.addEventListener('touchcancel', (e) => { e.preventDefault(); this.stopZoom() });
|
btnZoomOut.addEventListener('touchcancel', (e) => { e.preventDefault(); this.stopZoom(); });
|
||||||
|
|
||||||
this.renderer.events.on("draw", this._draw, this);
|
this.renderer.events.on("draw", this._draw, this);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -43,8 +43,9 @@ class Ellipsoid {
|
|||||||
b_y = Math.cos(b), b_x = Math.sin(b);
|
b_y = Math.cos(b), b_x = Math.sin(b);
|
||||||
let c = a_y * b_x - b_y * a_x,
|
let c = a_y * b_x - b_y * a_x,
|
||||||
d = a_x * b_x + a_y * b_y;
|
d = a_x * b_x + a_y * b_y;
|
||||||
if (c > 0.0)
|
if (c > 0.0) {
|
||||||
return Math.acos(d);
|
return Math.acos(d);
|
||||||
|
}
|
||||||
return -Math.acos(d);
|
return -Math.acos(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,8 +111,7 @@ class Ellipsoid {
|
|||||||
if (Math.abs(dLon) > Math.PI) {
|
if (Math.abs(dLon) > Math.PI) {
|
||||||
if (dLon > 0) {
|
if (dLon > 0) {
|
||||||
dLon = (2 * Math.PI - dLon) * -1;
|
dLon = (2 * Math.PI - dLon) * -1;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
dLon = 2 * Math.PI + dLon;
|
dLon = 2 * Math.PI + dLon;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -161,8 +161,7 @@ class Ellipsoid {
|
|||||||
var df = f2 - f1,
|
var df = f2 - f1,
|
||||||
dl = l2 - l1;
|
dl = l2 - l1;
|
||||||
|
|
||||||
var d12 = 2 * Math.asin(Math.sqrt(Math.sin(df / 2) * Math.sin(df / 2)
|
var d12 = 2 * Math.asin(Math.sqrt(Math.sin(df / 2) * Math.sin(df / 2) + Math.cos(f1) * Math.cos(f2) * Math.sin(dl / 2) * Math.sin(dl / 2)));
|
||||||
+ Math.cos(f1) * Math.cos(f2) * Math.sin(dl / 2) * Math.sin(dl / 2)));
|
|
||||||
if (d12 == 0) return null;
|
if (d12 == 0) return null;
|
||||||
|
|
||||||
// initial/final bearings between points
|
// initial/final bearings between points
|
||||||
@ -177,10 +176,10 @@ class Ellipsoid {
|
|||||||
var a2 = (D21 - D23 + Math.PI) % (2 * Math.PI) - Math.PI;
|
var a2 = (D21 - D23 + Math.PI) % (2 * Math.PI) - Math.PI;
|
||||||
|
|
||||||
if (Math.sin(a1) == 0 && Math.sin(a2) == 0) return null; // infinite intersections
|
if (Math.sin(a1) == 0 && Math.sin(a2) == 0) return null; // infinite intersections
|
||||||
if (Math.sin(a1) * Math.sin(a2) < 0) return null; // ambiguous intersection
|
if (Math.sin(a1) * Math.sin(a2) < 0) return null; // ambiguous intersection
|
||||||
|
|
||||||
//a1 = Math.abs(a1);
|
// a1 = Math.abs(a1);
|
||||||
//a2 = Math.abs(a2);
|
// a2 = Math.abs(a2);
|
||||||
// ... Ed Williams takes abs of a1/a2, but seems to break calculation?
|
// ... Ed Williams takes abs of a1/a2, but seems to break calculation?
|
||||||
|
|
||||||
var a3 = Math.acos(-Math.cos(a1) * Math.cos(a2) + Math.sin(a1) * Math.sin(a2) * Math.cos(d12));
|
var a3 = Math.acos(-Math.cos(a1) * Math.cos(a2) + Math.sin(a1) * Math.sin(a2) * Math.cos(d12));
|
||||||
@ -311,13 +310,12 @@ class Ellipsoid {
|
|||||||
var q = Math.sqrt(1.0 + 2.0 * ecc22 * p);
|
var q = Math.sqrt(1.0 + 2.0 * ecc22 * p);
|
||||||
var recc2r0 = r - ecc2 * (-(p * ecc2 * r) / 1 + q + Math.sqrt(0.5 * this._a2 * (1.0 + 1.0 / q) - p * (1.0 - ecc2) * z2 / (q * (1.0 + q)) - 0.5 * p * r2));
|
var recc2r0 = r - ecc2 * (-(p * ecc2 * r) / 1 + q + Math.sqrt(0.5 * this._a2 * (1.0 + 1.0 / q) - p * (1.0 - ecc2) * z2 / (q * (1.0 + q)) - 0.5 * p * r2));
|
||||||
var recc2r02 = recc2r0 * recc2r0;
|
var recc2r02 = recc2r0 * recc2r0;
|
||||||
var u = Math.sqrt(recc2r02 + z2);
|
// var u = Math.sqrt(recc2r02 + z2);
|
||||||
var v = Math.sqrt(recc2r02 + (1.0 - ecc2) * z2);
|
var v = Math.sqrt(recc2r02 + (1.0 - ecc2) * z2);
|
||||||
var z0 = this._b2 * z / (this._a * v);
|
var z0 = this._b2 * z / (this._a * v);
|
||||||
var lat = Math.atan((z + this._k2 * z0) / r) * math.DEGREES;
|
var lat = Math.atan((z + this._k2 * z0) / r) * math.DEGREES;
|
||||||
var lon = Math.atan2(y, x) * math.DEGREES;
|
var lon = Math.atan2(y, x) * math.DEGREES;
|
||||||
var c = this.geodeticToCartesian(lon, lat);
|
return new LonLat(lon, lat, cartesian.length() - this.geodeticToCartesian(lon, lat).length());
|
||||||
return new LonLat(lon, lat, cartesian.length() - c.length());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -335,7 +333,6 @@ class Ellipsoid {
|
|||||||
return new Vec3(nx * l, ny * l, nz * l);
|
return new Vec3(nx * l, ny * l, nz * l);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the distance from one point to another(using haversine formula) on the great circle.
|
* Returns the distance from one point to another(using haversine formula) on the great circle.
|
||||||
* @param {og.LonLat} lonLat1 - Longitude/latitude of source point.
|
* @param {og.LonLat} lonLat1 - Longitude/latitude of source point.
|
||||||
@ -356,8 +353,7 @@ class Ellipsoid {
|
|||||||
var f1 = lonLat1.lat * math.RADIANS, l1 = nlon * math.RADIANS;
|
var f1 = lonLat1.lat * math.RADIANS, l1 = nlon * math.RADIANS;
|
||||||
var dR = distance / this._a;
|
var dR = distance / this._a;
|
||||||
var f2 = Math.asin(Math.sin(f1) * Math.cos(dR) + Math.cos(f1) * Math.sin(dR) * Math.cos(bearing));
|
var f2 = Math.asin(Math.sin(f1) * Math.cos(dR) + Math.cos(f1) * Math.sin(dR) * Math.cos(bearing));
|
||||||
return new LonLat((l1 + Math.atan2(Math.sin(bearing) * Math.sin(dR) * Math.cos(f1), Math.cos(dR) - Math.sin(f1) * Math.sin(f2)))
|
return new LonLat((l1 + Math.atan2(Math.sin(bearing) * Math.sin(dR) * Math.cos(f1), Math.cos(dR) - Math.sin(f1) * Math.sin(f2))) * math.DEGREES, f2 * math.DEGREES);
|
||||||
* math.DEGREES, f2 * math.DEGREES);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -116,8 +116,8 @@ class Billboard extends BaseBillboard {
|
|||||||
*/
|
*/
|
||||||
getSize() {
|
getSize() {
|
||||||
return {
|
return {
|
||||||
"width": this._width,
|
width: this._width,
|
||||||
"height": this._height
|
height: this._height
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -201,7 +201,7 @@ class BillboardHandler {
|
|||||||
this._billboards.push(billboard);
|
this._billboards.push(billboard);
|
||||||
this._addBillboardToArrays(billboard);
|
this._addBillboardToArrays(billboard);
|
||||||
this.refresh();
|
this.refresh();
|
||||||
billboard.setSrc(billboard._src || billboard._image && billboard._image.src);
|
billboard.setSrc(billboard._src || (billboard._image && billboard._image.src));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,7 +217,7 @@ class BillboardHandler {
|
|||||||
var x = billboard._positionHigh.x, y = billboard._positionHigh.y, z = billboard._positionHigh.z, w;
|
var x = billboard._positionHigh.x, y = billboard._positionHigh.y, z = billboard._positionHigh.z, w;
|
||||||
BillboardHandler.concArr(this._positionHighArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
BillboardHandler.concArr(this._positionHighArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
||||||
|
|
||||||
x = billboard._positionLow.x, y = billboard._positionLow.y, z = billboard._positionLow.z;
|
x = billboard._positionLow.x; y = billboard._positionLow.y; z = billboard._positionLow.z;
|
||||||
BillboardHandler.concArr(this._positionLowArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
BillboardHandler.concArr(this._positionLowArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
||||||
|
|
||||||
x = billboard._width; y = billboard._height;
|
x = billboard._width; y = billboard._height;
|
||||||
@ -232,10 +232,10 @@ class BillboardHandler {
|
|||||||
x = billboard._rotation;
|
x = billboard._rotation;
|
||||||
BillboardHandler.concArr(this._rotationArr, [x, x, x, x, x, x]);
|
BillboardHandler.concArr(this._rotationArr, [x, x, x, x, x, x]);
|
||||||
|
|
||||||
x = billboard._alignedAxis.x, y = billboard._alignedAxis.y, z = billboard._alignedAxis.z;
|
x = billboard._alignedAxis.x; y = billboard._alignedAxis.y; z = billboard._alignedAxis.z;
|
||||||
BillboardHandler.concArr(this._alignedAxisArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
BillboardHandler.concArr(this._alignedAxisArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
||||||
|
|
||||||
x = billboard._entity._pickingColor.x / 255, y = billboard._entity._pickingColor.y / 255, z = billboard._entity._pickingColor.z / 255;
|
x = billboard._entity._pickingColor.x / 255; y = billboard._entity._pickingColor.y / 255; z = billboard._entity._pickingColor.z / 255;
|
||||||
BillboardHandler.concArr(this._pickingColorArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
BillboardHandler.concArr(this._pickingColorArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -304,8 +304,6 @@ class BillboardHandler {
|
|||||||
var sha = sh.attributes,
|
var sha = sh.attributes,
|
||||||
shu = sh.uniforms;
|
shu = sh.uniforms;
|
||||||
|
|
||||||
var gl = h.gl;
|
|
||||||
|
|
||||||
var gl = h.gl,
|
var gl = h.gl,
|
||||||
ec = this._entityCollection;
|
ec = this._entityCollection;
|
||||||
|
|
||||||
@ -412,7 +410,7 @@ class BillboardHandler {
|
|||||||
|
|
||||||
var i = index * 18;
|
var i = index * 18;
|
||||||
|
|
||||||
//High
|
// High
|
||||||
var a = this._positionHighArr, x = positionHigh.x, y = positionHigh.y, z = positionHigh.z;
|
var a = this._positionHighArr, x = positionHigh.x, y = positionHigh.y, z = positionHigh.z;
|
||||||
|
|
||||||
a[i] = x;
|
a[i] = x;
|
||||||
@ -439,8 +437,8 @@ class BillboardHandler {
|
|||||||
a[i + 16] = y;
|
a[i + 16] = y;
|
||||||
a[i + 17] = z;
|
a[i + 17] = z;
|
||||||
|
|
||||||
//Low
|
// Low
|
||||||
a = this._positionLowArr, x = positionLow.x, y = positionLow.y, z = positionLow.z;
|
a = this._positionLowArr; x = positionLow.x; y = positionLow.y; z = positionLow.z;
|
||||||
|
|
||||||
a[i] = x;
|
a[i] = x;
|
||||||
a[i + 1] = y;
|
a[i + 1] = y;
|
||||||
@ -609,7 +607,7 @@ class BillboardHandler {
|
|||||||
a[i + 4] = rotation;
|
a[i + 4] = rotation;
|
||||||
a[i + 5] = rotation;
|
a[i + 5] = rotation;
|
||||||
|
|
||||||
this._changedBuffers[ROTATION_BUFFER] = true
|
this._changedBuffers[ROTATION_BUFFER] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
setTexCoordArr(index, tcoordArr) {
|
setTexCoordArr(index, tcoordArr) {
|
||||||
|
|||||||
@ -8,7 +8,6 @@ import * as mercator from '../mercator.js';
|
|||||||
import * as utils from '../utils/shared.js';
|
import * as utils from '../utils/shared.js';
|
||||||
import { Billboard } from './Billboard.js';
|
import { Billboard } from './Billboard.js';
|
||||||
import { Strip } from './Strip.js';
|
import { Strip } from './Strip.js';
|
||||||
//import { Box } from '../shapes/Box.js';
|
|
||||||
import { Extent } from '../Extent.js';
|
import { Extent } from '../Extent.js';
|
||||||
import { Geometry } from './Geometry.js';
|
import { Geometry } from './Geometry.js';
|
||||||
import { Label } from './Label.js';
|
import { Label } from './Label.js';
|
||||||
@ -19,7 +18,6 @@ import { PointCloud } from './PointCloud.js';
|
|||||||
import { Sphere } from '../shapes/Sphere.js';
|
import { Sphere } from '../shapes/Sphere.js';
|
||||||
import { Vec3 } from '../math/Vec3.js';
|
import { Vec3 } from '../math/Vec3.js';
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Entity instances aggregate multiple forms of visualization into a single high-level object.
|
* Entity instances aggregate multiple forms of visualization into a single high-level object.
|
||||||
* They can be created manually and added to entity collection.
|
* They can be created manually and added to entity collection.
|
||||||
@ -154,15 +152,15 @@ class Entity {
|
|||||||
this._pickingColor = new Vec3(0, 0, 0);
|
this._pickingColor = new Vec3(0, 0, 0);
|
||||||
|
|
||||||
this._featureConstructorArray = {
|
this._featureConstructorArray = {
|
||||||
"billboard": [Billboard, this.setBillboard],
|
billboard: [Billboard, this.setBillboard],
|
||||||
"label": [Label, this.setLabel],
|
label: [Label, this.setLabel],
|
||||||
"sphere": [Sphere, this.setShape],
|
sphere: [Sphere, this.setShape],
|
||||||
//"box": [Box, this.setShape],
|
// box: [Box, this.setShape],
|
||||||
"polyline": [Polyline, this.setPolyline],
|
polyline: [Polyline, this.setPolyline],
|
||||||
"pointCloud": [PointCloud, this.setPointCloud],
|
pointCloud: [PointCloud, this.setPointCloud],
|
||||||
"geometry": [Geometry, this.setGeometry],
|
geometry: [Geometry, this.setGeometry],
|
||||||
"strip": [Strip, this.setStrip],
|
strip: [Strip, this.setStrip],
|
||||||
"ray": [Ray, this.setRay]
|
ray: [Ray, this.setRay]
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -220,9 +218,6 @@ class Entity {
|
|||||||
* @type {og.Strip}
|
* @type {og.Strip}
|
||||||
*/
|
*/
|
||||||
this.strip = this._createOptionFeature('strip', options.strip);
|
this.strip = this._createOptionFeature('strip', options.strip);
|
||||||
|
|
||||||
//this.model = null;
|
|
||||||
//...
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static get _staticCounter() {
|
static get _staticCounter() {
|
||||||
@ -281,22 +276,22 @@ class Entity {
|
|||||||
setVisibility(visibility) {
|
setVisibility(visibility) {
|
||||||
this._visibility = visibility;
|
this._visibility = visibility;
|
||||||
|
|
||||||
//billboards
|
// billboards
|
||||||
this.billboard && this.billboard.setVisibility(visibility);
|
this.billboard && this.billboard.setVisibility(visibility);
|
||||||
|
|
||||||
//labels
|
// labels
|
||||||
this.label && this.label.setVisibility(visibility);
|
this.label && this.label.setVisibility(visibility);
|
||||||
|
|
||||||
//shape
|
// shape
|
||||||
this.shape && this.shape.setVisibility(visibility);
|
this.shape && this.shape.setVisibility(visibility);
|
||||||
|
|
||||||
//polyline
|
// polyline
|
||||||
this.polyline && this.polyline.setVisibility(visibility);
|
this.polyline && this.polyline.setVisibility(visibility);
|
||||||
|
|
||||||
//ray
|
// ray
|
||||||
this.ray && this.ray.setVisibility(visibility);
|
this.ray && this.ray.setVisibility(visibility);
|
||||||
|
|
||||||
//geometry
|
// geometry
|
||||||
this.geometry && this.geometry.setVisibility(visibility);
|
this.geometry && this.geometry.setVisibility(visibility);
|
||||||
|
|
||||||
for (var i = 0; i < this.childrenNodes.length; i++) {
|
for (var i = 0; i < this.childrenNodes.length; i++) {
|
||||||
@ -337,13 +332,13 @@ class Entity {
|
|||||||
p.y = y;
|
p.y = y;
|
||||||
p.z = z;
|
p.z = z;
|
||||||
|
|
||||||
//billboards
|
// billboards
|
||||||
this.billboard && this.billboard.setPosition3v(p);
|
this.billboard && this.billboard.setPosition3v(p);
|
||||||
|
|
||||||
//labels
|
// labels
|
||||||
this.label && this.label.setPosition3v(p);
|
this.label && this.label.setPosition3v(p);
|
||||||
|
|
||||||
//shape
|
// shape
|
||||||
this.shape && this.shape.setPosition3v(p);
|
this.shape && this.shape.setPosition3v(p);
|
||||||
|
|
||||||
for (var i = 0; i < this.childrenNodes.length; i++) {
|
for (var i = 0; i < this.childrenNodes.length; i++) {
|
||||||
@ -380,13 +375,13 @@ class Entity {
|
|||||||
p.y = cartesian.y;
|
p.y = cartesian.y;
|
||||||
p.z = cartesian.z;
|
p.z = cartesian.z;
|
||||||
|
|
||||||
//billboards
|
// billboards
|
||||||
this.billboard && this.billboard.setPosition3v(p);
|
this.billboard && this.billboard.setPosition3v(p);
|
||||||
|
|
||||||
//labels
|
// labels
|
||||||
this.label && this.label.setPosition3v(p);
|
this.label && this.label.setPosition3v(p);
|
||||||
|
|
||||||
//shape
|
// shape
|
||||||
this.shape && this.shape.setPosition3v(p);
|
this.shape && this.shape.setPosition3v(p);
|
||||||
|
|
||||||
for (var i = 0; i < this.childrenNodes.length; i++) {
|
for (var i = 0; i < this.childrenNodes.length; i++) {
|
||||||
@ -641,22 +636,22 @@ class Entity {
|
|||||||
|
|
||||||
var c = this._pickingColor;
|
var c = this._pickingColor;
|
||||||
|
|
||||||
//billboard
|
// billboard
|
||||||
this.billboard && this.billboard.setPickingColor3v(c);
|
this.billboard && this.billboard.setPickingColor3v(c);
|
||||||
|
|
||||||
//label
|
// label
|
||||||
this.label && this.label.setPickingColor3v(c);
|
this.label && this.label.setPickingColor3v(c);
|
||||||
|
|
||||||
//shape
|
// shape
|
||||||
this.shape && this.shape.setPickingColor3v(c);
|
this.shape && this.shape.setPickingColor3v(c);
|
||||||
|
|
||||||
//polyline
|
// polyline
|
||||||
this.polyline && this.polyline.setPickingColor3v(c);
|
this.polyline && this.polyline.setPickingColor3v(c);
|
||||||
|
|
||||||
//ray
|
// ray
|
||||||
this.ray && this.ray.setPickingColor3v(c);
|
this.ray && this.ray.setPickingColor3v(c);
|
||||||
|
|
||||||
//strip
|
// strip
|
||||||
this.strip && this.strip.setPickingColor3v(c);
|
this.strip && this.strip.setPickingColor3v(c);
|
||||||
|
|
||||||
for (var i = 0; i < this.childrenNodes.length; i++) {
|
for (var i = 0; i < this.childrenNodes.length; i++) {
|
||||||
@ -681,7 +676,7 @@ class Entity {
|
|||||||
ne = res.northEast;
|
ne = res.northEast;
|
||||||
|
|
||||||
if (this.polyline) {
|
if (this.polyline) {
|
||||||
var e = this.polyline.getExtent();
|
let e = this.polyline.getExtent();
|
||||||
if (e.southWest.lon < sw.lon) sw.lon = e.southWest.lon;
|
if (e.southWest.lon < sw.lon) sw.lon = e.southWest.lon;
|
||||||
if (e.southWest.lat < sw.lat) sw.lat = e.southWest.lat;
|
if (e.southWest.lat < sw.lat) sw.lat = e.southWest.lat;
|
||||||
if (e.northEast.lon > ne.lon) ne.lon = e.northEast.lon;
|
if (e.northEast.lon > ne.lon) ne.lon = e.northEast.lon;
|
||||||
@ -689,7 +684,7 @@ class Entity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.geometry) {
|
if (this.geometry) {
|
||||||
var e = this.geometry.getExtent();
|
let e = this.geometry.getExtent();
|
||||||
if (e.southWest.lon < sw.lon) sw.lon = e.southWest.lon;
|
if (e.southWest.lon < sw.lon) sw.lon = e.southWest.lon;
|
||||||
if (e.southWest.lat < sw.lat) sw.lat = e.southWest.lat;
|
if (e.southWest.lat < sw.lat) sw.lat = e.southWest.lat;
|
||||||
if (e.northEast.lon > ne.lon) ne.lon = e.northEast.lon;
|
if (e.northEast.lon > ne.lon) ne.lon = e.northEast.lon;
|
||||||
@ -697,7 +692,7 @@ class Entity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (var i = 0; i < this.childrenNodes.length; i++) {
|
for (var i = 0; i < this.childrenNodes.length; i++) {
|
||||||
var e = this.childrenNodes[i].getExtent();
|
let e = this.childrenNodes[i].getExtent();
|
||||||
if (e.southWest.lon < sw.lon) sw.lon = e.southWest.lon;
|
if (e.southWest.lon < sw.lon) sw.lon = e.southWest.lon;
|
||||||
if (e.southWest.lat < sw.lat) sw.lat = e.southWest.lat;
|
if (e.southWest.lat < sw.lat) sw.lat = e.southWest.lat;
|
||||||
if (e.northEast.lon > ne.lon) ne.lon = e.northEast.lon;
|
if (e.northEast.lon > ne.lon) ne.lon = e.northEast.lon;
|
||||||
|
|||||||
@ -158,8 +158,6 @@ class EntityCollection {
|
|||||||
* @type {og.StripHandler}
|
* @type {og.StripHandler}
|
||||||
*/
|
*/
|
||||||
this.stripHandler = new StripHandler(this);
|
this.stripHandler = new StripHandler(this);
|
||||||
//
|
|
||||||
//...
|
|
||||||
|
|
||||||
if (options.pickingEnabled != undefined) {
|
if (options.pickingEnabled != undefined) {
|
||||||
this.setPickingEnabled(options.pickingEnabled);
|
this.setPickingEnabled(options.pickingEnabled);
|
||||||
@ -206,9 +204,10 @@ class EntityCollection {
|
|||||||
|
|
||||||
this.rendererEvents = this.events;
|
this.rendererEvents = this.events;
|
||||||
|
|
||||||
//initialize current entities
|
// initialize current entities
|
||||||
if (options.entities)
|
if (options.entities) {
|
||||||
this.addEntities(options.entities);
|
this.addEntities(options.entities);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static get _staticCounter() {
|
static get _staticCounter() {
|
||||||
@ -295,25 +294,25 @@ class EntityCollection {
|
|||||||
|
|
||||||
_addRecursively(entity) {
|
_addRecursively(entity) {
|
||||||
|
|
||||||
//billboard
|
// billboard
|
||||||
entity.billboard && this.billboardHandler.add(entity.billboard);
|
entity.billboard && this.billboardHandler.add(entity.billboard);
|
||||||
|
|
||||||
//label
|
// label
|
||||||
entity.label && this.labelHandler.add(entity.label);
|
entity.label && this.labelHandler.add(entity.label);
|
||||||
|
|
||||||
//shape
|
// shape
|
||||||
entity.shape && this.shapeHandler.add(entity.shape);
|
entity.shape && this.shapeHandler.add(entity.shape);
|
||||||
|
|
||||||
//polyline
|
// polyline
|
||||||
entity.polyline && this.polylineHandler.add(entity.polyline);
|
entity.polyline && this.polylineHandler.add(entity.polyline);
|
||||||
|
|
||||||
//ray
|
// ray
|
||||||
entity.ray && this.rayHandler.add(entity.ray);
|
entity.ray && this.rayHandler.add(entity.ray);
|
||||||
|
|
||||||
//pointCloud
|
// pointCloud
|
||||||
entity.pointCloud && this.pointCloudHandler.add(entity.pointCloud);
|
entity.pointCloud && this.pointCloudHandler.add(entity.pointCloud);
|
||||||
|
|
||||||
//strip
|
// strip
|
||||||
entity.strip && this.stripHandler.add(entity.strip);
|
entity.strip && this.stripHandler.add(entity.strip);
|
||||||
|
|
||||||
this.events.dispatch(this.events.entityadd, entity);
|
this.events.dispatch(this.events.entityadd, entity);
|
||||||
@ -377,25 +376,25 @@ class EntityCollection {
|
|||||||
entity._entityCollection = null;
|
entity._entityCollection = null;
|
||||||
entity._entityCollectionIndex = -1;
|
entity._entityCollectionIndex = -1;
|
||||||
|
|
||||||
//billboard
|
// billboard
|
||||||
entity.billboard && this.billboardHandler.remove(entity.billboard);
|
entity.billboard && this.billboardHandler.remove(entity.billboard);
|
||||||
|
|
||||||
//label
|
// label
|
||||||
entity.label && this.labelHandler.remove(entity.label);
|
entity.label && this.labelHandler.remove(entity.label);
|
||||||
|
|
||||||
//shape
|
// shape
|
||||||
entity.shape && this.shapeHandler.remove(entity.shape);
|
entity.shape && this.shapeHandler.remove(entity.shape);
|
||||||
|
|
||||||
//polyline
|
// polyline
|
||||||
entity.polyline && this.polylineHandler.remove(entity.polyline);
|
entity.polyline && this.polylineHandler.remove(entity.polyline);
|
||||||
|
|
||||||
//ray
|
// ray
|
||||||
entity.ray && this.rayHandler.remove(entity.ray);
|
entity.ray && this.rayHandler.remove(entity.ray);
|
||||||
|
|
||||||
//pointCloud
|
// pointCloud
|
||||||
entity.pointCloud && this.pointCloudHandler.remove(entity.pointCloud);
|
entity.pointCloud && this.pointCloudHandler.remove(entity.pointCloud);
|
||||||
|
|
||||||
//strip
|
// strip
|
||||||
entity.strip && this.stripHandler.remove(entity.strip);
|
entity.strip && this.stripHandler.remove(entity.strip);
|
||||||
|
|
||||||
for (var i = 0; i < entity.childrenNodes.length; i++) {
|
for (var i = 0; i < entity.childrenNodes.length; i++) {
|
||||||
@ -412,7 +411,7 @@ class EntityCollection {
|
|||||||
this._entities.splice(entity._entityCollectionIndex, 1);
|
this._entities.splice(entity._entityCollectionIndex, 1);
|
||||||
this.reindexEntitiesArray(entity._entityCollectionIndex);
|
this.reindexEntitiesArray(entity._entityCollectionIndex);
|
||||||
|
|
||||||
//clear picking color
|
// clear picking color
|
||||||
if (this.renderNode && this.renderNode.renderer) {
|
if (this.renderNode && this.renderNode.renderer) {
|
||||||
this.renderNode.renderer.clearPickingColor(entity);
|
this.renderNode.renderer.clearPickingColor(entity);
|
||||||
entity._pickingColor.clear();
|
entity._pickingColor.clear();
|
||||||
@ -429,7 +428,7 @@ class EntityCollection {
|
|||||||
this._entities.splice(entity._entityCollectionIndex, 1);
|
this._entities.splice(entity._entityCollectionIndex, 1);
|
||||||
this.reindexEntitiesArray(entity._entityCollectionIndex);
|
this.reindexEntitiesArray(entity._entityCollectionIndex);
|
||||||
|
|
||||||
//clear picking color
|
// clear picking color
|
||||||
if (this.renderNode && this.renderNode.renderer) {
|
if (this.renderNode && this.renderNode.renderer) {
|
||||||
this.renderNode.renderer.clearPickingColor(entity);
|
this.renderNode.renderer.clearPickingColor(entity);
|
||||||
entity._pickingColor.clear();
|
entity._pickingColor.clear();
|
||||||
@ -511,6 +510,7 @@ class EntityCollection {
|
|||||||
this.createPickingColors();
|
this.createPickingColors();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates coordiantes all lonLat entities in collection after collecction attached to the planet node.
|
* Updates coordiantes all lonLat entities in collection after collecction attached to the planet node.
|
||||||
* @private
|
* @private
|
||||||
@ -557,7 +557,7 @@ class EntityCollection {
|
|||||||
if (this.renderNode) {
|
if (this.renderNode) {
|
||||||
if (this._renderNodeIndex !== -1) {
|
if (this._renderNodeIndex !== -1) {
|
||||||
this.renderNode.entityCollections.splice(this._renderNodeIndex, 1);
|
this.renderNode.entityCollections.splice(this._renderNodeIndex, 1);
|
||||||
//reindex in the renderNode
|
// reindex in the renderNode
|
||||||
for (var i = this._renderNodeIndex; i < this.renderNode.entityCollections.length; i++) {
|
for (var i = this._renderNodeIndex; i < this.renderNode.entityCollections.length; i++) {
|
||||||
this.renderNode.entityCollections._renderNodeIndex = i;
|
this.renderNode.entityCollections._renderNodeIndex = i;
|
||||||
}
|
}
|
||||||
@ -596,8 +596,8 @@ class EntityCollection {
|
|||||||
*/
|
*/
|
||||||
clear() {
|
clear() {
|
||||||
|
|
||||||
//TODO: Optimize by replace delete
|
// TODO: Optimize by replace delete
|
||||||
//code to the clearEntity function.
|
// code to the clearEntity function.
|
||||||
this.billboardHandler.clear();
|
this.billboardHandler.clear();
|
||||||
this.labelHandler.clear();
|
this.labelHandler.clear();
|
||||||
this.shapeHandler.clear();
|
this.shapeHandler.clear();
|
||||||
@ -633,7 +633,6 @@ class EntityCollection {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const EVENT_NAMES = [
|
const EVENT_NAMES = [
|
||||||
/**
|
/**
|
||||||
* Triggered when entity has moved.
|
* Triggered when entity has moved.
|
||||||
|
|||||||
@ -34,14 +34,14 @@ class Geometry {
|
|||||||
this._handler = null;
|
this._handler = null;
|
||||||
this._handlerIndex = -1;
|
this._handlerIndex = -1;
|
||||||
|
|
||||||
//Polygon
|
// Polygon
|
||||||
this._polyVerticesMerc = [];
|
this._polyVerticesMerc = [];
|
||||||
this._polyVerticesLength = -1;
|
this._polyVerticesLength = -1;
|
||||||
this._polyIndexesLength = -1;
|
this._polyIndexesLength = -1;
|
||||||
this._polyVerticesHandlerIndex = -1;
|
this._polyVerticesHandlerIndex = -1;
|
||||||
this._polyIndexesHandlerIndex = -1;
|
this._polyIndexesHandlerIndex = -1;
|
||||||
|
|
||||||
//Line(Linestring and polygon's stroke(s)
|
// Line(Linestring and polygon's stroke(s)
|
||||||
this._lineVerticesMerc = [];
|
this._lineVerticesMerc = [];
|
||||||
this._lineVerticesLength = -1;
|
this._lineVerticesLength = -1;
|
||||||
this._lineOrdersLength = -1;
|
this._lineOrdersLength = -1;
|
||||||
@ -54,11 +54,11 @@ class Geometry {
|
|||||||
this._lineThicknessHandlerIndex = -1;
|
this._lineThicknessHandlerIndex = -1;
|
||||||
this._lineColorsHandlerIndex = -1;
|
this._lineColorsHandlerIndex = -1;
|
||||||
|
|
||||||
this._type = options.type && Geometry.getType(options.type) || GeometryType.POINT;
|
this._type = (options.type && Geometry.getType(options.type)) || GeometryType.POINT;
|
||||||
this._coordinates = [];
|
this._coordinates = [];
|
||||||
this._extent = Geometry.getExtent({
|
this._extent = Geometry.getExtent({
|
||||||
'type': options.type || "Point",
|
type: options.type || "Point",
|
||||||
'coordinates': options.coordinates || []
|
coordinates: options.coordinates || []
|
||||||
}, this._coordinates);
|
}, this._coordinates);
|
||||||
|
|
||||||
this._style = options.style || {};
|
this._style = options.style || {};
|
||||||
@ -70,7 +70,7 @@ class Geometry {
|
|||||||
|
|
||||||
this._visibility = options.visibility || true;
|
this._visibility = options.visibility || true;
|
||||||
|
|
||||||
//optimization flag for picking mask rendering pass
|
// optimization flag for picking mask rendering pass
|
||||||
this._pickingReady = false;
|
this._pickingReady = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,7 +198,7 @@ class Geometry {
|
|||||||
|
|
||||||
setFillColor(r, g, b, a) {
|
setFillColor(r, g, b, a) {
|
||||||
var c = this._style.fillColor;
|
var c = this._style.fillColor;
|
||||||
if (c.w === 0.0 && a !== 0.0 || c.w !== 0.0 && a === 0.0) {
|
if ((c.w === 0.0 && a !== 0.0) || (c.w !== 0.0 && a === 0.0)) {
|
||||||
this._pickingReady = false;
|
this._pickingReady = false;
|
||||||
}
|
}
|
||||||
c.x = r;
|
c.x = r;
|
||||||
@ -215,7 +215,7 @@ class Geometry {
|
|||||||
|
|
||||||
setStrokeColor(r, g, b, a) {
|
setStrokeColor(r, g, b, a) {
|
||||||
var c = this._style.strokeColor;
|
var c = this._style.strokeColor;
|
||||||
if (c.w === 0.0 && a !== 0.0 || c.w !== 0.0 && a === 0.0) {
|
if ((c.w === 0.0 && a !== 0.0) || (c.w !== 0.0 && a === 0.0)) {
|
||||||
this._pickingReady = false;
|
this._pickingReady = false;
|
||||||
}
|
}
|
||||||
c.x = r;
|
c.x = r;
|
||||||
@ -228,7 +228,7 @@ class Geometry {
|
|||||||
|
|
||||||
setLineColor(r, g, b, a) {
|
setLineColor(r, g, b, a) {
|
||||||
var c = this._style.lineColor;
|
var c = this._style.lineColor;
|
||||||
if (c.w === 0.0 && a !== 0.0 || c.w !== 0.0 && a === 0.0) {
|
if ((c.w === 0.0 && a !== 0.0) || (c.w !== 0.0 && a === 0.0)) {
|
||||||
this._pickingReady = false;
|
this._pickingReady = false;
|
||||||
}
|
}
|
||||||
c.x = r;
|
c.x = r;
|
||||||
@ -280,7 +280,7 @@ class Geometry {
|
|||||||
|
|
||||||
setFillOpacity(opacity) {
|
setFillOpacity(opacity) {
|
||||||
var c = this._style.fillColor;
|
var c = this._style.fillColor;
|
||||||
if (c.w === 0.0 && opacity !== 0.0 || c.w !== 0.0 && opacity === 0.0) {
|
if ((c.w === 0.0 && opacity !== 0.0) || (c.w !== 0.0 && opacity === 0.0)) {
|
||||||
this._pickingReady = false;
|
this._pickingReady = false;
|
||||||
}
|
}
|
||||||
c.w = opacity;
|
c.w = opacity;
|
||||||
|
|||||||
@ -38,13 +38,13 @@ class GeometryHandler {
|
|||||||
this._removeGeometryExtentArr = [];
|
this._removeGeometryExtentArr = [];
|
||||||
this._removeGeometryExtents = {};
|
this._removeGeometryExtents = {};
|
||||||
|
|
||||||
//Polygon arrays
|
// Polygon arrays
|
||||||
this._polyVerticesMerc = [];
|
this._polyVerticesMerc = [];
|
||||||
this._polyColors = [];
|
this._polyColors = [];
|
||||||
this._polyPickingColors = [];
|
this._polyPickingColors = [];
|
||||||
this._polyIndexes = [];
|
this._polyIndexes = [];
|
||||||
|
|
||||||
//Line arrays
|
// Line arrays
|
||||||
this._lineVerticesMerc = [];
|
this._lineVerticesMerc = [];
|
||||||
this._lineOrders = [];
|
this._lineOrders = [];
|
||||||
this._lineIndexes = [];
|
this._lineIndexes = [];
|
||||||
@ -54,7 +54,7 @@ class GeometryHandler {
|
|||||||
this._lineStrokes = [];
|
this._lineStrokes = [];
|
||||||
this._lineStrokeColors = [];
|
this._lineStrokeColors = [];
|
||||||
|
|
||||||
//Buffers
|
// Buffers
|
||||||
this._polyVerticesBufferMerc = null;
|
this._polyVerticesBufferMerc = null;
|
||||||
this._polyColorsBuffer = null;
|
this._polyColorsBuffer = null;
|
||||||
this._polyPickingColorsBuffer = null;
|
this._polyPickingColorsBuffer = null;
|
||||||
@ -245,7 +245,7 @@ class GeometryHandler {
|
|||||||
geometry._polyVerticesLength = data.vertices.length;
|
geometry._polyVerticesLength = data.vertices.length;
|
||||||
geometry._polyIndexesLength = indexes.length;
|
geometry._polyIndexesLength = indexes.length;
|
||||||
|
|
||||||
//Creates polygon stroke data
|
// Creates polygon stroke data
|
||||||
geometry._lineVerticesHandlerIndex = this._lineVerticesMerc.length;
|
geometry._lineVerticesHandlerIndex = this._lineVerticesMerc.length;
|
||||||
geometry._lineOrdersHandlerIndex = this._lineOrders.length;
|
geometry._lineOrdersHandlerIndex = this._lineOrders.length;
|
||||||
geometry._lineIndexesHandlerIndex = this._lineIndexes.length;
|
geometry._lineIndexesHandlerIndex = this._lineIndexes.length;
|
||||||
@ -268,10 +268,9 @@ class GeometryHandler {
|
|||||||
|
|
||||||
let coordinates = geometry._coordinates;
|
let coordinates = geometry._coordinates;
|
||||||
let vertices = [],
|
let vertices = [],
|
||||||
indexes = [],
|
indexes = [];
|
||||||
colors = [];
|
|
||||||
|
|
||||||
//Creates polygon stroke data
|
// Creates polygon stroke data
|
||||||
geometry._lineVerticesHandlerIndex = this._lineVerticesMerc.length;
|
geometry._lineVerticesHandlerIndex = this._lineVerticesMerc.length;
|
||||||
geometry._lineOrdersHandlerIndex = this._lineOrders.length;
|
geometry._lineOrdersHandlerIndex = this._lineOrders.length;
|
||||||
geometry._lineIndexesHandlerIndex = this._lineIndexes.length;
|
geometry._lineIndexesHandlerIndex = this._lineIndexes.length;
|
||||||
@ -336,7 +335,7 @@ class GeometryHandler {
|
|||||||
ci[j] = [mercator.forward_lon(coordinates[j][0]), mercator.forward_lat(coordinates[j][1])];
|
ci[j] = [mercator.forward_lon(coordinates[j][0]), mercator.forward_lat(coordinates[j][1])];
|
||||||
}
|
}
|
||||||
|
|
||||||
//Creates polygon stroke data
|
// Creates polygon stroke data
|
||||||
geometry._lineVerticesHandlerIndex = this._lineVerticesMerc.length;
|
geometry._lineVerticesHandlerIndex = this._lineVerticesMerc.length;
|
||||||
geometry._lineOrdersHandlerIndex = this._lineOrders.length;
|
geometry._lineOrdersHandlerIndex = this._lineOrders.length;
|
||||||
geometry._lineIndexesHandlerIndex = this._lineIndexes.length;
|
geometry._lineIndexesHandlerIndex = this._lineIndexes.length;
|
||||||
@ -365,7 +364,7 @@ class GeometryHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Creates polygon stroke data
|
// Creates polygon stroke data
|
||||||
geometry._lineVerticesHandlerIndex = this._lineVerticesMerc.length;
|
geometry._lineVerticesHandlerIndex = this._lineVerticesMerc.length;
|
||||||
geometry._lineOrdersHandlerIndex = this._lineOrders.length;
|
geometry._lineOrdersHandlerIndex = this._lineOrders.length;
|
||||||
geometry._lineIndexesHandlerIndex = this._lineIndexes.length;
|
geometry._lineIndexesHandlerIndex = this._lineIndexes.length;
|
||||||
@ -385,7 +384,7 @@ class GeometryHandler {
|
|||||||
geometry._lineThicknessLength = this._lineThickness.length - geometry._lineThicknessHandlerIndex;
|
geometry._lineThicknessLength = this._lineThickness.length - geometry._lineThicknessHandlerIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Refresh visibility
|
// Refresh visibility
|
||||||
this.setGeometryVisibility(geometry);
|
this.setGeometryVisibility(geometry);
|
||||||
|
|
||||||
!this._updatedGeometry[geometry._id] && this._updatedGeometryArr.push(geometry);
|
!this._updatedGeometry[geometry._id] && this._updatedGeometryArr.push(geometry);
|
||||||
@ -399,8 +398,8 @@ class GeometryHandler {
|
|||||||
if (index !== -1) {
|
if (index !== -1) {
|
||||||
this._geometries.splice(index, 1);
|
this._geometries.splice(index, 1);
|
||||||
|
|
||||||
//polygon
|
// polygon
|
||||||
//this._polyVerticesLonLat.splice(geometry._polyVerticesHandlerIndex, geometry._polyVerticesLength);
|
// this._polyVerticesLonLat.splice(geometry._polyVerticesHandlerIndex, geometry._polyVerticesLength);
|
||||||
this._polyVerticesMerc.splice(geometry._polyVerticesHandlerIndex, geometry._polyVerticesLength);
|
this._polyVerticesMerc.splice(geometry._polyVerticesHandlerIndex, geometry._polyVerticesLength);
|
||||||
this._polyColors.splice(geometry._polyVerticesHandlerIndex * 2, geometry._polyVerticesLength * 2);
|
this._polyColors.splice(geometry._polyVerticesHandlerIndex * 2, geometry._polyVerticesLength * 2);
|
||||||
this._polyPickingColors.splice(geometry._polyVerticesHandlerIndex * 2, geometry._polyVerticesLength * 2);
|
this._polyPickingColors.splice(geometry._polyVerticesHandlerIndex * 2, geometry._polyVerticesLength * 2);
|
||||||
@ -410,8 +409,8 @@ class GeometryHandler {
|
|||||||
this._polyIndexes[i] -= di;
|
this._polyIndexes[i] -= di;
|
||||||
}
|
}
|
||||||
|
|
||||||
//line
|
// line
|
||||||
//this._lineVerticesLonLat.splice(geometry._lineVerticesHandlerIndex, geometry._lineVerticesLength);
|
// this._lineVerticesLonLat.splice(geometry._lineVerticesHandlerIndex, geometry._lineVerticesLength);
|
||||||
this._lineVerticesMerc.splice(geometry._lineVerticesHandlerIndex, geometry._lineVerticesLength);
|
this._lineVerticesMerc.splice(geometry._lineVerticesHandlerIndex, geometry._lineVerticesLength);
|
||||||
this._lineOrders.splice(geometry._lineOrdersHandlerIndex, geometry._lineOrdersLength);
|
this._lineOrders.splice(geometry._lineOrdersHandlerIndex, geometry._lineOrdersLength);
|
||||||
this._lineColors.splice(geometry._lineColorsHandlerIndex, geometry._lineColorsLength);
|
this._lineColors.splice(geometry._lineColorsHandlerIndex, geometry._lineColorsLength);
|
||||||
@ -425,7 +424,7 @@ class GeometryHandler {
|
|||||||
this._lineIndexes[i] -= di;
|
this._lineIndexes[i] -= di;
|
||||||
}
|
}
|
||||||
|
|
||||||
//reindex
|
// reindex
|
||||||
var g = this._geometries;
|
var g = this._geometries;
|
||||||
for (let i = index; i < g.length; i++) {
|
for (let i = index; i < g.length; i++) {
|
||||||
var gi = g[i];
|
var gi = g[i];
|
||||||
|
|||||||
@ -8,7 +8,6 @@ import * as utils from '../utils/shared.js';
|
|||||||
import { BaseBillboard } from './BaseBillboard.js';
|
import { BaseBillboard } from './BaseBillboard.js';
|
||||||
import { Vec4 } from '../math/Vec4.js';
|
import { Vec4 } from '../math/Vec4.js';
|
||||||
|
|
||||||
|
|
||||||
const ALIGN = {
|
const ALIGN = {
|
||||||
RIGHT: 0,
|
RIGHT: 0,
|
||||||
LEFT: 1,
|
LEFT: 1,
|
||||||
@ -21,9 +20,9 @@ const ALIGN = {
|
|||||||
* @enum {number}
|
* @enum {number}
|
||||||
*/
|
*/
|
||||||
const STR2ALIGN = {
|
const STR2ALIGN = {
|
||||||
"left": ALIGN.LEFT,
|
left: ALIGN.LEFT,
|
||||||
"right": ALIGN.RIGHT,
|
right: ALIGN.RIGHT,
|
||||||
"center": ALIGN.CENTER
|
center: ALIGN.CENTER
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -50,7 +50,6 @@ class LabelHandler extends BillboardHandler {
|
|||||||
this._maxLetters = 25;
|
this._maxLetters = 25;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
initProgram() {
|
initProgram() {
|
||||||
if (this._renderer.handler) {
|
if (this._renderer.handler) {
|
||||||
|
|
||||||
@ -170,7 +169,7 @@ class LabelHandler extends BillboardHandler {
|
|||||||
var x = label._positionHigh.x, y = label._positionHigh.y, z = label._positionHigh.z, w;
|
var x = label._positionHigh.x, y = label._positionHigh.y, z = label._positionHigh.z, w;
|
||||||
BillboardHandler.concArr(this._positionHighArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
BillboardHandler.concArr(this._positionHighArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
||||||
|
|
||||||
x = label._positionLow.x, y = label._positionLow.y, z = label._positionLow.z;
|
x = label._positionLow.x; y = label._positionLow.y; z = label._positionLow.z;
|
||||||
BillboardHandler.concArr(this._positionLowArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
BillboardHandler.concArr(this._positionLowArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
||||||
|
|
||||||
x = label._size;
|
x = label._size;
|
||||||
@ -185,22 +184,22 @@ class LabelHandler extends BillboardHandler {
|
|||||||
x = label._rotation;
|
x = label._rotation;
|
||||||
BillboardHandler.concArr(this._rotationArr, [x, x, x, x, x, x]);
|
BillboardHandler.concArr(this._rotationArr, [x, x, x, x, x, x]);
|
||||||
|
|
||||||
x = label._alignedAxis.x, y = label._alignedAxis.y, z = label._alignedAxis.z;
|
x = label._alignedAxis.x; y = label._alignedAxis.y; z = label._alignedAxis.z;
|
||||||
BillboardHandler.concArr(this._alignedAxisArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
BillboardHandler.concArr(this._alignedAxisArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
||||||
|
|
||||||
x = label._fontIndex;
|
x = label._fontIndex;
|
||||||
BillboardHandler.concArr(this._fontIndexArr, [0, 0, 0, 0, 0, 0]);
|
BillboardHandler.concArr(this._fontIndexArr, [0, 0, 0, 0, 0, 0]);
|
||||||
|
|
||||||
x = 1.0 - label._outline, y = 0.0;
|
x = 1.0 - label._outline; y = 0.0;
|
||||||
BillboardHandler.concArr(this._outlineArr, [x, y, x, y, x, y, x, y, x, y, x, y]);
|
BillboardHandler.concArr(this._outlineArr, [x, y, x, y, x, y, x, y, x, y, x, y]);
|
||||||
|
|
||||||
x = 0.75, y = 0.7;
|
x = 0.75; y = 0.7;
|
||||||
BillboardHandler.concArr(this._noOutlineArr, [x, y, x, y, x, y, x, y, x, y, x, y]);
|
BillboardHandler.concArr(this._noOutlineArr, [x, y, x, y, x, y, x, y, x, y, x, y]);
|
||||||
|
|
||||||
x = label._outlineColor.x; y = label._outlineColor.y; z = label._outlineColor.z; w = label._outlineColor.w;
|
x = label._outlineColor.x; y = label._outlineColor.y; z = label._outlineColor.z; w = label._outlineColor.w;
|
||||||
BillboardHandler.concArr(this._outlineColorArr, [x, y, z, w, x, y, z, w, x, y, z, w, x, y, z, w, x, y, z, w, x, y, z, w]);
|
BillboardHandler.concArr(this._outlineColorArr, [x, y, z, w, x, y, z, w, x, y, z, w, x, y, z, w, x, y, z, w, x, y, z, w]);
|
||||||
|
|
||||||
x = label._entity._pickingColor.x / 255, y = label._entity._pickingColor.y / 255, z = label._entity._pickingColor.z / 255;
|
x = label._entity._pickingColor.x / 255; y = label._entity._pickingColor.y / 255; z = label._entity._pickingColor.z / 255;
|
||||||
BillboardHandler.concArr(this._pickingColorArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
BillboardHandler.concArr(this._pickingColorArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -261,7 +260,7 @@ class LabelHandler extends BillboardHandler {
|
|||||||
gl.bindBuffer(gl.ARRAY_BUFFER, this._fontIndexBuffer);
|
gl.bindBuffer(gl.ARRAY_BUFFER, this._fontIndexBuffer);
|
||||||
gl.vertexAttribPointer(sha.a_fontIndex, this._fontIndexBuffer.itemSize, gl.FLOAT, false, 0, 0);
|
gl.vertexAttribPointer(sha.a_fontIndex, this._fontIndexBuffer.itemSize, gl.FLOAT, false, 0, 0);
|
||||||
|
|
||||||
//buffer
|
// buffer
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, this._outlineColorBuffer);
|
gl.bindBuffer(gl.ARRAY_BUFFER, this._outlineColorBuffer);
|
||||||
gl.vertexAttribPointer(sha.a_rgba, this._outlineColorBuffer.itemSize, gl.FLOAT, false, 0, 0);
|
gl.vertexAttribPointer(sha.a_rgba, this._outlineColorBuffer.itemSize, gl.FLOAT, false, 0, 0);
|
||||||
|
|
||||||
@ -271,7 +270,7 @@ class LabelHandler extends BillboardHandler {
|
|||||||
gl.uniform1f(shu.uZ, -2.0);
|
gl.uniform1f(shu.uZ, -2.0);
|
||||||
gl.drawArrays(gl.TRIANGLES, 0, this._vertexBuffer.numItems);
|
gl.drawArrays(gl.TRIANGLES, 0, this._vertexBuffer.numItems);
|
||||||
|
|
||||||
//nobuffer
|
// nobuffer
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, this._rgbaBuffer);
|
gl.bindBuffer(gl.ARRAY_BUFFER, this._rgbaBuffer);
|
||||||
gl.vertexAttribPointer(sha.a_rgba, this._rgbaBuffer.itemSize, gl.FLOAT, false, 0, 0);
|
gl.vertexAttribPointer(sha.a_rgba, this._rgbaBuffer.itemSize, gl.FLOAT, false, 0, 0);
|
||||||
|
|
||||||
@ -374,8 +373,8 @@ class LabelHandler extends BillboardHandler {
|
|||||||
|
|
||||||
label._handlerIndex = -1;
|
label._handlerIndex = -1;
|
||||||
label._handler = null;
|
label._handler = null;
|
||||||
//label._fontIndex = 0;
|
// label._fontIndex = 0;
|
||||||
//label._fontAtlas = null;
|
// label._fontAtlas = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
setText(index, text, fontIndex, align) {
|
setText(index, text, fontIndex, align) {
|
||||||
@ -389,14 +388,14 @@ class LabelHandler extends BillboardHandler {
|
|||||||
|
|
||||||
var c = 0;
|
var c = 0;
|
||||||
|
|
||||||
var j = i + c * 24;
|
// var j = i + c * 24;
|
||||||
var n = fa.nodes[text[c]];
|
var n = fa.nodes[text[c]];
|
||||||
var f = n ? n.emptySize : 0.0;
|
var f = n ? n.emptySize : 0.0;
|
||||||
var offset = f;
|
var offset = f;
|
||||||
|
|
||||||
for (c = 0; c < text.length; c++) {
|
for (c = 0; c < text.length; c++) {
|
||||||
var j = i + c * 24;
|
var j = i + c * 24;
|
||||||
var n = fa.nodes[text[c]] || fa.nodes[" "];
|
n = fa.nodes[text[c]] || fa.nodes[" "];
|
||||||
var tc = n.texCoords;
|
var tc = n.texCoords;
|
||||||
|
|
||||||
a[j] = tc[0];
|
a[j] = tc[0];
|
||||||
@ -432,11 +431,11 @@ class LabelHandler extends BillboardHandler {
|
|||||||
offset += n.emptySize;
|
offset += n.emptySize;
|
||||||
}
|
}
|
||||||
|
|
||||||
//49/512 - font atlas left border letter offset
|
// 49/512 - font atlas left border letter offset
|
||||||
if (align === ALIGN.CENTER) {
|
if (align === ALIGN.CENTER) {
|
||||||
offset = (f + 49 / 512 - offset) * 0.5;
|
offset = (f + 49 / 512 - offset) * 0.5;
|
||||||
for (c = 0; c < text.length; c++) {
|
for (c = 0; c < text.length; c++) {
|
||||||
var j = i + c * 24;
|
let j = i + c * 24;
|
||||||
a[j + 3] = offset;
|
a[j + 3] = offset;
|
||||||
a[j + 7] = offset;
|
a[j + 7] = offset;
|
||||||
a[j + 11] = offset;
|
a[j + 11] = offset;
|
||||||
@ -447,7 +446,7 @@ class LabelHandler extends BillboardHandler {
|
|||||||
} else if (align === ALIGN.LEFT) {
|
} else if (align === ALIGN.LEFT) {
|
||||||
offset = (f + 49 / 512 - offset);
|
offset = (f + 49 / 512 - offset);
|
||||||
for (c = 0; c < text.length; c++) {
|
for (c = 0; c < text.length; c++) {
|
||||||
var j = i + c * 24;
|
let j = i + c * 24;
|
||||||
a[j + 3] = offset;
|
a[j + 3] = offset;
|
||||||
a[j + 7] = offset;
|
a[j + 7] = offset;
|
||||||
a[j + 11] = offset;
|
a[j + 11] = offset;
|
||||||
@ -458,7 +457,7 @@ class LabelHandler extends BillboardHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (; c < this._maxLetters; c++) {
|
for (; c < this._maxLetters; c++) {
|
||||||
var j = i + c * 24;
|
let j = i + c * 24;
|
||||||
a[j + 2] = -1.0;
|
a[j + 2] = -1.0;
|
||||||
a[j + 6] = -1.0;
|
a[j + 6] = -1.0;
|
||||||
a[j + 10] = -1.0;
|
a[j + 10] = -1.0;
|
||||||
@ -473,7 +472,7 @@ class LabelHandler extends BillboardHandler {
|
|||||||
setPositionArr(index, positionHigh, positionLow) {
|
setPositionArr(index, positionHigh, positionLow) {
|
||||||
var i = index * 18 * this._maxLetters;
|
var i = index * 18 * this._maxLetters;
|
||||||
var a = this._positionHighArr, x = positionHigh.x, y = positionHigh.y, z = positionHigh.z,
|
var a = this._positionHighArr, x = positionHigh.x, y = positionHigh.y, z = positionHigh.z,
|
||||||
b = this._positionLowArr, xl = positionLow.x, yl = positionLow.y, zl = positionLow.z
|
b = this._positionLowArr, xl = positionLow.x, yl = positionLow.y, zl = positionLow.z;
|
||||||
|
|
||||||
for (var q = 0; q < this._maxLetters; q++) {
|
for (var q = 0; q < this._maxLetters; q++) {
|
||||||
var j = i + q * 18;
|
var j = i + q * 18;
|
||||||
@ -501,7 +500,7 @@ class LabelHandler extends BillboardHandler {
|
|||||||
a[j + 16] = y;
|
a[j + 16] = y;
|
||||||
a[j + 17] = z;
|
a[j + 17] = z;
|
||||||
|
|
||||||
//low
|
// low
|
||||||
b[j] = xl;
|
b[j] = xl;
|
||||||
b[j + 1] = yl;
|
b[j + 1] = yl;
|
||||||
b[j + 2] = zl;
|
b[j + 2] = zl;
|
||||||
@ -731,7 +730,7 @@ class LabelHandler extends BillboardHandler {
|
|||||||
a[j + 5] = rotation;
|
a[j + 5] = rotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
this._changedBuffers[ROTATION_BUFFER] = true
|
this._changedBuffers[ROTATION_BUFFER] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
setVertexArr(index, vertexArr) {
|
setVertexArr(index, vertexArr) {
|
||||||
@ -849,11 +848,11 @@ class LabelHandler extends BillboardHandler {
|
|||||||
|
|
||||||
setMaxLetters(c) {
|
setMaxLetters(c) {
|
||||||
this._maxLetters = c;
|
this._maxLetters = c;
|
||||||
//...
|
// TODO: ...
|
||||||
}
|
}
|
||||||
|
|
||||||
refreshTexCoordsArr() {
|
refreshTexCoordsArr() {
|
||||||
//it is empty
|
// it is empty
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -221,13 +221,13 @@ class PointCloud {
|
|||||||
this._coordinatesData.push(pos.x, pos.y, pos.z);
|
this._coordinatesData.push(pos.x, pos.y, pos.z);
|
||||||
this._colorData.push(col.x / 255.0, col.y / 255.0, col.z / 255.0, col.w / 255.0);
|
this._colorData.push(col.x / 255.0, col.y / 255.0, col.z / 255.0, col.w / 255.0);
|
||||||
var p = {
|
var p = {
|
||||||
'_pickingColor': new Vec3(),
|
_pickingColor: new Vec3(),
|
||||||
'_entityCollection': this._entity && this._entity._entityCollection,
|
_entityCollection: this._entity && this._entity._entityCollection,
|
||||||
'index': i,
|
index: i,
|
||||||
'position': pos,
|
position: pos,
|
||||||
'color': col,
|
color: col,
|
||||||
'pointCloud': this,
|
pointCloud: this,
|
||||||
'properties': pi[7] || {}
|
properties: pi[7] || {}
|
||||||
};
|
};
|
||||||
this._points.push(p);
|
this._points.push(p);
|
||||||
|
|
||||||
@ -244,21 +244,21 @@ class PointCloud {
|
|||||||
|
|
||||||
setPointPosition(index, x, y, z) {
|
setPointPosition(index, x, y, z) {
|
||||||
|
|
||||||
//...
|
// TODO: ...
|
||||||
|
|
||||||
this._changedBuffers[COORDINATES_BUFFER] = true;
|
this._changedBuffers[COORDINATES_BUFFER] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
setPointColor(index, r, g, b, a) {
|
setPointColor(index, r, g, b, a) {
|
||||||
|
|
||||||
//...
|
// TODO: ...
|
||||||
|
|
||||||
this._changedBuffers[COLOR_BUFFER] = true;
|
this._changedBuffers[COLOR_BUFFER] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
addPoints(points) {
|
addPoints(points) {
|
||||||
|
|
||||||
//...
|
// TODO: ...
|
||||||
|
|
||||||
this._changedBuffers[COORDINATES_BUFFER] = true;
|
this._changedBuffers[COORDINATES_BUFFER] = true;
|
||||||
this._changedBuffers[COLOR_BUFFER] = true;
|
this._changedBuffers[COLOR_BUFFER] = true;
|
||||||
@ -267,7 +267,7 @@ class PointCloud {
|
|||||||
|
|
||||||
addPoint(index, point) {
|
addPoint(index, point) {
|
||||||
|
|
||||||
//...
|
// TODO: ...
|
||||||
|
|
||||||
this._changedBuffers[COORDINATES_BUFFER] = true;
|
this._changedBuffers[COORDINATES_BUFFER] = true;
|
||||||
this._changedBuffers[COLOR_BUFFER] = true;
|
this._changedBuffers[COLOR_BUFFER] = true;
|
||||||
@ -286,7 +286,7 @@ class PointCloud {
|
|||||||
|
|
||||||
removePoint(index) {
|
removePoint(index) {
|
||||||
|
|
||||||
//...
|
// TODO: ...
|
||||||
|
|
||||||
this._changedBuffers[COORDINATES_BUFFER] = true;
|
this._changedBuffers[COORDINATES_BUFFER] = true;
|
||||||
this._changedBuffers[COLOR_BUFFER] = true;
|
this._changedBuffers[COLOR_BUFFER] = true;
|
||||||
@ -295,7 +295,7 @@ class PointCloud {
|
|||||||
|
|
||||||
insertPoint(index, point) {
|
insertPoint(index, point) {
|
||||||
|
|
||||||
//...
|
// TODO: ...
|
||||||
|
|
||||||
this._changedBuffers[COORDINATES_BUFFER] = true;
|
this._changedBuffers[COORDINATES_BUFFER] = true;
|
||||||
this._changedBuffers[COLOR_BUFFER] = true;
|
this._changedBuffers[COLOR_BUFFER] = true;
|
||||||
|
|||||||
@ -61,7 +61,7 @@ class PointCloudHandler {
|
|||||||
|
|
||||||
setRenderNode(renderNode) {
|
setRenderNode(renderNode) {
|
||||||
this._renderer = renderNode.renderer;
|
this._renderer = renderNode.renderer;
|
||||||
this._initProgram()
|
this._initProgram();
|
||||||
for (var i = 0; i < this._pointClouds.length; i++) {
|
for (var i = 0; i < this._pointClouds.length; i++) {
|
||||||
this._pointClouds[i].setRenderNode(renderNode);
|
this._pointClouds[i].setRenderNode(renderNode);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,8 +8,6 @@ import * as utils from '../utils/shared.js';
|
|||||||
import { Extent } from '../Extent.js';
|
import { Extent } from '../Extent.js';
|
||||||
import { LonLat } from '../LonLat.js';
|
import { LonLat } from '../LonLat.js';
|
||||||
import { Vec3 } from '../math/Vec3.js';
|
import { Vec3 } from '../math/Vec3.js';
|
||||||
import { Vec4 } from '../math/Vec4.js';
|
|
||||||
import { doubleToTwoFloats } from '../math/coder.js';
|
|
||||||
|
|
||||||
const VERTICES_BUFFER = 0;
|
const VERTICES_BUFFER = 0;
|
||||||
const INDEX_BUFFER = 1;
|
const INDEX_BUFFER = 1;
|
||||||
@ -62,7 +60,7 @@ class Polyline {
|
|||||||
* @public
|
* @public
|
||||||
* @type {Array<Number,Number,Number,Number>}
|
* @type {Array<Number,Number,Number,Number>}
|
||||||
*/
|
*/
|
||||||
this._defaultColor = utils.htmlColorToFloat32Array(options.color || DEFAULT_COLOR, options.opacity);//utils.createColorRGBA(options.color, new Vec4(1.0, 1.0, 1.0, 1.0));
|
this._defaultColor = utils.htmlColorToFloat32Array(options.color || DEFAULT_COLOR, options.opacity); // utils.createColorRGBA(options.color, new Vec4(1.0, 1.0, 1.0, 1.0));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Polyline visibility.
|
* Polyline visibility.
|
||||||
@ -146,7 +144,7 @@ class Polyline {
|
|||||||
|
|
||||||
this._changedBuffers = new Array(this._buffersUpdateCallbacks.length);
|
this._changedBuffers = new Array(this._buffersUpdateCallbacks.length);
|
||||||
|
|
||||||
//create path
|
// create path
|
||||||
if (options.pathLonLat) {
|
if (options.pathLonLat) {
|
||||||
this.setPathLonLat(options.pathLonLat);
|
this.setPathLonLat(options.pathLonLat);
|
||||||
} else if (options.path3v) {
|
} else if (options.path3v) {
|
||||||
@ -167,7 +165,6 @@ class Polyline {
|
|||||||
this._counter = n;
|
this._counter = n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Appends to the line array new cartesian coordinates line data.
|
* Appends to the line array new cartesian coordinates line data.
|
||||||
* @param {Array.<Array.<number, number, number>>} path3v - Line coordinates path array.
|
* @param {Array.<Array.<number, number, number>>} path3v - Line coordinates path array.
|
||||||
@ -282,21 +279,25 @@ class Polyline {
|
|||||||
outTransformedPathLonLat[j].push(lonLat);
|
outTransformedPathLonLat[j].push(lonLat);
|
||||||
outTransformedPathMerc[j].push(lonLat.forwardMercator());
|
outTransformedPathMerc[j].push(lonLat.forwardMercator());
|
||||||
|
|
||||||
if (lonLat.lon < outExtent.southWest.lon)
|
if (lonLat.lon < outExtent.southWest.lon) {
|
||||||
outExtent.southWest.lon = lonLat.lon;
|
outExtent.southWest.lon = lonLat.lon;
|
||||||
if (lonLat.lat < outExtent.southWest.lat)
|
}
|
||||||
|
if (lonLat.lat < outExtent.southWest.lat) {
|
||||||
outExtent.southWest.lat = lonLat.lat;
|
outExtent.southWest.lat = lonLat.lat;
|
||||||
if (lonLat.lon > outExtent.northEast.lon)
|
}
|
||||||
|
if (lonLat.lon > outExtent.northEast.lon) {
|
||||||
outExtent.northEast.lon = lonLat.lon;
|
outExtent.northEast.lon = lonLat.lon;
|
||||||
if (lonLat.lat > outExtent.northEast.lat)
|
}
|
||||||
|
if (lonLat.lat > outExtent.northEast.lat) {
|
||||||
outExtent.northEast.lat = lonLat.lat;
|
outExtent.northEast.lat = lonLat.lat;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pathColors_j && pathColors_j[i]) {
|
if (pathColors_j && pathColors_j[i]) {
|
||||||
color = pathColors_j[i];
|
color = pathColors_j[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
r = color[R], g = color[G], b = color[B], a = (color[A] != undefined ? color[A] : 1.0);
|
r = color[R]; g = color[G]; b = color[B]; a = (color[A] != undefined ? color[A] : 1.0);
|
||||||
|
|
||||||
Vec3.doubleToTwoFloats(cur, v_high, v_low);
|
Vec3.doubleToTwoFloats(cur, v_high, v_low);
|
||||||
outVerticesHigh.push(v_high.x, v_high.y, v_high.z, v_high.x, v_high.y, v_high.z, v_high.x, v_high.y, v_high.z, v_high.x, v_high.y, v_high.z);
|
outVerticesHigh.push(v_high.x, v_high.y, v_high.z, v_high.x, v_high.y, v_high.z, v_high.x, v_high.y, v_high.z, v_high.x, v_high.y, v_high.z);
|
||||||
@ -332,7 +333,7 @@ class Polyline {
|
|||||||
color = pathColors_j[path.length - 1];
|
color = pathColors_j[path.length - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
r = color[R], g = color[G], b = color[B], a = (color[A] != undefined ? color[A] : 1.0);
|
r = color[R]; g = color[G]; b = color[B]; a = (color[A] != undefined ? color[A] : 1.0);
|
||||||
|
|
||||||
Vec3.doubleToTwoFloats(first, v_high, v_low);
|
Vec3.doubleToTwoFloats(first, v_high, v_low);
|
||||||
outVerticesHigh.push(v_high.x, v_high.y, v_high.z, v_high.x, v_high.y, v_high.z, v_high.x, v_high.y, v_high.z, v_high.x, v_high.y, v_high.z);
|
outVerticesHigh.push(v_high.x, v_high.y, v_high.z, v_high.x, v_high.y, v_high.z, v_high.x, v_high.y, v_high.z, v_high.x, v_high.y, v_high.z);
|
||||||
@ -482,14 +483,18 @@ class Polyline {
|
|||||||
transformedPathLonLat.push(lonLat);
|
transformedPathLonLat.push(lonLat);
|
||||||
transformedPathMerc.push(lonLat.forwardMercator());
|
transformedPathMerc.push(lonLat.forwardMercator());
|
||||||
|
|
||||||
if (lonLat.lon < outExtent.southWest.lon)
|
if (lonLat.lon < outExtent.southWest.lon) {
|
||||||
outExtent.southWest.lon = lonLat.lon;
|
outExtent.southWest.lon = lonLat.lon;
|
||||||
if (lonLat.lat < outExtent.southWest.lat)
|
}
|
||||||
|
if (lonLat.lat < outExtent.southWest.lat) {
|
||||||
outExtent.southWest.lat = lonLat.lat;
|
outExtent.southWest.lat = lonLat.lat;
|
||||||
if (lonLat.lon > outExtent.northEast.lon)
|
}
|
||||||
|
if (lonLat.lon > outExtent.northEast.lon) {
|
||||||
outExtent.northEast.lon = lonLat.lon;
|
outExtent.northEast.lon = lonLat.lon;
|
||||||
if (lonLat.lat > outExtent.northEast.lat)
|
}
|
||||||
|
if (lonLat.lat > outExtent.northEast.lat) {
|
||||||
outExtent.northEast.lat = lonLat.lat;
|
outExtent.northEast.lat = lonLat.lat;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Vec3.doubleToTwoFloats(point3v, v_high, v_low);
|
Vec3.doubleToTwoFloats(point3v, v_high, v_low);
|
||||||
@ -545,7 +550,6 @@ class Polyline {
|
|||||||
outIndexes[ii + 1] = index++;
|
outIndexes[ii + 1] = index++;
|
||||||
outIndexes[ii + 2] = index++;
|
outIndexes[ii + 2] = index++;
|
||||||
outIndexes[ii + 3] = index++;
|
outIndexes[ii + 3] = index++;
|
||||||
//}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Close path
|
// Close path
|
||||||
@ -682,7 +686,7 @@ class Polyline {
|
|||||||
color = pathColors_j[i];
|
color = pathColors_j[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
r = color[R], g = color[G], b = color[B], a = (color[A] != undefined ? color[A] : 1.0);
|
r = color[R]; g = color[G]; b = color[B]; a = (color[A] != undefined ? color[A] : 1.0);
|
||||||
|
|
||||||
var cartesian = ellipsoid.lonLatToCartesian(cur);
|
var cartesian = ellipsoid.lonLatToCartesian(cur);
|
||||||
outTransformedPathCartesian[j].push(cartesian);
|
outTransformedPathCartesian[j].push(cartesian);
|
||||||
@ -698,14 +702,18 @@ class Polyline {
|
|||||||
outOrders.push(1, -1, 2, -2);
|
outOrders.push(1, -1, 2, -2);
|
||||||
outIndexes.push(index++, index++, index++, index++);
|
outIndexes.push(index++, index++, index++, index++);
|
||||||
|
|
||||||
if (cur.lon < outExtent.southWest.lon)
|
if (cur.lon < outExtent.southWest.lon) {
|
||||||
outExtent.southWest.lon = cur.lon;
|
outExtent.southWest.lon = cur.lon;
|
||||||
if (cur.lat < outExtent.southWest.lat)
|
}
|
||||||
|
if (cur.lat < outExtent.southWest.lat) {
|
||||||
outExtent.southWest.lat = cur.lat;
|
outExtent.southWest.lat = cur.lat;
|
||||||
if (cur.lon > outExtent.northEast.lon)
|
}
|
||||||
|
if (cur.lon > outExtent.northEast.lon) {
|
||||||
outExtent.northEast.lon = cur.lon;
|
outExtent.northEast.lon = cur.lon;
|
||||||
if (cur.lat > outExtent.northEast.lat)
|
}
|
||||||
|
if (cur.lat > outExtent.northEast.lat) {
|
||||||
outExtent.northEast.lat = cur.lat;
|
outExtent.northEast.lat = cur.lat;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var first;
|
var first;
|
||||||
@ -745,7 +753,7 @@ class Polyline {
|
|||||||
color = pathColors_j[path.length - 1];
|
color = pathColors_j[path.length - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
r = color[R], g = color[G], b = color[B], a = (color[A] != undefined ? color[A] : 1.0);
|
r = color[R]; g = color[G]; b = color[B]; a = (color[A] != undefined ? color[A] : 1.0);
|
||||||
|
|
||||||
Vec3.doubleToTwoFloats(first, v_high, v_low);
|
Vec3.doubleToTwoFloats(first, v_high, v_low);
|
||||||
outVerticesHigh.push(v_high.x, v_high.y, v_high.z, v_high.x, v_high.y, v_high.z, v_high.x, v_high.y, v_high.z, v_high.x, v_high.y, v_high.z);
|
outVerticesHigh.push(v_high.x, v_high.y, v_high.z, v_high.x, v_high.y, v_high.z, v_high.x, v_high.y, v_high.z, v_high.x, v_high.y, v_high.z);
|
||||||
@ -789,7 +797,7 @@ class Polyline {
|
|||||||
|
|
||||||
var last;
|
var last;
|
||||||
if (this._closedLine) {
|
if (this._closedLine) {
|
||||||
last = path[path.length - 1]
|
last = path[path.length - 1];
|
||||||
} else {
|
} else {
|
||||||
last = new Vec3(path[0].x + path[0].x - path[1].x, path[0].y + path[0].y - path[1].y, path[0].z + path[0].z - path[1].z);
|
last = new Vec3(path[0].x + path[0].x - path[1].x, path[0].y + path[0].y - path[1].y, path[0].z + path[0].z - path[1].z);
|
||||||
}
|
}
|
||||||
@ -839,14 +847,18 @@ class Polyline {
|
|||||||
l[j][i] = lonLat;
|
l[j][i] = lonLat;
|
||||||
m[j][i] = lonLat.forwardMercator();
|
m[j][i] = lonLat.forwardMercator();
|
||||||
|
|
||||||
if (lonLat.lon < extent.southWest.lon)
|
if (lonLat.lon < extent.southWest.lon) {
|
||||||
extent.southWest.lon = lonLat.lon;
|
extent.southWest.lon = lonLat.lon;
|
||||||
if (lonLat.lat < extent.southWest.lat)
|
}
|
||||||
|
if (lonLat.lat < extent.southWest.lat) {
|
||||||
extent.southWest.lat = lonLat.lat;
|
extent.southWest.lat = lonLat.lat;
|
||||||
if (lonLat.lon > extent.northEast.lon)
|
}
|
||||||
|
if (lonLat.lon > extent.northEast.lon) {
|
||||||
extent.northEast.lon = lonLat.lon;
|
extent.northEast.lon = lonLat.lon;
|
||||||
if (lonLat.lat > extent.northEast.lat)
|
}
|
||||||
|
if (lonLat.lat > extent.northEast.lat) {
|
||||||
extent.northEast.lat = lonLat.lat;
|
extent.northEast.lat = lonLat.lat;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Vec3.doubleToTwoFloats(cur, v_high, v_low);
|
Vec3.doubleToTwoFloats(cur, v_high, v_low);
|
||||||
@ -1011,14 +1023,18 @@ class Polyline {
|
|||||||
vh[k] = v_high.z;
|
vh[k] = v_high.z;
|
||||||
vl[k++] = v_low.z;
|
vl[k++] = v_low.z;
|
||||||
|
|
||||||
if (cur.lon < extent.southWest.lon)
|
if (cur.lon < extent.southWest.lon) {
|
||||||
extent.southWest.lon = cur.lon;
|
extent.southWest.lon = cur.lon;
|
||||||
if (cur.lat < extent.southWest.lat)
|
}
|
||||||
|
if (cur.lat < extent.southWest.lat) {
|
||||||
extent.southWest.lat = cur.lat;
|
extent.southWest.lat = cur.lat;
|
||||||
if (cur.lon > extent.northEast.lon)
|
}
|
||||||
|
if (cur.lon > extent.northEast.lon) {
|
||||||
extent.northEast.lon = cur.lon;
|
extent.northEast.lon = cur.lon;
|
||||||
if (cur.lat > extent.northEast.lat)
|
}
|
||||||
|
if (cur.lat > extent.northEast.lat) {
|
||||||
extent.northEast.lat = cur.lat;
|
extent.northEast.lat = cur.lat;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var first;
|
var first;
|
||||||
@ -1079,14 +1095,18 @@ class Polyline {
|
|||||||
for (var j = 0; j < pi.length; j++) {
|
for (var j = 0; j < pi.length; j++) {
|
||||||
var lon = pi[j].lon,
|
var lon = pi[j].lon,
|
||||||
lat = pi[j].lat;
|
lat = pi[j].lat;
|
||||||
if (lon > extent.northEast.lon)
|
if (lon > extent.northEast.lon) {
|
||||||
extent.northEast.lon = lon;
|
extent.northEast.lon = lon;
|
||||||
if (lat > extent.northEast.lat)
|
}
|
||||||
|
if (lat > extent.northEast.lat) {
|
||||||
extent.northEast.lat = lat;
|
extent.northEast.lat = lat;
|
||||||
if (lon < extent.southWest.lon)
|
}
|
||||||
|
if (lon < extent.southWest.lon) {
|
||||||
extent.southWest.lon = lon;
|
extent.southWest.lon = lon;
|
||||||
if (lat < extent.southWest.lat)
|
}
|
||||||
|
if (lat < extent.southWest.lat) {
|
||||||
extent.southWest.lat = lat;
|
extent.southWest.lat = lat;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1129,12 +1149,10 @@ class Polyline {
|
|||||||
|
|
||||||
let _closedLine = this._closedLine || path.length === 1;
|
let _closedLine = this._closedLine || path.length === 1;
|
||||||
|
|
||||||
//if (path.length === 1) return;
|
|
||||||
|
|
||||||
if (index === 0 || index === 1) {
|
if (index === 0 || index === 1) {
|
||||||
var last;
|
var last;
|
||||||
if (_closedLine) {
|
if (_closedLine) {
|
||||||
last = path[path.length - 1]
|
last = path[path.length - 1];
|
||||||
} else {
|
} else {
|
||||||
last = new Vec3(path[0].x + path[0].x - path[1].x, path[0].y + path[0].y - path[1].y, path[0].z + path[0].z - path[1].z);
|
last = new Vec3(path[0].x + path[0].x - path[1].x, path[0].y + path[0].y - path[1].y, path[0].z + path[0].z - path[1].z);
|
||||||
}
|
}
|
||||||
@ -1181,19 +1199,23 @@ class Polyline {
|
|||||||
var extent = this._extent;
|
var extent = this._extent;
|
||||||
extent.southWest.set(180.0, 90.0);
|
extent.southWest.set(180.0, 90.0);
|
||||||
extent.northEast.set(-180.0, -90.0);
|
extent.northEast.set(-180.0, -90.0);
|
||||||
for (var i = 0; i < l.length; i++) {
|
for (let i = 0; i < l.length; i++) {
|
||||||
var pi = l[i];
|
var pi = l[i];
|
||||||
for (var j = 0; j < pi.length; j++) {
|
for (var j = 0; j < pi.length; j++) {
|
||||||
var lon = pi[j].lon,
|
var lon = pi[j].lon,
|
||||||
lat = pi[j].lat;
|
lat = pi[j].lat;
|
||||||
if (lon > extent.northEast.lon)
|
if (lon > extent.northEast.lon) {
|
||||||
extent.northEast.lon = lon;
|
extent.northEast.lon = lon;
|
||||||
if (lat > extent.northEast.lat)
|
}
|
||||||
|
if (lat > extent.northEast.lat) {
|
||||||
extent.northEast.lat = lat;
|
extent.northEast.lat = lat;
|
||||||
if (lon < extent.southWest.lon)
|
}
|
||||||
|
if (lon < extent.southWest.lon) {
|
||||||
extent.southWest.lon = lon;
|
extent.southWest.lon = lon;
|
||||||
if (lat < extent.southWest.lat)
|
}
|
||||||
|
if (lat < extent.southWest.lat) {
|
||||||
extent.southWest.lat = lat;
|
extent.southWest.lat = lat;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1280,7 +1302,7 @@ class Polyline {
|
|||||||
|
|
||||||
removeSegment(index) {
|
removeSegment(index) {
|
||||||
//
|
//
|
||||||
//TODO: could be optimized. Partially see appendPoint3v.
|
// TODO: could be optimized. Partially see appendPoint3v.
|
||||||
//
|
//
|
||||||
this._path3v.splice(index, 1);
|
this._path3v.splice(index, 1);
|
||||||
this.setPath3v([].concat(this._path3v));
|
this.setPath3v([].concat(this._path3v));
|
||||||
@ -1288,7 +1310,7 @@ class Polyline {
|
|||||||
|
|
||||||
removePoint(index, multiLineIndex) {
|
removePoint(index, multiLineIndex) {
|
||||||
//
|
//
|
||||||
//TODO: could be optimized. Partially see appendPoint3v.
|
// TODO: could be optimized. Partially see appendPoint3v.
|
||||||
//
|
//
|
||||||
multiLineIndex = multiLineIndex || 0;
|
multiLineIndex = multiLineIndex || 0;
|
||||||
this._path3v[multiLineIndex].splice(index, 1);
|
this._path3v[multiLineIndex].splice(index, 1);
|
||||||
@ -1357,7 +1379,7 @@ class Polyline {
|
|||||||
*/
|
*/
|
||||||
addPoint3v(point3v, multiLineIndex = 0) {
|
addPoint3v(point3v, multiLineIndex = 0) {
|
||||||
//
|
//
|
||||||
//TODO: could be optimized
|
// TODO: could be optimized
|
||||||
//
|
//
|
||||||
if (multiLineIndex >= this._path3v.length) {
|
if (multiLineIndex >= this._path3v.length) {
|
||||||
this._path3v.push([]);
|
this._path3v.push([]);
|
||||||
@ -1374,7 +1396,7 @@ class Polyline {
|
|||||||
*/
|
*/
|
||||||
addPointLonLat(lonLat, multiLineIndex = 0) {
|
addPointLonLat(lonLat, multiLineIndex = 0) {
|
||||||
//
|
//
|
||||||
//TODO: could be optimized
|
// TODO: could be optimized
|
||||||
//
|
//
|
||||||
if (multiLineIndex >= this._pathLonLat.length) {
|
if (multiLineIndex >= this._pathLonLat.length) {
|
||||||
this._pathLonLat.push([]);
|
this._pathLonLat.push([]);
|
||||||
@ -1406,7 +1428,7 @@ class Polyline {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!colors[index]) {
|
if (!colors[index]) {
|
||||||
colors[index] = new Array(color[R], color[G], color[B], color[A] || 1.0);
|
colors[index] = [color[R], color[G], color[B], color[A] || 1.0];
|
||||||
} else {
|
} else {
|
||||||
colors[index][R] = color[R];
|
colors[index][R] = color[R];
|
||||||
colors[index][G] = color[G];
|
colors[index][G] = color[G];
|
||||||
@ -1634,21 +1656,10 @@ class Polyline {
|
|||||||
|
|
||||||
setPathColors(pathColors) {
|
setPathColors(pathColors) {
|
||||||
if (this._renderNode) {
|
if (this._renderNode) {
|
||||||
//...
|
// ...
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setPointColor(color, index, segmentIndex) {
|
|
||||||
let s = this._pathColors[segmentIndex];
|
|
||||||
if (s) {
|
|
||||||
s[index][0] = color[0];
|
|
||||||
s[index][1] = color[1];
|
|
||||||
s[index][2] = color[2];
|
|
||||||
s[index][3] = color[3];
|
|
||||||
}
|
|
||||||
//...
|
|
||||||
}
|
|
||||||
|
|
||||||
setColorHTML(htmlColor) {
|
setColorHTML(htmlColor) {
|
||||||
let color = utils.htmlColorToRgba(htmlColor),
|
let color = utils.htmlColorToRgba(htmlColor),
|
||||||
p = this._pathColors;
|
p = this._pathColors;
|
||||||
@ -1750,7 +1761,7 @@ class Polyline {
|
|||||||
gl.uniformMatrix4fv(shu.proj, false, r.activeCamera._projectionMatrix._m);
|
gl.uniformMatrix4fv(shu.proj, false, r.activeCamera._projectionMatrix._m);
|
||||||
gl.uniformMatrix4fv(shu.view, false, r.activeCamera._viewMatrix._m);
|
gl.uniformMatrix4fv(shu.view, false, r.activeCamera._viewMatrix._m);
|
||||||
|
|
||||||
//gl.uniform4fv(shu.color, [this.color.x, this.color.y, this.color.z, this.color.w * this._handler._entityCollection._fadingOpacity]);
|
// gl.uniform4fv(shu.color, [this.color.x, this.color.y, this.color.z, this.color.w * this._handler._entityCollection._fadingOpacity]);
|
||||||
|
|
||||||
gl.uniform3fv(shu.eyePositionHigh, r.activeCamera.eyeHigh);
|
gl.uniform3fv(shu.eyePositionHigh, r.activeCamera.eyeHigh);
|
||||||
gl.uniform3fv(shu.eyePositionLow, r.activeCamera.eyeLow);
|
gl.uniform3fv(shu.eyePositionLow, r.activeCamera.eyeLow);
|
||||||
@ -1759,11 +1770,9 @@ class Polyline {
|
|||||||
gl.uniform2fv(shu.viewport, [r.handler.canvas.width, r.handler.canvas.height]);
|
gl.uniform2fv(shu.viewport, [r.handler.canvas.width, r.handler.canvas.height]);
|
||||||
gl.uniform1f(shu.thickness, this.thickness * 0.5);
|
gl.uniform1f(shu.thickness, this.thickness * 0.5);
|
||||||
|
|
||||||
|
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, this._colorsBuffer);
|
gl.bindBuffer(gl.ARRAY_BUFFER, this._colorsBuffer);
|
||||||
gl.vertexAttribPointer(sha.color, this._colorsBuffer.itemSize, gl.FLOAT, false, 0, 0);
|
gl.vertexAttribPointer(sha.color, this._colorsBuffer.itemSize, gl.FLOAT, false, 0, 0);
|
||||||
|
|
||||||
|
|
||||||
var v = this._verticesHighBuffer;
|
var v = this._verticesHighBuffer;
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, v);
|
gl.bindBuffer(gl.ARRAY_BUFFER, v);
|
||||||
gl.vertexAttribPointer(sha.prevHigh, v.itemSize, gl.FLOAT, false, 12, 0);
|
gl.vertexAttribPointer(sha.prevHigh, v.itemSize, gl.FLOAT, false, 12, 0);
|
||||||
|
|||||||
@ -44,7 +44,7 @@ class PolylineHandler {
|
|||||||
|
|
||||||
setRenderNode(renderNode) {
|
setRenderNode(renderNode) {
|
||||||
this._renderer = renderNode.renderer;
|
this._renderer = renderNode.renderer;
|
||||||
this._initProgram()
|
this._initProgram();
|
||||||
for (var i = 0; i < this._polylines.length; i++) {
|
for (var i = 0; i < this._polylines.length; i++) {
|
||||||
this._polylines[i].setRenderNode(renderNode);
|
this._polylines[i].setRenderNode(renderNode);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,10 +31,10 @@ class Ray {
|
|||||||
*/
|
*/
|
||||||
this.id = Entity._staticCounter++;
|
this.id = Entity._staticCounter++;
|
||||||
|
|
||||||
//Thickenss
|
// Thickenss
|
||||||
this._thickness = options.thickness || 2.0;
|
this._thickness = options.thickness || 2.0;
|
||||||
|
|
||||||
//RTE length
|
// RTE length
|
||||||
this._length = options.length || 0.0;
|
this._length = options.length || 0.0;
|
||||||
this._lengthHighLow = new Float32Array(2);
|
this._lengthHighLow = new Float32Array(2);
|
||||||
doubleToTwoFloats2(this._length, this._lengthHighLow);
|
doubleToTwoFloats2(this._length, this._lengthHighLow);
|
||||||
@ -51,7 +51,7 @@ class Ray {
|
|||||||
this._endPositionLow = new Vec3();
|
this._endPositionLow = new Vec3();
|
||||||
Vec3.doubleToTwoFloats(this._endPosition, this._endPositionHigh, this._endPositionLow);
|
Vec3.doubleToTwoFloats(this._endPosition, this._endPositionHigh, this._endPositionLow);
|
||||||
|
|
||||||
//start end point colors
|
// start end point colors
|
||||||
this._startColor = utils.createColorRGBA(options.startColor);
|
this._startColor = utils.createColorRGBA(options.startColor);
|
||||||
this._endColor = utils.createColorRGBA(options.endColor);
|
this._endColor = utils.createColorRGBA(options.endColor);
|
||||||
|
|
||||||
@ -142,7 +142,6 @@ class Ray {
|
|||||||
|
|
||||||
setLength(length) {
|
setLength(length) {
|
||||||
this._length = length;
|
this._length = length;
|
||||||
//doubleToTwoFloats2(this._length, this._lengthHighLow);
|
|
||||||
this._handler && this._handler.setLengthArr(this._handlerIndex, length);
|
this._handler && this._handler.setLengthArr(this._handlerIndex, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -90,9 +90,9 @@ class RayHandler {
|
|||||||
this._renderer.handler.addProgram(shaders.rayScreen());
|
this._renderer.handler.addProgram(shaders.rayScreen());
|
||||||
}
|
}
|
||||||
|
|
||||||
//if (!this._renderer.handler.programs.billboardPicking) {
|
// if (!this._renderer.handler.programs.billboardPicking) {
|
||||||
// this._renderer.handler.addProgram(shaders.billboardPicking());
|
// this._renderer.handler.addProgram(shaders.billboardPicking());
|
||||||
//}
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,7 +108,7 @@ class RayHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_removeRay() {
|
_removeRays() {
|
||||||
var i = this._rays.length;
|
var i = this._rays.length;
|
||||||
while (i--) {
|
while (i--) {
|
||||||
var ri = this._rays[i];
|
var ri = this._rays[i];
|
||||||
@ -198,13 +198,13 @@ class RayHandler {
|
|||||||
let x = ray._startPositionHigh.x, y = ray._startPositionHigh.y, z = ray._startPositionHigh.z;
|
let x = ray._startPositionHigh.x, y = ray._startPositionHigh.y, z = ray._startPositionHigh.z;
|
||||||
RayHandler.concArr(this._startPositionHighArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
RayHandler.concArr(this._startPositionHighArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
||||||
|
|
||||||
x = ray._startPositionLow.x, y = ray._startPositionLow.y, z = ray._startPositionLow.z;
|
x = ray._startPositionLow.x; y = ray._startPositionLow.y; z = ray._startPositionLow.z;
|
||||||
RayHandler.concArr(this._startPositionLowArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
RayHandler.concArr(this._startPositionLowArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
||||||
|
|
||||||
x = ray._endPositionHigh.x, y = ray._endPositionHigh.y, z = ray._endPositionHigh.z;
|
x = ray._endPositionHigh.x; y = ray._endPositionHigh.y; z = ray._endPositionHigh.z;
|
||||||
RayHandler.concArr(this._endPositionHighArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
RayHandler.concArr(this._endPositionHighArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
||||||
|
|
||||||
x = ray._endPositionLow.x, y = ray._endPositionLow.y, z = ray._endPositionLow.z;
|
x = ray._endPositionLow.x; y = ray._endPositionLow.y; z = ray._endPositionLow.z;
|
||||||
RayHandler.concArr(this._endPositionLowArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
RayHandler.concArr(this._endPositionLowArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
||||||
|
|
||||||
x = ray._thickness;
|
x = ray._thickness;
|
||||||
@ -217,7 +217,7 @@ class RayHandler {
|
|||||||
r1 = ray._endColor.x, g1 = ray._endColor.y, b1 = ray._endColor.z, a1 = ray._endColor.w;
|
r1 = ray._endColor.x, g1 = ray._endColor.y, b1 = ray._endColor.z, a1 = ray._endColor.w;
|
||||||
RayHandler.concArr(this._rgbaArr, [r1, g1, b1, a1, r0, g0, b0, a0, r0, g0, b0, a0, r0, g0, b0, a0, r1, g1, b1, a1, r1, g1, b1, a1]);
|
RayHandler.concArr(this._rgbaArr, [r1, g1, b1, a1, r0, g0, b0, a0, r0, g0, b0, a0, r0, g0, b0, a0, r1, g1, b1, a1, r1, g1, b1, a1]);
|
||||||
|
|
||||||
x = ray._entity._pickingColor.x / 255, y = ray._entity._pickingColor.y / 255, z = ray._entity._pickingColor.z / 255;
|
x = ray._entity._pickingColor.x / 255; y = ray._entity._pickingColor.y / 255; z = ray._entity._pickingColor.z / 255;
|
||||||
RayHandler.concArr(this._pickingColorArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
RayHandler.concArr(this._pickingColorArr, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -244,23 +244,18 @@ class RayHandler {
|
|||||||
|
|
||||||
gl.uniform1f(shu.resolution, r.activeCamera._tanViewAngle_hradOneByHeight);
|
gl.uniform1f(shu.resolution, r.activeCamera._tanViewAngle_hradOneByHeight);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, this._startPositionHighBuffer);
|
gl.bindBuffer(gl.ARRAY_BUFFER, this._startPositionHighBuffer);
|
||||||
gl.vertexAttribPointer(sha.a_startPosHigh, this._startPositionHighBuffer.itemSize, gl.FLOAT, false, 0, 0);
|
gl.vertexAttribPointer(sha.a_startPosHigh, this._startPositionHighBuffer.itemSize, gl.FLOAT, false, 0, 0);
|
||||||
|
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, this._startPositionLowBuffer);
|
gl.bindBuffer(gl.ARRAY_BUFFER, this._startPositionLowBuffer);
|
||||||
gl.vertexAttribPointer(sha.a_startPosLow, this._startPositionLowBuffer.itemSize, gl.FLOAT, false, 0, 0);
|
gl.vertexAttribPointer(sha.a_startPosLow, this._startPositionLowBuffer.itemSize, gl.FLOAT, false, 0, 0);
|
||||||
|
|
||||||
|
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, this._endPositionHighBuffer);
|
gl.bindBuffer(gl.ARRAY_BUFFER, this._endPositionHighBuffer);
|
||||||
gl.vertexAttribPointer(sha.a_endPosHigh, this._endPositionHighBuffer.itemSize, gl.FLOAT, false, 0, 0);
|
gl.vertexAttribPointer(sha.a_endPosHigh, this._endPositionHighBuffer.itemSize, gl.FLOAT, false, 0, 0);
|
||||||
|
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, this._endPositionLowBuffer);
|
gl.bindBuffer(gl.ARRAY_BUFFER, this._endPositionLowBuffer);
|
||||||
gl.vertexAttribPointer(sha.a_endPosLow, this._endPositionLowBuffer.itemSize, gl.FLOAT, false, 0, 0);
|
gl.vertexAttribPointer(sha.a_endPosLow, this._endPositionLowBuffer.itemSize, gl.FLOAT, false, 0, 0);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, this._rgbaBuffer);
|
gl.bindBuffer(gl.ARRAY_BUFFER, this._rgbaBuffer);
|
||||||
gl.vertexAttribPointer(sha.a_rgba, this._rgbaBuffer.itemSize, gl.FLOAT, false, 0, 0);
|
gl.vertexAttribPointer(sha.a_rgba, this._rgbaBuffer.itemSize, gl.FLOAT, false, 0, 0);
|
||||||
|
|
||||||
@ -278,7 +273,7 @@ class RayHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_pickingPASS() {
|
_pickingPASS() {
|
||||||
//...
|
// ...
|
||||||
};
|
};
|
||||||
|
|
||||||
draw() {
|
draw() {
|
||||||
@ -340,7 +335,7 @@ class RayHandler {
|
|||||||
|
|
||||||
var i = index * 18;
|
var i = index * 18;
|
||||||
|
|
||||||
//High
|
// High
|
||||||
var a = this._startPositionHighArr, x = positionHigh.x, y = positionHigh.y, z = positionHigh.z;
|
var a = this._startPositionHighArr, x = positionHigh.x, y = positionHigh.y, z = positionHigh.z;
|
||||||
|
|
||||||
a[i] = x;
|
a[i] = x;
|
||||||
@ -367,8 +362,8 @@ class RayHandler {
|
|||||||
a[i + 16] = y;
|
a[i + 16] = y;
|
||||||
a[i + 17] = z;
|
a[i + 17] = z;
|
||||||
|
|
||||||
//Low
|
// Low
|
||||||
a = this._startPositionLowArr, x = positionLow.x, y = positionLow.y, z = positionLow.z;
|
a = this._startPositionLowArr; x = positionLow.x; y = positionLow.y; z = positionLow.z;
|
||||||
|
|
||||||
a[i] = x;
|
a[i] = x;
|
||||||
a[i + 1] = y;
|
a[i + 1] = y;
|
||||||
@ -400,7 +395,7 @@ class RayHandler {
|
|||||||
setEndPositionArr(index, positionHigh, positionLow) {
|
setEndPositionArr(index, positionHigh, positionLow) {
|
||||||
var i = index * 18;
|
var i = index * 18;
|
||||||
|
|
||||||
//High
|
// High
|
||||||
var a = this._endPositionHighArr, x = positionHigh.x, y = positionHigh.y, z = positionHigh.z;
|
var a = this._endPositionHighArr, x = positionHigh.x, y = positionHigh.y, z = positionHigh.z;
|
||||||
|
|
||||||
a[i] = x;
|
a[i] = x;
|
||||||
@ -427,8 +422,8 @@ class RayHandler {
|
|||||||
a[i + 16] = y;
|
a[i + 16] = y;
|
||||||
a[i + 17] = z;
|
a[i + 17] = z;
|
||||||
|
|
||||||
//Low
|
// Low
|
||||||
a = this._endPositionLowArr, x = positionLow.x, y = positionLow.y, z = positionLow.z;
|
a = this._endPositionLowArr; x = positionLow.x; y = positionLow.y; z = positionLow.z;
|
||||||
|
|
||||||
a[i] = x;
|
a[i] = x;
|
||||||
a[i + 1] = y;
|
a[i + 1] = y;
|
||||||
@ -541,7 +536,7 @@ class RayHandler {
|
|||||||
a[i + 4] = thickness;
|
a[i + 4] = thickness;
|
||||||
a[i + 5] = thickness;
|
a[i + 5] = thickness;
|
||||||
|
|
||||||
this._changedBuffers[THICKNESS_BUFFER] = true
|
this._changedBuffers[THICKNESS_BUFFER] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
setLengthArr(index, length) {
|
setLengthArr(index, length) {
|
||||||
@ -556,7 +551,7 @@ class RayHandler {
|
|||||||
a[i + 4] = length;
|
a[i + 4] = length;
|
||||||
a[i + 5] = length;
|
a[i + 5] = length;
|
||||||
|
|
||||||
this._changedBuffers[LENGTH_BUFFER] = true
|
this._changedBuffers[LENGTH_BUFFER] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
setVisibility(index, visibility) {
|
setVisibility(index, visibility) {
|
||||||
|
|||||||
@ -44,15 +44,15 @@ class ShapeHandler {
|
|||||||
if (!this._renderer.handler.programs.shape_wl) {
|
if (!this._renderer.handler.programs.shape_wl) {
|
||||||
this._renderer.handler.addProgram(shaders.shape_wl());
|
this._renderer.handler.addProgram(shaders.shape_wl());
|
||||||
}
|
}
|
||||||
//if (!this._renderer.handler.programs.shapePicking) {
|
// if (!this._renderer.handler.programs.shapePicking) {
|
||||||
// this._renderer.handler.addProgram(shaders.shapePicking());
|
// this._renderer.handler.addProgram(shaders.shapePicking());
|
||||||
//}
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setRenderNode(renderNode) {
|
setRenderNode(renderNode) {
|
||||||
this._renderer = renderNode.renderer;
|
this._renderer = renderNode.renderer;
|
||||||
this._initProgram()
|
this._initProgram();
|
||||||
for (var i = 0; i < this._shapes.length; i++) {
|
for (var i = 0; i < this._shapes.length; i++) {
|
||||||
this._shapes[i].setRenderNode(renderNode);
|
this._shapes[i].setRenderNode(renderNode);
|
||||||
}
|
}
|
||||||
@ -68,7 +68,7 @@ class ShapeHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
remove(shape) {
|
remove(shape) {
|
||||||
//TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
draw() {
|
draw() {
|
||||||
@ -79,11 +79,11 @@ class ShapeHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
drawPicking() {
|
drawPicking() {
|
||||||
//TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
clear() {
|
clear() {
|
||||||
//TODO
|
// TODO
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,6 @@
|
|||||||
import { Vec3 } from '../math/Vec3.js';
|
import { Vec3 } from '../math/Vec3.js';
|
||||||
import { Line3 } from '../math/Line3.js';
|
import { Line3 } from '../math/Line3.js';
|
||||||
|
|
||||||
|
|
||||||
let _tempHigh = new Vec3(),
|
let _tempHigh = new Vec3(),
|
||||||
_tempLow = new Vec3();
|
_tempLow = new Vec3();
|
||||||
|
|
||||||
@ -496,7 +495,7 @@ class Strip {
|
|||||||
let p01 = p0.lerp(p1, dj),
|
let p01 = p0.lerp(p1, dj),
|
||||||
p23 = p2.lerp(p3, dj);
|
p23 = p2.lerp(p3, dj);
|
||||||
|
|
||||||
//prev
|
// prev
|
||||||
(new Line3(p02, p13)).intersects(new Line3(p01, p23), p);
|
(new Line3(p02, p13)).intersects(new Line3(p01, p23), p);
|
||||||
|
|
||||||
let ij = i * gs1 + j;
|
let ij = i * gs1 + j;
|
||||||
@ -515,7 +514,7 @@ class Strip {
|
|||||||
vLow[ind3 + 1] = _tempLow.y;
|
vLow[ind3 + 1] = _tempLow.y;
|
||||||
vLow[ind3 + 2] = _tempLow.z;
|
vLow[ind3 + 2] = _tempLow.z;
|
||||||
|
|
||||||
//next
|
// next
|
||||||
let p45 = p4.lerp(p5, dj);
|
let p45 = p4.lerp(p5, dj);
|
||||||
|
|
||||||
p23 = p2.lerp(p3, dj);
|
p23 = p2.lerp(p3, dj);
|
||||||
|
|||||||
@ -96,7 +96,7 @@ class StripHandler {
|
|||||||
|
|
||||||
setRenderNode(renderNode) {
|
setRenderNode(renderNode) {
|
||||||
this._renderer = renderNode.renderer;
|
this._renderer = renderNode.renderer;
|
||||||
this._initProgram()
|
this._initProgram();
|
||||||
for (var i = 0; i < this._strips.length; i++) {
|
for (var i = 0; i < this._strips.length; i++) {
|
||||||
this._strips[i].setRenderNode(renderNode);
|
this._strips[i].setRenderNode(renderNode);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,22 +7,11 @@ import * as utils from './utils/shared.js';
|
|||||||
import { Box } from './bv/Box.js';
|
import { Box } from './bv/Box.js';
|
||||||
import { Sphere } from './bv/Sphere.js';
|
import { Sphere } from './bv/Sphere.js';
|
||||||
|
|
||||||
const bv = {
|
|
||||||
'Box': Box,
|
|
||||||
'Sphere': Sphere
|
|
||||||
};
|
|
||||||
|
|
||||||
import { Control } from './control/Control.js';
|
import { Control } from './control/Control.js';
|
||||||
import { DebugInfo } from './control/DebugInfo';
|
import { DebugInfo } from './control/DebugInfo';
|
||||||
import { SimpleNavigation } from './control/SimpleNavigation.js';
|
import { SimpleNavigation } from './control/SimpleNavigation.js';
|
||||||
import { ShowFps } from './control/ShowFps.js';
|
import { ShowFps } from './control/ShowFps.js';
|
||||||
|
|
||||||
const control = {
|
|
||||||
'DebugInfo': DebugInfo,
|
|
||||||
'SimpleNavigation': SimpleNavigation,
|
|
||||||
'ShowFps': ShowFps
|
|
||||||
};
|
|
||||||
|
|
||||||
import { Entity } from './entity/Entity.js';
|
import { Entity } from './entity/Entity.js';
|
||||||
import { EntityCollection } from './entity/EntityCollection.js';
|
import { EntityCollection } from './entity/EntityCollection.js';
|
||||||
import { Billboard } from './entity/Billboard.js';
|
import { Billboard } from './entity/Billboard.js';
|
||||||
@ -30,13 +19,6 @@ import { Label } from './entity/Label.js';
|
|||||||
import { PointCloud } from './entity/PointCloud.js';
|
import { PointCloud } from './entity/PointCloud.js';
|
||||||
import { Polyline } from './entity/Polyline.js';
|
import { Polyline } from './entity/Polyline.js';
|
||||||
|
|
||||||
const entity = {
|
|
||||||
'Billboard': Billboard,
|
|
||||||
'Label': Label,
|
|
||||||
'PointCloud': PointCloud,
|
|
||||||
'Polyline': Polyline
|
|
||||||
};
|
|
||||||
|
|
||||||
import { input } from './input/input.js';
|
import { input } from './input/input.js';
|
||||||
|
|
||||||
import { Camera } from './camera/Camera.js';
|
import { Camera } from './camera/Camera.js';
|
||||||
@ -58,14 +40,6 @@ import { Multisample } from './webgl/Multisample.js';
|
|||||||
import { types } from './webgl/types.js';
|
import { types } from './webgl/types.js';
|
||||||
import { Program } from './webgl/Program.js';
|
import { Program } from './webgl/Program.js';
|
||||||
|
|
||||||
const webgl = {
|
|
||||||
'Framebuffer': Framebuffer,
|
|
||||||
'Handler': Handler,
|
|
||||||
'Multisample': Multisample,
|
|
||||||
'types': types,
|
|
||||||
'Program': Program
|
|
||||||
};
|
|
||||||
|
|
||||||
import { Renderer } from './renderer/Renderer.js';
|
import { Renderer } from './renderer/Renderer.js';
|
||||||
|
|
||||||
import { LightSource } from './light/LightSource.js';
|
import { LightSource } from './light/LightSource.js';
|
||||||
@ -78,8 +52,34 @@ import { RenderNode } from './scene/RenderNode.js';
|
|||||||
|
|
||||||
import { TextureAtlas } from './utils/TextureAtlas.js';
|
import { TextureAtlas } from './utils/TextureAtlas.js';
|
||||||
|
|
||||||
|
const bv = {
|
||||||
|
Box: Box,
|
||||||
|
Sphere: Sphere
|
||||||
|
};
|
||||||
|
|
||||||
|
const control = {
|
||||||
|
DebugInfo: DebugInfo,
|
||||||
|
SimpleNavigation: SimpleNavigation,
|
||||||
|
ShowFps: ShowFps
|
||||||
|
};
|
||||||
|
|
||||||
|
const entity = {
|
||||||
|
Billboard: Billboard,
|
||||||
|
Label: Label,
|
||||||
|
PointCloud: PointCloud,
|
||||||
|
Polyline: Polyline
|
||||||
|
};
|
||||||
|
|
||||||
|
const webgl = {
|
||||||
|
Framebuffer: Framebuffer,
|
||||||
|
Handler: Handler,
|
||||||
|
Multisample: Multisample,
|
||||||
|
types: types,
|
||||||
|
Program: Program
|
||||||
|
};
|
||||||
|
|
||||||
const scene = {
|
const scene = {
|
||||||
'Axes': Axes
|
Axes: Axes
|
||||||
};
|
};
|
||||||
|
|
||||||
export {
|
export {
|
||||||
|
|||||||
116
src/og/index.js
116
src/og/index.js
@ -1,9 +1,5 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const version = {
|
|
||||||
version: __VERSION__
|
|
||||||
};
|
|
||||||
|
|
||||||
import '../../css/og.css';
|
import '../../css/og.css';
|
||||||
|
|
||||||
import * as jd from './astro/jd.js';
|
import * as jd from './astro/jd.js';
|
||||||
@ -16,11 +12,6 @@ import { Globe } from './Globe.js';
|
|||||||
import { Box } from './bv/Box.js';
|
import { Box } from './bv/Box.js';
|
||||||
import { Sphere } from './bv/Sphere.js';
|
import { Sphere } from './bv/Sphere.js';
|
||||||
|
|
||||||
const bv = {
|
|
||||||
'Box': Box,
|
|
||||||
'Sphere': Sphere
|
|
||||||
};
|
|
||||||
|
|
||||||
import { CanvasTiles } from './layer/CanvasTiles.js';
|
import { CanvasTiles } from './layer/CanvasTiles.js';
|
||||||
import { GeoImage } from './layer/GeoImage.js';
|
import { GeoImage } from './layer/GeoImage.js';
|
||||||
import { GeoTexture2d } from './layer/GeoTexture2d.js';
|
import { GeoTexture2d } from './layer/GeoTexture2d.js';
|
||||||
@ -30,16 +21,6 @@ import { Vector } from './layer/Vector.js';
|
|||||||
import { WMS } from './layer/WMS.js';
|
import { WMS } from './layer/WMS.js';
|
||||||
import { XYZ } from './layer/XYZ.js';
|
import { XYZ } from './layer/XYZ.js';
|
||||||
|
|
||||||
const layer = {
|
|
||||||
'CanvasTiles': CanvasTiles,
|
|
||||||
'GeoImage': GeoImage,
|
|
||||||
'GeoTexture2d': GeoTexture2d,
|
|
||||||
'GeoVideo': GeoVideo,
|
|
||||||
'Vector': Vector,
|
|
||||||
'WMS': WMS,
|
|
||||||
'XYZ': XYZ,
|
|
||||||
};
|
|
||||||
|
|
||||||
import { Control } from './control/Control.js';
|
import { Control } from './control/Control.js';
|
||||||
import { DebugInfo } from './control/DebugInfo';
|
import { DebugInfo } from './control/DebugInfo';
|
||||||
import { EarthCoordinates } from './control/EarthCoordinates.js';
|
import { EarthCoordinates } from './control/EarthCoordinates.js';
|
||||||
@ -54,21 +35,6 @@ import { ShowFps } from './control/ShowFps.js';
|
|||||||
import { Sun } from './control/Sun.js';
|
import { Sun } from './control/Sun.js';
|
||||||
import { ZoomControl } from './control/ZoomControl.js';
|
import { ZoomControl } from './control/ZoomControl.js';
|
||||||
|
|
||||||
const control = {
|
|
||||||
'DebugInfo': DebugInfo,
|
|
||||||
'EarthCoordinates': EarthCoordinates,
|
|
||||||
'GeoImageDragControl': GeoImageDragControl,
|
|
||||||
'KeyboardNavigation': KeyboardNavigation,
|
|
||||||
'LayerSwitcher': LayerSwitcher,
|
|
||||||
'MouseNavigation': MouseNavigation,
|
|
||||||
'ToggleWireframe': ToggleWireframe,
|
|
||||||
'TouchNavigation': TouchNavigation,
|
|
||||||
'SimpleNavigation': SimpleNavigation,
|
|
||||||
'ShowFps': ShowFps,
|
|
||||||
'Sun': Sun,
|
|
||||||
'ZoomControl': ZoomControl
|
|
||||||
};
|
|
||||||
|
|
||||||
import { Entity } from './entity/Entity.js';
|
import { Entity } from './entity/Entity.js';
|
||||||
import { EntityCollection } from './entity/EntityCollection.js';
|
import { EntityCollection } from './entity/EntityCollection.js';
|
||||||
import { Billboard } from './entity/Billboard.js';
|
import { Billboard } from './entity/Billboard.js';
|
||||||
@ -77,14 +43,6 @@ import { Label } from './entity/Label.js';
|
|||||||
import { PointCloud } from './entity/PointCloud.js';
|
import { PointCloud } from './entity/PointCloud.js';
|
||||||
import { Polyline } from './entity/Polyline.js';
|
import { Polyline } from './entity/Polyline.js';
|
||||||
|
|
||||||
const entity = {
|
|
||||||
'Billboard': Billboard,
|
|
||||||
'Geometry': Geometry,
|
|
||||||
'Label': Label,
|
|
||||||
'PointCloud': PointCloud,
|
|
||||||
'Polyline': Polyline
|
|
||||||
};
|
|
||||||
|
|
||||||
import { input } from './input/input.js';
|
import { input } from './input/input.js';
|
||||||
|
|
||||||
import { Ellipsoid } from './ellipsoid/Ellipsoid.js';
|
import { Ellipsoid } from './ellipsoid/Ellipsoid.js';
|
||||||
@ -94,12 +52,6 @@ import { EmptyTerrain } from './terrain/EmptyTerrain.js';
|
|||||||
import { GlobusTerrain } from './terrain/GlobusTerrain.js';
|
import { GlobusTerrain } from './terrain/GlobusTerrain.js';
|
||||||
import { MapboxTerrain } from './terrain/MapboxTerrain.js';
|
import { MapboxTerrain } from './terrain/MapboxTerrain.js';
|
||||||
|
|
||||||
const terrain = {
|
|
||||||
'EmptyTerrain': EmptyTerrain,
|
|
||||||
'GlobusTerrain': GlobusTerrain,
|
|
||||||
'MapboxTerrain': MapboxTerrain
|
|
||||||
};
|
|
||||||
|
|
||||||
import { Camera } from './camera/Camera.js';
|
import { Camera } from './camera/Camera.js';
|
||||||
import { PlanetCamera } from './camera/PlanetCamera.js';
|
import { PlanetCamera } from './camera/PlanetCamera.js';
|
||||||
|
|
||||||
@ -120,14 +72,6 @@ import { Multisample } from './webgl/Multisample.js';
|
|||||||
import { types } from './webgl/types.js';
|
import { types } from './webgl/types.js';
|
||||||
import { Program } from './webgl/Program.js';
|
import { Program } from './webgl/Program.js';
|
||||||
|
|
||||||
const webgl = {
|
|
||||||
'Framebuffer': Framebuffer,
|
|
||||||
'Handler': Handler,
|
|
||||||
'Multisample': Multisample,
|
|
||||||
'types': types,
|
|
||||||
'Program': Program
|
|
||||||
};
|
|
||||||
|
|
||||||
import { Renderer } from './renderer/Renderer.js';
|
import { Renderer } from './renderer/Renderer.js';
|
||||||
|
|
||||||
import { LightSource } from './light/LightSource.js';
|
import { LightSource } from './light/LightSource.js';
|
||||||
@ -141,9 +85,65 @@ import { Axes } from './scene/Axes.js';
|
|||||||
import { Planet } from './scene/Planet.js';
|
import { Planet } from './scene/Planet.js';
|
||||||
import { RenderNode } from './scene/RenderNode.js';
|
import { RenderNode } from './scene/RenderNode.js';
|
||||||
|
|
||||||
|
const version = {
|
||||||
|
version: __VERSION__
|
||||||
|
};
|
||||||
|
|
||||||
|
const bv = {
|
||||||
|
Box: Box,
|
||||||
|
Sphere: Sphere
|
||||||
|
};
|
||||||
|
|
||||||
|
const layer = {
|
||||||
|
CanvasTiles: CanvasTiles,
|
||||||
|
GeoImage: GeoImage,
|
||||||
|
GeoTexture2d: GeoTexture2d,
|
||||||
|
GeoVideo: GeoVideo,
|
||||||
|
Vector: Vector,
|
||||||
|
WMS: WMS,
|
||||||
|
XYZ: XYZ
|
||||||
|
};
|
||||||
|
|
||||||
|
const control = {
|
||||||
|
DebugInfo: DebugInfo,
|
||||||
|
EarthCoordinates: EarthCoordinates,
|
||||||
|
GeoImageDragControl: GeoImageDragControl,
|
||||||
|
KeyboardNavigation: KeyboardNavigation,
|
||||||
|
LayerSwitcher: LayerSwitcher,
|
||||||
|
MouseNavigation: MouseNavigation,
|
||||||
|
ToggleWireframe: ToggleWireframe,
|
||||||
|
TouchNavigation: TouchNavigation,
|
||||||
|
SimpleNavigation: SimpleNavigation,
|
||||||
|
ShowFps: ShowFps,
|
||||||
|
Sun: Sun,
|
||||||
|
ZoomControl: ZoomControl
|
||||||
|
};
|
||||||
|
|
||||||
|
const entity = {
|
||||||
|
Billboard: Billboard,
|
||||||
|
Geometry: Geometry,
|
||||||
|
Label: Label,
|
||||||
|
PointCloud: PointCloud,
|
||||||
|
Polyline: Polyline
|
||||||
|
};
|
||||||
|
|
||||||
|
const terrain = {
|
||||||
|
EmptyTerrain: EmptyTerrain,
|
||||||
|
GlobusTerrain: GlobusTerrain,
|
||||||
|
MapboxTerrain: MapboxTerrain
|
||||||
|
};
|
||||||
|
|
||||||
|
const webgl = {
|
||||||
|
Framebuffer: Framebuffer,
|
||||||
|
Handler: Handler,
|
||||||
|
Multisample: Multisample,
|
||||||
|
types: types,
|
||||||
|
Program: Program
|
||||||
|
};
|
||||||
|
|
||||||
const scene = {
|
const scene = {
|
||||||
'Planet': Planet,
|
Planet: Planet,
|
||||||
'Axes': Axes
|
Axes: Axes
|
||||||
};
|
};
|
||||||
|
|
||||||
export {
|
export {
|
||||||
|
|||||||
@ -20,8 +20,8 @@ const KeyboardHandler = function () {
|
|||||||
} else {
|
} else {
|
||||||
KeyboardHandler.prototype._instance = this;
|
KeyboardHandler.prototype._instance = this;
|
||||||
|
|
||||||
document.onkeydown = function (event) { _event = event; _active && _that.handleKeyDown.call(_that) };
|
document.onkeydown = function (event) { _event = event; _active && _that.handleKeyDown(); };
|
||||||
document.onkeyup = function (event) { _event = event; _active && _that.handleKeyUp.call(_that) };
|
document.onkeyup = function (event) { _event = event; _active && _that.handleKeyUp(); };
|
||||||
}
|
}
|
||||||
|
|
||||||
var _sortByPriority = function (a, b) {
|
var _sortByPriority = function (a, b) {
|
||||||
@ -30,7 +30,7 @@ const KeyboardHandler = function () {
|
|||||||
|
|
||||||
this.removeEvent = function (events, callback) {
|
this.removeEvent = function (events, callback) {
|
||||||
//
|
//
|
||||||
//TODO:...
|
// TODO:...
|
||||||
//
|
//
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -43,17 +43,17 @@ const KeyboardHandler = function () {
|
|||||||
priority = 1600;
|
priority = 1600;
|
||||||
}
|
}
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case "keyfree": {
|
case "keyfree":
|
||||||
if (!_unpressedKeysCallbacks[keyCode]) {
|
if (!_unpressedKeysCallbacks[keyCode]) {
|
||||||
_unpressedKeysCallbacks[keyCode] = [];
|
_unpressedKeysCallbacks[keyCode] = [];
|
||||||
}
|
}
|
||||||
_unpressedKeysCallbacks[keyCode].push({ callback: callback, sender: sender, priority: priority });
|
_unpressedKeysCallbacks[keyCode].push({ callback: callback, sender: sender, priority: priority });
|
||||||
_unpressedKeysCallbacks[keyCode].sort(_sortByPriority);
|
_unpressedKeysCallbacks[keyCode].sort(_sortByPriority);
|
||||||
} break;
|
break;
|
||||||
|
|
||||||
case "keypress": {
|
case "keypress":
|
||||||
if (keyCode == null) {
|
if (keyCode == null) {
|
||||||
_anykeyCallback = { "callback": callback, "sender": sender || _that };
|
_anykeyCallback = { callback: callback, sender: sender || _that };
|
||||||
} else {
|
} else {
|
||||||
if (!_pressedKeysCallbacks[keyCode]) {
|
if (!_pressedKeysCallbacks[keyCode]) {
|
||||||
_pressedKeysCallbacks[keyCode] = [];
|
_pressedKeysCallbacks[keyCode] = [];
|
||||||
@ -61,15 +61,15 @@ const KeyboardHandler = function () {
|
|||||||
_pressedKeysCallbacks[keyCode].push({ callback: callback, sender: sender, priority: priority });
|
_pressedKeysCallbacks[keyCode].push({ callback: callback, sender: sender, priority: priority });
|
||||||
_pressedKeysCallbacks[keyCode].sort(_sortByPriority);
|
_pressedKeysCallbacks[keyCode].sort(_sortByPriority);
|
||||||
}
|
}
|
||||||
} break;
|
break;
|
||||||
|
|
||||||
case "charkeypress": {
|
case "charkeypress":
|
||||||
if (!_charkeysCallbacks[keyCode]) {
|
if (!_charkeysCallbacks[keyCode]) {
|
||||||
_charkeysCallbacks[keyCode] = [];
|
_charkeysCallbacks[keyCode] = [];
|
||||||
}
|
}
|
||||||
_charkeysCallbacks[keyCode].push({ callback: callback, sender: sender, priority: priority });
|
_charkeysCallbacks[keyCode].push({ callback: callback, sender: sender, priority: priority });
|
||||||
_charkeysCallbacks[keyCode].sort(_sortByPriority);
|
_charkeysCallbacks[keyCode].sort(_sortByPriority);
|
||||||
} break;
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,7 @@ const MouseHandler = function (htmlObject) {
|
|||||||
|
|
||||||
MouseHandler.prototype.setEvent = function (event, sender, callback) {
|
MouseHandler.prototype.setEvent = function (event, sender, callback) {
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case "mousewheel": {
|
case "mousewheel":
|
||||||
this._htmlObject.addEventListener('mousewheel', function (evt) {
|
this._htmlObject.addEventListener('mousewheel', function (evt) {
|
||||||
var delta = evt.deltaY || evt.detail || evt.wheelDelta;
|
var delta = evt.deltaY || evt.detail || evt.wheelDelta;
|
||||||
if (evt.wheelDelta == undefined) {
|
if (evt.wheelDelta == undefined) {
|
||||||
@ -28,8 +28,9 @@ MouseHandler.prototype.setEvent = function (event, sender, callback) {
|
|||||||
callback.call(sender, evt);
|
callback.call(sender, evt);
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
}, false);
|
}, false);
|
||||||
} break;
|
break;
|
||||||
case "mousedown": {
|
|
||||||
|
case "mousedown":
|
||||||
this._htmlObject.addEventListener('mousedown', function (event) {
|
this._htmlObject.addEventListener('mousedown', function (event) {
|
||||||
callback.call(sender, event);
|
callback.call(sender, event);
|
||||||
});
|
});
|
||||||
@ -37,21 +38,23 @@ MouseHandler.prototype.setEvent = function (event, sender, callback) {
|
|||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
} break;
|
break;
|
||||||
case "mouseup": {
|
|
||||||
|
case "mouseup":
|
||||||
this._htmlObject.addEventListener('mouseup', function (event) {
|
this._htmlObject.addEventListener('mouseup', function (event) {
|
||||||
callback.call(sender, event);
|
callback.call(sender, event);
|
||||||
});
|
});
|
||||||
} break;
|
break;
|
||||||
case "mousemove": {
|
|
||||||
|
case "mousemove":
|
||||||
this._htmlObject.addEventListener('mousemove', function (event) {
|
this._htmlObject.addEventListener('mousemove', function (event) {
|
||||||
var rect = this.getBoundingClientRect();
|
var rect = this.getBoundingClientRect();
|
||||||
callback.call(sender, {
|
callback.call(sender, {
|
||||||
'clientX': event.clientX - rect.left,
|
clientX: event.clientX - rect.left,
|
||||||
'clientY': event.clientY - rect.top
|
clientY: event.clientY - rect.top
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
} break;
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,7 @@ const TouchHandler = function (htmlObject) {
|
|||||||
|
|
||||||
TouchHandler.prototype.setEvent = function (event, sender, callback) {
|
TouchHandler.prototype.setEvent = function (event, sender, callback) {
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case "touchcancel": {
|
case "touchcancel":
|
||||||
this._htmlObject.addEventListener('touchcancel', function (event) {
|
this._htmlObject.addEventListener('touchcancel', function (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
var rect = this.getBoundingClientRect();
|
var rect = this.getBoundingClientRect();
|
||||||
@ -19,9 +19,9 @@ TouchHandler.prototype.setEvent = function (event, sender, callback) {
|
|||||||
callback.call(sender, event);
|
callback.call(sender, event);
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
});
|
});
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case "touchstart": {
|
|
||||||
|
case "touchstart":
|
||||||
this._htmlObject.addEventListener('touchstart', function (event) {
|
this._htmlObject.addEventListener('touchstart', function (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
var rect = this.getBoundingClientRect();
|
var rect = this.getBoundingClientRect();
|
||||||
@ -30,8 +30,9 @@ TouchHandler.prototype.setEvent = function (event, sender, callback) {
|
|||||||
callback.call(sender, event);
|
callback.call(sender, event);
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
});
|
});
|
||||||
} break;
|
break;
|
||||||
case "touchend": {
|
|
||||||
|
case "touchend":
|
||||||
this._htmlObject.addEventListener('touchend', function (event) {
|
this._htmlObject.addEventListener('touchend', function (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
var rect = this.getBoundingClientRect();
|
var rect = this.getBoundingClientRect();
|
||||||
@ -40,8 +41,9 @@ TouchHandler.prototype.setEvent = function (event, sender, callback) {
|
|||||||
callback.call(sender, event);
|
callback.call(sender, event);
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
});
|
});
|
||||||
} break;
|
break;
|
||||||
case "touchmove": {
|
|
||||||
|
case "touchmove":
|
||||||
this._htmlObject.addEventListener('touchmove', function (event) {
|
this._htmlObject.addEventListener('touchmove', function (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
var rect = this.getBoundingClientRect();
|
var rect = this.getBoundingClientRect();
|
||||||
@ -50,7 +52,7 @@ TouchHandler.prototype.setEvent = function (event, sender, callback) {
|
|||||||
callback.call(sender, event);
|
callback.call(sender, event);
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
});
|
});
|
||||||
} break;
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -95,10 +95,12 @@ class BaseGeoImage extends Layer {
|
|||||||
this._cornersWgs84 = [corners[0].clone(), corners[1].clone(), corners[2].clone(), corners[3].clone()] || [0, 0, 0, 0];
|
this._cornersWgs84 = [corners[0].clone(), corners[1].clone(), corners[2].clone(), corners[3].clone()] || [0, 0, 0, 0];
|
||||||
|
|
||||||
for (var i = 0; i < this._cornersWgs84.length; i++) {
|
for (var i = 0; i < this._cornersWgs84.length; i++) {
|
||||||
if (this._cornersWgs84[i].lat >= 89.9)
|
if (this._cornersWgs84[i].lat >= 89.9) {
|
||||||
this._cornersWgs84[i].lat = 89.9;
|
this._cornersWgs84[i].lat = 89.9;
|
||||||
if (this._cornersWgs84[i].lat <= -89.9)
|
}
|
||||||
|
if (this._cornersWgs84[i].lat <= -89.9) {
|
||||||
this._cornersWgs84[i].lat = -89.9;
|
this._cornersWgs84[i].lat = -89.9;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this._extent.setByCoordinates(this._cornersWgs84);
|
this._extent.setByCoordinates(this._cornersWgs84);
|
||||||
|
|
||||||
@ -135,7 +137,7 @@ class BaseGeoImage extends Layer {
|
|||||||
this._extentMercParams = [this._extentMerc.southWest.lon, this._extentMerc.southWest.lat, 2.0 / this._extentMerc.getWidth(), 2.0 / this._extentMerc.getHeight()];
|
this._extentMercParams = [this._extentMerc.southWest.lon, this._extentMerc.southWest.lat, 2.0 / this._extentMerc.getWidth(), 2.0 / this._extentMerc.getHeight()];
|
||||||
}
|
}
|
||||||
|
|
||||||
//creates material frame textures
|
// creates material frame textures
|
||||||
if (this._planet) {
|
if (this._planet) {
|
||||||
var p = this._planet,
|
var p = this._planet,
|
||||||
h = p.renderer.handler,
|
h = p.renderer.handler,
|
||||||
@ -201,11 +203,12 @@ class BaseGeoImage extends Layer {
|
|||||||
|
|
||||||
super.setVisibility(visibility);
|
super.setVisibility(visibility);
|
||||||
|
|
||||||
//remove from creator
|
// remove from creator
|
||||||
if (visibility)
|
if (visibility) {
|
||||||
this._sourceReady && this._planet._geoImageCreator.add(this);
|
this._sourceReady && this._planet._geoImageCreator.add(this);
|
||||||
else
|
} else {
|
||||||
this._sourceReady && this._planet._geoImageCreator.remove(this);
|
this._sourceReady && this._planet._geoImageCreator.remove(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -215,7 +218,6 @@ class BaseGeoImage extends Layer {
|
|||||||
* @param {og.planetSegment.Material} material - GeoImage material.
|
* @param {og.planetSegment.Material} material - GeoImage material.
|
||||||
*/
|
*/
|
||||||
clearMaterial(material) {
|
clearMaterial(material) {
|
||||||
//just clear material pointer not geoimage
|
|
||||||
material.image = null;
|
material.image = null;
|
||||||
material.texture = null;
|
material.texture = null;
|
||||||
material.isLoading = false;
|
material.isLoading = false;
|
||||||
|
|||||||
@ -5,7 +5,6 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import * as quadTree from '../quadTree/quadTree.js';
|
import * as quadTree from '../quadTree/quadTree.js';
|
||||||
import { ImageCanvas } from '../ImageCanvas.js';
|
|
||||||
import { Layer } from './Layer.js';
|
import { Layer } from './Layer.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -13,7 +12,6 @@ import { Layer } from './Layer.js';
|
|||||||
* @const
|
* @const
|
||||||
* @type {number}
|
* @type {number}
|
||||||
*/
|
*/
|
||||||
const MAX_REQUESTS = 7;
|
|
||||||
|
|
||||||
const EVENT_NAMES = [
|
const EVENT_NAMES = [
|
||||||
/**
|
/**
|
||||||
@ -67,7 +65,7 @@ class CanvasTiles extends Layer {
|
|||||||
* @protected
|
* @protected
|
||||||
* @type {Array.<og.planetSegment.Material>}
|
* @type {Array.<og.planetSegment.Material>}
|
||||||
*/
|
*/
|
||||||
this._pendingsQueue = []; //new og.QueueArray();
|
this._pendingsQueue = []; // new og.QueueArray();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Draw tile callback.
|
* Draw tile callback.
|
||||||
@ -93,7 +91,7 @@ class CanvasTiles extends Layer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
this._pendingsQueue = [];
|
this._pendingsQueue = [];
|
||||||
//this._pendingsQueue.clear();
|
// this._pendingsQueue.clear();
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -203,8 +201,9 @@ class CanvasTiles extends Layer {
|
|||||||
if (this._pendingsQueue.length) {
|
if (this._pendingsQueue.length) {
|
||||||
if (CanvasTiles.__requestsCounter < CanvasTiles.MAX_REQUESTS) {
|
if (CanvasTiles.__requestsCounter < CanvasTiles.MAX_REQUESTS) {
|
||||||
var pmat = this._whilePendings();
|
var pmat = this._whilePendings();
|
||||||
if (pmat)
|
if (pmat) {
|
||||||
this._exec.call(this, pmat);
|
this._exec(pmat);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (this._counter === 0) {
|
} else if (this._counter === 0) {
|
||||||
this.events.dispatch(this.events.loadend);
|
this.events.dispatch(this.events.loadend);
|
||||||
@ -224,7 +223,6 @@ class CanvasTiles extends Layer {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
applyMaterial(material) {
|
applyMaterial(material) {
|
||||||
if (material.isReady) {
|
if (material.isReady) {
|
||||||
return [0, 0, 1, 1];
|
return [0, 0, 1, 1];
|
||||||
|
|||||||
@ -94,13 +94,13 @@ class GeoImage extends BaseGeoImage {
|
|||||||
if (this._image.complete) {
|
if (this._image.complete) {
|
||||||
this._onLoad(this._image);
|
this._onLoad(this._image);
|
||||||
} else if (this._image.src) {
|
} else if (this._image.src) {
|
||||||
var that = this;
|
let that = this;
|
||||||
this._image.addEventListener('load', function (e) {
|
this._image.addEventListener('load', function (e) {
|
||||||
that._onLoad(this);
|
that._onLoad(this);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
var that = this;
|
let that = this;
|
||||||
this._image = new Image();
|
this._image = new Image();
|
||||||
this._image.addEventListener('load', function (e) {
|
this._image.addEventListener('load', function (e) {
|
||||||
that._onLoad(this);
|
that._onLoad(this);
|
||||||
|
|||||||
@ -7,7 +7,6 @@
|
|||||||
import * as math from '../math.js';
|
import * as math from '../math.js';
|
||||||
import { BaseGeoImage } from './BaseGeoImage.js';
|
import { BaseGeoImage } from './BaseGeoImage.js';
|
||||||
|
|
||||||
|
|
||||||
class GeoTexture2d extends BaseGeoImage {
|
class GeoTexture2d extends BaseGeoImage {
|
||||||
constructor(name, options) {
|
constructor(name, options) {
|
||||||
super(name, options);
|
super(name, options);
|
||||||
|
|||||||
@ -74,7 +74,7 @@ class GeoVideo extends BaseGeoImage {
|
|||||||
|
|
||||||
super.setVisibility(visibility);
|
super.setVisibility(visibility);
|
||||||
|
|
||||||
//remove from creator
|
// remove from creator
|
||||||
if (visibility) {
|
if (visibility) {
|
||||||
this._sourceReady && this._planet._geoImageCreator.add(this);
|
this._sourceReady && this._planet._geoImageCreator.add(this);
|
||||||
this._video && this._video.play();
|
this._video && this._video.play();
|
||||||
@ -142,14 +142,14 @@ class GeoVideo extends BaseGeoImage {
|
|||||||
if (this._video.readyState === this._video.HAVE_ENOUGH_DATA) {
|
if (this._video.readyState === this._video.HAVE_ENOUGH_DATA) {
|
||||||
this._onCanPlay(this._video);
|
this._onCanPlay(this._video);
|
||||||
} else if (this._video.src) {
|
} else if (this._video.src) {
|
||||||
var that = this;
|
let that = this;
|
||||||
this._video.addEventListener('canplay', function (e) {
|
this._video.addEventListener('canplay', function (e) {
|
||||||
that._onCanPlay(this);
|
that._onCanPlay(this);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this._video = document.createElement('video');
|
this._video = document.createElement('video');
|
||||||
var that = this;
|
let that = this;
|
||||||
this._video.addEventListener('canplay', function () {
|
this._video.addEventListener('canplay', function () {
|
||||||
that._onCanPlay(this);
|
that._onCanPlay(this);
|
||||||
});
|
});
|
||||||
@ -187,7 +187,6 @@ class GeoVideo extends BaseGeoImage {
|
|||||||
this._refreshFrame && this._createFrame();
|
this._refreshFrame && this._createFrame();
|
||||||
|
|
||||||
if (this._sourceCreated) {
|
if (this._sourceCreated) {
|
||||||
var gl = this._planet.renderer.handler.gl;
|
|
||||||
gl.bindTexture(gl.TEXTURE_2D, this._sourceTexture);
|
gl.bindTexture(gl.TEXTURE_2D, this._sourceTexture);
|
||||||
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._video);
|
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._video);
|
||||||
} else {
|
} else {
|
||||||
@ -244,7 +243,6 @@ class GeoVideo extends BaseGeoImage {
|
|||||||
this._sourceTexture = this._planet.renderer.handler.createTexture_n(this._video);
|
this._sourceTexture = this._planet.renderer.handler.createTexture_n(this._video);
|
||||||
this._sourceCreated = true;
|
this._sourceCreated = true;
|
||||||
} else {
|
} else {
|
||||||
var gl = this._planet.renderer.handler.gl;
|
|
||||||
gl.bindTexture(gl.TEXTURE_2D, this._sourceTexture);
|
gl.bindTexture(gl.TEXTURE_2D, this._sourceTexture);
|
||||||
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._video);
|
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._video);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,7 +12,6 @@ import { LonLat } from '../LonLat.js';
|
|||||||
import { Material } from './Material.js';
|
import { Material } from './Material.js';
|
||||||
import { Vec3 } from '../math/Vec3.js';
|
import { Vec3 } from '../math/Vec3.js';
|
||||||
|
|
||||||
|
|
||||||
export const FADING_FACTOR = 0.29;
|
export const FADING_FACTOR = 0.29;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -191,7 +190,7 @@ class Layer {
|
|||||||
*/
|
*/
|
||||||
this._extentMerc = null;
|
this._extentMerc = null;
|
||||||
|
|
||||||
//Setting the extent up
|
// Setting the extent up
|
||||||
this.setExtent(utils.createExtent(options.extent, new Extent(new LonLat(-180, -90), new LonLat(180, 90))));
|
this.setExtent(utils.createExtent(options.extent, new Extent(new LonLat(-180, -90), new LonLat(180, 90))));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -273,7 +272,7 @@ class Layer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get pickingEnabled() {
|
get pickingEnabled() {
|
||||||
return this._pickingEnabled ? true : false;
|
return !!this._pickingEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -350,7 +349,6 @@ class Layer {
|
|||||||
remove() {
|
remove() {
|
||||||
var p = this._planet;
|
var p = this._planet;
|
||||||
if (p) {
|
if (p) {
|
||||||
var lid = this._id;
|
|
||||||
for (var i = 0; i < p.layers.length; i++) {
|
for (var i = 0; i < p.layers.length; i++) {
|
||||||
if (this.isEqual(p.layers[i])) {
|
if (this.isEqual(p.layers[i])) {
|
||||||
p.renderer.clearPickingColor(this);
|
p.renderer.clearPickingColor(this);
|
||||||
@ -530,22 +528,22 @@ class Layer {
|
|||||||
* @protected
|
* @protected
|
||||||
*/
|
*/
|
||||||
_correctFullExtent() {
|
_correctFullExtent() {
|
||||||
//var e = this._extent,
|
// var e = this._extent,
|
||||||
// em = this._extentMerc;
|
// em = this._extentMerc;
|
||||||
//var ENLARGE_MERCATOR_LON = og.mercator.POLE + 50000;
|
// var ENLARGE_MERCATOR_LON = og.mercator.POLE + 50000;
|
||||||
//var ENLARGE_MERCATOR_LAT = og.mercator.POLE + 50000;
|
// var ENLARGE_MERCATOR_LAT = og.mercator.POLE + 50000;
|
||||||
//if (e.northEast.lat === 90.0) {
|
// if (e.northEast.lat === 90.0) {
|
||||||
// em.northEast.lat = ENLARGE_MERCATOR_LAT;
|
// em.northEast.lat = ENLARGE_MERCATOR_LAT;
|
||||||
//}
|
// }
|
||||||
//if (e.northEast.lon === 180.0) {
|
// if (e.northEast.lon === 180.0) {
|
||||||
// em.northEast.lon = ENLARGE_MERCATOR_LON;
|
// em.northEast.lon = ENLARGE_MERCATOR_LON;
|
||||||
//}
|
// }
|
||||||
//if (e.southWest.lat === -90.0) {
|
// if (e.southWest.lat === -90.0) {
|
||||||
// em.southWest.lat = -ENLARGE_MERCATOR_LAT;
|
// em.southWest.lat = -ENLARGE_MERCATOR_LAT;
|
||||||
//}
|
// }
|
||||||
//if (e.southWest.lon === -180.0) {
|
// if (e.southWest.lon === -180.0) {
|
||||||
// em.southWest.lon = -ENLARGE_MERCATOR_LON;
|
// em.southWest.lon = -ENLARGE_MERCATOR_LON;
|
||||||
//}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
_refreshFadingOpacity() {
|
_refreshFadingOpacity() {
|
||||||
@ -555,8 +553,8 @@ class Layer {
|
|||||||
|
|
||||||
this._fadingOpacity += this._fadingFactor;
|
this._fadingOpacity += this._fadingFactor;
|
||||||
|
|
||||||
if (this._fadingFactor > 0.0 && this._fadingOpacity > this._opacity ||
|
if ((this._fadingFactor > 0.0 && this._fadingOpacity > this._opacity) ||
|
||||||
this._fadingFactor < 0.0 && this._fadingOpacity < this._opacity) {
|
(this._fadingFactor < 0.0 && this._fadingOpacity < this._opacity)) {
|
||||||
this._fadingOpacity = this._opacity;
|
this._fadingOpacity = this._opacity;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -17,7 +17,7 @@ const Material = function (segment, layer) {
|
|||||||
this.texOffset = [0.0, 0.0, 1.0, 1.0];
|
this.texOffset = [0.0, 0.0, 1.0, 1.0];
|
||||||
this.loadingAttempts = 0;
|
this.loadingAttempts = 0;
|
||||||
|
|
||||||
//vector data
|
// vector data
|
||||||
this._updateTexture = null;
|
this._updateTexture = null;
|
||||||
this._updatePickingMask = null;
|
this._updatePickingMask = null;
|
||||||
this.pickingReady = false;
|
this.pickingReady = false;
|
||||||
|
|||||||
@ -16,7 +16,6 @@ import {
|
|||||||
} from '../quadTree/EntityCollectionNode.js';
|
} from '../quadTree/EntityCollectionNode.js';
|
||||||
import { GeometryHandler } from '../entity/GeometryHandler.js';
|
import { GeometryHandler } from '../entity/GeometryHandler.js';
|
||||||
import { Layer } from './Layer.js';
|
import { Layer } from './Layer.js';
|
||||||
import { LonLat } from '../LonLat.js';
|
|
||||||
import { QueueArray } from '../QueueArray.js';
|
import { QueueArray } from '../QueueArray.js';
|
||||||
import { Vec3 } from '../math/Vec3.js';
|
import { Vec3 } from '../math/Vec3.js';
|
||||||
|
|
||||||
@ -134,12 +133,12 @@ class Vector extends Layer {
|
|||||||
this._entities = _entitiesConstructor(options.entities || []);
|
this._entities = _entitiesConstructor(options.entities || []);
|
||||||
|
|
||||||
this._stripEntityCollection = new EntityCollection({
|
this._stripEntityCollection = new EntityCollection({
|
||||||
'pickingEnabled': this.pickingEnabled
|
pickingEnabled: this.pickingEnabled
|
||||||
});
|
});
|
||||||
this._bindEventsDefault(this._stripEntityCollection);
|
this._bindEventsDefault(this._stripEntityCollection);
|
||||||
|
|
||||||
this._polylineEntityCollection = new EntityCollection({
|
this._polylineEntityCollection = new EntityCollection({
|
||||||
'pickingEnabled': this.pickingEnabled
|
pickingEnabled: this.pickingEnabled
|
||||||
});
|
});
|
||||||
this._bindEventsDefault(this._polylineEntityCollection);
|
this._bindEventsDefault(this._polylineEntityCollection);
|
||||||
|
|
||||||
@ -158,7 +157,7 @@ class Vector extends Layer {
|
|||||||
|
|
||||||
this._pendingsQueue = [];
|
this._pendingsQueue = [];
|
||||||
|
|
||||||
/** Creates collections tree*/
|
// Creates collections tree
|
||||||
this.setEntities(this._entities);
|
this.setEntities(this._entities);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -273,7 +272,7 @@ class Vector extends Layer {
|
|||||||
let temp = this._hasImageryTiles;
|
let temp = this._hasImageryTiles;
|
||||||
|
|
||||||
//
|
//
|
||||||
//...pointCloud, shape, model etc.
|
// ...pointCloud, shape, model etc.
|
||||||
//
|
//
|
||||||
|
|
||||||
if (entity.strip) {
|
if (entity.strip) {
|
||||||
@ -301,11 +300,11 @@ class Vector extends Layer {
|
|||||||
entity._lonlat = this._planet.ellipsoid.cartesianToLonLat(entity._cartesian);
|
entity._lonlat = this._planet.ellipsoid.cartesianToLonLat(entity._cartesian);
|
||||||
}
|
}
|
||||||
|
|
||||||
//north tree
|
// north tree
|
||||||
if (entity._lonlat.lat > mercator.MAX_LAT) {
|
if (entity._lonlat.lat > mercator.MAX_LAT) {
|
||||||
this._entityCollectionsTreeNorth.insertEntity(entity, rightNow);
|
this._entityCollectionsTreeNorth.insertEntity(entity, rightNow);
|
||||||
} else if (entity._lonlat.lat < mercator.MIN_LAT) {
|
} else if (entity._lonlat.lat < mercator.MIN_LAT) {
|
||||||
//south tree
|
// south tree
|
||||||
this._entityCollectionsTreeSouth.insertEntity(entity, rightNow);
|
this._entityCollectionsTreeSouth.insertEntity(entity, rightNow);
|
||||||
} else {
|
} else {
|
||||||
this._entityCollectionsTree.insertEntity(entity, rightNow);
|
this._entityCollectionsTree.insertEntity(entity, rightNow);
|
||||||
@ -362,7 +361,7 @@ class Vector extends Layer {
|
|||||||
entity._nodePtr.deferredEntities.length === 0) {
|
entity._nodePtr.deferredEntities.length === 0) {
|
||||||
entity._nodePtr.entityCollection = null;
|
entity._nodePtr.entityCollection = null;
|
||||||
//
|
//
|
||||||
//...
|
// ...
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
} else if (entity._nodePtr &&
|
} else if (entity._nodePtr &&
|
||||||
@ -469,7 +468,7 @@ class Vector extends Layer {
|
|||||||
* @public
|
* @public
|
||||||
*/
|
*/
|
||||||
clear() {
|
clear() {
|
||||||
//TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -647,7 +646,7 @@ class Vector extends Layer {
|
|||||||
|
|
||||||
outArr.push(ec);
|
outArr.push(ec);
|
||||||
//
|
//
|
||||||
//...TODO: extent
|
// ...TODO: extent
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -676,8 +675,8 @@ class Vector extends Layer {
|
|||||||
while (e_i--) {
|
while (e_i--) {
|
||||||
var p = e[e_i].polyline;
|
var p = e[e_i].polyline;
|
||||||
if (visibleExtent.overlaps(p._extent)) {
|
if (visibleExtent.overlaps(p._extent)) {
|
||||||
//TODO:this works only for mercator area.
|
// TODO:this works only for mercator area.
|
||||||
//So it needs to be working on poles.
|
// needs to be working on poles.
|
||||||
let coords = p._pathLonLatMerc,
|
let coords = p._pathLonLatMerc,
|
||||||
c_j = coords.length;
|
c_j = coords.length;
|
||||||
while (c_j--) {
|
while (c_j--) {
|
||||||
@ -690,7 +689,7 @@ class Vector extends Layer {
|
|||||||
if (seg._extent.isInside(ll)) {
|
if (seg._extent.isInside(ll)) {
|
||||||
let cart = p._path3v[c_j][c_j_h];
|
let cart = p._path3v[c_j][c_j_h];
|
||||||
seg.getTerrainPoint(cart, ll, res);
|
seg.getTerrainPoint(cart, ll, res);
|
||||||
p.setPoint3v(res.addA(res.normal().scale(rtg && p.altitude || 0.0)), c_j_h, c_j, true);
|
p.setPoint3v(res.addA(res.normal().scale((rtg && p.altitude) || 0.0)), c_j_h, c_j, true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -704,19 +703,19 @@ class Vector extends Layer {
|
|||||||
collectVisibleCollections(outArr) {
|
collectVisibleCollections(outArr) {
|
||||||
var p = this._planet;
|
var p = this._planet;
|
||||||
|
|
||||||
if (this._fading && this._fadingOpacity > 0.0 ||
|
if ((this._fading && this._fadingOpacity > 0.0) ||
|
||||||
this.minZoom <= this._planet.maxCurrZoom && this.maxZoom >= p.maxCurrZoom) {
|
(this.minZoom <= this._planet.maxCurrZoom && this.maxZoom >= p.maxCurrZoom)) {
|
||||||
|
|
||||||
this._renderingNodes = {};
|
this._renderingNodes = {};
|
||||||
this._renderingNodesNorth = {};
|
this._renderingNodesNorth = {};
|
||||||
this._renderingNodesSouth = {};
|
this._renderingNodesSouth = {};
|
||||||
|
|
||||||
//Common collections first
|
// Common collections first
|
||||||
this._collectStripCollectionPASS(outArr);
|
this._collectStripCollectionPASS(outArr);
|
||||||
|
|
||||||
this._collectPolylineCollectionPASS(outArr);
|
this._collectPolylineCollectionPASS(outArr);
|
||||||
|
|
||||||
//Merc nodes
|
// Merc nodes
|
||||||
this._secondPASS = [];
|
this._secondPASS = [];
|
||||||
this._entityCollectionsTree.collectRenderCollectionsPASS1(p._visibleNodes, outArr);
|
this._entityCollectionsTree.collectRenderCollectionsPASS1(p._visibleNodes, outArr);
|
||||||
var i = this._secondPASS.length;
|
var i = this._secondPASS.length;
|
||||||
@ -724,7 +723,7 @@ class Vector extends Layer {
|
|||||||
this._secondPASS[i].collectRenderCollectionsPASS2(p._visibleNodes, outArr, this._secondPASS[i].nodeId);
|
this._secondPASS[i].collectRenderCollectionsPASS2(p._visibleNodes, outArr, this._secondPASS[i].nodeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
//North nodes
|
// North nodes
|
||||||
this._secondPASS = [];
|
this._secondPASS = [];
|
||||||
this._entityCollectionsTreeNorth.collectRenderCollectionsPASS1(p._visibleNodesNorth, outArr);
|
this._entityCollectionsTreeNorth.collectRenderCollectionsPASS1(p._visibleNodesNorth, outArr);
|
||||||
i = this._secondPASS.length;
|
i = this._secondPASS.length;
|
||||||
@ -732,7 +731,7 @@ class Vector extends Layer {
|
|||||||
this._secondPASS[i].collectRenderCollectionsPASS2(p._visibleNodesNorth, outArr, this._secondPASS[i].nodeId);
|
this._secondPASS[i].collectRenderCollectionsPASS2(p._visibleNodesNorth, outArr, this._secondPASS[i].nodeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
//South nodes
|
// South nodes
|
||||||
this._secondPASS = [];
|
this._secondPASS = [];
|
||||||
this._entityCollectionsTreeSouth.collectRenderCollectionsPASS1(p._visibleNodesSouth, outArr);
|
this._entityCollectionsTreeSouth.collectRenderCollectionsPASS1(p._visibleNodesSouth, outArr);
|
||||||
i = this._secondPASS.length;
|
i = this._secondPASS.length;
|
||||||
@ -818,8 +817,8 @@ class Vector extends Layer {
|
|||||||
|
|
||||||
var mId = this._id;
|
var mId = this._id;
|
||||||
var psegm = material;
|
var psegm = material;
|
||||||
var i = 0;
|
|
||||||
while (pn.parentNode && i < 2) {
|
while (pn.parentNode) {
|
||||||
if (psegm && psegm.isReady) {
|
if (psegm && psegm.isReady) {
|
||||||
notEmpty = true;
|
notEmpty = true;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -166,10 +166,10 @@ class XYZ extends Layer {
|
|||||||
material.loadingAttempts++;
|
material.loadingAttempts++;
|
||||||
|
|
||||||
this._planet._tileLoader.load({
|
this._planet._tileLoader.load({
|
||||||
'src': this._getHTTPRequestString(material.segment),
|
src: this._getHTTPRequestString(material.segment),
|
||||||
'type': 'imageBitmap',
|
type: 'imageBitmap',
|
||||||
'filter': () => seg.initialized && seg.node.getState() === RENDERING || forceLoading,
|
filter: () => (seg.initialized && seg.node.getState() === RENDERING) || forceLoading,
|
||||||
'options': {}
|
options: {}
|
||||||
}, (response) => {
|
}, (response) => {
|
||||||
if (response.status === "ready") {
|
if (response.status === "ready") {
|
||||||
if (material.isLoading) {
|
if (material.isLoading) {
|
||||||
@ -202,10 +202,10 @@ class XYZ extends Layer {
|
|||||||
*/
|
*/
|
||||||
_createUrl(segment) {
|
_createUrl(segment) {
|
||||||
return stringTemplate(this.url, {
|
return stringTemplate(this.url, {
|
||||||
"s": this._getSubdomain(),
|
s: this._getSubdomain(),
|
||||||
"x": segment.tileX.toString(),
|
x: segment.tileX.toString(),
|
||||||
"y": segment.tileY.toString(),
|
y: segment.tileY.toString(),
|
||||||
"z": segment.tileZoom.toString()
|
z: segment.tileZoom.toString()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,7 +257,7 @@ class XYZ extends Layer {
|
|||||||
psegm = pn.segment.materials[mId];
|
psegm = pn.segment.materials[mId];
|
||||||
}
|
}
|
||||||
|
|
||||||
let maxNativeZoom = material.layer.maxNativeZoom
|
let maxNativeZoom = material.layer.maxNativeZoom;
|
||||||
|
|
||||||
if (pn.segment.tileZoom === maxNativeZoom) {
|
if (pn.segment.tileZoom === maxNativeZoom) {
|
||||||
material.textureNotExists();
|
material.textureNotExists();
|
||||||
@ -346,7 +346,6 @@ class XYZ extends Layer {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const EVENT_NAMES = [
|
const EVENT_NAMES = [
|
||||||
/**
|
/**
|
||||||
* Triggered when current tile image has loaded before rendereing.
|
* Triggered when current tile image has loaded before rendereing.
|
||||||
|
|||||||
@ -108,7 +108,7 @@ class LightSource {
|
|||||||
* @returns {og.LightSource}
|
* @returns {og.LightSource}
|
||||||
*/
|
*/
|
||||||
clone() {
|
clone() {
|
||||||
//TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -176,10 +176,11 @@ export function random(min, max) {
|
|||||||
* @returns {number} -
|
* @returns {number} -
|
||||||
**/
|
**/
|
||||||
export function degToDec(d, m, s, p) {
|
export function degToDec(d, m, s, p) {
|
||||||
if (p)
|
if (p) {
|
||||||
return d + m / 60.0 + s / 3600.0;
|
return d + m / 60.0 + s / 3600.0;
|
||||||
else
|
} else {
|
||||||
return -d - m / 60.0 - s / 3600.0;
|
return -d - m / 60.0 - s / 3600.0;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -319,8 +320,7 @@ export function rev(x) {
|
|||||||
* @returns {number} -
|
* @returns {number} -
|
||||||
*/
|
*/
|
||||||
export function norm_lon(lon) {
|
export function norm_lon(lon) {
|
||||||
return lon > 180 ? ((lon + 180) % 360) - 180 :
|
return lon > 180 ? ((lon + 180) % 360) - 180 : lon < -180 ? ((lon - 180) % 360) + 180 : lon;
|
||||||
lon < -180 ? ((lon - 180) % 360) + 180 : lon;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -368,8 +368,9 @@ export function solve_iteration(f, x0, err, maxIter) {
|
|||||||
for (var i = 0; i < maxIter; i++) {
|
for (var i = 0; i < maxIter; i++) {
|
||||||
x = x2;
|
x = x2;
|
||||||
x2 = f(x);
|
x2 = f(x);
|
||||||
if (Math.abs(x2 - x) < err)
|
if (Math.abs(x2 - x) < err) {
|
||||||
return x2;
|
return x2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return x2;
|
return x2;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -53,7 +53,6 @@ Line3.prototype.getSphereIntersection = function (sphere) {
|
|||||||
|
|
||||||
// prefer a solution that's on the line segment itself
|
// prefer a solution that's on the line segment itself
|
||||||
if (Math.Abs(t1 - 0.5) < Math.abs(t2 - 0.5)) {
|
if (Math.Abs(t1 - 0.5) < Math.abs(t2 - 0.5)) {
|
||||||
//return new Point3D[] { solution1, solution2 };
|
|
||||||
return [solution1, solution2];
|
return [solution1, solution2];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,13 +64,15 @@ Line3.prototype.intersects = function (line, pa, pb) {
|
|||||||
let p13 = this.p0.sub(line.p0),
|
let p13 = this.p0.sub(line.p0),
|
||||||
p43 = line.p1.sub(line.p0);
|
p43 = line.p1.sub(line.p0);
|
||||||
|
|
||||||
if (Math.abs(p43.x) < math.EPSILON10 && Math.abs(p43.y) < math.EPSILON10 && Math.abs(p43.z) < math.EPSILON10)
|
if (Math.abs(p43.x) < math.EPSILON10 && Math.abs(p43.y) < math.EPSILON10 && Math.abs(p43.z) < math.EPSILON10) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
let p21 = this.p1.sub(this.p0);
|
let p21 = this.p1.sub(this.p0);
|
||||||
|
|
||||||
if (Math.abs(p21.x) < math.EPSILON10 && Math.abs(p21.y) < math.EPSILON10 && Math.abs(p21.z) < math.EPSILON10)
|
if (Math.abs(p21.x) < math.EPSILON10 && Math.abs(p21.y) < math.EPSILON10 && Math.abs(p21.z) < math.EPSILON10) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
let d1343 = p13.x * p43.x + p13.y * p43.y + p13.z * p43.z,
|
let d1343 = p13.x * p43.x + p13.y * p43.y + p13.z * p43.z,
|
||||||
d4321 = p43.x * p21.x + p43.y * p21.y + p43.z * p21.z,
|
d4321 = p43.x * p21.x + p43.y * p21.y + p43.z * p21.z,
|
||||||
@ -81,8 +82,9 @@ Line3.prototype.intersects = function (line, pa, pb) {
|
|||||||
|
|
||||||
let denom = d2121 * d4343 - d4321 * d4321;
|
let denom = d2121 * d4343 - d4321 * d4321;
|
||||||
|
|
||||||
if (Math.abs(denom) < math.EPSILON10)
|
if (Math.abs(denom) < math.EPSILON10) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
let numer = d1343 * d4321 - d1321 * d4343;
|
let numer = d1343 * d4321 - d1321 * d4343;
|
||||||
|
|
||||||
|
|||||||
@ -4,7 +4,6 @@
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import * as math from '../math.js';
|
|
||||||
import { Mat4 } from './Mat4.js';
|
import { Mat4 } from './Mat4.js';
|
||||||
import { Vec3 } from './Vec3.js';
|
import { Vec3 } from './Vec3.js';
|
||||||
|
|
||||||
|
|||||||
@ -21,32 +21,32 @@ const Mat4 = function () {
|
|||||||
* Projection frustum left value.
|
* Projection frustum left value.
|
||||||
* @public
|
* @public
|
||||||
*/
|
*/
|
||||||
this.left;
|
this.left = 0.0;
|
||||||
/**
|
/**
|
||||||
* Projection frustum right value.
|
* Projection frustum right value.
|
||||||
* @public
|
* @public
|
||||||
*/
|
*/
|
||||||
this.right;
|
this.right = 0.0;
|
||||||
/**
|
/**
|
||||||
* Projection frustum bottom value.
|
* Projection frustum bottom value.
|
||||||
* @public
|
* @public
|
||||||
*/
|
*/
|
||||||
this.bottom;
|
this.bottom = 0.0;
|
||||||
/**
|
/**
|
||||||
* Projection frustum top value.
|
* Projection frustum top value.
|
||||||
* @public
|
* @public
|
||||||
*/
|
*/
|
||||||
this.top;
|
this.top = 0.0;
|
||||||
/**
|
/**
|
||||||
* Projection frustum near value.
|
* Projection frustum near value.
|
||||||
* @public
|
* @public
|
||||||
*/
|
*/
|
||||||
this.near;
|
this.near = 0.0;
|
||||||
/**
|
/**
|
||||||
* Projection frustum far value.
|
* Projection frustum far value.
|
||||||
* @public
|
* @public
|
||||||
*/
|
*/
|
||||||
this.far;
|
this.far = 0.0;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -184,8 +184,11 @@ Mat4.prototype.toInverseMatrix3 = function () {
|
|||||||
o = -k * g + h * i,
|
o = -k * g + h * i,
|
||||||
m = j * g - f * i,
|
m = j * g - f * i,
|
||||||
n = c * l + d * o + e * m;
|
n = c * l + d * o + e * m;
|
||||||
if (!n)
|
|
||||||
|
if (!n) {
|
||||||
return null;
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
n = 1 / n;
|
n = 1 / n;
|
||||||
|
|
||||||
var res = new Mat3();
|
var res = new Mat3();
|
||||||
@ -376,7 +379,6 @@ Mat4.prototype.scale = function (v) {
|
|||||||
mx[0] = mx[0] * v.x; mx[1] = mx[1] * v.x; mx[2] = mx[2] * v.x; mx[3] = mx[3] * v.x;
|
mx[0] = mx[0] * v.x; mx[1] = mx[1] * v.x; mx[2] = mx[2] * v.x; mx[3] = mx[3] * v.x;
|
||||||
mx[4] = mx[4] * v.y; mx[5] = mx[5] * v.y; mx[6] = mx[6] * v.y; mx[7] = mx[7] * v.y;
|
mx[4] = mx[4] * v.y; mx[5] = mx[5] * v.y; mx[6] = mx[6] * v.y; mx[7] = mx[7] * v.y;
|
||||||
mx[8] = mx[8] * v.z; mx[9] = mx[9] * v.z; mx[10] = mx[10] * v.z; mx[11] = mx[11] * v.z;
|
mx[8] = mx[8] * v.z; mx[9] = mx[9] * v.z; mx[10] = mx[10] * v.z; mx[11] = mx[11] * v.z;
|
||||||
mx[12] = mx[12]; mx[13] = mx[13]; mx[14] = mx[14]; mx[15] = mx[15];
|
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -393,13 +395,6 @@ Mat4.prototype.scale = function (v) {
|
|||||||
*/
|
*/
|
||||||
Mat4.prototype.setFrustum = function (left, right, bottom, top, near, far) {
|
Mat4.prototype.setFrustum = function (left, right, bottom, top, near, far) {
|
||||||
|
|
||||||
//this.left = left;
|
|
||||||
//this.right = right;
|
|
||||||
//this.bottom = bottom;
|
|
||||||
//this.top = top;
|
|
||||||
//this.near = near;
|
|
||||||
//this.far = far;
|
|
||||||
|
|
||||||
var h = right - left, i = top - bottom, j = far - near;
|
var h = right - left, i = top - bottom, j = far - near;
|
||||||
this._m[0] = near * 2 / h;
|
this._m[0] = near * 2 / h;
|
||||||
this._m[1] = 0;
|
this._m[1] = 0;
|
||||||
@ -432,7 +427,7 @@ Mat4.prototype.setFrustum = function (left, right, bottom, top, near, far) {
|
|||||||
Mat4.prototype.setPerspective = function (angle, aspect, near, far) {
|
Mat4.prototype.setPerspective = function (angle, aspect, near, far) {
|
||||||
angle = near * Math.tan(angle * Math.PI / 360);
|
angle = near * Math.tan(angle * Math.PI / 360);
|
||||||
aspect = angle * aspect;
|
aspect = angle * aspect;
|
||||||
return this.setFrustum(-aspect, aspect, -angle, angle, near, far)
|
return this.setFrustum(-aspect, aspect, -angle, angle, near, far);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -448,13 +443,6 @@ Mat4.prototype.setPerspective = function (angle, aspect, near, far) {
|
|||||||
*/
|
*/
|
||||||
Mat4.prototype.setOrtho = function (left, right, bottom, top, near, far) {
|
Mat4.prototype.setOrtho = function (left, right, bottom, top, near, far) {
|
||||||
|
|
||||||
//this.left = left;
|
|
||||||
//this.right = right;
|
|
||||||
//this.bottom = bottom;
|
|
||||||
//this.top = top;
|
|
||||||
//this.near = near;
|
|
||||||
//this.far = far;
|
|
||||||
|
|
||||||
var lr = 1.0 / (left - right),
|
var lr = 1.0 / (left - right),
|
||||||
bt = 1.0 / (bottom - top),
|
bt = 1.0 / (bottom - top),
|
||||||
nf = 1.0 / (near - far),
|
nf = 1.0 / (near - far),
|
||||||
@ -515,5 +503,4 @@ Mat4.prototype.eulerToMatrix = function (ax, ay, az) {
|
|||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
|
|
||||||
export { Mat4 };
|
export { Mat4 };
|
||||||
|
|
||||||
@ -53,24 +53,28 @@ class Plane {
|
|||||||
if ((ax + ay + az) < math.EPSILON5) { // Pn1 and Pn2 are near parallel
|
if ((ax + ay + az) < math.EPSILON5) { // Pn1 and Pn2 are near parallel
|
||||||
// test if disjoint or coincide
|
// test if disjoint or coincide
|
||||||
var v = Pn2.p.sub(Pn1.p);
|
var v = Pn2.p.sub(Pn1.p);
|
||||||
if (Pn1.n.dot(v) == 0) // Pn2.V0 lies in Pn1
|
if (Pn1.n.dot(v) == 0) { // Pn2.V0 lies in Pn1
|
||||||
return 1; // Pn1 and Pn2 coincide
|
return 1; // Pn1 and Pn2 coincide
|
||||||
else
|
} else {
|
||||||
return 0; // Pn1 and Pn2 are disjoint
|
return 0; // Pn1 and Pn2 are disjoint
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pn1 and Pn2 intersect in a line
|
// Pn1 and Pn2 intersect in a line
|
||||||
// first determine max abs coordinate of cross product
|
// first determine max abs coordinate of cross product
|
||||||
var maxc; // max coordinate
|
var maxc; // max coordinate
|
||||||
if (ax > ay) {
|
if (ax > ay) {
|
||||||
if (ax > az)
|
if (ax > az) {
|
||||||
maxc = 1;
|
maxc = 1;
|
||||||
else maxc = 3;
|
} else {
|
||||||
}
|
maxc = 3;
|
||||||
else {
|
}
|
||||||
if (ay > az)
|
} else {
|
||||||
|
if (ay > az) {
|
||||||
maxc = 2;
|
maxc = 2;
|
||||||
else maxc = 3;
|
} else {
|
||||||
|
maxc = 3;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// next, to get a point on the intersect line
|
// next, to get a point on the intersect line
|
||||||
|
|||||||
@ -358,7 +358,8 @@ Quat.prototype.scaleTo = function (scale) {
|
|||||||
* @returns {og.Quat} -
|
* @returns {og.Quat} -
|
||||||
*/
|
*/
|
||||||
Quat.prototype.scale = function (scale) {
|
Quat.prototype.scale = function (scale) {
|
||||||
return this.x * scale, this.y * scale, this.z * scale, this.w * scale;
|
this.x *= scale; this.y *= scale; this.z *= scale; this.w *= scale;
|
||||||
|
return this;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -392,7 +393,6 @@ Quat.prototype.setFromSphericalCoords = function (lat, lon, angle) {
|
|||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets rotation with the given heading and up vectors.
|
* Sets rotation with the given heading and up vectors.
|
||||||
* @static
|
* @static
|
||||||
@ -414,22 +414,19 @@ Quat.prototype.setLookRotation = function (forward, up) {
|
|||||||
this.y = (s.z - f.x) * fd;
|
this.y = (s.z - f.x) * fd;
|
||||||
this.z = (u.x - s.y) * fd;
|
this.z = (u.x - s.y) * fd;
|
||||||
this.w = 0.25 / fd;
|
this.w = 0.25 / fd;
|
||||||
}
|
} else if (s.x > u.y && s.x > f.z) {
|
||||||
else if (s.x > u.y && s.x > f.z) {
|
|
||||||
let fd = 1.0 / (2.0 * Math.sqrt(1.0 + s.x - u.y - f.z));
|
let fd = 1.0 / (2.0 * Math.sqrt(1.0 + s.x - u.y - f.z));
|
||||||
this.x = 0.25 / fd;
|
this.x = 0.25 / fd;
|
||||||
this.y = (u.x + s.y) * fd;
|
this.y = (u.x + s.y) * fd;
|
||||||
this.z = (s.z + f.x) * fd;
|
this.z = (s.z + f.x) * fd;
|
||||||
this.w = (f.y - u.z) * fd;
|
this.w = (f.y - u.z) * fd;
|
||||||
}
|
} else if (u.y > f.z) {
|
||||||
else if (u.y > f.z) {
|
|
||||||
let fd = 1.0 / (2.0 * Math.sqrt(1.0 + u.y - s.x - f.z));
|
let fd = 1.0 / (2.0 * Math.sqrt(1.0 + u.y - s.x - f.z));
|
||||||
this.x = (u.x + s.y) * fd;
|
this.x = (u.x + s.y) * fd;
|
||||||
this.y = 0.25 / fd;
|
this.y = 0.25 / fd;
|
||||||
this.z = (f.y + u.z) * fd;
|
this.z = (f.y + u.z) * fd;
|
||||||
this.w = (s.z - f.x) * fd;
|
this.w = (s.z - f.x) * fd;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
let fd = 1.0 / (2.0 * Math.sqrt(1.0 + f.z - s.x - u.y));
|
let fd = 1.0 / (2.0 * Math.sqrt(1.0 + f.z - s.x - u.y));
|
||||||
this.x = (s.z + f.x) * fd;
|
this.x = (s.z + f.x) * fd;
|
||||||
this.y = (f.y + u.z) * fd;
|
this.y = (f.y + u.z) * fd;
|
||||||
@ -448,20 +445,23 @@ Quat.prototype.setLookRotation = function (forward, up) {
|
|||||||
Quat.prototype.toSphericalCoords = function () {
|
Quat.prototype.toSphericalCoords = function () {
|
||||||
var cos_a = this.w;
|
var cos_a = this.w;
|
||||||
var sin_a = Math.sqrt(1.0 - cos_a * cos_a);
|
var sin_a = Math.sqrt(1.0 - cos_a * cos_a);
|
||||||
var angle = Math.acos(cos_a) * 2;
|
// var angle = Math.acos(cos_a) * 2;
|
||||||
if (Math.abs(sin_a) < 0.0005)
|
if (Math.abs(sin_a) < 0.0005) {
|
||||||
sin_a = 1;
|
sin_a = 1;
|
||||||
|
}
|
||||||
var tx = this.x / sin_a;
|
var tx = this.x / sin_a;
|
||||||
var ty = this.y / sin_a;
|
var ty = this.y / sin_a;
|
||||||
var tz = this.z / sin_a;
|
var tz = this.z / sin_a;
|
||||||
|
|
||||||
var lon, lat = -Math.asin(ty);
|
var lon, lat = -Math.asin(ty);
|
||||||
if (tx * tx + tz * tz < 0.0005)
|
if (tx * tx + tz * tz < 0.0005) {
|
||||||
lon = 0;
|
lon = 0;
|
||||||
else
|
} else {
|
||||||
lon = Math.atan2(tx, tz);
|
lon = Math.atan2(tx, tz);
|
||||||
if (lon < 0)
|
}
|
||||||
|
if (lon < 0) {
|
||||||
lon += 360.0;
|
lon += 360.0;
|
||||||
|
}
|
||||||
|
|
||||||
return { lat: lat, lon: lon, alpha: Math.acos(cos_a) };
|
return { lat: lat, lon: lon, alpha: Math.acos(cos_a) };
|
||||||
};
|
};
|
||||||
@ -492,10 +492,11 @@ Quat.prototype.getAxisAngle = function () {
|
|||||||
if (vl > 0.0000001) {
|
if (vl > 0.0000001) {
|
||||||
var ivl = 1.0 / vl;
|
var ivl = 1.0 / vl;
|
||||||
axis = new Vec3(x * ivl, y * ivl, z * ivl);
|
axis = new Vec3(x * ivl, y * ivl, z * ivl);
|
||||||
if (this.w < 0)
|
if (this.w < 0) {
|
||||||
angle = 2.0 * Math.atan2(-vl, -w); //-PI,0
|
angle = 2.0 * Math.atan2(-vl, -w); // -PI,0
|
||||||
else
|
} else {
|
||||||
angle = 2.0 * Math.atan2(vl, w); //0,PI
|
angle = 2.0 * Math.atan2(vl, w); // 0,PI
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
axis = new Vec3(0, 0, 0);
|
axis = new Vec3(0, 0, 0);
|
||||||
angle = 0;
|
angle = 0;
|
||||||
@ -675,8 +676,8 @@ Quat.prototype.getMat3 = function () {
|
|||||||
*/
|
*/
|
||||||
Quat.prototype.mulVec3 = function (v) {
|
Quat.prototype.mulVec3 = function (v) {
|
||||||
|
|
||||||
//t = 2 * cross(q.xyz, v)
|
// t = 2 * cross(q.xyz, v)
|
||||||
//v' = v + q.w * t + cross(q.xyz, t)
|
// v' = v + q.w * t + cross(q.xyz, t)
|
||||||
|
|
||||||
var d = v.x,
|
var d = v.x,
|
||||||
e = v.y,
|
e = v.y,
|
||||||
|
|||||||
@ -7,7 +7,6 @@
|
|||||||
import * as math from '../math.js';
|
import * as math from '../math.js';
|
||||||
import { Vec3 } from './Vec3.js';
|
import { Vec3 } from './Vec3.js';
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a ray that extends infinitely from the provided origin in the provided direction.
|
* Represents a ray that extends infinitely from the provided origin in the provided direction.
|
||||||
* @class
|
* @class
|
||||||
@ -85,7 +84,6 @@ Ray.prototype.getPoint = function (distance) {
|
|||||||
* 2 - og.Ray.INPLANE and 3 - og.Ray.AWAY(ray goes away from triangle).
|
* 2 - og.Ray.INPLANE and 3 - og.Ray.AWAY(ray goes away from triangle).
|
||||||
*/
|
*/
|
||||||
Ray.prototype.hitTriangle = function (v0, v1, v2, res, normal) {
|
Ray.prototype.hitTriangle = function (v0, v1, v2, res, normal) {
|
||||||
var state;
|
|
||||||
var u = v1.sub(v0);
|
var u = v1.sub(v0);
|
||||||
var v = v2.sub(v0);
|
var v = v2.sub(v0);
|
||||||
var n = u.cross(v);
|
var n = u.cross(v);
|
||||||
@ -112,8 +110,9 @@ Ray.prototype.hitTriangle = function (v0, v1, v2, res, normal) {
|
|||||||
res.copy(this.origin.add(this.direction.scaleTo(r)));
|
res.copy(this.origin.add(this.direction.scaleTo(r)));
|
||||||
|
|
||||||
// ray goes away from triangle
|
// ray goes away from triangle
|
||||||
if (r < 0.0)
|
if (r < 0.0) {
|
||||||
return Ray.AWAY;
|
return Ray.AWAY;
|
||||||
|
}
|
||||||
|
|
||||||
// is res point inside the triangle?
|
// is res point inside the triangle?
|
||||||
var uu = u.dot(u);
|
var uu = u.dot(u);
|
||||||
@ -125,12 +124,14 @@ Ray.prototype.hitTriangle = function (v0, v1, v2, res, normal) {
|
|||||||
var D = uv * uv - uu * vv;
|
var D = uv * uv - uu * vv;
|
||||||
|
|
||||||
var s = (uv * wv - vv * wu) / D;
|
var s = (uv * wv - vv * wu) / D;
|
||||||
if (s < 0.0 || s > 1.0)
|
if (s < 0.0 || s > 1.0) {
|
||||||
return Ray.OUTSIDE;
|
return Ray.OUTSIDE;
|
||||||
|
}
|
||||||
|
|
||||||
var t = (uv * wu - uu * wv) / D;
|
var t = (uv * wu - uu * wv) / D;
|
||||||
if (t < 0.0 || (s + t) > 1.0)
|
if (t < 0.0 || (s + t) > 1.0) {
|
||||||
return Ray.OUTSIDE;
|
return Ray.OUTSIDE;
|
||||||
|
}
|
||||||
|
|
||||||
return Ray.INSIDE;
|
return Ray.INSIDE;
|
||||||
};
|
};
|
||||||
@ -195,27 +196,27 @@ Ray.prototype.hitSphere = function (sphere) {
|
|||||||
} else if (l === r) {
|
} else if (l === r) {
|
||||||
return o.clone();
|
return o.clone();
|
||||||
}
|
}
|
||||||
var pc = c.projToRay(o, vpc);
|
let pc = c.projToRay(o, vpc);
|
||||||
var lc = Vec3.sub(pc, c).length();
|
var lc = Vec3.sub(pc, c).length();
|
||||||
var dist = Math.sqrt(r * r - lc * lc);
|
let dist = Math.sqrt(r * r - lc * lc);
|
||||||
var di1 = dist - Vec3.sub(pc, o).length();
|
let di1 = dist - Vec3.sub(pc, o).length();
|
||||||
var intersection = Vec3.add(o, d.scaleTo(di1));
|
let intersection = Vec3.add(o, d.scaleTo(di1));
|
||||||
return intersection;
|
return intersection;
|
||||||
} else {
|
} else {
|
||||||
var pc = c.projToRay(o, d);
|
let pc = c.projToRay(o, d);
|
||||||
var cpcl = Vec3.sub(c, pc).length();
|
var cpcl = Vec3.sub(c, pc).length();
|
||||||
if (cpcl > sphere.radius) {
|
if (cpcl > sphere.radius) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
var dist = Math.sqrt(r * r - cpcl * cpcl);
|
let dist = Math.sqrt(r * r - cpcl * cpcl);
|
||||||
var di1;
|
let di1;
|
||||||
pc.subA(o);
|
pc.subA(o);
|
||||||
if (vpc.length() > r) {
|
if (vpc.length() > r) {
|
||||||
di1 = pc.length() - dist;
|
di1 = pc.length() - dist;
|
||||||
} else {
|
} else {
|
||||||
di1 = pc.length() + dist;
|
di1 = pc.length() + dist;
|
||||||
}
|
}
|
||||||
var intersection = Vec3.add(o, d.scaleTo(di1));
|
let intersection = Vec3.add(o, d.scaleTo(di1));
|
||||||
return intersection;
|
return intersection;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -223,7 +224,7 @@ Ray.prototype.hitSphere = function (sphere) {
|
|||||||
|
|
||||||
Ray.prototype.hitBox = function (box) {
|
Ray.prototype.hitBox = function (box) {
|
||||||
//
|
//
|
||||||
//TODO
|
// TODO
|
||||||
//
|
//
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -70,7 +70,7 @@ Vec2.add = function (a, b) {
|
|||||||
* @returns {og.math.Vec2} - Vectors subtraction.
|
* @returns {og.math.Vec2} - Vectors subtraction.
|
||||||
*/
|
*/
|
||||||
Vec2.sub = function (a, b) {
|
Vec2.sub = function (a, b) {
|
||||||
var res = new oVec2(a.x, a.y);
|
var res = new Vec2(a.x, a.y);
|
||||||
res.subA(b);
|
res.subA(b);
|
||||||
return res;
|
return res;
|
||||||
};
|
};
|
||||||
@ -84,7 +84,7 @@ Vec2.sub = function (a, b) {
|
|||||||
*/
|
*/
|
||||||
Vec2.scale = function (a, scale) {
|
Vec2.scale = function (a, scale) {
|
||||||
var res = new Vec2(a.x, a.y);
|
var res = new Vec2(a.x, a.y);
|
||||||
res.scale(scale)
|
res.scale(scale);
|
||||||
return res;
|
return res;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -294,7 +294,6 @@ Vec2.prototype.mul = function (vec) {
|
|||||||
return new Vec2(this.x * vec.x, this.y * vec.y);
|
return new Vec2(this.x * vec.x, this.y * vec.y);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Divide current vector's components to another. Results stores in the current vector object.
|
* Divide current vector's components to another. Results stores in the current vector object.
|
||||||
* @public
|
* @public
|
||||||
|
|||||||
@ -76,36 +76,36 @@ export function vec3(x, y, z) {
|
|||||||
* @param {Vec3} low - Out vector low values.
|
* @param {Vec3} low - Out vector low values.
|
||||||
* @returns {Array.<number,number>} Encoded array.
|
* @returns {Array.<number,number>} Encoded array.
|
||||||
*/
|
*/
|
||||||
Vec3.doubleToTwoFloats = function(v, high, low) {
|
Vec3.doubleToTwoFloats = function (v, high, low) {
|
||||||
|
|
||||||
let x = v.x, y = v.y, z = v.z;
|
let x = v.x, y = v.y, z = v.z;
|
||||||
|
|
||||||
if (x >= 0.0) {
|
if (x >= 0.0) {
|
||||||
var doubleHigh = Math.floor(x / 65536.0) * 65536.0;
|
let doubleHigh = Math.floor(x / 65536.0) * 65536.0;
|
||||||
high.x = Math.fround(doubleHigh);
|
high.x = Math.fround(doubleHigh);
|
||||||
low.x = Math.fround(x - doubleHigh);
|
low.x = Math.fround(x - doubleHigh);
|
||||||
} else {
|
} else {
|
||||||
var doubleHigh = Math.floor(-x / 65536.0) * 65536.0;
|
let doubleHigh = Math.floor(-x / 65536.0) * 65536.0;
|
||||||
high.x = Math.fround(-doubleHigh);
|
high.x = Math.fround(-doubleHigh);
|
||||||
low.x = Math.fround(x + doubleHigh);
|
low.x = Math.fround(x + doubleHigh);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (y >= 0.0) {
|
if (y >= 0.0) {
|
||||||
var doubleHigh = Math.floor(y / 65536.0) * 65536.0;
|
let doubleHigh = Math.floor(y / 65536.0) * 65536.0;
|
||||||
high.y = Math.fround(doubleHigh);
|
high.y = Math.fround(doubleHigh);
|
||||||
low.y = Math.fround(y - doubleHigh);
|
low.y = Math.fround(y - doubleHigh);
|
||||||
} else {
|
} else {
|
||||||
var doubleHigh = Math.floor(-y / 65536.0) * 65536.0;
|
let doubleHigh = Math.floor(-y / 65536.0) * 65536.0;
|
||||||
high.y = Math.fround(-doubleHigh);
|
high.y = Math.fround(-doubleHigh);
|
||||||
low.y = Math.fround(y + doubleHigh);
|
low.y = Math.fround(y + doubleHigh);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (z >= 0.0) {
|
if (z >= 0.0) {
|
||||||
var doubleHigh = Math.floor(z / 65536.0) * 65536.0;
|
let doubleHigh = Math.floor(z / 65536.0) * 65536.0;
|
||||||
high.z = Math.fround(doubleHigh);
|
high.z = Math.fround(doubleHigh);
|
||||||
low.z = Math.fround(z - doubleHigh);
|
low.z = Math.fround(z - doubleHigh);
|
||||||
} else {
|
} else {
|
||||||
var doubleHigh = Math.floor(-z / 65536.0) * 65536.0;
|
let doubleHigh = Math.floor(-z / 65536.0) * 65536.0;
|
||||||
high.z = Math.fround(-doubleHigh);
|
high.z = Math.fround(-doubleHigh);
|
||||||
low.z = Math.fround(z + doubleHigh);
|
low.z = Math.fround(z + doubleHigh);
|
||||||
}
|
}
|
||||||
@ -124,31 +124,31 @@ Vec3.doubleToTwoFloat32Array = function (v, high, low) {
|
|||||||
let x = v.x, y = v.y, z = v.z;
|
let x = v.x, y = v.y, z = v.z;
|
||||||
|
|
||||||
if (x >= 0.0) {
|
if (x >= 0.0) {
|
||||||
var doubleHigh = Math.floor(x / 65536.0) * 65536.0;
|
let doubleHigh = Math.floor(x / 65536.0) * 65536.0;
|
||||||
high[0] = Math.fround(doubleHigh);
|
high[0] = Math.fround(doubleHigh);
|
||||||
low[0] = Math.fround(x - doubleHigh);
|
low[0] = Math.fround(x - doubleHigh);
|
||||||
} else {
|
} else {
|
||||||
var doubleHigh = Math.floor(-x / 65536.0) * 65536.0;
|
let doubleHigh = Math.floor(-x / 65536.0) * 65536.0;
|
||||||
high[0] = Math.fround(-doubleHigh);
|
high[0] = Math.fround(-doubleHigh);
|
||||||
low[0] = Math.fround(x + doubleHigh);
|
low[0] = Math.fround(x + doubleHigh);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (y >= 0.0) {
|
if (y >= 0.0) {
|
||||||
var doubleHigh = Math.floor(y / 65536.0) * 65536.0;
|
let doubleHigh = Math.floor(y / 65536.0) * 65536.0;
|
||||||
high[1] = Math.fround(doubleHigh);
|
high[1] = Math.fround(doubleHigh);
|
||||||
low[1] = Math.fround(y - doubleHigh);
|
low[1] = Math.fround(y - doubleHigh);
|
||||||
} else {
|
} else {
|
||||||
var doubleHigh = Math.floor(-y / 65536.0) * 65536.0;
|
let doubleHigh = Math.floor(-y / 65536.0) * 65536.0;
|
||||||
high[1] = Math.fround(-doubleHigh);
|
high[1] = Math.fround(-doubleHigh);
|
||||||
low[1] = Math.fround(y + doubleHigh);
|
low[1] = Math.fround(y + doubleHigh);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (z >= 0.0) {
|
if (z >= 0.0) {
|
||||||
var doubleHigh = Math.floor(z / 65536.0) * 65536.0;
|
let doubleHigh = Math.floor(z / 65536.0) * 65536.0;
|
||||||
high[2] = Math.fround(doubleHigh);
|
high[2] = Math.fround(doubleHigh);
|
||||||
low[2] = Math.fround(z - doubleHigh);
|
low[2] = Math.fround(z - doubleHigh);
|
||||||
} else {
|
} else {
|
||||||
var doubleHigh = Math.floor(-z / 65536.0) * 65536.0;
|
let doubleHigh = Math.floor(-z / 65536.0) * 65536.0;
|
||||||
high[2] = Math.fround(-doubleHigh);
|
high[2] = Math.fround(-doubleHigh);
|
||||||
low[2] = Math.fround(z + doubleHigh);
|
low[2] = Math.fround(z + doubleHigh);
|
||||||
}
|
}
|
||||||
@ -222,7 +222,7 @@ Vec3.sub = function (a, b) {
|
|||||||
*/
|
*/
|
||||||
Vec3.scale = function (a, scale) {
|
Vec3.scale = function (a, scale) {
|
||||||
var res = new Vec3(a.x, a.y, a.z);
|
var res = new Vec3(a.x, a.y, a.z);
|
||||||
res.scale(scale)
|
res.scale(scale);
|
||||||
return res;
|
return res;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -534,7 +534,6 @@ Vec3.prototype.dotArr = function (arr) {
|
|||||||
return arr[0] * this.x + arr[1] * this.y + arr[2] * this.z;
|
return arr[0] * this.x + arr[1] * this.y + arr[2] * this.z;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets vectors cross production.
|
* Gets vectors cross production.
|
||||||
* @public
|
* @public
|
||||||
@ -821,17 +820,16 @@ Vec3.prototype.getRotationTo = function (dest, fallbackAxis) {
|
|||||||
if (!fallbackAxis.isEqual(Vec3.ZERO)) {
|
if (!fallbackAxis.isEqual(Vec3.ZERO)) {
|
||||||
// rotate 180 degrees about the fallback axis
|
// rotate 180 degrees about the fallback axis
|
||||||
return Quat.axisAngleToQuat(Math.PI, fallbackAxis);
|
return Quat.axisAngleToQuat(Math.PI, fallbackAxis);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
// Generate an axis
|
// Generate an axis
|
||||||
let axis = Vec3.UNIT_X.cross(v0);
|
let axis = Vec3.UNIT_X.cross(v0);
|
||||||
if (axis.isZero()) // pick another if colinear
|
if (axis.isZero()) { // pick another if colinear
|
||||||
axis = Vec3.UNIT_Y.cross(v0);
|
axis = Vec3.UNIT_Y.cross(v0);
|
||||||
|
}
|
||||||
axis.normalize();
|
axis.normalize();
|
||||||
return Quat.axisAngleToQuat(Math.PI, axis);
|
return Quat.axisAngleToQuat(Math.PI, axis);
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
let s = Math.sqrt((1 + d) * 2);
|
let s = Math.sqrt((1 + d) * 2);
|
||||||
let invs = 1.0 / s;
|
let invs = 1.0 / s;
|
||||||
|
|
||||||
|
|||||||
@ -122,7 +122,6 @@ Vec4.prototype.toVec = function () {
|
|||||||
return [this.x, this.y, this.z, this.w];
|
return [this.x, this.y, this.z, this.w];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts vector to a number array.
|
* Converts vector to a number array.
|
||||||
* @public
|
* @public
|
||||||
|
|||||||
@ -41,11 +41,11 @@ export function decodeFloatFromRGBA(rgba) {
|
|||||||
export function doubleToTwoFloats(value) {
|
export function doubleToTwoFloats(value) {
|
||||||
var high, low;
|
var high, low;
|
||||||
if (value >= 0.0) {
|
if (value >= 0.0) {
|
||||||
var doubleHigh = Math.floor(value / 65536.0) * 65536.0;
|
let doubleHigh = Math.floor(value / 65536.0) * 65536.0;
|
||||||
high = Math.fround(doubleHigh);
|
high = Math.fround(doubleHigh);
|
||||||
low = Math.fround(value - doubleHigh);
|
low = Math.fround(value - doubleHigh);
|
||||||
} else {
|
} else {
|
||||||
var doubleHigh = Math.floor(-value / 65536.0) * 65536.0;
|
let doubleHigh = Math.floor(-value / 65536.0) * 65536.0;
|
||||||
high = Math.fround(-doubleHigh);
|
high = Math.fround(-doubleHigh);
|
||||||
low = Math.fround(value + doubleHigh);
|
low = Math.fround(value + doubleHigh);
|
||||||
}
|
}
|
||||||
@ -60,11 +60,11 @@ export function doubleToTwoFloats(value) {
|
|||||||
*/
|
*/
|
||||||
export function doubleToTwoFloats2(value, highLowArr) {
|
export function doubleToTwoFloats2(value, highLowArr) {
|
||||||
if (value >= 0.0) {
|
if (value >= 0.0) {
|
||||||
var doubleHigh = Math.floor(value / 65536.0) * 65536.0;
|
let doubleHigh = Math.floor(value / 65536.0) * 65536.0;
|
||||||
highLowArr[0] = Math.fround(doubleHigh);
|
highLowArr[0] = Math.fround(doubleHigh);
|
||||||
highLowArr[1] = Math.fround(value - doubleHigh);
|
highLowArr[1] = Math.fround(value - doubleHigh);
|
||||||
} else {
|
} else {
|
||||||
var doubleHigh = Math.floor(-value / 65536.0) * 65536.0;
|
let doubleHigh = Math.floor(-value / 65536.0) * 65536.0;
|
||||||
highLowArr[0] = Math.fround(-doubleHigh);
|
highLowArr[0] = Math.fround(-doubleHigh);
|
||||||
highLowArr[1] = Math.fround(value + doubleHigh);
|
highLowArr[1] = Math.fround(value + doubleHigh);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,141 +0,0 @@
|
|||||||
/**
|
|
||||||
* @module og/gmx/GmxCheckVersion
|
|
||||||
*/
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import { ajax } from '../../ajax.js';
|
|
||||||
import { GmxVector } from './GmxVector.js';
|
|
||||||
|
|
||||||
const GmxCheckVersion = function (planet) {
|
|
||||||
|
|
||||||
this._layerVersions = {};
|
|
||||||
|
|
||||||
this.hostUrl = "//maps.kosmosnimki.ru/";
|
|
||||||
|
|
||||||
this._layers = [];
|
|
||||||
|
|
||||||
this._r = null;
|
|
||||||
|
|
||||||
this._addLayer = function (layer) {
|
|
||||||
this._layers.push(layer);
|
|
||||||
};
|
|
||||||
|
|
||||||
this._removeLayer = function (layer) {
|
|
||||||
var i = this._layers.length;
|
|
||||||
while (i--) {
|
|
||||||
if (layer.isEqual(this._layers[i])) {
|
|
||||||
this._layers.splice(i, 1);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
planet.events.on("layeradd", function (l) {
|
|
||||||
if (l.instanceName === "GmxVector") {
|
|
||||||
if (l._visibility) {
|
|
||||||
this._addLayer(l);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, this);
|
|
||||||
|
|
||||||
planet.events.on("layerremove", function (l) {
|
|
||||||
if (l.instanceName === "GmxVector") {
|
|
||||||
this._removeLayer(l);
|
|
||||||
}
|
|
||||||
}, this);
|
|
||||||
|
|
||||||
planet.events.on("layervisibilitychange", function (l) {
|
|
||||||
if (l.instanceName === "GmxVector") {
|
|
||||||
if (l._visibility) {
|
|
||||||
this._addLayer(l);
|
|
||||||
} else {
|
|
||||||
this._removeLayer(l);
|
|
||||||
}
|
|
||||||
this._request();
|
|
||||||
}
|
|
||||||
}, this);
|
|
||||||
|
|
||||||
planet.camera.events.on("moveend", function () {
|
|
||||||
this._request();
|
|
||||||
}, this);
|
|
||||||
|
|
||||||
this._checkVersionSuccess = function (data, layersOrder) {
|
|
||||||
var res = data.Result;
|
|
||||||
for (var i = 0; i < layersOrder.length; i++) {
|
|
||||||
layersOrder[i]._checkVersionSuccess(res[i]);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
this.abort = function () {
|
|
||||||
if (this._r) {
|
|
||||||
this._r.abort();
|
|
||||||
this._r = null;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
this._request = function () {
|
|
||||||
if (this._layers.length) {
|
|
||||||
this._r && this._r.abort();
|
|
||||||
var e = planet.getViewExtent();
|
|
||||||
|
|
||||||
if (e) {
|
|
||||||
|
|
||||||
e = e.inverseMercator();
|
|
||||||
|
|
||||||
var zoom = planet.minCurrZoom,
|
|
||||||
bbox = [e.southWest.lon, e.southWest.lat, e.northEast.lon, e.northEast.lat];
|
|
||||||
|
|
||||||
var layers = [],
|
|
||||||
_layersOrder = [];
|
|
||||||
for (var i = 0; i < this._layers.length; i++) {
|
|
||||||
var li = this._layers[i];
|
|
||||||
if (li._extentMerc.overlaps(e) && li._gmxProperties) {
|
|
||||||
_layersOrder.push(li);
|
|
||||||
var p = { "Name": li._layerId, "Version": li._gmxProperties.LayerVersion || -1 };
|
|
||||||
if (li._gmxProperties.Temporal) {
|
|
||||||
p.dateBegin = parseInt(li._beginDate.getTime() / 1000.0);
|
|
||||||
p.dateEnd = parseInt(li._endDate.getTime() / 1000.0);
|
|
||||||
}
|
|
||||||
layers.push(p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (layers.length) {
|
|
||||||
var that = this;
|
|
||||||
//TODO: fetch
|
|
||||||
this._r = ajax.request(this.hostUrl + "Layer/CheckVersion.ashx", {
|
|
||||||
'type': "POST",
|
|
||||||
'responseType': "json",
|
|
||||||
'data': {
|
|
||||||
'WrapStyle': "None",
|
|
||||||
'bbox': bbox,
|
|
||||||
'srs': "3857",
|
|
||||||
'layers': layers,
|
|
||||||
'zoom': zoom,
|
|
||||||
'ftc': "osm"
|
|
||||||
},
|
|
||||||
'success': function (data) {
|
|
||||||
that._r = null;
|
|
||||||
that._checkVersionSuccess(data, _layersOrder);
|
|
||||||
},
|
|
||||||
'error': function (err) {
|
|
||||||
that._r = null;
|
|
||||||
console.log(err);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
this.getLayers = function () {
|
|
||||||
return this._layers;
|
|
||||||
};
|
|
||||||
|
|
||||||
this.update = function () {
|
|
||||||
this._request();
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
export { GmxCheckVersion };
|
|
||||||
@ -1,129 +0,0 @@
|
|||||||
/**
|
|
||||||
* @module og/gmx/GmxItem
|
|
||||||
*/
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import * as utils from '../../utils/shared.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents geomixer item. Stores item attributes.
|
|
||||||
* @class
|
|
||||||
* @param {Number} id - Geomixer item id like gmx_id.
|
|
||||||
* @param {Object} options - Item additional options:
|
|
||||||
* @param {Object} options.attributes - Item attributes.
|
|
||||||
* @param {Object} options.style - Item rendering style.
|
|
||||||
* @param {Number} options.version - Item version.
|
|
||||||
*/
|
|
||||||
const GmxItem = function (id, options) {
|
|
||||||
options = options || {};
|
|
||||||
|
|
||||||
this.id = id;
|
|
||||||
this.attributes = options.attributes || {};
|
|
||||||
this.version = options.version || -1;
|
|
||||||
|
|
||||||
this._layer = null;
|
|
||||||
this._style = options.style || {};
|
|
||||||
|
|
||||||
this._pickingColor = null;
|
|
||||||
|
|
||||||
this._pickingReady = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxItem.prototype.addTo = function (layer) {
|
|
||||||
layer.addItem(this);
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxItem.prototype.setStyle = function (style) {
|
|
||||||
var s = this._style;
|
|
||||||
for (var i in style) {
|
|
||||||
s[i] = style[i];
|
|
||||||
}
|
|
||||||
this._layer && this._layer.updateItem(this);
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxItem.prototype.bringToFront = function () {
|
|
||||||
this._pickingReady = false;
|
|
||||||
//
|
|
||||||
//...
|
|
||||||
//
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxItem.prototype.setZIndex = function (zIndex) {
|
|
||||||
this._pickingReady = false;
|
|
||||||
this._style.zIndex = zIndex;
|
|
||||||
this._layer && this._layer.updateItem(this);
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxItem.prototype.setFillColor = function (r, g, b, a) {
|
|
||||||
var c = this._style.fillColor;
|
|
||||||
if (c.w === 0.0 && a !== 0.0 || c.w !== 0.0 && a === 0.0) {
|
|
||||||
this._pickingReady = false;
|
|
||||||
}
|
|
||||||
c.x = r;
|
|
||||||
c.y = g;
|
|
||||||
c.z = b;
|
|
||||||
(a !== null) && (c.w = a);
|
|
||||||
this._layer && this._layer.updateItem(this);
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxItem.prototype.setFillColor4v = function (color) {
|
|
||||||
this.setFillColor(color.x, color.y, color.z, color.w);
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxItem.prototype.setFillColorHTML = function (color) {
|
|
||||||
var c = utils.htmlColorToRgba(color);
|
|
||||||
this.setFillColor(c.x, c.y, c.z, c.w);
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxItem.prototype.setLineColor = function (r, g, b, a) {
|
|
||||||
var c = this._style.lineColor;
|
|
||||||
if (c.w === 0.0 && a !== 0.0 || c.w !== 0.0 && a === 0.0) {
|
|
||||||
this._pickingReady = false;
|
|
||||||
}
|
|
||||||
c.x = r;
|
|
||||||
c.y = g;
|
|
||||||
c.z = b;
|
|
||||||
(a !== null) && (c.w = a);
|
|
||||||
this._layer && this._layer.updateItem(this);
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxItem.prototype.setLineColor4v = function (color) {
|
|
||||||
this.setLineColor(color.x, color.y, color.z, color.w);
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxItem.prototype.setLineColorHTML = function (color) {
|
|
||||||
var c = og.utils.htmlColorToRgba(color);
|
|
||||||
this.setLineColor(c.x, c.y, c.z, c.w);
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxItem.prototype.setStrokeColor = function (r, g, b, a) {
|
|
||||||
var c = this._style.strokeColor;
|
|
||||||
if (c.w === 0.0 && a !== 0.0 || c.w !== 0.0 && a === 0.0) {
|
|
||||||
this._pickingReady = false;
|
|
||||||
}
|
|
||||||
c.x = r;
|
|
||||||
c.y = g;
|
|
||||||
c.z = b;
|
|
||||||
(a !== null) && (c.w = a);
|
|
||||||
this._layer && this._layer.updateItem(this);
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxItem.prototype.setStrokeColor4v = function (color) {
|
|
||||||
this.setLineColor(color.x, color.y, color.z, color.w);
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxItem.prototype.setStrokeColorHTML = function (color) {
|
|
||||||
var c = og.utils.htmlColorToRgba(color);
|
|
||||||
this.setStrokeColor(c.x, c.y, c.z, c.w);
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxItem.prototype.setLineWidth = function (v) {
|
|
||||||
this._style.lineWidth = v;
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxItem.prototype.setStrokeWidth = function (v) {
|
|
||||||
this._style.strokeWidth = v;
|
|
||||||
};
|
|
||||||
|
|
||||||
export { GmxItem };
|
|
||||||
@ -1,104 +0,0 @@
|
|||||||
/**
|
|
||||||
* @module og/gmx/GmxMaterial
|
|
||||||
*/
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import { inherits } from '../../inherits.js';
|
|
||||||
import { Material } from '../../layer/Material.js';
|
|
||||||
|
|
||||||
const GmxMaterial = function (segment, layer) {
|
|
||||||
|
|
||||||
Material.call(this, segment, layer);
|
|
||||||
|
|
||||||
this.fromTile = null;
|
|
||||||
|
|
||||||
this.maskTexture = null;
|
|
||||||
|
|
||||||
this.sceneIsLoading = {};
|
|
||||||
this.sceneExists = {};
|
|
||||||
this.sceneIsReady = {};
|
|
||||||
this.sceneTexture = {};
|
|
||||||
|
|
||||||
this._completedItems = 0;
|
|
||||||
this._totalItems = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
inherits(GmxMaterial, Material);
|
|
||||||
|
|
||||||
GmxMaterial.applySceneBitmapImage = function (id, bitmapImage) {
|
|
||||||
this.sceneTexture[id] = this.segment.handler.createTexture(bitmapImage);
|
|
||||||
this.sceneExists[id] = true;
|
|
||||||
this.sceneIsReady[id] = true;
|
|
||||||
this.sceneIsLoading[id] = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxMaterial.prototype.setTotalItems = function (n) {
|
|
||||||
this._totalItems = n;
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxMaterial.prototype.notComplete = function () {
|
|
||||||
return this._completedItems !== this._totalItems;
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxMaterial.prototype.sceneNotExists = function (id) {
|
|
||||||
this.sceneIsReady[id] = true;
|
|
||||||
this.sceneExists[id] = false;
|
|
||||||
this.sceneIsLoading[id] = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxMaterial.prototype.clear = function () {
|
|
||||||
if (this.isReady) {
|
|
||||||
var gl = this.segment.handler.gl;
|
|
||||||
|
|
||||||
this.isReady = false;
|
|
||||||
this.pickingReady = false;
|
|
||||||
|
|
||||||
var t = this.texture;
|
|
||||||
this.texture = null;
|
|
||||||
t && !t.default && gl.deleteTexture(t);
|
|
||||||
|
|
||||||
t = this.pickingMask;
|
|
||||||
this.pickingMask = null;
|
|
||||||
t && !t.default && gl.deleteTexture(t);
|
|
||||||
|
|
||||||
t = this._updateTexture;
|
|
||||||
this._updateTexture = null;
|
|
||||||
t && !t.default && gl.deleteTexture(t);
|
|
||||||
|
|
||||||
t = this._updatePickingMask;
|
|
||||||
this._updatePickingMask = null;
|
|
||||||
t && !t.default && gl.deleteTexture(t);
|
|
||||||
|
|
||||||
this._completedItems = 0;
|
|
||||||
this._totalItems = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._gmxClear();
|
|
||||||
|
|
||||||
this.layer.abortMaterialLoading(this);
|
|
||||||
|
|
||||||
this.isLoading = false;
|
|
||||||
this.textureExists = false;
|
|
||||||
this.fromTile = null;
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxMaterial.prototype.abort = function () {
|
|
||||||
this.isLoading = false;
|
|
||||||
this.isReady = false;
|
|
||||||
|
|
||||||
this._gmxClear();
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxMaterial.prototype._gmxClear = function () {
|
|
||||||
this.sceneIsLoading = {};
|
|
||||||
this.sceneExists = {};
|
|
||||||
this.sceneIsReady = {};
|
|
||||||
|
|
||||||
for (let c in this.sceneTexture) {
|
|
||||||
let t = this.sceneTexture[c];
|
|
||||||
t && !t.default && gl.deleteTexture(t);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export { GmxMaterial };
|
|
||||||
@ -1,45 +0,0 @@
|
|||||||
/**
|
|
||||||
* @module og/gmx/GmxTileData
|
|
||||||
*/
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents geomixer vector tile data. Stores tile geometries and rendering data.
|
|
||||||
* @class
|
|
||||||
* @param {Object} data - Geomixer vector tile data:
|
|
||||||
* @param {Array<Number,Number,Number,Number>} data.bbox - Bounding box.
|
|
||||||
* @param {Boolean} data.isGeneralized - Whether tile geometries are simplified.
|
|
||||||
* @param {Array<Array<Object>>} data.values - Tile items.
|
|
||||||
* @param {Number} data.x - Tile index for X.
|
|
||||||
* @param {Number} data.y - Tile index for Y.
|
|
||||||
* @param {Number} data.z - Tile zoom level.
|
|
||||||
* @param {Number} data.v - Tile version.
|
|
||||||
*/
|
|
||||||
const GmxTileData = function (data) {
|
|
||||||
this.group = null;
|
|
||||||
this.groupIndex = -1;
|
|
||||||
this.isGeneralized = data.isGeneralized;
|
|
||||||
this.bbox = data.bbox;
|
|
||||||
this.x = data.x;
|
|
||||||
this.y = data.y;
|
|
||||||
this.z = data.z;
|
|
||||||
this.version = data.v;
|
|
||||||
this.level = data.level;
|
|
||||||
this.span = data.span;
|
|
||||||
this.tileItems = [];
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxTileData.prototype.addTileItem = function (tileItem) {
|
|
||||||
tileItem.tileData = this;
|
|
||||||
tileItem.tileDataIndex = this.tileItems.length;
|
|
||||||
this.tileItems.push(tileItem);
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxTileData.prototype.addTileItems = function (tileItems) {
|
|
||||||
for (var i = 0; i < tileItems.length; i++) {
|
|
||||||
this.addTileItem(tileItems[i]);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export { GmxTileData };
|
|
||||||
@ -1,48 +0,0 @@
|
|||||||
/**
|
|
||||||
* @module og/gmx/GmxTileDataGroup
|
|
||||||
*/
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents geomixer vector tile data container or grouop. Stores tile datas and their items.
|
|
||||||
*
|
|
||||||
* @class
|
|
||||||
* @param {og.gmx.VectorLayer} layer - Layer.
|
|
||||||
* @param {og.Extent} extent - Tile geographical extent.
|
|
||||||
*/
|
|
||||||
const GmxTileDataGroup = function (layer, extent) {
|
|
||||||
this.layer = layer;
|
|
||||||
this.tileExtent = extent;
|
|
||||||
this.tileDataArr = [];
|
|
||||||
this.tileItemArr = [];
|
|
||||||
this.tileItemsCache = {};
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxTileDataGroup.prototype.addTileData = function (tileData) {
|
|
||||||
tileData.group = this;
|
|
||||||
tileData.groupIndex = this.tileDataArr.length;
|
|
||||||
this.tileDataArr.push(tileData);
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxTileDataGroup.prototype.removeTileData = function (tileData) {
|
|
||||||
tileData.group = null;
|
|
||||||
this.tileDataArr.splice(tileData.groupIndex, 1);
|
|
||||||
tileData.groupIndex = -1;
|
|
||||||
this.tileItemArr.length = 0;
|
|
||||||
this.tileItemArr = [];
|
|
||||||
for (var i = 0; i < this.tileDataArr.length; i++) {
|
|
||||||
var ti = this.tileDataArr[i];
|
|
||||||
for (var j = 0; j < ti.tileItems.length; j++) {
|
|
||||||
this.addTileItem(ti.tileItems[j]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxTileDataGroup.prototype.addTileItem = function (tileItem) {
|
|
||||||
this.tileItemArr.push(tileItem);
|
|
||||||
this.tileItemsCache[tileItem.item.id] = tileItem;
|
|
||||||
};
|
|
||||||
|
|
||||||
export { GmxTileDataGroup };
|
|
||||||
@ -1,186 +0,0 @@
|
|||||||
/**
|
|
||||||
* @module og/gmx/GmxTileItem
|
|
||||||
*/
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import * as math from '../../math.js';
|
|
||||||
import { Extent } from '../../Extent.js';
|
|
||||||
import { earcut, flatten } from '../../utils/earcut.js';
|
|
||||||
import { GmxVectorTileCreator } from './GmxVectorTileCreator.js';
|
|
||||||
import { LonLat } from '../../LonLat.js';
|
|
||||||
|
|
||||||
function chkOnEdge(p1, p2, ext) {
|
|
||||||
if (p1[0] === p2[0] && (Math.abs(p1[0] - ext.northEast.lon) < 0.05 || Math.abs(p1[0] - ext.southWest.lon) < 0.05) ||
|
|
||||||
p1[1] === p2[1] && (Math.abs(p1[1] - ext.northEast.lat) < 0.05 || Math.abs(p1[1] - ext.southWest.lat) < 0.05)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
|
|
||||||
const GmxTileItem = function (item, geometry) {
|
|
||||||
|
|
||||||
this.tileData = null;
|
|
||||||
this.tileDataIndex = -1;
|
|
||||||
|
|
||||||
this.item = item;
|
|
||||||
this.geometry = geometry;
|
|
||||||
|
|
||||||
this.extent = null;
|
|
||||||
|
|
||||||
//Polygon arrays
|
|
||||||
this._polyVerticesMerc = [];
|
|
||||||
this._polyIndexes = [];
|
|
||||||
|
|
||||||
//Line arrays
|
|
||||||
this._lineVerticesMerc = [];
|
|
||||||
this._lineOrders = [];
|
|
||||||
this._lineIndexes = [];
|
|
||||||
|
|
||||||
//Point array
|
|
||||||
//...
|
|
||||||
|
|
||||||
//Label array
|
|
||||||
//...
|
|
||||||
|
|
||||||
//Buffers
|
|
||||||
this._polyVerticesBufferMerc = null;
|
|
||||||
this._polyIndexesBuffer = null;
|
|
||||||
|
|
||||||
this._lineVerticesBufferMerc = null;
|
|
||||||
this._lineOrdersBuffer = null;
|
|
||||||
this._lineIndexesBuffer = null;
|
|
||||||
|
|
||||||
this._ready = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxTileItem.prototype.createBuffers = function (handler, extent) {
|
|
||||||
if (!this._ready) {
|
|
||||||
this._createVertices(extent);
|
|
||||||
this._createBuffers(handler);
|
|
||||||
this._ready = true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxTileItem.prototype._createVertices = function (extent) {
|
|
||||||
|
|
||||||
var geometry = this.geometry;
|
|
||||||
|
|
||||||
this._polyVerticesMerc = [];
|
|
||||||
this._lineVerticesMerc = [];
|
|
||||||
|
|
||||||
if (!this.extent) {
|
|
||||||
this.extent = new Extent(new LonLat(math.MAX_FLOAT, math.MAX_FLOAT), new LonLat(-math.MAX_FLOAT, -math.MAX_FLOAT));
|
|
||||||
}
|
|
||||||
|
|
||||||
var ne = this.extent.northEast,
|
|
||||||
sw = this.extent.southWest;
|
|
||||||
|
|
||||||
if (geometry.type.trim().toLowerCase() === "polygon") {
|
|
||||||
let coordinates = geometry.coordinates;
|
|
||||||
|
|
||||||
let data = flatten(coordinates);
|
|
||||||
let indexes = earcut(data.vertices, data.holes, 2);
|
|
||||||
|
|
||||||
this._polyVerticesMerc = data.vertices;
|
|
||||||
|
|
||||||
this._polyIndexes = indexes;
|
|
||||||
|
|
||||||
for (let i = 0; i < coordinates.length; i++) {
|
|
||||||
let ci = coordinates[i];
|
|
||||||
let path = [];
|
|
||||||
let startLine = false;
|
|
||||||
let isClosed = true;
|
|
||||||
for (let j = 0; j < ci.length; j++) {
|
|
||||||
let p = ci[j];
|
|
||||||
if (p[0] < sw.lon) sw.lon = p[0];
|
|
||||||
if (p[0] > ne.lon) ne.lon = p[0];
|
|
||||||
if (p[1] < sw.lat) sw.lat = p[1];
|
|
||||||
if (p[1] > ne.lat) ne.lat = p[1];
|
|
||||||
if (!chkOnEdge(p, j < ci.length - 1 ? ci[j + 1] : ci[0], extent)) {
|
|
||||||
startLine = true;
|
|
||||||
path.push(p);
|
|
||||||
} else if (startLine) {
|
|
||||||
isClosed = false;
|
|
||||||
startLine = false;
|
|
||||||
path.push(p);
|
|
||||||
GmxVectorTileCreator.appendLineData([path], false, this._lineVerticesMerc, this._lineOrders, this._lineIndexes);
|
|
||||||
path = [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (path.length) {
|
|
||||||
GmxVectorTileCreator.appendLineData([path], isClosed, this._lineVerticesMerc, this._lineOrders, this._lineIndexes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (geometry.type.trim().toLowerCase() === "multipolygon") {
|
|
||||||
|
|
||||||
let coordinates = geometry.coordinates;
|
|
||||||
let vertices = [],
|
|
||||||
indexes = [];
|
|
||||||
|
|
||||||
for (let i = 0; i < coordinates.length; i++) {
|
|
||||||
let cci = coordinates[i];
|
|
||||||
let data = flatten(cci);
|
|
||||||
let dataIndexes = earcut(data.vertices, data.holes, 2);
|
|
||||||
|
|
||||||
for (let j = 0; j < dataIndexes.length; j++) {
|
|
||||||
indexes.push(dataIndexes[j] + vertices.length * 0.5);
|
|
||||||
}
|
|
||||||
|
|
||||||
vertices.push.apply(vertices, data.vertices);
|
|
||||||
|
|
||||||
for (var ii = 0; ii < cci.length; ii++) {
|
|
||||||
let ci = cci[ii];
|
|
||||||
let path = [];
|
|
||||||
let startLine = false;
|
|
||||||
let isClosed = true;
|
|
||||||
for (let j = 0; j < ci.length; j++) {
|
|
||||||
let p = ci[j];
|
|
||||||
if (p[0] < sw.lon) sw.lon = p[0];
|
|
||||||
if (p[0] > ne.lon) ne.lon = p[0];
|
|
||||||
if (p[1] < sw.lat) sw.lat = p[1];
|
|
||||||
if (p[1] > ne.lat) ne.lat = p[1];
|
|
||||||
if (!chkOnEdge(p, j < ci.length - 1 ? ci[j + 1] : ci[0], extent)) {
|
|
||||||
startLine = true;
|
|
||||||
path.push(p);
|
|
||||||
} else if (startLine) {
|
|
||||||
isClosed = false;
|
|
||||||
startLine = false;
|
|
||||||
path.push(p);
|
|
||||||
GmxVectorTileCreator.appendLineData([path], false, this._lineVerticesMerc, this._lineOrders, this._lineIndexes);
|
|
||||||
path = [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (path.length) {
|
|
||||||
GmxVectorTileCreator.appendLineData([path], isClosed, this._lineVerticesMerc, this._lineOrders, this._lineIndexes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this._polyVerticesMerc = vertices;
|
|
||||||
this._polyIndexes = indexes;
|
|
||||||
|
|
||||||
} else if (geometry.type.toLowerCase() === "linestring") {
|
|
||||||
//
|
|
||||||
//TODO:extent
|
|
||||||
//
|
|
||||||
GmxVectorTileCreator.appendLineData([geometry._coordinates], false, this._lineVerticesMerc, this._lineOrders, this._lineIndexes);
|
|
||||||
} else if (geometry.type.toLowerCase() === "multilinestring") {
|
|
||||||
//
|
|
||||||
//TODO:extent
|
|
||||||
//
|
|
||||||
GmxVectorTileCreator.appendLineData(geometry._coordinates, false, this._lineVerticesMerc, this._lineOrders, this._lineIndexes);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxTileItem.prototype._createBuffers = function (h) {
|
|
||||||
this._polyVerticesBufferMerc = h.createArrayBuffer(new Float32Array(this._polyVerticesMerc), 2, this._polyVerticesMerc.length / 2);
|
|
||||||
this._polyIndexesBuffer = h.createElementArrayBuffer(new Uint32Array(this._polyIndexes), 1, this._polyIndexes.length);
|
|
||||||
|
|
||||||
this._lineVerticesBufferMerc = h.createArrayBuffer(new Float32Array(this._lineVerticesMerc), 2, this._lineVerticesMerc.length / 2);
|
|
||||||
this._lineIndexesBuffer = h.createElementArrayBuffer(new Uint32Array(this._lineIndexes), 1, this._lineIndexes.length);
|
|
||||||
this._lineOrdersBuffer = h.createArrayBuffer(new Float32Array(this._lineOrders), 1, this._lineOrders.length / 2);
|
|
||||||
};
|
|
||||||
|
|
||||||
export { GmxTileItem };
|
|
||||||
@ -1,841 +0,0 @@
|
|||||||
/**
|
|
||||||
* @module og/gmx/GmxVector
|
|
||||||
*/
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import * as utils from '../../utils/shared.js';
|
|
||||||
import { ajax } from '../../ajax.js';
|
|
||||||
import { EPSG3857 } from '../../proj/EPSG3857.js';
|
|
||||||
import { Extent } from '../../Extent.js';
|
|
||||||
import { Geometry } from '../../entity/Geometry.js';
|
|
||||||
import { GmxCheckVersion } from './GmxCheckVersion.js';
|
|
||||||
import { GmxItem } from './GmxItem.js';
|
|
||||||
import { GmxMaterial } from './GmxMaterial.js';
|
|
||||||
import { GmxTileData } from './GmxTileData.js';
|
|
||||||
import { GmxTileItem } from './GmxTileItem.js';
|
|
||||||
import { GmxTileDataGroup } from './GmxTileDataGroup.js';
|
|
||||||
import { GmxVectorTileCreator } from './GmxVectorTileCreator.js';
|
|
||||||
import { isEmpty } from '../../utils/shared.js';
|
|
||||||
import { Layer } from '../../layer/Layer.js';
|
|
||||||
import { QueueArray } from '../../QueueArray.js';
|
|
||||||
import { RENDERING } from '../../quadTree/quadTree.js';
|
|
||||||
import { Vec4 } from '../../math/Vec4.js';
|
|
||||||
|
|
||||||
const TileSenderUrlImagery = '//maps.kosmosnimki.ru/TileSender.ashx?ModeKey=tile&ftc=osm&x={x}&y={y}&z={z}&srs=3857&LayerName={l}';
|
|
||||||
const TileSenderUrlTemporal = '//maps.kosmosnimki.ru/TileSender.ashx?WrapStyle=None&ModeKey=tile&r=j&ftc=osm&srs=3857&LayerName={id}&z={z}&x={x}&y={y}&v={v}&Level={level}&Span={span}';
|
|
||||||
const TileSenderUrl = '//maps.kosmosnimki.ru/TileSender.ashx?WrapStyle=None&ModeKey=tile&r=j&ftc=osm&srs=3857&LayerName={id}&z={z}&x={x}&y={y}&v={v}';
|
|
||||||
|
|
||||||
let __requestsCounter = 0;
|
|
||||||
const MAX_REQUESTS = 15;
|
|
||||||
|
|
||||||
const EVENT_NAMES = [
|
|
||||||
"draw",
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Triggered when current tile image has loaded before rendereing.
|
|
||||||
* @event og.gmx.VectorLayer#load
|
|
||||||
*/
|
|
||||||
"load",
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Triggered when all tiles have loaded or loading has stopped.
|
|
||||||
* @event og.gmx.VectorLayer#loadend
|
|
||||||
*/
|
|
||||||
"loadend"
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: description
|
|
||||||
* @class
|
|
||||||
* @param {String} name - Layer user name.
|
|
||||||
* @param {Object} options:
|
|
||||||
* @extends {og.Layer}
|
|
||||||
*/
|
|
||||||
class GmxVector extends Layer {
|
|
||||||
constructor(name, options) {
|
|
||||||
|
|
||||||
super(name, options);
|
|
||||||
|
|
||||||
options = options || {};
|
|
||||||
|
|
||||||
this.isVector = true;
|
|
||||||
|
|
||||||
this.hostUrl = options.hostUrl || "//maps.kosmosnimki.ru/";
|
|
||||||
|
|
||||||
this._pickingEnabled = options.pickingEnabled !== undefined ? options.pickingEnabled : true;
|
|
||||||
|
|
||||||
this._initialized = false;
|
|
||||||
|
|
||||||
this._layerId = options.layerId;
|
|
||||||
|
|
||||||
this._tileSenderUrlTemplate = '//maps.kosmosnimki.ru/TileSender.ashx?WrapStyle=None&ModeKey=tile&r=j&ftc=osm&srs=3857&LayerName={id}&z={z}&x={x}&y={y}&v={v}';
|
|
||||||
|
|
||||||
this._gmxProperties = null;
|
|
||||||
|
|
||||||
this._beginDate = options.beginDate || null;
|
|
||||||
|
|
||||||
this._endDate = options.endDate || null;
|
|
||||||
|
|
||||||
this._itemCache = {};
|
|
||||||
|
|
||||||
this._tileDataGroupCache = {};
|
|
||||||
|
|
||||||
this._tileDataCache = {};
|
|
||||||
|
|
||||||
this._tileVersions = {};
|
|
||||||
|
|
||||||
this._itemZIndexCounter = 0;
|
|
||||||
|
|
||||||
this._filterCallback = null;
|
|
||||||
|
|
||||||
this._filteredItems = {};
|
|
||||||
|
|
||||||
this._styleCallback = null;
|
|
||||||
|
|
||||||
this._styledItems = {};
|
|
||||||
|
|
||||||
this._updatedItemArr = [];
|
|
||||||
this._updatedItems = {};
|
|
||||||
|
|
||||||
this._style = options.style || {};
|
|
||||||
this._style.fillColor = utils.createColorRGBA(this._style.fillColor, new Vec4(0.19, 0.62, 0.85, 0.57));
|
|
||||||
this._style.lineColor = utils.createColorRGBA(this._style.lineColor, new Vec4(0.19, 0.62, 0.85, 1));
|
|
||||||
this._style.strokeColor = utils.createColorRGBA(this._style.strokeColor, new Vec4(1, 1, 1, 0.95));
|
|
||||||
this._style.lineWidth = this._style.lineWidth || 5;
|
|
||||||
this._style.strokeWidth = this._style.strokeWidth || 0;
|
|
||||||
|
|
||||||
this.events.registerNames(EVENT_NAMES);
|
|
||||||
|
|
||||||
this._needRefresh = false;
|
|
||||||
|
|
||||||
this._tileDataGroupQueue = new QueueArray();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Current loading tiles couter.
|
|
||||||
* @protected
|
|
||||||
* @type {number}
|
|
||||||
*/
|
|
||||||
this._vecCounter = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tile pending queue that waiting for loading.
|
|
||||||
* @protected
|
|
||||||
* @type {Array.<og.planetSegment.Material>}
|
|
||||||
*/
|
|
||||||
this._vecPendingsQueue = new QueueArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
static getLayerInfo(hostUrl, layerId, proceedCallback, errorCallback) {
|
|
||||||
ajax.request(hostUrl + "/rest/ver1/layers/" + layerId + "/info", {
|
|
||||||
'type': "GET",
|
|
||||||
'responseType': "json",
|
|
||||||
'data': {
|
|
||||||
'WrapStyle': "None"
|
|
||||||
},
|
|
||||||
'success': function (data) {
|
|
||||||
proceedCallback && proceedCallback(data);
|
|
||||||
},
|
|
||||||
'error': function (err) {
|
|
||||||
errorCallback && errorCallback(err);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
static dateToEpoch(date) {
|
|
||||||
var time = date.getTime();
|
|
||||||
return time - time % 86400000;
|
|
||||||
}
|
|
||||||
|
|
||||||
get instanceName() {
|
|
||||||
return "GmxVector";
|
|
||||||
}
|
|
||||||
|
|
||||||
_bindPicking() {
|
|
||||||
this._pickingColor.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
createMaterial(segment) {
|
|
||||||
return new GmxMaterial(segment, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds layer to the planet.
|
|
||||||
* @public
|
|
||||||
* @param {og.scene.RenderNode} planet - Planet scene.
|
|
||||||
* @return {og.gmx.VectorLayer} - Returns og.gmx.VectorLayer instance.
|
|
||||||
*/
|
|
||||||
addTo(planet) {
|
|
||||||
|
|
||||||
//Bind checkVersion to the planet
|
|
||||||
if (!planet._gmxCheckVersion) {
|
|
||||||
planet._gmxCheckVersion = new GmxCheckVersion(planet);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Bind gmxVectorTileCreator to the planet
|
|
||||||
if (!planet._gmxVectorTileCreator) {
|
|
||||||
planet._gmxVectorTileCreator = new GmxVectorTileCreator(planet);
|
|
||||||
}
|
|
||||||
|
|
||||||
this._assignPlanet(planet);
|
|
||||||
|
|
||||||
if (this._visibility && !this._initialized) {
|
|
||||||
this._initialize();
|
|
||||||
}
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes from planet.
|
|
||||||
* @public
|
|
||||||
* @returns {og.gmx.VectorLayer.Layer} -This layer.
|
|
||||||
*/
|
|
||||||
remove() {
|
|
||||||
super.remove();
|
|
||||||
|
|
||||||
this._planet && this._planet.events.off("draw", this._onRefreshNodes);
|
|
||||||
this._initialized = false;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
_initialize() {
|
|
||||||
|
|
||||||
this._initialized = true;
|
|
||||||
|
|
||||||
var p = this._planet;
|
|
||||||
var that = this;
|
|
||||||
|
|
||||||
GmxVector.getLayerInfo(this.hostUrl, this._layerId, function (data) {
|
|
||||||
that._gmxProperties = data.properties;
|
|
||||||
if (data.properties.Temporal) {
|
|
||||||
var d = new Date();
|
|
||||||
var currEpoch = GmxVector.dateToEpoch(d);
|
|
||||||
that._beginDate = that._beginDate || new Date(currEpoch);
|
|
||||||
that._endDate = that._endDate || new Date(d.setTime(currEpoch + 24 * 60 * 60 * 1000));
|
|
||||||
that._tileSenderUrlTemplate = TileSenderUrlTemporal;
|
|
||||||
that._tileImageryUrlTemplate = TileSenderUrlImagery;
|
|
||||||
} else {
|
|
||||||
that._tileSenderUrlTemplate = TileSenderUrl;
|
|
||||||
}
|
|
||||||
that.setExtent(Geometry.getExtent(data.geometry));
|
|
||||||
p._gmxCheckVersion.update();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets layer visibility.
|
|
||||||
* @public
|
|
||||||
* @virtual
|
|
||||||
* @param {boolean} visibility - Layer visibility.
|
|
||||||
*/
|
|
||||||
setVisibility(visibility) {
|
|
||||||
|
|
||||||
super.setVisibility(visibility);
|
|
||||||
|
|
||||||
if (visibility) {
|
|
||||||
this._planet && this._planet.events.on("draw", this._onRefreshNodes, this);
|
|
||||||
} else {
|
|
||||||
this._planet && this._planet.events.off("draw", this._onRefreshNodes);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this._visibility && !this._initialized) {
|
|
||||||
this._initialize();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_checkVersionSuccess(prop) {
|
|
||||||
var to = prop.tilesOrder,
|
|
||||||
ts = prop.tiles;
|
|
||||||
var toSize = to.length;
|
|
||||||
|
|
||||||
var _X = to.indexOf("X"),
|
|
||||||
_Y = to.indexOf("Y"),
|
|
||||||
_Z = to.indexOf("Z"),
|
|
||||||
_V = to.indexOf("V"),
|
|
||||||
_LEVEL = to.indexOf("Level"),
|
|
||||||
_SPAN = to.indexOf("Span");
|
|
||||||
|
|
||||||
var tv = this._tileVersions;
|
|
||||||
for (var i = 0; i < ts.length; i += toSize) {
|
|
||||||
var x = ts[i + _X],
|
|
||||||
y = ts[i + _Y],
|
|
||||||
z = ts[i + _Z],
|
|
||||||
v = ts[i + _V],
|
|
||||||
level = ts[i + _LEVEL],
|
|
||||||
span = ts[i + _SPAN];
|
|
||||||
|
|
||||||
var tileIndex = Layer.getTileIndex(x, y, z, level, span);
|
|
||||||
if (tv[tileIndex] !== v) {
|
|
||||||
this._tileVersions[tileIndex] = v;
|
|
||||||
this._vecLoadTileData({
|
|
||||||
'id': this._layerId,
|
|
||||||
'x': x.toString(), 'y': y.toString(), 'z': z.toString(),
|
|
||||||
'v': v.toString(), "level": level.toString(), "span": span.toString()
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setFilter(filterCallback) {
|
|
||||||
this._filterCallback = filterCallback;
|
|
||||||
this.updateFilter();
|
|
||||||
}
|
|
||||||
|
|
||||||
removeFilter() {
|
|
||||||
this._filterCallback = null;
|
|
||||||
this.updateFilter();
|
|
||||||
}
|
|
||||||
|
|
||||||
getItemVisibility(item) {
|
|
||||||
if (!this._filterCallback) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
var visibility = this._filteredItems[item.id];
|
|
||||||
if (isEmpty(visibility)) {
|
|
||||||
visibility = this._filteredItems[item.id] = this._filterCallback[item.id](item);
|
|
||||||
}
|
|
||||||
return visibility;
|
|
||||||
}
|
|
||||||
|
|
||||||
updateFilter() {
|
|
||||||
this._filteredItems = {};
|
|
||||||
//...TODO
|
|
||||||
}
|
|
||||||
|
|
||||||
setStyleHook(styleCallback) {
|
|
||||||
this._styleCallback = styleCallback;
|
|
||||||
this.updateStyle();
|
|
||||||
}
|
|
||||||
|
|
||||||
getItemStyle(item) {
|
|
||||||
if (!this._styleCallback) {
|
|
||||||
return item._style;
|
|
||||||
}
|
|
||||||
var style = this._styledItems[item.id];
|
|
||||||
if (isEmpty(style)) {
|
|
||||||
style = this._styledItems[item.id] = this._styleCallback[item.id](item);
|
|
||||||
}
|
|
||||||
return style;
|
|
||||||
}
|
|
||||||
|
|
||||||
updateStyle() {
|
|
||||||
this._styledItems = {};
|
|
||||||
//...TODO
|
|
||||||
}
|
|
||||||
|
|
||||||
_vecLoadTileData(t) {
|
|
||||||
if (__requestsCounter >= MAX_REQUESTS && this._vecCounter) {
|
|
||||||
this._vecPendingsQueue.push(t);
|
|
||||||
} else {
|
|
||||||
this._vecExec(t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_vecExec(t) {
|
|
||||||
|
|
||||||
var url = utils.stringTemplate(this._tileSenderUrlTemplate, t);
|
|
||||||
|
|
||||||
__requestsCounter++;
|
|
||||||
this._vecCounter++;
|
|
||||||
|
|
||||||
var that = this;
|
|
||||||
ajax.request(url, {
|
|
||||||
'type': "GET",
|
|
||||||
'responseType': "text",
|
|
||||||
'success': function (dataStr) {
|
|
||||||
__requestsCounter--;
|
|
||||||
that._vecCounter--;
|
|
||||||
|
|
||||||
var data = JSON.parse(dataStr.substring(dataStr.indexOf('{'), dataStr.lastIndexOf('}') + 1));
|
|
||||||
|
|
||||||
that._handleTileData(t, data);
|
|
||||||
|
|
||||||
var e = that.events.load;
|
|
||||||
if (e.handlers.length) {
|
|
||||||
that.events.dispatch(e, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
that._vecDequeueRequest();
|
|
||||||
},
|
|
||||||
'error': function (err) {
|
|
||||||
__requestsCounter--;
|
|
||||||
that._vecCounter--;
|
|
||||||
|
|
||||||
console.log(err);
|
|
||||||
|
|
||||||
that._vecDequeueRequest();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
_vecDequeueRequest() {
|
|
||||||
if (this._vecPendingsQueue.length) {
|
|
||||||
if (__requestsCounter < MAX_REQUESTS) {
|
|
||||||
var t = this._vecWhilePendings();
|
|
||||||
if (t)
|
|
||||||
this._vecExec.call(this, t);
|
|
||||||
}
|
|
||||||
} else if (this._vecCounter === 0) {
|
|
||||||
var e = this.events.loadend;
|
|
||||||
if (e.handlers.length) {
|
|
||||||
this.events.dispatch(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_vecWhilePendings() {
|
|
||||||
while (this._vecPendingsQueue.length) {
|
|
||||||
return this._vecPendingsQueue.pop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
addItem(item) {
|
|
||||||
if (!item._layer) {
|
|
||||||
this._itemCache[item.id] = item;
|
|
||||||
item._layer = this;
|
|
||||||
if (this._planet) {
|
|
||||||
this._planet.renderer.assignPickingColor(item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_getAttributes(item) {
|
|
||||||
var res = {},
|
|
||||||
prop = this._gmxProperties;
|
|
||||||
|
|
||||||
var attrs = prop.attributes,
|
|
||||||
types = prop.attrTypes;
|
|
||||||
|
|
||||||
for (var i = 0; i < attrs.length; i++) {
|
|
||||||
res[attrs[i]] = utils.castType[types[i]](item[i + 1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
getStyle() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
_handleTileData(t, data) {
|
|
||||||
|
|
||||||
var items = data.values,
|
|
||||||
style = this._style,
|
|
||||||
v = data.v;
|
|
||||||
|
|
||||||
var h = this._planet.renderer.handler;
|
|
||||||
|
|
||||||
var tileIndex = Layer.getTileIndex(t.x, t.y, t.z),
|
|
||||||
tileExtent = Extent.fromTile(t.x, t.y, t.z),
|
|
||||||
cacheTileDataGroup = this._tileDataGroupCache[tileIndex];
|
|
||||||
|
|
||||||
if (!cacheTileDataGroup) {
|
|
||||||
cacheTileDataGroup = this._tileDataGroupCache[tileIndex] = new GmxTileDataGroup(this, tileExtent);
|
|
||||||
}
|
|
||||||
|
|
||||||
var tileData = new GmxTileData(data),
|
|
||||||
tileDataCacheIndex = Layer.getTileIndex(tileIndex, t.level, t.span);
|
|
||||||
|
|
||||||
var cacheTileData = this._tileDataCache[tileDataCacheIndex];
|
|
||||||
|
|
||||||
if (cacheTileData) {
|
|
||||||
//Update tile version.Remove it before update.
|
|
||||||
this._tileDataCache[tileDataCacheIndex] = tileData;
|
|
||||||
cacheTileDataGroup.removeTileData(cacheTileData);
|
|
||||||
}
|
|
||||||
|
|
||||||
cacheTileDataGroup.addTileData(tileData);
|
|
||||||
|
|
||||||
for (var i = 0; i < items.length; i++) {
|
|
||||||
|
|
||||||
var item = items[i],
|
|
||||||
gmxId = item[0];
|
|
||||||
|
|
||||||
var cacheItem = this._itemCache[gmxId];
|
|
||||||
|
|
||||||
if (!cacheItem) {
|
|
||||||
cacheItem = new GmxItem(gmxId, {
|
|
||||||
'attributes': this._getAttributes(item),
|
|
||||||
'version': v,
|
|
||||||
'style': {
|
|
||||||
'fillColor': style.fillColor.clone(),
|
|
||||||
'lineColor': style.lineColor.clone(),
|
|
||||||
'strokeColor': style.strokeColor.clone(),
|
|
||||||
'lineWidth': style.lineWidth,
|
|
||||||
'strokeWidth': style.strokeWidth,
|
|
||||||
'zIndex': this._itemZIndexCounter++
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
this.addItem(cacheItem);
|
|
||||||
|
|
||||||
} else if (cacheItem.version !== v) {
|
|
||||||
cacheItem.version = v;
|
|
||||||
cacheItem.attributes = this._getAttributes(item);
|
|
||||||
|
|
||||||
//TODO: Has to be tested
|
|
||||||
cacheItem._extent = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
var ti = new GmxTileItem(cacheItem, item[item.length - 1]);
|
|
||||||
|
|
||||||
ti.createBuffers(h, tileExtent);
|
|
||||||
|
|
||||||
tileData.addTileItem(ti);
|
|
||||||
cacheTileDataGroup.addTileItem(ti);
|
|
||||||
}
|
|
||||||
|
|
||||||
this._tileDataGroupQueue.push(cacheTileDataGroup);
|
|
||||||
|
|
||||||
this._needRefresh = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
_onRefreshNodes(p) {
|
|
||||||
|
|
||||||
if (this._needRefresh && this._planet) {
|
|
||||||
while (this._tileDataGroupQueue.length) {
|
|
||||||
var t = this._tileDataGroupQueue.pop();
|
|
||||||
this._refreshRecursevelyExtent(t.tileExtent, this._planet._quadTree);
|
|
||||||
}
|
|
||||||
this._needRefresh = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
//->
|
|
||||||
//this.loadMaterial goes next.
|
|
||||||
}
|
|
||||||
|
|
||||||
_refreshRecursevelyExtent(extent, treeNode) {
|
|
||||||
if (treeNode.ready) {
|
|
||||||
var lid = this._id;
|
|
||||||
for (var i = 0; i < treeNode.nodes.length; i++) {
|
|
||||||
var ni = treeNode.nodes[i];
|
|
||||||
if (extent.overlaps(ni.segment._extent)) {
|
|
||||||
this._refreshRecursevelyExtent(extent, ni);
|
|
||||||
var m = ni.segment.materials[lid];
|
|
||||||
if (m) {
|
|
||||||
if (m.segment.node.getState() !== RENDERING) {
|
|
||||||
m.layer.clearMaterial(m);
|
|
||||||
} else {
|
|
||||||
if (m.isReady) {
|
|
||||||
m.isReady = false;
|
|
||||||
m._updateTexture = m.texture;
|
|
||||||
m._updatePickingMask = m.pickingMask;
|
|
||||||
m.pickingReady = false;//m.pickingReady && item._pickingReady;
|
|
||||||
}
|
|
||||||
m.isLoading = false;
|
|
||||||
m.fromTile = null;
|
|
||||||
|
|
||||||
//reset drawing process
|
|
||||||
m._completedItems = 0;
|
|
||||||
m._totalItems = 0;
|
|
||||||
}
|
|
||||||
//item._pickingReady = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Start to load tile material.
|
|
||||||
* @public
|
|
||||||
* @virtual
|
|
||||||
* @param {og.planetSegment.Material} material - Current material.
|
|
||||||
*/
|
|
||||||
loadMaterial(material) {
|
|
||||||
|
|
||||||
var seg = material.segment;
|
|
||||||
|
|
||||||
if (seg._projection.id !== EPSG3857.id) {
|
|
||||||
material.textureNotExists();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this._isBaseLayer) {
|
|
||||||
material.texture = seg._isNorth ? seg.planet.solidTextureOne : seg.planet.solidTextureTwo;
|
|
||||||
} else {
|
|
||||||
material.texture = seg.planet.transparentTexture;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this._planet.layerLock.isFree()) {
|
|
||||||
var tileDataGroup = this._getTileDataGroup(seg);
|
|
||||||
if (tileDataGroup) {
|
|
||||||
material.isReady = false;
|
|
||||||
material.isLoading = true;
|
|
||||||
material.fromTile = tileDataGroup;
|
|
||||||
this._planet._gmxVectorTileCreator.add({
|
|
||||||
'material': material,
|
|
||||||
'fromTile': tileDataGroup
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_getTileDataGroup(seg) {
|
|
||||||
var tgc = this._tileDataGroupCache;
|
|
||||||
var data = tgc[seg.tileIndex];
|
|
||||||
if (data) {
|
|
||||||
return data;
|
|
||||||
} else {
|
|
||||||
var pn = this._planet._quadTreeNodesCacheMerc[seg.tileIndex].parentNode;
|
|
||||||
while (pn) {
|
|
||||||
var ptc = tgc[pn.segment.tileIndex];
|
|
||||||
if (ptc) {
|
|
||||||
return ptc;
|
|
||||||
}
|
|
||||||
pn = pn.parentNode;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
getGmxProperties() {
|
|
||||||
return this._gmxProperties;
|
|
||||||
}
|
|
||||||
|
|
||||||
_loadScene(tileItem, material) {
|
|
||||||
|
|
||||||
const item_id = tileItem.item.id;
|
|
||||||
|
|
||||||
let seg = material.segment;
|
|
||||||
|
|
||||||
material.sceneIsLoading[item_id] = true;
|
|
||||||
|
|
||||||
var url = utils.stringTemplate(this._tileImageryUrlTemplate, {
|
|
||||||
'x': seg.tileX,
|
|
||||||
'y': seg.tileY,
|
|
||||||
'z': seg.tileZoom,
|
|
||||||
'l': tileItem.item.attributes.GMX_RasterCatalogID
|
|
||||||
});
|
|
||||||
|
|
||||||
this._planet._tileLoader.load({
|
|
||||||
'src': url,
|
|
||||||
'type': 'imageBitmap',
|
|
||||||
'filter': () => seg.plainReady && seg.node.getState() === RENDERING,
|
|
||||||
'options': {}
|
|
||||||
}, (response) => {
|
|
||||||
if (response.status === "ready") {
|
|
||||||
if (material.isLoading) {
|
|
||||||
let e = this.events.load;
|
|
||||||
if (e.handlers.length) {
|
|
||||||
this.events.dispatch(e, material);
|
|
||||||
}
|
|
||||||
material.applySceneBitmapImage(item_id, response.data);
|
|
||||||
}
|
|
||||||
} else if (response.status === "abort") {
|
|
||||||
material.sceneIsLoading[item_id] = false;
|
|
||||||
} else if (response.status === "error") {
|
|
||||||
if (material.sceneIsLoading[item_id] === true) {
|
|
||||||
material.sceneNotExists(item_id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
applySceneTexture(tileItem, material) {
|
|
||||||
|
|
||||||
const item_id = tileItem.item.id;
|
|
||||||
|
|
||||||
if (material.sceneIsReady[item_id]) {
|
|
||||||
return [0, 0, 1, 1];
|
|
||||||
} else {
|
|
||||||
|
|
||||||
if (!material.sceneIsLoading[item_id]) {
|
|
||||||
this._loadScene(tileItem, material);
|
|
||||||
}
|
|
||||||
|
|
||||||
// var segment = material.segment;
|
|
||||||
// var pn = segment.node,
|
|
||||||
// notEmpty = false;
|
|
||||||
|
|
||||||
// var mId = this._id;
|
|
||||||
// var psegm = material;
|
|
||||||
// while (pn.parentNode) {
|
|
||||||
// if (psegm && psegm.sceneIsReady[item_id]) {
|
|
||||||
// notEmpty = true;
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// pn = pn.parentNode;
|
|
||||||
// psegm = pn.segment.materials[mId];
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (notEmpty) {
|
|
||||||
// material.sceneTexture[item_id] = psegm.sceneTexture[item_id];
|
|
||||||
// var dZ2 = 1.0 / (2 << (segment.tileZoom - pn.segment.tileZoom - 1));
|
|
||||||
// return [
|
|
||||||
// segment.tileX * dZ2 - pn.segment.tileX,
|
|
||||||
// segment.tileY * dZ2 - pn.segment.tileY,
|
|
||||||
// dZ2,
|
|
||||||
// dZ2
|
|
||||||
// ];
|
|
||||||
// } else {
|
|
||||||
// material.sceneTexture[item_id] = segment.planet.transparentTexture;
|
|
||||||
// return [0, 0, 1, 1];
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Abort exact material loading.
|
|
||||||
* @public
|
|
||||||
* @param {og.planetSegment.Material} material - Segment material.
|
|
||||||
*/
|
|
||||||
abortMaterialLoading(material) {
|
|
||||||
material.abort();
|
|
||||||
}
|
|
||||||
|
|
||||||
applyMaterial(material) {
|
|
||||||
if (material.isReady) {
|
|
||||||
|
|
||||||
if (material.notComplete() && !material.isLoading) {
|
|
||||||
material.isLoading = true;
|
|
||||||
this._planet._gmxVectorTileCreator.add({
|
|
||||||
'material': material,
|
|
||||||
'fromTile': material.fromTile
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return [0, 0, 1, 1];
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
!material.isLoading && this.loadMaterial(material);
|
|
||||||
|
|
||||||
var segment = material.segment;
|
|
||||||
var pn = segment.node,
|
|
||||||
notEmpty = false;
|
|
||||||
|
|
||||||
var mId = this._id;
|
|
||||||
var psegm = material;
|
|
||||||
//var i = 0;
|
|
||||||
while (pn.parentNode /*&& i < 2*/) {
|
|
||||||
if (psegm && psegm.isReady) {
|
|
||||||
notEmpty = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
pn = pn.parentNode;
|
|
||||||
psegm = pn.segment.materials[mId];
|
|
||||||
//i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (notEmpty) {
|
|
||||||
material.appliedNodeId = pn.nodeId;
|
|
||||||
material.texture = psegm.texture;
|
|
||||||
material.pickingMask = psegm.pickingMask;
|
|
||||||
var dZ2 = 1.0 / (2 << (segment.tileZoom - pn.segment.tileZoom - 1));
|
|
||||||
return [
|
|
||||||
segment.tileX * dZ2 - pn.segment.tileX,
|
|
||||||
segment.tileY * dZ2 - pn.segment.tileY,
|
|
||||||
dZ2,
|
|
||||||
dZ2
|
|
||||||
];
|
|
||||||
} else {
|
|
||||||
if (material.textureExists && material._updateTexture) {
|
|
||||||
material.texture = material._updateTexture;
|
|
||||||
material.pickingMask = material._updatePickingMask;
|
|
||||||
} else {
|
|
||||||
material.texture = segment.planet.transparentTexture;
|
|
||||||
material.pickingMask = segment.planet.transparentTexture;
|
|
||||||
}
|
|
||||||
return [0, 0, 1, 1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
clearMaterial(material) {
|
|
||||||
material.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
_refreshRecursevely(item, treeNode) {
|
|
||||||
if (treeNode.ready) {
|
|
||||||
var lid = this._id;
|
|
||||||
for (var i = 0; i < treeNode.nodes.length; i++) {
|
|
||||||
var ni = treeNode.nodes[i];
|
|
||||||
if (item._extent.overlaps(ni.segment._extent)) {
|
|
||||||
this._refreshRecursevely(item, ni);
|
|
||||||
var m = ni.segment.materials[lid];
|
|
||||||
if (m && m.isReady) {
|
|
||||||
if (m.segment.node.getState() !== RENDERING) {
|
|
||||||
m.layer.clearMaterial(m);
|
|
||||||
} else {
|
|
||||||
m.pickingReady = m.pickingReady && item._pickingReady;
|
|
||||||
m.isReady = false;
|
|
||||||
m._updateTexture = m.texture;
|
|
||||||
m._updatePickingMask = m.pickingMask;
|
|
||||||
|
|
||||||
//reset drawing process
|
|
||||||
m._completedItems = 0;
|
|
||||||
m._totalItems = 0;
|
|
||||||
}
|
|
||||||
item._pickingReady = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_refreshPlanetNode(treeNode) {
|
|
||||||
for (var i = 0, items = this._updatedItemArr; i < items.length; i++) {
|
|
||||||
this._refreshRecursevely(items[i], treeNode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_updatePlanet() {
|
|
||||||
if (this._updatedItemArr.length) {
|
|
||||||
if (this._planet) {
|
|
||||||
this._refreshPlanetNode(this._planet._quadTree);
|
|
||||||
}
|
|
||||||
this._updatedItemArr.length = 0;
|
|
||||||
this._updatedItemArr = [];
|
|
||||||
this._updatedItems = {};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
updateItems(items) {
|
|
||||||
for (var i = 0; i < items.length; i++) {
|
|
||||||
this.updateItem(items[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
updateItem(item) {
|
|
||||||
if (item._extent) {
|
|
||||||
this._updatedItemArr.push(item);
|
|
||||||
this._updatedItems[item.id] = item;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
update() {
|
|
||||||
this._updatePlanet();
|
|
||||||
this.events.dispatch(this.events.draw, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
setStyle(style) {
|
|
||||||
//...
|
|
||||||
}
|
|
||||||
|
|
||||||
clear() {
|
|
||||||
this._itemCache = {};
|
|
||||||
this._tileDataCache = {};
|
|
||||||
this._tileDataGroupCache = {};
|
|
||||||
this._tileVersions = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
refresh() {
|
|
||||||
if (this._gmxProperties) {
|
|
||||||
this.clear();
|
|
||||||
if (this._planet) {
|
|
||||||
this._planet._gmxCheckVersion.update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setDateInterval(beginDate, endDate) {
|
|
||||||
this._beginDate = beginDate;
|
|
||||||
this._endDate = endDate;
|
|
||||||
// if (this._gmxProperties && this._gmxProperties.Temporal) {
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export { GmxVector };
|
|
||||||
@ -1,444 +0,0 @@
|
|||||||
/**
|
|
||||||
* @module og/gmx/GmxVectorTileCreator
|
|
||||||
*/
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import { VectorTileCreator } from '../../utils/VectorTileCreator.js';
|
|
||||||
import { inherits } from '../../inherits.js';
|
|
||||||
import { RENDERING } from '../../quadTree/quadTree.js';
|
|
||||||
import { Program } from '../../webgl/Program.js';
|
|
||||||
import { types } from '../../webgl/types.js';
|
|
||||||
import { Framebuffer } from '../../webgl/Framebuffer.js';
|
|
||||||
|
|
||||||
const GmxVectorTileCreator = function (planet, maxFrames, width, height) {
|
|
||||||
|
|
||||||
VectorTileCreator.call(this, planet, maxFrames, width, height);
|
|
||||||
|
|
||||||
this._maskTexture = null;
|
|
||||||
|
|
||||||
this._framebuffer = null;
|
|
||||||
|
|
||||||
this._temporaryData_ = null;
|
|
||||||
|
|
||||||
planet.events.on("draw", this.frame, this);
|
|
||||||
};
|
|
||||||
|
|
||||||
inherits(GmxVectorTileCreator, VectorTileCreator);
|
|
||||||
|
|
||||||
GmxVectorTileCreator.appendLineData = function (pathArr, isClosed, outVertices, outOrders, outIndexes) {
|
|
||||||
var index = 0;
|
|
||||||
|
|
||||||
if (outIndexes.length > 0) {
|
|
||||||
index = outIndexes[outIndexes.length - 5] + 9;
|
|
||||||
outIndexes.push(index, index);
|
|
||||||
} else {
|
|
||||||
outIndexes.push(0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var j = 0; j < pathArr.length; j++) {
|
|
||||||
var path = pathArr[j];
|
|
||||||
var startIndex = index;
|
|
||||||
var last;
|
|
||||||
if (isClosed) {
|
|
||||||
last = path[path.length - 1];
|
|
||||||
} else {
|
|
||||||
let p0 = path[0],
|
|
||||||
p1 = path[1];
|
|
||||||
last = [p0[0] + p0[0] - p1[0], p0[1] + p0[1] - p1[1]];
|
|
||||||
}
|
|
||||||
outVertices.push(last[0], last[1], last[0], last[1], last[0], last[1], last[0], last[1]);
|
|
||||||
outOrders.push(1, -1, 2, -2);
|
|
||||||
|
|
||||||
for (var i = 0; i < path.length; i++) {
|
|
||||||
var cur = path[i];
|
|
||||||
outVertices.push(cur[0], cur[1], cur[0], cur[1], cur[0], cur[1], cur[0], cur[1]);
|
|
||||||
outOrders.push(1, -1, 2, -2);
|
|
||||||
outIndexes.push(index++, index++, index++, index++);
|
|
||||||
}
|
|
||||||
|
|
||||||
var first;
|
|
||||||
if (isClosed) {
|
|
||||||
first = path[0];
|
|
||||||
outIndexes.push(startIndex, startIndex + 1, startIndex + 1, startIndex + 1);
|
|
||||||
} else {
|
|
||||||
let p0 = path[path.length - 1],
|
|
||||||
p1 = path[path.length - 2];
|
|
||||||
first = [p0[0] + p0[0] - p1[0], p0[1] + p0[1] - p1[1]];
|
|
||||||
outIndexes.push(index - 1, index - 1, index - 1, index - 1);
|
|
||||||
}
|
|
||||||
outVertices.push(first[0], first[1], first[0], first[1], first[0], first[1], first[0], first[1]);
|
|
||||||
outOrders.push(1, -1, 2, -2);
|
|
||||||
|
|
||||||
if (j < pathArr.length - 1) {
|
|
||||||
index += 8;
|
|
||||||
outIndexes.push(index, index);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxVectorTileCreator.prototype._initialize = function () {
|
|
||||||
|
|
||||||
//Line
|
|
||||||
if (!this._handler.programs.gmxVectorTileLineRasterization) {
|
|
||||||
this._handler.addProgram(new Program("gmxVectorTileLineRasterization", {
|
|
||||||
uniforms: {
|
|
||||||
'viewport': { type: types.VEC2 },
|
|
||||||
'thicknessOutline': { type: types.FLOAT },
|
|
||||||
'alpha': { type: types.FLOAT },
|
|
||||||
'extentParams': { type: types.VEC4 },
|
|
||||||
'color': { type: types.VEC4 },
|
|
||||||
'thickness': { type: types.FLOAT }
|
|
||||||
},
|
|
||||||
attributes: {
|
|
||||||
'prev': { type: types.VEC2 },
|
|
||||||
'current': { type: types.VEC2 },
|
|
||||||
'next': { type: types.VEC2 },
|
|
||||||
'order': { type: types.FLOAT }
|
|
||||||
},
|
|
||||||
vertexShader: `attribute vec2 prev;
|
|
||||||
attribute vec2 current;
|
|
||||||
attribute vec2 next;
|
|
||||||
attribute float order;
|
|
||||||
uniform float thickness;
|
|
||||||
uniform float thicknessOutline;
|
|
||||||
uniform vec2 viewport;
|
|
||||||
uniform vec4 extentParams;
|
|
||||||
|
|
||||||
vec2 proj(vec2 coordinates){
|
|
||||||
return vec2(-1.0 + (coordinates - extentParams.xy) * extentParams.zw) * vec2(1.0, -1.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void main(){
|
|
||||||
vec2 _next = next;
|
|
||||||
vec2 _prev = prev;
|
|
||||||
if(prev == current){
|
|
||||||
if(next == current){
|
|
||||||
_next = current + vec2(1.0, 0.0);
|
|
||||||
_prev = current - next;
|
|
||||||
}else{
|
|
||||||
_prev = current + normalize(current - next);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(next == current){
|
|
||||||
_next = current + normalize(current - _prev);
|
|
||||||
}
|
|
||||||
|
|
||||||
vec2 sNext = proj(_next),
|
|
||||||
sCurrent = proj(current),
|
|
||||||
sPrev = proj(_prev);
|
|
||||||
vec2 dirNext = normalize(sNext - sCurrent);
|
|
||||||
vec2 dirPrev = normalize(sPrev - sCurrent);
|
|
||||||
float dotNP = dot(dirNext, dirPrev);
|
|
||||||
|
|
||||||
vec2 normalNext = normalize(vec2(-dirNext.y, dirNext.x));
|
|
||||||
vec2 normalPrev = normalize(vec2(dirPrev.y, -dirPrev.x));
|
|
||||||
vec2 d = (thickness + thicknessOutline) * 0.5 * sign(order) / viewport;
|
|
||||||
|
|
||||||
vec2 m;
|
|
||||||
if(dotNP >= 0.99991){
|
|
||||||
m = sCurrent - normalPrev * d;
|
|
||||||
}else{
|
|
||||||
vec2 dir = normalPrev + normalNext;
|
|
||||||
m = sCurrent + dir * d / (dirNext.x * dir.y - dirNext.y * dir.x);
|
|
||||||
|
|
||||||
if( dotNP > 0.5 && dot(dirNext + dirPrev, m - sCurrent) < 0.0 ){
|
|
||||||
float occw = order * sign(dirNext.x * dirPrev.y - dirNext.y * dirPrev.x);
|
|
||||||
if(occw == -1.0){
|
|
||||||
m = sCurrent + normalPrev * d;
|
|
||||||
}else if(occw == 1.0){
|
|
||||||
m = sCurrent + normalNext * d;
|
|
||||||
}else if(occw == -2.0){
|
|
||||||
m = sCurrent + normalNext * d;
|
|
||||||
}else if(occw == 2.0){
|
|
||||||
m = sCurrent + normalPrev * d;
|
|
||||||
}
|
|
||||||
}else if(distance(sCurrent, m) > min(distance(sCurrent, sNext), distance(sCurrent, sPrev))){
|
|
||||||
m = sCurrent + normalNext * d;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
gl_Position = vec4(m.x, m.y, 0.0, 1.0);
|
|
||||||
}`,
|
|
||||||
fragmentShader: `precision highp float;
|
|
||||||
uniform float alpha;
|
|
||||||
uniform vec4 color;
|
|
||||||
void main() {
|
|
||||||
gl_FragColor = vec4(color.rgb, alpha * color.a);
|
|
||||||
}`
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
//Polygon
|
|
||||||
if (!this._handler.programs.gmxVectorTilePolygonRasterization) {
|
|
||||||
this._handler.addProgram(new Program("gmxVectorTilePolygonRasterization", {
|
|
||||||
uniforms: {
|
|
||||||
'extentParams': { type: types.VEC4 },
|
|
||||||
'color': { type: types.VEC4 }
|
|
||||||
},
|
|
||||||
attributes: {
|
|
||||||
'coordinates': { type: types.VEC2 }
|
|
||||||
},
|
|
||||||
vertexShader: `attribute vec2 coordinates;
|
|
||||||
uniform vec4 extentParams;
|
|
||||||
void main() {
|
|
||||||
gl_Position = vec4((-1.0 + (coordinates - extentParams.xy) * extentParams.zw) * vec2(1.0, -1.0), 0.0, 1.0);
|
|
||||||
}`,
|
|
||||||
fragmentShader: `precision highp float;
|
|
||||||
uniform vec4 color;
|
|
||||||
void main () {
|
|
||||||
gl_FragColor = color;
|
|
||||||
}`
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
this._framebuffer = new Framebuffer(this._handler, {
|
|
||||||
width: this._width,
|
|
||||||
height: this._height,
|
|
||||||
useDepth: false
|
|
||||||
});
|
|
||||||
|
|
||||||
this._framebuffer.init();
|
|
||||||
|
|
||||||
this._temporaryData_ = new Uint8Array(4 * this._width * this._height);
|
|
||||||
|
|
||||||
this._maskTexture = this._handler.createEmptyTexture_n(this._width, this._height);
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxVectorTileCreator.prototype.add = function (data) {
|
|
||||||
this._queue.push(data);
|
|
||||||
};
|
|
||||||
|
|
||||||
GmxVectorTileCreator.prototype.frame = function () {
|
|
||||||
|
|
||||||
if (this._planet.layerLock.isFree() && this._queue.length) {
|
|
||||||
|
|
||||||
const h = this._handler;
|
|
||||||
const gl = h.gl;
|
|
||||||
const p = this._planet;
|
|
||||||
const hLine = h.programs.gmxVectorTileLineRasterization;
|
|
||||||
const hPoly = h.programs.gmxVectorTilePolygonRasterization;
|
|
||||||
|
|
||||||
const f = this._framebuffer.activate();
|
|
||||||
|
|
||||||
const _w = this._width;
|
|
||||||
const _h = this._height;
|
|
||||||
const _w2 = _w << 1;
|
|
||||||
const _h2 = _h << 1;
|
|
||||||
|
|
||||||
let width = _w,
|
|
||||||
height = _h;
|
|
||||||
|
|
||||||
gl.disable(gl.CULL_FACE);
|
|
||||||
gl.disable(gl.DEPTH_TEST);
|
|
||||||
gl.enable(gl.BLEND);
|
|
||||||
gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD);
|
|
||||||
gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
|
|
||||||
|
|
||||||
let deltaTime = 0,
|
|
||||||
startTime = window.performance.now();
|
|
||||||
|
|
||||||
while (p.layerLock.isFree() && this._queue.length && deltaTime < 0.25) {
|
|
||||||
|
|
||||||
let q = this._queue.shift(),
|
|
||||||
fromTile = q.fromTile,
|
|
||||||
material = q.material;
|
|
||||||
|
|
||||||
if (material.isLoading && material.segment.node.getState() === RENDERING) {
|
|
||||||
|
|
||||||
let layer = material.layer,
|
|
||||||
tItems = fromTile.tileItemArr,
|
|
||||||
materialZoom = material.segment.tileZoom,
|
|
||||||
zoomAvailable = materialZoom >= layer._gmxProperties.RCMinZoomForRasters,
|
|
||||||
extent = material.segment.getExtentMerc(),
|
|
||||||
extentParams = [extent.southWest.lon, extent.southWest.lat, 2.0 / extent.getWidth(), 2.0 / extent.getHeight()];
|
|
||||||
|
|
||||||
material.setTotalItems(tItems.length);
|
|
||||||
|
|
||||||
//
|
|
||||||
//TODO: sort optimization is needed PLEASE!!!! PLEASE!!!!
|
|
||||||
tItems.sort(function (a, b) {
|
|
||||||
return layer.getItemStyle(a.item).zIndex - layer.getItemStyle(b.item).zIndex || a.item.id - b.item.id;
|
|
||||||
});
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
if (materialZoom <= 3) {
|
|
||||||
width = _w2;
|
|
||||||
height = _h2;
|
|
||||||
} else {
|
|
||||||
width = _w;
|
|
||||||
height = _h;
|
|
||||||
}
|
|
||||||
|
|
||||||
f.setSize(width, height);
|
|
||||||
|
|
||||||
let texture = material.texture,
|
|
||||||
pickingMask = material.pickingMask;
|
|
||||||
|
|
||||||
if (material._completedItems === 0) {
|
|
||||||
texture = material._updateTexture && material._updateTexture || h.createEmptyTexture_l(width, height);
|
|
||||||
if (layer._pickingEnabled && !material.pickingReady) {
|
|
||||||
if (material._updatePickingMask) {
|
|
||||||
pickingMask = material._updatePickingMask;
|
|
||||||
} else {
|
|
||||||
pickingMask = h.createEmptyTexture_n(width, height);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
f.bindOutputTexture(texture);
|
|
||||||
gl.clearColor(1.0, 1.0, 1.0, 0.0);
|
|
||||||
gl.clear(gl.COLOR_BUFFER_BIT);
|
|
||||||
|
|
||||||
f.bindOutputTexture(pickingMask);
|
|
||||||
gl.clearColor(0.0, 0.0, 0.0, 0.0);
|
|
||||||
gl.clear(gl.COLOR_BUFFER_BIT);
|
|
||||||
}
|
|
||||||
|
|
||||||
let i = 0;
|
|
||||||
while (i < 200 && material._completedItems < material._totalItems) {
|
|
||||||
|
|
||||||
let ti = tItems[material._completedItems];
|
|
||||||
|
|
||||||
if (layer.getItemVisibility(ti.item) && ti.extent.overlaps(extent)) {
|
|
||||||
|
|
||||||
let style = layer.getItemStyle(ti.item),
|
|
||||||
pickingColor = [ti.item._pickingColor.x / 255.0, ti.item._pickingColor.y / 255.0, ti.item._pickingColor.z / 255.0, 1.0];
|
|
||||||
|
|
||||||
hPoly.activate();
|
|
||||||
|
|
||||||
let sh = hPoly._program,
|
|
||||||
sha = sh.attributes,
|
|
||||||
shu = sh.uniforms;
|
|
||||||
|
|
||||||
//==============
|
|
||||||
//polygon
|
|
||||||
//==============
|
|
||||||
f.bindOutputTexture(texture);
|
|
||||||
gl.uniform4fv(shu.color, [style.fillColor.x, style.fillColor.y, style.fillColor.z, style.fillColor.w]);
|
|
||||||
gl.uniform4fv(shu.extentParams, extentParams);
|
|
||||||
|
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, ti._polyVerticesBufferMerc);
|
|
||||||
gl.vertexAttribPointer(sha.coordinates, ti._polyVerticesBufferMerc.itemSize, gl.FLOAT, false, 0, 0);
|
|
||||||
|
|
||||||
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ti._polyIndexesBuffer);
|
|
||||||
gl.drawElements(gl.TRIANGLES, ti._polyIndexesBuffer.numItems, gl.UNSIGNED_INT, 0);
|
|
||||||
|
|
||||||
//Polygon picking pass
|
|
||||||
//if (!material.pickingReady) {
|
|
||||||
f.bindOutputTexture(pickingMask);
|
|
||||||
gl.uniform4fv(shu.color, pickingColor);
|
|
||||||
gl.drawElements(gl.TRIANGLES, ti._polyIndexesBuffer.numItems, gl.UNSIGNED_INT, 0);
|
|
||||||
//} else {
|
|
||||||
// pickingMask = material.pickingMask;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//==============
|
|
||||||
//Outline
|
|
||||||
//==============
|
|
||||||
hLine.activate();
|
|
||||||
sh = hLine._program;
|
|
||||||
sha = sh.attributes;
|
|
||||||
shu = sh.uniforms;
|
|
||||||
|
|
||||||
f.bindOutputTexture(texture);
|
|
||||||
|
|
||||||
gl.uniform2fv(shu.viewport, [width, height]);
|
|
||||||
gl.uniform4fv(shu.extentParams, extentParams);
|
|
||||||
|
|
||||||
//vertex
|
|
||||||
var mb = ti._lineVerticesBufferMerc;
|
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, mb);
|
|
||||||
gl.vertexAttribPointer(sha.prev, mb.itemSize, gl.FLOAT, false, 8, 0);
|
|
||||||
gl.vertexAttribPointer(sha.current, mb.itemSize, gl.FLOAT, false, 8, 32);
|
|
||||||
gl.vertexAttribPointer(sha.next, mb.itemSize, gl.FLOAT, false, 8, 64);
|
|
||||||
|
|
||||||
//order
|
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, ti._lineOrdersBuffer);
|
|
||||||
gl.vertexAttribPointer(sha.order, ti._lineOrdersBuffer.itemSize, gl.FLOAT, false, 4, 0);
|
|
||||||
|
|
||||||
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ti._lineIndexesBuffer);
|
|
||||||
|
|
||||||
//PASS - stroke
|
|
||||||
gl.uniform1f(shu.thickness, style.strokeWidth);
|
|
||||||
gl.uniform4fv(shu.color, style.strokeColor.toArray());
|
|
||||||
|
|
||||||
//Antialias pass
|
|
||||||
gl.uniform1f(shu.thicknessOutline, 2);
|
|
||||||
gl.uniform1f(shu.alpha, 0.54);
|
|
||||||
gl.drawElements(gl.TRIANGLE_STRIP, ti._lineIndexesBuffer.numItems, gl.UNSIGNED_INT, 0);
|
|
||||||
//
|
|
||||||
//Aliased pass
|
|
||||||
gl.uniform1f(shu.thicknessOutline, 1);
|
|
||||||
gl.uniform1f(shu.alpha, 1.0);
|
|
||||||
gl.drawElements(gl.TRIANGLE_STRIP, ti._lineIndexesBuffer.numItems, gl.UNSIGNED_INT, 0);
|
|
||||||
|
|
||||||
//PASS - inside line
|
|
||||||
gl.uniform1f(shu.thickness, style.lineWidth);
|
|
||||||
gl.uniform4fv(shu.color, style.lineColor.toArray());
|
|
||||||
|
|
||||||
//Antialias pass
|
|
||||||
gl.uniform1f(shu.thicknessOutline, 2);
|
|
||||||
gl.uniform1f(shu.alpha, 0.54);
|
|
||||||
gl.drawElements(gl.TRIANGLE_STRIP, ti._lineIndexesBuffer.numItems, gl.UNSIGNED_INT, 0);
|
|
||||||
//
|
|
||||||
//Aliased pass
|
|
||||||
gl.uniform1f(shu.thicknessOutline, 1);
|
|
||||||
gl.uniform1f(shu.alpha, 1.0);
|
|
||||||
gl.drawElements(gl.TRIANGLE_STRIP, ti._lineIndexesBuffer.numItems, gl.UNSIGNED_INT, 0);
|
|
||||||
|
|
||||||
//Outline picking pass
|
|
||||||
f.bindOutputTexture(pickingMask);
|
|
||||||
gl.uniform1f(shu.thicknessOutline, 8);
|
|
||||||
gl.uniform4fv(shu.color, pickingColor);
|
|
||||||
gl.drawElements(gl.TRIANGLE_STRIP, ti._lineIndexesBuffer.numItems, gl.UNSIGNED_INT, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
material._completedItems++;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
material.applyTexture(texture, pickingMask);
|
|
||||||
|
|
||||||
if (material.notComplete()) {
|
|
||||||
material.isLoading = true;
|
|
||||||
this.add(q);
|
|
||||||
} else if (layer._gmxProperties.Temporal && zoomAvailable) {
|
|
||||||
//Suggested that material.pickingMask is applied already in the frame buffer
|
|
||||||
this._proceedImageryTiles(layer, material);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
material.isLoading = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
deltaTime = window.performance.now() - startTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
gl.disable(gl.BLEND);
|
|
||||||
gl.enable(gl.DEPTH_TEST);
|
|
||||||
gl.enable(gl.CULL_FACE);
|
|
||||||
|
|
||||||
f.deactivate();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
GmxVectorTileCreator.prototype._proceedImageryTiles = function (layer, material) {
|
|
||||||
|
|
||||||
const f = this._framebuffer;
|
|
||||||
let data = this._temporaryData_;
|
|
||||||
f.readAllPixels(data);
|
|
||||||
|
|
||||||
var toLoad = 0;
|
|
||||||
for (let i = data.length - 1; i >= 0; i -= 4) {
|
|
||||||
let c = layer.planet.renderer.getPickingObjectByColor(data[i - 3], data[i - 2], data[i - 1]);
|
|
||||||
if (c) {
|
|
||||||
toLoad++;
|
|
||||||
let sceneTextureOffset = layer.applySceneTexture(
|
|
||||||
material.fromTile.tileItemsCache[c.id], material);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export { GmxVectorTileCreator };
|
|
||||||
@ -10,10 +10,10 @@
|
|||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
export const Units = {
|
export const Units = {
|
||||||
"DEGREES": "degrees",
|
DEGREES: "degrees",
|
||||||
"FEET": "ft",
|
FEET: "ft",
|
||||||
"METERS": "m",
|
METERS: "m",
|
||||||
"KILOMETERS": "km"
|
KILOMETERS: "km"
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -6,7 +6,6 @@
|
|||||||
|
|
||||||
import * as mercator from '../mercator.js';
|
import * as mercator from '../mercator.js';
|
||||||
import * as quadTree from './quadTree.js';
|
import * as quadTree from './quadTree.js';
|
||||||
import { Box } from '../bv/Box.js';
|
|
||||||
import { EntityCollection } from '../entity/EntityCollection.js';
|
import { EntityCollection } from '../entity/EntityCollection.js';
|
||||||
import { Extent } from '../Extent.js';
|
import { Extent } from '../Extent.js';
|
||||||
import { LonLat } from '../LonLat.js';
|
import { LonLat } from '../LonLat.js';
|
||||||
@ -46,7 +45,7 @@ EntityCollectionNode.prototype._addEntitiesToCollection = function (entities, ri
|
|||||||
|
|
||||||
if (!ec) {
|
if (!ec) {
|
||||||
ec = new EntityCollection({
|
ec = new EntityCollection({
|
||||||
'pickingEnabled': l._pickingEnabled
|
pickingEnabled: l._pickingEnabled
|
||||||
});
|
});
|
||||||
ec._layer = this.layer;
|
ec._layer = this.layer;
|
||||||
ec.addTo(p, true);
|
ec.addTo(p, true);
|
||||||
@ -136,7 +135,6 @@ EntityCollectionNode.prototype.buildTree = function (entities, rightNow) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
EntityCollectionNode.prototype.createChildrenNodes = function () {
|
EntityCollectionNode.prototype.createChildrenNodes = function () {
|
||||||
var l = this.layer;
|
var l = this.layer;
|
||||||
var ext = this.extent;
|
var ext = this.extent;
|
||||||
@ -164,10 +162,7 @@ EntityCollectionNode.prototype.createChildrenNodes = function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
EntityCollectionNode.prototype.collectRenderCollectionsPASS1 = function (visibleNodes, outArr) {
|
EntityCollectionNode.prototype.collectRenderCollectionsPASS1 = function (visibleNodes, outArr) {
|
||||||
var p = this.layer._planet;
|
|
||||||
var cam = p.renderer.activeCamera;
|
|
||||||
var n = visibleNodes[this.nodeId];
|
var n = visibleNodes[this.nodeId];
|
||||||
|
|
||||||
if (n) {
|
if (n) {
|
||||||
var cn = this.childrenNodes;
|
var cn = this.childrenNodes;
|
||||||
if (this.entityCollection) {
|
if (this.entityCollection) {
|
||||||
@ -288,7 +283,7 @@ EntityCollectionNode.prototype.renderCollection = function (outArr, visibleNodes
|
|||||||
EntityCollectionNode.prototype.alignEntityToTheGround = function (entity, segment) {
|
EntityCollectionNode.prototype.alignEntityToTheGround = function (entity, segment) {
|
||||||
var res = new Vec3();
|
var res = new Vec3();
|
||||||
segment.getEntityTerrainPoint(entity, res);
|
segment.getEntityTerrainPoint(entity, res);
|
||||||
entity._setCartesian3vSilent(res.addA(res.normal().scale(Number(this.layer.relativeToGround) && entity._altitude || 0.0)));
|
entity._setCartesian3vSilent(res.addA(res.normal().scale((Number(this.layer.relativeToGround) && entity._altitude) || 0.0)));
|
||||||
};
|
};
|
||||||
|
|
||||||
EntityCollectionNode.prototype.isVisible = function () {
|
EntityCollectionNode.prototype.isVisible = function () {
|
||||||
|
|||||||
@ -58,8 +58,7 @@ function getMatrixSubArray(sourceArr, gridSize, i0, j0, size) {
|
|||||||
return res;
|
return res;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// /**
|
||||||
///**
|
|
||||||
// * Returns two float32 triangle coordinate arrays from inside of the source triangle array.
|
// * Returns two float32 triangle coordinate arrays from inside of the source triangle array.
|
||||||
// * @static
|
// * @static
|
||||||
// * @param {Array.<number>} sourceArr - Source array
|
// * @param {Array.<number>} sourceArr - Source array
|
||||||
@ -70,7 +69,7 @@ function getMatrixSubArray(sourceArr, gridSize, i0, j0, size) {
|
|||||||
// * @return{Array.<number>} Triangle coordinates array from the source array.
|
// * @return{Array.<number>} Triangle coordinates array from the source array.
|
||||||
// * @TODO: optimization
|
// * @TODO: optimization
|
||||||
// */
|
// */
|
||||||
//function getMatrixSubArrayExt(sourceArrHigh, sourceArrLow, gridSize, i0, j0, size, outArrHigh, outArrLow) {
|
// function getMatrixSubArrayExt(sourceArrHigh, sourceArrLow, gridSize, i0, j0, size, outArrHigh, outArrLow) {
|
||||||
|
|
||||||
// const i0size = i0 + size + 1;
|
// const i0size = i0 + size + 1;
|
||||||
// const j0size = j0 + size + 1;
|
// const j0size = j0 + size + 1;
|
||||||
@ -90,9 +89,9 @@ function getMatrixSubArray(sourceArr, gridSize, i0, j0, size) {
|
|||||||
// outArrHigh[vInd++] = sourceArrHigh[ind + 2];
|
// outArrHigh[vInd++] = sourceArrHigh[ind + 2];
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
//};
|
// };
|
||||||
|
|
||||||
///**
|
// /**
|
||||||
// * Returns triangle coordinate array from inside of the source triangle array.
|
// * Returns triangle coordinate array from inside of the source triangle array.
|
||||||
// * @static
|
// * @static
|
||||||
// * @param {Array.<number>} sourceArr - Source array
|
// * @param {Array.<number>} sourceArr - Source array
|
||||||
@ -104,7 +103,7 @@ function getMatrixSubArray(sourceArr, gridSize, i0, j0, size) {
|
|||||||
// * @return{Array.<number>} Triangle coordinates array from the source array.
|
// * @return{Array.<number>} Triangle coordinates array from the source array.
|
||||||
// * @TODO: optimization
|
// * @TODO: optimization
|
||||||
// */
|
// */
|
||||||
//function getMatrixSubArrayBounds(sourceArr, gridSize, i0, j0, size, outBounds) {
|
// function getMatrixSubArrayBounds(sourceArr, gridSize, i0, j0, size, outBounds) {
|
||||||
|
|
||||||
// const size_1 = size + 1;
|
// const size_1 = size + 1;
|
||||||
// const i0size = i0 + size_1;
|
// const i0size = i0 + size_1;
|
||||||
@ -134,7 +133,7 @@ function getMatrixSubArray(sourceArr, gridSize, i0, j0, size) {
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// return res;
|
// return res;
|
||||||
//};
|
// };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns two float32 triangle coordinate arrays from inside of the source triangle array.
|
* Returns two float32 triangle coordinate arrays from inside of the source triangle array.
|
||||||
@ -195,8 +194,8 @@ function getMatrixSubArrayBoundsExt(sourceArr, sourceArrHigh, sourceArrLow, grid
|
|||||||
* @param {number} tileZoom - Deep index of the quad tree.
|
* @param {number} tileZoom - Deep index of the quad tree.
|
||||||
* @param {og.Extent} extent - Planet segment extent.
|
* @param {og.Extent} extent - Planet segment extent.
|
||||||
*/
|
*/
|
||||||
const Node = function (segmentPrototype, planet, partId, parent, id, tileZoom, extent) {
|
const Node = function (SegmentPrototype, planet, partId, parent, id, tileZoom, extent) {
|
||||||
this.SegmentPrototype = segmentPrototype;
|
this.SegmentPrototype = SegmentPrototype;
|
||||||
this.planet = planet;
|
this.planet = planet;
|
||||||
this.parentNode = parent;
|
this.parentNode = parent;
|
||||||
this.partId = partId;
|
this.partId = partId;
|
||||||
@ -207,7 +206,7 @@ const Node = function (segmentPrototype, planet, partId, parent, id, tileZoom, e
|
|||||||
this.ready = false;
|
this.ready = false;
|
||||||
this.neighbors = [[], [], [], []];
|
this.neighbors = [[], [], [], []];
|
||||||
this.nodes = [null, null, null, null];
|
this.nodes = [null, null, null, null];
|
||||||
this.segment = new segmentPrototype(this, planet, tileZoom, extent);
|
this.segment = new SegmentPrototype(this, planet, tileZoom, extent);
|
||||||
this._cameraInside = false;
|
this._cameraInside = false;
|
||||||
this.createBounds();
|
this.createBounds();
|
||||||
this.planet._createdNodesCount++;
|
this.planet._createdNodesCount++;
|
||||||
@ -300,7 +299,7 @@ Node.prototype.createBounds = function () {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (seg.tileZoom < MAX_NORMAL_ZOOM) {
|
if (seg.tileZoom < MAX_NORMAL_ZOOM) {
|
||||||
//check for segment zoom
|
// check for segment zoom
|
||||||
let v_nw = new Vec3(pVerts[ind_nw], pVerts[ind_nw + 1], pVerts[ind_nw + 2]),
|
let v_nw = new Vec3(pVerts[ind_nw], pVerts[ind_nw + 1], pVerts[ind_nw + 2]),
|
||||||
v_se = new Vec3(pVerts[ind_se], pVerts[ind_se + 1], pVerts[ind_se + 2]);
|
v_se = new Vec3(pVerts[ind_se], pVerts[ind_se + 1], pVerts[ind_se + 2]);
|
||||||
|
|
||||||
@ -440,7 +439,7 @@ Node.prototype.renderTree = function (cam, maxZoom, terrainReadySegment, stopLoa
|
|||||||
|
|
||||||
this._cameraInside = false;
|
this._cameraInside = false;
|
||||||
|
|
||||||
//Search a node which the camera is flying over.
|
// Search a node which the camera is flying over.
|
||||||
if (!this.parentNode || this.parentNode._cameraInside) {
|
if (!this.parentNode || this.parentNode._cameraInside) {
|
||||||
let inside;
|
let inside;
|
||||||
if (Math.abs(cam._lonLat.lat) <= MAX_LAT &&
|
if (Math.abs(cam._lonLat.lat) <= MAX_LAT &&
|
||||||
@ -468,16 +467,16 @@ Node.prototype.renderTree = function (cam, maxZoom, terrainReadySegment, stopLoa
|
|||||||
|
|
||||||
let altVis = (cam.eye.distance(seg.bsphere.center) - seg.bsphere.radius < VISIBLE_DISTANCE * Math.sqrt(h)) || seg.tileZoom < 2;
|
let altVis = (cam.eye.distance(seg.bsphere.center) - seg.bsphere.radius < VISIBLE_DISTANCE * Math.sqrt(h)) || seg.tileZoom < 2;
|
||||||
|
|
||||||
if (inFrustum && (altVis || h > 10000.0) || this._cameraInside) {
|
if ((inFrustum && (altVis || h > 10000.0)) || this._cameraInside) {
|
||||||
seg._collectVisibleNodes();
|
seg._collectVisibleNodes();
|
||||||
}
|
}
|
||||||
|
|
||||||
//First skip lowest zoom nodes
|
// First skip lowest zoom nodes
|
||||||
if (seg.tileZoom < 2 && seg.normalMapReady) {
|
if (seg.tileZoom < 2 && seg.normalMapReady) {
|
||||||
this.traverseNodes(cam, maxZoom, terrainReadySegment, stopLoading);
|
this.traverseNodes(cam, maxZoom, terrainReadySegment, stopLoading);
|
||||||
} else if (!maxZoom && seg.acceptForRendering(cam) || seg.tileZoom === maxZoom) {
|
} else if ((!maxZoom && seg.acceptForRendering(cam)) || seg.tileZoom === maxZoom) {
|
||||||
this.prepareForRendering(cam, altVis, inFrustum, terrainReadySegment, stopLoading);
|
this.prepareForRendering(cam, altVis, inFrustum, terrainReadySegment, stopLoading);
|
||||||
} else if (seg.tileZoom < planet.terrain._maxNodeZoom && seg.terrainReady && !maxZoom || maxZoom) {
|
} else if (((seg.tileZoom < planet.terrain._maxNodeZoom) && (seg.terrainReady && !maxZoom)) || maxZoom) {
|
||||||
if (seg.terrainReady) {
|
if (seg.terrainReady) {
|
||||||
this.traverseNodes(cam, maxZoom, seg, stopLoading);
|
this.traverseNodes(cam, maxZoom, seg, stopLoading);
|
||||||
} else {
|
} else {
|
||||||
@ -539,7 +538,7 @@ Node.prototype.renderNode = function (onlyTerrain, terrainReadySegment, stopLoad
|
|||||||
|
|
||||||
var seg = this.segment;
|
var seg = this.segment;
|
||||||
|
|
||||||
//Create and load terrain data.
|
// Create and load terrain data
|
||||||
if (!seg.terrainReady) {
|
if (!seg.terrainReady) {
|
||||||
|
|
||||||
if (!seg.initialized) {
|
if (!seg.initialized) {
|
||||||
@ -560,7 +559,7 @@ Node.prototype.renderNode = function (onlyTerrain, terrainReadySegment, stopLoad
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Create normal map texture
|
// Create normal map texture
|
||||||
if (seg.planet.lightEnabled && !seg.normalMapReady && !seg.parentNormalMapReady) {
|
if (seg.planet.lightEnabled && !seg.normalMapReady && !seg.parentNormalMapReady) {
|
||||||
this.whileNormalMapCreating();
|
this.whileNormalMapCreating();
|
||||||
}
|
}
|
||||||
@ -570,7 +569,7 @@ Node.prototype.renderNode = function (onlyTerrain, terrainReadySegment, stopLoad
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Calculate minimal and maximal zoom index on the screen
|
// Calculate minimal and maximal zoom index on the screen
|
||||||
if (!this._cameraInside && seg.tileZoom > this.planet.maxCurrZoom) {
|
if (!this._cameraInside && seg.tileZoom > this.planet.maxCurrZoom) {
|
||||||
this.planet.maxCurrZoom = seg.tileZoom;
|
this.planet.maxCurrZoom = seg.tileZoom;
|
||||||
}
|
}
|
||||||
@ -581,7 +580,7 @@ Node.prototype.renderNode = function (onlyTerrain, terrainReadySegment, stopLoad
|
|||||||
|
|
||||||
seg._addViewExtent();
|
seg._addViewExtent();
|
||||||
|
|
||||||
//Finally this node proceeds to rendering.
|
// Finally this node proceeds to rendering.
|
||||||
this.addToRender();
|
this.addToRender();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -717,7 +716,6 @@ Node.prototype.whileNormalMapCreating = function () {
|
|||||||
seg.normalMapTextureBias[1] = seg.tileY - pn.segment.tileY * dZ2;
|
seg.normalMapTextureBias[1] = seg.tileY - pn.segment.tileY * dZ2;
|
||||||
seg.normalMapTextureBias[2] = 1.0 / dZ2;
|
seg.normalMapTextureBias[2] = 1.0 / dZ2;
|
||||||
|
|
||||||
|
|
||||||
if (seg.tileZoom > maxZ) {
|
if (seg.tileZoom > maxZ) {
|
||||||
if (pn.segment.tileZoom === maxZ) {
|
if (pn.segment.tileZoom === maxZ) {
|
||||||
seg.parentNormalMapReady = true;
|
seg.parentNormalMapReady = true;
|
||||||
@ -726,12 +724,12 @@ Node.prototype.whileNormalMapCreating = function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let BOUNDS = {
|
let BOUNDS = {
|
||||||
'xmin': 0.0,
|
xmin: 0.0,
|
||||||
'ymin': 0.0,
|
ymin: 0.0,
|
||||||
'zmin': 0.0,
|
zmin: 0.0,
|
||||||
'xmax': 0.0,
|
xmax: 0.0,
|
||||||
'ymax': 0.0,
|
ymax: 0.0,
|
||||||
'zmax': 0.0
|
zmax: 0.0
|
||||||
};
|
};
|
||||||
|
|
||||||
Node.prototype.whileTerrainLoading = function (terrainReadySegment, stopLoading) {
|
Node.prototype.whileTerrainLoading = function (terrainReadySegment, stopLoading) {
|
||||||
@ -761,8 +759,6 @@ Node.prototype.whileTerrainLoading = function (terrainReadySegment, stopLoading)
|
|||||||
tempVerticesHigh,
|
tempVerticesHigh,
|
||||||
tempVerticesLow;
|
tempVerticesLow;
|
||||||
|
|
||||||
//if (this.appliedTerrainNodeId !== pn.nodeId) { //Replced to the first if 768
|
|
||||||
|
|
||||||
this.appliedTerrainNodeId = pn.nodeId;
|
this.appliedTerrainNodeId = pn.nodeId;
|
||||||
|
|
||||||
let gridSize = pn.segment.gridSize / dZ2,
|
let gridSize = pn.segment.gridSize / dZ2,
|
||||||
@ -810,7 +806,7 @@ Node.prototype.whileTerrainLoading = function (terrainReadySegment, stopLoading)
|
|||||||
pseg.normalMapVertices,
|
pseg.normalMapVertices,
|
||||||
pseg.normalMapVerticesHigh,
|
pseg.normalMapVerticesHigh,
|
||||||
pseg.normalMapVerticesLow,
|
pseg.normalMapVerticesLow,
|
||||||
pn.segment.fileGridSize,//pn.segment.planet.terrain.fileGridSize,
|
pn.segment.fileGridSize,
|
||||||
gridSizeExt * offsetY,
|
gridSizeExt * offsetY,
|
||||||
gridSizeExt * offsetX,
|
gridSizeExt * offsetX,
|
||||||
gridSizeExt,
|
gridSizeExt,
|
||||||
@ -890,16 +886,12 @@ Node.prototype.whileTerrainLoading = function (terrainReadySegment, stopLoading)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//replace
|
|
||||||
//seg.createCoordsBuffers(tempVerticesHigh, tempVerticesLow, seg.gridSize);
|
|
||||||
//with
|
|
||||||
seg.readyToEngage = true;
|
seg.readyToEngage = true;
|
||||||
|
|
||||||
seg.terrainVertices = tempVertices;
|
seg.terrainVertices = tempVertices;
|
||||||
seg.terrainVerticesHigh = tempVerticesHigh;
|
seg.terrainVerticesHigh = tempVerticesHigh;
|
||||||
seg.terrainVerticesLow = tempVerticesLow;
|
seg.terrainVerticesLow = tempVerticesLow;
|
||||||
|
|
||||||
//is used for earth point calculation(see segment object)
|
|
||||||
seg.tempVertices = tempVertices;
|
seg.tempVertices = tempVertices;
|
||||||
seg.tempVerticesHigh = tempVerticesHigh;
|
seg.tempVerticesHigh = tempVerticesHigh;
|
||||||
seg.tempVerticesLow = tempVerticesLow;
|
seg.tempVerticesLow = tempVerticesLow;
|
||||||
@ -910,7 +902,6 @@ Node.prototype.whileTerrainLoading = function (terrainReadySegment, stopLoading)
|
|||||||
BOUNDS.zmin + (BOUNDS.zmax - BOUNDS.zmin) * 0.5,
|
BOUNDS.zmin + (BOUNDS.zmax - BOUNDS.zmin) * 0.5,
|
||||||
new Vec3(BOUNDS.xmin, BOUNDS.ymin, BOUNDS.zmin)
|
new Vec3(BOUNDS.xmin, BOUNDS.ymin, BOUNDS.zmin)
|
||||||
);
|
);
|
||||||
//}
|
|
||||||
|
|
||||||
if (seg.tileZoom > terrain.maxZoom) {
|
if (seg.tileZoom > terrain.maxZoom) {
|
||||||
if (pn.segment.tileZoom >= terrain.maxZoom) {
|
if (pn.segment.tileZoom >= terrain.maxZoom) {
|
||||||
@ -930,14 +921,14 @@ Node.prototype.whileTerrainLoading = function (terrainReadySegment, stopLoading)
|
|||||||
seg.normalMapVertices = tempVertices;
|
seg.normalMapVertices = tempVertices;
|
||||||
seg.fileGridSize = Math.sqrt(tempVertices.length / 3) - 1;
|
seg.fileGridSize = Math.sqrt(tempVertices.length / 3) - 1;
|
||||||
|
|
||||||
let fgs = Math.sqrt(pseg.normalMapNormals.length / 3) - 1,//terrain.fileGridSize,
|
let fgs = Math.sqrt(pseg.normalMapNormals.length / 3) - 1,
|
||||||
fgsZ = fgs / dZ2;
|
fgsZ = fgs / dZ2;
|
||||||
|
|
||||||
if (fgs > 1) {
|
if (fgs > 1) {
|
||||||
seg.normalMapNormals = getMatrixSubArray(pseg.normalMapNormals,
|
seg.normalMapNormals = getMatrixSubArray(pseg.normalMapNormals,
|
||||||
fgs, fgsZ * offsetY, fgsZ * offsetX, fgsZ);
|
fgs, fgsZ * offsetY, fgsZ * offsetX, fgsZ);
|
||||||
} else {
|
} else {
|
||||||
//TODO: interpolation
|
// TODO: interpolation
|
||||||
seg.normalMapNormals = pseg.normalMapNormals;
|
seg.normalMapNormals = pseg.normalMapNormals;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -995,7 +986,7 @@ Node.prototype.clearTree = function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Node.prototype.clearBranches = function () {
|
Node.prototype.clearBranches = function () {
|
||||||
for (i = 0; i < this.nodes.length; i++) {
|
for (let i = 0; i < this.nodes.length; i++) {
|
||||||
this.nodes[i].clearBranches();
|
this.nodes[i].clearBranches();
|
||||||
this.nodes[i].segment.deleteMaterials();
|
this.nodes[i].segment.deleteMaterials();
|
||||||
}
|
}
|
||||||
@ -1034,6 +1025,4 @@ Node.prototype.traverseTree = function (callback) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export { Node };
|
export { Node };
|
||||||
|
|
||||||
|
|
||||||
@ -8,7 +8,6 @@ import { RendererEvents } from './RendererEvents.js';
|
|||||||
import { Vec2 } from '../math/Vec2.js';
|
import { Vec2 } from '../math/Vec2.js';
|
||||||
import { Vec3 } from '../math/Vec3.js';
|
import { Vec3 } from '../math/Vec3.js';
|
||||||
import { cons } from '../cons.js';
|
import { cons } from '../cons.js';
|
||||||
//import { Program } from '../webgl/Program.js';
|
|
||||||
import { input } from '../input/input.js';
|
import { input } from '../input/input.js';
|
||||||
import { isEmpty } from '../utils/shared.js';
|
import { isEmpty } from '../utils/shared.js';
|
||||||
import { toneMapping } from '../shaders/toneMapping.js';
|
import { toneMapping } from '../shaders/toneMapping.js';
|
||||||
@ -223,7 +222,7 @@ Renderer.prototype.setEventsActivity = function (activity) {
|
|||||||
*/
|
*/
|
||||||
Renderer.prototype.addPickingCallback = function (sender, callback) {
|
Renderer.prototype.addPickingCallback = function (sender, callback) {
|
||||||
var id = Renderer.__pickingCallbackCounter__++;
|
var id = Renderer.__pickingCallbackCounter__++;
|
||||||
this._pickingCallbacks.push({ "id": id, "callback": callback, "sender": sender });
|
this._pickingCallbacks.push({ id: id, callback: callback, sender: sender });
|
||||||
return id;
|
return id;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -265,16 +264,17 @@ Renderer.prototype.assignPickingColor = function (obj) {
|
|||||||
str = r + "_" + g + "_" + b;
|
str = r + "_" + g + "_" + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!obj._pickingColor)
|
if (!obj._pickingColor) {
|
||||||
obj._pickingColor = new Vec3(r, g, b);
|
obj._pickingColor = new Vec3(r, g, b);
|
||||||
else
|
} else {
|
||||||
obj._pickingColor.set(r, g, b);
|
obj._pickingColor.set(r, g, b);
|
||||||
|
}
|
||||||
|
|
||||||
obj._pickingColorU = new Float32Array([r / 255, g / 255, b / 255]);
|
obj._pickingColorU = new Float32Array([r / 255, g / 255, b / 255]);
|
||||||
|
|
||||||
this.colorObjects[str] = obj;
|
this.colorObjects[str] = obj;
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes picking color from object.
|
* Removes picking color from object.
|
||||||
@ -352,10 +352,11 @@ Renderer.prototype.removeControl = function (control) {
|
|||||||
*/
|
*/
|
||||||
Renderer.prototype.initialize = function () {
|
Renderer.prototype.initialize = function () {
|
||||||
|
|
||||||
if (this._initialized)
|
if (this._initialized) {
|
||||||
return;
|
return;
|
||||||
else
|
} else {
|
||||||
this._initialized = true;
|
this._initialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
var that = this;
|
var that = this;
|
||||||
|
|
||||||
@ -368,14 +369,14 @@ Renderer.prototype.initialize = function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
this.activeCamera = new Camera(this, {
|
this.activeCamera = new Camera(this, {
|
||||||
'eye': new Vec3(0, 0, 0),
|
eye: new Vec3(0, 0, 0),
|
||||||
'look': new Vec3(0, 0, -1),
|
look: new Vec3(0, 0, -1),
|
||||||
'up': new Vec3(0, 1, 0)
|
up: new Vec3(0, 1, 0)
|
||||||
});
|
});
|
||||||
|
|
||||||
this.events.initialize();
|
this.events.initialize();
|
||||||
|
|
||||||
//Bind console key
|
// Bind console key
|
||||||
this.events.on("charkeypress", input.KEY_APOSTROPHE, function () {
|
this.events.on("charkeypress", input.KEY_APOSTROPHE, function () {
|
||||||
cons.setVisibility(!cons.getVisibility());
|
cons.setVisibility(!cons.getVisibility());
|
||||||
});
|
});
|
||||||
@ -383,8 +384,8 @@ Renderer.prototype.initialize = function () {
|
|||||||
this.handler.addProgram(screenFrame());
|
this.handler.addProgram(screenFrame());
|
||||||
|
|
||||||
this.pickingFramebuffer = new Framebuffer(this.handler, {
|
this.pickingFramebuffer = new Framebuffer(this.handler, {
|
||||||
'width': 640,
|
width: 640,
|
||||||
'height': 480
|
height: 480
|
||||||
}).init();
|
}).init();
|
||||||
|
|
||||||
this.readPixels = () => { };
|
this.readPixels = () => { };
|
||||||
@ -532,11 +533,11 @@ Renderer.prototype._drawEntityCollections = function () {
|
|||||||
gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE);
|
gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE);
|
||||||
gl.disable(gl.CULL_FACE);
|
gl.disable(gl.CULL_FACE);
|
||||||
|
|
||||||
//Z-buffer offset
|
// Z-buffer offset
|
||||||
gl.enable(gl.POLYGON_OFFSET_FILL);
|
gl.enable(gl.POLYGON_OFFSET_FILL);
|
||||||
gl.polygonOffset(0.0, 0.0);
|
gl.polygonOffset(0.0, 0.0);
|
||||||
|
|
||||||
//billboards pass
|
// billboards pass
|
||||||
gl.activeTexture(gl.TEXTURE0);
|
gl.activeTexture(gl.TEXTURE0);
|
||||||
gl.bindTexture(gl.TEXTURE_2D, this.billboardsTextureAtlas.texture);
|
gl.bindTexture(gl.TEXTURE_2D, this.billboardsTextureAtlas.texture);
|
||||||
|
|
||||||
@ -544,13 +545,13 @@ Renderer.prototype._drawEntityCollections = function () {
|
|||||||
while (i--) {
|
while (i--) {
|
||||||
var eci = ec[i];
|
var eci = ec[i];
|
||||||
if (eci._fadingOpacity) {
|
if (eci._fadingOpacity) {
|
||||||
//first begin draw event
|
// first begin draw event
|
||||||
eci.events.dispatch(eci.events.draw, eci);
|
eci.events.dispatch(eci.events.draw, eci);
|
||||||
eci.billboardHandler.draw();
|
eci.billboardHandler.draw();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//labels pass
|
// labels pass
|
||||||
var fa = this.fontAtlas.atlasesArr;
|
var fa = this.fontAtlas.atlasesArr;
|
||||||
for (i = 0; i < fa.length; i++) {
|
for (i = 0; i < fa.length; i++) {
|
||||||
gl.activeTexture(gl.TEXTURE0 + i);
|
gl.activeTexture(gl.TEXTURE0 + i);
|
||||||
@ -562,13 +563,13 @@ Renderer.prototype._drawEntityCollections = function () {
|
|||||||
ec[i]._fadingOpacity && ec[i].labelHandler.draw();
|
ec[i]._fadingOpacity && ec[i].labelHandler.draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
//rays
|
// rays
|
||||||
i = ec.length;
|
i = ec.length;
|
||||||
while (i--) {
|
while (i--) {
|
||||||
ec[i]._fadingOpacity && ec[i].rayHandler.draw();
|
ec[i]._fadingOpacity && ec[i].rayHandler.draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
//polyline pass
|
// polyline pass
|
||||||
i = ec.length;
|
i = ec.length;
|
||||||
while (i--) {
|
while (i--) {
|
||||||
ec[i]._fadingOpacity && ec[i].polylineHandler.draw();
|
ec[i]._fadingOpacity && ec[i].polylineHandler.draw();
|
||||||
@ -576,7 +577,7 @@ Renderer.prototype._drawEntityCollections = function () {
|
|||||||
|
|
||||||
gl.enable(gl.CULL_FACE);
|
gl.enable(gl.CULL_FACE);
|
||||||
|
|
||||||
//pointClouds pass
|
// pointClouds pass
|
||||||
i = ec.length;
|
i = ec.length;
|
||||||
while (i--) {
|
while (i--) {
|
||||||
if (ec[i]._fadingOpacity) {
|
if (ec[i]._fadingOpacity) {
|
||||||
@ -584,32 +585,32 @@ Renderer.prototype._drawEntityCollections = function () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//shapes pass
|
// shapes pass
|
||||||
i = ec.length;
|
i = ec.length;
|
||||||
while (i--) {
|
while (i--) {
|
||||||
var eci = ec[i];
|
eci = ec[i];
|
||||||
if (eci._fadingOpacity) {
|
if (eci._fadingOpacity) {
|
||||||
eci.shapeHandler.draw();
|
eci.shapeHandler.draw();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Strip pass
|
// Strip pass
|
||||||
i = ec.length;
|
i = ec.length;
|
||||||
while (i--) {
|
while (i--) {
|
||||||
if (ec[i]._fadingOpacity) {
|
if (ec[i]._fadingOpacity) {
|
||||||
ec[i].stripHandler.draw();
|
ec[i].stripHandler.draw();
|
||||||
//post draw event
|
// post draw event
|
||||||
eci.events.dispatch(eci.events.drawend, eci);
|
eci.events.dispatch(eci.events.drawend, eci);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//gl.polygonOffset(0.0, 0.0);
|
// gl.polygonOffset(0.0, 0.0);
|
||||||
gl.disable(gl.POLYGON_OFFSET_FILL);
|
gl.disable(gl.POLYGON_OFFSET_FILL);
|
||||||
|
|
||||||
this._entityCollections.length = 0;
|
this._entityCollections.length = 0;
|
||||||
this._entityCollections = [];
|
this._entityCollections = [];
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Draw nodes.
|
* Draw nodes.
|
||||||
@ -627,7 +628,7 @@ Renderer.prototype.draw = function () {
|
|||||||
|
|
||||||
var h = this.handler;
|
var h = this.handler;
|
||||||
|
|
||||||
//h.gl.clearColor(0.0, 0.0, 0.0, 1.0);
|
// h.gl.clearColor(0.0, 0.0, 0.0, 1.0);
|
||||||
h.gl.clearColor(115 / 255, 203 / 255, 249 / 255, 1.0);
|
h.gl.clearColor(115 / 255, 203 / 255, 249 / 255, 1.0);
|
||||||
h.gl.clear(h.gl.COLOR_BUFFER_BIT | h.gl.DEPTH_BUFFER_BIT);
|
h.gl.clear(h.gl.COLOR_BUFFER_BIT | h.gl.DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
@ -636,7 +637,7 @@ Renderer.prototype.draw = function () {
|
|||||||
h.gl.activeTexture(h.gl.TEXTURE0);
|
h.gl.activeTexture(h.gl.TEXTURE0);
|
||||||
h.gl.bindTexture(h.gl.TEXTURE_2D, h.transparentTexture);
|
h.gl.bindTexture(h.gl.TEXTURE_2D, h.transparentTexture);
|
||||||
|
|
||||||
//Rendering scene nodes
|
// Rendering scene nodes
|
||||||
var rn = this._renderNodesArr,
|
var rn = this._renderNodesArr,
|
||||||
i = rn.length;
|
i = rn.length;
|
||||||
while (i--) {
|
while (i--) {
|
||||||
@ -651,10 +652,10 @@ Renderer.prototype.draw = function () {
|
|||||||
|
|
||||||
this.blitFramebuffer && sfb.blit(this.blitFramebuffer);
|
this.blitFramebuffer && sfb.blit(this.blitFramebuffer);
|
||||||
|
|
||||||
//Rendering picking callbacks and refresh pickingColor
|
// Rendering picking callbacks and refresh pickingColor
|
||||||
this._drawPickingBuffer();
|
this._drawPickingBuffer();
|
||||||
|
|
||||||
//Rendering on the screen
|
// Rendering on the screen
|
||||||
this._fnScreenFrame();
|
this._fnScreenFrame();
|
||||||
|
|
||||||
e.mouseState.moving = false;
|
e.mouseState.moving = false;
|
||||||
@ -677,7 +678,7 @@ Renderer.prototype._screenFrameMSAA = function () {
|
|||||||
|
|
||||||
sh.activate();
|
sh.activate();
|
||||||
|
|
||||||
//screen texture
|
// screen texture
|
||||||
gl.activeTexture(gl.TEXTURE0);
|
gl.activeTexture(gl.TEXTURE0);
|
||||||
gl.bindTexture(gl.TEXTURE_2D, this.blitFramebuffer.textures[0]);
|
gl.bindTexture(gl.TEXTURE_2D, this.blitFramebuffer.textures[0]);
|
||||||
gl.uniform1i(p.uniforms.hdrBuffer, 0);
|
gl.uniform1i(p.uniforms.hdrBuffer, 0);
|
||||||
@ -697,8 +698,8 @@ Renderer.prototype._screenFrameMSAA = function () {
|
|||||||
gl.activeTexture(gl.TEXTURE0);
|
gl.activeTexture(gl.TEXTURE0);
|
||||||
|
|
||||||
gl.bindTexture(gl.TEXTURE_2D, this.bloomFramebuffer.textures[0]);
|
gl.bindTexture(gl.TEXTURE_2D, this.bloomFramebuffer.textures[0]);
|
||||||
//gl.bindTexture(gl.TEXTURE_2D, this.pickingFramebuffer.textures[0]);
|
// gl.bindTexture(gl.TEXTURE_2D, this.pickingFramebuffer.textures[0]);
|
||||||
//gl.bindTexture(gl.TEXTURE_2D, globe.planet._heightPickingFramebuffer.textures[0]);
|
// gl.bindTexture(gl.TEXTURE_2D, globe.planet._heightPickingFramebuffer.textures[0]);
|
||||||
|
|
||||||
gl.uniform1i(p.uniforms.texture, 0);
|
gl.uniform1i(p.uniforms.texture, 0);
|
||||||
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
|
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
|
||||||
@ -716,7 +717,7 @@ Renderer.prototype._screenFrameNoMSAA = function () {
|
|||||||
sh.activate();
|
sh.activate();
|
||||||
gl.activeTexture(gl.TEXTURE0);
|
gl.activeTexture(gl.TEXTURE0);
|
||||||
gl.bindTexture(gl.TEXTURE_2D, this.sceneFramebuffer.textures[window.SCREEN]);
|
gl.bindTexture(gl.TEXTURE_2D, this.sceneFramebuffer.textures[window.SCREEN]);
|
||||||
//gl.bindTexture(gl.TEXTURE_2D, this.pickingFramebuffer.textures[0]);
|
// gl.bindTexture(gl.TEXTURE_2D, this.pickingFramebuffer.textures[0]);
|
||||||
gl.uniform1i(p.uniforms.texture, 0);
|
gl.uniform1i(p.uniforms.texture, 0);
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, this._screenFrameCornersBuffer);
|
gl.bindBuffer(gl.ARRAY_BUFFER, this._screenFrameCornersBuffer);
|
||||||
gl.vertexAttribPointer(p.attributes.corners, 2, gl.FLOAT, false, 0, 0);
|
gl.vertexAttribPointer(p.attributes.corners, 2, gl.FLOAT, false, 0, 0);
|
||||||
@ -773,12 +774,14 @@ Renderer.prototype._drawPickingBuffer = function () {
|
|||||||
var pc = this._currPickingColor;
|
var pc = this._currPickingColor;
|
||||||
if (ts.x || ts.y) {
|
if (ts.x || ts.y) {
|
||||||
this.pickingFramebuffer.readPixels(pc, ts.nx, 1.0 - ts.ny);
|
this.pickingFramebuffer.readPixels(pc, ts.nx, 1.0 - ts.ny);
|
||||||
if (!(pc[0] || pc[1] || pc[2]))
|
if (!(pc[0] || pc[1] || pc[2])) {
|
||||||
this.readPixels(pc, ts.nx, 1.0 - ts.ny, 1);
|
this.readPixels(pc, ts.nx, 1.0 - ts.ny, 1);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
this.pickingFramebuffer.readPixels(pc, ms.nx, 1.0 - ms.ny);
|
this.pickingFramebuffer.readPixels(pc, ms.nx, 1.0 - ms.ny);
|
||||||
if (!(pc[0] || pc[1] || pc[2]))
|
if (!(pc[0] || pc[1] || pc[2])) {
|
||||||
this.readPixels(pc, ms.nx, 1.0 - ms.ny, 1);
|
this.readPixels(pc, ms.nx, 1.0 - ms.ny, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -791,5 +794,4 @@ Renderer.prototype.start = function () {
|
|||||||
this.handler.start();
|
this.handler.start();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
export { Renderer };
|
export { Renderer };
|
||||||
@ -231,10 +231,6 @@ class RendererEvents extends Events {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
isKeyPressed(keyCode) {
|
|
||||||
return this._keyboardHandler.isKeyPressed(keyCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check key is pressed.
|
* Check key is pressed.
|
||||||
* @public
|
* @public
|
||||||
@ -299,7 +295,6 @@ class RendererEvents extends Events {
|
|||||||
|
|
||||||
//dispatch stop mouse event
|
//dispatch stop mouse event
|
||||||
clearTimeout(this._mousestopThread);
|
clearTimeout(this._mousestopThread);
|
||||||
var that = this;
|
|
||||||
this._mousestopThread = setTimeout(function () {
|
this._mousestopThread = setTimeout(function () {
|
||||||
ms.justStopped = true;
|
ms.justStopped = true;
|
||||||
}, 100);
|
}, 100);
|
||||||
@ -348,7 +343,7 @@ class RendererEvents extends Events {
|
|||||||
(t - this._lClkBegins <= ms.clickDelay)) {
|
(t - this._lClkBegins <= ms.clickDelay)) {
|
||||||
|
|
||||||
if (this._ldblClkBegins) {
|
if (this._ldblClkBegins) {
|
||||||
var deltatime = window.performance.now() - this._ldblClkBegins;
|
let deltatime = window.performance.now() - this._ldblClkBegins;
|
||||||
if (deltatime <= ms.doubleClickDelay) {
|
if (deltatime <= ms.doubleClickDelay) {
|
||||||
ms.leftButtonDoubleClick = true;
|
ms.leftButtonDoubleClick = true;
|
||||||
}
|
}
|
||||||
@ -370,7 +365,7 @@ class RendererEvents extends Events {
|
|||||||
(t - this._rClkBegins <= ms.clickDelay)) {
|
(t - this._rClkBegins <= ms.clickDelay)) {
|
||||||
|
|
||||||
if (this._rdblClkBegins) {
|
if (this._rdblClkBegins) {
|
||||||
var deltatime = window.performance.now() - this._rdblClkBegins;
|
let deltatime = window.performance.now() - this._rdblClkBegins;
|
||||||
if (deltatime <= ms.doubleClickDelay) {
|
if (deltatime <= ms.doubleClickDelay) {
|
||||||
ms.rightButtonDoubleClick = true;
|
ms.rightButtonDoubleClick = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,6 @@
|
|||||||
|
|
||||||
import { RenderNode } from './RenderNode.js';
|
import { RenderNode } from './RenderNode.js';
|
||||||
import { Program } from '../webgl/Program.js';
|
import { Program } from '../webgl/Program.js';
|
||||||
import { types } from '../webgl/types.js';
|
|
||||||
|
|
||||||
class Axes extends RenderNode {
|
class Axes extends RenderNode {
|
||||||
constructor(size) {
|
constructor(size) {
|
||||||
@ -29,20 +28,20 @@ class Axes extends RenderNode {
|
|||||||
aVertexColor: 'vec4'
|
aVertexColor: 'vec4'
|
||||||
},
|
},
|
||||||
vertexShader:
|
vertexShader:
|
||||||
'attribute vec3 aVertexPosition;\
|
`attribute vec3 aVertexPosition;
|
||||||
attribute vec4 aVertexColor;\
|
attribute vec4 aVertexColor;
|
||||||
uniform mat4 projectionViewMatrix;\
|
uniform mat4 projectionViewMatrix;
|
||||||
varying vec4 vColor;\
|
varying vec4 vColor;
|
||||||
void main(void) {\
|
void main(void) {
|
||||||
gl_Position = projectionViewMatrix * vec4(aVertexPosition, 1.0);\
|
gl_Position = projectionViewMatrix * vec4(aVertexPosition, 1.0);
|
||||||
vColor = aVertexColor;\
|
vColor = aVertexColor;
|
||||||
}',
|
}`,
|
||||||
fragmentShader:
|
fragmentShader:
|
||||||
'precision highp float;\
|
`precision highp float;
|
||||||
varying vec4 vColor;\
|
varying vec4 vColor;
|
||||||
void main(void) {\
|
void main(void) {
|
||||||
gl_FragColor = vColor;\
|
gl_FragColor = vColor;
|
||||||
}'
|
}`
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -57,7 +57,6 @@ class BaseNode {
|
|||||||
this.__counter__ = n;
|
this.__counter__ = n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds node to the current hierarchy.
|
* Adds node to the current hierarchy.
|
||||||
* @public
|
* @public
|
||||||
@ -66,8 +65,7 @@ class BaseNode {
|
|||||||
addNode(node) {
|
addNode(node) {
|
||||||
if (this.parentNode == null) {
|
if (this.parentNode == null) {
|
||||||
node.topNode = this;
|
node.topNode = this;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
node.topNode = this.topNode;
|
node.topNode = this.topNode;
|
||||||
}
|
}
|
||||||
node.parentNode = this;
|
node.parentNode = this;
|
||||||
|
|||||||
@ -10,8 +10,6 @@ import * as math from '../math.js';
|
|||||||
import * as mercator from '../mercator.js';
|
import * as mercator from '../mercator.js';
|
||||||
import * as segmentHelper from '../segment/segmentHelper.js';
|
import * as segmentHelper from '../segment/segmentHelper.js';
|
||||||
import * as quadTree from '../quadTree/quadTree.js';
|
import * as quadTree from '../quadTree/quadTree.js';
|
||||||
import { MAX_RENDERED_NODES } from '../quadTree/quadTree.js';
|
|
||||||
import { EPSG3857 } from '../proj/EPSG3857.js';
|
|
||||||
import { EPSG4326 } from '../proj/EPSG4326.js';
|
import { EPSG4326 } from '../proj/EPSG4326.js';
|
||||||
import { Extent } from '../Extent.js';
|
import { Extent } from '../Extent.js';
|
||||||
import { Framebuffer } from '../webgl/Framebuffer.js';
|
import { Framebuffer } from '../webgl/Framebuffer.js';
|
||||||
@ -32,12 +30,9 @@ import { PlainSegmentWorker } from '../segment/PlainSegmentWorker.js';
|
|||||||
import { TerrainWorker } from '../utils/TerrainWorker.js';
|
import { TerrainWorker } from '../utils/TerrainWorker.js';
|
||||||
import { VectorTileCreator } from '../utils/VectorTileCreator.js';
|
import { VectorTileCreator } from '../utils/VectorTileCreator.js';
|
||||||
import { wgs84 } from '../ellipsoid/wgs84.js';
|
import { wgs84 } from '../ellipsoid/wgs84.js';
|
||||||
import { print2d } from '../utils/shared.js';
|
|
||||||
import { NIGHT } from '../res/night.js';
|
import { NIGHT } from '../res/night.js';
|
||||||
import { SPECULAR } from '../res/spec.js';
|
import { SPECULAR } from '../res/spec.js';
|
||||||
import { Plane } from '../math/Plane.js';
|
|
||||||
import { Geoid } from '../terrain/Geoid.js';
|
import { Geoid } from '../terrain/Geoid.js';
|
||||||
import { doubleToTwoFloats } from '../math/coder.js';
|
|
||||||
|
|
||||||
const MAX_LOD = 1.0;
|
const MAX_LOD = 1.0;
|
||||||
const MIN_LOD = 0.95;
|
const MIN_LOD = 0.95;
|
||||||
@ -50,8 +45,6 @@ const MIN_LOD = 0.95;
|
|||||||
*/
|
*/
|
||||||
const MAX_NODES = 500;
|
const MAX_NODES = 500;
|
||||||
|
|
||||||
const GLOBAL_DRAW_PRIORITY = -math.MAX;
|
|
||||||
|
|
||||||
const EVENT_NAMES = [
|
const EVENT_NAMES = [
|
||||||
/**
|
/**
|
||||||
* Triggered before globe frame begins to render.
|
* Triggered before globe frame begins to render.
|
||||||
@ -357,7 +350,6 @@ class Planet extends RenderNode {
|
|||||||
this._maxLodRatio = MAX_LOD;
|
this._maxLodRatio = MAX_LOD;
|
||||||
this._minLodRatio = MIN_LOD;
|
this._minLodRatio = MIN_LOD;
|
||||||
|
|
||||||
|
|
||||||
this._diffuseMaterialArr = new Float32Array(this.SLICE_SIZE_3 + 3);
|
this._diffuseMaterialArr = new Float32Array(this.SLICE_SIZE_3 + 3);
|
||||||
this._ambientMaterialArr = new Float32Array(this.SLICE_SIZE_3 + 3);
|
this._ambientMaterialArr = new Float32Array(this.SLICE_SIZE_3 + 3);
|
||||||
this._specularMaterialArr = new Float32Array(this.SLICE_SIZE_4 + 4);
|
this._specularMaterialArr = new Float32Array(this.SLICE_SIZE_4 + 4);
|
||||||
@ -388,7 +380,6 @@ class Planet extends RenderNode {
|
|||||||
|
|
||||||
this._memKey = new Key();
|
this._memKey = new Key();
|
||||||
|
|
||||||
//events initialization
|
|
||||||
this.events.registerNames(EVENT_NAMES);
|
this.events.registerNames(EVENT_NAMES);
|
||||||
|
|
||||||
this._tempPickingPix_ = new Uint8Array(4);
|
this._tempPickingPix_ = new Uint8Array(4);
|
||||||
@ -409,8 +400,9 @@ class Planet extends RenderNode {
|
|||||||
|
|
||||||
setRatioLod(maxLod, minLod) {
|
setRatioLod(maxLod, minLod) {
|
||||||
this._maxLodRatio = maxLod;
|
this._maxLodRatio = maxLod;
|
||||||
if (minLod)
|
if (minLod) {
|
||||||
this._minLodRatio = minLod;
|
this._minLodRatio = minLod;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -432,8 +424,9 @@ class Planet extends RenderNode {
|
|||||||
getLayerByName(name) {
|
getLayerByName(name) {
|
||||||
var i = this.layers.length;
|
var i = this.layers.length;
|
||||||
while (i--) {
|
while (i--) {
|
||||||
if (this.layers[i].name === name)
|
if (this.layers[i].name === name) {
|
||||||
return this.layers[i];
|
return this.layers[i];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -548,7 +541,7 @@ class Planet extends RenderNode {
|
|||||||
setTerrain(terrain) {
|
setTerrain(terrain) {
|
||||||
|
|
||||||
//
|
//
|
||||||
//TODO: Replace to terrain
|
// TODO: Replace to terrain
|
||||||
//
|
//
|
||||||
|
|
||||||
this.terrain = terrain;
|
this.terrain = terrain;
|
||||||
@ -583,8 +576,8 @@ class Planet extends RenderNode {
|
|||||||
this.renderer.addPickingCallback(this, this._renderColorPickingFramebufferPASS);
|
this.renderer.addPickingCallback(this, this._renderColorPickingFramebufferPASS);
|
||||||
|
|
||||||
this._heightPickingFramebuffer = new Framebuffer(this.renderer.handler, {
|
this._heightPickingFramebuffer = new Framebuffer(this.renderer.handler, {
|
||||||
'width': 320,
|
width: 320,
|
||||||
'height': 240
|
height: 240
|
||||||
});
|
});
|
||||||
|
|
||||||
this._heightPickingFramebuffer.init();
|
this._heightPickingFramebuffer.init();
|
||||||
@ -595,10 +588,10 @@ class Planet extends RenderNode {
|
|||||||
* @public
|
* @public
|
||||||
*/
|
*/
|
||||||
init() {
|
init() {
|
||||||
//Initialization indexes table
|
// Initialization indexes table
|
||||||
var TABLESIZE = segmentHelper.TABLESIZE;
|
var TABLESIZE = segmentHelper.TABLESIZE;
|
||||||
|
|
||||||
//Iniytialize indexes buffers cache. It takes ~120mb RAM!
|
// Initialization indexes buffers cache. It takes about 120mb RAM!
|
||||||
for (var i = 0; i <= TABLESIZE; i++) {
|
for (var i = 0; i <= TABLESIZE; i++) {
|
||||||
var c = Math.pow(2, i);
|
var c = Math.pow(2, i);
|
||||||
!this._indexesCache[c] && (this._indexesCache[c] = []);
|
!this._indexesCache[c] && (this._indexesCache[c] = []);
|
||||||
@ -623,8 +616,8 @@ class Planet extends RenderNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._indexesCache[c][w][n][e][s] = {
|
this._indexesCache[c][w][n][e][s] = {
|
||||||
'indexes': indexes,
|
indexes: indexes,
|
||||||
'buffer': buffer
|
buffer: buffer
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -632,7 +625,7 @@ class Planet extends RenderNode {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//create empty textures
|
// creating empty textures
|
||||||
var that = this;
|
var that = this;
|
||||||
this.renderer.handler.createDefaultTexture(null, function (t) {
|
this.renderer.handler.createDefaultTexture(null, function (t) {
|
||||||
that.solidTextureOne = t;
|
that.solidTextureOne = t;
|
||||||
@ -649,14 +642,14 @@ class Planet extends RenderNode {
|
|||||||
|
|
||||||
this.camera.update();
|
this.camera.update();
|
||||||
|
|
||||||
//Creating quad trees nodes
|
// Creating quad trees nodes
|
||||||
this._quadTree = new Node(Segment, this, quadTree.NW, null, 0, 0, Extent.createFromArray([-20037508.34, -20037508.34, 20037508.34, 20037508.34]));
|
this._quadTree = new Node(Segment, this, quadTree.NW, null, 0, 0, Extent.createFromArray([-20037508.34, -20037508.34, 20037508.34, 20037508.34]));
|
||||||
this._quadTreeNorth = new Node(SegmentLonLat, this, quadTree.NW, null, 0, 0, Extent.createFromArray([-180, mercator.MAX_LAT, 180, 90]));
|
this._quadTreeNorth = new Node(SegmentLonLat, this, quadTree.NW, null, 0, 0, Extent.createFromArray([-180, mercator.MAX_LAT, 180, 90]));
|
||||||
this._quadTreeSouth = new Node(SegmentLonLat, this, quadTree.NW, null, 0, 0, Extent.createFromArray([-180, -90, 180, mercator.MIN_LAT]));
|
this._quadTreeSouth = new Node(SegmentLonLat, this, quadTree.NW, null, 0, 0, Extent.createFromArray([-180, -90, 180, mercator.MIN_LAT]));
|
||||||
|
|
||||||
this.drawMode = this.renderer.handler.gl.TRIANGLE_STRIP;
|
this.drawMode = this.renderer.handler.gl.TRIANGLE_STRIP;
|
||||||
|
|
||||||
//Applying shaders
|
// Applying shaders
|
||||||
this._initializeShaders();
|
this._initializeShaders();
|
||||||
|
|
||||||
this.updateVisibleLayers();
|
this.updateVisibleLayers();
|
||||||
@ -675,15 +668,17 @@ class Planet extends RenderNode {
|
|||||||
|
|
||||||
this.renderer.addPickingCallback(this, this._frustumEntityCollectionPickingCallback);
|
this.renderer.addPickingCallback(this, this._frustumEntityCollectionPickingCallback);
|
||||||
|
|
||||||
//load Earth night glowing texture
|
// loading Earth night glowing texture
|
||||||
if (this._useNightTexture) {
|
if (this._useNightTexture) {
|
||||||
|
// eslint-disable-next-line no-undef
|
||||||
createImageBitmap(NIGHT).then((e) =>
|
createImageBitmap(NIGHT).then((e) =>
|
||||||
this._nightTexture = this.renderer.handler.createTexture_mm(e)
|
this._nightTexture = this.renderer.handler.createTexture_mm(e)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
//load water specular mask
|
// load water specular mask
|
||||||
if (this._useSpecularTexture) {
|
if (this._useSpecularTexture) {
|
||||||
|
// eslint-disable-next-line no-undef
|
||||||
createImageBitmap(SPECULAR).then((e) =>
|
createImageBitmap(SPECULAR).then((e) =>
|
||||||
this._specularTexture = this.renderer.handler.createTexture_l(e)
|
this._specularTexture = this.renderer.handler.createTexture_l(e)
|
||||||
);
|
);
|
||||||
@ -699,7 +694,7 @@ class Planet extends RenderNode {
|
|||||||
|
|
||||||
this.renderer.events.on("draw", this._globalPreDraw, this, -100);
|
this.renderer.events.on("draw", this._globalPreDraw, this, -100);
|
||||||
|
|
||||||
//Loads first nodes for better viewing if you have started on a lower altitude.
|
// Loading first nodes for better viewing if you have started on a lower altitude.
|
||||||
this._preRender();
|
this._preRender();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -866,8 +861,7 @@ class Planet extends RenderNode {
|
|||||||
_collectRenderNodes() {
|
_collectRenderNodes() {
|
||||||
|
|
||||||
this._lodRatio = math.lerp(
|
this._lodRatio = math.lerp(
|
||||||
this.camera.slope < 0.0 ? 0.0 :
|
this.camera.slope < 0.0 ? 0.0 : this.camera.slope,
|
||||||
this.camera.slope,
|
|
||||||
this._maxLodRatio, this._minLodRatio
|
this._maxLodRatio, this._minLodRatio
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -875,7 +869,7 @@ class Planet extends RenderNode {
|
|||||||
|
|
||||||
this._nodeCounterError_ = 0;
|
this._nodeCounterError_ = 0;
|
||||||
|
|
||||||
//clear first
|
// clear first
|
||||||
this._renderedNodes.length = 0;
|
this._renderedNodes.length = 0;
|
||||||
this._renderedNodes = [];
|
this._renderedNodes = [];
|
||||||
|
|
||||||
@ -892,7 +886,7 @@ class Planet extends RenderNode {
|
|||||||
this._quadTreeSouth.renderTree(this.camera, 0, null);
|
this._quadTreeSouth.renderTree(this.camera, 0, null);
|
||||||
this._quadTree.renderTree(this.camera, 0, null);
|
this._quadTree.renderTree(this.camera, 0, null);
|
||||||
|
|
||||||
//TODO:Abolish "magic" numbers
|
// TODO:Abolish "magic" numbers
|
||||||
if (this.renderer.activeCamera.slope > 0.8 &&
|
if (this.renderer.activeCamera.slope > 0.8 &&
|
||||||
this.renderer.activeCamera._lonLat.height < 850000.0 &&
|
this.renderer.activeCamera._lonLat.height < 850000.0 &&
|
||||||
this.renderer.activeCamera._lonLat.height > 10000.0) {
|
this.renderer.activeCamera._lonLat.height > 10000.0) {
|
||||||
@ -917,8 +911,6 @@ class Planet extends RenderNode {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//this._renderedNodes.push(this.camera._insideSegment.node);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_globalPreDraw() {
|
_globalPreDraw() {
|
||||||
@ -935,15 +927,15 @@ class Planet extends RenderNode {
|
|||||||
*/
|
*/
|
||||||
frame() {
|
frame() {
|
||||||
|
|
||||||
//free memory
|
// free memory
|
||||||
if (this._createdNodesCount > MAX_NODES && this._distBeforeMemClear > 10000.0) {
|
if (this._createdNodesCount > MAX_NODES && this._distBeforeMemClear > 10000.0) {
|
||||||
this.memClear();
|
this.memClear();
|
||||||
}
|
}
|
||||||
|
|
||||||
this._collectRenderNodes();
|
this._collectRenderNodes();
|
||||||
|
|
||||||
//Here is the planet node dispatches a draw event before
|
// Here is the planet node dispatches a draw event before
|
||||||
//rendering begins and we have got render nodes.
|
// rendering begins and we have got render nodes.
|
||||||
this.events.dispatch(this.events.draw, this);
|
this.events.dispatch(this.events.draw, this);
|
||||||
|
|
||||||
this.transformLights();
|
this.transformLights();
|
||||||
@ -952,7 +944,7 @@ class Planet extends RenderNode {
|
|||||||
|
|
||||||
this._singleframebufferRendering();
|
this._singleframebufferRendering();
|
||||||
|
|
||||||
//Creates geoImages textures.
|
// Creating geoImages textures.
|
||||||
this._geoImageCreator.frame();
|
this._geoImageCreator.frame();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -992,12 +984,12 @@ class Planet extends RenderNode {
|
|||||||
gl.uniformMatrix4fv(shu.viewMatrix, false, renderer.activeCamera._viewMatrix._m);
|
gl.uniformMatrix4fv(shu.viewMatrix, false, renderer.activeCamera._viewMatrix._m);
|
||||||
gl.uniformMatrix4fv(shu.projectionMatrix, false, renderer.activeCamera._projectionMatrix._m);
|
gl.uniformMatrix4fv(shu.projectionMatrix, false, renderer.activeCamera._projectionMatrix._m);
|
||||||
|
|
||||||
//bind night glowing material
|
// bind night glowing material
|
||||||
gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE);
|
gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE);
|
||||||
gl.bindTexture(gl.TEXTURE_2D, (this.camera._lonLat.height > 329958.0) && (this._nightTexture || this.transparentTexture) || this.transparentTexture);
|
gl.bindTexture(gl.TEXTURE_2D, ((this.camera._lonLat.height > 329958.0) && (this._nightTexture || this.transparentTexture)) || this.transparentTexture);
|
||||||
gl.uniform1i(shu.nightTexture, this.SLICE_SIZE);
|
gl.uniform1i(shu.nightTexture, this.SLICE_SIZE);
|
||||||
|
|
||||||
//bind specular material
|
// bind specular material
|
||||||
gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE + 1);
|
gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE + 1);
|
||||||
gl.bindTexture(gl.TEXTURE_2D, this._specularTexture || this.transparentTexture);
|
gl.bindTexture(gl.TEXTURE_2D, this._specularTexture || this.transparentTexture);
|
||||||
gl.uniform1i(shu.specularTexture, this.SLICE_SIZE + 1);
|
gl.uniform1i(shu.specularTexture, this.SLICE_SIZE + 1);
|
||||||
@ -1041,7 +1033,7 @@ class Planet extends RenderNode {
|
|||||||
gl.uniform3fv(shu.eyePositionHigh, cam.eyeHigh);
|
gl.uniform3fv(shu.eyePositionHigh, cam.eyeHigh);
|
||||||
gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
|
gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
|
||||||
|
|
||||||
//draw planet's nodes
|
// drawing planet nodes
|
||||||
var rn = this._renderedNodes,
|
var rn = this._renderedNodes,
|
||||||
sl = this._visibleTileLayerSlices;
|
sl = this._visibleTileLayerSlices;
|
||||||
|
|
||||||
@ -1056,9 +1048,9 @@ class Planet extends RenderNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
i = rn.length;
|
i = rn.length;
|
||||||
while (i--) {
|
while (i--) {
|
||||||
let s = rn[i].segment;
|
let s = rn[i].segment;
|
||||||
//s.equalize();
|
// TODO: s.equalize();
|
||||||
s.readyToEngage && s.engage();
|
s.readyToEngage && s.engage();
|
||||||
s.screenRendering(sh, sl[0], 0);
|
s.screenRendering(sh, sl[0], 0);
|
||||||
}
|
}
|
||||||
@ -1115,7 +1107,7 @@ class Planet extends RenderNode {
|
|||||||
gl.uniform3fv(shu.eyePositionHigh, cam.eyeHigh);
|
gl.uniform3fv(shu.eyePositionHigh, cam.eyeHigh);
|
||||||
gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
|
gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
|
||||||
|
|
||||||
//draw planet's nodes
|
// drawing planet nodes
|
||||||
var rn = this._renderedNodes,
|
var rn = this._renderedNodes,
|
||||||
sl = this._visibleTileLayerSlices;
|
sl = this._visibleTileLayerSlices;
|
||||||
|
|
||||||
@ -1163,7 +1155,7 @@ class Planet extends RenderNode {
|
|||||||
gl.uniform3fv(shu.eyePositionHigh, cam.eyeHigh);
|
gl.uniform3fv(shu.eyePositionHigh, cam.eyeHigh);
|
||||||
gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
|
gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
|
||||||
|
|
||||||
//draw planet's nodes
|
// drawing planet nodes
|
||||||
var rn = this._renderedNodes,
|
var rn = this._renderedNodes,
|
||||||
sl = this._visibleTileLayerSlices;
|
sl = this._visibleTileLayerSlices;
|
||||||
|
|
||||||
@ -1207,10 +1199,10 @@ class Planet extends RenderNode {
|
|||||||
vi.update();
|
vi.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
//3d entities(billnoards, labesl, shapes etc.) rendering
|
// Entities(billnoards, labesl, shapes etc.) rendering
|
||||||
this.drawEntityCollections(this._frustumEntityCollections);
|
this.drawEntityCollections(this._frustumEntityCollections);
|
||||||
|
|
||||||
//Vector tiles rasteriazation
|
// Vector tiles rasteriazation
|
||||||
this._vectorTileCreator.frame();
|
this._vectorTileCreator.frame();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1229,7 +1221,6 @@ class Planet extends RenderNode {
|
|||||||
memClear() {
|
memClear() {
|
||||||
this._distBeforeMemClear = 0;
|
this._distBeforeMemClear = 0;
|
||||||
|
|
||||||
//??? private ???
|
|
||||||
this.camera._insideSegment = null;
|
this.camera._insideSegment = null;
|
||||||
|
|
||||||
this.layerLock.lock(this._memKey);
|
this.layerLock.lock(this._memKey);
|
||||||
@ -1241,7 +1232,7 @@ class Planet extends RenderNode {
|
|||||||
this._tileLoader.abort();
|
this._tileLoader.abort();
|
||||||
|
|
||||||
var that = this;
|
var that = this;
|
||||||
//setTimeout(function () {
|
// setTimeout(function () {
|
||||||
that._quadTree.clearTree();
|
that._quadTree.clearTree();
|
||||||
that._quadTreeNorth.clearTree();
|
that._quadTreeNorth.clearTree();
|
||||||
that._quadTreeSouth.clearTree();
|
that._quadTreeSouth.clearTree();
|
||||||
@ -1249,7 +1240,7 @@ class Planet extends RenderNode {
|
|||||||
that.layerLock.free(that._memKey);
|
that.layerLock.free(that._memKey);
|
||||||
that.terrainLock.free(that._memKey);
|
that.terrainLock.free(that._memKey);
|
||||||
that._normalMapCreator.free(that._memKey);
|
that._normalMapCreator.free(that._memKey);
|
||||||
//}, 0);
|
// }, 0);
|
||||||
|
|
||||||
this._createdNodesCount = 0;
|
this._createdNodesCount = 0;
|
||||||
}
|
}
|
||||||
@ -1357,8 +1348,9 @@ class Planet extends RenderNode {
|
|||||||
*/
|
*/
|
||||||
getPixelFromLonLat(lonlat) {
|
getPixelFromLonLat(lonlat) {
|
||||||
var coords = this.ellipsoid.lonLatToCartesian(lonlat);
|
var coords = this.ellipsoid.lonLatToCartesian(lonlat);
|
||||||
if (coords)
|
if (coords) {
|
||||||
return this.renderer.activeCamera.project(coords);
|
return this.renderer.activeCamera.project(coords);
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -251,8 +251,9 @@ class RenderNode extends BaseNode {
|
|||||||
*/
|
*/
|
||||||
_drawNodes() {
|
_drawNodes() {
|
||||||
for (var i = 0; i < this.childNodes.length; i++) {
|
for (var i = 0; i < this.childNodes.length; i++) {
|
||||||
if (this.childNodes[i]._isActive)
|
if (this.childNodes[i]._isActive) {
|
||||||
this.childNodes[i]._drawNodes();
|
this.childNodes[i]._drawNodes();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.show) {
|
if (this.show) {
|
||||||
@ -280,24 +281,24 @@ class RenderNode extends BaseNode {
|
|||||||
|
|
||||||
gl.disable(gl.CULL_FACE);
|
gl.disable(gl.CULL_FACE);
|
||||||
|
|
||||||
//Z-buffer offset
|
// Z-buffer offset
|
||||||
gl.enable(gl.POLYGON_OFFSET_FILL);
|
gl.enable(gl.POLYGON_OFFSET_FILL);
|
||||||
gl.polygonOffset(0.0, 0.0);
|
gl.polygonOffset(0.0, 0.0);
|
||||||
|
|
||||||
//billoard pass
|
// billoard pass
|
||||||
var i = ec.length;
|
var i = ec.length;
|
||||||
while (i--) {
|
while (i--) {
|
||||||
ec[i]._fadingOpacity && ec[i].billboardHandler.drawPicking();
|
ec[i]._fadingOpacity && ec[i].billboardHandler.drawPicking();
|
||||||
}
|
}
|
||||||
|
|
||||||
//label pass
|
// label pass
|
||||||
i = ec.length;
|
i = ec.length;
|
||||||
while (i--) {
|
while (i--) {
|
||||||
ec[i]._fadingOpacity && ec[i].labelHandler.drawPicking();
|
ec[i]._fadingOpacity && ec[i].labelHandler.drawPicking();
|
||||||
}
|
}
|
||||||
|
|
||||||
//ray pass
|
// ray pass
|
||||||
var i = ec.length;
|
i = ec.length;
|
||||||
while (i--) {
|
while (i--) {
|
||||||
ec[i]._fadingOpacity && ec[i].rayHandler.drawPicking();
|
ec[i]._fadingOpacity && ec[i].rayHandler.drawPicking();
|
||||||
}
|
}
|
||||||
@ -307,29 +308,29 @@ class RenderNode extends BaseNode {
|
|||||||
gl.disable(gl.POLYGON_OFFSET_FILL);
|
gl.disable(gl.POLYGON_OFFSET_FILL);
|
||||||
gl.enable(gl.CULL_FACE);
|
gl.enable(gl.CULL_FACE);
|
||||||
|
|
||||||
//polylines pass
|
// polylines pass
|
||||||
i = ec.length;
|
i = ec.length;
|
||||||
while (i--) {
|
while (i--) {
|
||||||
ec[i]._visibility && ec[i].polylineHandler.drawPicking();
|
ec[i]._visibility && ec[i].polylineHandler.drawPicking();
|
||||||
}
|
}
|
||||||
|
|
||||||
////shapes pass
|
// //shapes pass
|
||||||
//i = ec.length;
|
// i = ec.length;
|
||||||
//while (i--) {
|
// while (i--) {
|
||||||
// ec[i]._visibility && ec[i].shapeHandler.drawPicking();
|
// ec[i]._visibility && ec[i].shapeHandler.drawPicking();
|
||||||
//}
|
// }
|
||||||
|
|
||||||
////pointClouds pass
|
// //pointClouds pass
|
||||||
//i = ec.length;
|
// i = ec.length;
|
||||||
//while (i--) {
|
// while (i--) {
|
||||||
// ec[i]._visibility && ec[i].pointCloudHandler.drawPicking();
|
// ec[i]._visibility && ec[i].pointCloudHandler.drawPicking();
|
||||||
//}
|
// }
|
||||||
|
|
||||||
////Strip pass
|
// //Strip pass
|
||||||
//i = ec.length;
|
// i = ec.length;
|
||||||
//while (i--) {
|
// while (i--) {
|
||||||
// ec[i]._visibility && ec[i].stripHandler.drawPicking();
|
// ec[i]._visibility && ec[i].stripHandler.drawPicking();
|
||||||
//}
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -7,8 +7,6 @@
|
|||||||
import * as shaders from '../Program/skybox.js';
|
import * as shaders from '../Program/skybox.js';
|
||||||
import { RenderNode } from './RenderNode.js';
|
import { RenderNode } from './RenderNode.js';
|
||||||
|
|
||||||
const RESOURCES_URL = "";
|
|
||||||
|
|
||||||
class SkyBox extends RenderNode {
|
class SkyBox extends RenderNode {
|
||||||
constructor(params) {
|
constructor(params) {
|
||||||
super("skybox");
|
super("skybox");
|
||||||
@ -19,12 +17,12 @@ class SkyBox extends RenderNode {
|
|||||||
|
|
||||||
static createDefault(RESOURCES_URL) {
|
static createDefault(RESOURCES_URL) {
|
||||||
return new SkyBox({
|
return new SkyBox({
|
||||||
"nx": RESOURCES_URL + "skybox/gal/_nx.jpg",
|
nx: RESOURCES_URL + "skybox/gal/_nx.jpg",
|
||||||
"px": RESOURCES_URL + "skybox/gal/_px.jpg",
|
px: RESOURCES_URL + "skybox/gal/_px.jpg",
|
||||||
"py": RESOURCES_URL + "skybox/gal/_py.jpg",
|
py: RESOURCES_URL + "skybox/gal/_py.jpg",
|
||||||
"ny": RESOURCES_URL + "skybox/gal/_ny.jpg",
|
ny: RESOURCES_URL + "skybox/gal/_ny.jpg",
|
||||||
"pz": RESOURCES_URL + "skybox/gal/_pz.jpg",
|
pz: RESOURCES_URL + "skybox/gal/_pz.jpg",
|
||||||
"nz": RESOURCES_URL + "skybox/gal/_nz.jpg"
|
nz: RESOURCES_URL + "skybox/gal/_nz.jpg"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,47 +58,47 @@ class SkyBox extends RenderNode {
|
|||||||
_createBuffers() {
|
_createBuffers() {
|
||||||
|
|
||||||
var vertices = new Float32Array([
|
var vertices = new Float32Array([
|
||||||
- 10000.0, 10000.0, - 10000.0,
|
-10000.0, 10000.0, -10000.0,
|
||||||
- 10000.0, - 10000.0, - 10000.0,
|
-10000.0, -10000.0, -10000.0,
|
||||||
10000.0, - 10000.0, - 10000.0,
|
10000.0, -10000.0, -10000.0,
|
||||||
10000.0, - 10000.0, - 10000.0,
|
10000.0, -10000.0, -10000.0,
|
||||||
10000.0, 10000.0, - 10000.0,
|
10000.0, 10000.0, -10000.0,
|
||||||
- 10000.0, 10000.0, - 10000.0,
|
-10000.0, 10000.0, -10000.0,
|
||||||
|
|
||||||
- 10000.0, - 10000.0, 10000.0,
|
-10000.0, -10000.0, 10000.0,
|
||||||
- 10000.0, - 10000.0, - 10000.0,
|
-10000.0, -10000.0, -10000.0,
|
||||||
- 10000.0, 10000.0, - 10000.0,
|
-10000.0, 10000.0, -10000.0,
|
||||||
- 10000.0, 10000.0, - 10000.0,
|
-10000.0, 10000.0, -10000.0,
|
||||||
- 10000.0, 10000.0, 10000.0,
|
-10000.0, 10000.0, 10000.0,
|
||||||
- 10000.0, - 10000.0, 10000.0,
|
-10000.0, -10000.0, 10000.0,
|
||||||
|
|
||||||
10000.0, - 10000.0, - 10000.0,
|
10000.0, -10000.0, -10000.0,
|
||||||
10000.0, - 10000.0, 10000.0,
|
10000.0, -10000.0, 10000.0,
|
||||||
10000.0, 10000.0, 10000.0,
|
10000.0, 10000.0, 10000.0,
|
||||||
10000.0, 10000.0, 10000.0,
|
10000.0, 10000.0, 10000.0,
|
||||||
10000.0, 10000.0, - 10000.0,
|
10000.0, 10000.0, -10000.0,
|
||||||
10000.0, - 10000.0, - 10000.0,
|
10000.0, -10000.0, -10000.0,
|
||||||
|
|
||||||
- 10000.0, - 10000.0, 10000.0,
|
-10000.0, -10000.0, 10000.0,
|
||||||
- 10000.0, 10000.0, 10000.0,
|
-10000.0, 10000.0, 10000.0,
|
||||||
10000.0, 10000.0, 10000.0,
|
10000.0, 10000.0, 10000.0,
|
||||||
10000.0, 10000.0, 10000.0,
|
10000.0, 10000.0, 10000.0,
|
||||||
10000.0, - 10000.0, 10000.0,
|
10000.0, -10000.0, 10000.0,
|
||||||
- 10000.0, - 10000.0, 10000.0,
|
-10000.0, -10000.0, 10000.0,
|
||||||
|
|
||||||
- 10000.0, 10000.0, - 10000.0,
|
-10000.0, 10000.0, -10000.0,
|
||||||
10000.0, 10000.0, - 10000.0,
|
10000.0, 10000.0, -10000.0,
|
||||||
10000.0, 10000.0, 10000.0,
|
10000.0, 10000.0, 10000.0,
|
||||||
10000.0, 10000.0, 10000.0,
|
10000.0, 10000.0, 10000.0,
|
||||||
- 10000.0, 10000.0, 10000.0,
|
-10000.0, 10000.0, 10000.0,
|
||||||
- 10000.0, 10000.0, - 10000.0,
|
-10000.0, 10000.0, -10000.0,
|
||||||
|
|
||||||
- 10000.0, - 10000.0, - 10000.0,
|
-10000.0, -10000.0, -10000.0,
|
||||||
- 10000.0, - 10000.0, 10000.0,
|
-10000.0, -10000.0, 10000.0,
|
||||||
10000.0, - 10000.0, - 10000.0,
|
10000.0, -10000.0, -10000.0,
|
||||||
10000.0, - 10000.0, - 10000.0,
|
10000.0, -10000.0, -10000.0,
|
||||||
- 10000.0, - 10000.0, 10000.0,
|
-10000.0, -10000.0, 10000.0,
|
||||||
10000.0, - 10000.0, 10000.0
|
10000.0, -10000.0, 10000.0
|
||||||
]);
|
]);
|
||||||
|
|
||||||
this.vertexPositionBuffer = this.renderer.handler.createArrayBuffer(vertices, 3, vertices.length / 3);
|
this.vertexPositionBuffer = this.renderer.handler.createArrayBuffer(vertices, 3, vertices.length / 3);
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
'use sctrict';
|
'use sctrict';
|
||||||
|
|
||||||
import { QueueArray } from '../QueueArray.js';
|
// import { QueueArray } from '../QueueArray.js';
|
||||||
import { EPSG4326 } from '../proj/EPSG4326.js';
|
import { EPSG4326 } from '../proj/EPSG4326.js';
|
||||||
|
|
||||||
class PlainSegmentWorker {
|
class PlainSegmentWorker {
|
||||||
@ -43,13 +43,13 @@ class PlainSegmentWorker {
|
|||||||
let m = geoid.model;
|
let m = geoid.model;
|
||||||
|
|
||||||
let model = {
|
let model = {
|
||||||
'scale': m.scale,
|
scale: m.scale,
|
||||||
'offset': m.offset,
|
offset: m.offset,
|
||||||
'width': m.width,
|
width: m.width,
|
||||||
'height': m.height,
|
height: m.height,
|
||||||
'rlonres': m.rlonres,
|
rlonres: m.rlonres,
|
||||||
'rlatres': m.rlatres,
|
rlatres: m.rlatres,
|
||||||
'i': m.i
|
i: m.i
|
||||||
};
|
};
|
||||||
|
|
||||||
this._workerQueue.forEach((w) => {
|
this._workerQueue.forEach((w) => {
|
||||||
@ -58,11 +58,11 @@ class PlainSegmentWorker {
|
|||||||
rawfile.set(m.rawfile);
|
rawfile.set(m.rawfile);
|
||||||
|
|
||||||
w.postMessage({
|
w.postMessage({
|
||||||
'model': model,
|
model: model,
|
||||||
'rawfile': rawfile
|
rawfile: rawfile
|
||||||
}, [
|
}, [
|
||||||
rawfile.buffer
|
rawfile.buffer
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,10 +93,10 @@ class PlainSegmentWorker {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
w.postMessage({
|
w.postMessage({
|
||||||
'params': params
|
params: params
|
||||||
}, [
|
}, [
|
||||||
params.buffer
|
params.buffer
|
||||||
]);
|
]);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
this._pendingQueue.push(segment);
|
this._pendingQueue.push(segment);
|
||||||
@ -105,7 +105,7 @@ class PlainSegmentWorker {
|
|||||||
this.check();
|
this.check();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
const _programm =
|
const _programm =
|
||||||
`
|
`
|
||||||
|
|||||||
@ -2,12 +2,7 @@
|
|||||||
|
|
||||||
import * as math from '../math.js';
|
import * as math from '../math.js';
|
||||||
import * as mercator from '../mercator.js';
|
import * as mercator from '../mercator.js';
|
||||||
import {
|
import { N, E, S, W, OPSIDE, NOTRENDERING } from '../quadTree/quadTree.js';
|
||||||
NW, NE, SW, SE,
|
|
||||||
N, E, S, W,
|
|
||||||
OPSIDE, NOTRENDERING
|
|
||||||
} from '../quadTree/quadTree.js';
|
|
||||||
import { Box } from '../bv/Box.js';
|
|
||||||
import { EPSG3857 } from '../proj/EPSG3857.js';
|
import { EPSG3857 } from '../proj/EPSG3857.js';
|
||||||
import { Extent } from '../Extent.js';
|
import { Extent } from '../Extent.js';
|
||||||
import { Layer } from '../layer/Layer.js';
|
import { Layer } from '../layer/Layer.js';
|
||||||
@ -16,12 +11,11 @@ import { textureCoordsTable } from './segmentHelper.js';
|
|||||||
import { Ray } from '../math/Ray.js';
|
import { Ray } from '../math/Ray.js';
|
||||||
import { Sphere } from '../bv/Sphere.js';
|
import { Sphere } from '../bv/Sphere.js';
|
||||||
import { Vec3 } from '../math/Vec3.js';
|
import { Vec3 } from '../math/Vec3.js';
|
||||||
import { cons } from '../cons.js';
|
|
||||||
|
|
||||||
export const MAX_NORMAL_ZOOM = 7;
|
export const MAX_NORMAL_ZOOM = 7;
|
||||||
|
|
||||||
let _tempHigh = new Vec3(),
|
var _tempHigh = new Vec3();
|
||||||
_tempLow = new Vec3();
|
var _tempLow = new Vec3();
|
||||||
|
|
||||||
var _RenderingSlice = function (p) {
|
var _RenderingSlice = function (p) {
|
||||||
this.layers = [];
|
this.layers = [];
|
||||||
@ -69,12 +63,6 @@ const Segment = function (node, planet, tileZoom, extent) {
|
|||||||
*/
|
*/
|
||||||
this.handler = planet.renderer.handler;
|
this.handler = planet.renderer.handler;
|
||||||
|
|
||||||
///**
|
|
||||||
// * Segment bounding box.
|
|
||||||
// * @type {og.bv.Box}
|
|
||||||
// */
|
|
||||||
//this.bbox = new Box();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Segment bounding box.
|
* Segment bounding box.
|
||||||
* @type {og.bv.Sphere}
|
* @type {og.bv.Sphere}
|
||||||
@ -128,7 +116,7 @@ const Segment = function (node, planet, tileZoom, extent) {
|
|||||||
*/
|
*/
|
||||||
this.tileY = 0;
|
this.tileY = 0;
|
||||||
|
|
||||||
this.tileIndex = "";
|
this.tileIndex = '';
|
||||||
|
|
||||||
this._assignTileIndexes();
|
this._assignTileIndexes();
|
||||||
|
|
||||||
@ -180,7 +168,7 @@ const Segment = function (node, planet, tileZoom, extent) {
|
|||||||
*/
|
*/
|
||||||
this.terrainExists = false;
|
this.terrainExists = false;
|
||||||
|
|
||||||
//this.plainIndexes = null;
|
// this.plainIndexes = null;
|
||||||
this.plainVertices = null;
|
this.plainVertices = null;
|
||||||
this.plainVerticesHigh = null;
|
this.plainVerticesHigh = null;
|
||||||
this.plainVerticesLow = null;
|
this.plainVerticesLow = null;
|
||||||
@ -234,7 +222,6 @@ Segment.prototype.acceptForRendering = function (camera) {
|
|||||||
return camera.projectedSize(this.bsphere.center, this.bsphere.radius) < 256 / this.planet._lodRatio;
|
return camera.projectedSize(this.bsphere.center, this.bsphere.radius) < 256 / this.planet._lodRatio;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns entity terrain point.
|
* Returns entity terrain point.
|
||||||
* @public
|
* @public
|
||||||
@ -261,8 +248,7 @@ Segment.prototype.isEntityInside = function (e) {
|
|||||||
* @returns {number} -
|
* @returns {number} -
|
||||||
*/
|
*/
|
||||||
Segment.prototype.getTerrainPoint = function (xyz, insideSegmentPosition, res, normal) {
|
Segment.prototype.getTerrainPoint = function (xyz, insideSegmentPosition, res, normal) {
|
||||||
|
var verts = this.tempVertices, // this.terrainReady ? this.terrainVertices : this.tempVertices,
|
||||||
var verts = this.tempVertices,//this.terrainReady ? this.terrainVertices : this.tempVertices,
|
|
||||||
ray = new Ray(xyz, xyz.negateTo());
|
ray = new Ray(xyz, xyz.negateTo());
|
||||||
|
|
||||||
if (verts) {
|
if (verts) {
|
||||||
@ -295,7 +281,7 @@ Segment.prototype.getTerrainPoint = function (xyz, insideSegmentPosition, res, n
|
|||||||
var ind_v2 = ((size + 1) * (indY + 1) + indX) * 3;
|
var ind_v2 = ((size + 1) * (indY + 1) + indX) * 3;
|
||||||
|
|
||||||
//
|
//
|
||||||
//TODO: replace with temp variables
|
// TODO: replace with temp variables
|
||||||
var v0 = new Vec3(verts[ind_v0], verts[ind_v0 + 1], verts[ind_v0 + 2]),
|
var v0 = new Vec3(verts[ind_v0], verts[ind_v0 + 1], verts[ind_v0 + 2]),
|
||||||
v1 = new Vec3(verts[ind_v0 + 3], verts[ind_v0 + 4], verts[ind_v0 + 5]),
|
v1 = new Vec3(verts[ind_v0 + 3], verts[ind_v0 + 4], verts[ind_v0 + 5]),
|
||||||
v2 = new Vec3(verts[ind_v2], verts[ind_v2 + 1], verts[ind_v2 + 2]);
|
v2 = new Vec3(verts[ind_v2], verts[ind_v2 + 1], verts[ind_v2 + 2]);
|
||||||
@ -341,7 +327,6 @@ Segment.prototype.getTerrainPoint = function (xyz, insideSegmentPosition, res, n
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Project wgs86 to segment native projection.
|
* Project wgs86 to segment native projection.
|
||||||
* @public
|
* @public
|
||||||
@ -389,7 +374,7 @@ Segment.prototype.elevationsExists = function (elevations) {
|
|||||||
|
|
||||||
Segment.prototype.equalize = function () {
|
Segment.prototype.equalize = function () {
|
||||||
this.readyToEngage = true;
|
this.readyToEngage = true;
|
||||||
//TODO
|
// TODO
|
||||||
};
|
};
|
||||||
|
|
||||||
Segment.prototype.engage = function () {
|
Segment.prototype.engage = function () {
|
||||||
@ -445,7 +430,6 @@ Segment.prototype._terrainWorkerCallback = function (data) {
|
|||||||
this.tempVerticesHigh = null;
|
this.tempVerticesHigh = null;
|
||||||
this.tempVerticesLow = null;
|
this.tempVerticesLow = null;
|
||||||
|
|
||||||
|
|
||||||
this.normalMapNormals = data.normalMapNormals;
|
this.normalMapNormals = data.normalMapNormals;
|
||||||
this.normalMapNormalsRaw = data.normalMapNormalsRaw;
|
this.normalMapNormalsRaw = data.normalMapNormalsRaw;
|
||||||
this.normalMapVertices = data.normalMapVertices;
|
this.normalMapVertices = data.normalMapVertices;
|
||||||
@ -497,7 +481,7 @@ Segment.prototype.elevationsNotExists = function () {
|
|||||||
this.terrainIsLoading = false;
|
this.terrainIsLoading = false;
|
||||||
|
|
||||||
this.node.appliedTerrainNodeId = this.node.nodeId;
|
this.node.appliedTerrainNodeId = this.node.nodeId;
|
||||||
//this.gridSize = this.planet.terrain.gridSizeByZoom[this.tileZoom];
|
// this.gridSize = this.planet.terrain.gridSizeByZoom[this.tileZoom];
|
||||||
|
|
||||||
if (this.planet.lightEnabled && !this._inTheQueue) {
|
if (this.planet.lightEnabled && !this._inTheQueue) {
|
||||||
this.planet._normalMapCreator.queue(this);
|
this.planet._normalMapCreator.queue(this);
|
||||||
@ -562,13 +546,13 @@ Segment.prototype._normalMapEdgeEqualize = function (side) {
|
|||||||
let seg_a_raw = s.normalMapNormalsRaw,
|
let seg_a_raw = s.normalMapNormalsRaw,
|
||||||
seg_b_raw = b.normalMapNormalsRaw;
|
seg_b_raw = b.normalMapNormalsRaw;
|
||||||
|
|
||||||
let seg_a_verts = s.terrainVertices,
|
// let seg_a_verts = s.terrainVertices,
|
||||||
seg_b_verts = s.terrainVertices;
|
// seg_b_verts = s.terrainVertices;
|
||||||
|
|
||||||
let s_gs = Math.sqrt(seg_a.length / 3),
|
let s_gs = Math.sqrt(seg_a.length / 3),
|
||||||
b_gs = Math.sqrt(seg_b.length / 3),
|
// b_gs = Math.sqrt(seg_b.length / 3),
|
||||||
s_gs1 = s_gs - 1,
|
s_gs1 = s_gs - 1;
|
||||||
b_gs1 = b_gs - 1;
|
// b_gs1 = b_gs - 1;
|
||||||
|
|
||||||
const i_a = s_gs1 * _S[side];
|
const i_a = s_gs1 * _S[side];
|
||||||
|
|
||||||
@ -576,7 +560,7 @@ Segment.prototype._normalMapEdgeEqualize = function (side) {
|
|||||||
|
|
||||||
if (s.tileZoom === b.tileZoom) {
|
if (s.tileZoom === b.tileZoom) {
|
||||||
|
|
||||||
let i_b = s_gs1 - i_a;
|
const i_b = s_gs1 - i_a;
|
||||||
|
|
||||||
if (_V[side]) {
|
if (_V[side]) {
|
||||||
for (let k = 0; k < s_gs; k++) {
|
for (let k = 0; k < s_gs; k++) {
|
||||||
@ -621,7 +605,6 @@ Segment.prototype._normalMapEdgeEqualize = function (side) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
Segment.prototype.applyTerrain = function (elevations) {
|
Segment.prototype.applyTerrain = function (elevations) {
|
||||||
if (elevations) {
|
if (elevations) {
|
||||||
this.elevationsExists(elevations);
|
this.elevationsExists(elevations);
|
||||||
@ -748,7 +731,7 @@ Segment.prototype.destroySegment = function () {
|
|||||||
|
|
||||||
this.materials = null;
|
this.materials = null;
|
||||||
|
|
||||||
//this.plainIndexes = null;
|
// this.plainIndexes = null;
|
||||||
this.plainVertices = null;
|
this.plainVertices = null;
|
||||||
this.plainVerticesHigh = null;
|
this.plainVerticesHigh = null;
|
||||||
this.plainVerticesLow = null;
|
this.plainVerticesLow = null;
|
||||||
@ -799,7 +782,7 @@ Segment.prototype.createBoundsByExtent = function () {
|
|||||||
var coord_sw = ellipsoid.geodeticToCartesian(extent.southWest.lon, extent.southWest.lat);
|
var coord_sw = ellipsoid.geodeticToCartesian(extent.southWest.lon, extent.southWest.lat);
|
||||||
var coord_ne = ellipsoid.geodeticToCartesian(extent.northEast.lon, extent.northEast.lat);
|
var coord_ne = ellipsoid.geodeticToCartesian(extent.northEast.lon, extent.northEast.lat);
|
||||||
|
|
||||||
//check for zoom
|
// check for zoom
|
||||||
if (this.tileZoom < MAX_NORMAL_ZOOM) {
|
if (this.tileZoom < MAX_NORMAL_ZOOM) {
|
||||||
|
|
||||||
var coord_nw = ellipsoid.geodeticToCartesian(extent.southWest.lon, extent.northEast.lat);
|
var coord_nw = ellipsoid.geodeticToCartesian(extent.southWest.lon, extent.northEast.lat);
|
||||||
@ -858,7 +841,6 @@ Segment.prototype.createTerrainFromChildNodes = function () {
|
|||||||
|
|
||||||
let hgsOne = 0.5 * gs + 0.5;
|
let hgsOne = 0.5 * gs + 0.5;
|
||||||
|
|
||||||
|
|
||||||
this.terrainVertices = new Float64Array(sgs3);
|
this.terrainVertices = new Float64Array(sgs3);
|
||||||
this.terrainVerticesHigh = new Float32Array(sgs3);
|
this.terrainVerticesHigh = new Float32Array(sgs3);
|
||||||
this.terrainVerticesLow = new Float32Array(sgs3);
|
this.terrainVerticesLow = new Float32Array(sgs3);
|
||||||
@ -870,7 +852,6 @@ Segment.prototype.createTerrainFromChildNodes = function () {
|
|||||||
this.normalMapNormals = new Float32Array(gs3);
|
this.normalMapNormals = new Float32Array(gs3);
|
||||||
this.normalMapNormalsRaw = new Float32Array(gs3);
|
this.normalMapNormalsRaw = new Float32Array(gs3);
|
||||||
|
|
||||||
|
|
||||||
let verts = this.terrainVertices,
|
let verts = this.terrainVertices,
|
||||||
vertsHigh = this.terrainVerticesHigh,
|
vertsHigh = this.terrainVerticesHigh,
|
||||||
vertsLow = this.terrainVerticesLow,
|
vertsLow = this.terrainVerticesLow,
|
||||||
@ -960,7 +941,6 @@ Segment.prototype.createTerrainFromChildNodes = function () {
|
|||||||
new Vec3(xmin, ymin, zmin)
|
new Vec3(xmin, ymin, zmin)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
this.appliedTerrainNodeId = this.nodeId;
|
this.appliedTerrainNodeId = this.nodeId;
|
||||||
this.terrainReady = true;
|
this.terrainReady = true;
|
||||||
this.terrainExists = true;
|
this.terrainExists = true;
|
||||||
@ -1074,7 +1054,6 @@ Segment.prototype._assignGlobalTextureCoordinates = function () {
|
|||||||
this._globalTextureCoordinates[3] = (mercator.POLE - e.southWest.lat) * mercator.ONE_BY_POLE_DOUBLE;
|
this._globalTextureCoordinates[3] = (mercator.POLE - e.southWest.lat) * mercator.ONE_BY_POLE_DOUBLE;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
Segment.prototype.createPlainSegmentAsync = function () {
|
Segment.prototype.createPlainSegmentAsync = function () {
|
||||||
|
|
||||||
let p = this.planet,
|
let p = this.planet,
|
||||||
@ -1179,7 +1158,7 @@ Segment.prototype._createPlainVertices = function () {
|
|||||||
this.terrainVerticesHigh = vertsHigh;
|
this.terrainVerticesHigh = vertsHigh;
|
||||||
this.terrainVerticesLow = vertsLow;
|
this.terrainVerticesLow = vertsLow;
|
||||||
|
|
||||||
//store raw normals
|
// store raw normals
|
||||||
this.normalMapNormalsRaw = new Float32Array(nmNorms.length);
|
this.normalMapNormalsRaw = new Float32Array(nmNorms.length);
|
||||||
this.normalMapNormalsRaw.set(nmNorms);
|
this.normalMapNormalsRaw.set(nmNorms);
|
||||||
|
|
||||||
@ -1224,7 +1203,7 @@ Segment.prototype.screenRendering = function (sh, layerSlice, sliceIndex, defaul
|
|||||||
currHeight = 0;
|
currHeight = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//First always draw whole planet base layer segment with solid texture.
|
// First always draw whole planet base layer segment with solid texture.
|
||||||
gl.activeTexture(gl.TEXTURE0 + p.SLICE_SIZE + 2);
|
gl.activeTexture(gl.TEXTURE0 + p.SLICE_SIZE + 2);
|
||||||
gl.bindTexture(gl.TEXTURE_2D, defaultTexture || this.getDefaultTexture());
|
gl.bindTexture(gl.TEXTURE_2D, defaultTexture || this.getDefaultTexture());
|
||||||
gl.uniform1i(shu.defaultTexture, p.SLICE_SIZE + 2);
|
gl.uniform1i(shu.defaultTexture, p.SLICE_SIZE + 2);
|
||||||
@ -1245,9 +1224,9 @@ Segment.prototype.screenRendering = function (sh, layerSlice, sliceIndex, defaul
|
|||||||
this._indexBuffer = this._getIndexBuffer();
|
this._indexBuffer = this._getIndexBuffer();
|
||||||
|
|
||||||
while (li) {
|
while (li) {
|
||||||
if (this.layerOverlap(li) &&
|
if (this.layerOverlap(li) && ((li._fading && (li._fadingOpacity > 0.0)) ||
|
||||||
(li._fading && li._fadingOpacity > 0.0 ||
|
((li.minZoom >= p.minCurrZoom || li.maxZoom >= p.minCurrZoom) && (li.minZoom <= p.maxCurrZoom || li.maxZoom <= p.maxCurrZoom)))
|
||||||
li.minZoom <= p.minCurrZoom && li.maxZoom >= p.maxCurrZoom)) {
|
) {
|
||||||
|
|
||||||
notEmpty = true;
|
notEmpty = true;
|
||||||
var m = pm[li._id];
|
var m = pm[li._id];
|
||||||
@ -1310,7 +1289,7 @@ Segment.prototype.screenRendering = function (sh, layerSlice, sliceIndex, defaul
|
|||||||
gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
|
gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
|
||||||
gl.uniform4fv(shu.transparentColorArr, slice.transparentColorArr);
|
gl.uniform4fv(shu.transparentColorArr, slice.transparentColorArr);
|
||||||
|
|
||||||
//bind normalmap texture
|
// bind normalmap texture
|
||||||
if (p.lightEnabled) {
|
if (p.lightEnabled) {
|
||||||
gl.activeTexture(gl.TEXTURE0 + p.SLICE_SIZE + 3);
|
gl.activeTexture(gl.TEXTURE0 + p.SLICE_SIZE + 3);
|
||||||
gl.bindTexture(gl.TEXTURE_2D, this.normalMapTexture || p.transparentTexture);
|
gl.bindTexture(gl.TEXTURE_2D, this.normalMapTexture || p.transparentTexture);
|
||||||
@ -1318,7 +1297,7 @@ Segment.prototype.screenRendering = function (sh, layerSlice, sliceIndex, defaul
|
|||||||
|
|
||||||
gl.uniform3fv(shu.uNormalMapBias, this.normalMapTextureBias);
|
gl.uniform3fv(shu.uNormalMapBias, this.normalMapTextureBias);
|
||||||
|
|
||||||
//bind segment specular and night material texture coordinates
|
// bind segment specular and night material texture coordinates
|
||||||
gl.uniform4fv(shu.uGlobalTextureCoord, this._globalTextureCoordinates);
|
gl.uniform4fv(shu.uGlobalTextureCoord, this._globalTextureCoordinates);
|
||||||
|
|
||||||
gl.uniform3fv(shu.diffuseMaterial, p._diffuseMaterialArr);
|
gl.uniform3fv(shu.diffuseMaterial, p._diffuseMaterialArr);
|
||||||
@ -1413,7 +1392,7 @@ Segment.prototype.heightPickingRendering = function (sh, layerSlice, sliceIndex,
|
|||||||
var pm = this.materials,
|
var pm = this.materials,
|
||||||
p = this.planet;
|
p = this.planet;
|
||||||
|
|
||||||
//First always draw whole planet base layer segment with solid texture.
|
// First always draw whole planet base layer segment with solid texture.
|
||||||
gl.activeTexture(gl.TEXTURE0 + p.SLICE_SIZE);
|
gl.activeTexture(gl.TEXTURE0 + p.SLICE_SIZE);
|
||||||
gl.bindTexture(gl.TEXTURE_2D, defaultTexture || p.solidTextureOne);
|
gl.bindTexture(gl.TEXTURE_2D, defaultTexture || p.solidTextureOne);
|
||||||
gl.uniform1i(shu.defaultTexture, p.SLICE_SIZE);
|
gl.uniform1i(shu.defaultTexture, p.SLICE_SIZE);
|
||||||
@ -1495,7 +1474,7 @@ Segment.prototype.getExtent = function () {
|
|||||||
|
|
||||||
Segment.prototype.getNodeState = function () {
|
Segment.prototype.getNodeState = function () {
|
||||||
var vn = this.planet._visibleNodes[this.node.nodeId];
|
var vn = this.planet._visibleNodes[this.node.nodeId];
|
||||||
return vn && vn.state || NOTRENDERING;
|
return (vn && vn.state) || NOTRENDERING;
|
||||||
};
|
};
|
||||||
|
|
||||||
Segment.prototype.getNeighborSide = function (b) {
|
Segment.prototype.getNeighborSide = function (b) {
|
||||||
@ -1518,4 +1497,4 @@ Segment.prototype.getNeighborSide = function (b) {
|
|||||||
return -1;
|
return -1;
|
||||||
};
|
};
|
||||||
|
|
||||||
export { Segment };
|
export { Segment };
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
'use sctrict';
|
'use sctrict';
|
||||||
|
|
||||||
import * as math from '../math.js';
|
|
||||||
import * as mercator from '../mercator.js';
|
import * as mercator from '../mercator.js';
|
||||||
import * as quadTree from '../quadTree/quadTree.js';
|
import * as quadTree from '../quadTree/quadTree.js';
|
||||||
import { EPSG4326 } from '../proj/EPSG4326.js';
|
import { EPSG4326 } from '../proj/EPSG4326.js';
|
||||||
@ -11,7 +10,6 @@ import { LonLat } from '../LonLat.js';
|
|||||||
import { Segment } from './Segment.js';
|
import { Segment } from './Segment.js';
|
||||||
import { Vec3 } from '../math/Vec3.js';
|
import { Vec3 } from '../math/Vec3.js';
|
||||||
|
|
||||||
|
|
||||||
const _heightLat = 90.0 - mercator.MAX_LAT;
|
const _heightLat = 90.0 - mercator.MAX_LAT;
|
||||||
const _maxPoleZoom = 7;
|
const _maxPoleZoom = 7;
|
||||||
const _pieceSize = _heightLat / Math.pow(2, _maxPoleZoom);
|
const _pieceSize = _heightLat / Math.pow(2, _maxPoleZoom);
|
||||||
@ -186,7 +184,6 @@ SegmentLonLat.prototype._createPlainVertices = function () {
|
|||||||
this.plainReady = true;
|
this.plainReady = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
SegmentLonLat.prototype._assignGlobalTextureCoordinates = function () {
|
SegmentLonLat.prototype._assignGlobalTextureCoordinates = function () {
|
||||||
var e = this._extent;
|
var e = this._extent;
|
||||||
this._globalTextureCoordinates[0] = (e.southWest.lon + 180.0) / 360.0;
|
this._globalTextureCoordinates[0] = (e.southWest.lon + 180.0) / 360.0;
|
||||||
@ -242,7 +239,7 @@ SegmentLonLat.prototype.getNodeState = function () {
|
|||||||
} else {
|
} else {
|
||||||
vn = this.planet._visibleNodesSouth[this.node.nodeId];
|
vn = this.planet._visibleNodesSouth[this.node.nodeId];
|
||||||
}
|
}
|
||||||
return vn && vn.state || quadTree.NOTRENDERING;
|
return (vn && vn.state) || quadTree.NOTRENDERING;
|
||||||
};
|
};
|
||||||
|
|
||||||
SegmentLonLat.prototype._freeCache = function () {
|
SegmentLonLat.prototype._freeCache = function () {
|
||||||
|
|||||||
@ -5,7 +5,6 @@
|
|||||||
'use sctrict';
|
'use sctrict';
|
||||||
|
|
||||||
import { Program } from '../webgl/Program.js';
|
import { Program } from '../webgl/Program.js';
|
||||||
import { types } from '../webgl/types.js';
|
|
||||||
|
|
||||||
export function billboardPicking() {
|
export function billboardPicking() {
|
||||||
return new Program("billboardPicking", {
|
return new Program("billboardPicking", {
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user