easy-three-utils 0.0.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 (166) hide show
  1. package/package.json +12 -0
  2. package/src/common/index.ts +24 -0
  3. package/src/common/useLine2.ts +87 -0
  4. package/src/common/useLoader.ts +184 -0
  5. package/src/common/useLocationCalculator.ts +145 -0
  6. package/src/common/useMark.ts +42 -0
  7. package/src/common/useTween.ts +86 -0
  8. package/src/core/basic/camera.ts +28 -0
  9. package/src/core/basic/clock.ts +11 -0
  10. package/src/core/basic/control.ts +32 -0
  11. package/src/core/basic/index.ts +35 -0
  12. package/src/core/basic/labelRenderer.ts +26 -0
  13. package/src/core/basic/light.ts +63 -0
  14. package/src/core/basic/renderer.ts +37 -0
  15. package/src/core/basic/scene.ts +11 -0
  16. package/src/core/basic/stats.ts +16 -0
  17. package/src/core/event.ts +74 -0
  18. package/src/core/index.ts +11 -0
  19. package/src/core/main.ts +389 -0
  20. package/src/draco/README.md +32 -0
  21. package/src/draco/draco_decoder.js +34 -0
  22. package/src/draco/draco_decoder.wasm +0 -0
  23. package/src/draco/draco_encoder.js +33 -0
  24. package/src/draco/draco_wasm_wrapper.js +117 -0
  25. package/src/draco/gltf/draco_decoder.js +33 -0
  26. package/src/draco/gltf/draco_decoder.wasm +0 -0
  27. package/src/draco/gltf/draco_encoder.js +33 -0
  28. package/src/draco/gltf/draco_wasm_wrapper.js +116 -0
  29. package/src/tileRenderer/base/Tile.d.ts +50 -0
  30. package/src/tileRenderer/base/TileBase.d.ts +76 -0
  31. package/src/tileRenderer/base/TileInternal.d.ts +36 -0
  32. package/src/tileRenderer/base/TilesRendererBase.d.ts +35 -0
  33. package/src/tileRenderer/base/TilesRendererBase.js +847 -0
  34. package/src/tileRenderer/base/Tileset.d.ts +66 -0
  35. package/src/tileRenderer/base/constants.d.ts +6 -0
  36. package/src/tileRenderer/base/constants.js +16 -0
  37. package/src/tileRenderer/base/loaders/B3DMLoaderBase.d.ts +18 -0
  38. package/src/tileRenderer/base/loaders/B3DMLoaderBase.js +85 -0
  39. package/src/tileRenderer/base/loaders/CMPTLoaderBase.d.ts +22 -0
  40. package/src/tileRenderer/base/loaders/CMPTLoaderBase.js +61 -0
  41. package/src/tileRenderer/base/loaders/I3DMLoaderBase.d.ts +21 -0
  42. package/src/tileRenderer/base/loaders/I3DMLoaderBase.js +130 -0
  43. package/src/tileRenderer/base/loaders/LoaderBase.d.ts +10 -0
  44. package/src/tileRenderer/base/loaders/LoaderBase.js +73 -0
  45. package/src/tileRenderer/base/loaders/PNTSLoaderBase.d.ts +17 -0
  46. package/src/tileRenderer/base/loaders/PNTSLoaderBase.js +82 -0
  47. package/src/tileRenderer/base/plugins/ImplicitTilingPlugin.js +12 -0
  48. package/src/tileRenderer/base/traverseFunctions.js +468 -0
  49. package/src/tileRenderer/gltf.js +144 -0
  50. package/src/tileRenderer/index.d.ts +41 -0
  51. package/src/tileRenderer/index.js +44 -0
  52. package/src/tileRenderer/plugins/README.md +578 -0
  53. package/src/tileRenderer/plugins/base/ImplicitTilingPlugin.d.ts +2 -0
  54. package/src/tileRenderer/plugins/base/ImplicitTilingPlugin.js +84 -0
  55. package/src/tileRenderer/plugins/base/SUBTREELoader.js +876 -0
  56. package/src/tileRenderer/plugins/index.d.ts +17 -0
  57. package/src/tileRenderer/plugins/index.js +17 -0
  58. package/src/tileRenderer/plugins/three/CesiumIonAuthPlugin.d.ts +9 -0
  59. package/src/tileRenderer/plugins/three/CesiumIonAuthPlugin.js +175 -0
  60. package/src/tileRenderer/plugins/three/DebugTilesPlugin.d.ts +29 -0
  61. package/src/tileRenderer/plugins/three/DebugTilesPlugin.js +677 -0
  62. package/src/tileRenderer/plugins/three/GLTFExtensionsPlugin.d.ts +18 -0
  63. package/src/tileRenderer/plugins/three/GLTFExtensionsPlugin.js +86 -0
  64. package/src/tileRenderer/plugins/three/GoogleAttributionsManager.js +62 -0
  65. package/src/tileRenderer/plugins/three/GoogleCloudAuthPlugin.d.ts +5 -0
  66. package/src/tileRenderer/plugins/three/GoogleCloudAuthPlugin.js +200 -0
  67. package/src/tileRenderer/plugins/three/ReorientationPlugin.d.ts +12 -0
  68. package/src/tileRenderer/plugins/three/ReorientationPlugin.js +136 -0
  69. package/src/tileRenderer/plugins/three/TileCompressionPlugin.d.ts +18 -0
  70. package/src/tileRenderer/plugins/three/TileCompressionPlugin.js +223 -0
  71. package/src/tileRenderer/plugins/three/UpdateOnChangePlugin.d.ts +5 -0
  72. package/src/tileRenderer/plugins/three/UpdateOnChangePlugin.js +87 -0
  73. package/src/tileRenderer/plugins/three/fade/FadeManager.js +370 -0
  74. package/src/tileRenderer/plugins/three/fade/TilesFadePlugin.d.ts +9 -0
  75. package/src/tileRenderer/plugins/three/fade/TilesFadePlugin.js +318 -0
  76. package/src/tileRenderer/plugins/three/gltf/GLTFCesiumRTCExtension.d.ts +5 -0
  77. package/src/tileRenderer/plugins/three/gltf/GLTFCesiumRTCExtension.js +27 -0
  78. package/src/tileRenderer/plugins/three/gltf/GLTFMeshFeaturesExtension.d.ts +30 -0
  79. package/src/tileRenderer/plugins/three/gltf/GLTFMeshFeaturesExtension.js +76 -0
  80. package/src/tileRenderer/plugins/three/gltf/GLTFStructuralMetadataExtension.d.ts +49 -0
  81. package/src/tileRenderer/plugins/three/gltf/GLTFStructuralMetadataExtension.js +147 -0
  82. package/src/tileRenderer/plugins/three/gltf/metadata/classes/ClassProperty.js +149 -0
  83. package/src/tileRenderer/plugins/three/gltf/metadata/classes/MeshFeatures.js +215 -0
  84. package/src/tileRenderer/plugins/three/gltf/metadata/classes/PropertyAttributeAccessor.js +107 -0
  85. package/src/tileRenderer/plugins/three/gltf/metadata/classes/PropertySetAccessor.js +45 -0
  86. package/src/tileRenderer/plugins/three/gltf/metadata/classes/PropertyTableAccessor.js +209 -0
  87. package/src/tileRenderer/plugins/three/gltf/metadata/classes/PropertyTextureAccessor.js +244 -0
  88. package/src/tileRenderer/plugins/three/gltf/metadata/classes/StructuralMetadata.js +202 -0
  89. package/src/tileRenderer/plugins/three/gltf/metadata/math/Matrix2.js +55 -0
  90. package/src/tileRenderer/plugins/three/gltf/metadata/utilities/ClassPropertyHelpers.js +495 -0
  91. package/src/tileRenderer/plugins/three/gltf/metadata/utilities/TexCoordUtilities.js +72 -0
  92. package/src/tileRenderer/plugins/three/gltf/metadata/utilities/TextureReadUtility.js +154 -0
  93. package/src/tileRenderer/plugins/three/objects/EllipsoidRegionHelper.js +186 -0
  94. package/src/tileRenderer/plugins/three/objects/SphereHelper.js +55 -0
  95. package/src/tileRenderer/r3f/README.md +238 -0
  96. package/src/tileRenderer/r3f/components/CameraControls.jsx +132 -0
  97. package/src/tileRenderer/r3f/components/CameraTransition.jsx +177 -0
  98. package/src/tileRenderer/r3f/components/CanvasDOMOverlay.jsx +54 -0
  99. package/src/tileRenderer/r3f/components/CompassGizmo.jsx +260 -0
  100. package/src/tileRenderer/r3f/components/TilesAttributionOverlay.jsx +110 -0
  101. package/src/tileRenderer/r3f/components/TilesRenderer.jsx +239 -0
  102. package/src/tileRenderer/r3f/index.jsx +6 -0
  103. package/src/tileRenderer/r3f/utilities/useForceUpdate.jsx +8 -0
  104. package/src/tileRenderer/r3f/utilities/useObjectDep.jsx +59 -0
  105. package/src/tileRenderer/r3f/utilities/useOptions.jsx +143 -0
  106. package/src/tileRenderer/three/DebugTilesRenderer.d.ts +28 -0
  107. package/src/tileRenderer/three/DebugTilesRenderer.js +58 -0
  108. package/src/tileRenderer/three/TilesGroup.d.ts +9 -0
  109. package/src/tileRenderer/three/TilesGroup.js +91 -0
  110. package/src/tileRenderer/three/TilesRenderer.d.ts +37 -0
  111. package/src/tileRenderer/three/TilesRenderer.js +1049 -0
  112. package/src/tileRenderer/three/controls/CameraTransitionManager.js +305 -0
  113. package/src/tileRenderer/three/controls/EnvironmentControls.js +1295 -0
  114. package/src/tileRenderer/three/controls/GlobeControls.js +684 -0
  115. package/src/tileRenderer/three/controls/PivotPointMesh.js +104 -0
  116. package/src/tileRenderer/three/controls/PointerTracker.js +257 -0
  117. package/src/tileRenderer/three/controls/utils.js +113 -0
  118. package/src/tileRenderer/three/loaders/B3DMLoader.d.ts +26 -0
  119. package/src/tileRenderer/three/loaders/B3DMLoader.js +85 -0
  120. package/src/tileRenderer/three/loaders/CMPTLoader.d.ts +19 -0
  121. package/src/tileRenderer/three/loaders/CMPTLoader.js +97 -0
  122. package/src/tileRenderer/three/loaders/GLTFExtensionLoader.d.ts +11 -0
  123. package/src/tileRenderer/three/loaders/GLTFExtensionLoader.js +68 -0
  124. package/src/tileRenderer/three/loaders/I3DMLoader.d.ts +26 -0
  125. package/src/tileRenderer/three/loaders/I3DMLoader.js +256 -0
  126. package/src/tileRenderer/three/loaders/PNTSLoader.d.ts +25 -0
  127. package/src/tileRenderer/three/loaders/PNTSLoader.js +202 -0
  128. package/src/tileRenderer/three/loaders/gltf/GLTFCesiumRTCExtension.js +12 -0
  129. package/src/tileRenderer/three/loaders/gltf/GLTFMeshFeaturesExtension.js +12 -0
  130. package/src/tileRenderer/three/loaders/gltf/GLTFStructuralMetadataExtension.js +12 -0
  131. package/src/tileRenderer/three/math/Ellipsoid.d.ts +31 -0
  132. package/src/tileRenderer/three/math/Ellipsoid.js +337 -0
  133. package/src/tileRenderer/three/math/EllipsoidRegion.d.ts +23 -0
  134. package/src/tileRenderer/three/math/EllipsoidRegion.js +178 -0
  135. package/src/tileRenderer/three/math/ExtendedFrustum.js +65 -0
  136. package/src/tileRenderer/three/math/GeoConstants.d.ts +4 -0
  137. package/src/tileRenderer/three/math/GeoConstants.js +5 -0
  138. package/src/tileRenderer/three/math/GeoUtils.d.ts +9 -0
  139. package/src/tileRenderer/three/math/GeoUtils.js +106 -0
  140. package/src/tileRenderer/three/math/OBB.js +179 -0
  141. package/src/tileRenderer/three/math/TileBoundingVolume.js +272 -0
  142. package/src/tileRenderer/three/plugins/CesiumIonAuthPlugin.js +12 -0
  143. package/src/tileRenderer/three/plugins/DebugTilesPlugin.js +26 -0
  144. package/src/tileRenderer/three/plugins/GoogleCloudAuthPlugin.js +12 -0
  145. package/src/tileRenderer/three/raycastTraverse.js +178 -0
  146. package/src/tileRenderer/three/renderers/CesiumIonTilesRenderer.d.ts +14 -0
  147. package/src/tileRenderer/three/renderers/CesiumIonTilesRenderer.js +21 -0
  148. package/src/tileRenderer/three/renderers/GoogleTilesRenderer.d.ts +43 -0
  149. package/src/tileRenderer/three/renderers/GoogleTilesRenderer.js +48 -0
  150. package/src/tileRenderer/three/utilities.js +54 -0
  151. package/src/tileRenderer/utilities/BatchTable.d.ts +24 -0
  152. package/src/tileRenderer/utilities/BatchTable.js +82 -0
  153. package/src/tileRenderer/utilities/BatchTableHierarchyExtension.js +127 -0
  154. package/src/tileRenderer/utilities/FeatureTable.d.ts +30 -0
  155. package/src/tileRenderer/utilities/FeatureTable.js +159 -0
  156. package/src/tileRenderer/utilities/LRUCache.d.ts +8 -0
  157. package/src/tileRenderer/utilities/LRUCache.js +385 -0
  158. package/src/tileRenderer/utilities/PriorityQueue.d.ts +16 -0
  159. package/src/tileRenderer/utilities/PriorityQueue.js +137 -0
  160. package/src/tileRenderer/utilities/arrayToString.js +7 -0
  161. package/src/tileRenderer/utilities/readMagicBytes.js +29 -0
  162. package/src/tileRenderer/utilities/rgb565torgb.js +22 -0
  163. package/src/tileRenderer/utilities/urlExtension.js +34 -0
  164. package/tsconfig.json +42 -0
  165. package/tsconfig.node.json +11 -0
  166. package/typings/three.d.ts +27 -0
@@ -0,0 +1,149 @@
1
+ import {
2
+ initializeFromProperty,
3
+ adjustValueScaleOffset,
4
+ getField,
5
+ isNumericType,
6
+ resolveDefaultElement,
7
+ resolveNoData,
8
+ resolveDefault,
9
+ } from '../utilities/ClassPropertyHelpers.js';
10
+
11
+ export class ClassProperty {
12
+
13
+ constructor( enums, property, accessorProperty = null ) {
14
+
15
+ // initialize defaults for class property info
16
+ this.name = property.name || null;
17
+ this.description = property.description || null;
18
+ this.type = property.type;
19
+ this.componentType = property.componentType || null;
20
+ this.enumType = property.enumType || null;
21
+ this.array = property.array || false;
22
+ this.count = property.count || 0;
23
+ this.normalized = property.normalized || false;
24
+ this.offset = property.offset || 0;
25
+ this.scale = getField( property, 'scale', 1 );
26
+ this.max = getField( property, 'max', Infinity );
27
+ this.min = getField( property, 'min', - Infinity );
28
+ this.required = property.required || false;
29
+ this.noData = getField( property, 'noData', null );
30
+ this.default = getField( property, 'default', null );
31
+ this.semantic = getField( property, 'semantic', null );
32
+ this.enumSet = null;
33
+ this.accessorProperty = accessorProperty;
34
+
35
+ // accessor properties can override min, max, offset, and scale values
36
+ if ( accessorProperty ) {
37
+
38
+ this.offset = getField( accessorProperty, 'offset', this.offset );
39
+ this.scale = getField( accessorProperty, 'scale', this.scale );
40
+ this.max = getField( accessorProperty, 'max', this.max );
41
+ this.min = getField( accessorProperty, 'min', this.min );
42
+
43
+ }
44
+
45
+ // get the component type for the provided enum
46
+ if ( property.type === 'ENUM' ) {
47
+
48
+ this.enumSet = enums[ this.enumType ];
49
+ if ( this.componentType === null ) {
50
+
51
+ this.componentType = getField( this.enumSet, 'valueType', 'UINT16' );
52
+
53
+ }
54
+
55
+ }
56
+
57
+ }
58
+
59
+ // shape the given target to match the data type of the property
60
+ // enums are set to their integer value
61
+ shapeToProperty( target, countOverride = null ) {
62
+
63
+ return initializeFromProperty( this, target, countOverride );
64
+
65
+ }
66
+
67
+ // resolve the given object to the default value for the property for a single element
68
+ // enums are set to a default string
69
+ resolveDefaultElement( target ) {
70
+
71
+ return resolveDefaultElement( this, target );
72
+
73
+ }
74
+
75
+ // resolve the target to the default value for the property for every element if it's an array
76
+ // enums are set to a default string
77
+ resolveDefault( target ) {
78
+
79
+ return resolveDefault( this, target );
80
+
81
+ }
82
+
83
+ // converts any instances of no data to the default value
84
+ resolveNoData( target ) {
85
+
86
+ return resolveNoData( this, target );
87
+
88
+ }
89
+
90
+ // converts enums integers in the given target to strings
91
+ resolveEnumsToStrings( target ) {
92
+
93
+ const enumSet = this.enumSet;
94
+ if ( this.type === 'ENUM' ) {
95
+
96
+ if ( Array.isArray( target ) ) {
97
+
98
+ for ( let i = 0, l = target.length; i < l; i ++ ) {
99
+
100
+ target[ i ] = getEnumName( target[ i ] );
101
+
102
+ }
103
+
104
+ } else {
105
+
106
+ target = getEnumName( target );
107
+
108
+ }
109
+
110
+
111
+ }
112
+
113
+ return target;
114
+
115
+ function getEnumName( index ) {
116
+
117
+ const match = enumSet.values.find( e => e.value === index );
118
+ if ( match === null ) {
119
+
120
+ // the default "default enum" value is an empty string when we can't find a match
121
+ // in a case where enums are defined correctly we should never get here.
122
+ return '';
123
+
124
+ } else {
125
+
126
+ return match.name;
127
+
128
+ }
129
+
130
+ }
131
+
132
+ }
133
+
134
+ // apply scales
135
+ adjustValueScaleOffset( target ) {
136
+
137
+ if ( isNumericType( this.type ) ) {
138
+
139
+ return adjustValueScaleOffset( this, target );
140
+
141
+ } else {
142
+
143
+ return target;
144
+
145
+ }
146
+
147
+ }
148
+
149
+ }
@@ -0,0 +1,215 @@
1
+ import { Vector2 } from 'three';
2
+ import { TextureReadUtility } from '../utilities/TextureReadUtility.js';
3
+ import { getTexCoord, getTexelIndices, getTriangleVertexIndices } from '../utilities/TexCoordUtilities.js';
4
+
5
+ const _uv = /* @__PURE__ */ new Vector2();
6
+ const _pixel = /* @__PURE__ */ new Vector2();
7
+ const _dstPixel = /* @__PURE__ */ new Vector2();
8
+
9
+ // retrieve the appropriate UV attribute based on the tex coord index
10
+ function getMaxBarycoordIndex( barycoord ) {
11
+
12
+ if ( barycoord.x > barycoord.y && barycoord.x > barycoord.z ) {
13
+
14
+ return 0;
15
+
16
+ } else if ( barycoord.y > barycoord.z ) {
17
+
18
+ return 1;
19
+
20
+ } else {
21
+
22
+ return 2;
23
+
24
+ }
25
+
26
+ }
27
+
28
+ export class MeshFeatures {
29
+
30
+ constructor( geometry, textures, data ) {
31
+
32
+ this.geometry = geometry;
33
+ this.textures = textures;
34
+ this.data = data;
35
+ this._asyncRead = false;
36
+
37
+ // fill out feature id default values
38
+ this.featureIds = data.featureIds.map( info => {
39
+
40
+ const { texture, ...rest } = info;
41
+ const result = {
42
+ label: null,
43
+ propertyTable: null,
44
+ nullFeatureId: null,
45
+ ...rest,
46
+ };
47
+
48
+ if ( texture ) {
49
+
50
+ result.texture = {
51
+ texCoord: 0,
52
+ channels: [ 0 ],
53
+ ...texture,
54
+ };
55
+
56
+ }
57
+
58
+ return result;
59
+
60
+ } );
61
+
62
+ }
63
+
64
+ // returns list of textures
65
+ getTextures() {
66
+
67
+ return this.textures;
68
+
69
+ }
70
+
71
+ // returns a set of info for each feature
72
+ getFeatureInfo() {
73
+
74
+ return this.featureIds;
75
+
76
+ }
77
+
78
+ // performs texture data read back asynchronously
79
+ getFeaturesAsync( ...args ) {
80
+
81
+ this._asyncRead = true;
82
+ const result = this.getFeatures( ...args );
83
+ this._asyncRead = false;
84
+ return result;
85
+
86
+ }
87
+
88
+ // returns all features for the given point on the given triangle
89
+ getFeatures( triangle, barycoord ) {
90
+
91
+ const { geometry, textures, featureIds } = this;
92
+ const result = new Array( featureIds.length ).fill( null );
93
+
94
+ // prep the canvas width
95
+ const width = featureIds.length;
96
+ TextureReadUtility.increaseSizeTo( width );
97
+
98
+ // get the attribute indices
99
+ const indices = getTriangleVertexIndices( geometry, triangle );
100
+ const closestIndex = indices[ getMaxBarycoordIndex( barycoord ) ];
101
+ for ( let i = 0, l = featureIds.length; i < l; i ++ ) {
102
+
103
+ // the feature id from the closest point is returned
104
+ const featureId = featureIds[ i ];
105
+ const nullFeatureId = 'nullFeatureId' in featureId ? featureId.nullFeatureId : null;
106
+ if ( 'texture' in featureId ) {
107
+
108
+ const texture = textures[ featureId.texture.index ];
109
+
110
+ // get the attribute of the target tex coord and pixel
111
+ getTexCoord( geometry, featureId.texture.texCoord, barycoord, indices, _uv );
112
+ getTexelIndices( _uv, texture.image.width, texture.image.height, _pixel );
113
+ _dstPixel.set( i, 0 );
114
+
115
+ // draw the image
116
+ TextureReadUtility.renderPixelToTarget( textures[ featureId.texture.index ], _pixel, _dstPixel );
117
+
118
+ } else if ( 'attribute' in featureId ) {
119
+
120
+ const attr = geometry.getAttribute( `_feature_id_${ featureId.attribute }` );
121
+ const value = attr.getX( closestIndex );
122
+ if ( value !== nullFeatureId ) {
123
+
124
+ result[ i ] = value;
125
+
126
+ }
127
+
128
+ } else {
129
+
130
+ // implicit id is based on vertex attributes, see 3d-tiles#763
131
+ const value = closestIndex;
132
+ if ( value !== nullFeatureId ) {
133
+
134
+ result[ i ] = value;
135
+
136
+ }
137
+
138
+ }
139
+
140
+ }
141
+
142
+ // read the buffer data
143
+ const buffer = new Uint8Array( width * 4 );
144
+ if ( this._asyncRead ) {
145
+
146
+ return TextureReadUtility
147
+ .readDataAsync( buffer )
148
+ .then( () => {
149
+
150
+ readTextureSampleResults();
151
+ return result;
152
+
153
+ } );
154
+
155
+ } else {
156
+
157
+ TextureReadUtility.readData( buffer );
158
+ readTextureSampleResults();
159
+
160
+ return result;
161
+
162
+ }
163
+
164
+ function readTextureSampleResults() {
165
+
166
+ // get data based on the texture information
167
+ const readBuffer = new Uint32Array( 1 );
168
+ for ( let i = 0, l = featureIds.length; i < l; i ++ ) {
169
+
170
+ const featureId = featureIds[ i ];
171
+ const nullFeatureId = 'nullFeatureId' in featureId ? featureId.nullFeatureId : null;
172
+ if ( 'texture' in featureId ) {
173
+
174
+ // TODO: do we need to handle big-endian here?
175
+ const { channels } = featureId.texture;
176
+ const data = channels.map( c => buffer[ 4 * i + c ] );
177
+ new Uint8Array( readBuffer.buffer ).set( data );
178
+
179
+ const value = readBuffer[ 0 ];
180
+ if ( value !== nullFeatureId ) {
181
+
182
+ result[ i ] = value;
183
+
184
+ }
185
+
186
+ }
187
+
188
+ }
189
+
190
+ }
191
+
192
+ }
193
+
194
+ // dispose all of the texture data used
195
+ dispose() {
196
+
197
+ this.textures.forEach( texture => {
198
+
199
+ if ( texture ) {
200
+
201
+ texture.dispose();
202
+
203
+ if ( texture.image instanceof ImageBitmap ) {
204
+
205
+ texture.image.close();
206
+
207
+ }
208
+
209
+ }
210
+
211
+ } );
212
+
213
+ }
214
+
215
+ }
@@ -0,0 +1,107 @@
1
+ import { initializeFromClass, isMatrixType, isVectorType } from '../utilities/ClassPropertyHelpers.js';
2
+ import { ClassProperty } from './ClassProperty.js';
3
+ import { PropertySetAccessor } from './PropertySetAccessor.js';
4
+
5
+ class PropertyAttributeClassProperty extends ClassProperty {
6
+
7
+ constructor( enums, classProperty, attributeProperty = null ) {
8
+
9
+ super( enums, classProperty, attributeProperty );
10
+
11
+ this.attribute = attributeProperty.attribute;
12
+
13
+ }
14
+
15
+ }
16
+
17
+ export class PropertyAttributeAccessor extends PropertySetAccessor {
18
+
19
+ constructor( ...args ) {
20
+
21
+ super( ...args );
22
+
23
+ this.isPropertyAttributeAccessor = true;
24
+ this._initProperties( PropertyAttributeClassProperty );
25
+
26
+ }
27
+
28
+ getData( id, geometry, target = {} ) {
29
+
30
+ const properties = this.properties;
31
+ initializeFromClass( properties, target );
32
+
33
+ for ( const name in properties ) {
34
+
35
+ target[ name ] = this.getPropertyValue( name, id, geometry, target[ name ] );
36
+
37
+ }
38
+
39
+ return target;
40
+
41
+ }
42
+
43
+ getPropertyValue( name, id, geometry, target = null ) {
44
+
45
+ // NOTE: arrays are not supported via attribute accessors
46
+ if ( id >= this.count ) {
47
+
48
+ throw new Error( 'PropertyAttributeAccessor: Requested index is outside the range of the buffer.' );
49
+
50
+ }
51
+
52
+ // use a default of the texture accessor definition does not include the value
53
+ const property = this.properties[ name ];
54
+ const type = property.type;
55
+ if ( ! property ) {
56
+
57
+ throw new Error( 'PropertyAttributeAccessor: Requested class property does not exist.' );
58
+
59
+ } else if ( ! this.definition.properties[ name ] ) {
60
+
61
+ return property.resolveDefault( target );
62
+
63
+ }
64
+
65
+ // initialize the array
66
+ target = property.shapeToProperty( target );
67
+
68
+ // Read the data values from the attribute
69
+ const attribute = geometry.getAttribute( property.attribute.toLowerCase() );
70
+ if ( isMatrixType( type ) ) {
71
+
72
+ const elements = target.elements;
73
+ for ( let i = 0, l = elements.length; i < l; i < l ) {
74
+
75
+ elements[ i ] = attribute.getComponent( id, i );
76
+
77
+ }
78
+
79
+ } else if ( isVectorType( type ) ) {
80
+
81
+ target.fromBufferAttribute( attribute, id );
82
+
83
+ } else if ( type === 'SCALAR' || type === 'ENUM' ) {
84
+
85
+ target = attribute.getX( id );
86
+
87
+ } else {
88
+
89
+ // BOOLEAN, STRING not supported
90
+ throw new Error( 'StructuredMetadata.PropertyAttributeAccessor: BOOLEAN and STRING types are not supported by property attributes.' );
91
+
92
+ }
93
+
94
+ // scale the numeric values
95
+ target = property.adjustValueScaleOffset( target );
96
+
97
+ // convert to enum strings - no data enum values are stored as strings
98
+ target = property.resolveEnumsToStrings( target );
99
+
100
+ // resolve to default values
101
+ target = property.resolveNoData( target );
102
+
103
+ return target;
104
+
105
+ }
106
+
107
+ }
@@ -0,0 +1,45 @@
1
+ import { ClassProperty } from './ClassProperty.js';
2
+
3
+ export class PropertySetAccessor {
4
+
5
+ constructor( definition, classes = {}, enums = {}, data = null ) {
6
+
7
+ this.definition = definition;
8
+ this.class = classes[ definition.class ];
9
+ this.className = definition.class;
10
+ this.enums = enums;
11
+ this.data = data;
12
+ this.name = 'name' in definition ? definition.name : null;
13
+
14
+ this.properties = null;
15
+
16
+ }
17
+
18
+ getPropertyNames() {
19
+
20
+ return Object.keys( this.class.properties );
21
+
22
+ }
23
+
24
+ includesData( name ) {
25
+
26
+ return Boolean( this.definition.properties[ name ] );
27
+
28
+ }
29
+
30
+ dispose() {}
31
+
32
+ _initProperties( propertyClass = ClassProperty ) {
33
+
34
+ const properties = {};
35
+ for ( const key in this.class.properties ) {
36
+
37
+ properties[ key ] = new propertyClass( this.enums, this.class.properties[ key ], this.definition.properties[ key ] );
38
+
39
+ }
40
+
41
+ this.properties = properties;
42
+
43
+ }
44
+
45
+ }