sdl-mcp 0.12.2 → 0.12.3
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.
- package/README.md +10 -0
- package/config/sdlmcp.config.example.json +53 -8
- package/config/sdlmcp.config.schema.json +530 -106
- package/dist/.tsbuildinfo +1 -1
- package/dist/benchmark/external-manifest.d.ts +162 -0
- package/dist/benchmark/external-manifest.d.ts.map +1 -0
- package/dist/benchmark/external-manifest.js +336 -0
- package/dist/benchmark/external-manifest.js.map +1 -0
- package/dist/benchmark/external-runner.d.ts +100 -0
- package/dist/benchmark/external-runner.d.ts.map +1 -0
- package/dist/benchmark/external-runner.js +1171 -0
- package/dist/benchmark/external-runner.js.map +1 -0
- package/dist/benchmark/output-file.d.ts +3 -0
- package/dist/benchmark/output-file.d.ts.map +1 -0
- package/dist/benchmark/output-file.js +8 -0
- package/dist/benchmark/output-file.js.map +1 -0
- package/dist/cli/argParsing.d.ts.map +1 -1
- package/dist/cli/argParsing.js +6 -0
- package/dist/cli/argParsing.js.map +1 -1
- package/dist/cli/commands/benchmark.d.ts.map +1 -1
- package/dist/cli/commands/benchmark.js +3 -2
- package/dist/cli/commands/benchmark.js.map +1 -1
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +13 -7
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts +5 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +73 -3
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/serve.js +2 -0
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/transport/http.d.ts +1 -35
- package/dist/cli/transport/http.d.ts.map +1 -1
- package/dist/cli/transport/http.js +151 -175
- package/dist/cli/transport/http.js.map +1 -1
- package/dist/cli/types.d.ts +1 -0
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/config/constants.d.ts +30 -0
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +30 -0
- package/dist/config/constants.js.map +1 -1
- package/dist/config/types.d.ts +53 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +62 -14
- package/dist/config/types.js.map +1 -1
- package/dist/db/ladybug-batching.d.ts +1 -0
- package/dist/db/ladybug-batching.d.ts.map +1 -1
- package/dist/db/ladybug-batching.js +1 -0
- package/dist/db/ladybug-batching.js.map +1 -1
- package/dist/db/ladybug-core.d.ts +3 -0
- package/dist/db/ladybug-core.d.ts.map +1 -1
- package/dist/db/ladybug-core.js +72 -2
- package/dist/db/ladybug-core.js.map +1 -1
- package/dist/db/ladybug-embeddings.d.ts +6 -1
- package/dist/db/ladybug-embeddings.d.ts.map +1 -1
- package/dist/db/ladybug-embeddings.js +6 -1
- package/dist/db/ladybug-embeddings.js.map +1 -1
- package/dist/db/ladybug-file-summaries.d.ts.map +1 -1
- package/dist/db/ladybug-file-summaries.js +23 -0
- package/dist/db/ladybug-file-summaries.js.map +1 -1
- package/dist/db/ladybug-queries.js +1 -1
- package/dist/db/ladybug-queries.js.map +1 -1
- package/dist/db/migrations/index.d.ts.map +1 -1
- package/dist/db/migrations/index.js +2 -0
- package/dist/db/migrations/index.js.map +1 -1
- package/dist/db/migrations/m007-copy-embeddings-to-symbol.d.ts +5 -9
- package/dist/db/migrations/m007-copy-embeddings-to-symbol.d.ts.map +1 -1
- package/dist/db/migrations/m007-copy-embeddings-to-symbol.js +24 -126
- package/dist/db/migrations/m007-copy-embeddings-to-symbol.js.map +1 -1
- package/dist/db/migrations/m021-remediate-symbol-embeddings.d.ts +5 -0
- package/dist/db/migrations/m021-remediate-symbol-embeddings.d.ts.map +1 -0
- package/dist/db/migrations/m021-remediate-symbol-embeddings.js +7 -0
- package/dist/db/migrations/m021-remediate-symbol-embeddings.js.map +1 -0
- package/dist/db/migrations/symbol-embedding-remediation.d.ts +57 -0
- package/dist/db/migrations/symbol-embedding-remediation.d.ts.map +1 -0
- package/dist/db/migrations/symbol-embedding-remediation.js +335 -0
- package/dist/db/migrations/symbol-embedding-remediation.js.map +1 -0
- package/dist/graph/layout/force-layout.d.ts +4 -0
- package/dist/graph/layout/force-layout.d.ts.map +1 -0
- package/dist/graph/layout/force-layout.js +127 -0
- package/dist/graph/layout/force-layout.js.map +1 -0
- package/dist/graph/layout/layout-service.d.ts +37 -0
- package/dist/graph/layout/layout-service.d.ts.map +1 -0
- package/dist/graph/layout/layout-service.js +172 -0
- package/dist/graph/layout/layout-service.js.map +1 -0
- package/dist/graph/layout/native-engine.d.ts +9 -0
- package/dist/graph/layout/native-engine.d.ts.map +1 -0
- package/dist/graph/layout/native-engine.js +59 -0
- package/dist/graph/layout/native-engine.js.map +1 -0
- package/dist/graph/layout/prng.d.ts +3 -0
- package/dist/graph/layout/prng.d.ts.map +1 -0
- package/dist/graph/layout/prng.js +19 -0
- package/dist/graph/layout/prng.js.map +1 -0
- package/dist/graph/layout/serializer.d.ts +3 -0
- package/dist/graph/layout/serializer.d.ts.map +1 -0
- package/dist/graph/layout/serializer.js +20 -0
- package/dist/graph/layout/serializer.js.map +1 -0
- package/dist/graph/layout/types.d.ts +30 -0
- package/dist/graph/layout/types.d.ts.map +1 -0
- package/dist/graph/layout/types.js +2 -0
- package/dist/graph/layout/types.js.map +1 -0
- package/dist/indexer/embeddings.d.ts +7 -0
- package/dist/indexer/embeddings.d.ts.map +1 -1
- package/dist/indexer/embeddings.js +44 -4
- package/dist/indexer/embeddings.js.map +1 -1
- package/dist/indexer/file-summary-embeddings.d.ts +12 -0
- package/dist/indexer/file-summary-embeddings.d.ts.map +1 -1
- package/dist/indexer/file-summary-embeddings.js +83 -21
- package/dist/indexer/file-summary-embeddings.js.map +1 -1
- package/dist/indexer/fileWalker.d.ts.map +1 -1
- package/dist/indexer/fileWalker.js +2 -1
- package/dist/indexer/fileWalker.js.map +1 -1
- package/dist/indexer/metrics-updater.d.ts.map +1 -1
- package/dist/indexer/metrics-updater.js +27 -4
- package/dist/indexer/metrics-updater.js.map +1 -1
- package/dist/indexer/watcher.d.ts.map +1 -1
- package/dist/indexer/watcher.js +2 -1
- package/dist/indexer/watcher.js.map +1 -1
- package/dist/mcp/context-response-projection.d.ts.map +1 -1
- package/dist/mcp/context-response-projection.js +49 -13
- package/dist/mcp/context-response-projection.js.map +1 -1
- package/dist/mcp/tools/search-edit/planner.d.ts.map +1 -1
- package/dist/mcp/tools/search-edit/planner.js +10 -3
- package/dist/mcp/tools/search-edit/planner.js.map +1 -1
- package/dist/observability/event-tap.d.ts +2 -1
- package/dist/observability/event-tap.d.ts.map +1 -1
- package/dist/observability/event-tap.js.map +1 -1
- package/dist/observability/service.d.ts +11 -4
- package/dist/observability/service.d.ts.map +1 -1
- package/dist/observability/service.js +83 -13
- package/dist/observability/service.js.map +1 -1
- package/dist/observability/types.d.ts +48 -2
- package/dist/observability/types.d.ts.map +1 -1
- package/dist/ui/.tsbuildinfo +1 -0
- package/dist/ui/vendor/fflate.js +2692 -0
- package/dist/ui/vendor/jsm/controls/ArcballControls.js +3543 -0
- package/dist/ui/vendor/jsm/controls/DragControls.js +452 -0
- package/dist/ui/vendor/jsm/controls/FirstPersonControls.js +488 -0
- package/dist/ui/vendor/jsm/controls/FlyControls.js +384 -0
- package/dist/ui/vendor/jsm/controls/MapControls.js +116 -0
- package/dist/ui/vendor/jsm/controls/OrbitControls.js +1963 -0
- package/dist/ui/vendor/jsm/controls/PointerLockControls.js +264 -0
- package/dist/ui/vendor/jsm/controls/TrackballControls.js +1001 -0
- package/dist/ui/vendor/jsm/controls/TransformControls.js +2003 -0
- package/dist/ui/vendor/jsm/loaders/3DMLoader.js +1836 -0
- package/dist/ui/vendor/jsm/loaders/3MFLoader.js +1621 -0
- package/dist/ui/vendor/jsm/loaders/AMFLoader.js +541 -0
- package/dist/ui/vendor/jsm/loaders/BVHLoader.js +484 -0
- package/dist/ui/vendor/jsm/loaders/ColladaLoader.js +153 -0
- package/dist/ui/vendor/jsm/loaders/DDSLoader.js +385 -0
- package/dist/ui/vendor/jsm/loaders/DRACOLoader.js +772 -0
- package/dist/ui/vendor/jsm/loaders/EXRLoader.js +3395 -0
- package/dist/ui/vendor/jsm/loaders/FBXLoader.js +4580 -0
- package/dist/ui/vendor/jsm/loaders/FontLoader.js +260 -0
- package/dist/ui/vendor/jsm/loaders/GCodeLoader.js +318 -0
- package/dist/ui/vendor/jsm/loaders/GLTFLoader.js +4860 -0
- package/dist/ui/vendor/jsm/loaders/HDRCubeTextureLoader.js +164 -0
- package/dist/ui/vendor/jsm/loaders/HDRLoader.js +463 -0
- package/dist/ui/vendor/jsm/loaders/IESLoader.js +379 -0
- package/dist/ui/vendor/jsm/loaders/KMZLoader.js +163 -0
- package/dist/ui/vendor/jsm/loaders/KTX2Loader.js +1276 -0
- package/dist/ui/vendor/jsm/loaders/KTXLoader.js +197 -0
- package/dist/ui/vendor/jsm/loaders/LDrawLoader.js +2510 -0
- package/dist/ui/vendor/jsm/loaders/LUT3dlLoader.js +205 -0
- package/dist/ui/vendor/jsm/loaders/LUTCubeLoader.js +190 -0
- package/dist/ui/vendor/jsm/loaders/LUTImageLoader.js +190 -0
- package/dist/ui/vendor/jsm/loaders/LWOLoader.js +1051 -0
- package/dist/ui/vendor/jsm/loaders/LottieLoader.js +130 -0
- package/dist/ui/vendor/jsm/loaders/MD2Loader.js +435 -0
- package/dist/ui/vendor/jsm/loaders/MDDLoader.js +147 -0
- package/dist/ui/vendor/jsm/loaders/MTLLoader.js +593 -0
- package/dist/ui/vendor/jsm/loaders/MaterialXLoader.js +1126 -0
- package/dist/ui/vendor/jsm/loaders/NRRDLoader.js +718 -0
- package/dist/ui/vendor/jsm/loaders/OBJLoader.js +955 -0
- package/dist/ui/vendor/jsm/loaders/PCDLoader.js +620 -0
- package/dist/ui/vendor/jsm/loaders/PDBLoader.js +272 -0
- package/dist/ui/vendor/jsm/loaders/PLYLoader.js +968 -0
- package/dist/ui/vendor/jsm/loaders/PVRLoader.js +270 -0
- package/dist/ui/vendor/jsm/loaders/RGBELoader.js +18 -0
- package/dist/ui/vendor/jsm/loaders/STLLoader.js +421 -0
- package/dist/ui/vendor/jsm/loaders/SVGLoader.js +3319 -0
- package/dist/ui/vendor/jsm/loaders/TDSLoader.js +1142 -0
- package/dist/ui/vendor/jsm/loaders/TGALoader.js +538 -0
- package/dist/ui/vendor/jsm/loaders/TIFFLoader.js +59 -0
- package/dist/ui/vendor/jsm/loaders/TTFLoader.js +261 -0
- package/dist/ui/vendor/jsm/loaders/USDLoader.js +303 -0
- package/dist/ui/vendor/jsm/loaders/USDZLoader.js +16 -0
- package/dist/ui/vendor/jsm/loaders/UltraHDRLoader.js +755 -0
- package/dist/ui/vendor/jsm/loaders/VOXLoader.js +919 -0
- package/dist/ui/vendor/jsm/loaders/VRMLLoader.js +3646 -0
- package/dist/ui/vendor/jsm/loaders/VTKLoader.js +1293 -0
- package/dist/ui/vendor/jsm/loaders/XYZLoader.js +143 -0
- package/dist/ui/vendor/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/dist/ui/vendor/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/dist/ui/vendor/jsm/loaders/lwo/IFFParser.js +1217 -0
- package/dist/ui/vendor/jsm/loaders/lwo/LWO2Parser.js +414 -0
- package/dist/ui/vendor/jsm/loaders/lwo/LWO3Parser.js +373 -0
- package/dist/ui/vendor/jsm/loaders/usd/USDAParser.js +901 -0
- package/dist/ui/vendor/jsm/loaders/usd/USDCParser.js +1878 -0
- package/dist/ui/vendor/jsm/loaders/usd/USDComposer.js +4627 -0
- package/dist/ui/vendor/jsm/utils/BufferGeometryUtils.js +1501 -0
- package/dist/ui/vendor/jsm/utils/CameraUtils.js +82 -0
- package/dist/ui/vendor/jsm/utils/ColorUtils.js +76 -0
- package/dist/ui/vendor/jsm/utils/GeometryCompressionUtils.js +547 -0
- package/dist/ui/vendor/jsm/utils/GeometryUtils.js +226 -0
- package/dist/ui/vendor/jsm/utils/LDrawUtils.js +211 -0
- package/dist/ui/vendor/jsm/utils/SceneOptimizer.js +458 -0
- package/dist/ui/vendor/jsm/utils/SceneUtils.js +363 -0
- package/dist/ui/vendor/jsm/utils/ShadowMapViewer.js +244 -0
- package/dist/ui/vendor/jsm/utils/ShadowMapViewerGPU.js +233 -0
- package/dist/ui/vendor/jsm/utils/SkeletonUtils.js +496 -0
- package/dist/ui/vendor/jsm/utils/SortUtils.js +175 -0
- package/dist/ui/vendor/jsm/utils/UVsDebug.js +173 -0
- package/dist/ui/vendor/jsm/utils/WebGLTextureUtils.js +115 -0
- package/dist/ui/vendor/jsm/utils/WebGPUTextureUtils.js +81 -0
- package/dist/ui/vendor/jsm/utils/WorkerPool.js +167 -0
- package/dist/ui/vendor/three.core.min.js +6 -0
- package/dist/ui/vendor/three.module.min.js +6 -0
- package/dist/ui/viewer/ambient.js +39 -0
- package/dist/ui/viewer/api.js +93 -0
- package/dist/ui/viewer/chrome.js +36 -0
- package/dist/ui/viewer/edges.js +33 -0
- package/dist/ui/viewer/index.html +32 -0
- package/dist/ui/viewer/inspector.js +23 -0
- package/dist/ui/viewer/lenses/activity.js +24 -0
- package/dist/ui/viewer/lenses/community.js +5 -0
- package/dist/ui/viewer/lenses/edges.js +4 -0
- package/dist/ui/viewer/lenses/impact.js +6 -0
- package/dist/ui/viewer/lenses/search.js +69 -0
- package/dist/ui/viewer/lod.js +100 -0
- package/dist/ui/viewer/main.js +92 -0
- package/dist/ui/viewer/picking.js +45 -0
- package/dist/ui/viewer/scene.js +85 -0
- package/dist/ui/viewer/skins/default-skin.js +15 -0
- package/dist/ui/viewer/skins/loader.js +44 -0
- package/dist/ui/viewer/skins/manifest-schema.js +30 -0
- package/dist/ui/viewer/state.js +44 -0
- package/dist/ui/viewer/theme.js +23 -0
- package/dist/ui/viewer/universe.js +151 -0
- package/dist/ui/viewer/viewer.css +85 -0
- package/dist/util/safeRegex.d.ts.map +1 -1
- package/dist/util/safeRegex.js +221 -68
- package/dist/util/safeRegex.js.map +1 -1
- package/dist/viewer/legacy-graph.d.ts +40 -0
- package/dist/viewer/legacy-graph.d.ts.map +1 -0
- package/dist/viewer/legacy-graph.js +152 -0
- package/dist/viewer/legacy-graph.js.map +1 -0
- package/dist/viewer/routes.d.ts +10 -0
- package/dist/viewer/routes.d.ts.map +1 -0
- package/dist/viewer/routes.js +221 -0
- package/dist/viewer/routes.js.map +1 -0
- package/dist/viewer/service.d.ts +44 -0
- package/dist/viewer/service.d.ts.map +1 -0
- package/dist/viewer/service.js +160 -0
- package/dist/viewer/service.js.map +1 -0
- package/dist/viewer/types.d.ts +63 -0
- package/dist/viewer/types.d.ts.map +1 -0
- package/dist/viewer/types.js +2 -0
- package/dist/viewer/types.js.map +1 -0
- package/dist/viewer/viewer-config.d.ts +12 -0
- package/dist/viewer/viewer-config.d.ts.map +1 -0
- package/dist/viewer/viewer-config.js +36 -0
- package/dist/viewer/viewer-config.js.map +1 -0
- package/package.json +18 -9
- package/templates/SDL.md +19 -0
- package/templates/claude-code.json +8 -43
- package/dist/ui/graph.css +0 -108
- package/dist/ui/graph.d.ts +0 -2
- package/dist/ui/graph.d.ts.map +0 -1
- package/dist/ui/graph.html +0 -52
- package/dist/ui/graph.js +0 -259
- package/dist/ui/graph.js.map +0 -1
|
@@ -0,0 +1,718 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FileLoader,
|
|
3
|
+
Loader,
|
|
4
|
+
Matrix4,
|
|
5
|
+
Vector3
|
|
6
|
+
} from 'three';
|
|
7
|
+
import { gunzipSync } from '../libs/fflate.module.js';
|
|
8
|
+
import { Volume } from '../misc/Volume.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* A loader for the NRRD format.
|
|
12
|
+
*
|
|
13
|
+
* ```js
|
|
14
|
+
* const loader = new NRRDLoader();
|
|
15
|
+
* const volume = await loader.loadAsync( 'models/nrrd/I.nrrd' );
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* @augments Loader
|
|
19
|
+
* @three_import import { NRRDLoader } from 'three/addons/loaders/NRRDLoader.js';
|
|
20
|
+
*/
|
|
21
|
+
class NRRDLoader extends Loader {
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Constructs a new NRRD loader.
|
|
25
|
+
*
|
|
26
|
+
* @param {LoadingManager} [manager] - The loading manager.
|
|
27
|
+
*/
|
|
28
|
+
constructor( manager ) {
|
|
29
|
+
|
|
30
|
+
super( manager );
|
|
31
|
+
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Starts loading from the given URL and passes the loaded NRRD asset
|
|
36
|
+
* to the `onLoad()` callback.
|
|
37
|
+
*
|
|
38
|
+
* @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
|
|
39
|
+
* @param {function(Volume)} onLoad - Executed when the loading process has been finished.
|
|
40
|
+
* @param {onProgressCallback} onProgress - Executed while the loading is in progress.
|
|
41
|
+
* @param {onErrorCallback} onError - Executed when errors occur.
|
|
42
|
+
*/
|
|
43
|
+
load( url, onLoad, onProgress, onError ) {
|
|
44
|
+
|
|
45
|
+
const scope = this;
|
|
46
|
+
|
|
47
|
+
const loader = new FileLoader( scope.manager );
|
|
48
|
+
loader.setPath( scope.path );
|
|
49
|
+
loader.setResponseType( 'arraybuffer' );
|
|
50
|
+
loader.setRequestHeader( scope.requestHeader );
|
|
51
|
+
loader.setWithCredentials( scope.withCredentials );
|
|
52
|
+
loader.load( url, function ( data ) {
|
|
53
|
+
|
|
54
|
+
try {
|
|
55
|
+
|
|
56
|
+
onLoad( scope.parse( data ) );
|
|
57
|
+
|
|
58
|
+
} catch ( e ) {
|
|
59
|
+
|
|
60
|
+
if ( onError ) {
|
|
61
|
+
|
|
62
|
+
onError( e );
|
|
63
|
+
|
|
64
|
+
} else {
|
|
65
|
+
|
|
66
|
+
console.error( e );
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
scope.manager.itemError( url );
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
}, onProgress, onError );
|
|
75
|
+
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Toggles the segmentation mode.
|
|
80
|
+
*
|
|
81
|
+
* @param {boolean} segmentation - Whether to use segmentation mode or not.
|
|
82
|
+
*/
|
|
83
|
+
setSegmentation( segmentation ) {
|
|
84
|
+
|
|
85
|
+
this.segmentation = segmentation;
|
|
86
|
+
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Parses the given NRRD data and returns the resulting volume data.
|
|
91
|
+
*
|
|
92
|
+
* @param {ArrayBuffer} data - The raw NRRD data as an array buffer.
|
|
93
|
+
* @return {Volume} The parsed volume.
|
|
94
|
+
*/
|
|
95
|
+
parse( data ) {
|
|
96
|
+
|
|
97
|
+
// this parser is largely inspired from the XTK NRRD parser : https://github.com/xtk/X
|
|
98
|
+
|
|
99
|
+
let _data = data;
|
|
100
|
+
|
|
101
|
+
let _dataPointer = 0;
|
|
102
|
+
|
|
103
|
+
const _nativeLittleEndian = new Int8Array( new Int16Array( [ 1 ] ).buffer )[ 0 ] > 0;
|
|
104
|
+
|
|
105
|
+
const _littleEndian = true;
|
|
106
|
+
|
|
107
|
+
const headerObject = {};
|
|
108
|
+
|
|
109
|
+
function scan( type, chunks ) {
|
|
110
|
+
|
|
111
|
+
let _chunkSize = 1;
|
|
112
|
+
let _array_type = Uint8Array;
|
|
113
|
+
|
|
114
|
+
switch ( type ) {
|
|
115
|
+
|
|
116
|
+
// 1 byte data types
|
|
117
|
+
case 'uchar':
|
|
118
|
+
break;
|
|
119
|
+
case 'schar':
|
|
120
|
+
_array_type = Int8Array;
|
|
121
|
+
break;
|
|
122
|
+
// 2 byte data types
|
|
123
|
+
case 'ushort':
|
|
124
|
+
_array_type = Uint16Array;
|
|
125
|
+
_chunkSize = 2;
|
|
126
|
+
break;
|
|
127
|
+
case 'sshort':
|
|
128
|
+
_array_type = Int16Array;
|
|
129
|
+
_chunkSize = 2;
|
|
130
|
+
break;
|
|
131
|
+
// 4 byte data types
|
|
132
|
+
case 'uint':
|
|
133
|
+
_array_type = Uint32Array;
|
|
134
|
+
_chunkSize = 4;
|
|
135
|
+
break;
|
|
136
|
+
case 'sint':
|
|
137
|
+
_array_type = Int32Array;
|
|
138
|
+
_chunkSize = 4;
|
|
139
|
+
break;
|
|
140
|
+
case 'float':
|
|
141
|
+
_array_type = Float32Array;
|
|
142
|
+
_chunkSize = 4;
|
|
143
|
+
break;
|
|
144
|
+
case 'complex':
|
|
145
|
+
_array_type = Float64Array;
|
|
146
|
+
_chunkSize = 8;
|
|
147
|
+
break;
|
|
148
|
+
case 'double':
|
|
149
|
+
_array_type = Float64Array;
|
|
150
|
+
_chunkSize = 8;
|
|
151
|
+
break;
|
|
152
|
+
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// increase the data pointer in-place
|
|
156
|
+
let _bytes = new _array_type( _data.slice( _dataPointer,
|
|
157
|
+
_dataPointer += chunks * _chunkSize ) );
|
|
158
|
+
|
|
159
|
+
// if required, flip the endianness of the bytes
|
|
160
|
+
if ( _nativeLittleEndian != _littleEndian ) {
|
|
161
|
+
|
|
162
|
+
// we need to flip here since the format doesn't match the native endianness
|
|
163
|
+
_bytes = flipEndianness( _bytes, _chunkSize );
|
|
164
|
+
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// return the byte array
|
|
168
|
+
return _bytes;
|
|
169
|
+
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
//Flips typed array endianness in-place. Based on https://github.com/kig/DataStream.js/blob/master/DataStream.js.
|
|
173
|
+
|
|
174
|
+
function flipEndianness( array, chunkSize ) {
|
|
175
|
+
|
|
176
|
+
const u8 = new Uint8Array( array.buffer, array.byteOffset, array.byteLength );
|
|
177
|
+
for ( let i = 0; i < array.byteLength; i += chunkSize ) {
|
|
178
|
+
|
|
179
|
+
for ( let j = i + chunkSize - 1, k = i; j > k; j --, k ++ ) {
|
|
180
|
+
|
|
181
|
+
const tmp = u8[ k ];
|
|
182
|
+
u8[ k ] = u8[ j ];
|
|
183
|
+
u8[ j ] = tmp;
|
|
184
|
+
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
return array;
|
|
190
|
+
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
//parse the header
|
|
194
|
+
function parseHeader( header ) {
|
|
195
|
+
|
|
196
|
+
let data, field, fn, i, l, m, _i, _len;
|
|
197
|
+
const lines = header.split( /\r?\n/ );
|
|
198
|
+
for ( _i = 0, _len = lines.length; _i < _len; _i ++ ) {
|
|
199
|
+
|
|
200
|
+
l = lines[ _i ];
|
|
201
|
+
if ( l.match( /NRRD\d+/ ) ) {
|
|
202
|
+
|
|
203
|
+
headerObject.isNrrd = true;
|
|
204
|
+
|
|
205
|
+
} else if ( ! l.match( /^#/ ) && ( m = l.match( /(.*):(.*)/ ) ) ) {
|
|
206
|
+
|
|
207
|
+
field = m[ 1 ].trim();
|
|
208
|
+
data = m[ 2 ].trim();
|
|
209
|
+
fn = _fieldFunctions[ field ];
|
|
210
|
+
if ( fn ) {
|
|
211
|
+
|
|
212
|
+
fn.call( headerObject, data );
|
|
213
|
+
|
|
214
|
+
} else {
|
|
215
|
+
|
|
216
|
+
headerObject[ field ] = data;
|
|
217
|
+
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
if ( ! headerObject.isNrrd ) {
|
|
225
|
+
|
|
226
|
+
throw new Error( 'THREE.NRRDLoader: Not an NRRD file' );
|
|
227
|
+
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
if ( headerObject.encoding === 'bz2' || headerObject.encoding === 'bzip2' ) {
|
|
231
|
+
|
|
232
|
+
throw new Error( 'THREE.NRRDLoader: Bzip is not supported' );
|
|
233
|
+
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
if ( ! headerObject.vectors ) {
|
|
237
|
+
|
|
238
|
+
//if no space direction is set, let's use the identity
|
|
239
|
+
headerObject.vectors = [ ];
|
|
240
|
+
headerObject.vectors.push( [ 1, 0, 0 ] );
|
|
241
|
+
headerObject.vectors.push( [ 0, 1, 0 ] );
|
|
242
|
+
headerObject.vectors.push( [ 0, 0, 1 ] );
|
|
243
|
+
|
|
244
|
+
//apply spacing if defined
|
|
245
|
+
if ( headerObject.spacings ) {
|
|
246
|
+
|
|
247
|
+
for ( i = 0; i <= 2; i ++ ) {
|
|
248
|
+
|
|
249
|
+
if ( ! isNaN( headerObject.spacings[ i ] ) ) {
|
|
250
|
+
|
|
251
|
+
for ( let j = 0; j <= 2; j ++ ) {
|
|
252
|
+
|
|
253
|
+
headerObject.vectors[ i ][ j ] *= headerObject.spacings[ i ];
|
|
254
|
+
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
//parse the data when registered as one of this type : 'text', 'ascii', 'txt'
|
|
268
|
+
function parseDataAsText( data, start, end ) {
|
|
269
|
+
|
|
270
|
+
let number = '';
|
|
271
|
+
start = start || 0;
|
|
272
|
+
end = end || data.length;
|
|
273
|
+
let value;
|
|
274
|
+
//length of the result is the product of the sizes
|
|
275
|
+
const lengthOfTheResult = headerObject.sizes.reduce( function ( previous, current ) {
|
|
276
|
+
|
|
277
|
+
return previous * current;
|
|
278
|
+
|
|
279
|
+
}, 1 );
|
|
280
|
+
|
|
281
|
+
let base = 10;
|
|
282
|
+
if ( headerObject.encoding === 'hex' ) {
|
|
283
|
+
|
|
284
|
+
base = 16;
|
|
285
|
+
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
const result = new headerObject.__array( lengthOfTheResult );
|
|
289
|
+
let resultIndex = 0;
|
|
290
|
+
let parsingFunction = parseInt;
|
|
291
|
+
if ( headerObject.__array === Float32Array || headerObject.__array === Float64Array ) {
|
|
292
|
+
|
|
293
|
+
parsingFunction = parseFloat;
|
|
294
|
+
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
for ( let i = start; i < end; i ++ ) {
|
|
298
|
+
|
|
299
|
+
value = data[ i ];
|
|
300
|
+
//if value is not a space
|
|
301
|
+
if ( ( value < 9 || value > 13 ) && value !== 32 ) {
|
|
302
|
+
|
|
303
|
+
number += String.fromCharCode( value );
|
|
304
|
+
|
|
305
|
+
} else {
|
|
306
|
+
|
|
307
|
+
if ( number !== '' ) {
|
|
308
|
+
|
|
309
|
+
result[ resultIndex ] = parsingFunction( number, base );
|
|
310
|
+
resultIndex ++;
|
|
311
|
+
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
number = '';
|
|
315
|
+
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
if ( number !== '' ) {
|
|
321
|
+
|
|
322
|
+
result[ resultIndex ] = parsingFunction( number, base );
|
|
323
|
+
resultIndex ++;
|
|
324
|
+
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
return result;
|
|
328
|
+
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
const _bytes = scan( 'uchar', data.byteLength );
|
|
332
|
+
const _length = _bytes.length;
|
|
333
|
+
let _header = null;
|
|
334
|
+
let _data_start = 0;
|
|
335
|
+
let i;
|
|
336
|
+
for ( i = 1; i < _length; i ++ ) {
|
|
337
|
+
|
|
338
|
+
if ( _bytes[ i - 1 ] == 10 && _bytes[ i ] == 10 ) {
|
|
339
|
+
|
|
340
|
+
// we found two line breaks in a row
|
|
341
|
+
// now we know what the header is
|
|
342
|
+
_header = this._parseChars( _bytes, 0, i - 2 );
|
|
343
|
+
// this is were the data starts
|
|
344
|
+
_data_start = i + 1;
|
|
345
|
+
break;
|
|
346
|
+
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
// parse the header
|
|
352
|
+
parseHeader( _header );
|
|
353
|
+
|
|
354
|
+
_data = _bytes.subarray( _data_start ); // the data without header
|
|
355
|
+
if ( headerObject.encoding.substring( 0, 2 ) === 'gz' ) {
|
|
356
|
+
|
|
357
|
+
// we need to decompress the datastream
|
|
358
|
+
// here we start the unzipping and get a typed Uint8Array back
|
|
359
|
+
_data = gunzipSync( new Uint8Array( _data ) );
|
|
360
|
+
|
|
361
|
+
} else if ( headerObject.encoding === 'ascii' || headerObject.encoding === 'text' || headerObject.encoding === 'txt' || headerObject.encoding === 'hex' ) {
|
|
362
|
+
|
|
363
|
+
_data = parseDataAsText( _data );
|
|
364
|
+
|
|
365
|
+
} else if ( headerObject.encoding === 'raw' ) {
|
|
366
|
+
|
|
367
|
+
//we need to copy the array to create a new array buffer, else we retrieve the original arraybuffer with the header
|
|
368
|
+
const _copy = new Uint8Array( _data.length );
|
|
369
|
+
|
|
370
|
+
for ( let i = 0; i < _data.length; i ++ ) {
|
|
371
|
+
|
|
372
|
+
_copy[ i ] = _data[ i ];
|
|
373
|
+
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
_data = _copy;
|
|
377
|
+
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
// .. let's use the underlying array buffer
|
|
381
|
+
_data = _data.buffer;
|
|
382
|
+
|
|
383
|
+
const volume = new Volume();
|
|
384
|
+
volume.header = headerObject;
|
|
385
|
+
volume.segmentation = this.segmentation;
|
|
386
|
+
//
|
|
387
|
+
// parse the (unzipped) data to a datastream of the correct type
|
|
388
|
+
//
|
|
389
|
+
volume.data = new headerObject.__array( _data );
|
|
390
|
+
// get the min and max intensities
|
|
391
|
+
const min_max = volume.computeMinMax();
|
|
392
|
+
const min = min_max[ 0 ];
|
|
393
|
+
const max = min_max[ 1 ];
|
|
394
|
+
// attach the scalar range to the volume
|
|
395
|
+
volume.windowLow = min;
|
|
396
|
+
volume.windowHigh = max;
|
|
397
|
+
|
|
398
|
+
// get the image dimensions
|
|
399
|
+
volume.dimensions = [ headerObject.sizes[ 0 ], headerObject.sizes[ 1 ], headerObject.sizes[ 2 ] ];
|
|
400
|
+
volume.xLength = volume.dimensions[ 0 ];
|
|
401
|
+
volume.yLength = volume.dimensions[ 1 ];
|
|
402
|
+
volume.zLength = volume.dimensions[ 2 ];
|
|
403
|
+
|
|
404
|
+
// Identify axis order in the space-directions matrix from the header if possible.
|
|
405
|
+
if ( headerObject.vectors ) {
|
|
406
|
+
|
|
407
|
+
const xIndex = headerObject.vectors.findIndex( vector => vector[ 0 ] !== 0 );
|
|
408
|
+
const yIndex = headerObject.vectors.findIndex( vector => vector[ 1 ] !== 0 );
|
|
409
|
+
const zIndex = headerObject.vectors.findIndex( vector => vector[ 2 ] !== 0 );
|
|
410
|
+
|
|
411
|
+
const axisOrder = [];
|
|
412
|
+
|
|
413
|
+
if ( xIndex !== yIndex && xIndex !== zIndex && yIndex !== zIndex ) {
|
|
414
|
+
|
|
415
|
+
axisOrder[ xIndex ] = 'x';
|
|
416
|
+
axisOrder[ yIndex ] = 'y';
|
|
417
|
+
axisOrder[ zIndex ] = 'z';
|
|
418
|
+
|
|
419
|
+
} else {
|
|
420
|
+
|
|
421
|
+
axisOrder[ 0 ] = 'x';
|
|
422
|
+
axisOrder[ 1 ] = 'y';
|
|
423
|
+
axisOrder[ 2 ] = 'z';
|
|
424
|
+
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
volume.axisOrder = axisOrder;
|
|
428
|
+
|
|
429
|
+
} else {
|
|
430
|
+
|
|
431
|
+
volume.axisOrder = [ 'x', 'y', 'z' ];
|
|
432
|
+
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
// spacing
|
|
436
|
+
const spacingX = new Vector3().fromArray( headerObject.vectors[ 0 ] ).length();
|
|
437
|
+
const spacingY = new Vector3().fromArray( headerObject.vectors[ 1 ] ).length();
|
|
438
|
+
const spacingZ = new Vector3().fromArray( headerObject.vectors[ 2 ] ).length();
|
|
439
|
+
volume.spacing = [ spacingX, spacingY, spacingZ ];
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
// Create IJKtoRAS matrix
|
|
443
|
+
volume.matrix = new Matrix4();
|
|
444
|
+
|
|
445
|
+
const transitionMatrix = new Matrix4();
|
|
446
|
+
|
|
447
|
+
if ( headerObject.space === 'left-posterior-superior' ) {
|
|
448
|
+
|
|
449
|
+
transitionMatrix.set(
|
|
450
|
+
- 1, 0, 0, 0,
|
|
451
|
+
0, - 1, 0, 0,
|
|
452
|
+
0, 0, 1, 0,
|
|
453
|
+
0, 0, 0, 1
|
|
454
|
+
);
|
|
455
|
+
|
|
456
|
+
} else if ( headerObject.space === 'left-anterior-superior' ) {
|
|
457
|
+
|
|
458
|
+
transitionMatrix.set(
|
|
459
|
+
1, 0, 0, 0,
|
|
460
|
+
0, 1, 0, 0,
|
|
461
|
+
0, 0, - 1, 0,
|
|
462
|
+
0, 0, 0, 1
|
|
463
|
+
);
|
|
464
|
+
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
if ( ! headerObject.vectors ) {
|
|
469
|
+
|
|
470
|
+
volume.matrix.set(
|
|
471
|
+
1, 0, 0, 0,
|
|
472
|
+
0, 1, 0, 0,
|
|
473
|
+
0, 0, 1, 0,
|
|
474
|
+
0, 0, 0, 1 );
|
|
475
|
+
|
|
476
|
+
} else {
|
|
477
|
+
|
|
478
|
+
const v = headerObject.vectors;
|
|
479
|
+
|
|
480
|
+
const ijk_to_transition = new Matrix4().set(
|
|
481
|
+
v[ 0 ][ 0 ], v[ 1 ][ 0 ], v[ 2 ][ 0 ], 0,
|
|
482
|
+
v[ 0 ][ 1 ], v[ 1 ][ 1 ], v[ 2 ][ 1 ], 0,
|
|
483
|
+
v[ 0 ][ 2 ], v[ 1 ][ 2 ], v[ 2 ][ 2 ], 0,
|
|
484
|
+
0, 0, 0, 1
|
|
485
|
+
);
|
|
486
|
+
|
|
487
|
+
const transition_to_ras = new Matrix4().multiplyMatrices( ijk_to_transition, transitionMatrix );
|
|
488
|
+
|
|
489
|
+
volume.matrix = transition_to_ras;
|
|
490
|
+
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
volume.inverseMatrix = new Matrix4();
|
|
494
|
+
volume.inverseMatrix.copy( volume.matrix ).invert();
|
|
495
|
+
|
|
496
|
+
volume.RASDimensions = [
|
|
497
|
+
Math.floor( volume.xLength * spacingX ),
|
|
498
|
+
Math.floor( volume.yLength * spacingY ),
|
|
499
|
+
Math.floor( volume.zLength * spacingZ )
|
|
500
|
+
];
|
|
501
|
+
|
|
502
|
+
// .. and set the default threshold
|
|
503
|
+
// only if the threshold was not already set
|
|
504
|
+
if ( volume.lowerThreshold === - Infinity ) {
|
|
505
|
+
|
|
506
|
+
volume.lowerThreshold = min;
|
|
507
|
+
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
if ( volume.upperThreshold === Infinity ) {
|
|
511
|
+
|
|
512
|
+
volume.upperThreshold = max;
|
|
513
|
+
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
return volume;
|
|
517
|
+
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
_parseChars( array, start, end ) {
|
|
521
|
+
|
|
522
|
+
// without borders, use the whole array
|
|
523
|
+
if ( start === undefined ) {
|
|
524
|
+
|
|
525
|
+
start = 0;
|
|
526
|
+
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
if ( end === undefined ) {
|
|
530
|
+
|
|
531
|
+
end = array.length;
|
|
532
|
+
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
let output = '';
|
|
536
|
+
// create and append the chars
|
|
537
|
+
let i = 0;
|
|
538
|
+
for ( i = start; i < end; ++ i ) {
|
|
539
|
+
|
|
540
|
+
output += String.fromCharCode( array[ i ] );
|
|
541
|
+
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
return output;
|
|
545
|
+
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
const _fieldFunctions = {
|
|
551
|
+
|
|
552
|
+
type: function ( data ) {
|
|
553
|
+
|
|
554
|
+
switch ( data ) {
|
|
555
|
+
|
|
556
|
+
case 'uchar':
|
|
557
|
+
case 'unsigned char':
|
|
558
|
+
case 'uint8':
|
|
559
|
+
case 'uint8_t':
|
|
560
|
+
this.__array = Uint8Array;
|
|
561
|
+
break;
|
|
562
|
+
case 'signed char':
|
|
563
|
+
case 'int8':
|
|
564
|
+
case 'int8_t':
|
|
565
|
+
this.__array = Int8Array;
|
|
566
|
+
break;
|
|
567
|
+
case 'short':
|
|
568
|
+
case 'short int':
|
|
569
|
+
case 'signed short':
|
|
570
|
+
case 'signed short int':
|
|
571
|
+
case 'int16':
|
|
572
|
+
case 'int16_t':
|
|
573
|
+
this.__array = Int16Array;
|
|
574
|
+
break;
|
|
575
|
+
case 'ushort':
|
|
576
|
+
case 'unsigned short':
|
|
577
|
+
case 'unsigned short int':
|
|
578
|
+
case 'uint16':
|
|
579
|
+
case 'uint16_t':
|
|
580
|
+
this.__array = Uint16Array;
|
|
581
|
+
break;
|
|
582
|
+
case 'int':
|
|
583
|
+
case 'signed int':
|
|
584
|
+
case 'int32':
|
|
585
|
+
case 'int32_t':
|
|
586
|
+
this.__array = Int32Array;
|
|
587
|
+
break;
|
|
588
|
+
case 'uint':
|
|
589
|
+
case 'unsigned int':
|
|
590
|
+
case 'uint32':
|
|
591
|
+
case 'uint32_t':
|
|
592
|
+
this.__array = Uint32Array;
|
|
593
|
+
break;
|
|
594
|
+
case 'float':
|
|
595
|
+
this.__array = Float32Array;
|
|
596
|
+
break;
|
|
597
|
+
case 'double':
|
|
598
|
+
this.__array = Float64Array;
|
|
599
|
+
break;
|
|
600
|
+
default:
|
|
601
|
+
throw new Error( 'THREE.NRRDLoader: Unsupported NRRD data type: ' + data );
|
|
602
|
+
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
return this.type = data;
|
|
606
|
+
|
|
607
|
+
},
|
|
608
|
+
|
|
609
|
+
endian: function ( data ) {
|
|
610
|
+
|
|
611
|
+
return this.endian = data;
|
|
612
|
+
|
|
613
|
+
},
|
|
614
|
+
|
|
615
|
+
encoding: function ( data ) {
|
|
616
|
+
|
|
617
|
+
return this.encoding = data;
|
|
618
|
+
|
|
619
|
+
},
|
|
620
|
+
|
|
621
|
+
dimension: function ( data ) {
|
|
622
|
+
|
|
623
|
+
return this.dim = parseInt( data, 10 );
|
|
624
|
+
|
|
625
|
+
},
|
|
626
|
+
|
|
627
|
+
sizes: function ( data ) {
|
|
628
|
+
|
|
629
|
+
let i;
|
|
630
|
+
return this.sizes = ( function () {
|
|
631
|
+
|
|
632
|
+
const _ref = data.split( /\s+/ );
|
|
633
|
+
const _results = [];
|
|
634
|
+
|
|
635
|
+
for ( let _i = 0, _len = _ref.length; _i < _len; _i ++ ) {
|
|
636
|
+
|
|
637
|
+
i = _ref[ _i ];
|
|
638
|
+
_results.push( parseInt( i, 10 ) );
|
|
639
|
+
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
return _results;
|
|
643
|
+
|
|
644
|
+
} )();
|
|
645
|
+
|
|
646
|
+
},
|
|
647
|
+
|
|
648
|
+
space: function ( data ) {
|
|
649
|
+
|
|
650
|
+
return this.space = data;
|
|
651
|
+
|
|
652
|
+
},
|
|
653
|
+
|
|
654
|
+
'space origin': function ( data ) {
|
|
655
|
+
|
|
656
|
+
return this.space_origin = data.split( '(' )[ 1 ].split( ')' )[ 0 ].split( ',' );
|
|
657
|
+
|
|
658
|
+
},
|
|
659
|
+
|
|
660
|
+
'space directions': function ( data ) {
|
|
661
|
+
|
|
662
|
+
let f, v;
|
|
663
|
+
const parts = data.match( /\(.*?\)/g );
|
|
664
|
+
return this.vectors = ( function () {
|
|
665
|
+
|
|
666
|
+
const _results = [];
|
|
667
|
+
|
|
668
|
+
for ( let _i = 0, _len = parts.length; _i < _len; _i ++ ) {
|
|
669
|
+
|
|
670
|
+
v = parts[ _i ];
|
|
671
|
+
_results.push( ( function () {
|
|
672
|
+
|
|
673
|
+
const _ref = v.slice( 1, - 1 ).split( /,/ );
|
|
674
|
+
const _results2 = [];
|
|
675
|
+
|
|
676
|
+
for ( let _j = 0, _len2 = _ref.length; _j < _len2; _j ++ ) {
|
|
677
|
+
|
|
678
|
+
f = _ref[ _j ];
|
|
679
|
+
_results2.push( parseFloat( f ) );
|
|
680
|
+
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
return _results2;
|
|
684
|
+
|
|
685
|
+
} )() );
|
|
686
|
+
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
return _results;
|
|
690
|
+
|
|
691
|
+
} )();
|
|
692
|
+
|
|
693
|
+
},
|
|
694
|
+
|
|
695
|
+
spacings: function ( data ) {
|
|
696
|
+
|
|
697
|
+
let f;
|
|
698
|
+
const parts = data.split( /\s+/ );
|
|
699
|
+
return this.spacings = ( function () {
|
|
700
|
+
|
|
701
|
+
const _results = [];
|
|
702
|
+
|
|
703
|
+
for ( let _i = 0, _len = parts.length; _i < _len; _i ++ ) {
|
|
704
|
+
|
|
705
|
+
f = parts[ _i ];
|
|
706
|
+
_results.push( parseFloat( f ) );
|
|
707
|
+
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
return _results;
|
|
711
|
+
|
|
712
|
+
} )();
|
|
713
|
+
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
};
|
|
717
|
+
|
|
718
|
+
export { NRRDLoader };
|