@gisatcz/deckgl-geolib 1.12.0-dev.0 → 1.12.0-dev.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,171 +0,0 @@
1
- // loaders.gl
2
- // SPDX-License-Identifier: MIT
3
- // Copyright (c) vis.gl contributors
4
-
5
- import { concatenateTypedArrays } from '@loaders.gl/loader-utils';
6
-
7
- export type EdgeIndices = {
8
- westIndices: number[];
9
- northIndices: number[];
10
- eastIndices: number[];
11
- southIndices: number[];
12
- };
13
-
14
- /**
15
- * Add skirt to existing mesh
16
- * @param {object} attributes - POSITION and TEXCOOD_0 attributes data
17
- * @param {any} triangles - indices array of the mesh geometry
18
- * @param skirtHeight - height of the skirt geometry
19
- * @param outsideIndices - edge indices from quantized mesh data
20
- * @returns - geometry data with added skirt
21
- */
22
- export function addSkirt(attributes, triangles, skirtHeight: number, outsideIndices?: EdgeIndices) {
23
- const outsideEdges = outsideIndices
24
- ? getOutsideEdgesFromIndices(outsideIndices, attributes.POSITION.value)
25
- : getOutsideEdgesFromTriangles(triangles);
26
-
27
- // 2 new vertices for each outside edge
28
- const newPosition = new attributes.POSITION.value.constructor(outsideEdges.length * 6);
29
- const newTexcoord0 = new attributes.TEXCOORD_0.value.constructor(outsideEdges.length * 4);
30
-
31
- // 2 new triangles for each outside edge
32
- const newTriangles = new triangles.constructor(outsideEdges.length * 6);
33
-
34
- for (let i = 0; i < outsideEdges.length; i++) {
35
- const edge = outsideEdges[i];
36
-
37
- updateAttributesForNewEdge({
38
- edge,
39
- edgeIndex: i,
40
- attributes,
41
- skirtHeight,
42
- newPosition,
43
- newTexcoord0,
44
- newTriangles,
45
- });
46
- }
47
-
48
- attributes.POSITION.value = concatenateTypedArrays(attributes.POSITION.value, newPosition);
49
- attributes.TEXCOORD_0.value = concatenateTypedArrays(attributes.TEXCOORD_0.value, newTexcoord0);
50
- const resultTriangles = triangles instanceof Array
51
- ? triangles.concat(newTriangles)
52
- : concatenateTypedArrays(triangles, newTriangles);
53
-
54
- return {
55
- attributes,
56
- triangles: resultTriangles,
57
- };
58
- }
59
-
60
- /**
61
- * Get geometry edges that located on a border of the mesh
62
- * @param {any} triangles - indices array of the mesh geometry
63
- * @returns {number[][]} - outside edges data
64
- */
65
- function getOutsideEdgesFromTriangles(triangles) {
66
- const edges: number[][] = [];
67
- for (let i = 0; i < triangles.length; i += 3) {
68
- edges.push([triangles[i], triangles[i + 1]]);
69
- edges.push([triangles[i + 1], triangles[i + 2]]);
70
- edges.push([triangles[i + 2], triangles[i]]);
71
- }
72
-
73
- edges.sort((a, b) => Math.min(...a) - Math.min(...b) || Math.max(...a) - Math.max(...b));
74
-
75
- const outsideEdges: number[][] = [];
76
- let index = 0;
77
- while (index < edges.length) {
78
- if (edges[index][0] === edges[index + 1]?.[1] && edges[index][1] === edges[index + 1]?.[0]) {
79
- index += 2;
80
- } else {
81
- outsideEdges.push(edges[index]);
82
- index++;
83
- }
84
- }
85
- return outsideEdges;
86
- }
87
-
88
- /**
89
- * Get geometry edges that located on a border of the mesh
90
- * @param {object} indices - edge indices from quantized mesh data
91
- * @param {TypedArray} position - position attribute geometry data
92
- * @returns {number[][]} - outside edges data
93
- */
94
- function getOutsideEdgesFromIndices(indices: EdgeIndices, position) {
95
- // Sort skirt indices to create adjacent triangles
96
- indices.westIndices.sort((a, b) => position[3 * a + 1] - position[3 * b + 1]);
97
- // Reverse (b - a) to match triangle winding
98
- indices.eastIndices.sort((a, b) => position[3 * b + 1] - position[3 * a + 1]);
99
- indices.southIndices.sort((a, b) => position[3 * b] - position[3 * a]);
100
- // Reverse (b - a) to match triangle winding
101
- indices.northIndices.sort((a, b) => position[3 * a] - position[3 * b]);
102
-
103
- const edges: number[][] = [];
104
- for (const index in indices) {
105
- const indexGroup = indices[index];
106
- for (let i = 0; i < indexGroup.length - 1; i++) {
107
- edges.push([indexGroup[i], indexGroup[i + 1]]);
108
- }
109
- }
110
- return edges;
111
- }
112
-
113
- /**
114
- * Get geometry edges that located on a border of the mesh
115
- * @param {object} args
116
- * @param {number[]} args.edge - edge indices in geometry
117
- * @param {number} args.edgeIndex - edge index in outsideEdges array
118
- * @param {object} args.attributes - POSITION and TEXCOORD_0 attributes
119
- * @param {number} args.skirtHeight - height of the skirt geometry
120
- * @param {TypedArray} args.newPosition - POSITION array for skirt data
121
- * @param {TypedArray} args.newTexcoord0 - TEXCOORD_0 array for skirt data
122
- * @param {TypedArray | Array} args.newTriangles - trinagle indices array for skirt data
123
- * @returns {void}
124
- */
125
- function updateAttributesForNewEdge({
126
- edge,
127
- edgeIndex,
128
- attributes,
129
- skirtHeight,
130
- newPosition,
131
- newTexcoord0,
132
- newTriangles,
133
- }) {
134
- const positionsLength = attributes.POSITION.value.length;
135
- const vertex1Offset = edgeIndex * 2;
136
- const vertex2Offset = edgeIndex * 2 + 1;
137
-
138
- // Define POSITION for new 1st vertex
139
- newPosition.set(
140
- attributes.POSITION.value.subarray(edge[0] * 3, edge[0] * 3 + 3),
141
- vertex1Offset * 3,
142
- );
143
- newPosition[vertex1Offset * 3 + 2] = newPosition[vertex1Offset * 3 + 2] - skirtHeight; // put down elevation on the skirt height
144
-
145
- // Define POSITION for new 2nd vertex
146
- newPosition.set(
147
- attributes.POSITION.value.subarray(edge[1] * 3, edge[1] * 3 + 3),
148
- vertex2Offset * 3,
149
- );
150
- newPosition[vertex2Offset * 3 + 2] = newPosition[vertex2Offset * 3 + 2] - skirtHeight; // put down elevation on the skirt height
151
-
152
- // Use same TEXCOORDS for skirt vertices
153
- newTexcoord0.set(
154
- attributes.TEXCOORD_0.value.subarray(edge[0] * 2, edge[0] * 2 + 2),
155
- vertex1Offset * 2,
156
- );
157
- newTexcoord0.set(
158
- attributes.TEXCOORD_0.value.subarray(edge[1] * 2, edge[1] * 2 + 2),
159
- vertex2Offset * 2,
160
- );
161
-
162
- // Define new triangles
163
- const triangle1Offset = edgeIndex * 2 * 3;
164
- newTriangles[triangle1Offset] = edge[0];
165
- newTriangles[triangle1Offset + 1] = positionsLength / 3 + vertex2Offset;
166
- newTriangles[triangle1Offset + 2] = edge[1];
167
-
168
- newTriangles[triangle1Offset + 3] = positionsLength / 3 + vertex2Offset;
169
- newTriangles[triangle1Offset + 4] = edge[0];
170
- newTriangles[triangle1Offset + 5] = positionsLength / 3 + vertex1Offset;
171
- }
package/src/index.ts DELETED
@@ -1,11 +0,0 @@
1
- import CogBitmapLayer from './cogbitmaplayer/CogBitmapLayer.ts';
2
- import CogTerrainLayer from './cogterrainlayer/CogTerrainLayer.ts';
3
- import cogtiles from './cogtiles/cogtiles.ts';
4
- import GeoImage from './geoimage/geoimage.ts';
5
-
6
- export default {
7
- CogBitmapLayer,
8
- CogTerrainLayer,
9
- cogtiles,
10
- GeoImage,
11
- };
@@ -1,21 +0,0 @@
1
- function isTileServiceUrl(url:string) {
2
- if (url && url.includes('{x}') && url.includes('{y}') && url.includes('{z}')) {
3
- return true;
4
- }
5
- return false;
6
- }
7
-
8
- function isCogUrl(url:string) {
9
- if (url.includes('.tif') || url.includes('.tiff') || url.includes('.TIF') || url.includes('.TIFF')) {
10
- return true;
11
- }
12
- return false;
13
- }
14
-
15
- function getTileUrl(service:string, x:number, y:number, z:number) {
16
- const url = service.replace('{x}', String(x)).replace('{y}', String(y)).replace('{z}', String(z));
17
-
18
- return url;
19
- }
20
-
21
- export { isTileServiceUrl, isCogUrl, getTileUrl };
package/tsconfig.json DELETED
@@ -1,6 +0,0 @@
1
- {
2
- "extends": "../tsconfig.json",
3
- "compilerOptions": {
4
- "moduleResolution": "nodenext",
5
- }
6
- }