@webviz/subsurface-viewer 0.0.1-alpha.1 → 0.0.2-alpha.1

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.
Files changed (171) hide show
  1. package/dist/package.json +5 -2
  2. package/package.json +6 -3
  3. package/src/DashSubsurfaceViewer.tsx +0 -270
  4. package/src/SubsurfaceViewer.stories.tsx +0 -449
  5. package/src/SubsurfaceViewer.test.tsx +0 -98
  6. package/src/SubsurfaceViewer.tsx +0 -356
  7. package/src/__snapshots__/SubsurfaceViewer.test.tsx.snap +0 -178
  8. package/src/assets/glTF/north_arrow/scene.bin +0 -0
  9. package/src/assets/glTF/north_arrow/scene.gltf +0 -315
  10. package/src/assets/glTF/north_arrow/textures/Arrow5_baseColor.png +0 -0
  11. package/src/assets/glTF/north_arrow/textures/Arrow5_metallicRoughness.png +0 -0
  12. package/src/assets/glTF/north_arrow/textures/Arrow5_normal.png +0 -0
  13. package/src/components/ColorLegend.test.tsx +0 -32
  14. package/src/components/ColorLegend.tsx +0 -80
  15. package/src/components/ColorLegends.test.tsx +0 -97
  16. package/src/components/ColorLegends.tsx +0 -46
  17. package/src/components/DistanceScale.stories.tsx +0 -28
  18. package/src/components/DistanceScale.test.tsx +0 -36
  19. package/src/components/DistanceScale.tsx +0 -84
  20. package/src/components/InfoCard.test.tsx +0 -110
  21. package/src/components/InfoCard.tsx +0 -263
  22. package/src/components/Map.test.tsx +0 -142
  23. package/src/components/Map.tsx +0 -1435
  24. package/src/components/StatusIndicator.test.tsx +0 -14
  25. package/src/components/StatusIndicator.tsx +0 -38
  26. package/src/components/ViewAnnotation.tsx +0 -16
  27. package/src/components/ViewFooter.test.tsx +0 -12
  28. package/src/components/ViewFooter.tsx +0 -30
  29. package/src/components/__snapshots__/ColorLegends.test.tsx.snap +0 -15
  30. package/src/components/__snapshots__/DistanceScale.test.tsx.snap +0 -33
  31. package/src/components/__snapshots__/InfoCard.test.tsx.snap +0 -561
  32. package/src/components/__snapshots__/Map.test.tsx.snap +0 -119
  33. package/src/components/__snapshots__/StatusIndicator.test.tsx.snap +0 -3
  34. package/src/components/__snapshots__/ViewFooter.test.tsx.snap +0 -7
  35. package/src/components/settings/DrawModeSelector.test.tsx +0 -45
  36. package/src/components/settings/DrawModeSelector.tsx +0 -58
  37. package/src/components/settings/DrawModeSelector_performance.test.tsx +0 -35
  38. package/src/components/settings/LayerProperty.test.tsx +0 -35
  39. package/src/components/settings/LayerProperty.tsx +0 -153
  40. package/src/components/settings/LayerProperty_performance.test.tsx +0 -39
  41. package/src/components/settings/LayerSettingsButton.test.tsx +0 -133
  42. package/src/components/settings/LayerSettingsButton.tsx +0 -95
  43. package/src/components/settings/LayersButton.test.tsx +0 -102
  44. package/src/components/settings/LayersButton.tsx +0 -97
  45. package/src/components/settings/NumericInput.test.tsx +0 -25
  46. package/src/components/settings/NumericInput.tsx +0 -67
  47. package/src/components/settings/Settings.tsx +0 -71
  48. package/src/components/settings/SliderInput.test.tsx +0 -28
  49. package/src/components/settings/SliderInput.tsx +0 -71
  50. package/src/components/settings/ToggleButton.test.tsx +0 -25
  51. package/src/components/settings/ToggleButton.tsx +0 -53
  52. package/src/components/settings/__snapshots__/DrawModeSelector.test.tsx.snap +0 -124
  53. package/src/components/settings/__snapshots__/LayerProperty.test.tsx.snap +0 -124
  54. package/src/components/settings/__snapshots__/LayerSettingsButton.test.tsx.snap +0 -36
  55. package/src/components/settings/__snapshots__/LayersButton.test.tsx.snap +0 -83
  56. package/src/components/settings/__snapshots__/NumericInput.test.tsx.snap +0 -123
  57. package/src/components/settings/__snapshots__/SliderInput.test.tsx.snap +0 -244
  58. package/src/components/settings/__snapshots__/ToggleButton.test.tsx.snap +0 -182
  59. package/src/custom.d.ts +0 -9
  60. package/src/index.ts +0 -5
  61. package/src/inputSchema/ColorTables.json +0 -51
  62. package/src/inputSchema/FaultPolygons.json +0 -80
  63. package/src/inputSchema/Grid.json +0 -39
  64. package/src/inputSchema/PieChart.json +0 -72
  65. package/src/inputSchema/WellLog.json +0 -126
  66. package/src/inputSchema/WellLogTemplate.json +0 -136
  67. package/src/inputSchema/WellLogs.json +0 -5
  68. package/src/inputSchema/Wells.json +0 -106
  69. package/src/inputSchema/schemaValidationUtil.tsx +0 -55
  70. package/src/inputSchema/validator.tsx +0 -72
  71. package/src/inputSchema/wellCompletions.json +0 -108
  72. package/src/layers/BoxSelectionLayer/boxSelectionLayer.stories.tsx +0 -172
  73. package/src/layers/BoxSelectionLayer/boxSelectionLayer.tsx +0 -136
  74. package/src/layers/axes/axes-fragment.glsl.ts +0 -15
  75. package/src/layers/axes/axesLayer.stories.tsx +0 -87
  76. package/src/layers/axes/axesLayer.ts +0 -692
  77. package/src/layers/axes/boxLayer.ts +0 -71
  78. package/src/layers/axes/grid-vertex.glsl.ts +0 -14
  79. package/src/layers/axes2d/axes2DLayer.stories.tsx +0 -150
  80. package/src/layers/axes2d/axes2DLayer.ts +0 -841
  81. package/src/layers/axes2d/font-atlas.png +0 -0
  82. package/src/layers/axes2d/label-fragment.glsl.js +0 -37
  83. package/src/layers/axes2d/label-vertex.glsl.js +0 -20
  84. package/src/layers/axes2d/line-fragment.glsl.js +0 -14
  85. package/src/layers/axes2d/line-vertex.glsl.js +0 -13
  86. package/src/layers/colormap/colormap.fs.glsl.ts +0 -42
  87. package/src/layers/colormap/colormapLayer.ts +0 -247
  88. package/src/layers/drawing/drawingLayer.tsx +0 -256
  89. package/src/layers/fault_polygons/faultPolygonsLayer.ts +0 -54
  90. package/src/layers/grid3d/fragment.fs.glsl.ts +0 -109
  91. package/src/layers/grid3d/fragment_lines.glsl.ts +0 -21
  92. package/src/layers/grid3d/grid3dLayer.stories.tsx +0 -172
  93. package/src/layers/grid3d/grid3dLayer.ts +0 -248
  94. package/src/layers/grid3d/privateLayer.ts +0 -292
  95. package/src/layers/grid3d/vertex.glsl.ts +0 -43
  96. package/src/layers/grid3d/vertex_lines.glsl.ts +0 -15
  97. package/src/layers/grid3d/webworker.ts +0 -173
  98. package/src/layers/hillshading2d/hillshading2d.fs.glsl.ts +0 -62
  99. package/src/layers/hillshading2d/hillshading2dLayer.ts +0 -172
  100. package/src/layers/index.ts +0 -35
  101. package/src/layers/intersection/intersectionView.stories.tsx +0 -294
  102. package/src/layers/intersection/unfoldedGeoJsonLayer.ts +0 -92
  103. package/src/layers/map/fragment.fs.glsl.ts +0 -127
  104. package/src/layers/map/fragment_lines.glsl.ts +0 -21
  105. package/src/layers/map/mapLayer.stories.tsx +0 -1369
  106. package/src/layers/map/mapLayer.ts +0 -470
  107. package/src/layers/map/privateMapLayer.ts +0 -317
  108. package/src/layers/map/vertex.glsl.ts +0 -45
  109. package/src/layers/map/vertex_lines.glsl.ts +0 -15
  110. package/src/layers/map/webworker.ts +0 -479
  111. package/src/layers/northarrow/northArrow.stories.tsx +0 -108
  112. package/src/layers/northarrow/northArrow3DLayer.ts +0 -204
  113. package/src/layers/northarrow/northarrow-fragment.glsl.js +0 -14
  114. package/src/layers/northarrow/northarrow-vertex.glsl.js +0 -13
  115. package/src/layers/piechart/fragment.glsl.js +0 -42
  116. package/src/layers/piechart/pieChartLayer.ts +0 -246
  117. package/src/layers/piechart/vertex.glsl.js +0 -42
  118. package/src/layers/points/pointsLayer.stories.tsx +0 -141
  119. package/src/layers/points/pointsLayer.ts +0 -143
  120. package/src/layers/polylines/polylinesLayer.stories.tsx +0 -144
  121. package/src/layers/polylines/polylinesLayer.ts +0 -263
  122. package/src/layers/selectable_geojson/selectableGeoJsonLayer.ts +0 -25
  123. package/src/layers/shader_modules/decoder.fs.glsl.ts +0 -41
  124. package/src/layers/shader_modules/decoder.ts +0 -46
  125. package/src/layers/shader_modules/index.ts +0 -1
  126. package/src/layers/terrain/map3DLayer.stories.tsx +0 -340
  127. package/src/layers/terrain/map3DLayer.ts +0 -556
  128. package/src/layers/terrain/terrainMapLayer.ts +0 -334
  129. package/src/layers/terrain/terrainmap.fs.glsl.ts +0 -134
  130. package/src/layers/triangle/fragment.fs.glsl.ts +0 -126
  131. package/src/layers/triangle/fragment_lines.glsl.ts +0 -21
  132. package/src/layers/triangle/privateTriangleLayer.ts +0 -203
  133. package/src/layers/triangle/test_data/surfacePoints.ts +0 -4344
  134. package/src/layers/triangle/test_data/surfaceTriangles.ts +0 -7392
  135. package/src/layers/triangle/triangleLayer.stories.tsx +0 -191
  136. package/src/layers/triangle/triangleLayer.ts +0 -273
  137. package/src/layers/triangle/vertex.glsl.ts +0 -35
  138. package/src/layers/triangle/vertex_lines.glsl.ts +0 -15
  139. package/src/layers/triangle/webworker.ts +0 -165
  140. package/src/layers/utils/glsl.d.ts +0 -4
  141. package/src/layers/utils/layerTools.ts +0 -182
  142. package/src/layers/utils/propertyMapTools.ts +0 -43
  143. package/src/layers/wells/utils/spline.ts +0 -318
  144. package/src/layers/wells/wellsLayer.stories.tsx +0 -625
  145. package/src/layers/wells/wellsLayer.ts +0 -1377
  146. package/src/redux/actions.ts +0 -8
  147. package/src/redux/reducer.ts +0 -43
  148. package/src/redux/store.ts +0 -15
  149. package/src/redux/types.ts +0 -114
  150. package/src/storybook/SubsurfaceViewer.stories.jsx +0 -644
  151. package/src/storybook/components/InfoCard.stories.jsx +0 -39
  152. package/src/storybook/components/colorLegends/ContinuousLegend.stories.jsx +0 -32
  153. package/src/storybook/components/colorLegends/DiscreteLegend.stories.jsx +0 -33
  154. package/src/storybook/components/colorLegends/IndividualScaleForMap.stories.jsx +0 -99
  155. package/src/storybook/components/colorLegends/SingleScaleForMap.stories.jsx +0 -120
  156. package/src/storybook/components/settings/LayerSettingsButton.stories.jsx +0 -34
  157. package/src/storybook/components/settings/NumericInput.stories.jsx +0 -17
  158. package/src/storybook/components/settings/ToggleButton.stories.jsx +0 -16
  159. package/src/storybook/schemaValidation/sampleData.js +0 -177
  160. package/src/storybook/schemaValidation/schemaValidation.stories.jsx +0 -91
  161. package/src/test/TestWrapper.tsx +0 -13
  162. package/src/utils/configuration.ts +0 -61
  163. package/src/utils/fit-bounds.js +0 -85
  164. package/src/utils/measurement.ts +0 -61
  165. package/src/utils/northArrow.ts +0 -4
  166. package/src/utils/specExtractor.ts +0 -36
  167. package/src/viewports/index.js +0 -1
  168. package/src/viewports/intersectionViewport.ts +0 -137
  169. package/src/views/index.js +0 -1
  170. package/src/views/intersectionView.ts +0 -38
  171. package/tsconfig.json +0 -7
@@ -1,470 +0,0 @@
1
- import { CompositeLayer, Color, UpdateParameters } from "@deck.gl/core/typed";
2
- import privateMapLayer, { Material } from "./privateMapLayer";
3
- import { ExtendedLayerProps, colorMapFunctionType } from "../utils/layerTools";
4
- import { getModelMatrix } from "../utils/layerTools";
5
- import { isEqual } from "lodash";
6
- import * as png from "@vivaxy/png";
7
- import { makeFullMesh } from "./webworker";
8
- import { Matrix4 } from "math.gl";
9
-
10
- // Rotate x,y around x0, y0 rad radians
11
- function rotate(
12
- x: number,
13
- y: number,
14
- x0: number,
15
- y0: number,
16
- rad: number
17
- ): [number, number] {
18
- const xRot = Math.cos(rad) * (x - x0) - Math.sin(rad) * (y - y0) + x0; // eslint-disable-line
19
- const yRot = Math.sin(rad) * (x - x0) + Math.cos(rad) * (y - y0) + y0; // eslint-disable-line
20
- return [xRot, yRot];
21
- }
22
-
23
- // This type describes the mesh' extent in the horizontal plane.
24
- type Frame = {
25
- /** mesh origin
26
- */
27
- origin: [number, number];
28
-
29
- /** cells size in each direction.
30
- */
31
- increment: [number, number];
32
-
33
- /** number of nodes in each direction.
34
- */
35
- count: [number, number];
36
-
37
- /** Rotates map counterclockwise in degrees around 'rotPoint' specified below.
38
- */
39
- rotDeg?: number;
40
-
41
- /** Point to rotate around using 'rotDeg'. Defaults to mesh origin.
42
- */
43
- rotPoint?: [number, number];
44
- };
45
-
46
- export type Params = {
47
- meshData: Float32Array;
48
- propertiesData: Float32Array;
49
- isMesh: boolean;
50
- frame: Frame;
51
- smoothShading: boolean;
52
- };
53
-
54
- async function load_mesh_and_properties(
55
- meshData: string | number[],
56
- propertiesData: string | number[],
57
- ZIncreasingDownwards: boolean
58
- ) {
59
- // Keep
60
- //const t0 = performance.now();
61
-
62
- const isMesh = typeof meshData !== "undefined";
63
- const isProperties = typeof propertiesData !== "undefined";
64
-
65
- if (!isMesh && !isProperties) {
66
- console.error("Error. One or both of texture and mesh must be given!");
67
- }
68
-
69
- if (isMesh && !isProperties) {
70
- propertiesData = meshData;
71
- }
72
-
73
- //-- PROPERTIES. --
74
- let properties: Float32Array;
75
- if (Array.isArray(propertiesData)) {
76
- // Input data is native javascript array.
77
- properties = new Float32Array(propertiesData);
78
- } else {
79
- // Input data is an URL.
80
- const response = await fetch(propertiesData);
81
- if (!response.ok) {
82
- console.error("Could not load ", propertiesData);
83
- }
84
-
85
- const blob = await response.blob();
86
- const contentType = response.headers.get("content-type");
87
- const isPng = contentType === "image/png";
88
- if (isPng) {
89
- // Load as Png with abolute float values.
90
- properties = await new Promise((resolve) => {
91
- const fileReader = new FileReader();
92
- fileReader.readAsArrayBuffer(blob);
93
- fileReader.onload = () => {
94
- const arrayBuffer = fileReader.result;
95
- const imgData = png.decode(arrayBuffer as ArrayBuffer);
96
- const data = imgData.data; // array of int's
97
-
98
- const n = data.length;
99
- const buffer = new ArrayBuffer(n);
100
- const view = new DataView(buffer);
101
- for (let i = 0; i < n; i++) {
102
- view.setUint8(i, data[i]);
103
- }
104
-
105
- const floatArray = new Float32Array(buffer);
106
- resolve(floatArray);
107
- };
108
- });
109
- } else {
110
- // Load as binary array of floats.
111
- const buffer = await blob.arrayBuffer();
112
- properties = new Float32Array(buffer);
113
- }
114
- }
115
-
116
- //-- MESH --
117
- let mesh: Float32Array = new Float32Array();
118
- if (isMesh) {
119
- if (Array.isArray(meshData)) {
120
- // Input data is native javascript array.
121
- mesh = new Float32Array(meshData);
122
- } else {
123
- // Input data is an URL.
124
- const response_mesh = await fetch(meshData);
125
- if (!response_mesh.ok) {
126
- console.error("Could not load mesh");
127
- }
128
-
129
- const blob_mesh = await response_mesh.blob();
130
- const contentType_mesh = response_mesh.headers.get("content-type");
131
- const isPng_mesh = contentType_mesh === "image/png";
132
- if (isPng_mesh) {
133
- // Load as Png with abolute float values.
134
- mesh = await new Promise((resolve) => {
135
- const fileReader = new FileReader();
136
- fileReader.readAsArrayBuffer(blob_mesh);
137
- fileReader.onload = () => {
138
- const arrayBuffer = fileReader.result;
139
- const imgData = png.decode(arrayBuffer as ArrayBuffer);
140
- const data = imgData.data; // array of int's
141
-
142
- const n = data.length;
143
- const buffer = new ArrayBuffer(n);
144
- const view = new DataView(buffer);
145
- for (let i = 0; i < n; i++) {
146
- view.setUint8(i, data[i]);
147
- }
148
-
149
- const floatArray = new Float32Array(buffer);
150
- resolve(floatArray);
151
- };
152
- });
153
- } else {
154
- // Load as binary array of floats.
155
- const buffer = await blob_mesh.arrayBuffer();
156
- mesh = new Float32Array(buffer);
157
- }
158
- }
159
- }
160
-
161
- if (!ZIncreasingDownwards) {
162
- for (let i = 0; i < mesh.length; i++) {
163
- mesh[i] *= -1;
164
- }
165
- }
166
-
167
- //const t1 = performance.now();
168
- // Keep this.
169
- //console.log(`Task loading took ${(t1 - t0) * 0.001} seconds.`);
170
-
171
- return Promise.all([isMesh, mesh, properties]);
172
- }
173
-
174
- export interface MapLayerProps<D> extends ExtendedLayerProps<D> {
175
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
176
- setReportedBoundingBox?: any;
177
-
178
- /** Url to the height (z values) mesh.
179
- */
180
- meshUrl: string; // Deprecated
181
- meshData: string | number[];
182
-
183
- /** Horizontal extent of the terrain mesh. Format:
184
- {
185
- origin: [number, number]; // mesh origin in x, y
186
- increment: [number, number]; // cell size dx, dy
187
- count: [number, number]; // number of nodes in both directions.
188
- }
189
- */
190
- frame: Frame;
191
-
192
- /** Url to the properties (ex, poro or perm values).
193
- * If the number of property values equals the number of depth values
194
- * the property values will be placed at the nodes and the cell (4 neigboring nodes)
195
- * color will be linearly interpolated over the cell.
196
- * If the number of property values equals one less than the depth values in
197
- * each direction then the property values will be pr cell and the cell will be constant
198
- * colored.
199
- */
200
- propertiesUrl: string; // Deprecated
201
- propertiesData: string | number[];
202
-
203
- /** Contourlines reference point and interval.
204
- * A value of [-1.0, -1.0] will disable contour lines.
205
- * Contour lines will also not be activated if cells are constant colored
206
- * and "isContoursDepth" is set to false. I.e. constant properties within cells and contourlines
207
- * to be calculated for properties and not depths.
208
- * default value: [-1.0, -1.0]
209
- */
210
- contours: [number, number];
211
-
212
- /** Contourlines may be calculated either on depth/z-value or on property value
213
- * If this is set to false, lines will follow properties instead of depth.
214
- * In 2D mode this is always the case regardless.
215
- * default: true
216
- */
217
- isContoursDepth: boolean;
218
-
219
- /** Enable gridlines.
220
- * default: false.
221
- */
222
- gridLines: boolean;
223
-
224
- /** Name of color map. E.g "PORO"
225
- */
226
- colorMapName: string;
227
-
228
- /** Use color map in this range.
229
- */
230
- colorMapRange: [number, number];
231
-
232
- /** Clamp colormap to this color at ends.
233
- * Given as array of three values (r,g,b) e.g: [255, 0, 0]
234
- * If not set or set to true, it will clamp to color map min and max values.
235
- * If set to false the clamp color will be completely transparent.
236
- */
237
- colorMapClampColor: Color | undefined | boolean;
238
-
239
- /** Optional function property.
240
- * If defined this function will override the color map.
241
- * Takes a value in the range [0,1] and returns a color.
242
- * E.g. (x) => [x * 255, x * 255, x * 255]
243
- * May also be set as constant color:
244
- * E.g. [255, 0, 0] for constant red surface.
245
- */
246
- colorMapFunction?: colorMapFunctionType;
247
-
248
- /** Surface material properties.
249
- * material: true = default material, coloring depends on surface orientation and lighting.
250
- * false = no material, coloring is independent on surface orientation and lighting.
251
- * or full spec:
252
- * material: {
253
- * ambient: 0.35,
254
- * diffuse: 0.6,
255
- * shininess: 32,
256
- * specularColor: [255, 255, 255],
257
- * }
258
- */
259
- material: Material;
260
-
261
- /** Will calculate normals for each vertex and enable phong shading.
262
- * If not set the shader will calculate constant normal for each triangle.
263
- */
264
- smoothShading: boolean;
265
-
266
- /** Enable/disable depth testing when rendering layer. Default true.
267
- */
268
- depthTest: boolean;
269
-
270
- /** If true means that input z values are interpreted as depths.
271
- * For example depth of z = 1000 corresponds to -1000 on the z axis. Default true.
272
- */
273
- ZIncreasingDownwards: boolean;
274
- }
275
-
276
- const defaultProps = {
277
- "@@type": "MapLayer",
278
- name: "Map",
279
- id: "map3d-layer-float32",
280
- pickable: true,
281
- visible: true,
282
- bounds: { type: "object", value: null, false: true, compare: true },
283
- colorMapRange: { type: "array" },
284
- contours: [-1.0, -1.0],
285
- // If contour lines should follow depth or properties.
286
- isContoursDepth: true,
287
- gridLines: false,
288
- smoothShading: true,
289
- material: true,
290
- depthTest: true,
291
- ZIncreasingDownwards: true,
292
- };
293
-
294
- export default class MapLayer extends CompositeLayer<MapLayerProps<unknown>> {
295
- rebuildData(reportBoundingBox: boolean): void {
296
- if (typeof this.props.meshUrl !== "undefined") {
297
- console.warn('"meshUrl" is deprecated. Use "meshData"');
298
- }
299
-
300
- if (typeof this.props.propertiesUrl !== "undefined") {
301
- console.warn('"propertiesUrl" is deprecated. Use "propertiesData"');
302
- }
303
-
304
- const meshData = this.props.meshData ?? this.props.meshUrl;
305
- const propertiesData =
306
- this.props.propertiesData ?? this.props.propertiesUrl;
307
-
308
- const p = load_mesh_and_properties(
309
- meshData,
310
- propertiesData,
311
- this.props.ZIncreasingDownwards
312
- );
313
-
314
- p.then(([isMesh, meshData, propertiesData]) => {
315
- // Using inline web worker for calculating the triangle mesh from
316
- // loaded input data so not to halt the GUI thread.
317
- const blob = new Blob(
318
- ["self.onmessage = ", makeFullMesh.toString()],
319
- { type: "text/javascript" }
320
- );
321
- const url = URL.createObjectURL(blob);
322
- const webWorker = new Worker(url);
323
-
324
- const webworkerParams = {
325
- meshData,
326
- propertiesData,
327
- isMesh,
328
- frame: this.props.frame,
329
- smoothShading: this.props.smoothShading,
330
- };
331
-
332
- webWorker.postMessage(webworkerParams);
333
- webWorker.onmessage = (e) => {
334
- const [mesh, mesh_lines, meshZValueRange, propertyValueRange] =
335
- e.data;
336
-
337
- this.setState({
338
- mesh,
339
- mesh_lines,
340
- propertyValueRange,
341
- });
342
-
343
- if (
344
- typeof this.props.setReportedBoundingBox !== "undefined" &&
345
- reportBoundingBox
346
- ) {
347
- const xinc = this.props.frame?.increment?.[0] ?? 0;
348
- const yinc = this.props.frame?.increment?.[1] ?? 0;
349
-
350
- const nnodes_x = this.props.frame?.count?.[0] ?? 2; // number of nodes in x direction
351
- const nnodes_y = this.props.frame?.count?.[1] ?? 2;
352
-
353
- const xMin = this.props.frame?.origin?.[0] ?? 0;
354
- const yMin = this.props.frame?.origin?.[1] ?? 0;
355
- const zMin = -meshZValueRange[0];
356
- const xMax = xMin + xinc * (nnodes_x - 1);
357
- const yMax = yMin + yinc * (nnodes_y - 1);
358
- const zMax = -meshZValueRange[1];
359
-
360
- // If map is rotated the bounding box must reflect that.
361
- const center =
362
- this.props.frame.rotPoint ?? this.props.frame.origin;
363
- const rotDeg = this.props.frame.rotDeg ?? 0;
364
- const rotRad = (rotDeg * (2.0 * Math.PI)) / 360.0;
365
-
366
- // Rotate x,y around "center" "rad" radians
367
- const [x0, y0] = rotate(xMin, yMin, center[0], center[1], rotRad); // eslint-disable-line
368
- const [x1, y1] = rotate(xMax, yMin, center[0], center[1], rotRad); // eslint-disable-line
369
- const [x2, y2] = rotate(xMax, yMax, center[0], center[1], rotRad); // eslint-disable-line
370
- const [x3, y3] = rotate(xMin, yMax, center[0], center[1], rotRad); // eslint-disable-line
371
-
372
- // Rotated bounds in x/y plane.
373
- const x_min = Math.min(x0, x1, x2, x3);
374
- const x_max = Math.max(x0, x1, x2, x3);
375
- const y_min = Math.min(y0, y1, y2, y3);
376
- const y_max = Math.max(y0, y1, y2, y3);
377
-
378
- this.props.setReportedBoundingBox([
379
- x_min,
380
- y_min,
381
- zMin,
382
- x_max,
383
- y_max,
384
- zMax,
385
- ]);
386
- }
387
-
388
- webWorker.terminate();
389
- };
390
- });
391
- }
392
-
393
- initializeState(): void {
394
- const reportBoundingBox = true;
395
- this.rebuildData(reportBoundingBox);
396
- }
397
-
398
- updateState({ props, oldProps }: UpdateParameters<MapLayer>): void {
399
- const needs_reload =
400
- !isEqual(props.meshUrl, oldProps.meshUrl) ||
401
- !isEqual(props.propertiesUrl, oldProps.propertiesUrl) ||
402
- !isEqual(props.meshData, oldProps.meshData) ||
403
- !isEqual(props.propertiesData, oldProps.propertiesData) ||
404
- !isEqual(props.frame, oldProps.frame) ||
405
- !isEqual(
406
- props.ZIncreasingDownwards,
407
- oldProps.ZIncreasingDownwards
408
- ) ||
409
- !isEqual(props.gridLines, oldProps.gridLines);
410
-
411
- if (needs_reload) {
412
- const reportBoundingBox = false;
413
- this.rebuildData(reportBoundingBox);
414
- }
415
- }
416
-
417
- renderLayers(): [privateMapLayer?] {
418
- if (Object.keys(this.state).length === 0) {
419
- return [];
420
- }
421
- const [minX, minY] = this.props.frame.origin;
422
- const center = this.props.frame.rotPoint ?? [minX, minY];
423
-
424
- const rotatingModelMatrix = getModelMatrix(
425
- this.props.frame.rotDeg ?? 0,
426
- center[0],
427
- center[1]
428
- );
429
-
430
- const isMesh =
431
- (typeof this.props.meshUrl !== "undefined" &&
432
- this.props.meshUrl !== "") ||
433
- (typeof this.props.meshData !== "undefined" &&
434
- this.props.meshData !== "");
435
-
436
- const isModelMatrix =
437
- typeof this.props.modelMatrix !== "undefined" &&
438
- this.props.modelMatrix !== null;
439
-
440
- if (isModelMatrix) {
441
- rotatingModelMatrix.multiplyRight(
442
- this.props.modelMatrix as Matrix4
443
- );
444
- }
445
-
446
- const layer = new privateMapLayer(
447
- this.getSubLayerProps({
448
- mesh: this.state["mesh"],
449
- meshLines: this.state["mesh_lines"],
450
- pickable: this.props.pickable,
451
- modelMatrix: rotatingModelMatrix,
452
- contours: this.props.contours,
453
- gridLines: this.props.gridLines,
454
- isContoursDepth: !isMesh ? false : this.props.isContoursDepth,
455
- colorMapName: this.props.colorMapName,
456
- colorMapRange: this.props.colorMapRange,
457
- colorMapClampColor: this.props.colorMapClampColor,
458
- colorMapFunction: this.props.colorMapFunction,
459
- propertyValueRange: this.state["propertyValueRange"],
460
- material: this.props.material,
461
- smoothShading: this.props.smoothShading,
462
- depthTest: this.props.depthTest,
463
- })
464
- );
465
- return [layer];
466
- }
467
- }
468
-
469
- MapLayer.layerName = "MapLayer";
470
- MapLayer.defaultProps = defaultProps;