cyclecad 0.1.9 → 0.2.0

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.
@@ -0,0 +1,602 @@
1
+ # ExplodeView → cycleCAD Feature Mapping
2
+
3
+ ## Executive Summary
4
+
5
+ ExplodeView contains 57 features in a 19,000-line monolith. This document maps each feature to:
6
+ 1. Whether it's worth porting (priority)
7
+ 2. Which cycleCAD module it belongs in
8
+ 3. Estimated lines of code and effort
9
+ 4. Dependencies and blockers
10
+
11
+ ---
12
+
13
+ ## Feature Priority Matrix
14
+
15
+ ```
16
+ ╔═══════════════════════════════════════════════════════╗
17
+ ║ EFFORT (estimate) ║
18
+ ║ Low Medium High Very High ║
19
+ ║ (<100) (100-300) (300-600) (600+) ║
20
+ ╔═══╬═══════════════════════════════════════════════════════╣
21
+ ║ P │ Quick Medium Big Major ║
22
+ ║ 0 │ Wins Value Value Systems ║
23
+ ║ ├─────────────────────────────────────────────────────┤
24
+ ║ │ Tree Explode Section AI Identify ║
25
+ ║ │ Animation Cut Assembly Res ║
26
+ ║ P │ Shortcuts Selection BOM Inventor Parse ║
27
+ ║ 1 │ Context Measure Collab View ║
28
+ ║ │ Menu 3D Print ║
29
+ ╠═══╣─────────────────────────────────────────────────────┤
30
+ ║ P │ Part Annot Part Info Smart Filters ║
31
+ ║ 2 │ Compare Pins Card Maintenance ║
32
+ ║ │ Markup 3D Export Timeline ║
33
+ ║ │ Wireframe Grid Screenshot Voice Commands ║
34
+ ║ P │ Hero Transpare Weight Technical Drawings ║
35
+ ║ 3 │ Shots ncy Estimator Tech Reports ║
36
+ ║ │ QR Code Fit All Int Check DFM Analysis ║
37
+ ╚═══╩═════════════════════════════════════════════════════╝
38
+ ```
39
+
40
+ ---
41
+
42
+ ## Phase 0: Foundation (In Progress)
43
+
44
+ ### ✅ viewer-mode.js (BASE SYSTEM)
45
+ - **ExplodeView:** N/A (new architecture)
46
+ - **cycleCAD:** `/app/js/viewer-mode.js`
47
+ - **Lines of Code:** 600
48
+ - **Effort:** Already done (PoC)
49
+ - **Description:** Mode switching, state management, shared scene
50
+ - **Dependencies:** viewport.js
51
+ - **Blockers:** None
52
+ - **Status:** COMPLETE
53
+
54
+ ---
55
+
56
+ ## Phase 1: Critical Features (Weeks 1-2)
57
+
58
+ ### 1. ✅ Assembly Tree UI
59
+ - **ExplodeView:** `initAssemblyTree()` (lines 11270-13159, 1,890 lines)
60
+ - **cycleCAD:** `viewer-assembly-tree.js`
61
+ - **LoC to Port:** 800
62
+ - **Effort:** 8 hours
63
+ - **Description:** Tree view of parts, collapsible assemblies, click to select, color-code by assembly
64
+ - **Dependencies:** viewer-mode.js, viewport.js
65
+ - **Blockers:** None
66
+ - **Priority:** P0 (user needs structure)
67
+ - **Status:** PLANNED
68
+
69
+ ### 2. ✅ Explode/Collapse Animation
70
+ - **ExplodeView:** `initClickExplode()` (lines 8173-8477, 304 lines) + animation logic
71
+ - **cycleCAD:** `viewer-explode.js`
72
+ - **LoC to Port:** 600
73
+ - **Effort:** 8 hours
74
+ - **Description:** Interactive slider to explode/collapse parts, smooth animation, direction from center
75
+ - **Dependencies:** viewer-mode.js
76
+ - **Blockers:** None
77
+ - **Priority:** P0 (core differentiator for cycleWASH)
78
+ - **Status:** PLANNED
79
+
80
+ ### 3. ✅ Section Cut / Clipping Plane
81
+ - **ExplodeView:** `initSectionCut()` (lines 10268-10445, 177 lines) + Three.js clipping
82
+ - **cycleCAD:** `viewer-section-cut.js`
83
+ - **LoC to Port:** 400
84
+ - **Effort:** 6 hours
85
+ - **Description:** X/Y/Z clipping planes, flip direction, position slider, per-material
86
+ - **Dependencies:** viewer-mode.js, renderer.localClippingEnabled
87
+ - **Blockers:** None
88
+ - **Priority:** P1 (inspection use case)
89
+ - **Status:** PLANNED
90
+
91
+ ### 4. ✅ Part Selection & Context Menu
92
+ - **ExplodeView:** `initPartContextMenu()` (lines 8477-9184, 707 lines)
93
+ - **cycleCAD:** `viewer-context-menu.js`
94
+ - **LoC to Port:** 300
95
+ - **Effort:** 4 hours
96
+ - **Description:** Right-click menu (select, hide, isolate, move, export), hover highlight
97
+ - **Dependencies:** viewer-mode.js, raycasting
98
+ - **Blockers:** None
99
+ - **Priority:** P1 (user interaction)
100
+ - **Status:** PLANNED (partial in viewer-mode.js)
101
+
102
+ ### 5. ✅ BOM Export
103
+ - **ExplodeView:** `initBOMExport()` + `initBOM()` (lines 9444-9672, 228 lines)
104
+ - **cycleCAD:** `viewer-bom.js`
105
+ - **LoC to Port:** 400
106
+ - **Effort:** 5 hours
107
+ - **Description:** Generate BOM with part names, dimensions, volume, material; export to CSV
108
+ - **Dependencies:** viewer-mode.js
109
+ - **Blockers:** None
110
+ - **Priority:** P1 (manufacturing workflow)
111
+ - **Status:** PLANNED (partial in viewer-mode.js)
112
+
113
+ ### 6. ✅ Part Info Card & 3D Export
114
+ - **ExplodeView:** `initPartInfoCard()` + `showPartInfoCard()` IIFE (lines 9928-10268, 340 lines) + `meshToSTL()` etc
115
+ - **cycleCAD:** `viewer-part-info.js`
116
+ - **LoC to Port:** 500
117
+ - **Effort:** 6 hours
118
+ - **Description:** Float card with part dims, bbox, volume, material, weight; export to STL/OBJ/glTF/PLY
119
+ - **Dependencies:** viewer-mode.js, Three.js STL/OBJ exporters
120
+ - **Blockers:** Need STL exporter library
121
+ - **Priority:** P1 (detail view)
122
+ - **Status:** PLANNED
123
+
124
+ ### 7. ✅ AI Part Identifier
125
+ - **ExplodeView:** `initAIVisionIdentifier()` (lines 17460+, 800+ lines) + Gemini Vision API
126
+ - **cycleCAD:** `viewer-ai-identify.js`
127
+ - **LoC to Port:** 700
128
+ - **Effort:** 7 hours
129
+ - **Description:** Render isolated part, send to Gemini Vision, auto-search McMaster-Carr, show alternatives
130
+ - **Dependencies:** viewer-mode.js, Gemini API, localStorage for keys
131
+ - **Blockers:** None (already in cycleCAD)
132
+ - **Priority:** P1 (competitive advantage)
133
+ - **Status:** PLANNED
134
+
135
+ ### 8. ✅ Keyboard Shortcuts
136
+ - **ExplodeView:** `initKeyboardShortcuts()` (lines 14226+, 160 lines)
137
+ - **cycleCAD:** `viewer-shortcuts.js` (or integrate into existing shortcuts.js)
138
+ - **LoC to Port:** 100
139
+ - **Effort:** 2 hours
140
+ - **Description:** T=toggle explode, E=export, R=reset, S=section cut, etc
141
+ - **Dependencies:** viewer-mode.js
142
+ - **Blockers:** None
143
+ - **Priority:** P2 (convenience)
144
+ - **Status:** PLANNED
145
+
146
+ **Phase 1 Subtotal:** 8 modules, 4,050 LoC, 40 hours, 2 weeks
147
+
148
+ ---
149
+
150
+ ## Phase 2: Enhancement Features (Week 3)
151
+
152
+ ### 9. Assembly Tree Animations
153
+ - **ExplodeView:** `initAnimationSequence()` (lines 2834-4672, 1,838 lines)
154
+ - **cycleCAD:** Extend `viewer-explode.js`
155
+ - **LoC to Port:** 400
156
+ - **Effort:** 6 hours
157
+ - **Description:** Record/playback explode sequences, timeline UI, auto-save
158
+ - **Dependencies:** viewer-explode.js
159
+ - **Blockers:** None
160
+ - **Priority:** P2 (marketing/docs)
161
+ - **Status:** PLANNED
162
+
163
+ ### 10. Measurements
164
+ - **ExplodeView:** Measurement tool (lines 3207+, 150 lines)
165
+ - **cycleCAD:** Reuse existing `constraint-solver.js` measurement logic
166
+ - **LoC to Port:** 200
167
+ - **Effort:** 3 hours
168
+ - **Description:** 2-point distance, 3-point angle, dimension display, snap to parts
169
+ - **Dependencies:** raycasting, viewer-mode.js
170
+ - **Blockers:** None
171
+ - **Priority:** P2 (service technician workflow)
172
+ - **Status:** PLANNED
173
+
174
+ ### 11. Transparency/Opacity Control
175
+ - **ExplodeView:** `initTransparencyControl()` (lines 13980+, 95 lines)
176
+ - **cycleCAD:** `viewer-transparency.js`
177
+ - **LoC to Port:** 150
178
+ - **Effort:** 2 hours
179
+ - **Description:** Slider for per-part or all-parts opacity, reset button
180
+ - **Dependencies:** viewer-mode.js
181
+ - **Blockers:** None
182
+ - **Priority:** P2 (visualization)
183
+ - **Status:** PLANNED
184
+
185
+ ### 12. Grid & Floor Plane
186
+ - **ExplodeView:** `initGridFloor()` (lines 13860+, 70 lines)
187
+ - **cycleCAD:** Enhance existing `viewport.js` or `viewer-grid.js`
188
+ - **LoC to Port:** 100
189
+ - **Effort:** 2 hours
190
+ - **Description:** Auto-sized grid, shadow plane, toggle visibility
191
+ - **Dependencies:** viewport.js
192
+ - **Blockers:** None
193
+ - **Priority:** P2 (aesthetics)
194
+ - **Status:** PLANNED
195
+
196
+ ### 13. Screenshot Export
197
+ - **ExplodeView:** `initScreenshotExport()` (lines 13830+, 50 lines)
198
+ - **cycleCAD:** `viewer-screenshot.js`
199
+ - **LoC to Port:** 120
200
+ - **Effort:** 2 hours
201
+ - **Description:** PNG/JPG/WebP export, transparent background, 2x resolution
202
+ - **Dependencies:** renderer.domElement
203
+ - **Blockers:** None
204
+ - **Priority:** P2 (sharing)
205
+ - **Status:** PLANNED
206
+
207
+ ### 14. Part Comparison
208
+ - **ExplodeView:** `initPartComparison()` (lines 14823-14863, 40 lines)
209
+ - **cycleCAD:** `viewer-comparison.js`
210
+ - **LoC to Port:** 250
211
+ - **Effort:** 3 hours
212
+ - **Description:** Select 2 parts, compare dimensions, volume, size, weight
213
+ - **Dependencies:** viewer-mode.js
214
+ - **Blockers:** None
215
+ - **Priority:** P3 (analysis)
216
+ - **Status:** PLANNED
217
+
218
+ ### 15. Weight Estimator
219
+ - **ExplodeView:** `initWeightEstimator()` (lines 14180+, 90 lines)
220
+ - **cycleCAD:** `viewer-weight.js`
221
+ - **LoC to Port:** 180
222
+ - **Effort:** 2 hours
223
+ - **Description:** Material selector (15 types), bbox-based volume estimation, density lookup
224
+ - **Dependencies:** viewer-mode.js
225
+ - **Blockers:** None
226
+ - **Priority:** P2 (manufacturing)
227
+ - **Status:** PLANNED
228
+
229
+ **Phase 2 Subtotal:** 7 modules, 1,890 LoC, 20 hours, 1 week
230
+
231
+ ---
232
+
233
+ ## Phase 3: Advanced Features (Weeks 4+)
234
+
235
+ ### 16. 3D Print Slicer
236
+ - **ExplodeView:** `initSlicer()` (lines 10445-11267, 822 lines)
237
+ - **cycleCAD:** `viewer-slicer.js`
238
+ - **LoC to Port:** 600
239
+ - **Effort:** 6 hours
240
+ - **Description:** G-code generation, layer height, nozzle diameter, supports preview
241
+ - **Dependencies:** viewer-mode.js, g-code generator lib
242
+ - **Blockers:** May need external library
243
+ - **Priority:** P3 (niche use case)
244
+ - **Status:** PLANNED
245
+
246
+ ### 17. Annotations / Pins
247
+ - **ExplodeView:** `initAnnotations()` (lines 3730+, 500+ lines) + `initMarkup()` (lines 15835+, 234 lines)
248
+ - **cycleCAD:** `viewer-annotations.js`
249
+ - **LoC to Port:** 400
250
+ - **Effort:** 5 hours
251
+ - **Description:** Click-to-place pins, click-to-edit, draggable, saved with model
252
+ - **Dependencies:** viewer-mode.js, localStorage
253
+ - **Blockers:** None
254
+ - **Priority:** P2 (collaboration)
255
+ - **Status:** PLANNED
256
+
257
+ ### 18. Technical Drawings
258
+ - **ExplodeView:** `initTechDrawings()` (lines 16069+, 103 lines)
259
+ - **cycleCAD:** Reuse DXF export from existing dxf-export.js
260
+ - **LoC to Port:** 200
261
+ - **Effort:** 3 hours
262
+ - **Description:** Auto-generate 2D drawings from 3D model, front/top/side views
263
+ - **Dependencies:** dxf-export.js, viewport.js
264
+ - **Blockers:** None
265
+ - **Priority:** P3 (documentation)
266
+ - **Status:** PLANNED
267
+
268
+ ### 19. QR Code per Part
269
+ - **ExplodeView:** `initQRCode()` (lines 9673-9788, 115 lines)
270
+ - **cycleCAD:** `viewer-qr.js`
271
+ - **LoC to Port:** 120
272
+ - **Effort:** 2 hours
273
+ - **Description:** Generate QR per part, links to #part={idx}, shareable
274
+ - **Dependencies:** qrcode-generator library (already used in cycleCAD)
275
+ - **Blockers:** None
276
+ - **Priority:** P3 (field service)
277
+ - **Status:** PLANNED
278
+
279
+ ### 20. Hero Shots
280
+ - **ExplodeView:** `initHeroShots()` (lines 9791-9925, 134 lines)
281
+ - **cycleCAD:** `viewer-hero-shots.js`
282
+ - **LoC to Port:** 150
283
+ - **Effort:** 2 hours
284
+ - **Description:** Pre-set camera angles, save favorite views, 360° rotate
285
+ - **Dependencies:** viewport.js
286
+ - **Blockers:** None
287
+ - **Priority:** P2 (marketing)
288
+ - **Status:** PLANNED
289
+
290
+ ### 21. Voice Commands
291
+ - **ExplodeView:** `initVoiceCommands()` (lines 15104+, 373 lines)
292
+ - **cycleCAD:** `viewer-voice.js`
293
+ - **LoC to Port:** 350
294
+ - **Effort:** 4 hours
295
+ - **Description:** Web Speech API, text-to-explode, "show part X", "section cut"
296
+ - **Dependencies:** viewer-mode.js, Web Speech API
297
+ - **Blockers:** HTTPS required for mic
298
+ - **Priority:** P4 (nice-to-have)
299
+ - **Status:** PLANNED
300
+
301
+ ### 22. Smart Filters
302
+ - **ExplodeView:** `initSmartFilters()` (lines 15477+, 183 lines)
303
+ - **cycleCAD:** `viewer-smart-filters.js`
304
+ - **LoC to Port:** 200
305
+ - **Effort:** 3 hours
306
+ - **Description:** Show/hide by size, weight, material, color-code by property
307
+ - **Dependencies:** viewer-mode.js
308
+ - **Blockers:** None
309
+ - **Priority:** P3 (analytics)
310
+ - **Status:** PLANNED
311
+
312
+ ### 23. BOM Costing
313
+ - **ExplodeView:** `initBOMCosting()` (lines 15660+, 93 lines)
314
+ - **cycleCAD:** Extend `viewer-bom.js`
315
+ - **LoC to Port:** 150
316
+ - **Effort:** 2 hours
317
+ - **Description:** Look up part cost from McMaster-Carr, total BOM cost
318
+ - **Dependencies:** viewer-ai-identify.js, McMaster API
319
+ - **Blockers:** API access
320
+ - **Priority:** P3 (manufacturing)
321
+ - **Status:** PLANNED
322
+
323
+ ### 24. Assembly Instructions
324
+ - **ExplodeView:** `initAssemblyInstructions()` + `initAsmInstructions()` (lines 15753+, 18400+, 300+ lines)
325
+ - **cycleCAD:** `viewer-asm-instructions.js` (also mirrors rebuild-guide.js)
326
+ - **LoC to Port:** 350
327
+ - **Effort:** 4 hours
328
+ - **Description:** Auto-generate step-by-step disassembly guide, export to HTML/PDF
329
+ - **Dependencies:** viewer-mode.js, template engine
330
+ - **Blockers:** None
331
+ - **Priority:** P3 (service docs)
332
+ - **Status:** PLANNED
333
+
334
+ ### 25. Maintenance Heatmap
335
+ - **ExplodeView:** `initMaintHeatmap()` (lines 18250+, 150 lines)
336
+ - **cycleCAD:** `viewer-maint-heatmap.js`
337
+ - **LoC to Port:** 200
338
+ - **Effort:** 3 hours
339
+ - **Description:** Color parts red/yellow/green by maintenance urgency, export schedule
340
+ - **Dependencies:** viewer-mode.js
341
+ - **Blockers:** None
342
+ - **Priority:** P3 (service)
343
+ - **Status:** PLANNED
344
+
345
+ ### 26. Wear Timeline
346
+ - **ExplodeView:** `initWearTimeline()` (lines 18550+, 150 lines)
347
+ - **cycleCAD:** `viewer-wear-timeline.js`
348
+ - **LoC to Port:** 200
349
+ - **Effort:** 3 hours
350
+ - **Description:** Gantt chart, 5-year replacement schedule, part lifecycle
351
+ - **Dependencies:** viewer-mode.js
352
+ - **Blockers:** None
353
+ - **Priority:** P3 (maintenance planning)
354
+ - **Status:** PLANNED
355
+
356
+ ### 27. Collaboration View
357
+ - **ExplodeView:** `initCollabView()` (lines 16428+, 100+ lines)
358
+ - **cycleCAD:** `viewer-collab.js` + use existing real-time collab system (Phase D)
359
+ - **LoC to Port:** 300
360
+ - **Effort:** 6 hours
361
+ - **Description:** Shared viewport, cursor tracking, comment threads, version history
362
+ - **Dependencies:** WebRTC, CRDT library
363
+ - **Blockers:** Needs Phase D infrastructure
364
+ - **Priority:** P4 (enterprise)
365
+ - **Status:** PLANNED
366
+
367
+ ### 28. Interference Check
368
+ - **ExplodeView:** `initInterferenceCheck()` (lines 16322+, 106 lines)
369
+ - **cycleCAD:** `viewer-clash.js`
370
+ - **LoC to Port:** 300
371
+ - **Effort:** 5 hours
372
+ - **Description:** Detect clashing/overlapping parts, highlight in red, generate report
373
+ - **Dependencies:** viewer-mode.js, CSG library
374
+ - **Blockers:** Needs CSG (constructive solid geometry)
375
+ - **Priority:** P3 (DFM analysis)
376
+ - **Status:** PLANNED
377
+
378
+ ### 29. Standards Identifier
379
+ - **ExplodeView:** `initStandardsIdentifier()` (lines 13812+, 307 lines)
380
+ - **cycleCAD:** `viewer-standards.js` + link to build-in parts library (future)
381
+ - **LoC to Port:** 250
382
+ - **Effort:** 3 hours
383
+ - **Description:** Identify DIN/ISO standard parts, link to supplier, auto-replace with catalog
384
+ - **Dependencies:** viewer-mode.js, parts database
385
+ - **Blockers:** Parts database not yet built
386
+ - **Priority:** P3 (manufacturing)
387
+ - **Status:** PLANNED
388
+
389
+ ### 30. Blueprint Theme
390
+ - **ExplodeView:** `initBlueprintTheme()` (lines 16418+, 60 lines)
391
+ - **cycleCAD:** CSS module or theme system
392
+ - **LoC to Port:** 80
393
+ - **Effort:** 1 hour
394
+ - **Description:** White background + blue wireframe toggle
395
+ - **Dependencies:** CSS variables
396
+ - **Blockers:** None
397
+ - **Priority:** P4 (aesthetics)
398
+ - **Status:** PLANNED
399
+
400
+ ### 31. AI Chat / Chatbot
401
+ - **ExplodeView:** `initModelChatbot()` (lines 16492+, 600+ lines)
402
+ - **cycleCAD:** Reuse existing `ai-chat.js` + enhance for viewer context
403
+ - **LoC to Port:** 300
404
+ - **Effort:** 3 hours
405
+ - **Description:** Ask questions about model, get smart answers, part recommendations
406
+ - **Dependencies:** Gemini Flash API, ai-chat.js
407
+ - **Blockers:** None
408
+ - **Priority:** P2 (user experience)
409
+ - **Status:** PLANNED (already in cycleCAD)
410
+
411
+ ### 32. Help System
412
+ - **ExplodeView:** `initHelpSystem()` (lines 17049+, 600+ lines)
413
+ - **cycleCAD:** `viewer-help.js` + enhance existing help
414
+ - **LoC to Port:** 400
415
+ - **Effort:** 3 hours
416
+ - **Description:** 43 features, searchable help, categorized display, tooltips
417
+ - **Dependencies:** viewer-mode.js
418
+ - **Blockers:** None
419
+ - **Priority:** P2 (discoverability)
420
+ - **Status:** PLANNED
421
+
422
+ ### 33. AI Render / Gallery
423
+ - **ExplodeView:** `initAIRender()` (lines 4672+, 1,625 lines)
424
+ - **cycleCAD:** `viewer-ai-render.js`
425
+ - **LoC to Port:** 800
426
+ - **Effort:** 8 hours
427
+ - **Description:** Generate realistic renders via Stable Diffusion/Midjourney, material detection, style presets
428
+ - **Dependencies:** Viewer context, API keys, image processing
429
+ - **Blockers:** External API calls (not free)
430
+ - **Priority:** P3 (showcase)
431
+ - **Status:** PLANNED
432
+
433
+ ### 34. Model Library / Import
434
+ - **ExplodeView:** `initModelImport()` (lines 947+, 642 lines)
435
+ - **cycleCAD:** Extend `viewer-loader.js`
436
+ - **LoC to Port:** 300
437
+ - **Effort:** 4 hours
438
+ - **Description:** Browse library, import multiple models, model manager
439
+ - **Dependencies:** viewer-loader.js, localStorage
440
+ - **Blockers:** None
441
+ - **Priority:** P3 (workflow)
442
+ - **Status:** PLANNED
443
+
444
+ ### 35. AR Scanner
445
+ - **ExplodeView:** `initARMode()` (lines 6297+, 241 lines) + `initCameraScan()` (lines 8012+, 161 lines)
446
+ - **cycleCAD:** `viewer-ar.js`
447
+ - **LoC to Port:** 400
448
+ - **Effort:** 5 hours
449
+ - **Description:** WebXR, point camera at subassembly, identify via vision, 3D overlay
450
+ - **Dependencies:** WebXR API, Gemini Vision
451
+ - **Blockers:** WebXR requires HTTPS + compatible device
452
+ - **Priority:** P4 (mobile/field service)
453
+ - **Status:** PLANNED
454
+
455
+ ### 36-57. Other Features
456
+ - AI Render Test, Theme System (duplicate), Image Editor, Shape Drawing, Recording, Embed Settings, Docs Mode, Sidebar Collapse, Menu Collapse, Snipper Tool, Visualization Tools, etc.
457
+ - **Total Remaining:** ~2,500+ LoC, 20+ hours
458
+ - **Priority:** P4+ (duplicates or niche)
459
+
460
+ **Phase 3 Subtotal:** 20+ modules, 6,000+ LoC, 60+ hours, 2+ weeks
461
+
462
+ ---
463
+
464
+ ## Module Dependencies
465
+
466
+ ```
467
+ viewer-mode.js (base)
468
+ ├─→ viewport.js (shared scene)
469
+ ├─→ Three.js (core)
470
+
471
+ ├─ viewer-assembly-tree.js
472
+ ├─ viewer-explode.js
473
+ ├─ viewer-section-cut.js
474
+ ├─ viewer-context-menu.js
475
+ ├─ viewer-bom.js
476
+ ├─ viewer-part-info.js
477
+ │ ├─→ STL exporter (external lib needed)
478
+ │ ├─→ OBJ exporter (external lib needed)
479
+ │ └─→ glTF exporter (Three.js built-in)
480
+ ├─ viewer-ai-identify.js
481
+ │ └─→ Gemini Vision API
482
+ │ └─→ McMaster-Carr API
483
+ ├─ viewer-shortcuts.js
484
+ ├─ viewer-animation.js
485
+ ├─ viewer-measurements.js
486
+ ├─ viewer-transparency.js
487
+ ├─ viewer-grid.js
488
+ ├─ viewer-screenshot.js
489
+ ├─ viewer-comparison.js
490
+ ├─ viewer-weight.js
491
+
492
+ ├─ viewer-slicer.js
493
+ │ └─→ g-code generator (external lib)
494
+ ├─ viewer-annotations.js
495
+ ├─ viewer-technical-drawings.js
496
+ │ └─→ dxf-export.js (existing)
497
+ ├─ viewer-qr.js
498
+ │ └─→ qrcode-generator (existing in cycleCAD)
499
+ ├─ viewer-hero-shots.js
500
+ ├─ viewer-voice.js
501
+ ├─ viewer-smart-filters.js
502
+ ├─ viewer-bom-costing.js
503
+ ├─ viewer-asm-instructions.js
504
+ ├─ viewer-maint-heatmap.js
505
+ ├─ viewer-wear-timeline.js
506
+ ├─ viewer-collab.js
507
+ │ └─→ WebRTC + CRDT (Phase D)
508
+ ├─ viewer-clash.js
509
+ │ └─→ CSG library
510
+ ├─ viewer-standards.js
511
+ ├─ viewer-blueprint-theme.js
512
+ ├─ viewer-help.js
513
+ ├─ viewer-ai-render.js
514
+ │ └─→ Stable Diffusion/Midjourney API
515
+ ├─ viewer-library.js
516
+ └─ viewer-ar.js
517
+ └─→ WebXR API
518
+
519
+ Shared with Edit Mode:
520
+ ├─ ai-chat.js (enhanced)
521
+ ├─ dxf-export.js (existing)
522
+ ├─ export.js (enhanced)
523
+ └─ viewport.js (existing)
524
+ ```
525
+
526
+ ---
527
+
528
+ ## Blocking Dependencies
529
+
530
+ | Blocker | Feature | Workaround | Phase |
531
+ |---------|---------|-----------|-------|
532
+ | STL Exporter Library | Part Info 3D Export | Use trimesh.js or three-stl-exporter | Phase 1 or 2 |
533
+ | g-code Generator | 3D Print Slicer | Use Cura.js or download library | Phase 3 |
534
+ | CSG Library | Clash Detection | Use CSGjs or OpenJSCAD | Phase 3 |
535
+ | WebXR | AR Scanner | Polyfill or fallback to camera view | Phase 3 |
536
+ | External APIs | AI Render, Gemini, McMaster | Already integrated in cycleCAD | Phase 1 |
537
+ | CRDT Library | Real-time Collaboration | Yjs or Automerge | Phase D |
538
+ | DIN/ISO Database | Standards Identifier | Scrape or import manually | Phase 3 |
539
+ | PDF Export | Assembly Instructions | Use pdfkit or wkhtmltopdf | Phase 3 |
540
+
541
+ ---
542
+
543
+ ## External Libraries Needed
544
+
545
+ | Library | Purpose | Phase | Status |
546
+ |---------|---------|-------|--------|
547
+ | `three-stl-exporter` or `trimesh.js` | Export parts to STL | Phase 1 | TBD |
548
+ | `cura.js` | 3D print slicing | Phase 3 | TBD |
549
+ | `csgjs` | Constructive Solid Geometry | Phase 3 | TBD |
550
+ | `qrcode-generator` | QR codes | Phase 2 | ✅ Already in cycleCAD |
551
+ | `yjs` | Real-time collaboration | Phase D | TBD |
552
+ | `pdfkit` | PDF export | Phase 3 | TBD |
553
+ | `three-gltf-exporter` | glTF export | Phase 1 | ✅ Built-in to Three.js |
554
+
555
+ ---
556
+
557
+ ## Estimated Total Effort
558
+
559
+ | Phase | Modules | LoC | Hours | Weeks | Start |
560
+ |-------|---------|-----|-------|-------|-------|
561
+ | **0** (Done) | 1 | 600 | 4 | 0.5 | Now |
562
+ | **1** (Critical) | 8 | 4,050 | 40 | 2 | Week 1 |
563
+ | **2** (Enhancement) | 7 | 1,890 | 20 | 1 | Week 3 |
564
+ | **3** (Advanced) | 20+ | 6,000+ | 60+ | 2-3 | Week 4 |
565
+ | **D** (Enterprise) | 5+ | 2,000+ | 20+ | 1+ | Week 7+ |
566
+ | **TOTAL** | 40+ | 14,500+ | 140+ | 7+ weeks | |
567
+
568
+ **MVP (Phases 0-1):** 60 hours, 2 weeks, ship with cycleCAD v1.1.0
569
+
570
+ ---
571
+
572
+ ## Decision Points
573
+
574
+ ### Must Port
575
+ 1. Assembly Tree — users need structure
576
+ 2. Explode/Collapse — cycleWASH differentiator
577
+ 3. Section Cut — inspection workflow
578
+ 4. AI Identify — competitive advantage
579
+
580
+ ### Should Port
581
+ 5. BOM Export — manufacturing workflow
582
+ 6. Part Info — detail inspection
583
+ 7. Context Menu — user convenience
584
+ 8. Measurements — technician workflow
585
+ 9. Annotations — collaboration prep
586
+
587
+ ### Could Port Later
588
+ - Advanced rendering, AR, video generation, etc.
589
+ - Only if time + resources allow
590
+
591
+ ### Don't Port (Low ROI)
592
+ - Kiri:Moto (external tool)
593
+ - Snipper tool (built in to browsers)
594
+ - Embed settings (legacy feature)
595
+ - Theme system (CSS is enough)
596
+
597
+ ---
598
+
599
+ **Document:** EXPLODEVIEW-FEATURE-MAPPING.md
600
+ **Status:** COMPLETE
601
+ **Date:** 2026-03-25
602
+ **Author:** Claude (Agent)