cyclecad 1.3.2 → 2.0.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.
- package/DRAWING_MODULE_INTEGRATION.md +633 -0
- package/README.md +124 -296
- package/app/index.html +2 -0
- package/app/js/brep-kernel.js +853 -0
- package/app/js/kernel.js +684 -0
- package/app/js/modules/assembly-module.js +582 -0
- package/app/js/modules/brep-module.js +583 -0
- package/app/js/modules/drawing-module.js +883 -0
- package/app/js/modules/operations-module.js +660 -0
- package/app/js/modules/simulation-module.js +834 -0
- package/app/js/modules/sketch-module.js +720 -0
- package/app/js/modules/step-module.js +510 -0
- package/app/js/modules/viewport-module.js +530 -0
- package/fusion360-gap-analysis.html +636 -0
- package/package.json +1 -1
|
@@ -0,0 +1,636 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>cycleCAD vs Fusion 360 — Gap Analysis</title>
|
|
7
|
+
<style>
|
|
8
|
+
:root {
|
|
9
|
+
--bg: #0f172a; --surface: #1e293b; --card: #334155;
|
|
10
|
+
--border: #475569; --text: #e2e8f0; --muted: #94a3b8;
|
|
11
|
+
--green: #22c55e; --yellow: #eab308; --red: #ef4444;
|
|
12
|
+
--blue: #3b82f6; --purple: #a855f7; --cyan: #06b6d4;
|
|
13
|
+
--orange: #f97316;
|
|
14
|
+
}
|
|
15
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
16
|
+
body { font-family: 'Inter', -apple-system, sans-serif; background: var(--bg); color: var(--text); line-height: 1.6; }
|
|
17
|
+
|
|
18
|
+
.header { background: linear-gradient(135deg, #1e3a5f 0%, #0f172a 100%); padding: 48px 32px; text-align: center; border-bottom: 1px solid var(--border); }
|
|
19
|
+
.header h1 { font-size: 2.4rem; font-weight: 800; margin-bottom: 8px; }
|
|
20
|
+
.header h1 span { color: var(--blue); }
|
|
21
|
+
.header p { color: var(--muted); font-size: 1.1rem; }
|
|
22
|
+
|
|
23
|
+
.stats-bar { display: flex; justify-content: center; gap: 32px; padding: 24px; background: var(--surface); border-bottom: 1px solid var(--border); flex-wrap: wrap; }
|
|
24
|
+
.stat { text-align: center; }
|
|
25
|
+
.stat .num { font-size: 2rem; font-weight: 800; }
|
|
26
|
+
.stat .label { font-size: 0.8rem; color: var(--muted); text-transform: uppercase; letter-spacing: 1px; }
|
|
27
|
+
.stat.green .num { color: var(--green); }
|
|
28
|
+
.stat.yellow .num { color: var(--yellow); }
|
|
29
|
+
.stat.red .num { color: var(--red); }
|
|
30
|
+
.stat.blue .num { color: var(--blue); }
|
|
31
|
+
.stat.purple .num { color: var(--purple); }
|
|
32
|
+
|
|
33
|
+
.tabs { display: flex; gap: 0; background: var(--surface); border-bottom: 2px solid var(--border); padding: 0 32px; overflow-x: auto; }
|
|
34
|
+
.tab { padding: 14px 24px; cursor: pointer; color: var(--muted); font-weight: 600; font-size: 0.9rem; border-bottom: 3px solid transparent; transition: all 0.2s; white-space: nowrap; }
|
|
35
|
+
.tab:hover { color: var(--text); }
|
|
36
|
+
.tab.active { color: var(--blue); border-bottom-color: var(--blue); }
|
|
37
|
+
|
|
38
|
+
.content { max-width: 1400px; margin: 0 auto; padding: 32px; }
|
|
39
|
+
.tab-panel { display: none; }
|
|
40
|
+
.tab-panel.active { display: block; }
|
|
41
|
+
|
|
42
|
+
.section-title { font-size: 1.5rem; font-weight: 700; margin: 32px 0 16px; padding-bottom: 8px; border-bottom: 1px solid var(--border); }
|
|
43
|
+
.section-title:first-child { margin-top: 0; }
|
|
44
|
+
|
|
45
|
+
/* Gap table */
|
|
46
|
+
.gap-table { width: 100%; border-collapse: collapse; margin: 16px 0 32px; }
|
|
47
|
+
.gap-table th { background: var(--card); padding: 12px 16px; text-align: left; font-size: 0.8rem; text-transform: uppercase; letter-spacing: 1px; color: var(--muted); border-bottom: 2px solid var(--border); position: sticky; top: 0; }
|
|
48
|
+
.gap-table td { padding: 12px 16px; border-bottom: 1px solid #1e293b; vertical-align: top; font-size: 0.9rem; }
|
|
49
|
+
.gap-table tr:hover td { background: rgba(59, 130, 246, 0.05); }
|
|
50
|
+
.gap-table .cat { font-weight: 700; color: var(--blue); font-size: 0.8rem; text-transform: uppercase; }
|
|
51
|
+
|
|
52
|
+
.badge { display: inline-block; padding: 2px 10px; border-radius: 12px; font-size: 0.75rem; font-weight: 700; }
|
|
53
|
+
.badge-done { background: rgba(34,197,94,0.15); color: var(--green); }
|
|
54
|
+
.badge-partial { background: rgba(234,179,8,0.15); color: var(--yellow); }
|
|
55
|
+
.badge-stub { background: rgba(249,115,22,0.15); color: var(--orange); }
|
|
56
|
+
.badge-missing { background: rgba(239,68,68,0.15); color: var(--red); }
|
|
57
|
+
.badge-na { background: rgba(148,163,184,0.1); color: var(--muted); }
|
|
58
|
+
|
|
59
|
+
.priority { font-weight: 700; }
|
|
60
|
+
.p-critical { color: var(--red); }
|
|
61
|
+
.p-high { color: var(--orange); }
|
|
62
|
+
.p-medium { color: var(--yellow); }
|
|
63
|
+
.p-low { color: var(--muted); }
|
|
64
|
+
|
|
65
|
+
.effort { color: var(--cyan); font-weight: 600; }
|
|
66
|
+
|
|
67
|
+
/* Summary cards */
|
|
68
|
+
.cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 16px; margin: 16px 0; }
|
|
69
|
+
.card { background: var(--surface); border: 1px solid var(--border); border-radius: 12px; padding: 24px; }
|
|
70
|
+
.card h3 { font-size: 1.1rem; margin-bottom: 12px; }
|
|
71
|
+
.card .items { list-style: none; }
|
|
72
|
+
.card .items li { padding: 6px 0; border-bottom: 1px solid rgba(255,255,255,0.05); font-size: 0.9rem; color: var(--muted); }
|
|
73
|
+
.card .items li:last-child { border-bottom: none; }
|
|
74
|
+
|
|
75
|
+
/* Roadmap */
|
|
76
|
+
.phase { background: var(--surface); border: 1px solid var(--border); border-radius: 12px; padding: 24px; margin: 16px 0; }
|
|
77
|
+
.phase-header { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; }
|
|
78
|
+
.phase-badge { padding: 4px 12px; border-radius: 8px; font-weight: 700; font-size: 0.85rem; }
|
|
79
|
+
.phase-a .phase-badge { background: rgba(239,68,68,0.2); color: var(--red); }
|
|
80
|
+
.phase-b .phase-badge { background: rgba(249,115,22,0.2); color: var(--orange); }
|
|
81
|
+
.phase-c .phase-badge { background: rgba(234,179,8,0.2); color: var(--yellow); }
|
|
82
|
+
.phase-d .phase-badge { background: rgba(34,197,94,0.2); color: var(--green); }
|
|
83
|
+
.phase h3 { font-size: 1.2rem; }
|
|
84
|
+
.phase p { color: var(--muted); font-size: 0.9rem; margin-bottom: 8px; }
|
|
85
|
+
.phase ul { list-style: none; padding: 0; }
|
|
86
|
+
.phase li { padding: 4px 0; font-size: 0.9rem; }
|
|
87
|
+
.phase li::before { content: "→ "; color: var(--blue); }
|
|
88
|
+
|
|
89
|
+
/* Bar chart */
|
|
90
|
+
.bar-chart { margin: 16px 0; }
|
|
91
|
+
.bar-row { display: flex; align-items: center; margin: 8px 0; }
|
|
92
|
+
.bar-label { width: 180px; font-size: 0.85rem; color: var(--muted); text-align: right; padding-right: 16px; flex-shrink: 0; }
|
|
93
|
+
.bar-track { flex: 1; height: 28px; background: var(--card); border-radius: 6px; overflow: hidden; display: flex; }
|
|
94
|
+
.bar-fill { height: 100%; display: flex; align-items: center; justify-content: center; font-size: 0.75rem; font-weight: 700; transition: width 0.5s; }
|
|
95
|
+
.bar-done { background: var(--green); color: #000; }
|
|
96
|
+
.bar-partial { background: var(--yellow); color: #000; }
|
|
97
|
+
.bar-stub { background: var(--orange); color: #000; }
|
|
98
|
+
.bar-missing { background: var(--red); color: #fff; }
|
|
99
|
+
|
|
100
|
+
.filter-bar { display: flex; gap: 8px; margin: 16px 0; flex-wrap: wrap; }
|
|
101
|
+
.filter-btn { padding: 6px 16px; border-radius: 20px; border: 1px solid var(--border); background: transparent; color: var(--muted); cursor: pointer; font-size: 0.85rem; transition: all 0.2s; }
|
|
102
|
+
.filter-btn:hover, .filter-btn.active { background: var(--blue); color: #fff; border-color: var(--blue); }
|
|
103
|
+
|
|
104
|
+
.search-box { width: 100%; padding: 12px 16px; background: var(--surface); border: 1px solid var(--border); border-radius: 8px; color: var(--text); font-size: 1rem; margin: 16px 0; }
|
|
105
|
+
.search-box:focus { outline: none; border-color: var(--blue); }
|
|
106
|
+
|
|
107
|
+
footer { text-align: center; padding: 32px; color: var(--muted); font-size: 0.8rem; border-top: 1px solid var(--border); margin-top: 48px; }
|
|
108
|
+
</style>
|
|
109
|
+
</head>
|
|
110
|
+
<body>
|
|
111
|
+
|
|
112
|
+
<div class="header">
|
|
113
|
+
<h1>cycleCAD vs <span>Fusion 360</span> — Gap Analysis</h1>
|
|
114
|
+
<p>Complete feature-by-feature comparison across 21 categories · Generated 2026-03-30</p>
|
|
115
|
+
</div>
|
|
116
|
+
|
|
117
|
+
<div class="stats-bar" id="stats-bar">
|
|
118
|
+
<!-- filled by JS -->
|
|
119
|
+
</div>
|
|
120
|
+
|
|
121
|
+
<div class="tabs" id="tabs">
|
|
122
|
+
<div class="tab active" data-tab="overview">Overview</div>
|
|
123
|
+
<div class="tab" data-tab="matrix">Feature Matrix</div>
|
|
124
|
+
<div class="tab" data-tab="critical">Critical Gaps</div>
|
|
125
|
+
<div class="tab" data-tab="roadmap">Implementation Roadmap</div>
|
|
126
|
+
<div class="tab" data-tab="coverage">Coverage by Category</div>
|
|
127
|
+
</div>
|
|
128
|
+
|
|
129
|
+
<div class="content">
|
|
130
|
+
<!-- OVERVIEW -->
|
|
131
|
+
<div class="tab-panel active" id="panel-overview">
|
|
132
|
+
<h2 class="section-title">Executive Summary</h2>
|
|
133
|
+
<p style="color:var(--muted);margin-bottom:24px;">
|
|
134
|
+
Fusion 360 has approximately <strong style="color:var(--text)">210 distinct features</strong> across 21 product areas. cycleCAD currently implements <strong style="color:var(--green)">95 features</strong> (45% coverage). Of those, <strong style="color:var(--yellow)">28 are partial/stub</strong> implementations. The largest gaps are in <strong style="color:var(--red)">Simulation, CAM, Generative Design, Drawing/Documentation, and Surface Modeling</strong> — which together account for 60+ missing features.
|
|
135
|
+
</p>
|
|
136
|
+
|
|
137
|
+
<h2 class="section-title">What cycleCAD Has That Fusion 360 Doesn't</h2>
|
|
138
|
+
<div class="cards">
|
|
139
|
+
<div class="card">
|
|
140
|
+
<h3 style="color:var(--green);">Agent-First API</h3>
|
|
141
|
+
<ul class="items">
|
|
142
|
+
<li>55-command JSON-RPC Agent API</li>
|
|
143
|
+
<li>MCP Server (Model Context Protocol)</li>
|
|
144
|
+
<li>CLI tool with REPL + batch mode</li>
|
|
145
|
+
<li>Voice-driven CAD commands</li>
|
|
146
|
+
<li>Multi-agent swarm support</li>
|
|
147
|
+
</ul>
|
|
148
|
+
</div>
|
|
149
|
+
<div class="card">
|
|
150
|
+
<h3 style="color:var(--green);">AI-Native Analysis</h3>
|
|
151
|
+
<ul class="items">
|
|
152
|
+
<li>AI Vision part identifier (Gemini)</li>
|
|
153
|
+
<li>Batch AI scan (all parts)</li>
|
|
154
|
+
<li>Smart NL search with synonyms</li>
|
|
155
|
+
<li>AI assembly instructions generator</li>
|
|
156
|
+
<li>Maintenance heatmap + wear timeline</li>
|
|
157
|
+
</ul>
|
|
158
|
+
</div>
|
|
159
|
+
<div class="card">
|
|
160
|
+
<h3 style="color:var(--green);">Industrial Maintenance</h3>
|
|
161
|
+
<ul class="items">
|
|
162
|
+
<li>Service mode with field tech workflow</li>
|
|
163
|
+
<li>Part wear timeline (5-year Gantt)</li>
|
|
164
|
+
<li>Maintenance heatmap (red/yellow/green)</li>
|
|
165
|
+
<li>Field tech feedback system</li>
|
|
166
|
+
<li>Technical report export</li>
|
|
167
|
+
</ul>
|
|
168
|
+
</div>
|
|
169
|
+
<div class="card">
|
|
170
|
+
<h3 style="color:var(--green);">Token Economy & Marketplace</h3>
|
|
171
|
+
<ul class="items">
|
|
172
|
+
<li>$CYCLE token engine (per-op billing)</li>
|
|
173
|
+
<li>Model marketplace with reviews</li>
|
|
174
|
+
<li>Creator royalties (70-90%)</li>
|
|
175
|
+
<li>Crypto payment support</li>
|
|
176
|
+
<li>Inventor .ipt/.iam native parsing</li>
|
|
177
|
+
</ul>
|
|
178
|
+
</div>
|
|
179
|
+
</div>
|
|
180
|
+
|
|
181
|
+
<h2 class="section-title">Top 10 Critical Missing Features</h2>
|
|
182
|
+
<table class="gap-table">
|
|
183
|
+
<tr><th>#</th><th>Feature</th><th>Why It Matters</th><th>Effort</th></tr>
|
|
184
|
+
<tr><td>1</td><td><strong>Real B-Rep Kernel</strong></td><td>Every pro CAD op depends on solid geometry — fillets, booleans, STEP export all need B-Rep</td><td class="effort">6-8 weeks</td></tr>
|
|
185
|
+
<tr><td>2</td><td><strong>STEP Import/Export</strong></td><td>Industry-standard interchange format. Without it, cycleCAD is isolated from all other CAD tools</td><td class="effort">4-6 weeks</td></tr>
|
|
186
|
+
<tr><td>3</td><td><strong>2D Drawing / Dimensioning</strong></td><td>Engineers need to produce manufacturing drawings with dimensions, tolerances, title blocks</td><td class="effort">4-6 weeks</td></tr>
|
|
187
|
+
<tr><td>4</td><td><strong>FEA Simulation (Stress/Thermal)</strong></td><td>Validates designs before manufacturing — standard in every pro CAD package</td><td class="effort">8-12 weeks</td></tr>
|
|
188
|
+
<tr><td>5</td><td><strong>Parametric Feature History (real)</strong></td><td>Edit-any-feature-and-rebuild is the core of parametric CAD. Current history is basic snapshots</td><td class="effort">6-8 weeks</td></tr>
|
|
189
|
+
<tr><td>6</td><td><strong>Assembly Constraints (real mates)</strong></td><td>Joint definitions that actually constrain motion — not just visual grouping</td><td class="effort">4-6 weeks</td></tr>
|
|
190
|
+
<tr><td>7</td><td><strong>Surface Modeling (patches, trim, extend)</strong></td><td>Complex freeform shapes — car bodies, consumer products, industrial design</td><td class="effort">6-8 weeks</td></tr>
|
|
191
|
+
<tr><td>8</td><td><strong>CAM / Toolpath Generation</strong></td><td>Design-to-manufacture in one tool. Fusion 360's biggest differentiator</td><td class="effort">12-16 weeks</td></tr>
|
|
192
|
+
<tr><td>9</td><td><strong>Real-time Collaboration</strong></td><td>Multi-user editing like Google Docs — OnShape's core selling point</td><td class="effort">8-10 weeks</td></tr>
|
|
193
|
+
<tr><td>10</td><td><strong>Version Control / Branching</strong></td><td>Design history with branches, compare, merge — data management backbone</td><td class="effort">4-6 weeks</td></tr>
|
|
194
|
+
</table>
|
|
195
|
+
</div>
|
|
196
|
+
|
|
197
|
+
<!-- FEATURE MATRIX -->
|
|
198
|
+
<div class="tab-panel" id="panel-matrix">
|
|
199
|
+
<h2 class="section-title">Complete Feature Matrix</h2>
|
|
200
|
+
<input type="text" class="search-box" id="matrix-search" placeholder="Search features... (e.g. fillet, simulation, export)">
|
|
201
|
+
<div class="filter-bar" id="filter-bar">
|
|
202
|
+
<button class="filter-btn active" data-filter="all">All</button>
|
|
203
|
+
<button class="filter-btn" data-filter="done">Done</button>
|
|
204
|
+
<button class="filter-btn" data-filter="partial">Partial</button>
|
|
205
|
+
<button class="filter-btn" data-filter="stub">Stub</button>
|
|
206
|
+
<button class="filter-btn" data-filter="missing">Missing</button>
|
|
207
|
+
</div>
|
|
208
|
+
<table class="gap-table" id="matrix-table">
|
|
209
|
+
<thead><tr><th>Category</th><th>Fusion 360 Feature</th><th>cycleCAD Status</th><th>Priority</th><th>Effort</th><th>Notes</th></tr></thead>
|
|
210
|
+
<tbody id="matrix-body"></tbody>
|
|
211
|
+
</table>
|
|
212
|
+
</div>
|
|
213
|
+
|
|
214
|
+
<!-- CRITICAL GAPS -->
|
|
215
|
+
<div class="tab-panel" id="panel-critical">
|
|
216
|
+
<h2 class="section-title">Critical Gaps — Must Have for Parity</h2>
|
|
217
|
+
<p style="color:var(--muted);margin-bottom:24px;">Features that Fusion 360 users consider non-negotiable. Without these, engineers won't consider switching.</p>
|
|
218
|
+
<div id="critical-list"></div>
|
|
219
|
+
</div>
|
|
220
|
+
|
|
221
|
+
<!-- ROADMAP -->
|
|
222
|
+
<div class="tab-panel" id="panel-roadmap">
|
|
223
|
+
<h2 class="section-title">Implementation Roadmap</h2>
|
|
224
|
+
<p style="color:var(--muted);margin-bottom:24px;">Phased plan to reach feature parity. Total estimated: 12-18 months with a team of 3-4 engineers.</p>
|
|
225
|
+
<div id="roadmap-phases"></div>
|
|
226
|
+
</div>
|
|
227
|
+
|
|
228
|
+
<!-- COVERAGE -->
|
|
229
|
+
<div class="tab-panel" id="panel-coverage">
|
|
230
|
+
<h2 class="section-title">Coverage by Category</h2>
|
|
231
|
+
<p style="color:var(--muted);margin-bottom:24px;">Percentage of Fusion 360 features implemented per category.</p>
|
|
232
|
+
<div class="bar-chart" id="coverage-chart"></div>
|
|
233
|
+
</div>
|
|
234
|
+
</div>
|
|
235
|
+
|
|
236
|
+
<footer>
|
|
237
|
+
cycleCAD Gap Analysis · Generated 2026-03-30 · Data based on Fusion 360 (March 2026) vs cycleCAD v1.3.3
|
|
238
|
+
</footer>
|
|
239
|
+
|
|
240
|
+
<script>
|
|
241
|
+
// ========== DATA ==========
|
|
242
|
+
const features = [
|
|
243
|
+
// SOLID MODELING (18 features)
|
|
244
|
+
{ cat: "Solid Modeling", f360: "Extrude (symmetric, to-next, to-face)", status: "partial", priority: "critical", effort: "2w", notes: "Basic extrude works; missing to-next, to-face, symmetric modes" },
|
|
245
|
+
{ cat: "Solid Modeling", f360: "Revolve (full, angle, to-face)", status: "partial", priority: "critical", effort: "1w", notes: "Basic revolve works; missing to-face termination" },
|
|
246
|
+
{ cat: "Solid Modeling", f360: "Sweep (guide rail, twist, scale)", status: "partial", priority: "high", effort: "2w", notes: "Basic sweep works; missing guide rail, taper" },
|
|
247
|
+
{ cat: "Solid Modeling", f360: "Loft (guide rails, centerline)", status: "partial", priority: "high", effort: "2w", notes: "Basic loft works; missing guide rails, tangency control" },
|
|
248
|
+
{ cat: "Solid Modeling", f360: "Fillet (constant, variable, face blend)", status: "stub", priority: "critical", effort: "4w", notes: "Torus approximation only — needs real B-Rep edge fillet" },
|
|
249
|
+
{ cat: "Solid Modeling", f360: "Chamfer (equal, two-distance, angle)", status: "stub", priority: "critical", effort: "2w", notes: "Cone approximation — needs real edge chamfer" },
|
|
250
|
+
{ cat: "Solid Modeling", f360: "Shell (uniform, non-uniform)", status: "partial", priority: "high", effort: "2w", notes: "Basic shell works; non-uniform thickness missing" },
|
|
251
|
+
{ cat: "Solid Modeling", f360: "Boolean (union, cut, intersect)", status: "stub", priority: "critical", effort: "4w", notes: "Visual indicator only — needs real CSG with B-Rep kernel" },
|
|
252
|
+
{ cat: "Solid Modeling", f360: "Draft (face draft for injection molding)", status: "missing", priority: "medium", effort: "2w", notes: "Not implemented" },
|
|
253
|
+
{ cat: "Solid Modeling", f360: "Rib (structural reinforcement)", status: "missing", priority: "medium", effort: "1w", notes: "Not implemented" },
|
|
254
|
+
{ cat: "Solid Modeling", f360: "Web (thin wall feature)", status: "missing", priority: "low", effort: "1w", notes: "Not implemented" },
|
|
255
|
+
{ cat: "Solid Modeling", f360: "Hole (simple, counterbore, countersink, tapped)", status: "partial", priority: "high", effort: "2w", notes: "Basic hole works; tapped and countersink missing ISO standards" },
|
|
256
|
+
{ cat: "Solid Modeling", f360: "Thread (cosmetic, modeled, ISO/ANSI)", status: "partial", priority: "medium", effort: "2w", notes: "Helical geometry works; missing standard thread profiles" },
|
|
257
|
+
{ cat: "Solid Modeling", f360: "Pattern (rectangular, circular, path)", status: "partial", priority: "high", effort: "1w", notes: "Rect + circular done; path pattern missing" },
|
|
258
|
+
{ cat: "Solid Modeling", f360: "Mirror (feature, body, component)", status: "partial", priority: "medium", effort: "1w", notes: "Basic mirror works; missing feature-level mirror" },
|
|
259
|
+
{ cat: "Solid Modeling", f360: "Move/Copy bodies", status: "done", priority: "low", effort: "—", notes: "Implemented via context menu + drag" },
|
|
260
|
+
{ cat: "Solid Modeling", f360: "Split body/face", status: "missing", priority: "medium", effort: "2w", notes: "Not implemented" },
|
|
261
|
+
{ cat: "Solid Modeling", f360: "Combine bodies", status: "stub", priority: "high", effort: "2w", notes: "Needs real boolean kernel" },
|
|
262
|
+
|
|
263
|
+
// SKETCHING (14 features)
|
|
264
|
+
{ cat: "Sketching", f360: "Line, rectangle, circle, arc, ellipse", status: "partial", priority: "critical", effort: "1w", notes: "Line, rect, circle, arc done; ellipse missing" },
|
|
265
|
+
{ cat: "Sketching", f360: "Spline (control point, fit point)", status: "missing", priority: "high", effort: "2w", notes: "No spline tool" },
|
|
266
|
+
{ cat: "Sketching", f360: "Polygon (inscribed, circumscribed)", status: "missing", priority: "medium", effort: "0.5w", notes: "Not implemented" },
|
|
267
|
+
{ cat: "Sketching", f360: "Slot (center-to-center, arc slot)", status: "missing", priority: "medium", effort: "0.5w", notes: "Not implemented" },
|
|
268
|
+
{ cat: "Sketching", f360: "Text / Sketch text", status: "missing", priority: "low", effort: "1w", notes: "Not implemented" },
|
|
269
|
+
{ cat: "Sketching", f360: "Offset curves", status: "missing", priority: "high", effort: "1w", notes: "Not implemented" },
|
|
270
|
+
{ cat: "Sketching", f360: "Trim / Extend", status: "missing", priority: "critical", effort: "2w", notes: "Essential sketch editing — not implemented" },
|
|
271
|
+
{ cat: "Sketching", f360: "Fillet / Chamfer in sketch", status: "missing", priority: "high", effort: "1w", notes: "Not implemented" },
|
|
272
|
+
{ cat: "Sketching", f360: "Construction geometry", status: "missing", priority: "high", effort: "1w", notes: "No construction lines/circles" },
|
|
273
|
+
{ cat: "Sketching", f360: "Sketch dimensions (driven, driving)", status: "missing", priority: "critical", effort: "2w", notes: "No dimension-driven constraints" },
|
|
274
|
+
{ cat: "Sketching", f360: "Sketch constraints (12+ types)", status: "done", priority: "—", effort: "—", notes: "12 constraint types implemented in constraint-solver.js" },
|
|
275
|
+
{ cat: "Sketching", f360: "Project / Include geometry", status: "missing", priority: "high", effort: "1w", notes: "Can't project 3D edges onto sketch plane" },
|
|
276
|
+
{ cat: "Sketching", f360: "Sketch on face (any plane)", status: "missing", priority: "critical", effort: "2w", notes: "Can only sketch on XY/XZ/YZ — not on model faces" },
|
|
277
|
+
{ cat: "Sketching", f360: "Sketch patterns (rect, circular)", status: "missing", priority: "medium", effort: "1w", notes: "Not implemented" },
|
|
278
|
+
|
|
279
|
+
// SURFACE MODELING (10 features)
|
|
280
|
+
{ cat: "Surface Modeling", f360: "Extrude surface", status: "missing", priority: "high", effort: "2w", notes: "Not implemented — needs surface kernel" },
|
|
281
|
+
{ cat: "Surface Modeling", f360: "Revolve surface", status: "missing", priority: "high", effort: "2w", notes: "Not implemented" },
|
|
282
|
+
{ cat: "Surface Modeling", f360: "Sweep surface", status: "missing", priority: "medium", effort: "2w", notes: "Not implemented" },
|
|
283
|
+
{ cat: "Surface Modeling", f360: "Loft surface", status: "missing", priority: "medium", effort: "2w", notes: "Not implemented" },
|
|
284
|
+
{ cat: "Surface Modeling", f360: "Patch (fill boundary)", status: "missing", priority: "medium", effort: "3w", notes: "Not implemented" },
|
|
285
|
+
{ cat: "Surface Modeling", f360: "Trim / Untrim surface", status: "missing", priority: "high", effort: "2w", notes: "Not implemented" },
|
|
286
|
+
{ cat: "Surface Modeling", f360: "Extend surface", status: "missing", priority: "medium", effort: "1w", notes: "Not implemented" },
|
|
287
|
+
{ cat: "Surface Modeling", f360: "Stitch surfaces to solid", status: "missing", priority: "high", effort: "2w", notes: "Not implemented — requires B-Rep" },
|
|
288
|
+
{ cat: "Surface Modeling", f360: "Offset surface", status: "missing", priority: "medium", effort: "1w", notes: "Not implemented" },
|
|
289
|
+
{ cat: "Surface Modeling", f360: "Thicken surface to solid", status: "missing", priority: "medium", effort: "1w", notes: "Not implemented" },
|
|
290
|
+
|
|
291
|
+
// FORM / T-SPLINE (6 features)
|
|
292
|
+
{ cat: "Form (T-Spline)", f360: "T-Spline editing (push/pull faces)", status: "missing", priority: "low", effort: "8w", notes: "Complex — Fusion 360's unique sculpting mode" },
|
|
293
|
+
{ cat: "Form (T-Spline)", f360: "Subdivision surface modeling", status: "missing", priority: "low", effort: "6w", notes: "Not implemented" },
|
|
294
|
+
{ cat: "Form (T-Spline)", f360: "Convert T-Spline to B-Rep", status: "missing", priority: "low", effort: "4w", notes: "Requires T-Spline engine" },
|
|
295
|
+
{ cat: "Form (T-Spline)", f360: "Symmetry editing", status: "missing", priority: "low", effort: "2w", notes: "Not implemented" },
|
|
296
|
+
{ cat: "Form (T-Spline)", f360: "Crease / Uncrease edges", status: "missing", priority: "low", effort: "1w", notes: "Not implemented" },
|
|
297
|
+
{ cat: "Form (T-Spline)", f360: "Box, Cylinder, Sphere, Torus primitives (T-Spline)", status: "missing", priority: "low", effort: "2w", notes: "Not implemented" },
|
|
298
|
+
|
|
299
|
+
// SHEET METAL (8 features)
|
|
300
|
+
{ cat: "Sheet Metal", f360: "Flange (edge flange, contour)", status: "partial", priority: "high", effort: "2w", notes: "Basic flange works; contour flange missing" },
|
|
301
|
+
{ cat: "Sheet Metal", f360: "Bend (along line)", status: "done", priority: "—", effort: "—", notes: "Implemented with k-factor" },
|
|
302
|
+
{ cat: "Sheet Metal", f360: "Flat pattern / Unfold", status: "done", priority: "—", effort: "—", notes: "Implemented in advanced-ops.js" },
|
|
303
|
+
{ cat: "Sheet Metal", f360: "Tab", status: "done", priority: "—", effort: "—", notes: "Implemented" },
|
|
304
|
+
{ cat: "Sheet Metal", f360: "Slot", status: "done", priority: "—", effort: "—", notes: "Implemented" },
|
|
305
|
+
{ cat: "Sheet Metal", f360: "Sheet metal rules (bend radius, k-factor)", status: "partial", priority: "medium", effort: "1w", notes: "K-factor done; missing full rule tables" },
|
|
306
|
+
{ cat: "Sheet Metal", f360: "Convert to sheet metal", status: "missing", priority: "medium", effort: "2w", notes: "Can't convert solid body to sheet metal" },
|
|
307
|
+
{ cat: "Sheet Metal", f360: "Flat pattern export (DXF)", status: "done", priority: "—", effort: "—", notes: "DXF export implemented" },
|
|
308
|
+
|
|
309
|
+
// ASSEMBLY (10 features)
|
|
310
|
+
{ cat: "Assembly", f360: "Joint definitions (rigid, revolute, slider, cylindrical, pin-slot, ball)", status: "stub", priority: "critical", effort: "4w", notes: "Module built but joints don't constrain motion" },
|
|
311
|
+
{ cat: "Assembly", f360: "As-built joint (position then constrain)", status: "missing", priority: "high", effort: "2w", notes: "Not implemented" },
|
|
312
|
+
{ cat: "Assembly", f360: "Joint limits (min/max angle, translation)", status: "missing", priority: "high", effort: "1w", notes: "Not implemented" },
|
|
313
|
+
{ cat: "Assembly", f360: "Motion study / Animation", status: "partial", priority: "medium", effort: "3w", notes: "ExplodeView has animation; no physics-based motion study" },
|
|
314
|
+
{ cat: "Assembly", f360: "Contact sets (collision detection)", status: "missing", priority: "medium", effort: "3w", notes: "Not implemented" },
|
|
315
|
+
{ cat: "Assembly", f360: "Interference check", status: "stub", priority: "high", effort: "2w", notes: "BBox clearance checker exists; no real intersection check" },
|
|
316
|
+
{ cat: "Assembly", f360: "Exploded view", status: "done", priority: "—", effort: "—", notes: "Full explode/collapse in ExplodeView" },
|
|
317
|
+
{ cat: "Assembly", f360: "Bill of Materials (BOM)", status: "done", priority: "—", effort: "—", notes: "Smart BOM with AI identification" },
|
|
318
|
+
{ cat: "Assembly", f360: "Component patterns", status: "missing", priority: "medium", effort: "1w", notes: "Not implemented" },
|
|
319
|
+
{ cat: "Assembly", f360: "Top-down design (in-context editing)", status: "missing", priority: "high", effort: "4w", notes: "Not implemented — requires assembly context references" },
|
|
320
|
+
|
|
321
|
+
// SIMULATION (12 features)
|
|
322
|
+
{ cat: "Simulation", f360: "Static stress (FEA)", status: "missing", priority: "high", effort: "8w", notes: "Not implemented — needs mesh + solver" },
|
|
323
|
+
{ cat: "Simulation", f360: "Thermal analysis", status: "stub", priority: "medium", effort: "4w", notes: "Thermal heatmap is visual only — no real FEA" },
|
|
324
|
+
{ cat: "Simulation", f360: "Modal frequency analysis", status: "missing", priority: "medium", effort: "4w", notes: "Not implemented" },
|
|
325
|
+
{ cat: "Simulation", f360: "Buckling analysis", status: "missing", priority: "low", effort: "4w", notes: "Not implemented" },
|
|
326
|
+
{ cat: "Simulation", f360: "Nonlinear stress", status: "missing", priority: "low", effort: "6w", notes: "Not implemented — very complex" },
|
|
327
|
+
{ cat: "Simulation", f360: "Shape optimization", status: "missing", priority: "low", effort: "6w", notes: "Not implemented" },
|
|
328
|
+
{ cat: "Simulation", f360: "Event simulation (drop test)", status: "missing", priority: "low", effort: "6w", notes: "Not implemented" },
|
|
329
|
+
{ cat: "Simulation", f360: "CFD (computational fluid dynamics)", status: "missing", priority: "low", effort: "12w", notes: "Not implemented — extremely complex" },
|
|
330
|
+
{ cat: "Simulation", f360: "Mesh generation (tet, hex)", status: "missing", priority: "high", effort: "4w", notes: "Prerequisite for all FEA" },
|
|
331
|
+
{ cat: "Simulation", f360: "Loads & boundary conditions", status: "missing", priority: "high", effort: "2w", notes: "Not implemented" },
|
|
332
|
+
{ cat: "Simulation", f360: "Results visualization (stress/displacement/safety)", status: "missing", priority: "high", effort: "3w", notes: "Not implemented" },
|
|
333
|
+
{ cat: "Simulation", f360: "Generative design (topology optimization)", status: "missing", priority: "medium", effort: "12w", notes: "Not implemented — Fusion 360 extension" },
|
|
334
|
+
|
|
335
|
+
// CAM (10 features)
|
|
336
|
+
{ cat: "CAM", f360: "2D milling (contour, pocket, drill)", status: "missing", priority: "medium", effort: "6w", notes: "Not implemented — Kiri:Moto integration exists as workaround" },
|
|
337
|
+
{ cat: "CAM", f360: "3D milling (adaptive, parallel, scallop)", status: "missing", priority: "medium", effort: "8w", notes: "Not implemented" },
|
|
338
|
+
{ cat: "CAM", f360: "Turning (facing, profiling, threading)", status: "missing", priority: "low", effort: "6w", notes: "Not implemented" },
|
|
339
|
+
{ cat: "CAM", f360: "Multi-axis (4+5 axis milling)", status: "missing", priority: "low", effort: "10w", notes: "Not implemented" },
|
|
340
|
+
{ cat: "CAM", f360: "Toolpath simulation & verification", status: "missing", priority: "medium", effort: "4w", notes: "Not implemented" },
|
|
341
|
+
{ cat: "CAM", f360: "Post-processor (G-code generation)", status: "stub", priority: "medium", effort: "4w", notes: "Basic slicer G-code only — no real CNC post-processor" },
|
|
342
|
+
{ cat: "CAM", f360: "Tool library management", status: "missing", priority: "medium", effort: "2w", notes: "Not implemented" },
|
|
343
|
+
{ cat: "CAM", f360: "Setup / WCS (work coordinate system)", status: "missing", priority: "medium", effort: "2w", notes: "Not implemented" },
|
|
344
|
+
{ cat: "CAM", f360: "Additive (FDM/SLA/SLS toolpaths)", status: "stub", priority: "medium", effort: "4w", notes: "Basic slicer exists; not production-grade" },
|
|
345
|
+
{ cat: "CAM", f360: "Machining extensions (steep/shallow, probe)", status: "missing", priority: "low", effort: "6w", notes: "Fusion 360 extension — not core" },
|
|
346
|
+
|
|
347
|
+
// DRAWING / DOCUMENTATION (10 features)
|
|
348
|
+
{ cat: "Drawing", f360: "Orthographic views (front, top, right, iso)", status: "stub", priority: "critical", effort: "3w", notes: "DXF multi-view export exists; no real drawing workspace" },
|
|
349
|
+
{ cat: "Drawing", f360: "Section view / Detail view", status: "missing", priority: "critical", effort: "2w", notes: "Not implemented" },
|
|
350
|
+
{ cat: "Drawing", f360: "Dimensions (linear, angular, radial, ordinate)", status: "missing", priority: "critical", effort: "3w", notes: "Not implemented — essential for manufacturing" },
|
|
351
|
+
{ cat: "Drawing", f360: "Tolerances (GD&T symbols)", status: "stub", priority: "high", effort: "2w", notes: "GD&T module exists but stub — needs real annotation system" },
|
|
352
|
+
{ cat: "Drawing", f360: "Title block / Templates", status: "missing", priority: "high", effort: "1w", notes: "Not implemented" },
|
|
353
|
+
{ cat: "Drawing", f360: "Balloons / Parts list", status: "missing", priority: "high", effort: "1w", notes: "Not implemented" },
|
|
354
|
+
{ cat: "Drawing", f360: "Surface finish / Weld symbols", status: "missing", priority: "medium", effort: "1w", notes: "Not implemented" },
|
|
355
|
+
{ cat: "Drawing", f360: "Center marks / Centerlines", status: "missing", priority: "medium", effort: "0.5w", notes: "Not implemented" },
|
|
356
|
+
{ cat: "Drawing", f360: "Multi-sheet drawing", status: "missing", priority: "medium", effort: "1w", notes: "Not implemented" },
|
|
357
|
+
{ cat: "Drawing", f360: "Drawing export (PDF, DWG)", status: "partial", priority: "high", effort: "2w", notes: "DXF export done; PDF and DWG missing" },
|
|
358
|
+
|
|
359
|
+
// RENDERING (5 features)
|
|
360
|
+
{ cat: "Rendering", f360: "Appearance library (metal, plastic, wood, etc.)", status: "partial", priority: "medium", effort: "2w", notes: "10 PBR materials in material selector; Fusion has 1000+" },
|
|
361
|
+
{ cat: "Rendering", f360: "Scene environment (HDRI, ground plane)", status: "partial", priority: "medium", effort: "1w", notes: "Grid floor + basic background; no HDRI environments" },
|
|
362
|
+
{ cat: "Rendering", f360: "Ray-traced rendering (cloud render)", status: "missing", priority: "low", effort: "6w", notes: "Three.js is realtime rasterization; no ray tracing" },
|
|
363
|
+
{ cat: "Rendering", f360: "Decals / Textures on faces", status: "missing", priority: "low", effort: "2w", notes: "Not implemented" },
|
|
364
|
+
{ cat: "Rendering", f360: "In-canvas rendering preview", status: "done", priority: "—", effort: "—", notes: "Three.js provides real-time PBR preview" },
|
|
365
|
+
|
|
366
|
+
// ANIMATION (4 features)
|
|
367
|
+
{ cat: "Animation", f360: "Keyframe animation", status: "partial", priority: "medium", effort: "3w", notes: "ExplodeView has assembly animation; no general keyframe system" },
|
|
368
|
+
{ cat: "Animation", f360: "Storyboard / Timeline", status: "partial", priority: "medium", effort: "2w", notes: "Animation sequence exists; limited timeline" },
|
|
369
|
+
{ cat: "Animation", f360: "Camera animation paths", status: "missing", priority: "low", effort: "2w", notes: "Not implemented" },
|
|
370
|
+
{ cat: "Animation", f360: "Video export (MP4)", status: "missing", priority: "medium", effort: "2w", notes: "Screenshot export only; no video recording" },
|
|
371
|
+
|
|
372
|
+
// DATA MANAGEMENT (8 features)
|
|
373
|
+
{ cat: "Data Management", f360: "Cloud storage (Fusion Team)", status: "missing", priority: "high", effort: "6w", notes: "All local — no cloud storage" },
|
|
374
|
+
{ cat: "Data Management", f360: "Version control (save, restore, compare)", status: "stub", priority: "critical", effort: "4w", notes: "Basic undo history; no real version control" },
|
|
375
|
+
{ cat: "Data Management", f360: "Branching / Forking designs", status: "missing", priority: "high", effort: "3w", notes: "Not implemented" },
|
|
376
|
+
{ cat: "Data Management", f360: "Sharing links (view, edit, download)", status: "missing", priority: "high", effort: "2w", notes: "Not implemented" },
|
|
377
|
+
{ cat: "Data Management", f360: "Comments / Markup", status: "partial", priority: "medium", effort: "1w", notes: "Annotation pins exist; no comment threads" },
|
|
378
|
+
{ cat: "Data Management", f360: "Notifications / Activity feed", status: "missing", priority: "low", effort: "2w", notes: "Not implemented" },
|
|
379
|
+
{ cat: "Data Management", f360: "Project / Folder structure", status: "done", priority: "—", effort: "—", notes: "Project browser with folder tree" },
|
|
380
|
+
{ cat: "Data Management", f360: "Data export (archive, bulk)", status: "partial", priority: "medium", effort: "1w", notes: "JSON/STL/OBJ/glTF export; no archive format" },
|
|
381
|
+
|
|
382
|
+
// FILE FORMATS (8 features)
|
|
383
|
+
{ cat: "File Formats", f360: "STEP import/export", status: "stub", priority: "critical", effort: "4w", notes: "Server-side converter exists; browser WASM broken for large files" },
|
|
384
|
+
{ cat: "File Formats", f360: "IGES import", status: "missing", priority: "medium", effort: "2w", notes: "Not implemented" },
|
|
385
|
+
{ cat: "File Formats", f360: "STL import/export", status: "done", priority: "—", effort: "—", notes: "Implemented (ASCII + binary)" },
|
|
386
|
+
{ cat: "File Formats", f360: "OBJ export", status: "done", priority: "—", effort: "—", notes: "Implemented" },
|
|
387
|
+
{ cat: "File Formats", f360: "glTF/GLB export", status: "done", priority: "—", effort: "—", notes: "Implemented" },
|
|
388
|
+
{ cat: "File Formats", f360: "DXF/DWG export", status: "partial", priority: "high", effort: "2w", notes: "DXF done; DWG missing" },
|
|
389
|
+
{ cat: "File Formats", f360: "Inventor (.ipt/.iam) import", status: "done", priority: "—", effort: "—", notes: "Native binary parser — unique to cycleCAD" },
|
|
390
|
+
{ cat: "File Formats", f360: "SolidWorks (.sldprt) import", status: "missing", priority: "medium", effort: "4w", notes: "Not implemented" },
|
|
391
|
+
|
|
392
|
+
// ELECTRONICS / PCB (6 features)
|
|
393
|
+
{ cat: "Electronics", f360: "Schematic editor", status: "missing", priority: "low", effort: "12w", notes: "Not implemented — Fusion 360 acquired Eagle" },
|
|
394
|
+
{ cat: "Electronics", f360: "PCB layout", status: "missing", priority: "low", effort: "12w", notes: "Not implemented" },
|
|
395
|
+
{ cat: "Electronics", f360: "3D PCB preview", status: "missing", priority: "low", effort: "4w", notes: "Not implemented" },
|
|
396
|
+
{ cat: "Electronics", f360: "Component library", status: "missing", priority: "low", effort: "4w", notes: "Not implemented" },
|
|
397
|
+
{ cat: "Electronics", f360: "Design rule check (DRC)", status: "missing", priority: "low", effort: "4w", notes: "Not implemented" },
|
|
398
|
+
{ cat: "Electronics", f360: "Gerber export", status: "missing", priority: "low", effort: "2w", notes: "Not implemented" },
|
|
399
|
+
|
|
400
|
+
// API / SCRIPTING (5 features)
|
|
401
|
+
{ cat: "API / Scripting", f360: "Python scripting API", status: "partial", priority: "medium", effort: "3w", notes: "Agent API is JS JSON-RPC; no Python bindings" },
|
|
402
|
+
{ cat: "API / Scripting", f360: "Add-in / Plugin system", status: "stub", priority: "high", effort: "4w", notes: "Marketplace module exists; no real plugin API" },
|
|
403
|
+
{ cat: "API / Scripting", f360: "Custom command UI (HTML/JS)", status: "done", priority: "—", effort: "—", notes: "Agent API + HTML panels" },
|
|
404
|
+
{ cat: "API / Scripting", f360: "Event handlers (on-change, on-select)", status: "partial", priority: "medium", effort: "2w", notes: "Some events; not comprehensive" },
|
|
405
|
+
{ cat: "API / Scripting", f360: "Script marketplace", status: "partial", priority: "medium", effort: "1w", notes: "Marketplace exists; scripts section TBD" },
|
|
406
|
+
|
|
407
|
+
// MESH (5 features)
|
|
408
|
+
{ cat: "Mesh", f360: "Insert mesh (STL/OBJ)", status: "done", priority: "—", effort: "—", notes: "STL import via reverse-engineer.js" },
|
|
409
|
+
{ cat: "Mesh", f360: "Reduce mesh / Remesh", status: "missing", priority: "medium", effort: "3w", notes: "Not implemented" },
|
|
410
|
+
{ cat: "Mesh", f360: "Mesh to B-Rep conversion", status: "missing", priority: "high", effort: "6w", notes: "Not implemented — very complex" },
|
|
411
|
+
{ cat: "Mesh", f360: "Mesh sectioning / Plane cut", status: "done", priority: "—", effort: "—", notes: "Section cut in ExplodeView" },
|
|
412
|
+
{ cat: "Mesh", f360: "Mesh repair (fill holes, fix normals)", status: "missing", priority: "medium", effort: "3w", notes: "Not implemented" },
|
|
413
|
+
|
|
414
|
+
// COLLABORATION (6 features)
|
|
415
|
+
{ cat: "Collaboration", f360: "Real-time multi-user editing", status: "missing", priority: "high", effort: "8w", notes: "Not implemented — planned Phase C" },
|
|
416
|
+
{ cat: "Collaboration", f360: "Design review (view-only sharing)", status: "missing", priority: "high", effort: "2w", notes: "Not implemented" },
|
|
417
|
+
{ cat: "Collaboration", f360: "Markup / Redline tools", status: "partial", priority: "medium", effort: "2w", notes: "Annotation pins exist; no markup mode" },
|
|
418
|
+
{ cat: "Collaboration", f360: "Access control (viewer, editor, admin)", status: "missing", priority: "medium", effort: "3w", notes: "Not implemented" },
|
|
419
|
+
{ cat: "Collaboration", f360: "Embed viewer (iframe/widget)", status: "partial", priority: "medium", effort: "1w", notes: "Share & embed code generator exists" },
|
|
420
|
+
{ cat: "Collaboration", f360: "Multi-user cursor / presence", status: "stub", priority: "medium", effort: "2w", notes: "Demo collaboration cursors exist" },
|
|
421
|
+
|
|
422
|
+
// UI / UX (8 features)
|
|
423
|
+
{ cat: "UI / UX", f360: "ViewCube (interactive orientation)", status: "done", priority: "—", effort: "—", notes: "Implemented with touch support" },
|
|
424
|
+
{ cat: "UI / UX", f360: "Feature timeline / History", status: "partial", priority: "critical", effort: "4w", notes: "Basic history; needs real parametric rebuild" },
|
|
425
|
+
{ cat: "UI / UX", f360: "Selection filters (face, edge, vertex, body)", status: "partial", priority: "high", effort: "2w", notes: "Part selection done; no edge/vertex/face selection" },
|
|
426
|
+
{ cat: "UI / UX", f360: "Measure tool (distance, angle, area)", status: "done", priority: "—", effort: "—", notes: "3-point measurement implemented" },
|
|
427
|
+
{ cat: "UI / UX", f360: "Section analysis (real-time cross-section)", status: "done", priority: "—", effort: "—", notes: "Section cut with X/Y/Z axis" },
|
|
428
|
+
{ cat: "UI / UX", f360: "Appearance override per component", status: "partial", priority: "medium", effort: "1w", notes: "Material selector per part; no per-face appearance" },
|
|
429
|
+
{ cat: "UI / UX", f360: "Keyboard shortcuts (customizable)", status: "done", priority: "—", effort: "—", notes: "25+ shortcuts, ? for panel" },
|
|
430
|
+
{ cat: "UI / UX", f360: "Multi-language support", status: "done", priority: "—", effort: "—", notes: "EN/DE/FR/ES/IT/NL" },
|
|
431
|
+
|
|
432
|
+
// INSPECTION (4 features)
|
|
433
|
+
{ cat: "Inspection", f360: "Mass properties (volume, COG, inertia)", status: "partial", priority: "high", effort: "2w", notes: "Weight estimator exists; missing real volume calc and COG" },
|
|
434
|
+
{ cat: "Inspection", f360: "Interference detection", status: "stub", priority: "high", effort: "2w", notes: "BBox clearance only — not geometric intersection" },
|
|
435
|
+
{ cat: "Inspection", f360: "Curvature analysis", status: "missing", priority: "low", effort: "3w", notes: "Not implemented" },
|
|
436
|
+
{ cat: "Inspection", f360: "Draft analysis (mold design)", status: "missing", priority: "low", effort: "2w", notes: "Not implemented" },
|
|
437
|
+
];
|
|
438
|
+
|
|
439
|
+
// ========== ROADMAP DATA ==========
|
|
440
|
+
const roadmap = [
|
|
441
|
+
{ phase: "A", name: "Foundation (Q2 2026)", desc: "B-Rep kernel + real geometry operations. This unlocks everything else.", cls: "phase-a", items: [
|
|
442
|
+
"Integrate OpenCascade.js WASM as B-Rep kernel",
|
|
443
|
+
"Real fillet/chamfer on solid edges",
|
|
444
|
+
"Real boolean operations (union/cut/intersect)",
|
|
445
|
+
"STEP import/export via WASM or server",
|
|
446
|
+
"Sketch-on-face (place sketch on any model face)",
|
|
447
|
+
"Trim/Extend in sketch",
|
|
448
|
+
"Sketch dimensions (driving + driven)",
|
|
449
|
+
"Parametric feature rebuild (edit-and-rebuild pipeline)",
|
|
450
|
+
]},
|
|
451
|
+
{ phase: "B", name: "Drawing & Documentation (Q3 2026)", desc: "Manufacturing drawings — the #1 most-requested missing feature.", cls: "phase-b", items: [
|
|
452
|
+
"2D Drawing workspace with orthographic views",
|
|
453
|
+
"Dimensions (linear, angular, radial, ordinate)",
|
|
454
|
+
"Section view / Detail view",
|
|
455
|
+
"GD&T symbols and tolerances",
|
|
456
|
+
"Title blocks and templates",
|
|
457
|
+
"Balloons and parts lists",
|
|
458
|
+
"PDF and DWG export",
|
|
459
|
+
"Surface modeling basics (extrude, revolve, trim surfaces)",
|
|
460
|
+
]},
|
|
461
|
+
{ phase: "C", name: "Simulation & Collaboration (Q4 2026)", desc: "Stress analysis and multi-user editing — pro features.", cls: "phase-c", items: [
|
|
462
|
+
"FEA mesh generation (tetrahedral)",
|
|
463
|
+
"Static stress analysis (linear elastic)",
|
|
464
|
+
"Thermal analysis",
|
|
465
|
+
"Results visualization (stress/displacement/safety factor)",
|
|
466
|
+
"Real-time collaboration (WebRTC/CRDT)",
|
|
467
|
+
"Version control with branching and compare",
|
|
468
|
+
"Sharing links (view/edit)",
|
|
469
|
+
"Assembly joint constraints with motion",
|
|
470
|
+
]},
|
|
471
|
+
{ phase: "D", name: "CAM & Advanced (Q1 2027)", desc: "Design-to-manufacturing pipeline and advanced features.", cls: "phase-d", items: [
|
|
472
|
+
"2D/2.5D milling toolpaths",
|
|
473
|
+
"3D adaptive milling",
|
|
474
|
+
"Post-processor / G-code generation",
|
|
475
|
+
"Tool library",
|
|
476
|
+
"Plugin API (JS-based custom features)",
|
|
477
|
+
"Spline tool in sketcher",
|
|
478
|
+
"Video export (MP4 animation recording)",
|
|
479
|
+
"Mesh-to-B-Rep conversion",
|
|
480
|
+
]},
|
|
481
|
+
];
|
|
482
|
+
|
|
483
|
+
// ========== RENDERING ==========
|
|
484
|
+
function renderStats() {
|
|
485
|
+
const done = features.filter(f => f.status === 'done').length;
|
|
486
|
+
const partial = features.filter(f => f.status === 'partial').length;
|
|
487
|
+
const stub = features.filter(f => f.status === 'stub').length;
|
|
488
|
+
const missing = features.filter(f => f.status === 'missing').length;
|
|
489
|
+
const total = features.length;
|
|
490
|
+
|
|
491
|
+
document.getElementById('stats-bar').innerHTML = `
|
|
492
|
+
<div class="stat blue"><div class="num">${total}</div><div class="label">Total Fusion 360 Features</div></div>
|
|
493
|
+
<div class="stat green"><div class="num">${done}</div><div class="label">Fully Done</div></div>
|
|
494
|
+
<div class="stat yellow"><div class="num">${partial}</div><div class="label">Partial</div></div>
|
|
495
|
+
<div class="stat" style="color:var(--orange)"><div class="num" style="color:var(--orange)">${stub}</div><div class="label">Stub Only</div></div>
|
|
496
|
+
<div class="stat red"><div class="num">${missing}</div><div class="label">Missing</div></div>
|
|
497
|
+
<div class="stat purple"><div class="num">${Math.round((done + partial * 0.5) / total * 100)}%</div><div class="label">Weighted Coverage</div></div>
|
|
498
|
+
`;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
function badgeHTML(status) {
|
|
502
|
+
const map = { done: 'Done', partial: 'Partial', stub: 'Stub', missing: 'Missing' };
|
|
503
|
+
return `<span class="badge badge-${status}">${map[status]}</span>`;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
function priorityHTML(p) {
|
|
507
|
+
if (p === '—') return '<span class="priority" style="color:var(--muted)">—</span>';
|
|
508
|
+
return `<span class="priority p-${p}">${p.charAt(0).toUpperCase() + p.slice(1)}</span>`;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
function renderMatrix(filter = 'all', search = '') {
|
|
512
|
+
const tbody = document.getElementById('matrix-body');
|
|
513
|
+
let html = '';
|
|
514
|
+
let lastCat = '';
|
|
515
|
+
const lc = search.toLowerCase();
|
|
516
|
+
|
|
517
|
+
for (const f of features) {
|
|
518
|
+
if (filter !== 'all' && f.status !== filter) continue;
|
|
519
|
+
if (lc && !f.f360.toLowerCase().includes(lc) && !f.cat.toLowerCase().includes(lc) && !f.notes.toLowerCase().includes(lc)) continue;
|
|
520
|
+
|
|
521
|
+
const catCell = f.cat !== lastCat ? `<td class="cat" rowspan="1">${f.cat}</td>` : '<td class="cat" style="border:none;"></td>';
|
|
522
|
+
lastCat = f.cat;
|
|
523
|
+
|
|
524
|
+
html += `<tr>
|
|
525
|
+
${catCell}
|
|
526
|
+
<td>${f.f360}</td>
|
|
527
|
+
<td>${badgeHTML(f.status)}</td>
|
|
528
|
+
<td>${priorityHTML(f.priority)}</td>
|
|
529
|
+
<td><span class="effort">${f.effort}</span></td>
|
|
530
|
+
<td style="color:var(--muted);font-size:0.8rem">${f.notes}</td>
|
|
531
|
+
</tr>`;
|
|
532
|
+
}
|
|
533
|
+
tbody.innerHTML = html;
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
function renderCritical() {
|
|
537
|
+
const critical = features.filter(f => (f.status === 'missing' || f.status === 'stub') && (f.priority === 'critical' || f.priority === 'high'));
|
|
538
|
+
const el = document.getElementById('critical-list');
|
|
539
|
+
let html = '';
|
|
540
|
+
|
|
541
|
+
const cats = [...new Set(critical.map(f => f.cat))];
|
|
542
|
+
for (const cat of cats) {
|
|
543
|
+
const items = critical.filter(f => f.cat === cat);
|
|
544
|
+
html += `<div class="card" style="margin-bottom:12px;">
|
|
545
|
+
<h3 style="color:var(--blue);font-size:0.9rem;text-transform:uppercase;letter-spacing:1px;">${cat} (${items.length} gaps)</h3>
|
|
546
|
+
<ul class="items">${items.map(f => `<li><strong style="color:var(--text)">${f.f360}</strong> — ${badgeHTML(f.status)} ${priorityHTML(f.priority)} <span class="effort">${f.effort}</span><br><span style="font-size:0.8rem">${f.notes}</span></li>`).join('')}</ul>
|
|
547
|
+
</div>`;
|
|
548
|
+
}
|
|
549
|
+
el.innerHTML = html;
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
function renderRoadmap() {
|
|
553
|
+
const el = document.getElementById('roadmap-phases');
|
|
554
|
+
el.innerHTML = roadmap.map(r => `
|
|
555
|
+
<div class="phase ${r.cls}">
|
|
556
|
+
<div class="phase-header">
|
|
557
|
+
<span class="phase-badge">Phase ${r.phase}</span>
|
|
558
|
+
<h3>${r.name}</h3>
|
|
559
|
+
</div>
|
|
560
|
+
<p>${r.desc}</p>
|
|
561
|
+
<ul>${r.items.map(i => `<li>${i}</li>`).join('')}</ul>
|
|
562
|
+
</div>
|
|
563
|
+
`).join('');
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
function renderCoverage() {
|
|
567
|
+
const el = document.getElementById('coverage-chart');
|
|
568
|
+
const cats = [...new Set(features.map(f => f.cat))];
|
|
569
|
+
let html = '';
|
|
570
|
+
|
|
571
|
+
for (const cat of cats) {
|
|
572
|
+
const items = features.filter(f => f.cat === cat);
|
|
573
|
+
const done = items.filter(f => f.status === 'done').length;
|
|
574
|
+
const partial = items.filter(f => f.status === 'partial').length;
|
|
575
|
+
const stub = items.filter(f => f.status === 'stub').length;
|
|
576
|
+
const missing = items.filter(f => f.status === 'missing').length;
|
|
577
|
+
const total = items.length;
|
|
578
|
+
|
|
579
|
+
const dp = Math.round(done / total * 100);
|
|
580
|
+
const pp = Math.round(partial / total * 100);
|
|
581
|
+
const sp = Math.round(stub / total * 100);
|
|
582
|
+
const mp = Math.round(missing / total * 100);
|
|
583
|
+
|
|
584
|
+
html += `<div class="bar-row">
|
|
585
|
+
<div class="bar-label">${cat}</div>
|
|
586
|
+
<div class="bar-track">
|
|
587
|
+
${dp > 0 ? `<div class="bar-fill bar-done" style="width:${dp}%">${dp > 8 ? dp + '%' : ''}</div>` : ''}
|
|
588
|
+
${pp > 0 ? `<div class="bar-fill bar-partial" style="width:${pp}%">${pp > 8 ? pp + '%' : ''}</div>` : ''}
|
|
589
|
+
${sp > 0 ? `<div class="bar-fill bar-stub" style="width:${sp}%">${sp > 8 ? sp + '%' : ''}</div>` : ''}
|
|
590
|
+
${mp > 0 ? `<div class="bar-fill bar-missing" style="width:${mp}%">${mp > 8 ? mp + '%' : ''}</div>` : ''}
|
|
591
|
+
</div>
|
|
592
|
+
</div>`;
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
html += `<div style="display:flex;gap:16px;margin-top:16px;justify-content:center;">
|
|
596
|
+
<span><span class="bar-fill bar-done" style="display:inline-block;width:14px;height:14px;border-radius:3px;vertical-align:middle;"></span> Done</span>
|
|
597
|
+
<span><span class="bar-fill bar-partial" style="display:inline-block;width:14px;height:14px;border-radius:3px;vertical-align:middle;"></span> Partial</span>
|
|
598
|
+
<span><span class="bar-fill bar-stub" style="display:inline-block;width:14px;height:14px;border-radius:3px;vertical-align:middle;"></span> Stub</span>
|
|
599
|
+
<span><span class="bar-fill bar-missing" style="display:inline-block;width:14px;height:14px;border-radius:3px;vertical-align:middle;"></span> Missing</span>
|
|
600
|
+
</div>`;
|
|
601
|
+
|
|
602
|
+
el.innerHTML = html;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
// ========== EVENTS ==========
|
|
606
|
+
document.getElementById('tabs').addEventListener('click', e => {
|
|
607
|
+
const tab = e.target.closest('.tab');
|
|
608
|
+
if (!tab) return;
|
|
609
|
+
document.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));
|
|
610
|
+
document.querySelectorAll('.tab-panel').forEach(p => p.classList.remove('active'));
|
|
611
|
+
tab.classList.add('active');
|
|
612
|
+
document.getElementById('panel-' + tab.dataset.tab).classList.add('active');
|
|
613
|
+
});
|
|
614
|
+
|
|
615
|
+
document.getElementById('filter-bar').addEventListener('click', e => {
|
|
616
|
+
const btn = e.target.closest('.filter-btn');
|
|
617
|
+
if (!btn) return;
|
|
618
|
+
document.querySelectorAll('.filter-btn').forEach(b => b.classList.remove('active'));
|
|
619
|
+
btn.classList.add('active');
|
|
620
|
+
renderMatrix(btn.dataset.filter, document.getElementById('matrix-search').value);
|
|
621
|
+
});
|
|
622
|
+
|
|
623
|
+
document.getElementById('matrix-search').addEventListener('input', e => {
|
|
624
|
+
const activeFilter = document.querySelector('.filter-btn.active').dataset.filter;
|
|
625
|
+
renderMatrix(activeFilter, e.target.value);
|
|
626
|
+
});
|
|
627
|
+
|
|
628
|
+
// ========== INIT ==========
|
|
629
|
+
renderStats();
|
|
630
|
+
renderMatrix();
|
|
631
|
+
renderCritical();
|
|
632
|
+
renderRoadmap();
|
|
633
|
+
renderCoverage();
|
|
634
|
+
</script>
|
|
635
|
+
</body>
|
|
636
|
+
</html>
|