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,260 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FileLoader,
|
|
3
|
+
Loader,
|
|
4
|
+
ShapePath
|
|
5
|
+
} from 'three';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* A loader for loading fonts.
|
|
9
|
+
*
|
|
10
|
+
* You can convert fonts online using [facetype.js](https://gero3.github.io/facetype.js/).
|
|
11
|
+
*
|
|
12
|
+
* ```js
|
|
13
|
+
* const loader = new FontLoader();
|
|
14
|
+
* const font = await loader.loadAsync( 'fonts/helvetiker_regular.typeface.json' );
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* @augments Loader
|
|
18
|
+
* @three_import import { FontLoader } from 'three/addons/loaders/FontLoader.js';
|
|
19
|
+
*/
|
|
20
|
+
class FontLoader extends Loader {
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Constructs a new font loader.
|
|
24
|
+
*
|
|
25
|
+
* @param {LoadingManager} [manager] - The loading manager.
|
|
26
|
+
*/
|
|
27
|
+
constructor( manager ) {
|
|
28
|
+
|
|
29
|
+
super( manager );
|
|
30
|
+
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Starts loading from the given URL and passes the loaded font
|
|
35
|
+
* to the `onLoad()` callback.
|
|
36
|
+
*
|
|
37
|
+
* @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
|
|
38
|
+
* @param {function(Font)} onLoad - Executed when the loading process has been finished.
|
|
39
|
+
* @param {onProgressCallback} onProgress - Executed while the loading is in progress.
|
|
40
|
+
* @param {onErrorCallback} onError - Executed when errors occur.
|
|
41
|
+
*/
|
|
42
|
+
load( url, onLoad, onProgress, onError ) {
|
|
43
|
+
|
|
44
|
+
const scope = this;
|
|
45
|
+
|
|
46
|
+
const loader = new FileLoader( this.manager );
|
|
47
|
+
loader.setPath( this.path );
|
|
48
|
+
loader.setRequestHeader( this.requestHeader );
|
|
49
|
+
loader.setWithCredentials( this.withCredentials );
|
|
50
|
+
loader.load( url, function ( text ) {
|
|
51
|
+
|
|
52
|
+
const font = scope.parse( JSON.parse( text ) );
|
|
53
|
+
|
|
54
|
+
if ( onLoad ) onLoad( font );
|
|
55
|
+
|
|
56
|
+
}, onProgress, onError );
|
|
57
|
+
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Parses the given font data and returns the resulting font.
|
|
62
|
+
*
|
|
63
|
+
* @param {Object} json - The raw font data as a JSON object.
|
|
64
|
+
* @return {Font} The font.
|
|
65
|
+
*/
|
|
66
|
+
parse( json ) {
|
|
67
|
+
|
|
68
|
+
return new Font( json );
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Class representing a font.
|
|
76
|
+
*/
|
|
77
|
+
class Font {
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Constructs a new font.
|
|
81
|
+
*
|
|
82
|
+
* @param {Object} data - The font data as JSON.
|
|
83
|
+
*/
|
|
84
|
+
constructor( data ) {
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* This flag can be used for type testing.
|
|
88
|
+
*
|
|
89
|
+
* @type {boolean}
|
|
90
|
+
* @readonly
|
|
91
|
+
* @default true
|
|
92
|
+
*/
|
|
93
|
+
this.isFont = true;
|
|
94
|
+
|
|
95
|
+
this.type = 'Font';
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* The font data as JSON.
|
|
99
|
+
*
|
|
100
|
+
* @type {Object}
|
|
101
|
+
*/
|
|
102
|
+
this.data = data;
|
|
103
|
+
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Generates geometry shapes from the given text and size. The result of this method
|
|
108
|
+
* should be used with {@link ShapeGeometry} to generate the actual geometry data.
|
|
109
|
+
*
|
|
110
|
+
* @param {string} text - The text.
|
|
111
|
+
* @param {number} [size=100] - The text size.
|
|
112
|
+
* @param {string} [direction='ltr'] - Char direction: ltr(left to right), rtl(right to left) & tb(top bottom).
|
|
113
|
+
* @return {Array<Shape>} An array of shapes representing the text.
|
|
114
|
+
*/
|
|
115
|
+
generateShapes( text, size = 100, direction = 'ltr' ) {
|
|
116
|
+
|
|
117
|
+
const shapes = [];
|
|
118
|
+
const paths = createPaths( text, size, this.data, direction );
|
|
119
|
+
|
|
120
|
+
for ( let p = 0, pl = paths.length; p < pl; p ++ ) {
|
|
121
|
+
|
|
122
|
+
shapes.push( ...paths[ p ].toShapes() );
|
|
123
|
+
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return shapes;
|
|
127
|
+
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function createPaths( text, size, data, direction ) {
|
|
133
|
+
|
|
134
|
+
const chars = Array.from( text );
|
|
135
|
+
const scale = size / data.resolution;
|
|
136
|
+
const line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale;
|
|
137
|
+
|
|
138
|
+
const paths = [];
|
|
139
|
+
|
|
140
|
+
let offsetX = 0, offsetY = 0;
|
|
141
|
+
|
|
142
|
+
if ( direction == 'rtl' || direction == 'tb' ) {
|
|
143
|
+
|
|
144
|
+
chars.reverse();
|
|
145
|
+
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
for ( let i = 0; i < chars.length; i ++ ) {
|
|
149
|
+
|
|
150
|
+
const char = chars[ i ];
|
|
151
|
+
|
|
152
|
+
if ( char === '\n' ) {
|
|
153
|
+
|
|
154
|
+
offsetX = 0;
|
|
155
|
+
offsetY -= line_height;
|
|
156
|
+
|
|
157
|
+
} else {
|
|
158
|
+
|
|
159
|
+
const ret = createPath( char, scale, offsetX, offsetY, data );
|
|
160
|
+
|
|
161
|
+
if ( direction == 'tb' ) {
|
|
162
|
+
|
|
163
|
+
offsetX = 0;
|
|
164
|
+
offsetY += data.ascender * scale;
|
|
165
|
+
|
|
166
|
+
} else {
|
|
167
|
+
|
|
168
|
+
offsetX += ret.offsetX;
|
|
169
|
+
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
paths.push( ret.path );
|
|
173
|
+
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return paths;
|
|
179
|
+
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
function createPath( char, scale, offsetX, offsetY, data ) {
|
|
183
|
+
|
|
184
|
+
const glyph = data.glyphs[ char ] || data.glyphs[ '?' ];
|
|
185
|
+
|
|
186
|
+
if ( ! glyph ) {
|
|
187
|
+
|
|
188
|
+
console.error( 'THREE.Font: character "' + char + '" does not exists in font family ' + data.familyName + '.' );
|
|
189
|
+
|
|
190
|
+
return;
|
|
191
|
+
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
const path = new ShapePath();
|
|
195
|
+
|
|
196
|
+
let x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;
|
|
197
|
+
|
|
198
|
+
if ( glyph.o ) {
|
|
199
|
+
|
|
200
|
+
const outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );
|
|
201
|
+
|
|
202
|
+
for ( let i = 0, l = outline.length; i < l; ) {
|
|
203
|
+
|
|
204
|
+
const action = outline[ i ++ ];
|
|
205
|
+
|
|
206
|
+
switch ( action ) {
|
|
207
|
+
|
|
208
|
+
case 'm': // moveTo
|
|
209
|
+
|
|
210
|
+
x = outline[ i ++ ] * scale + offsetX;
|
|
211
|
+
y = outline[ i ++ ] * scale + offsetY;
|
|
212
|
+
|
|
213
|
+
path.moveTo( x, y );
|
|
214
|
+
|
|
215
|
+
break;
|
|
216
|
+
|
|
217
|
+
case 'l': // lineTo
|
|
218
|
+
|
|
219
|
+
x = outline[ i ++ ] * scale + offsetX;
|
|
220
|
+
y = outline[ i ++ ] * scale + offsetY;
|
|
221
|
+
|
|
222
|
+
path.lineTo( x, y );
|
|
223
|
+
|
|
224
|
+
break;
|
|
225
|
+
|
|
226
|
+
case 'q': // quadraticCurveTo
|
|
227
|
+
|
|
228
|
+
cpx = outline[ i ++ ] * scale + offsetX;
|
|
229
|
+
cpy = outline[ i ++ ] * scale + offsetY;
|
|
230
|
+
cpx1 = outline[ i ++ ] * scale + offsetX;
|
|
231
|
+
cpy1 = outline[ i ++ ] * scale + offsetY;
|
|
232
|
+
|
|
233
|
+
path.quadraticCurveTo( cpx1, cpy1, cpx, cpy );
|
|
234
|
+
|
|
235
|
+
break;
|
|
236
|
+
|
|
237
|
+
case 'b': // bezierCurveTo
|
|
238
|
+
|
|
239
|
+
cpx = outline[ i ++ ] * scale + offsetX;
|
|
240
|
+
cpy = outline[ i ++ ] * scale + offsetY;
|
|
241
|
+
cpx1 = outline[ i ++ ] * scale + offsetX;
|
|
242
|
+
cpy1 = outline[ i ++ ] * scale + offsetY;
|
|
243
|
+
cpx2 = outline[ i ++ ] * scale + offsetX;
|
|
244
|
+
cpy2 = outline[ i ++ ] * scale + offsetY;
|
|
245
|
+
|
|
246
|
+
path.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );
|
|
247
|
+
|
|
248
|
+
break;
|
|
249
|
+
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
return { offsetX: glyph.ha * scale, path: path };
|
|
257
|
+
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
export { FontLoader, Font };
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BufferGeometry,
|
|
3
|
+
FileLoader,
|
|
4
|
+
Float32BufferAttribute,
|
|
5
|
+
Group,
|
|
6
|
+
LineBasicMaterial,
|
|
7
|
+
LineSegments,
|
|
8
|
+
Loader
|
|
9
|
+
} from 'three';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* A loader for the GCode format.
|
|
13
|
+
*
|
|
14
|
+
* GCode files are usually used for 3D printing or CNC applications.
|
|
15
|
+
*
|
|
16
|
+
* ```js
|
|
17
|
+
* const loader = new GCodeLoader();
|
|
18
|
+
* const object = await loader.loadAsync( 'models/gcode/benchy.gcode' );
|
|
19
|
+
* scene.add( object );
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* @augments Loader
|
|
23
|
+
* @three_import import { GCodeLoader } from 'three/addons/loaders/GCodeLoader.js';
|
|
24
|
+
*/
|
|
25
|
+
class GCodeLoader extends Loader {
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Constructs a new GCode loader.
|
|
29
|
+
*
|
|
30
|
+
* @param {LoadingManager} [manager] - The loading manager.
|
|
31
|
+
*/
|
|
32
|
+
constructor( manager ) {
|
|
33
|
+
|
|
34
|
+
super( manager );
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Whether to split layers or not.
|
|
38
|
+
*
|
|
39
|
+
* @type {boolean}
|
|
40
|
+
* @default false
|
|
41
|
+
*/
|
|
42
|
+
this.splitLayer = false;
|
|
43
|
+
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Starts loading from the given URL and passes the loaded GCode asset
|
|
48
|
+
* to the `onLoad()` callback.
|
|
49
|
+
*
|
|
50
|
+
* @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
|
|
51
|
+
* @param {function(Group)} onLoad - Executed when the loading process has been finished.
|
|
52
|
+
* @param {onProgressCallback} onProgress - Executed while the loading is in progress.
|
|
53
|
+
* @param {onErrorCallback} onError - Executed when errors occur.
|
|
54
|
+
*/
|
|
55
|
+
load( url, onLoad, onProgress, onError ) {
|
|
56
|
+
|
|
57
|
+
const scope = this;
|
|
58
|
+
|
|
59
|
+
const loader = new FileLoader( scope.manager );
|
|
60
|
+
loader.setPath( scope.path );
|
|
61
|
+
loader.setRequestHeader( scope.requestHeader );
|
|
62
|
+
loader.setWithCredentials( scope.withCredentials );
|
|
63
|
+
loader.load( url, function ( text ) {
|
|
64
|
+
|
|
65
|
+
try {
|
|
66
|
+
|
|
67
|
+
onLoad( scope.parse( text ) );
|
|
68
|
+
|
|
69
|
+
} catch ( e ) {
|
|
70
|
+
|
|
71
|
+
if ( onError ) {
|
|
72
|
+
|
|
73
|
+
onError( e );
|
|
74
|
+
|
|
75
|
+
} else {
|
|
76
|
+
|
|
77
|
+
console.error( e );
|
|
78
|
+
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
scope.manager.itemError( url );
|
|
82
|
+
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
}, onProgress, onError );
|
|
86
|
+
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Parses the given GCode data and returns a group with lines.
|
|
91
|
+
*
|
|
92
|
+
* @param {string} data - The raw Gcode data as a string.
|
|
93
|
+
* @return {Group} The parsed GCode asset.
|
|
94
|
+
*/
|
|
95
|
+
parse( data ) {
|
|
96
|
+
|
|
97
|
+
let state = { x: 0, y: 0, z: 0, e: 0, f: 0, extruding: false, relative: false, extrusionOverride: false, extrusionRelative: false };
|
|
98
|
+
const layers = [];
|
|
99
|
+
|
|
100
|
+
let currentLayer = undefined;
|
|
101
|
+
|
|
102
|
+
const pathMaterial = new LineBasicMaterial( { color: 0xFF0000 } );
|
|
103
|
+
pathMaterial.name = 'path';
|
|
104
|
+
|
|
105
|
+
const extrudingMaterial = new LineBasicMaterial( { color: 0x00FF00 } );
|
|
106
|
+
extrudingMaterial.name = 'extruded';
|
|
107
|
+
|
|
108
|
+
function newLayer( line ) {
|
|
109
|
+
|
|
110
|
+
currentLayer = { vertex: [], pathVertex: [], z: line.z };
|
|
111
|
+
layers.push( currentLayer );
|
|
112
|
+
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
//Create lie segment between p1 and p2
|
|
116
|
+
function addSegment( p1, p2 ) {
|
|
117
|
+
|
|
118
|
+
if ( currentLayer === undefined ) {
|
|
119
|
+
|
|
120
|
+
newLayer( p1 );
|
|
121
|
+
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if ( state.extruding ) {
|
|
125
|
+
|
|
126
|
+
currentLayer.vertex.push( p1.x, p1.y, p1.z );
|
|
127
|
+
currentLayer.vertex.push( p2.x, p2.y, p2.z );
|
|
128
|
+
|
|
129
|
+
} else {
|
|
130
|
+
|
|
131
|
+
currentLayer.pathVertex.push( p1.x, p1.y, p1.z );
|
|
132
|
+
currentLayer.pathVertex.push( p2.x, p2.y, p2.z );
|
|
133
|
+
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function delta( v1, v2 ) {
|
|
139
|
+
|
|
140
|
+
return state.relative ? v2 : v2 - v1;
|
|
141
|
+
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function absolute( v1, v2 ) {
|
|
145
|
+
|
|
146
|
+
return state.relative ? v1 + v2 : v2;
|
|
147
|
+
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function absoluteExtrusion( v1, v2 ) {
|
|
151
|
+
|
|
152
|
+
const relative = state.extrusionOverride ? state.extrusionRelative : state.relative;
|
|
153
|
+
|
|
154
|
+
return relative ? v1 + v2 : v2;
|
|
155
|
+
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const lines = data.replace( /;.+/g, '' ).split( '\n' );
|
|
159
|
+
|
|
160
|
+
for ( let i = 0; i < lines.length; i ++ ) {
|
|
161
|
+
|
|
162
|
+
const tokens = lines[ i ].split( ' ' );
|
|
163
|
+
const cmd = tokens[ 0 ].toUpperCase();
|
|
164
|
+
|
|
165
|
+
//Arguments
|
|
166
|
+
const args = {};
|
|
167
|
+
tokens.splice( 1 ).forEach( function ( token ) {
|
|
168
|
+
|
|
169
|
+
if ( token[ 0 ] !== undefined ) {
|
|
170
|
+
|
|
171
|
+
const key = token[ 0 ].toLowerCase();
|
|
172
|
+
const value = parseFloat( token.substring( 1 ) );
|
|
173
|
+
args[ key ] = value;
|
|
174
|
+
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
} );
|
|
178
|
+
|
|
179
|
+
//Process commands
|
|
180
|
+
//G0/G1 – Linear Movement
|
|
181
|
+
if ( cmd === 'G0' || cmd === 'G1' ) {
|
|
182
|
+
|
|
183
|
+
const line = Object.assign( {}, state ); // clone state
|
|
184
|
+
|
|
185
|
+
if ( args.x !== undefined ) line.x = absolute( state.x, args.x );
|
|
186
|
+
if ( args.y !== undefined ) line.y = absolute( state.y, args.y );
|
|
187
|
+
if ( args.z !== undefined ) line.z = absolute( state.z, args.z );
|
|
188
|
+
if ( args.e !== undefined ) line.e = absoluteExtrusion( state.e, args.e );
|
|
189
|
+
if ( args.f !== undefined ) line.f = absolute( state.f, args.f );
|
|
190
|
+
|
|
191
|
+
//Layer change detection is or made by watching Z, it's made by watching when we extrude at a new Z position
|
|
192
|
+
if ( delta( state.e, line.e ) > 0 ) {
|
|
193
|
+
|
|
194
|
+
state.extruding = delta( state.e, line.e ) > 0;
|
|
195
|
+
|
|
196
|
+
if ( currentLayer == undefined || line.z != currentLayer.z ) {
|
|
197
|
+
|
|
198
|
+
newLayer( line );
|
|
199
|
+
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
addSegment( state, line );
|
|
205
|
+
state = line;
|
|
206
|
+
|
|
207
|
+
} else if ( cmd === 'G2' || cmd === 'G3' ) {
|
|
208
|
+
|
|
209
|
+
//G2/G3 - Arc Movement ( G2 clock wise and G3 counter clock wise )
|
|
210
|
+
//console.warn( 'THREE.GCodeLoader: Arc command not supported' );
|
|
211
|
+
|
|
212
|
+
} else if ( cmd === 'G90' ) {
|
|
213
|
+
|
|
214
|
+
//G90: Set to Absolute Positioning
|
|
215
|
+
state.relative = false;
|
|
216
|
+
|
|
217
|
+
// reset M82/M83 extrusion override
|
|
218
|
+
state.extrusionOverride = false;
|
|
219
|
+
|
|
220
|
+
} else if ( cmd === 'G91' ) {
|
|
221
|
+
|
|
222
|
+
//G91: Set to state.relative Positioning
|
|
223
|
+
state.relative = true;
|
|
224
|
+
|
|
225
|
+
// reset M82/M83 extrusion override
|
|
226
|
+
state.extrusionOverride = false;
|
|
227
|
+
|
|
228
|
+
} else if ( cmd === 'M82' ) {
|
|
229
|
+
|
|
230
|
+
//M82: Override G91 and put the E axis into absolute mode independent of the other axes
|
|
231
|
+
state.extrusionOverride = true;
|
|
232
|
+
state.extrusionRelative = false;
|
|
233
|
+
|
|
234
|
+
} else if ( cmd === 'M83' ) {
|
|
235
|
+
|
|
236
|
+
//M83: Overrides G90 and put the E axis into relative mode independent of the other axes
|
|
237
|
+
state.extrusionOverride = true;
|
|
238
|
+
state.extrusionRelative = true;
|
|
239
|
+
|
|
240
|
+
} else if ( cmd === 'G92' ) {
|
|
241
|
+
|
|
242
|
+
//G92: Set Position
|
|
243
|
+
const line = state;
|
|
244
|
+
line.x = args.x !== undefined ? args.x : line.x;
|
|
245
|
+
line.y = args.y !== undefined ? args.y : line.y;
|
|
246
|
+
line.z = args.z !== undefined ? args.z : line.z;
|
|
247
|
+
line.e = args.e !== undefined ? args.e : line.e;
|
|
248
|
+
|
|
249
|
+
} else {
|
|
250
|
+
|
|
251
|
+
//console.warn( 'THREE.GCodeLoader: Command not supported:' + cmd );
|
|
252
|
+
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
function addObject( vertex, extruding, i ) {
|
|
258
|
+
|
|
259
|
+
const geometry = new BufferGeometry();
|
|
260
|
+
geometry.setAttribute( 'position', new Float32BufferAttribute( vertex, 3 ) );
|
|
261
|
+
const segments = new LineSegments( geometry, extruding ? extrudingMaterial : pathMaterial );
|
|
262
|
+
segments.name = 'layer' + i;
|
|
263
|
+
object.add( segments );
|
|
264
|
+
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
const object = new Group();
|
|
268
|
+
object.name = 'gcode';
|
|
269
|
+
|
|
270
|
+
if ( this.splitLayer ) {
|
|
271
|
+
|
|
272
|
+
for ( let i = 0; i < layers.length; i ++ ) {
|
|
273
|
+
|
|
274
|
+
const layer = layers[ i ];
|
|
275
|
+
addObject( layer.vertex, true, i );
|
|
276
|
+
addObject( layer.pathVertex, false, i );
|
|
277
|
+
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
} else {
|
|
281
|
+
|
|
282
|
+
const vertex = [],
|
|
283
|
+
pathVertex = [];
|
|
284
|
+
|
|
285
|
+
for ( let i = 0; i < layers.length; i ++ ) {
|
|
286
|
+
|
|
287
|
+
const layer = layers[ i ];
|
|
288
|
+
const layerVertex = layer.vertex;
|
|
289
|
+
const layerPathVertex = layer.pathVertex;
|
|
290
|
+
|
|
291
|
+
for ( let j = 0; j < layerVertex.length; j ++ ) {
|
|
292
|
+
|
|
293
|
+
vertex.push( layerVertex[ j ] );
|
|
294
|
+
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
for ( let j = 0; j < layerPathVertex.length; j ++ ) {
|
|
298
|
+
|
|
299
|
+
pathVertex.push( layerPathVertex[ j ] );
|
|
300
|
+
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
addObject( vertex, true, layers.length );
|
|
306
|
+
addObject( pathVertex, false, layers.length );
|
|
307
|
+
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
object.rotation.set( - Math.PI / 2, 0, 0 );
|
|
311
|
+
|
|
312
|
+
return object;
|
|
313
|
+
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
export { GCodeLoader };
|