@webviz/subsurface-viewer 0.0.1-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 (501) hide show
  1. package/dist/DashSubsurfaceViewer.d.ts +56 -0
  2. package/dist/DashSubsurfaceViewer.js +160 -0
  3. package/dist/DashSubsurfaceViewer.js.map +1 -0
  4. package/dist/SubsurfaceViewer.d.ts +65 -0
  5. package/dist/SubsurfaceViewer.js +208 -0
  6. package/dist/SubsurfaceViewer.js.map +1 -0
  7. package/dist/assets/glTF/north_arrow/scene.bin +0 -0
  8. package/dist/assets/glTF/north_arrow/scene.gltf +315 -0
  9. package/dist/assets/glTF/north_arrow/textures/Arrow5_baseColor.png +0 -0
  10. package/dist/assets/glTF/north_arrow/textures/Arrow5_metallicRoughness.png +0 -0
  11. package/dist/assets/glTF/north_arrow/textures/Arrow5_normal.png +0 -0
  12. package/dist/components/ColorLegend.d.ts +26 -0
  13. package/dist/components/ColorLegend.js +19 -0
  14. package/dist/components/ColorLegend.js.map +1 -0
  15. package/dist/components/ColorLegends.d.ts +12 -0
  16. package/dist/components/ColorLegends.js +10 -0
  17. package/dist/components/ColorLegends.js.map +1 -0
  18. package/dist/components/DistanceScale.d.ts +12 -0
  19. package/dist/components/DistanceScale.js +45 -0
  20. package/dist/components/DistanceScale.js.map +1 -0
  21. package/dist/components/InfoCard.d.ts +11 -0
  22. package/dist/components/InfoCard.js +149 -0
  23. package/dist/components/InfoCard.js.map +1 -0
  24. package/dist/components/Map.d.ts +158 -0
  25. package/dist/components/Map.js +867 -0
  26. package/dist/components/Map.js.map +1 -0
  27. package/dist/components/StatusIndicator.d.ts +8 -0
  28. package/dist/components/StatusIndicator.js +20 -0
  29. package/dist/components/StatusIndicator.js.map +1 -0
  30. package/dist/components/ViewAnnotation.d.ts +7 -0
  31. package/dist/components/ViewAnnotation.js +13 -0
  32. package/dist/components/ViewAnnotation.js.map +1 -0
  33. package/dist/components/ViewFooter.d.ts +6 -0
  34. package/dist/components/ViewFooter.js +21 -0
  35. package/dist/components/ViewFooter.js.map +1 -0
  36. package/dist/components/settings/DrawModeSelector.d.ts +18 -0
  37. package/dist/components/settings/DrawModeSelector.js +20 -0
  38. package/dist/components/settings/DrawModeSelector.js.map +1 -0
  39. package/dist/components/settings/LayerProperty.d.ts +6 -0
  40. package/dist/components/settings/LayerProperty.js +39 -0
  41. package/dist/components/settings/LayerProperty.js.map +1 -0
  42. package/dist/components/settings/LayerSettingsButton.d.ts +7 -0
  43. package/dist/components/settings/LayerSettingsButton.js +51 -0
  44. package/dist/components/settings/LayerSettingsButton.js.map +1 -0
  45. package/dist/components/settings/LayersButton.d.ts +8 -0
  46. package/dist/components/settings/LayersButton.js +45 -0
  47. package/dist/components/settings/LayersButton.js.map +1 -0
  48. package/dist/components/settings/NumericInput.d.ts +20 -0
  49. package/dist/components/settings/NumericInput.js +25 -0
  50. package/dist/components/settings/NumericInput.js.map +1 -0
  51. package/dist/components/settings/Settings.d.ts +7 -0
  52. package/dist/components/settings/Settings.js +39 -0
  53. package/dist/components/settings/Settings.js.map +1 -0
  54. package/dist/components/settings/SliderInput.d.ts +29 -0
  55. package/dist/components/settings/SliderInput.js +21 -0
  56. package/dist/components/settings/SliderInput.js.map +1 -0
  57. package/dist/components/settings/ToggleButton.d.ts +17 -0
  58. package/dist/components/settings/ToggleButton.js +19 -0
  59. package/dist/components/settings/ToggleButton.js.map +1 -0
  60. package/dist/index.d.ts +2 -0
  61. package/dist/index.js +3 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/inputSchema/ColorTables.json +51 -0
  64. package/dist/inputSchema/FaultPolygons.json +80 -0
  65. package/dist/inputSchema/Grid.json +39 -0
  66. package/dist/inputSchema/PieChart.json +72 -0
  67. package/dist/inputSchema/WellLog.json +126 -0
  68. package/dist/inputSchema/WellLogTemplate.json +136 -0
  69. package/dist/inputSchema/WellLogs.json +5 -0
  70. package/dist/inputSchema/Wells.json +106 -0
  71. package/dist/inputSchema/schemaValidationUtil.d.ts +5 -0
  72. package/dist/inputSchema/schemaValidationUtil.js +48 -0
  73. package/dist/inputSchema/schemaValidationUtil.js.map +1 -0
  74. package/dist/inputSchema/validator.d.ts +1 -0
  75. package/dist/inputSchema/validator.js +64 -0
  76. package/dist/inputSchema/validator.js.map +1 -0
  77. package/dist/inputSchema/wellCompletions.json +108 -0
  78. package/dist/layers/BoxSelectionLayer/boxSelectionLayer.d.ts +37 -0
  79. package/dist/layers/BoxSelectionLayer/boxSelectionLayer.js +86 -0
  80. package/dist/layers/BoxSelectionLayer/boxSelectionLayer.js.map +1 -0
  81. package/dist/layers/axes/axes-fragment.glsl.d.ts +2 -0
  82. package/dist/layers/axes/axes-fragment.glsl.js +15 -0
  83. package/dist/layers/axes/axes-fragment.glsl.js.map +1 -0
  84. package/dist/layers/axes/axesLayer.d.ts +38 -0
  85. package/dist/layers/axes/axesLayer.js +485 -0
  86. package/dist/layers/axes/axesLayer.js.map +1 -0
  87. package/dist/layers/axes/boxLayer.d.ts +20 -0
  88. package/dist/layers/axes/boxLayer.js +52 -0
  89. package/dist/layers/axes/boxLayer.js.map +1 -0
  90. package/dist/layers/axes/grid-vertex.glsl.d.ts +2 -0
  91. package/dist/layers/axes/grid-vertex.glsl.js +14 -0
  92. package/dist/layers/axes/grid-vertex.glsl.js.map +1 -0
  93. package/dist/layers/axes2d/axes2DLayer.d.ts +58 -0
  94. package/dist/layers/axes2d/axes2DLayer.js +613 -0
  95. package/dist/layers/axes2d/axes2DLayer.js.map +1 -0
  96. package/dist/layers/axes2d/font-atlas.png +0 -0
  97. package/dist/layers/axes2d/label-fragment.glsl.d.ts +2 -0
  98. package/dist/layers/axes2d/label-fragment.glsl.js +38 -0
  99. package/dist/layers/axes2d/label-fragment.glsl.js.map +1 -0
  100. package/dist/layers/axes2d/label-vertex.glsl.d.ts +2 -0
  101. package/dist/layers/axes2d/label-vertex.glsl.js +21 -0
  102. package/dist/layers/axes2d/label-vertex.glsl.js.map +1 -0
  103. package/dist/layers/axes2d/line-fragment.glsl.d.ts +2 -0
  104. package/dist/layers/axes2d/line-fragment.glsl.js +15 -0
  105. package/dist/layers/axes2d/line-fragment.glsl.js.map +1 -0
  106. package/dist/layers/axes2d/line-vertex.glsl.d.ts +2 -0
  107. package/dist/layers/axes2d/line-vertex.glsl.js +14 -0
  108. package/dist/layers/axes2d/line-vertex.glsl.js.map +1 -0
  109. package/dist/layers/colormap/colormap.fs.glsl.d.ts +2 -0
  110. package/dist/layers/colormap/colormap.fs.glsl.js +42 -0
  111. package/dist/layers/colormap/colormap.fs.glsl.js.map +1 -0
  112. package/dist/layers/colormap/colormapLayer.d.ts +24 -0
  113. package/dist/layers/colormap/colormapLayer.js +150 -0
  114. package/dist/layers/colormap/colormapLayer.js.map +1 -0
  115. package/dist/layers/drawing/drawingLayer.d.ts +17 -0
  116. package/dist/layers/drawing/drawingLayer.js +202 -0
  117. package/dist/layers/drawing/drawingLayer.js.map +1 -0
  118. package/dist/layers/fault_polygons/faultPolygonsLayer.d.ts +9 -0
  119. package/dist/layers/fault_polygons/faultPolygonsLayer.js +43 -0
  120. package/dist/layers/fault_polygons/faultPolygonsLayer.js.map +1 -0
  121. package/dist/layers/grid3d/fragment.fs.glsl.d.ts +2 -0
  122. package/dist/layers/grid3d/fragment.fs.glsl.js +109 -0
  123. package/dist/layers/grid3d/fragment.fs.glsl.js.map +1 -0
  124. package/dist/layers/grid3d/fragment_lines.glsl.d.ts +2 -0
  125. package/dist/layers/grid3d/fragment_lines.glsl.js +21 -0
  126. package/dist/layers/grid3d/fragment_lines.glsl.js.map +1 -0
  127. package/dist/layers/grid3d/grid3dLayer.d.ts +73 -0
  128. package/dist/layers/grid3d/grid3dLayer.js +134 -0
  129. package/dist/layers/grid3d/grid3dLayer.js.map +1 -0
  130. package/dist/layers/grid3d/privateLayer.d.ts +73 -0
  131. package/dist/layers/grid3d/privateLayer.js +174 -0
  132. package/dist/layers/grid3d/privateLayer.js.map +1 -0
  133. package/dist/layers/grid3d/vertex.glsl.d.ts +2 -0
  134. package/dist/layers/grid3d/vertex.glsl.js +43 -0
  135. package/dist/layers/grid3d/vertex.glsl.js.map +1 -0
  136. package/dist/layers/grid3d/vertex_lines.glsl.d.ts +2 -0
  137. package/dist/layers/grid3d/vertex_lines.glsl.js +16 -0
  138. package/dist/layers/grid3d/vertex_lines.glsl.js.map +1 -0
  139. package/dist/layers/grid3d/webworker.d.ts +4 -0
  140. package/dist/layers/grid3d/webworker.js +140 -0
  141. package/dist/layers/grid3d/webworker.js.map +1 -0
  142. package/dist/layers/hillshading2d/hillshading2d.fs.glsl.d.ts +2 -0
  143. package/dist/layers/hillshading2d/hillshading2d.fs.glsl.js +62 -0
  144. package/dist/layers/hillshading2d/hillshading2d.fs.glsl.js.map +1 -0
  145. package/dist/layers/hillshading2d/hillshading2dLayer.d.ts +22 -0
  146. package/dist/layers/hillshading2d/hillshading2dLayer.js +101 -0
  147. package/dist/layers/hillshading2d/hillshading2dLayer.js.map +1 -0
  148. package/dist/layers/index.d.ts +34 -0
  149. package/dist/layers/index.js +19 -0
  150. package/dist/layers/index.js.map +1 -0
  151. package/dist/layers/intersection/unfoldedGeoJsonLayer.d.ts +10 -0
  152. package/dist/layers/intersection/unfoldedGeoJsonLayer.js +64 -0
  153. package/dist/layers/intersection/unfoldedGeoJsonLayer.js.map +1 -0
  154. package/dist/layers/map/fragment.fs.glsl.d.ts +2 -0
  155. package/dist/layers/map/fragment.fs.glsl.js +127 -0
  156. package/dist/layers/map/fragment.fs.glsl.js.map +1 -0
  157. package/dist/layers/map/fragment_lines.glsl.d.ts +2 -0
  158. package/dist/layers/map/fragment_lines.glsl.js +21 -0
  159. package/dist/layers/map/fragment_lines.glsl.js.map +1 -0
  160. package/dist/layers/map/mapLayer.d.ts +120 -0
  161. package/dist/layers/map/mapLayer.js +275 -0
  162. package/dist/layers/map/mapLayer.js.map +1 -0
  163. package/dist/layers/map/privateMapLayer.d.ts +76 -0
  164. package/dist/layers/map/privateMapLayer.js +190 -0
  165. package/dist/layers/map/privateMapLayer.js.map +1 -0
  166. package/dist/layers/map/vertex.glsl.d.ts +2 -0
  167. package/dist/layers/map/vertex.glsl.js +45 -0
  168. package/dist/layers/map/vertex.glsl.js.map +1 -0
  169. package/dist/layers/map/vertex_lines.glsl.d.ts +2 -0
  170. package/dist/layers/map/vertex_lines.glsl.js +16 -0
  171. package/dist/layers/map/vertex_lines.glsl.js.map +1 -0
  172. package/dist/layers/map/webworker.d.ts +4 -0
  173. package/dist/layers/map/webworker.js +362 -0
  174. package/dist/layers/map/webworker.js.map +1 -0
  175. package/dist/layers/northarrow/northArrow3DLayer.d.ts +20 -0
  176. package/dist/layers/northarrow/northArrow3DLayer.js +144 -0
  177. package/dist/layers/northarrow/northArrow3DLayer.js.map +1 -0
  178. package/dist/layers/northarrow/northarrow-fragment.glsl.d.ts +2 -0
  179. package/dist/layers/northarrow/northarrow-fragment.glsl.js +15 -0
  180. package/dist/layers/northarrow/northarrow-fragment.glsl.js.map +1 -0
  181. package/dist/layers/northarrow/northarrow-vertex.glsl.d.ts +2 -0
  182. package/dist/layers/northarrow/northarrow-vertex.glsl.js +14 -0
  183. package/dist/layers/northarrow/northarrow-vertex.glsl.js.map +1 -0
  184. package/dist/layers/piechart/fragment.glsl.d.ts +2 -0
  185. package/dist/layers/piechart/fragment.glsl.js +43 -0
  186. package/dist/layers/piechart/fragment.glsl.js.map +1 -0
  187. package/dist/layers/piechart/pieChartLayer.d.ts +40 -0
  188. package/dist/layers/piechart/pieChartLayer.js +174 -0
  189. package/dist/layers/piechart/pieChartLayer.js.map +1 -0
  190. package/dist/layers/piechart/vertex.glsl.d.ts +2 -0
  191. package/dist/layers/piechart/vertex.glsl.js +43 -0
  192. package/dist/layers/piechart/vertex.glsl.js.map +1 -0
  193. package/dist/layers/points/pointsLayer.d.ts +34 -0
  194. package/dist/layers/points/pointsLayer.js +78 -0
  195. package/dist/layers/points/pointsLayer.js.map +1 -0
  196. package/dist/layers/polylines/polylinesLayer.d.ts +50 -0
  197. package/dist/layers/polylines/polylinesLayer.js +157 -0
  198. package/dist/layers/polylines/polylinesLayer.js.map +1 -0
  199. package/dist/layers/selectable_geojson/selectableGeoJsonLayer.d.ts +6 -0
  200. package/dist/layers/selectable_geojson/selectableGeoJsonLayer.js +22 -0
  201. package/dist/layers/selectable_geojson/selectableGeoJsonLayer.js.map +1 -0
  202. package/dist/layers/shader_modules/decoder.d.ts +15 -0
  203. package/dist/layers/shader_modules/decoder.fs.glsl.d.ts +2 -0
  204. package/dist/layers/shader_modules/decoder.fs.glsl.js +40 -0
  205. package/dist/layers/shader_modules/decoder.fs.glsl.js.map +1 -0
  206. package/dist/layers/shader_modules/decoder.js +29 -0
  207. package/dist/layers/shader_modules/decoder.js.map +1 -0
  208. package/dist/layers/shader_modules/index.d.ts +1 -0
  209. package/dist/layers/shader_modules/index.js +2 -0
  210. package/dist/layers/shader_modules/index.js.map +1 -0
  211. package/dist/layers/terrain/map3DLayer.d.ts +42 -0
  212. package/dist/layers/terrain/map3DLayer.js +324 -0
  213. package/dist/layers/terrain/map3DLayer.js.map +1 -0
  214. package/dist/layers/terrain/terrainMapLayer.d.ts +45 -0
  215. package/dist/layers/terrain/terrainMapLayer.js +183 -0
  216. package/dist/layers/terrain/terrainMapLayer.js.map +1 -0
  217. package/dist/layers/terrain/terrainmap.fs.glsl.d.ts +2 -0
  218. package/dist/layers/terrain/terrainmap.fs.glsl.js +134 -0
  219. package/dist/layers/terrain/terrainmap.fs.glsl.js.map +1 -0
  220. package/dist/layers/triangle/fragment.fs.glsl.d.ts +2 -0
  221. package/dist/layers/triangle/fragment.fs.glsl.js +126 -0
  222. package/dist/layers/triangle/fragment.fs.glsl.js.map +1 -0
  223. package/dist/layers/triangle/fragment_lines.glsl.d.ts +2 -0
  224. package/dist/layers/triangle/fragment_lines.glsl.js +21 -0
  225. package/dist/layers/triangle/fragment_lines.glsl.js.map +1 -0
  226. package/dist/layers/triangle/privateTriangleLayer.d.ts +70 -0
  227. package/dist/layers/triangle/privateTriangleLayer.js +108 -0
  228. package/dist/layers/triangle/privateTriangleLayer.js.map +1 -0
  229. package/dist/layers/triangle/test_data/surfacePoints.d.ts +2 -0
  230. package/dist/layers/triangle/test_data/surfacePoints.js +4345 -0
  231. package/dist/layers/triangle/test_data/surfacePoints.js.map +1 -0
  232. package/dist/layers/triangle/test_data/surfaceTriangles.d.ts +2 -0
  233. package/dist/layers/triangle/test_data/surfaceTriangles.js +7393 -0
  234. package/dist/layers/triangle/test_data/surfaceTriangles.js.map +1 -0
  235. package/dist/layers/triangle/triangleLayer.d.ts +60 -0
  236. package/dist/layers/triangle/triangleLayer.js +170 -0
  237. package/dist/layers/triangle/triangleLayer.js.map +1 -0
  238. package/dist/layers/triangle/vertex.glsl.d.ts +2 -0
  239. package/dist/layers/triangle/vertex.glsl.js +35 -0
  240. package/dist/layers/triangle/vertex.glsl.js.map +1 -0
  241. package/dist/layers/triangle/vertex_lines.glsl.d.ts +2 -0
  242. package/dist/layers/triangle/vertex_lines.glsl.js +16 -0
  243. package/dist/layers/triangle/vertex_lines.glsl.js.map +1 -0
  244. package/dist/layers/triangle/webworker.d.ts +4 -0
  245. package/dist/layers/triangle/webworker.js +132 -0
  246. package/dist/layers/triangle/webworker.js.map +1 -0
  247. package/dist/layers/utils/layerTools.d.ts +52 -0
  248. package/dist/layers/utils/layerTools.js +91 -0
  249. package/dist/layers/utils/layerTools.js.map +1 -0
  250. package/dist/layers/utils/propertyMapTools.d.ts +8 -0
  251. package/dist/layers/utils/propertyMapTools.js +21 -0
  252. package/dist/layers/utils/propertyMapTools.js.map +1 -0
  253. package/dist/layers/wells/utils/spline.d.ts +28 -0
  254. package/dist/layers/wells/utils/spline.js +236 -0
  255. package/dist/layers/wells/utils/spline.js.map +1 -0
  256. package/dist/layers/wells/wellsLayer.d.ts +89 -0
  257. package/dist/layers/wells/wellsLayer.js +939 -0
  258. package/dist/layers/wells/wellsLayer.js.map +1 -0
  259. package/dist/package.json +35 -0
  260. package/dist/redux/actions.d.ts +1 -0
  261. package/dist/redux/actions.js +3 -0
  262. package/dist/redux/actions.js.map +1 -0
  263. package/dist/redux/reducer.d.ts +11 -0
  264. package/dist/redux/reducer.js +28 -0
  265. package/dist/redux/reducer.js.map +1 -0
  266. package/dist/redux/store.d.ts +4 -0
  267. package/dist/redux/store.js +10 -0
  268. package/dist/redux/store.js.map +1 -0
  269. package/dist/redux/types.d.ts +43 -0
  270. package/dist/redux/types.js +79 -0
  271. package/dist/redux/types.js.map +1 -0
  272. package/dist/storybook/SubsurfaceViewer.stories.d.ts +455 -0
  273. package/dist/storybook/SubsurfaceViewer.stories.js +537 -0
  274. package/dist/storybook/SubsurfaceViewer.stories.js.map +1 -0
  275. package/dist/storybook/components/InfoCard.stories.d.ts +48 -0
  276. package/dist/storybook/components/InfoCard.stories.js +36 -0
  277. package/dist/storybook/components/InfoCard.stories.js.map +1 -0
  278. package/dist/storybook/components/colorLegends/ContinuousLegend.stories.d.ts +31 -0
  279. package/dist/storybook/components/colorLegends/ContinuousLegend.stories.js +30 -0
  280. package/dist/storybook/components/colorLegends/ContinuousLegend.stories.js.map +1 -0
  281. package/dist/storybook/components/colorLegends/DiscreteLegend.stories.d.ts +31 -0
  282. package/dist/storybook/components/colorLegends/DiscreteLegend.stories.js +30 -0
  283. package/dist/storybook/components/colorLegends/DiscreteLegend.stories.js.map +1 -0
  284. package/dist/storybook/components/colorLegends/IndividualScaleForMap.stories.d.ts +20 -0
  285. package/dist/storybook/components/colorLegends/IndividualScaleForMap.stories.js +66 -0
  286. package/dist/storybook/components/colorLegends/IndividualScaleForMap.stories.js.map +1 -0
  287. package/dist/storybook/components/colorLegends/SingleScaleForMap.stories.d.ts +65 -0
  288. package/dist/storybook/components/colorLegends/SingleScaleForMap.stories.js +94 -0
  289. package/dist/storybook/components/colorLegends/SingleScaleForMap.stories.js.map +1 -0
  290. package/dist/storybook/components/settings/LayerSettingsButton.stories.d.ts +34 -0
  291. package/dist/storybook/components/settings/LayerSettingsButton.stories.js +31 -0
  292. package/dist/storybook/components/settings/LayerSettingsButton.stories.js.map +1 -0
  293. package/dist/storybook/components/settings/NumericInput.stories.d.ts +14 -0
  294. package/dist/storybook/components/settings/NumericInput.stories.js +15 -0
  295. package/dist/storybook/components/settings/NumericInput.stories.js.map +1 -0
  296. package/dist/storybook/components/settings/ToggleButton.stories.d.ts +13 -0
  297. package/dist/storybook/components/settings/ToggleButton.stories.js +14 -0
  298. package/dist/storybook/components/settings/ToggleButton.stories.js.map +1 -0
  299. package/dist/storybook/schemaValidation/sampleData.d.ts +122 -0
  300. package/dist/storybook/schemaValidation/sampleData.js +172 -0
  301. package/dist/storybook/schemaValidation/sampleData.js.map +1 -0
  302. package/dist/storybook/schemaValidation/schemaValidation.stories.d.ts +31 -0
  303. package/dist/storybook/schemaValidation/schemaValidation.stories.js +42 -0
  304. package/dist/storybook/schemaValidation/schemaValidation.stories.js.map +1 -0
  305. package/dist/utils/configuration.d.ts +631 -0
  306. package/dist/utils/configuration.js +36 -0
  307. package/dist/utils/configuration.js.map +1 -0
  308. package/dist/utils/fit-bounds.d.ts +15 -0
  309. package/dist/utils/fit-bounds.js +66 -0
  310. package/dist/utils/fit-bounds.js.map +1 -0
  311. package/dist/utils/measurement.d.ts +6 -0
  312. package/dist/utils/measurement.js +47 -0
  313. package/dist/utils/measurement.js.map +1 -0
  314. package/dist/utils/northArrow.d.ts +113 -0
  315. package/dist/utils/northArrow.js +5 -0
  316. package/dist/utils/northArrow.js.map +1 -0
  317. package/dist/utils/specExtractor.d.ts +3 -0
  318. package/dist/utils/specExtractor.js +24 -0
  319. package/dist/utils/specExtractor.js.map +1 -0
  320. package/dist/viewports/index.d.ts +1 -0
  321. package/dist/viewports/index.js +2 -0
  322. package/dist/viewports/index.js.map +1 -0
  323. package/dist/viewports/intersectionViewport.d.ts +35 -0
  324. package/dist/viewports/intersectionViewport.js +65 -0
  325. package/dist/viewports/intersectionViewport.js.map +1 -0
  326. package/dist/views/index.d.ts +1 -0
  327. package/dist/views/index.js +2 -0
  328. package/dist/views/index.js.map +1 -0
  329. package/dist/views/intersectionView.d.ts +18 -0
  330. package/dist/views/intersectionView.js +17 -0
  331. package/dist/views/intersectionView.js.map +1 -0
  332. package/package.json +35 -0
  333. package/src/DashSubsurfaceViewer.tsx +270 -0
  334. package/src/SubsurfaceViewer.stories.tsx +449 -0
  335. package/src/SubsurfaceViewer.test.tsx +98 -0
  336. package/src/SubsurfaceViewer.tsx +356 -0
  337. package/src/__snapshots__/SubsurfaceViewer.test.tsx.snap +178 -0
  338. package/src/assets/glTF/north_arrow/scene.bin +0 -0
  339. package/src/assets/glTF/north_arrow/scene.gltf +315 -0
  340. package/src/assets/glTF/north_arrow/textures/Arrow5_baseColor.png +0 -0
  341. package/src/assets/glTF/north_arrow/textures/Arrow5_metallicRoughness.png +0 -0
  342. package/src/assets/glTF/north_arrow/textures/Arrow5_normal.png +0 -0
  343. package/src/components/ColorLegend.test.tsx +32 -0
  344. package/src/components/ColorLegend.tsx +80 -0
  345. package/src/components/ColorLegends.test.tsx +97 -0
  346. package/src/components/ColorLegends.tsx +46 -0
  347. package/src/components/DistanceScale.stories.tsx +28 -0
  348. package/src/components/DistanceScale.test.tsx +36 -0
  349. package/src/components/DistanceScale.tsx +84 -0
  350. package/src/components/InfoCard.test.tsx +110 -0
  351. package/src/components/InfoCard.tsx +263 -0
  352. package/src/components/Map.test.tsx +142 -0
  353. package/src/components/Map.tsx +1435 -0
  354. package/src/components/StatusIndicator.test.tsx +14 -0
  355. package/src/components/StatusIndicator.tsx +38 -0
  356. package/src/components/ViewAnnotation.tsx +16 -0
  357. package/src/components/ViewFooter.test.tsx +12 -0
  358. package/src/components/ViewFooter.tsx +30 -0
  359. package/src/components/__snapshots__/ColorLegends.test.tsx.snap +15 -0
  360. package/src/components/__snapshots__/DistanceScale.test.tsx.snap +33 -0
  361. package/src/components/__snapshots__/InfoCard.test.tsx.snap +561 -0
  362. package/src/components/__snapshots__/Map.test.tsx.snap +119 -0
  363. package/src/components/__snapshots__/StatusIndicator.test.tsx.snap +3 -0
  364. package/src/components/__snapshots__/ViewFooter.test.tsx.snap +7 -0
  365. package/src/components/settings/DrawModeSelector.test.tsx +45 -0
  366. package/src/components/settings/DrawModeSelector.tsx +58 -0
  367. package/src/components/settings/DrawModeSelector_performance.test.tsx +35 -0
  368. package/src/components/settings/LayerProperty.test.tsx +35 -0
  369. package/src/components/settings/LayerProperty.tsx +153 -0
  370. package/src/components/settings/LayerProperty_performance.test.tsx +39 -0
  371. package/src/components/settings/LayerSettingsButton.test.tsx +133 -0
  372. package/src/components/settings/LayerSettingsButton.tsx +95 -0
  373. package/src/components/settings/LayersButton.test.tsx +102 -0
  374. package/src/components/settings/LayersButton.tsx +97 -0
  375. package/src/components/settings/NumericInput.test.tsx +25 -0
  376. package/src/components/settings/NumericInput.tsx +67 -0
  377. package/src/components/settings/Settings.tsx +71 -0
  378. package/src/components/settings/SliderInput.test.tsx +28 -0
  379. package/src/components/settings/SliderInput.tsx +71 -0
  380. package/src/components/settings/ToggleButton.test.tsx +25 -0
  381. package/src/components/settings/ToggleButton.tsx +53 -0
  382. package/src/components/settings/__snapshots__/DrawModeSelector.test.tsx.snap +124 -0
  383. package/src/components/settings/__snapshots__/LayerProperty.test.tsx.snap +124 -0
  384. package/src/components/settings/__snapshots__/LayerSettingsButton.test.tsx.snap +36 -0
  385. package/src/components/settings/__snapshots__/LayersButton.test.tsx.snap +83 -0
  386. package/src/components/settings/__snapshots__/NumericInput.test.tsx.snap +123 -0
  387. package/src/components/settings/__snapshots__/SliderInput.test.tsx.snap +244 -0
  388. package/src/components/settings/__snapshots__/ToggleButton.test.tsx.snap +182 -0
  389. package/src/custom.d.ts +9 -0
  390. package/src/index.ts +5 -0
  391. package/src/inputSchema/ColorTables.json +51 -0
  392. package/src/inputSchema/FaultPolygons.json +80 -0
  393. package/src/inputSchema/Grid.json +39 -0
  394. package/src/inputSchema/PieChart.json +72 -0
  395. package/src/inputSchema/WellLog.json +126 -0
  396. package/src/inputSchema/WellLogTemplate.json +136 -0
  397. package/src/inputSchema/WellLogs.json +5 -0
  398. package/src/inputSchema/Wells.json +106 -0
  399. package/src/inputSchema/schemaValidationUtil.tsx +55 -0
  400. package/src/inputSchema/validator.tsx +72 -0
  401. package/src/inputSchema/wellCompletions.json +108 -0
  402. package/src/layers/BoxSelectionLayer/boxSelectionLayer.stories.tsx +172 -0
  403. package/src/layers/BoxSelectionLayer/boxSelectionLayer.tsx +136 -0
  404. package/src/layers/axes/axes-fragment.glsl.ts +15 -0
  405. package/src/layers/axes/axesLayer.stories.tsx +87 -0
  406. package/src/layers/axes/axesLayer.ts +692 -0
  407. package/src/layers/axes/boxLayer.ts +71 -0
  408. package/src/layers/axes/grid-vertex.glsl.ts +14 -0
  409. package/src/layers/axes2d/axes2DLayer.stories.tsx +150 -0
  410. package/src/layers/axes2d/axes2DLayer.ts +841 -0
  411. package/src/layers/axes2d/font-atlas.png +0 -0
  412. package/src/layers/axes2d/label-fragment.glsl.js +37 -0
  413. package/src/layers/axes2d/label-vertex.glsl.js +20 -0
  414. package/src/layers/axes2d/line-fragment.glsl.js +14 -0
  415. package/src/layers/axes2d/line-vertex.glsl.js +13 -0
  416. package/src/layers/colormap/colormap.fs.glsl.ts +42 -0
  417. package/src/layers/colormap/colormapLayer.ts +247 -0
  418. package/src/layers/drawing/drawingLayer.tsx +256 -0
  419. package/src/layers/fault_polygons/faultPolygonsLayer.ts +54 -0
  420. package/src/layers/grid3d/fragment.fs.glsl.ts +109 -0
  421. package/src/layers/grid3d/fragment_lines.glsl.ts +21 -0
  422. package/src/layers/grid3d/grid3dLayer.stories.tsx +172 -0
  423. package/src/layers/grid3d/grid3dLayer.ts +248 -0
  424. package/src/layers/grid3d/privateLayer.ts +292 -0
  425. package/src/layers/grid3d/vertex.glsl.ts +43 -0
  426. package/src/layers/grid3d/vertex_lines.glsl.ts +15 -0
  427. package/src/layers/grid3d/webworker.ts +173 -0
  428. package/src/layers/hillshading2d/hillshading2d.fs.glsl.ts +62 -0
  429. package/src/layers/hillshading2d/hillshading2dLayer.ts +172 -0
  430. package/src/layers/index.ts +35 -0
  431. package/src/layers/intersection/intersectionView.stories.tsx +294 -0
  432. package/src/layers/intersection/unfoldedGeoJsonLayer.ts +92 -0
  433. package/src/layers/map/fragment.fs.glsl.ts +127 -0
  434. package/src/layers/map/fragment_lines.glsl.ts +21 -0
  435. package/src/layers/map/mapLayer.stories.tsx +1369 -0
  436. package/src/layers/map/mapLayer.ts +470 -0
  437. package/src/layers/map/privateMapLayer.ts +317 -0
  438. package/src/layers/map/vertex.glsl.ts +45 -0
  439. package/src/layers/map/vertex_lines.glsl.ts +15 -0
  440. package/src/layers/map/webworker.ts +479 -0
  441. package/src/layers/northarrow/northArrow.stories.tsx +108 -0
  442. package/src/layers/northarrow/northArrow3DLayer.ts +204 -0
  443. package/src/layers/northarrow/northarrow-fragment.glsl.js +14 -0
  444. package/src/layers/northarrow/northarrow-vertex.glsl.js +13 -0
  445. package/src/layers/piechart/fragment.glsl.js +42 -0
  446. package/src/layers/piechart/pieChartLayer.ts +246 -0
  447. package/src/layers/piechart/vertex.glsl.js +42 -0
  448. package/src/layers/points/pointsLayer.stories.tsx +141 -0
  449. package/src/layers/points/pointsLayer.ts +143 -0
  450. package/src/layers/polylines/polylinesLayer.stories.tsx +144 -0
  451. package/src/layers/polylines/polylinesLayer.ts +263 -0
  452. package/src/layers/selectable_geojson/selectableGeoJsonLayer.ts +25 -0
  453. package/src/layers/shader_modules/decoder.fs.glsl.ts +41 -0
  454. package/src/layers/shader_modules/decoder.ts +46 -0
  455. package/src/layers/shader_modules/index.ts +1 -0
  456. package/src/layers/terrain/map3DLayer.stories.tsx +340 -0
  457. package/src/layers/terrain/map3DLayer.ts +556 -0
  458. package/src/layers/terrain/terrainMapLayer.ts +334 -0
  459. package/src/layers/terrain/terrainmap.fs.glsl.ts +134 -0
  460. package/src/layers/triangle/fragment.fs.glsl.ts +126 -0
  461. package/src/layers/triangle/fragment_lines.glsl.ts +21 -0
  462. package/src/layers/triangle/privateTriangleLayer.ts +203 -0
  463. package/src/layers/triangle/test_data/surfacePoints.ts +4344 -0
  464. package/src/layers/triangle/test_data/surfaceTriangles.ts +7392 -0
  465. package/src/layers/triangle/triangleLayer.stories.tsx +191 -0
  466. package/src/layers/triangle/triangleLayer.ts +273 -0
  467. package/src/layers/triangle/vertex.glsl.ts +35 -0
  468. package/src/layers/triangle/vertex_lines.glsl.ts +15 -0
  469. package/src/layers/triangle/webworker.ts +165 -0
  470. package/src/layers/utils/glsl.d.ts +4 -0
  471. package/src/layers/utils/layerTools.ts +182 -0
  472. package/src/layers/utils/propertyMapTools.ts +43 -0
  473. package/src/layers/wells/utils/spline.ts +318 -0
  474. package/src/layers/wells/wellsLayer.stories.tsx +625 -0
  475. package/src/layers/wells/wellsLayer.ts +1377 -0
  476. package/src/redux/actions.ts +8 -0
  477. package/src/redux/reducer.ts +43 -0
  478. package/src/redux/store.ts +15 -0
  479. package/src/redux/types.ts +114 -0
  480. package/src/storybook/SubsurfaceViewer.stories.jsx +644 -0
  481. package/src/storybook/components/InfoCard.stories.jsx +39 -0
  482. package/src/storybook/components/colorLegends/ContinuousLegend.stories.jsx +32 -0
  483. package/src/storybook/components/colorLegends/DiscreteLegend.stories.jsx +33 -0
  484. package/src/storybook/components/colorLegends/IndividualScaleForMap.stories.jsx +99 -0
  485. package/src/storybook/components/colorLegends/SingleScaleForMap.stories.jsx +120 -0
  486. package/src/storybook/components/settings/LayerSettingsButton.stories.jsx +34 -0
  487. package/src/storybook/components/settings/NumericInput.stories.jsx +17 -0
  488. package/src/storybook/components/settings/ToggleButton.stories.jsx +16 -0
  489. package/src/storybook/schemaValidation/sampleData.js +177 -0
  490. package/src/storybook/schemaValidation/schemaValidation.stories.jsx +91 -0
  491. package/src/test/TestWrapper.tsx +13 -0
  492. package/src/utils/configuration.ts +61 -0
  493. package/src/utils/fit-bounds.js +85 -0
  494. package/src/utils/measurement.ts +61 -0
  495. package/src/utils/northArrow.ts +4 -0
  496. package/src/utils/specExtractor.ts +36 -0
  497. package/src/viewports/index.js +1 -0
  498. package/src/viewports/intersectionViewport.ts +137 -0
  499. package/src/views/index.js +1 -0
  500. package/src/views/intersectionView.ts +38 -0
  501. package/tsconfig.json +7 -0
@@ -0,0 +1,841 @@
1
+ import {
2
+ Layer,
3
+ Viewport,
4
+ LayerContext,
5
+ project,
6
+ OrthographicViewport,
7
+ COORDINATE_SYSTEM,
8
+ } from "@deck.gl/core/typed";
9
+ import GL from "@luma.gl/constants";
10
+ import { Model, Geometry } from "@luma.gl/engine";
11
+ import labelVertexShader from "./label-vertex.glsl";
12
+ import labelFragmentShader from "./label-fragment.glsl";
13
+ import lineVertexShader from "./line-vertex.glsl";
14
+ import lineFragmentShader from "./line-fragment.glsl";
15
+ import { ExtendedLayerProps, Position3D } from "../utils/layerTools";
16
+ import { load } from "@loaders.gl/core";
17
+ import { Texture2D } from "@luma.gl/webgl";
18
+ import { ImageLoader } from "@loaders.gl/images";
19
+ import { vec4, mat4 } from "gl-matrix";
20
+ import { Color } from "@deck.gl/core/typed";
21
+ import fontAtlasPng from "./font-atlas.png";
22
+
23
+ const DEFAULT_TEXTURE_PARAMETERS = {
24
+ [GL.TEXTURE_MIN_FILTER]: GL.LINEAR_MIPMAP_LINEAR,
25
+ [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,
26
+ [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,
27
+ [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE,
28
+ };
29
+
30
+ enum TEXT_ANCHOR {
31
+ start = 0,
32
+ middle = 1,
33
+ end = 2,
34
+ }
35
+
36
+ enum ALIGNMENT_BASELINE {
37
+ top = 1,
38
+ center = 0,
39
+ bottom = -1,
40
+ }
41
+
42
+ type LabelData = {
43
+ label: string;
44
+ pos: Position3D; // tick line start
45
+ anchor?: TEXT_ANCHOR;
46
+ aligment?: ALIGNMENT_BASELINE;
47
+ //font_size: number; KEEP.
48
+ };
49
+
50
+ enum ViewSide {
51
+ Left,
52
+ Right,
53
+ Bottom,
54
+ Top,
55
+ }
56
+
57
+ const zDepthAxesBackground = 90;
58
+ const zDepthAxesAxis = zDepthAxesBackground + 1;
59
+ const zDepthAxesTicksAndLabels = zDepthAxesAxis + 1;
60
+
61
+ export interface Axes2DLayerProps<D> extends ExtendedLayerProps<D> {
62
+ marginH: number;
63
+ marginV: number;
64
+ labelColor?: Color;
65
+ labelFontSize?: number;
66
+ fontFamily?: string;
67
+ axisColor?: Color;
68
+ backgroundColor?: Color;
69
+ isLeftRuler: boolean;
70
+ isRightRuler: boolean;
71
+ isBottomRuler: boolean;
72
+ isTopRuler: boolean;
73
+ }
74
+
75
+ const defaultProps = {
76
+ "@@type": "Axes2DLayer",
77
+ name: "Axes2D",
78
+ id: "axes2d-layer",
79
+ visible: true,
80
+ coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,
81
+ marginH: 80, // Horizontal margin (in pixles)
82
+ marginV: 30, // Vertical margin (in pixles)
83
+ isLeftRuler: true,
84
+ isRightRuler: false,
85
+ isBottomRuler: true,
86
+ isTopRuler: false,
87
+ };
88
+
89
+ // FONT ATLAS
90
+ const font_width = 86;
91
+ const yh = 97;
92
+ const fontInfo = {
93
+ letterHeight: 92,
94
+ spaceWidth: 0,
95
+ spacing: -1,
96
+ textureWidth: 1714,
97
+ textureHeight: 200,
98
+ glyphInfos: {
99
+ A: { x: 0, y: 0, width: font_width },
100
+ B: { x: font_width, y: 0, width: font_width },
101
+ C: { x: 2 * font_width, y: 0, width: font_width },
102
+ D: { x: 3 * font_width, y: 0, width: font_width },
103
+ E: { x: 4 * font_width, y: 0, width: font_width },
104
+ F: { x: 5 * font_width, y: 0, width: font_width },
105
+ G: { x: 6 * font_width, y: 0, width: font_width },
106
+ H: { x: 7 * font_width, y: 0, width: font_width },
107
+ I: { x: 8 * font_width, y: 0, width: font_width },
108
+ J: { x: 9 * font_width, y: 0, width: font_width },
109
+ K: { x: 10 * font_width, y: 0, width: font_width },
110
+ L: { x: 11 * font_width, y: 0, width: font_width },
111
+ M: { x: 12 * font_width, y: 0, width: font_width },
112
+ N: { x: 13 * font_width, y: 0, width: font_width },
113
+ O: { x: 14 * font_width, y: 0, width: font_width },
114
+ P: { x: 15 * font_width, y: 0, width: font_width },
115
+ Q: { x: 16 * font_width, y: 0, width: font_width },
116
+ R: { x: 17 * font_width, y: 0, width: font_width },
117
+ S: { x: 18 * font_width, y: 0, width: font_width },
118
+ T: { x: 19 * font_width, y: 0, width: font_width },
119
+
120
+ U: { x: 0, y: yh, width: font_width },
121
+ V: { x: font_width, y: yh, width: font_width },
122
+ W: { x: 2 * font_width, y: yh, width: font_width },
123
+ X: { x: 3 * font_width, y: yh, width: font_width },
124
+ Y: { x: 4 * font_width, y: yh, width: font_width },
125
+ Z: { x: 5 * font_width, y: yh, width: font_width },
126
+ 0: { x: 6 * font_width, y: yh, width: font_width },
127
+ 1: { x: 7 * font_width, y: yh, width: font_width },
128
+ 2: { x: 8 * font_width, y: yh, width: font_width },
129
+ 3: { x: 9 * font_width, y: yh, width: font_width },
130
+ 4: { x: 10 * font_width, y: yh, width: font_width },
131
+ 5: { x: 11 * font_width, y: yh, width: font_width },
132
+ 6: { x: 12 * font_width, y: yh, width: font_width },
133
+ 7: { x: 13 * font_width, y: yh, width: font_width },
134
+ 8: { x: 14 * font_width, y: yh, width: font_width },
135
+ 9: { x: 15 * font_width, y: yh, width: font_width },
136
+ "+": { x: 16 * font_width, y: yh, width: font_width },
137
+ "-": { x: 17 * font_width, y: yh, width: font_width },
138
+ ".": { x: 18 * font_width, y: yh, width: font_width },
139
+ ",": { x: 19 * font_width, y: yh, width: font_width },
140
+ },
141
+ };
142
+
143
+ export default class Axes2DLayer extends Layer<Axes2DLayerProps<unknown>> {
144
+ initializeState(context: LayerContext): void {
145
+ const { gl } = context;
146
+
147
+ const promise = load(fontAtlasPng, ImageLoader, {
148
+ image: { type: "data" }, // Will load as ImageData.
149
+ });
150
+
151
+ promise.then((data: ImageData) => {
152
+ const fontTexture = new Texture2D(gl, {
153
+ width: data.width,
154
+ height: data.height,
155
+ format: GL.RGB,
156
+ data,
157
+ parameters: DEFAULT_TEXTURE_PARAMETERS,
158
+ });
159
+
160
+ this.setState({
161
+ fontTexture,
162
+ // Insert a dummy model initially.
163
+ model: new Model(gl, {
164
+ id: "dummy",
165
+ vs: lineVertexShader,
166
+ fs: lineFragmentShader,
167
+ }),
168
+ });
169
+ });
170
+ }
171
+
172
+ GetTickLinesAndLabels(
173
+ min: number,
174
+ max: number,
175
+ viewSide: ViewSide,
176
+ pixel2world: number
177
+ ): [number[], LabelData[]] {
178
+ const ndecimals = 0;
179
+ const n_minor_ticks = 3;
180
+
181
+ const lines: number[] = [];
182
+ const tick_labels = [];
183
+
184
+ const mv = this.props.marginV * pixel2world;
185
+ const mh = this.props.marginH * pixel2world;
186
+
187
+ const vpBounds = this.context.viewport.getBounds();
188
+ let start;
189
+ let y_tick = 0;
190
+ let x_tick = 0;
191
+ if (viewSide === ViewSide.Top) {
192
+ start = vpBounds[3] - mv;
193
+ y_tick = start;
194
+ } else if (viewSide === ViewSide.Bottom) {
195
+ start = vpBounds[1] + mv;
196
+ y_tick = start;
197
+ } else if (viewSide === ViewSide.Left) {
198
+ start = vpBounds[0] + mh;
199
+ x_tick = start;
200
+ } else if (viewSide === ViewSide.Right) {
201
+ start = vpBounds[2] - mh;
202
+ x_tick = start;
203
+ }
204
+
205
+ const m = 10; // Length in pixels
206
+ const delta = m * pixel2world;
207
+
208
+ const L = LineLengthInPixels(
209
+ [min, 0, 0],
210
+ [max, 0, 0],
211
+ this.context.viewport
212
+ );
213
+
214
+ const isHorizontal =
215
+ viewSide === ViewSide.Top || viewSide === ViewSide.Bottom;
216
+
217
+ const ticks = GetTicks(min, max, L); // Note: this may be replaced by NiceTicks npm package.
218
+
219
+ // z value of all lines and labels. In camera/view coordinates. This
220
+ // ensures lines will be closer to camera than rest of model.
221
+ const z_depth = zDepthAxesTicksAndLabels;
222
+
223
+ const tick_length =
224
+ viewSide === ViewSide.Left || viewSide === ViewSide.Bottom
225
+ ? -delta
226
+ : delta;
227
+
228
+ for (let i = 0; i < ticks.length; i++) {
229
+ const tick = ticks[i];
230
+
231
+ const label = tick.toFixed(ndecimals);
232
+ tick_labels.push(label);
233
+
234
+ // tick line start
235
+ if (isHorizontal) {
236
+ lines.push(tick, y_tick, z_depth); // tick line start
237
+ lines.push(tick, y_tick + tick_length, z_depth); // tick line end.
238
+ } else {
239
+ lines.push(x_tick, tick, z_depth);
240
+ lines.push(x_tick + tick_length, tick, z_depth);
241
+ }
242
+ }
243
+
244
+ // Add minor X ticks.
245
+ if (ticks.length > 1) {
246
+ const tick1 = ticks[0];
247
+ const tick2 = ticks[1];
248
+ const d = (tick2 - tick1) / (n_minor_ticks + 1);
249
+ const tick_start = tick1;
250
+
251
+ // up
252
+ let i = 0;
253
+ while (tick_start + (i + 1) * d < max) {
254
+ const tick = tick_start + (i + 1) * d;
255
+ tick_labels.push("");
256
+ i++;
257
+
258
+ if (isHorizontal) {
259
+ lines.push(tick, y_tick, z_depth); // tick line start
260
+ lines.push(tick, y_tick + 0.5 * tick_length, z_depth); // tick line end.
261
+ } else {
262
+ lines.push(x_tick, tick, z_depth);
263
+ lines.push(x_tick + 0.5 * tick_length, tick, z_depth);
264
+ }
265
+ }
266
+
267
+ // down
268
+ i = 0;
269
+ while (tick_start - (i + 1) * d > min) {
270
+ const tick = tick_start - (i + 1) * d;
271
+ tick_labels.push("");
272
+ i++;
273
+
274
+ if (isHorizontal) {
275
+ lines.push(tick, y_tick, z_depth);
276
+ lines.push(tick, y_tick + 0.5 * tick_length, z_depth);
277
+ } else {
278
+ lines.push(x_tick, tick, z_depth);
279
+ lines.push(x_tick + 0.5 * tick_length, tick, z_depth);
280
+ }
281
+ }
282
+ }
283
+
284
+ const labels = this.makeLabelsData(lines, tick_labels);
285
+
286
+ return [lines, labels];
287
+ }
288
+
289
+ GetBacgroundTriangleLinesHorizontal(
290
+ x_min_w: number,
291
+ x_max_w: number,
292
+ isTop: boolean,
293
+ pixel2world: number
294
+ ): number[] {
295
+ const mv = this.props.marginV * pixel2world;
296
+
297
+ const vp_bounds = this.context.viewport.getBounds(); // [xmin, ymin, xmax, ymax]
298
+
299
+ const y_max = isTop ? vp_bounds[3] : vp_bounds[1] + mv;
300
+ const y_min = isTop ? vp_bounds[3] - mv : vp_bounds[1];
301
+
302
+ const zDepth = zDepthAxesBackground;
303
+
304
+ const p1 = [x_min_w, y_max, zDepth];
305
+ const p2 = [x_max_w, y_max, zDepth];
306
+ const p3 = [x_max_w, y_min, zDepth];
307
+ const p4 = [x_min_w, y_min, zDepth];
308
+
309
+ /*eslint-disable */
310
+ const background_lines: number[] = [
311
+ ...p1, ...p2, ...p4, // triangle 1
312
+ ...p2, ...p4, ...p3, // triangle 2
313
+ ];
314
+ /*eslint-enable */
315
+
316
+ return background_lines;
317
+ }
318
+
319
+ GetBacgroundTriangleLinesVertical(
320
+ y_min_w: number,
321
+ y_max_w: number,
322
+ isLeft: boolean, // left or right ruler.
323
+ pixel2world: number
324
+ ): number[] {
325
+ const mh = this.props.marginH * pixel2world;
326
+
327
+ const vp_bounds = this.context.viewport.getBounds(); // [xmin, ymin, xmax, ymax]
328
+
329
+ const x_max = isLeft ? vp_bounds[0] + mh : vp_bounds[2];
330
+ const x_min = isLeft ? vp_bounds[0] : vp_bounds[2] - mh;
331
+
332
+ const zDepth = zDepthAxesBackground;
333
+ const p1 = [x_max, y_min_w, zDepth];
334
+ const p2 = [x_max, y_max_w, zDepth];
335
+ const p3 = [x_min, y_max_w, zDepth];
336
+ const p4 = [x_min, y_min_w, zDepth];
337
+
338
+ /*eslint-disable */
339
+ const background_lines: number[] = [
340
+ ...p1, ...p2, ...p4, // triangle 1
341
+ ...p2, ...p4, ...p3, // triangle 2
342
+ ];
343
+ /*eslint-enable */
344
+
345
+ return background_lines;
346
+ }
347
+
348
+ makeLabelsData(tick_lines: number[], tick_labels: string[]): LabelData[] {
349
+ const labels: LabelData[] = [];
350
+
351
+ for (let i = 0; i < tick_lines.length / 6; i++) {
352
+ const from = [
353
+ tick_lines[6 * i + 0],
354
+ tick_lines[6 * i + 1],
355
+ tick_lines[6 * i + 2],
356
+ ];
357
+ const to = [
358
+ tick_lines[6 * i + 3],
359
+ tick_lines[6 * i + 4],
360
+ tick_lines[6 * i + 5],
361
+ ];
362
+ const label = tick_labels[i];
363
+
364
+ const tick_vec = [
365
+ to[0] - from[0],
366
+ to[1] - from[1],
367
+ to[2] - from[2],
368
+ ];
369
+ const s = 0.5;
370
+ const pos: Position3D = [
371
+ to[0] + s * tick_vec[0],
372
+ to[1] + s * tick_vec[1],
373
+ to[2] + s * tick_vec[2],
374
+ ];
375
+
376
+ let anchor = TEXT_ANCHOR.end;
377
+ let aligment = ALIGNMENT_BASELINE.center;
378
+ const is_xaxis = from[1] !== to[1];
379
+ if (is_xaxis) {
380
+ anchor = TEXT_ANCHOR.middle;
381
+ aligment = ALIGNMENT_BASELINE.top;
382
+ } else {
383
+ const screen_from = this.context.viewport.project(from);
384
+ const screen_to = this.context.viewport.project(to);
385
+
386
+ if (screen_from[0] < screen_to[0]) {
387
+ anchor = TEXT_ANCHOR.start;
388
+ }
389
+ }
390
+
391
+ labels.push({ label, pos, anchor, aligment });
392
+ }
393
+
394
+ return labels;
395
+ }
396
+
397
+ draw({
398
+ moduleParameters,
399
+ uniforms,
400
+ context,
401
+ }: {
402
+ moduleParameters: unknown;
403
+ uniforms: unknown;
404
+ context: LayerContext;
405
+ }): void {
406
+ const is_orthographic =
407
+ this.context.viewport.constructor === OrthographicViewport;
408
+ if (
409
+ typeof this.state["fontTexture"] === "undefined" ||
410
+ !is_orthographic
411
+ ) {
412
+ return;
413
+ }
414
+
415
+ const { gl } = context;
416
+
417
+ super.draw({ moduleParameters, uniforms, context }); // For some reason this is neccessary.
418
+
419
+ const { projectionMatrix } = this.context.viewport;
420
+
421
+ //gl.disable(gl.DEPTH_TEST); KEEP for now.
422
+
423
+ const { label_models, line_model, background_model } =
424
+ this._getModels(gl);
425
+
426
+ const fontTexture = this.state["fontTexture"];
427
+ for (const model of label_models) {
428
+ model.setUniforms({ projectionMatrix, fontTexture }).draw();
429
+ }
430
+
431
+ line_model.draw();
432
+
433
+ // When both parameters are negative, (decreased depth), the mesh is pulled towards the camera (hence, gets in front).
434
+ // When both parameters are positive, (increased depth), the mesh is pushed away from the camera (hence, gets behind).
435
+ gl.enable(GL.POLYGON_OFFSET_FILL);
436
+ gl.polygonOffset(1, 1);
437
+ background_model.draw();
438
+ gl.disable(GL.POLYGON_OFFSET_FILL);
439
+
440
+ //gl.enable(gl.DEPTH_TEST);
441
+ }
442
+
443
+ _getModels(gl: WebGLRenderingContext): {
444
+ label_models: Model[];
445
+ line_model: Model;
446
+ background_model: Model;
447
+ } {
448
+ // Make models for background, lines (tick marcs and axis) and labels.
449
+
450
+ // Margins.
451
+ const m = 100; // Length in pixels
452
+ const world_from = this.context.viewport.unproject([0, 0, 0]);
453
+ const world_to = this.context.viewport.unproject([0, m, 0]);
454
+ const v = [
455
+ world_from[0] - world_to[0],
456
+ world_from[1] - world_to[1],
457
+ world_from[2] - world_to[2],
458
+ ];
459
+
460
+ const pixel2world = Math.sqrt(v[0] * v[0] + v[1] * v[1]) / 100;
461
+
462
+ const { viewMatrix } = this.context.viewport;
463
+
464
+ const mh = this.props.marginH * pixel2world;
465
+ const mv = this.props.marginV * pixel2world;
466
+
467
+ const viewport_bounds_w = this.context.viewport.getBounds(); //bounds in world coordinates.
468
+ const xMin = viewport_bounds_w[0];
469
+ const xMax = viewport_bounds_w[2];
470
+ const yMin = viewport_bounds_w[1];
471
+ const yMax = viewport_bounds_w[3];
472
+
473
+ let tick_and_axes_lines: number[] = [];
474
+ let background_lines: number[] = [];
475
+ let labelData: LabelData[] = [];
476
+
477
+ const zDepth = zDepthAxesAxis;
478
+
479
+ //- BOTTOM RULER ----------------------------------------
480
+ if (this.props.isBottomRuler) {
481
+ const axes = [xMin, yMin + mv, zDepth, xMax, yMin + mv, zDepth];
482
+ const [ticks, labels] = this.GetTickLinesAndLabels(
483
+ xMin,
484
+ xMax,
485
+ ViewSide.Bottom,
486
+ pixel2world
487
+ );
488
+ const back_lines: number[] =
489
+ this.GetBacgroundTriangleLinesHorizontal(
490
+ xMin,
491
+ xMax,
492
+ false,
493
+ pixel2world
494
+ );
495
+
496
+ tick_and_axes_lines = [...tick_and_axes_lines, ...axes, ...ticks];
497
+ background_lines = [...background_lines, ...back_lines];
498
+ labelData = [...labelData, ...labels];
499
+ }
500
+
501
+ //- TOP RULER ----------------------------------------
502
+ if (this.props.isTopRuler) {
503
+ const axes = [xMin, yMax - mv, zDepth, xMax, yMax - mv, zDepth];
504
+ const [ticks, labels] = this.GetTickLinesAndLabels(
505
+ xMin,
506
+ xMax,
507
+ ViewSide.Top,
508
+ pixel2world
509
+ );
510
+
511
+ const back_lines = this.GetBacgroundTriangleLinesHorizontal(
512
+ xMin,
513
+ xMax,
514
+ true, // isTop
515
+ pixel2world
516
+ );
517
+
518
+ tick_and_axes_lines = [...tick_and_axes_lines, ...axes, ...ticks];
519
+ background_lines = [...background_lines, ...back_lines];
520
+ labelData = [...labelData, ...labels];
521
+ }
522
+
523
+ //- LEFT RULER ----------------------------------------
524
+ if (this.props.isLeftRuler) {
525
+ const ymin = this.props.isBottomRuler ? yMin + mv : yMin;
526
+ const ymax = this.props.isTopRuler ? yMax - mv : yMax;
527
+ const axes = [xMin + mh, ymin, zDepth, xMin + mh, ymax, zDepth];
528
+ const [ticks, labels] = this.GetTickLinesAndLabels(
529
+ ymin,
530
+ yMax - mv,
531
+ ViewSide.Left,
532
+ pixel2world
533
+ );
534
+ const back_lines = this.GetBacgroundTriangleLinesVertical(
535
+ ymin,
536
+ ymax,
537
+ true,
538
+ pixel2world
539
+ );
540
+
541
+ tick_and_axes_lines = [...tick_and_axes_lines, ...axes, ...ticks];
542
+ background_lines = [...background_lines, ...back_lines];
543
+ labelData = [...labelData, ...labels];
544
+ }
545
+
546
+ //- RIGHT RULER ----------------------------------------
547
+ if (this.props.isRightRuler) {
548
+ const ymin = this.props.isBottomRuler ? yMin + mv : yMin;
549
+ const ymax = this.props.isTopRuler ? yMax - mv : yMax;
550
+ const axes = [xMax - mh, ymin, zDepth, xMax - mh, ymax, zDepth];
551
+ const [ticks, labels] = this.GetTickLinesAndLabels(
552
+ ymin,
553
+ ymax,
554
+ ViewSide.Right,
555
+ pixel2world
556
+ );
557
+
558
+ const back_lines = this.GetBacgroundTriangleLinesVertical(
559
+ ymin,
560
+ ymax,
561
+ false,
562
+ pixel2world
563
+ );
564
+
565
+ tick_and_axes_lines = [...tick_and_axes_lines, ...axes, ...ticks];
566
+ background_lines = [...background_lines, ...back_lines];
567
+ labelData = [...labelData, ...labels];
568
+ }
569
+
570
+ // Line models. (axis line and tick lines)
571
+ // Color on axes and text.
572
+ let lineColor = [0.0, 0.0, 0.0, 1.0];
573
+ if (typeof this.props.axisColor !== "undefined") {
574
+ lineColor = this.props.axisColor as number[];
575
+ if (lineColor.length === 3) {
576
+ lineColor.push(255);
577
+ }
578
+ lineColor = lineColor.map((x) => (x ?? 0) / 255);
579
+ }
580
+
581
+ const line_model = new Model(gl, {
582
+ id: `${this.props.id}-lines`,
583
+ vs: lineVertexShader,
584
+ fs: lineFragmentShader,
585
+ uniforms: { uColor: lineColor },
586
+ geometry: new Geometry({
587
+ drawMode: GL.LINES,
588
+ attributes: {
589
+ positions: new Float32Array(tick_and_axes_lines),
590
+ },
591
+ vertexCount: tick_and_axes_lines.length / 3,
592
+ }),
593
+
594
+ modules: [project],
595
+ isInstanced: false,
596
+ });
597
+
598
+ //-- Background model --
599
+ // Color on axes background.
600
+ let bColor = [1.0, 1.0, 1.0, 1.0];
601
+ if (typeof this.props.backgroundColor !== "undefined") {
602
+ bColor = this.props.backgroundColor as number[];
603
+ if (bColor.length === 3) {
604
+ bColor.push(255);
605
+ }
606
+ bColor = bColor.map((x) => (x ?? 0) / 255);
607
+ }
608
+
609
+ const background_model = new Model(gl, {
610
+ id: `${this.props.id}-background`,
611
+ vs: lineVertexShader,
612
+ fs: lineFragmentShader,
613
+ uniforms: { uColor: bColor },
614
+ geometry: new Geometry({
615
+ drawMode: GL.TRIANGLES,
616
+ attributes: {
617
+ positions: new Float32Array(background_lines),
618
+ },
619
+ vertexCount: background_lines.length / 3,
620
+ }),
621
+
622
+ modules: [project],
623
+ isInstanced: false,
624
+ });
625
+
626
+ //-- Labels model--
627
+ const label_models: Model[] = [];
628
+
629
+ for (const item of labelData) {
630
+ const x = item.pos[0];
631
+ const y = item.pos[1];
632
+ const z = item.pos[2];
633
+ const label = item.label;
634
+ const anchor = item.anchor ?? TEXT_ANCHOR.start;
635
+ const aligment_baseline =
636
+ item.aligment ?? ALIGNMENT_BASELINE.center;
637
+
638
+ if (label === "") {
639
+ continue;
640
+ }
641
+
642
+ const pos_w = vec4.fromValues(x, y, z, 1); // pos world
643
+ const pos_view = word2view(viewMatrix, pos_w); // pos view
644
+
645
+ const pixelScale = 8;
646
+
647
+ const len = label.length;
648
+ const numVertices = len * 6;
649
+ const positions = new Float32Array(numVertices * 3);
650
+ const texcoords = new Float32Array(numVertices * 2);
651
+ const maxX = fontInfo.textureWidth;
652
+ const maxY = fontInfo.textureHeight;
653
+ let offset = 0;
654
+ let offsetTexture = 0;
655
+
656
+ let x1 = 0;
657
+ if (anchor === TEXT_ANCHOR.end) {
658
+ x1 = -len;
659
+ } else if (anchor === TEXT_ANCHOR.middle) {
660
+ x1 = -len / 2;
661
+ }
662
+
663
+ let y_aligment_offset = 0;
664
+ if (aligment_baseline === ALIGNMENT_BASELINE.center) {
665
+ y_aligment_offset = 0.5 * pixelScale;
666
+ } else if (aligment_baseline === ALIGNMENT_BASELINE.top) {
667
+ y_aligment_offset = 1 * pixelScale;
668
+ }
669
+
670
+ for (let ii = 0; ii < len; ++ii) {
671
+ const letter = label[ii];
672
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
673
+ // @ts-ignore
674
+ const glyphInfo = fontInfo.glyphInfos[letter];
675
+ if (glyphInfo) {
676
+ // Unit square.
677
+ const x2 = x1 + 1;
678
+ const u1 = glyphInfo.x / maxX;
679
+ const v1 = (glyphInfo.y + fontInfo.letterHeight - 1) / maxY;
680
+ const u2 = (glyphInfo.x + glyphInfo.width - 1) / maxX;
681
+ const v2 = glyphInfo.y / maxY;
682
+
683
+ const h = 1;
684
+ const x = pos_view[0];
685
+ const y = pos_view[1] - y_aligment_offset;
686
+ const z = pos_view[2];
687
+
688
+ // 6 vertices per letter
689
+ // t1
690
+ positions[offset + 0] = x + x1 * pixelScale;
691
+ positions[offset + 1] = y + 0 * pixelScale;
692
+ positions[offset + 2] = z; // Note: may make these vertices 2D.
693
+ texcoords[offsetTexture + 0] = u1;
694
+ texcoords[offsetTexture + 1] = v1;
695
+
696
+ positions[offset + 3] = x + x2 * pixelScale;
697
+ positions[offset + 4] = y + 0 * pixelScale;
698
+ positions[offset + 5] = z;
699
+ texcoords[offsetTexture + 2] = u2;
700
+ texcoords[offsetTexture + 3] = v1;
701
+
702
+ positions[offset + 6] = x + x1 * pixelScale;
703
+ positions[offset + 7] = y + h * pixelScale;
704
+ positions[offset + 8] = z;
705
+ texcoords[offsetTexture + 4] = u1;
706
+ texcoords[offsetTexture + 5] = v2;
707
+
708
+ // t2
709
+ positions[offset + 9] = x + x1 * pixelScale;
710
+ positions[offset + 10] = y + h * pixelScale;
711
+ positions[offset + 11] = z;
712
+ texcoords[offsetTexture + 6] = u1;
713
+ texcoords[offsetTexture + 7] = v2;
714
+
715
+ positions[offset + 12] = x + x2 * pixelScale;
716
+ positions[offset + 13] = y + 0 * pixelScale;
717
+ positions[offset + 14] = z;
718
+ texcoords[offsetTexture + 8] = u2;
719
+ texcoords[offsetTexture + 9] = v1;
720
+
721
+ positions[offset + 15] = x + x2 * pixelScale;
722
+ positions[offset + 16] = y + h * pixelScale;
723
+ positions[offset + 17] = z;
724
+ texcoords[offsetTexture + 10] = u2;
725
+ texcoords[offsetTexture + 11] = v2;
726
+
727
+ x1 += 1;
728
+ offset += 18;
729
+ offsetTexture += 12;
730
+ } else {
731
+ // we don't have this character so just advance
732
+ x1 += 1;
733
+ }
734
+ }
735
+
736
+ const id = `${this.props.id}-${label}`;
737
+ const model = new Model(gl, {
738
+ id,
739
+ vs: labelVertexShader,
740
+ fs: labelFragmentShader,
741
+ uniforms: { uAxisColor: lineColor, uBackGroundColor: bColor },
742
+ geometry: new Geometry({
743
+ drawMode: GL.TRIANGLES,
744
+ attributes: {
745
+ positions,
746
+ vTexCoord: {
747
+ value: texcoords,
748
+ size: 2,
749
+ },
750
+ },
751
+ vertexCount: positions.length / 3,
752
+ }),
753
+
754
+ modules: [project],
755
+ isInstanced: false,
756
+ });
757
+
758
+ label_models.push(model);
759
+ }
760
+
761
+ return { label_models, line_model, background_model };
762
+ }
763
+ }
764
+
765
+ Axes2DLayer.layerName = "Axes2DLayer";
766
+ Axes2DLayer.defaultProps = defaultProps;
767
+
768
+ //-- Local help functions. -------------------------------------------------
769
+
770
+ function word2view(
771
+ viewMatrix: number[],
772
+ pos_w: vec4
773
+ ): [number, number, number] {
774
+ const pos_v = vec4.transformMat4(
775
+ vec4.create(),
776
+ pos_w,
777
+ mat4.fromValues(
778
+ ...(viewMatrix.slice(0, mat4.fromValues.length) as Parameters<
779
+ typeof mat4.fromValues
780
+ >)
781
+ )
782
+ );
783
+
784
+ return pos_v.slice(0, 3) as [number, number, number];
785
+ }
786
+
787
+ function LineLengthInPixels(
788
+ p0: Position3D,
789
+ p1: Position3D,
790
+ viewport: Viewport
791
+ ): number {
792
+ const screen_from = viewport.project(p0);
793
+ const screen_to = viewport.project(p1);
794
+
795
+ const v = [
796
+ screen_from[0] - screen_to[0],
797
+ screen_from[1] - screen_to[1],
798
+ screen_from[2] - screen_to[2],
799
+ ];
800
+ const L = Math.sqrt(v[0] * v[0] + v[1] * v[1]); // Length of axis on screen in pixles.
801
+ return L;
802
+ }
803
+
804
+ function GetTicks(
805
+ min: number,
806
+ max: number,
807
+ axis_pixel_length: number
808
+ ): number[] {
809
+ let step = Math.min(Math.round(axis_pixel_length / 100) + 1, 20);
810
+ const range = max - min;
811
+
812
+ const delta = Math.abs(range) / step;
813
+ let decade = 1;
814
+ if (delta >= 10) {
815
+ const logde = Math.log10(delta);
816
+ const pot = Math.floor(logde);
817
+ decade = Math.pow(10.0, pot);
818
+ }
819
+ let scaled_delta = Math.round(delta / decade);
820
+ if (scaled_delta == 3) scaled_delta = 2;
821
+ else if (scaled_delta == 4 || scaled_delta == 6 || scaled_delta == 7)
822
+ scaled_delta = 5;
823
+ else if (scaled_delta > 7) scaled_delta = 10;
824
+ else if (scaled_delta < 1) scaled_delta = 1;
825
+
826
+ const incr = scaled_delta * decade;
827
+ const start = Math.ceil(min / incr) * incr;
828
+ const stop = Math.floor(max / incr) * incr;
829
+ const calc_step = Math.floor(Math.abs(stop - start) / incr);
830
+ step = calc_step > 0 ? calc_step : 0;
831
+
832
+ const ticks: number[] = [];
833
+
834
+ //ticks.push(min);
835
+ for (let i = 0; i <= step; i++) {
836
+ const x = start + i * incr;
837
+ ticks.push(x);
838
+ }
839
+
840
+ return ticks;
841
+ }