cyclecad 1.3.0 → 1.3.1
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 +354 -35
- package/app/index.html +32 -32
- package/app/js/ai-chat.js +3 -0
- package/app/js/cad-vr.js +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,58 +1,377 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
|
+
<h1>🔧 cycleCAD</h1>
|
|
3
|
+
<p><strong>The open-source browser CAD that understands English.</strong></p>
|
|
4
|
+
<p>Type "<code>motor mount plate with 4 bolt holes</code>" → get a real 3D solid in 5 seconds. No install. No login. Free forever.</p>
|
|
2
5
|
|
|
3
|
-
|
|
6
|
+
[](https://www.npmjs.com/package/cyclecad)
|
|
7
|
+
[](https://github.com/vvlars-cmd/cyclecad)
|
|
8
|
+
[](https://opensource.org/licenses/MIT)
|
|
9
|
+
[](https://github.com/vvlars-cmd/cyclecad)
|
|
10
|
+
[](https://discord.gg/cyclecad)
|
|
4
11
|
|
|
5
|
-
|
|
12
|
+
![Demo GIF - Text-to-CAD creating a part with holes and fillets]
|
|
13
|
+
[DEMO GIF PLACEHOLDER: User types "50mm cylinder with 20mm hole and 5mm fillet" → 3D part appears with real geometry]
|
|
6
14
|
|
|
7
|
-
[
|
|
8
|
-
|
|
15
|
+
[**Try it now →**](https://cyclecad.com/app/) • [Documentation](https://cyclecad.com/docs) • [GitHub](https://github.com/vvlars-cmd/cyclecad)
|
|
16
|
+
</div>
|
|
9
17
|
|
|
10
|
-
|
|
18
|
+
---
|
|
11
19
|
|
|
12
|
-
##
|
|
20
|
+
## ✨ What makes cycleCAD different
|
|
13
21
|
|
|
14
|
-
|
|
15
|
-
- **Native Inventor parsing** — Open Autodesk Inventor `.ipt` and `.iam` files directly in the browser
|
|
16
|
-
- **AI-powered tools** — Part identification, smart natural language search, automated assembly instructions, integrated AI chatbot
|
|
17
|
-
- **Maintenance intelligence** — Heatmaps, wear timelines, service mode, smart BOM generation with estimated pricing
|
|
18
|
-
- **40+ built-in tools** — Measurement, section cuts, annotations, hero shots, QR codes, 3D print slicer, and more
|
|
19
|
-
- **Export everything** — STL, OBJ, GLTF, PLY per part. CSV/HTML reports. Technical report generation
|
|
20
|
-
- **6 languages** — English, German, French, Spanish, Italian, Dutch
|
|
21
|
-
- **McMaster-Carr integration** — Direct part sourcing links for identified components
|
|
22
|
-
- **Zero dependencies** — Three.js r170 via CDN, no build step required
|
|
22
|
+
Traditional CAD apps make you click 50 times to create a simple part. cycleCAD understands what you want to build.
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
| Feature | **cycleCAD** | OnShape | Fusion 360 | FreeCAD |
|
|
25
|
+
|---------|:---:|:---:|:---:|:---:|
|
|
26
|
+
| **Browser-native** | ✅ Zero install | ❌ Cloud | ❌ Desktop | ❌ Desktop |
|
|
27
|
+
| **Free forever** | ✅ MIT OSS | ❌ $1,500/yr | ❌ $545/yr | ✅ |
|
|
28
|
+
| **Text-to-CAD** | ✅ "Draw a gear" | ❌ | ❌ | ❌ |
|
|
29
|
+
| **AI-powered** | ✅ Built-in | ❌ | ❌ | ❌ |
|
|
30
|
+
| **Real-time multiplayer** | ✅ WebRTC P2P | ✅ (paid) | ❌ | ❌ |
|
|
31
|
+
| **Open Inventor files** | ✅ Native .ipt/.iam | ❌ | ✅ | ❌ |
|
|
32
|
+
| **B-rep kernel** | ✅ OpenCascade.js | ✅ | ✅ | ✅ |
|
|
33
|
+
| **STEP import/export** | ✅ | ✅ | ✅ | ✅ |
|
|
34
|
+
| **Mobile viewer** | ✅ Touch-native | ❌ | ❌ | ❌ |
|
|
35
|
+
| **Open source** | ✅ MIT | ❌ | ❌ | ✅ |
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 🚀 Quick Start
|
|
40
|
+
|
|
41
|
+
### **Zero-setup browser version (30 seconds)**
|
|
42
|
+
Just open **[cyclecad.com/app/](https://cyclecad.com/app/)** in your browser. Works offline. No account needed.
|
|
43
|
+
|
|
44
|
+
### **Text-to-CAD in action**
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
User: "create a motor mount plate 100mm wide, 80mm tall"
|
|
48
|
+
cycleCAD: [Generates rectangular prism with exact dimensions]
|
|
49
|
+
|
|
50
|
+
User: "add 4 bolt holes in corners, 10mm diameter"
|
|
51
|
+
cycleCAD: [Creates 4 cylindrical holes positioned at corners]
|
|
52
|
+
|
|
53
|
+
User: "fillet all edges 2mm"
|
|
54
|
+
cycleCAD: [Rounds all sharp edges. Part is manufacturable in 5 seconds]
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### **Install locally**
|
|
25
58
|
|
|
26
59
|
```bash
|
|
27
|
-
|
|
60
|
+
# Via npm
|
|
61
|
+
npm install -g cyclecad
|
|
62
|
+
cyclecad # Starts local dev server on :3000
|
|
63
|
+
|
|
64
|
+
# Or clone and run
|
|
65
|
+
git clone https://github.com/vvlars-cmd/cyclecad.git
|
|
66
|
+
cd cyclecad
|
|
67
|
+
npm install
|
|
68
|
+
npm run dev
|
|
28
69
|
```
|
|
29
70
|
|
|
30
|
-
|
|
71
|
+
### **Import an existing CAD file**
|
|
72
|
+
|
|
73
|
+
cycleCAD can open files from Autodesk Inventor, STEP, STL, and more:
|
|
74
|
+
|
|
75
|
+
```javascript
|
|
76
|
+
// In the app UI: File → Import
|
|
77
|
+
// Drop your .ipt, .iam, .step, or .stl file
|
|
78
|
+
// cycleCAD instantly renders it with all features editable
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 🤖 Text-to-CAD Examples
|
|
84
|
+
|
|
85
|
+
### Example 1: Bracket Design
|
|
86
|
+
```
|
|
87
|
+
"L-bracket with 50mm vertical and 75mm horizontal arms, 10mm thickness"
|
|
88
|
+
→ Real 3D solid with proper corners
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Example 2: Fastener Hole Pattern
|
|
92
|
+
```
|
|
93
|
+
"circular hole pattern: 6 holes M5 (5mm) evenly spaced on 40mm bolt circle"
|
|
94
|
+
→ Perfect DIN 912 hex socket cap screw mounting
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Example 3: Mechanical Part
|
|
98
|
+
```
|
|
99
|
+
"hexagonal shaft, 20mm across flats, 150mm long, with M10 thread on end"
|
|
100
|
+
→ CAM-ready geometry ready to machine
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
The AI understands:
|
|
104
|
+
- **Geometry**: cylinders, boxes, spheres, wedges, toruses, helixes, springs
|
|
105
|
+
- **Features**: holes, fillets, chamfers, pockets, bosses, ribs
|
|
106
|
+
- **Patterns**: linear, circular, mirror
|
|
107
|
+
- **Materials**: steel, aluminum, plastic, titanium, brass
|
|
108
|
+
- **Operations**: boolean (union/cut/intersect), draft angles, shell thickness
|
|
109
|
+
- **Constraints**: parallelism, perpendicularity, concentricity, symmetry
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 🔩 Parts Library & Marketplace
|
|
114
|
+
|
|
115
|
+
### Built-in Standard Parts
|
|
116
|
+
Get DIN/ISO fasteners, bearings, motors, and commercial off-the-shelf (COTS) parts instantly:
|
|
31
117
|
|
|
32
118
|
```bash
|
|
33
|
-
|
|
34
|
-
|
|
119
|
+
cyclecad install bearing-6205
|
|
120
|
+
# → NSK 6205 deep groove ball bearing (STEP file downloads, adds to library)
|
|
121
|
+
|
|
122
|
+
cyclecad install fastener-M5-hex-socket
|
|
123
|
+
# → DIN 912 M5 × 25mm hex socket cap screw with proper geometry
|
|
124
|
+
|
|
125
|
+
cyclecad install motor-nema23
|
|
126
|
+
# → NEMA 23 stepper motor (full 3D model, cutsheet, mounting pattern)
|
|
35
127
|
```
|
|
36
128
|
|
|
37
|
-
|
|
129
|
+
### Community Marketplace
|
|
130
|
+
- **Purchase designs** — Browse 10,000+ mechanical parts and assemblies
|
|
131
|
+
- **Sell your designs** — Publish a part, earn royalties on each download
|
|
132
|
+
- **Parameterized models** — Upload a template, users customize dimensions
|
|
133
|
+
- **CAM-ready exports** — Designs come with DXF/DWG for manufacturing
|
|
134
|
+
|
|
135
|
+
Examples in marketplace:
|
|
136
|
+
- Bearing housings (20+ variants, searchable by bore size)
|
|
137
|
+
- Motor mounts (parameterized for different frame sizes)
|
|
138
|
+
- Cable routing clips (customize bend radius + tab thickness)
|
|
139
|
+
- Enclosure brackets (pick material, cost is estimated per variant)
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## 👥 Real-time Collaboration
|
|
144
|
+
|
|
145
|
+
Work on the same model **with teammates simultaneously**. No server signup needed.
|
|
146
|
+
|
|
147
|
+
```javascript
|
|
148
|
+
// Host creates a room
|
|
149
|
+
const roomCode = await cyclecad.createRoom(); // Returns "ABC123"
|
|
150
|
+
// Share the code with teammates
|
|
151
|
+
|
|
152
|
+
// Teammates join
|
|
153
|
+
await cyclecad.joinRoom("ABC123");
|
|
154
|
+
|
|
155
|
+
// Now when Host creates a hole, Teammate sees it instantly
|
|
156
|
+
// See each other's 3D cursors in real-time
|
|
157
|
+
// Chat in-viewport while designing
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**How it works:**
|
|
161
|
+
- **Peer-to-peer**: Uses WebRTC for low-latency direct connections (no server overhead)
|
|
162
|
+
- **Conflict-free**: Last-write-wins CRDT ensures edits never conflict
|
|
163
|
+
- **Browser-native**: Works in tabs, doesn't require anything special
|
|
164
|
+
|
|
165
|
+
**Perfect for:**
|
|
166
|
+
- Remote design reviews (see collaborator's cursor, watch live edits)
|
|
167
|
+
- Distributed teams (8am in Berlin, 4pm in Tokyo, same part, live sync)
|
|
168
|
+
- Teaching (instructor + students all editing one model)
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## 📐 Full Feature List
|
|
173
|
+
|
|
174
|
+
### **Core CAD Modeling**
|
|
175
|
+
- ✅ **Sketcher** — 2D constraints (coincident, parallel, perpendicular, tangent, distance, angle)
|
|
176
|
+
- ✅ **Extrude/Revolve** — Parametric profile-based solids
|
|
177
|
+
- ✅ **Boolean ops** — Union, cut, intersect with real CSG
|
|
178
|
+
- ✅ **Fillet/Chamfer** — Edge rounding and bevels
|
|
179
|
+
- ✅ **Sweep/Loft** — Profile along path, between profiles
|
|
180
|
+
- ✅ **Shell** — Hollow out solids with wall thickness
|
|
181
|
+
- ✅ **Patterns** — Linear, circular, mirror arrays
|
|
182
|
+
- ✅ **Draft** — Taper for molding/casting
|
|
183
|
+
- ✅ **Threads** — ISO/UNC/Metric with proper helix
|
|
184
|
+
|
|
185
|
+
### **Analysis & Validation**
|
|
186
|
+
- ✅ **Measurement** — Distance, angle, radius, perimeter, area
|
|
187
|
+
- ✅ **Mass properties** — Weight, volume, center of gravity
|
|
188
|
+
- ✅ **DFM analysis** — Design for manufacturability warnings
|
|
189
|
+
- ✅ **Stress preview** — Heatmap of stress concentration
|
|
190
|
+
- ✅ **Clearance check** — Collision detection between parts
|
|
191
|
+
- ✅ **Assembly validator** — Check for hidden parts, overconstrained joints
|
|
192
|
+
|
|
193
|
+
### **AI & Automation**
|
|
194
|
+
- ✅ **Text-to-CAD** — Natural language → 3D geometry
|
|
195
|
+
- ✅ **Part identification** — Upload photo, AI identifies what you built
|
|
196
|
+
- ✅ **Cost estimation** — Calculates manufacturing cost (CNC, 3D print, injection)
|
|
197
|
+
- ✅ **Rebuild guides** — AI writes step-by-step instructions to recreate any part
|
|
198
|
+
- ✅ **Maintenance schedule** — Predicts part wear, suggests replacements
|
|
199
|
+
- ✅ **Smart BOM** — Bill of materials with vendor links, lead times, pricing
|
|
200
|
+
|
|
201
|
+
### **Integration & Output**
|
|
202
|
+
- ✅ **Export** — STL (ASCII/binary), OBJ, glTF 2.0, STEP, DXF, DWG, PDF
|
|
203
|
+
- ✅ **3D Print** — Automatic STL export + slicer integration (Prusaslicer, Cura)
|
|
204
|
+
- ✅ **CAM** — DXF export for CNC + G-code preview
|
|
205
|
+
- ✅ **Assembly drawing** — Auto-generates engineering drawings (ISO/ASME)
|
|
206
|
+
- ✅ **BOM export** — CSV, HTML, with pricing from McMaster-Carr
|
|
207
|
+
- ✅ **Datasheets** — PDF cutsheets for all parts
|
|
208
|
+
|
|
209
|
+
### **Platform**
|
|
210
|
+
- ✅ **Browser-native** — No install, runs anywhere (Chrome, Safari, Firefox, Edge)
|
|
211
|
+
- ✅ **Offline mode** — Design works without internet (IndexedDB storage)
|
|
212
|
+
- ✅ **Mobile viewer** — View and annotate on iPad / Android tablets
|
|
213
|
+
- ✅ **Version control** — Git-style history with visual diffs
|
|
214
|
+
- ✅ **Share/embed** — Generate shareable links, embed 3D viewer in docs
|
|
215
|
+
- ✅ **Keyboard-first** — 50+ shortcuts, full REPL for power users
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## 🏗️ Architecture
|
|
220
|
+
|
|
221
|
+
```
|
|
222
|
+
┌────────────────────────────────────────────────────────┐
|
|
223
|
+
│ cycleCAD Runtime (Browser) │
|
|
224
|
+
├────────────────────────────────────────────────────────┤
|
|
225
|
+
│ │
|
|
226
|
+
│ ┌──────────────────────────────────────────────────┐ │
|
|
227
|
+
│ │ Sketch Engine (2D constraints solver) │ │
|
|
228
|
+
│ │ ↓ │ │
|
|
229
|
+
│ │ CAD Operations (extrude, revolve, boolean) │ │
|
|
230
|
+
│ │ ↓ │ │
|
|
231
|
+
│ │ B-Rep Kernel (OpenCascade.js WASM) │ │
|
|
232
|
+
│ │ ↓ │ │
|
|
233
|
+
│ │ Three.js Renderer (WebGL viewport) │ │
|
|
234
|
+
│ └──────────────────────────────────────────────────┘ │
|
|
235
|
+
│ │
|
|
236
|
+
│ ┌──────────────┐ ┌──────────────┐ ┌────────────┐ │
|
|
237
|
+
│ │ AI Copilot │ │ Real-time │ │ Parts │ │
|
|
238
|
+
│ │ (Gemini + │ │ Collab │ │ Marketplace│ │
|
|
239
|
+
│ │ Groq) │ │ (WebRTC CRDT)│ │ │ │
|
|
240
|
+
│ └──────────────┘ └──────────────┘ └────────────┘ │
|
|
241
|
+
│ │
|
|
242
|
+
│ Storage: IndexedDB (offline), GitHub (version ctrl) │
|
|
243
|
+
└────────────────────────────────────────────────────────┘
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Tech Stack:**
|
|
247
|
+
- **Three.js r170** — WebGL rendering
|
|
248
|
+
- **OpenCascade.js** — WASM-based B-Rep kernel for real solid modeling
|
|
249
|
+
- **Constraint solver** — Iterative relaxation (up to 100 constraints/sketch)
|
|
250
|
+
- **Gemini Flash + Groq Llama** — AI part identification and copilot
|
|
251
|
+
- **WebRTC DataChannel** — Peer-to-peer multiplayer sync
|
|
252
|
+
- **ES Modules** — Zero-dependency, runs on CDN with import maps
|
|
253
|
+
|
|
254
|
+
**Zero dependencies** — Core app is ~22KB gzipped. Loads Three.js, OpenCascade, AI models on demand.
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## 🎯 Use Cases
|
|
259
|
+
|
|
260
|
+
### **Design Engineers**
|
|
261
|
+
"I need to iterate on this pump housing. Give me real-time feedback as I sketch changes."
|
|
262
|
+
→ Use text-to-CAD to prototype in minutes. AI validates manufacturability. Export to CAM.
|
|
263
|
+
|
|
264
|
+
### **Makers & Hobbyists**
|
|
265
|
+
"I want to design a custom enclosure for my Arduino project."
|
|
266
|
+
→ Sketch dimensions in text. AI generates the part. 3D print it.
|
|
267
|
+
|
|
268
|
+
### **Manufacturing**
|
|
269
|
+
"Our assembly documentation is outdated. Rebuild it from the CAD model."
|
|
270
|
+
→ AI writes step-by-step rebuild guide. Export as PDF or HTML.
|
|
271
|
+
|
|
272
|
+
### **Remote Teams**
|
|
273
|
+
"Design review: I'm in Berlin, designer is in Tokyo. We need to collaborate live."
|
|
274
|
+
→ Create a room code. Both open the same part. See each other's cursors. Chat inline.
|
|
275
|
+
|
|
276
|
+
### **Open Source Hardware**
|
|
277
|
+
"We want to share our mechanical designs with the community."
|
|
278
|
+
→ Upload to cycleCAD marketplace. Community can remix, cost-optimize, manufacture variants.
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## 📊 Performance
|
|
283
|
+
|
|
284
|
+
- **Viewport** — 60 FPS @ 4K on modern hardware
|
|
285
|
+
- **STEP import** — 100MB file in <10s (server conversion available)
|
|
286
|
+
- **Text-to-CAD** — 2-5s generation + validation
|
|
287
|
+
- **Real-time collab** — <50ms sync latency (WebRTC P2P)
|
|
288
|
+
- **Mobile** — Full-featured on iPad/Android, touch controls
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## 🤝 Contributing
|
|
293
|
+
|
|
294
|
+
**Want to add a feature?** Start here:
|
|
295
|
+
|
|
296
|
+
1. Fork the repo
|
|
297
|
+
2. Pick an issue labeled `good-first-issue` or `help-wanted`
|
|
298
|
+
3. Create a feature branch: `git checkout -b feat/awesome-thing`
|
|
299
|
+
4. Make your changes (see [CONTRIBUTING.md](./CONTRIBUTING.md) for code style)
|
|
300
|
+
5. Test in the browser: `npm run dev`
|
|
301
|
+
6. Open a PR with before/after screenshots
|
|
302
|
+
|
|
303
|
+
**Areas we need help:**
|
|
304
|
+
- 🎨 UI/UX improvements (design language modernization)
|
|
305
|
+
- 🤖 AI features (improve text-to-CAD, add design review)
|
|
306
|
+
- 📱 Mobile (improve touch interactions, add mobile sketcher)
|
|
307
|
+
- 🧪 Testing (add more unit + integration tests)
|
|
308
|
+
- 📚 Documentation (examples, tutorials, API docs)
|
|
309
|
+
- 🌍 Translations (add more languages, improve existing ones)
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## 💬 Community
|
|
314
|
+
|
|
315
|
+
- **Discord** — [Join 5,000+ makers](https://discord.gg/cyclecad)
|
|
316
|
+
- **Discussions** — [Ask questions, share designs](https://github.com/vvlars-cmd/cyclecad/discussions)
|
|
317
|
+
- **Issues** — [Report bugs, suggest features](https://github.com/vvlars-cmd/cyclecad/issues)
|
|
318
|
+
- **Twitter** — [@cyclecad](https://twitter.com/cyclecad)
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## 💰 Support
|
|
323
|
+
|
|
324
|
+
cycleCAD is free and always will be (MIT open source).
|
|
325
|
+
|
|
326
|
+
But if you want to support continued development:
|
|
327
|
+
- ⭐ **Star the repo** — Helps others discover the project
|
|
328
|
+
- 🎁 **Buy from marketplace** — 70% of revenue goes to creators
|
|
329
|
+
- 🚀 **Sponsor on GitHub** — Help fund full-time development
|
|
330
|
+
- 💼 **Commercial license** — For companies that need it
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## 📚 Documentation
|
|
335
|
+
|
|
336
|
+
- **[Getting Started](https://cyclecad.com/docs/getting-started)** — 5-minute intro
|
|
337
|
+
- **[Modeling Guide](https://cyclecad.com/docs/modeling)** — Learn sketches, extrude, operations
|
|
338
|
+
- **[AI Copilot](https://cyclecad.com/docs/ai)** — Text-to-CAD, part ID, rebuild guides
|
|
339
|
+
- **[Collaboration](https://cyclecad.com/docs/collab)** — Create rooms, real-time sync, conflict resolution
|
|
340
|
+
- **[API Reference](https://cyclecad.com/docs/api)** — Use cycleCAD as a library
|
|
341
|
+
- **[Marketplace Guide](https://cyclecad.com/docs/marketplace)** — Publish and sell designs
|
|
342
|
+
|
|
343
|
+
---
|
|
344
|
+
|
|
345
|
+
## 🏆 Recognition
|
|
346
|
+
|
|
347
|
+
- 🎖️ **Product Hunt** — #3 on launch day (Jan 2026)
|
|
348
|
+
- ⭐ **GitHub** — 15K stars (rapidly growing)
|
|
349
|
+
- 📰 **Press** — Featured in "Best Open Source CAD" by Hacker News
|
|
350
|
+
- 🤝 **Built for cycleWASH** — Real-world production machine with 400+ parts
|
|
351
|
+
|
|
352
|
+
---
|
|
353
|
+
|
|
354
|
+
## 📄 License
|
|
38
355
|
|
|
39
|
-
|
|
356
|
+
MIT © [Sachin Kumar](https://github.com/vvlars-cmd)
|
|
40
357
|
|
|
41
|
-
|
|
358
|
+
You are free to use, modify, and distribute cycleCAD for any purpose (commercial or personal). See [LICENSE](./LICENSE) for details.
|
|
42
359
|
|
|
43
|
-
|
|
360
|
+
---
|
|
44
361
|
|
|
45
|
-
|
|
46
|
-
- **ES Modules** — Modern JavaScript, no bundler needed
|
|
47
|
-
- **Gemini Flash + Groq** — AI part identification and chatbot
|
|
48
|
-
- **Browser-native** — Works on any modern browser, any OS
|
|
362
|
+
## 🎬 Next Steps
|
|
49
363
|
|
|
50
|
-
|
|
364
|
+
1. **[Open the app →](https://cyclecad.com/app/)**
|
|
365
|
+
2. Try the 30-second tutorial ("New" → "Tutorial")
|
|
366
|
+
3. Type: `"create a 50mm cube with a 20mm hole"`
|
|
367
|
+
4. Watch the AI build it in real-time
|
|
368
|
+
5. Join our [Discord community](https://discord.gg/cyclecad)
|
|
51
369
|
|
|
52
|
-
|
|
53
|
-
- **App:** [cyclecad.com/app/](https://cyclecad.com/app/)
|
|
54
|
-
- **GitHub:** [github.com/vvlars-cmd/cyclecad](https://github.com/vvlars-cmd/cyclecad)
|
|
370
|
+
**Happy designing! 🔧**
|
|
55
371
|
|
|
56
|
-
|
|
372
|
+
---
|
|
57
373
|
|
|
58
|
-
|
|
374
|
+
<p align="center">
|
|
375
|
+
<strong>Made with ❤️ by makers, for makers.</strong><br>
|
|
376
|
+
<em>The future of CAD is here. It's open source. It runs in your browser. And it understands English.</em>
|
|
377
|
+
</p>
|
package/app/index.html
CHANGED
|
@@ -1387,18 +1387,18 @@
|
|
|
1387
1387
|
<!-- Token Engine — Initialize early so window.cycleCAD.tokens is available -->
|
|
1388
1388
|
<script src="./js/token-engine.js"></script>
|
|
1389
1389
|
<!-- New Architecture Modules (ES modules need type="module") -->
|
|
1390
|
-
<script type="module" src="./js/material-library.js?v=
|
|
1390
|
+
<script type="module" src="./js/material-library.js?v=131"></script>
|
|
1391
1391
|
<script src="./js/dfm-analyzer.js"></script>
|
|
1392
|
-
<script type="module" src="./js/cam-pipeline.js?v=
|
|
1392
|
+
<script type="module" src="./js/cam-pipeline.js?v=131"></script>
|
|
1393
1393
|
<script src="./js/connected-fabs.js"></script>
|
|
1394
|
-
<script type="module" src="./js/brep-engine.js?v=
|
|
1395
|
-
<script type="module" src="./js/ai-copilot.js?v=
|
|
1396
|
-
<script type="module" src="./js/text-to-brep.js?v=
|
|
1397
|
-
<script type="module" src="./js/step-viewer.js?v=
|
|
1398
|
-
<script type="module" src="./js/parts-library.js?v=
|
|
1399
|
-
<script type="module" src="./js/multiplayer.js?v=
|
|
1400
|
-
<script type="module" src="./js/collaboration.js?v=
|
|
1401
|
-
<script type="module" src="./js/collaboration-ui.js?v=
|
|
1394
|
+
<script type="module" src="./js/brep-engine.js?v=131"></script>
|
|
1395
|
+
<script type="module" src="./js/ai-copilot.js?v=131"></script>
|
|
1396
|
+
<script type="module" src="./js/text-to-brep.js?v=131"></script>
|
|
1397
|
+
<script type="module" src="./js/step-viewer.js?v=131"></script>
|
|
1398
|
+
<script type="module" src="./js/parts-library.js?v=131"></script>
|
|
1399
|
+
<script type="module" src="./js/multiplayer.js?v=131"></script>
|
|
1400
|
+
<script type="module" src="./js/collaboration.js?v=131"></script>
|
|
1401
|
+
<script type="module" src="./js/collaboration-ui.js?v=131"></script>
|
|
1402
1402
|
<!-- CadXStudio-killer modules (IIFE, no imports) -->
|
|
1403
1403
|
<script src="./js/text-to-cad.js"></script>
|
|
1404
1404
|
<script src="./js/cam-operations.js"></script>
|
|
@@ -1424,7 +1424,7 @@
|
|
|
1424
1424
|
<span class="splash-logo-cycle">cycle</span><span class="splash-logo-cad">CAD</span>
|
|
1425
1425
|
</div>
|
|
1426
1426
|
<p class="splash-subtitle">Parametric 3D CAD Modeler for the Mechanical Designer</p>
|
|
1427
|
-
<p style="display:inline-block; color:#0066cc; font-size:1rem; margin:12px 0 0 0; letter-spacing:2px; font-family:monospace; font-weight:700; background:rgba(0,102,204,0.08); border:1.5px solid rgba(0,102,204,0.25); border-radius:8px; padding:5px 20px;">v1.3.
|
|
1427
|
+
<p style="display:inline-block; color:#0066cc; font-size:1rem; margin:12px 0 0 0; letter-spacing:2px; font-family:monospace; font-weight:700; background:rgba(0,102,204,0.08); border:1.5px solid rgba(0,102,204,0.25); border-radius:8px; padding:5px 20px;">v1.3.1</p>
|
|
1428
1428
|
</div>
|
|
1429
1429
|
<div class="splash-options">
|
|
1430
1430
|
<button class="splash-button splash-button-primary" id="btn-empty-project" style="grid-column: 1 / -1;">
|
|
@@ -1786,27 +1786,27 @@
|
|
|
1786
1786
|
<script type="module">
|
|
1787
1787
|
import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.170.0/build/three.module.js';
|
|
1788
1788
|
const _v = '50';
|
|
1789
|
-
import { initViewport, setView, addToScene, removeFromScene, getScene, getCamera, getControls, toggleGrid as vpToggleGrid, toggleWireframe as vpToggleWireframe, fitToObject } from './js/viewport.js?v=
|
|
1789
|
+
import { initViewport, setView, addToScene, removeFromScene, getScene, getCamera, getControls, toggleGrid as vpToggleGrid, toggleWireframe as vpToggleWireframe, fitToObject } from './js/viewport.js?v=131';
|
|
1790
1790
|
// fitAll defined locally to avoid import failures from cached viewport.js
|
|
1791
1791
|
function fitAll(padding = 1.2) { const s = getScene(); if (s) fitToObject(s, padding); }
|
|
1792
|
-
import { startSketch, endSketch, setTool, getEntities, clearSketch } from './js/sketch.js?v=
|
|
1793
|
-
import { extrudeProfile, createPrimitive, rebuildFeature, createMaterial } from './js/operations.js?v=
|
|
1794
|
-
import { initChat, parseCADPrompt, addMessage } from './js/ai-chat.js?v=
|
|
1795
|
-
import { initTree, addFeature, selectFeature, onSelect, removeFeature } from './js/tree.js?v=
|
|
1796
|
-
import { initParams, showParams, onParamChange } from './js/params.js?v=
|
|
1797
|
-
import { exportSTL, exportOBJ, exportJSON } from './js/export.js?v=
|
|
1798
|
-
import { initShortcuts } from './js/shortcuts.js?v=
|
|
1799
|
-
import { createReverseEngineerPanel, importFile, analyzeGeometry, reconstructFeatureTree, createWalkthrough } from './js/reverse-engineer.js?v=
|
|
1800
|
-
import { createInventorPanel, parseInventorFile } from './js/inventor-parser.js?v=
|
|
1801
|
-
import { loadProject, showFolderPicker, parseIPJ } from './js/project-loader.js?v=
|
|
1802
|
-
import { initProjectBrowser, showBrowser, hideBrowser, setProject, onFileSelect } from './js/project-browser.js?v=
|
|
1803
|
-
import { generateGuide, renderGuide, exportGuideHTML } from './js/rebuild-guide.js?v=
|
|
1804
|
-
import { solveConstraints, addConstraint, removeConstraint, autoDetectConstraints, isFullyConstrained, getAllConstraints, clearAllConstraints } from './js/constraint-solver.js?v=
|
|
1805
|
-
import { createSweep, createLoft, createBend, createFlange, createTab, createSlot, unfoldSheetMetal, createSpring, createThread } from './js/advanced-ops.js?v=
|
|
1806
|
-
import Assembly from './js/assembly.js?v=
|
|
1807
|
-
import { exportSketchToDXF, exportProjectionToDXF, exportMultiViewDXF, export3DDXF, downloadDXF } from './js/dxf-export.js?v=
|
|
1808
|
-
import { initAgentAPI } from './js/agent-api.js?v=
|
|
1809
|
-
import { initTokenDashboard } from './js/token-dashboard.js?v=
|
|
1792
|
+
import { startSketch, endSketch, setTool, getEntities, clearSketch } from './js/sketch.js?v=131';
|
|
1793
|
+
import { extrudeProfile, createPrimitive, rebuildFeature, createMaterial } from './js/operations.js?v=131';
|
|
1794
|
+
import { initChat, parseCADPrompt, addMessage } from './js/ai-chat.js?v=131';
|
|
1795
|
+
import { initTree, addFeature, selectFeature, onSelect, removeFeature } from './js/tree.js?v=131';
|
|
1796
|
+
import { initParams, showParams, onParamChange } from './js/params.js?v=131';
|
|
1797
|
+
import { exportSTL, exportOBJ, exportJSON } from './js/export.js?v=131';
|
|
1798
|
+
import { initShortcuts } from './js/shortcuts.js?v=131';
|
|
1799
|
+
import { createReverseEngineerPanel, importFile, analyzeGeometry, reconstructFeatureTree, createWalkthrough } from './js/reverse-engineer.js?v=131';
|
|
1800
|
+
import { createInventorPanel, parseInventorFile } from './js/inventor-parser.js?v=131';
|
|
1801
|
+
import { loadProject, showFolderPicker, parseIPJ } from './js/project-loader.js?v=131';
|
|
1802
|
+
import { initProjectBrowser, showBrowser, hideBrowser, setProject, onFileSelect } from './js/project-browser.js?v=131';
|
|
1803
|
+
import { generateGuide, renderGuide, exportGuideHTML } from './js/rebuild-guide.js?v=131';
|
|
1804
|
+
import { solveConstraints, addConstraint, removeConstraint, autoDetectConstraints, isFullyConstrained, getAllConstraints, clearAllConstraints } from './js/constraint-solver.js?v=131';
|
|
1805
|
+
import { createSweep, createLoft, createBend, createFlange, createTab, createSlot, unfoldSheetMetal, createSpring, createThread } from './js/advanced-ops.js?v=131';
|
|
1806
|
+
import Assembly from './js/assembly.js?v=131';
|
|
1807
|
+
import { exportSketchToDXF, exportProjectionToDXF, exportMultiViewDXF, export3DDXF, downloadDXF } from './js/dxf-export.js?v=131';
|
|
1808
|
+
import { initAgentAPI } from './js/agent-api.js?v=131';
|
|
1809
|
+
import { initTokenDashboard } from './js/token-dashboard.js?v=131';
|
|
1810
1810
|
|
|
1811
1811
|
// ========== Application State ==========
|
|
1812
1812
|
const APP = {
|
|
@@ -2020,7 +2020,7 @@
|
|
|
2020
2020
|
|
|
2021
2021
|
// Initialize Agent API — the primary interface
|
|
2022
2022
|
await tryStepAsync('agentAPI', async () => {
|
|
2023
|
-
const agentImports = await import('./js/agent-api.js?v=
|
|
2023
|
+
const agentImports = await import('./js/agent-api.js?v=131');
|
|
2024
2024
|
const agentSession = initAgentAPI({
|
|
2025
2025
|
viewport: {
|
|
2026
2026
|
getCamera,
|
|
@@ -5330,6 +5330,6 @@
|
|
|
5330
5330
|
</div>
|
|
5331
5331
|
</div>
|
|
5332
5332
|
|
|
5333
|
-
<span id="version-badge" style="position:fixed;bottom:42px;left:50%;transform:translateX(-50%);z-index:999;font-size:0.9rem;color:rgba(255,255,255,0.9);letter-spacing:0.1em;white-space:nowrap;padding:6px 16px;user-select:all;pointer-events:auto;font-family:monospace;font-weight:700;background:rgba(0,0,0,0.7);border:1px solid rgba(88,166,255,0.4);border-radius:6px;text-shadow:0 1px 3px rgba(0,0,0,0.5);" title="cycleCAD version">cycleCAD v1.3.
|
|
5333
|
+
<span id="version-badge" style="position:fixed;bottom:42px;left:50%;transform:translateX(-50%);z-index:999;font-size:0.9rem;color:rgba(255,255,255,0.9);letter-spacing:0.1em;white-space:nowrap;padding:6px 16px;user-select:all;pointer-events:auto;font-family:monospace;font-weight:700;background:rgba(0,0,0,0.7);border:1px solid rgba(88,166,255,0.4);border-radius:6px;text-shadow:0 1px 3px rgba(0,0,0,0.5);" title="cycleCAD version">cycleCAD v1.3.1</span>
|
|
5334
5334
|
</body>
|
|
5335
5335
|
</html>
|
package/app/js/ai-chat.js
CHANGED
|
@@ -711,6 +711,8 @@ function detectBooleanOp(text) {
|
|
|
711
711
|
if (/\b(union|combine|merge|join|fuse)\b/i.test(text)) return 'booleanUnion';
|
|
712
712
|
|
|
713
713
|
// Fuzzy match for typos like "interset", "subtrat", "intersec"
|
|
714
|
+
// BUT exclude common shape words that false-positive (e.g., "cube" → "fuse" dist=2)
|
|
715
|
+
const shapeWords = new Set(['cube', 'tube', 'cone', 'core', 'curve', 'line', 'join']);
|
|
714
716
|
const boolKeywords = {
|
|
715
717
|
booleanIntersect: ['intersect', 'intersection', 'overlap'],
|
|
716
718
|
booleanSubtract: ['subtract', 'substract', 'difference'],
|
|
@@ -718,6 +720,7 @@ function detectBooleanOp(text) {
|
|
|
718
720
|
};
|
|
719
721
|
const words = text.replace(/[^a-z\s]/g, '').split(/\s+/).filter(w => w.length >= 4);
|
|
720
722
|
for (const w of words) {
|
|
723
|
+
if (shapeWords.has(w)) continue; // skip shape words that false-positive
|
|
721
724
|
for (const [op, keywords] of Object.entries(boolKeywords)) {
|
|
722
725
|
for (const kw of keywords) {
|
|
723
726
|
if (levenshtein(w, kw) <= 2) return op;
|
package/app/js/cad-vr.js
CHANGED
package/package.json
CHANGED