- notes: colored intersection area

- trials with three-csg-ts
This commit is contained in:
Arno Kaimbacher 2021-06-15 17:11:40 +02:00
parent 925ab2023c
commit 333d55ebf6
6 changed files with 213 additions and 84 deletions

162
package-lock.json generated
View File

@ -15,7 +15,8 @@
"lodash": "^4.17.21",
"normalize.css": "^8.0.1",
"proj4": "^2.6.3",
"three": "^0.129.0"
"three": "^0.129.0",
"three-csg-ts": "^3.1.3"
},
"devDependencies": {
"@babel/core": "^7.12.9",
@ -65,17 +66,17 @@
}
},
"node_modules/@babel/core": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.5.tgz",
"integrity": "sha512-RN/AwP2DJmQTZSfiDaD+JQQ/J99KsIpOCfBE5pL+5jJSt7nI3nYGoAXZu+ffYSQ029NLs2DstZb+eR81uuARgg==",
"version": "7.14.6",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz",
"integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.14.5",
"@babel/generator": "^7.14.5",
"@babel/helper-compilation-targets": "^7.14.5",
"@babel/helper-module-transforms": "^7.14.5",
"@babel/helpers": "^7.14.5",
"@babel/parser": "^7.14.5",
"@babel/helpers": "^7.14.6",
"@babel/parser": "^7.14.6",
"@babel/template": "^7.14.5",
"@babel/traverse": "^7.14.5",
"@babel/types": "^7.14.5",
@ -152,9 +153,9 @@
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.5.tgz",
"integrity": "sha512-Uq9z2e7ZtcnDMirRqAGLRaLwJn+Lrh388v5ETrR3pALJnElVh2zqQmdbz4W2RUJYohAPh2mtyPUgyMHMzXMncQ==",
"version": "7.14.6",
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz",
"integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.14.5",
@ -419,9 +420,9 @@
}
},
"node_modules/@babel/helpers": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.5.tgz",
"integrity": "sha512-xtcWOuN9VL6nApgVHtq3PPcQv5qFBJzoSZzJ/2c0QK/IP/gxVcoWSNQwFEGvmbQsuS9rhYqjILDGGXcTkA705Q==",
"version": "7.14.6",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz",
"integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==",
"dev": true,
"dependencies": {
"@babel/template": "^7.14.5",
@ -447,9 +448,9 @@
}
},
"node_modules/@babel/parser": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.5.tgz",
"integrity": "sha512-TM8C+xtH/9n1qzX+JNHi7AN2zHMTiPUtspO0ZdHflW8KaskkALhMmuMHb4bCmNdv9VAPzJX3/bXqkVLnAvsPfg==",
"version": "7.14.6",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.6.tgz",
"integrity": "sha512-oG0ej7efjEXxb4UgE+klVx+3j4MVo+A2vCzm7OUN4CLo6WhQ+vSOD2yJ8m7B+DghObxtLxt3EfgMWpq+AsWehQ==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@ -1380,9 +1381,9 @@
}
},
"node_modules/@babel/plugin-transform-spread": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.5.tgz",
"integrity": "sha512-/3iqoQdiWergnShZYl0xACb4ADeYCJ7X/RgmwtXshn6cIvautRPAFzhd58frQlokLO6Jb4/3JXvmm6WNTPtiTw==",
"version": "7.14.6",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz",
"integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.14.5",
@ -1441,12 +1442,12 @@
}
},
"node_modules/@babel/plugin-transform-typescript": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.5.tgz",
"integrity": "sha512-cFD5PKp4b8/KkwQ7h71FdPXFvz1RgwTFF9akRZwFldb9G0AHf7CgoPx96c4Q/ZVjh6V81tqQwW5YiHws16OzPg==",
"version": "7.14.6",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz",
"integrity": "sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==",
"dev": true,
"dependencies": {
"@babel/helper-create-class-features-plugin": "^7.14.5",
"@babel/helper-create-class-features-plugin": "^7.14.6",
"@babel/helper-plugin-utils": "^7.14.5",
"@babel/plugin-syntax-typescript": "^7.14.5"
},
@ -1609,9 +1610,9 @@
}
},
"node_modules/@babel/runtime": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.5.tgz",
"integrity": "sha512-121rumjddw9c3NCQ55KGkyE1h/nzWhU/owjhw0l4mQrkzz4x9SGS1X8gFLraHwX7td3Yo4QTL+qj0NcIzN87BA==",
"version": "7.14.6",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz",
"integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==",
"dev": true,
"dependencies": {
"regenerator-runtime": "^0.13.4"
@ -1987,9 +1988,9 @@
"dev": true
},
"node_modules/acorn": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz",
"integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==",
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.0.tgz",
"integrity": "sha512-ULr0LDaEqQrMFGyQ3bhJkLsbtrQ8QibAseGZeaSUiT/6zb9IvIkomWHJIvgvwad+hinRAgsI51JcWk2yvwyL+w==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
@ -2347,9 +2348,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001236",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001236.tgz",
"integrity": "sha512-o0PRQSrSCGJKCPZcgMzl5fUaj5xHe8qA2m4QRvnyY4e1lITqoNkr7q/Oh1NcpGSy0Th97UZ35yoKcINPoq7YOQ==",
"version": "1.0.30001237",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001237.tgz",
"integrity": "sha512-pDHgRndit6p1NR2GhzMbQ6CkRrp4VKuSsqbcLeOQppYPKOYkKT/6ZvZDvKJUqcmtyWIAHuZq3SVS2vc1egCZzw==",
"dev": true,
"funding": {
"type": "opencollective",
@ -4799,9 +4800,9 @@
}
},
"node_modules/postcss": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.2.tgz",
"integrity": "sha512-y1FK/AWdZlBF5lusS5j5l4/vF67+vQZt1SXPVJ32y1kRGDQyrs1zk32hG1cInRTu14P0V+orPz+ifwW/7rR4bg==",
"version": "8.3.4",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.4.tgz",
"integrity": "sha512-/tZY0PXExXXnNhKv3TOvZAOUYRyuqcCbBm2c17YMDK0PlVII3K7/LKdt3ScHL+hhouddjUWi+1sKDf9xXW+8YA==",
"dev": true,
"dependencies": {
"colorette": "^1.2.2",
@ -6154,6 +6155,15 @@
"resolved": "https://registry.npmjs.org/three/-/three-0.129.0.tgz",
"integrity": "sha512-wiWio1yVRg2Oj6WEWsTHQo5eSzYpEwSBtPSi3OofNpvFbf26HFfb9kw4FZJNjII4qxzp0b1xLB11+tKkBGB1ZA=="
},
"node_modules/three-csg-ts": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/three-csg-ts/-/three-csg-ts-3.1.3.tgz",
"integrity": "sha512-LOTJeO/FpkjHjTbuuV3k/Odr1gdbGJJLzVcD3T50B7p3IjMPa0TrZbNQK/wpB0GMaHmzikgX/hCcP9Ube9ExoQ==",
"peerDependencies": {
"@types/three": ">= 0.125.0",
"three": ">= 0.125.0"
}
},
"node_modules/to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@ -6445,9 +6455,9 @@
}
},
"node_modules/webpack": {
"version": "5.38.1",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.38.1.tgz",
"integrity": "sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g==",
"version": "5.39.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.39.0.tgz",
"integrity": "sha512-25CHmuDj+oOTyteI13sUqNlCnjCnySuhiKWE/cRYPQYeoQ3ijHgyWX27CiyUKLNGq27v8S0mrksyTreT/xo7pg==",
"dev": true,
"dependencies": {
"@types/eslint-scope": "^3.7.0",
@ -6872,17 +6882,17 @@
"dev": true
},
"@babel/core": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.5.tgz",
"integrity": "sha512-RN/AwP2DJmQTZSfiDaD+JQQ/J99KsIpOCfBE5pL+5jJSt7nI3nYGoAXZu+ffYSQ029NLs2DstZb+eR81uuARgg==",
"version": "7.14.6",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz",
"integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.14.5",
"@babel/generator": "^7.14.5",
"@babel/helper-compilation-targets": "^7.14.5",
"@babel/helper-module-transforms": "^7.14.5",
"@babel/helpers": "^7.14.5",
"@babel/parser": "^7.14.5",
"@babel/helpers": "^7.14.6",
"@babel/parser": "^7.14.6",
"@babel/template": "^7.14.5",
"@babel/traverse": "^7.14.5",
"@babel/types": "^7.14.5",
@ -6937,9 +6947,9 @@
}
},
"@babel/helper-create-class-features-plugin": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.5.tgz",
"integrity": "sha512-Uq9z2e7ZtcnDMirRqAGLRaLwJn+Lrh388v5ETrR3pALJnElVh2zqQmdbz4W2RUJYohAPh2mtyPUgyMHMzXMncQ==",
"version": "7.14.6",
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz",
"integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==",
"dev": true,
"requires": {
"@babel/helper-annotate-as-pure": "^7.14.5",
@ -7138,9 +7148,9 @@
}
},
"@babel/helpers": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.5.tgz",
"integrity": "sha512-xtcWOuN9VL6nApgVHtq3PPcQv5qFBJzoSZzJ/2c0QK/IP/gxVcoWSNQwFEGvmbQsuS9rhYqjILDGGXcTkA705Q==",
"version": "7.14.6",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz",
"integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==",
"dev": true,
"requires": {
"@babel/template": "^7.14.5",
@ -7160,9 +7170,9 @@
}
},
"@babel/parser": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.5.tgz",
"integrity": "sha512-TM8C+xtH/9n1qzX+JNHi7AN2zHMTiPUtspO0ZdHflW8KaskkALhMmuMHb4bCmNdv9VAPzJX3/bXqkVLnAvsPfg==",
"version": "7.14.6",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.6.tgz",
"integrity": "sha512-oG0ej7efjEXxb4UgE+klVx+3j4MVo+A2vCzm7OUN4CLo6WhQ+vSOD2yJ8m7B+DghObxtLxt3EfgMWpq+AsWehQ==",
"dev": true
},
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
@ -7760,9 +7770,9 @@
}
},
"@babel/plugin-transform-spread": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.5.tgz",
"integrity": "sha512-/3iqoQdiWergnShZYl0xACb4ADeYCJ7X/RgmwtXshn6cIvautRPAFzhd58frQlokLO6Jb4/3JXvmm6WNTPtiTw==",
"version": "7.14.6",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz",
"integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.14.5",
@ -7797,12 +7807,12 @@
}
},
"@babel/plugin-transform-typescript": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.5.tgz",
"integrity": "sha512-cFD5PKp4b8/KkwQ7h71FdPXFvz1RgwTFF9akRZwFldb9G0AHf7CgoPx96c4Q/ZVjh6V81tqQwW5YiHws16OzPg==",
"version": "7.14.6",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz",
"integrity": "sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==",
"dev": true,
"requires": {
"@babel/helper-create-class-features-plugin": "^7.14.5",
"@babel/helper-create-class-features-plugin": "^7.14.6",
"@babel/helper-plugin-utils": "^7.14.5",
"@babel/plugin-syntax-typescript": "^7.14.5"
}
@ -7932,9 +7942,9 @@
}
},
"@babel/runtime": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.5.tgz",
"integrity": "sha512-121rumjddw9c3NCQ55KGkyE1h/nzWhU/owjhw0l4mQrkzz4x9SGS1X8gFLraHwX7td3Yo4QTL+qj0NcIzN87BA==",
"version": "7.14.6",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz",
"integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==",
"dev": true,
"requires": {
"regenerator-runtime": "^0.13.4"
@ -8269,9 +8279,9 @@
"dev": true
},
"acorn": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz",
"integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==",
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.0.tgz",
"integrity": "sha512-ULr0LDaEqQrMFGyQ3bhJkLsbtrQ8QibAseGZeaSUiT/6zb9IvIkomWHJIvgvwad+hinRAgsI51JcWk2yvwyL+w==",
"dev": true
},
"adjust-sourcemap-loader": {
@ -8548,9 +8558,9 @@
}
},
"caniuse-lite": {
"version": "1.0.30001236",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001236.tgz",
"integrity": "sha512-o0PRQSrSCGJKCPZcgMzl5fUaj5xHe8qA2m4QRvnyY4e1lITqoNkr7q/Oh1NcpGSy0Th97UZ35yoKcINPoq7YOQ==",
"version": "1.0.30001237",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001237.tgz",
"integrity": "sha512-pDHgRndit6p1NR2GhzMbQ6CkRrp4VKuSsqbcLeOQppYPKOYkKT/6ZvZDvKJUqcmtyWIAHuZq3SVS2vc1egCZzw==",
"dev": true
},
"caseless": {
@ -10391,9 +10401,9 @@
}
},
"postcss": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.2.tgz",
"integrity": "sha512-y1FK/AWdZlBF5lusS5j5l4/vF67+vQZt1SXPVJ32y1kRGDQyrs1zk32hG1cInRTu14P0V+orPz+ifwW/7rR4bg==",
"version": "8.3.4",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.4.tgz",
"integrity": "sha512-/tZY0PXExXXnNhKv3TOvZAOUYRyuqcCbBm2c17YMDK0PlVII3K7/LKdt3ScHL+hhouddjUWi+1sKDf9xXW+8YA==",
"dev": true,
"requires": {
"colorette": "^1.2.2",
@ -11411,6 +11421,12 @@
"resolved": "https://registry.npmjs.org/three/-/three-0.129.0.tgz",
"integrity": "sha512-wiWio1yVRg2Oj6WEWsTHQo5eSzYpEwSBtPSi3OofNpvFbf26HFfb9kw4FZJNjII4qxzp0b1xLB11+tKkBGB1ZA=="
},
"three-csg-ts": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/three-csg-ts/-/three-csg-ts-3.1.3.tgz",
"integrity": "sha512-LOTJeO/FpkjHjTbuuV3k/Odr1gdbGJJLzVcD3T50B7p3IjMPa0TrZbNQK/wpB0GMaHmzikgX/hCcP9Ube9ExoQ==",
"requires": {}
},
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@ -11628,9 +11644,9 @@
}
},
"webpack": {
"version": "5.38.1",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.38.1.tgz",
"integrity": "sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g==",
"version": "5.39.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.39.0.tgz",
"integrity": "sha512-25CHmuDj+oOTyteI13sUqNlCnjCnySuhiKWE/cRYPQYeoQ3ijHgyWX27CiyUKLNGq27v8S0mrksyTreT/xo7pg==",
"dev": true,
"requires": {
"@types/eslint-scope": "^3.7.0",

View File

@ -10,7 +10,8 @@
"lodash": "^4.17.21",
"normalize.css": "^8.0.1",
"proj4": "^2.6.3",
"three": "^0.129.0"
"three": "^0.129.0",
"three-csg-ts": "^3.1.3"
},
"author": "Arno Kaimbacher",
"license": "MIT",

View File

@ -7,6 +7,7 @@ import { SelectionBoxLine } from './SelectionBoxLine';
import { Layer } from '../layer/Layer';
import { Group } from 'three/src/objects/Group';
import { UpdatableBoxGeometry } from './UpdatableBoxGeometry';
import { TinLayer } from '../layer/TinLayer';
export class Selection extends Layer {
visible;
@ -98,6 +99,13 @@ export class Selection extends Layer {
this.map = map;
this.build(this.getScene());
this.emit('add');
if (this.map.layers) {
for (const [key, layer] of Object.entries(this.map.layers)) {
if (layer instanceof TinLayer) {
layer.buildBorder(this.vertices);
}
}
}
}
onRemove(map) {
@ -226,5 +234,12 @@ export class Selection extends Layer {
this.updateGeometries();
// this.setBox();
this.box.update();
// if (this.map.layers) {
// for (const [key, layer] of Object.entries(this.map.layers)) {
// if (layer instanceof TinLayer) {
// layer.box.update();
// }
// }
// }
}
}

View File

@ -0,0 +1,3 @@
https://jsfiddle.net/prisoner849/8uxw667m/
https://stackoverflow.com/questions/42348495/three-js-find-all-points-where-a-mesh-intersects-a-plane

View File

@ -6,6 +6,7 @@ import { Layer } from './Layer';
import { BitStream } from '../lib/bitstream';
import { Vector3 } from 'three/src/math/Vector3';
import { MyMeshStandardMaterial } from '../clip/MyMeshStandardMaterial';
import { MeshBasicMaterial } from 'three/src/materials/MeshBasicMaterial';
import { Group } from 'three/src/objects/Group';
import { TextureLoader } from 'three/src/loaders/TextureLoader';
import proj4 from 'proj4/dist/proj4-src';
@ -16,6 +17,9 @@ import { Vector2 } from 'three/src/math/Vector2';
import { Matrix4 } from 'three/src/math/Matrix4';
import { Box3 } from 'three/src/math/Box3';
import { uniforms } from '../clip/uniforms';
import { UpdatableBoxGeometry } from '../clip/UpdatableBoxGeometry';
import { Scene } from 'three/src/scenes/Scene';
import { CSG } from 'three-csg-ts';
const POINTURL = 'https://geusegdi01.geus.dk/geom3d/data/nodes/';
const EDGEURL = 'https://geusegdi01.geus.dk/geom3d/data/triangles/';
@ -36,7 +40,9 @@ class TinLayer extends Layer {
featuregeom_id: number;
color: string;
mainMesh;
borderMesh;
geometry: BufferGeometry;
box: UpdatableBoxGeometry;
uniforms;
// uniforms = {
// clipping: {
@ -72,6 +78,9 @@ class TinLayer extends Layer {
texture: undefined
}
];
frontStencil: Scene;
backStencil: Scene;
capsScene: Scene;
constructor(params) {
super();
@ -92,6 +101,70 @@ class TinLayer extends Layer {
this.uniforms = uniforms;
}
buildBorder(vertices) {
let box = this.box = new UpdatableBoxGeometry(vertices)
// this.boxMesh = new Mesh(box, material.capMaterial);
// let color = parseInt(this.color, 16);
// let meshMaterial = new MeshBasicMaterial({
// color: color,
// side: DoubleSide
// });
// this.materialsArray.push(meshMaterial);
// let meshA = this.mainMesh;
// let meshB = this.borderMesh = new Mesh(box, meshMaterial);
// this._addObject(mesh, false);
// Make sure the .matrix of each mesh is current
// meshA.updateMatrix();
// meshB.updateMatrix();
// // Subtract meshB from meshA
// this.borderMesh = CSG.subtract(meshA, meshB);
// this._addObject(this.borderMesh, false);
// this.frontStencil = new Scene();
// let frontMesh = new Mesh(this.geometry.clone(), material.frontStencilMaterial);
// frontMesh.userData.layerId = this.index;
// this.frontStencil.add(frontMesh);
// this.backStencil = new Scene();
// let backMesh = new Mesh(this.geometry.clone(), material.backStencilMaterial);
// backMesh.userData.layerId = this.index;
// this.backStencil.add(frontMesh);
// this.capsScene = new Scene();
// this.capsScene.add(this.borderMesh);
}
// animate() {
// let gl = this._map.renderer.getContext();
// if (gl != undefined && this.capsScene != undefined) {
// gl.enable(gl.STENCIL_TEST);
// // this.renderer.state.setStencilFunc( true );
// // gl.stencilFunc( gl.ALWAYS, 1, 0xff );
// // gl.stencilOp( gl.REPLACE, gl.REPLACE, gl.REPLACE );
// gl.stencilFunc(gl.ALWAYS, 1, 0xff);
// gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR);
// this._map.renderer.render(this.backStencil, this._map.camera);
// gl.stencilFunc(gl.ALWAYS, 1, 0xff);
// gl.stencilOp(gl.KEEP, gl.KEEP, gl.DECR);
// this._map.renderer.render(this.frontStencil, this._map.camera);
// gl.stencilFunc(gl.EQUAL, 1, 0xff);
// gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);
// this._map.renderer.render(this.capsScene, this._map.camera);
// // disable stencil test
// gl.disable(gl.STENCIL_TEST);
// }
// }
setWireframeMode(wireframe) {
this.materialsArray.forEach(function (mat) {
//if (m.w) return;

View File

@ -31,6 +31,8 @@ import { TinLayer } from './layer/TinLayer';
class Application {
capsSceneArray;
constructor(container) {
this.container = container;
this.running = false;
@ -109,7 +111,6 @@ class Application {
this.queryMarker.visible = true;
// this.queryMarker.position.set(4282010, 2302070, -13616.3);
/* Renderer */
// let bgcolor = 0xfdfdfd;
this.renderer = new WebGLRenderer({ alpha: true, antialias: true, preserveDrawingBuffer: true });
this.renderer.setPixelRatio(window.devicePixelRatio);
this.renderer.setSize(this.width, this.height);
@ -128,6 +129,7 @@ class Application {
this.capsScene = new Scene();
this.backStencil = new Scene();
this.frontStencil = new Scene();
this.capsSceneArray = new Array();
this._buildDefaultLights(this.scene);
//app.scene.autoUpdate = false;
//// show axes in the screen
@ -189,6 +191,20 @@ class Application {
// this.scene.add(this.selection.touchMeshes);
this.map.addLayer(this.selectionBox);
// for (const [key, layer] of Object.entries(this.map.layers)) {
// // let layer = map.layers[i];
// if (layer instanceof TinLayer && layer.name != "Topography") {
// // let capsScene = new Scene();
// // capsScene.add(layer.borderMesh);
// // this.capsSceneArray.push(capsScene);
// this.capsScene.add(layer.borderMesh);
// layer.on('visibility-change', (args) => {
// let visible = args[0];
// layer.borderMesh.visible = visible;
// });
// }
// }
let frontGroup = new Group();
for (var i in map.layers) {
let layer = map.layers[i];
@ -370,9 +386,14 @@ class Application {
if (this.showCaps && gl != undefined) {
// enable stencil test
gl.enable(gl.STENCIL_TEST);
// this.renderer.state.setStencilFunc( true );
// gl.stencilFunc( gl.ALWAYS, 1, 0xff );
// gl.stencilOp( gl.REPLACE, gl.REPLACE, gl.REPLACE );
// for (let i in this.map.layers) {
// let layer = this.map.layers[i];
// if (layer instanceof TinLayer && layer.name != "Topography") {
// layer.animate();
// break;
// }
// }
gl.stencilFunc(gl.ALWAYS, 1, 0xff);
gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR);