@mlightcad/mtext-renderer 0.4.5 → 0.4.7
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 +249 -0
- package/dist/assets/mtextWorker-BlkfNPdt.js +7 -0
- package/dist/index.js +1621 -1335
- package/dist/index.umd.cjs +3 -3
- package/{dist → lib}/index.d.ts +1 -0
- package/lib/worker/base-renderer.d.ts +50 -0
- package/lib/worker/baseRenderer.d.ts +64 -0
- package/lib/worker/index.d.ts +5 -0
- package/lib/worker/main-thread-renderer.d.ts +30 -0
- package/lib/worker/mainThreadRenderer.d.ts +32 -0
- package/lib/worker/mtext-worker.d.ts +1 -0
- package/lib/worker/mtextWorker.d.ts +1 -0
- package/lib/worker/unified-renderer.d.ts +41 -0
- package/lib/worker/unifiedRenderer.d.ts +44 -0
- package/lib/worker/web-worker-renderer.d.ts +115 -0
- package/lib/worker/webWorkerRenderer.d.ts +124 -0
- package/lib/worker/worker-manager.d.ts +113 -0
- package/package.json +3 -2
- /package/{dist → lib}/cache/fontCacheManager.d.ts +0 -0
- /package/{dist → lib}/cache/index.d.ts +0 -0
- /package/{dist → lib}/cache/schema.d.ts +0 -0
- /package/{dist → lib}/common/eventManager.d.ts +0 -0
- /package/{dist → lib}/common/index.d.ts +0 -0
- /package/{dist → lib}/common/utils.d.ts +0 -0
- /package/{dist → lib}/font/baseFont.d.ts +0 -0
- /package/{dist → lib}/font/baseTextShape.d.ts +0 -0
- /package/{dist → lib}/font/charGeometryCache.d.ts +0 -0
- /package/{dist → lib}/font/defaultFontLoader.d.ts +0 -0
- /package/{dist → lib}/font/font.d.ts +0 -0
- /package/{dist → lib}/font/fontFactory.d.ts +0 -0
- /package/{dist → lib}/font/fontLoader.d.ts +0 -0
- /package/{dist → lib}/font/fontManager.d.ts +0 -0
- /package/{dist → lib}/font/index.d.ts +0 -0
- /package/{dist → lib}/font/meshFont.d.ts +0 -0
- /package/{dist → lib}/font/meshFontParser.d.ts +0 -0
- /package/{dist → lib}/font/meshTextShape.d.ts +0 -0
- /package/{dist → lib}/font/normalComputationToggle.d.ts +0 -0
- /package/{dist → lib}/font/shxFont.d.ts +0 -0
- /package/{dist → lib}/font/shxTextShape.d.ts +0 -0
- /package/{dist → lib}/renderer/index.d.ts +0 -0
- /package/{dist → lib}/renderer/mtext.d.ts +0 -0
- /package/{dist → lib}/renderer/mtextProcessor.d.ts +0 -0
- /package/{dist → lib}/renderer/styleManager.d.ts +0 -0
- /package/{dist → lib}/renderer/types.d.ts +0 -0
package/README.md
CHANGED
|
@@ -85,6 +85,83 @@ Manages font data caching using IndexedDB. Provides persistent storage for font
|
|
|
85
85
|
- `getAll()`: Retrieves all cached font data
|
|
86
86
|
- `clear()`: Clears all cached font data
|
|
87
87
|
|
|
88
|
+
## Worker-Based Rendering System
|
|
89
|
+
|
|
90
|
+
The package provides a sophisticated worker-based rendering system that allows MText rendering to be performed in Web Workers, preventing blocking of the main UI thread. This is particularly beneficial for rendering large amounts of text or complex MText content.
|
|
91
|
+
|
|
92
|
+
### MTextBaseRenderer Interface
|
|
93
|
+
|
|
94
|
+
Defines the common rendering contract for producing Three.js objects from MText content. All renderer implementations must conform to this interface.
|
|
95
|
+
|
|
96
|
+
**Public Methods:**
|
|
97
|
+
- `renderMText(mtextContent, textStyle, colorSettings?)`: Render MText content into a Three.js object hierarchy
|
|
98
|
+
- `loadFonts(fonts)`: Ensure specified fonts are available to the renderer
|
|
99
|
+
- `getAvailableFonts()`: Retrieve list of fonts that can be used by the renderer
|
|
100
|
+
- `destroy()`: Release any resources owned by the renderer
|
|
101
|
+
|
|
102
|
+
### MTextObject Interface
|
|
103
|
+
|
|
104
|
+
Represents a rendered MText object that extends THREE.Object3D with additional MText-specific properties.
|
|
105
|
+
|
|
106
|
+
**Public Properties:**
|
|
107
|
+
- `box`: The bounding box of the MText object in local coordinates
|
|
108
|
+
|
|
109
|
+
### MainThreadRenderer
|
|
110
|
+
|
|
111
|
+
Renders MText content directly in the main thread. This is the simplest renderer implementation that provides the same interface as worker-based renderers but runs synchronously in the main thread.
|
|
112
|
+
|
|
113
|
+
**Public Methods:**
|
|
114
|
+
- `renderMText(mtextContent, textStyle, colorSettings?)`: Render MText directly in the main thread
|
|
115
|
+
- `loadFonts(fonts)`: Load fonts in the main thread
|
|
116
|
+
- `getAvailableFonts()`: Get available fonts from the main thread
|
|
117
|
+
- `destroy()`: Cleanup resources
|
|
118
|
+
|
|
119
|
+
### WebWorkerRenderer (MTextWorkerManager)
|
|
120
|
+
|
|
121
|
+
Manages communication with MText Web Workers for parallel text rendering. This renderer uses a pool of Web Workers to distribute rendering tasks, improving performance for large text content.
|
|
122
|
+
|
|
123
|
+
**Public Properties:**
|
|
124
|
+
- `poolSize`: Number of workers in the pool (defaults to optimal size based on hardware concurrency)
|
|
125
|
+
|
|
126
|
+
**Public Methods:**
|
|
127
|
+
- `renderMText(mtextContent, textStyle, colorSettings?)`: Render MText using worker pool
|
|
128
|
+
- `loadFonts(fonts)`: Load fonts in all workers
|
|
129
|
+
- `getAvailableFonts()`: Get available fonts from workers
|
|
130
|
+
- `terminate()`: Terminate all workers
|
|
131
|
+
- `destroy()`: Cleanup all resources
|
|
132
|
+
|
|
133
|
+
**Features:**
|
|
134
|
+
- Automatic worker pool management
|
|
135
|
+
- Load balancing across workers
|
|
136
|
+
- Efficient serialization/deserialization of Three.js objects
|
|
137
|
+
- Transferable object support for optimal performance
|
|
138
|
+
- Error handling and timeout management
|
|
139
|
+
|
|
140
|
+
### UnifiedRenderer
|
|
141
|
+
|
|
142
|
+
A flexible renderer that can switch between main thread and Web Worker rendering modes at runtime. This allows applications to dynamically choose the best rendering strategy based on current conditions.
|
|
143
|
+
|
|
144
|
+
**Public Properties:**
|
|
145
|
+
- `currentMode`: Current rendering mode ('main' or 'worker')
|
|
146
|
+
|
|
147
|
+
**Public Methods:**
|
|
148
|
+
- `switchMode(mode)`: Switch between main thread and worker rendering modes
|
|
149
|
+
- `getMode()`: Get current rendering mode
|
|
150
|
+
- `renderMText(mtextContent, textStyle, colorSettings?)`: Render using current mode
|
|
151
|
+
- `loadFonts(fonts)`: Load fonts using current mode
|
|
152
|
+
- `getAvailableFonts()`: Get available fonts using current mode
|
|
153
|
+
- `destroy()`: Clean up all resources
|
|
154
|
+
|
|
155
|
+
### MTextWorker
|
|
156
|
+
|
|
157
|
+
The actual Web Worker implementation that handles MText rendering tasks. This worker contains its own FontManager, StyleManager, and FontLoader instances, allowing it to work independently from the main thread.
|
|
158
|
+
|
|
159
|
+
**Features:**
|
|
160
|
+
- Independent font and style management
|
|
161
|
+
- Efficient object serialization for transfer to main thread
|
|
162
|
+
- Support for transferable objects to minimize memory copying
|
|
163
|
+
- Error handling and response management
|
|
164
|
+
|
|
88
165
|
### MText
|
|
89
166
|
Main class for rendering AutoCAD MText content. Extends THREE.Object3D to integrate with Three.js scene graph.
|
|
90
167
|
|
|
@@ -175,6 +252,62 @@ classDiagram
|
|
|
175
252
|
+clear()
|
|
176
253
|
}
|
|
177
254
|
|
|
255
|
+
class MTextBaseRenderer {
|
|
256
|
+
<<interface>>
|
|
257
|
+
+renderMText(mtextContent, textStyle, colorSettings?)
|
|
258
|
+
+loadFonts(fonts)
|
|
259
|
+
+getAvailableFonts()
|
|
260
|
+
+destroy()
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
class MTextObject {
|
|
264
|
+
<<interface>>
|
|
265
|
+
+box: Box3
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
class MainThreadRenderer {
|
|
269
|
+
-fontManager: FontManager
|
|
270
|
+
-styleManager: StyleManager
|
|
271
|
+
-fontLoader: DefaultFontLoader
|
|
272
|
+
+renderMText(mtextContent, textStyle, colorSettings?)
|
|
273
|
+
+loadFonts(fonts)
|
|
274
|
+
+getAvailableFonts()
|
|
275
|
+
+destroy()
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
class WebWorkerRenderer {
|
|
279
|
+
-workers: Worker[]
|
|
280
|
+
-inFlightPerWorker: number[]
|
|
281
|
+
-pendingRequests: Map
|
|
282
|
+
-poolSize: number
|
|
283
|
+
+renderMText(mtextContent, textStyle, colorSettings?)
|
|
284
|
+
+loadFonts(fonts)
|
|
285
|
+
+getAvailableFonts()
|
|
286
|
+
+terminate()
|
|
287
|
+
+destroy()
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
class UnifiedRenderer {
|
|
291
|
+
-workerManager: WebWorkerRenderer
|
|
292
|
+
-mainThreadRenderer: MainThreadRenderer
|
|
293
|
+
-adapter: MTextBaseRenderer
|
|
294
|
+
-currentMode: RenderMode
|
|
295
|
+
+switchMode(mode)
|
|
296
|
+
+getMode()
|
|
297
|
+
+renderMText(mtextContent, textStyle, colorSettings?)
|
|
298
|
+
+loadFonts(fonts)
|
|
299
|
+
+getAvailableFonts()
|
|
300
|
+
+destroy()
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
class MTextWorker {
|
|
304
|
+
+fontManager: FontManager
|
|
305
|
+
+styleManager: StyleManager
|
|
306
|
+
+fontLoader: DefaultFontLoader
|
|
307
|
+
+serializeMText(mtext)
|
|
308
|
+
+serializeChildren(mtext)
|
|
309
|
+
}
|
|
310
|
+
|
|
178
311
|
MText --> FontManager
|
|
179
312
|
MText --> StyleManager
|
|
180
313
|
FontManager --> FontFactory
|
|
@@ -185,6 +318,16 @@ classDiagram
|
|
|
185
318
|
BaseFont <|-- ShxFont
|
|
186
319
|
BaseTextShape <|-- MeshTextShape
|
|
187
320
|
BaseTextShape <|-- ShxTextShape
|
|
321
|
+
MainThreadRenderer ..|> MTextBaseRenderer
|
|
322
|
+
WebWorkerRenderer ..|> MTextBaseRenderer
|
|
323
|
+
UnifiedRenderer --> WebWorkerRenderer
|
|
324
|
+
UnifiedRenderer --> MainThreadRenderer
|
|
325
|
+
UnifiedRenderer ..|> MTextBaseRenderer
|
|
326
|
+
MTextWorker --> FontManager
|
|
327
|
+
MTextWorker --> StyleManager
|
|
328
|
+
MTextWorker --> DefaultFontLoader
|
|
329
|
+
WebWorkerRenderer --> MTextWorker
|
|
330
|
+
MTextBaseRenderer --> MTextObject
|
|
188
331
|
```
|
|
189
332
|
|
|
190
333
|
## Usage
|
|
@@ -232,6 +375,112 @@ const mtext = new MText(
|
|
|
232
375
|
scene.add(mtext);
|
|
233
376
|
```
|
|
234
377
|
|
|
378
|
+
## Worker-Based Rendering Usage
|
|
379
|
+
|
|
380
|
+
### Using MainThreadRenderer
|
|
381
|
+
|
|
382
|
+
```typescript
|
|
383
|
+
import { MainThreadRenderer } from '@mlightcad/mtext-renderer';
|
|
384
|
+
|
|
385
|
+
// Create main thread renderer
|
|
386
|
+
const renderer = new MainThreadRenderer();
|
|
387
|
+
|
|
388
|
+
// Load required fonts
|
|
389
|
+
await renderer.loadFonts(['simsun', 'arial']);
|
|
390
|
+
|
|
391
|
+
// Render MText content
|
|
392
|
+
const mtextObject = await renderer.renderMText(
|
|
393
|
+
mtextContent,
|
|
394
|
+
textStyle,
|
|
395
|
+
{ byLayerColor: 0xffffff, byBlockColor: 0xffffff }
|
|
396
|
+
);
|
|
397
|
+
|
|
398
|
+
// Add to scene
|
|
399
|
+
scene.add(mtextObject);
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
### Using WebWorkerRenderer
|
|
403
|
+
|
|
404
|
+
```typescript
|
|
405
|
+
import { WebWorkerRenderer } from '@mlightcad/mtext-renderer';
|
|
406
|
+
|
|
407
|
+
// Create worker renderer with custom pool size
|
|
408
|
+
const workerRenderer = new WebWorkerRenderer(4); // 4 workers
|
|
409
|
+
|
|
410
|
+
// Load fonts in all workers
|
|
411
|
+
await workerRenderer.loadFonts(['simsun', 'arial']);
|
|
412
|
+
|
|
413
|
+
// Render MText content using workers
|
|
414
|
+
const mtextObject = await workerRenderer.renderMText(
|
|
415
|
+
mtextContent,
|
|
416
|
+
textStyle,
|
|
417
|
+
{ byLayerColor: 0xffffff, byBlockColor: 0xffffff }
|
|
418
|
+
);
|
|
419
|
+
|
|
420
|
+
// Add to scene
|
|
421
|
+
scene.add(mtextObject);
|
|
422
|
+
|
|
423
|
+
// Clean up when done
|
|
424
|
+
workerRenderer.destroy();
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
### Using UnifiedRenderer
|
|
428
|
+
|
|
429
|
+
```typescript
|
|
430
|
+
import { UnifiedRenderer } from '@mlightcad/mtext-renderer';
|
|
431
|
+
|
|
432
|
+
// Create unified renderer starting in main thread mode
|
|
433
|
+
const unifiedRenderer = new UnifiedRenderer('main');
|
|
434
|
+
|
|
435
|
+
// Load fonts
|
|
436
|
+
await unifiedRenderer.loadFonts(['simsun', 'arial']);
|
|
437
|
+
|
|
438
|
+
// Render using main thread
|
|
439
|
+
let mtextObject = await unifiedRenderer.renderMText(
|
|
440
|
+
mtextContent,
|
|
441
|
+
textStyle,
|
|
442
|
+
{ byLayerColor: 0xffffff, byBlockColor: 0xffffff }
|
|
443
|
+
);
|
|
444
|
+
|
|
445
|
+
scene.add(mtextObject);
|
|
446
|
+
|
|
447
|
+
// Switch to worker mode for heavy rendering tasks
|
|
448
|
+
unifiedRenderer.switchMode('worker');
|
|
449
|
+
|
|
450
|
+
// Re-load fonts in workers
|
|
451
|
+
await unifiedRenderer.loadFonts(['simsun', 'arial']);
|
|
452
|
+
|
|
453
|
+
// Render using workers
|
|
454
|
+
mtextObject = await unifiedRenderer.renderMText(
|
|
455
|
+
heavyMtextContent,
|
|
456
|
+
textStyle,
|
|
457
|
+
{ byLayerColor: 0xffffff, byBlockColor: 0xffffff }
|
|
458
|
+
);
|
|
459
|
+
|
|
460
|
+
scene.add(mtextObject);
|
|
461
|
+
|
|
462
|
+
// Clean up
|
|
463
|
+
unifiedRenderer.destroy();
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
### Performance Considerations
|
|
467
|
+
|
|
468
|
+
**When to use MainThreadRenderer:**
|
|
469
|
+
- Simple MText content with few characters
|
|
470
|
+
- When you need immediate synchronous results
|
|
471
|
+
- When worker overhead would be greater than rendering time
|
|
472
|
+
|
|
473
|
+
**When to use WebWorkerRenderer:**
|
|
474
|
+
- Large amounts of MText content
|
|
475
|
+
- Complex text with many formatting codes
|
|
476
|
+
- When you want to keep the main thread responsive
|
|
477
|
+
- Batch processing of multiple MText objects
|
|
478
|
+
|
|
479
|
+
**When to use UnifiedRenderer:**
|
|
480
|
+
- Applications that need to switch rendering strategies dynamically
|
|
481
|
+
- When rendering requirements vary based on content complexity
|
|
482
|
+
- Development environments where you want to test both approaches
|
|
483
|
+
|
|
235
484
|
If all of fonts or certain fonts are not needed any more after rendering, you can call method `release` of class `FontManager` to free memory occupied by them. Based on testing, one Chinese mesh font file may take 40M memory.
|
|
236
485
|
|
|
237
486
|
```typescript
|