| ▲ | etskinner 18 hours ago |
| The opening paragraph is very telling; the author doesn't seem to understand typical pro-level parametric CAD programs available on the market: > I keep designing physical parts for our robots. Motor mounts, sensor brackets, wheel hubs. Every time, the workflow is the same: open a GUI CAD program, click around for an hour, export an STL, realize the bolt pattern is 2mm off, repeat. This doesn't make sense. When you realize the bolt pattern is 2mm off, you just edit that dimension and let the CAD program recalculate. You don't need to click around for an hour again. That's the beauty of contstraint-based parametric modeling as opposed to, say, modeling in Blender. The author's program is akin to writing vim to replace Publisher. They're solving entirely different problems. Not to mention, this code-as-model paradigm already exists: OpenSCAD |
|
| ▲ | bangaladore 18 hours ago | parent | next [-] |
| > That's the beauty of constraint-based parametric modeling as opposed to, say, modeling in Blender. I was thinking the same thing. This looks more like an API that makes 3d modeling look closer to CAD, but without realizing that CAD is about constraints, parametrizing, and far more. |
| |
| ▲ | throwup238 10 hours ago | parent | next [-] | | > but without realizing that CAD is about constraints, parametrizing, and far more Constraints and parametrizing are the trivial parts of CAD, something you can now implement in a weekend with Claude Code, the MINPACK/SolveSpace test suite, and OpenCascade as an oracle. The hard part is a geometric kernel that can express boundary representations for complex shapes (sketches, chamfers, fillets, etc) and boolean operations while somewhat handling the topographical naming problem without driving the user insane (which existing kernels are still all shit at). | | |
| ▲ | delusional 9 hours ago | parent | next [-] | | > Constraints and parametrizing are the trivial parts of CAD, something you can now implement in a weekend with Claude Code You go ahead and try that. | | |
| ▲ | throwup238 9 hours ago | parent [-] | | ;) Keywords: Jacobian, Newton-Raphson, Levenberg-Marquardt, Powell dog leg, Schur complements, sparse QR/Cholesky, and so on. The LLM can figure the rest out. Try it yourself! I recommend Rust because the methods are old and most of the algorithms are already implemented by crates, you just have to wire them together. Like I said the hard part is the b-rep: you’re not going to find anything equivalent to Parasolid or ACIS in the literature or open source. | | |
| ▲ | MITSardine 2 hours ago | parent | next [-] | | I can't help but find this comment a little insulting. It's very similar to saying "if, while, else, malloc. The LLM can figure the rest out!" as if CS were a solved thing and the whole challenge weren't assembling those elementary bricks together in computationally efficient and robust ways. Also more to the point, I doubt you'll have much success with local optimization on general surfaces if you don't have some kind of tessellation or other spacial structure to globalize that a bit, because you can very easily get stuck in local optima even while doing something as trivial as projecting a point onto a surface. Think of anything that "folds", like a U-shape, a point can be very close to one of the branches, but Newton might still find it on the other side if you seeded the optimizer closer to there. It doesn't matter whether you use vanilla Newton or Newton with tricks up to the gills. And anything to do with matrices will only help with local work as well because, well, these are non-linear things. "Just work in parameter space" is hardly a solution either, considering many mappings encountered in BREPs are outright degenerate in places or stretch the limits floating point stability. And the same issue with local minima will arise, even though the domain is now convex. So I might even reduce your list to: Taylor expansion, linear solver. You probably don't need much more than that, the difficulty is everything else you're not thinking of. And remember, this has to be fast, perfectly robust, and commit error under specified tolerance (ideally, something most CAD shops don't even promise). | |
| ▲ | dymk 8 hours ago | parent | prev | next [-] | | Yeah but have you tried it? You can throw as many keywords as you want into Claude but it does get things wrong in sometimes subtle ways. I’ve tried it, I know. | |
| ▲ | nancyminusone 2 hours ago | parent | prev | next [-] | | Sure man. Solidworks will be out of business any day now. | |
| ▲ | imtringued 7 hours ago | parent | prev [-] | | Look, I'm not trying to decimate you here but your list of keywords is wrong and I know it because I explored that list last month for a completely different application. The Jacobian is the first order derivative for a function that accepts a vector as an input and produces a vector as an output, hence it must be a matrix. Newton-Raphson is an algorithm for finding the roots(=zeroes) of a function. Since the derivative of the minimum of a function is zero, it can be used for solving convex optimization problems. Levenberg-Marquardt is another way to solve optimization problems. The Powell dog leg method is new to me, but it is just an extension of Gauss-Newton which you could think of a special casing of Newton-Raphson where the objective function is quadratic (useful for objectives with vector norms aka distances between positions). Most of the algorithms require solving a linear system for finding the zero of the derivative. The Schur complement is a way to factor the linear system into a bunch of smaller linear systems and sparse QR/Cholesky are an implementation detail of solving linear systems. Now that we got the buzzwords out of the way I will tell you the problem with your buzzwords. Constraint solving algorithms are SAT or SMT based and generally not optimization based. Consider the humble circle constraint: a^2 + b^2 = c^2. If you have two circles with differing centers and radii, they may intersect and if they do, they will intersect at two points and this is readily apparent in the equations since c = sqrt(a^2 + b^2) has two solutions. This means you will need some sort of branching inside your algorithm and the optimization algorithms you listed are terrible at this. | | |
| ▲ | tomcur 3 hours ago | parent [-] | | Optimization can work well for interactive CAD usage, because geometric sketches tend to be close to the intended solution, and it's fast. It also has the nice property of stability (i.e., with optimization, small changes in parameters tend not to cause large perturbations in the solution). Doing more gets into what you mentioned, and is called chirality or root identification in the literature. That's much more intense computationally, but could be useful especially if cheaper approaches like optimization failed. |
|
|
| |
| ▲ | cindyllm 10 hours ago | parent | prev [-] | | [dead] |
| |
| ▲ | tomcur 4 hours ago | parent | prev | next [-] | | We've started a 2D geometric constraint solver at https://github.com/endoli/fiksi doing the constraint part of this in Rust. We're using it internally and so far it works well, though it's still experimental. More constraints and especially better behavior around failure are needed. The latter will likely entail at least doing more with degree of freedom counting, though there's some of that already. A C++-library to be aware of is SolveSpace's slvs: https://github.com/solvespace/solvespace/tree/e74c2eae54fdd9.... | |
| ▲ | imtringued 7 hours ago | parent | prev [-] | | This is something I don't get about the code-based CAD tools. They don't let you specify declarative geometric constraints. Constraints are useful beyond just designing parts. If you have a parallel mechanism there are only two ways to solve the kinematics/dynamics for it: Constraint solving for rigid contacts or iterative solving by approximating the model with non-rigid contacts via internal springs. | | |
| ▲ | WillAdams 2 hours ago | parent [-] | | Could you mock up some code to describe which you feel would be suitable to describing such a thing? |
|
|
|
| ▲ | jetter 3 hours ago | parent | prev | next [-] |
| If you like OpenSCAD, you should check https://modelrift.com which is an OpenSCAD browser-based IDE which uses LLM to generate .scad and instantly shows the .stl 3d model result via 3d model viewer. Since AI models are still not good at openscad, the useful feature of modelrift is the "screenshot-powered" iteration where human annotates visual problems and sends it back to AI assistant to fix, all using hotkey shortcuts. |
|
| ▲ | ecto 18 hours ago | parent | prev | next [-] |
| You're correct, I'm completely uneducated! Pull requests welcome :) |
| |
| ▲ | IshKebab 17 hours ago | parent [-] | | The pull request is to delete the project and open SOLIDWORKS or FreeCAD. But don't actually delete it. It looks like a nice alternative to OpenSCAD. But like OpenSCAD it's really a niche thing for designs that are highly parametric like fasteners, gears, 3D printed boxes, etc. Like OpenSCAD using it for normal "irregular" CAD is going to be extremely frustrating. Like editing an SVG in notepad instead of Inkscape. I still feel like there's a unexplored space where you combine the benefits of both somehow though. Like a code-based CAD but it also has a GUI editor that stays in sync and avoids the need to type in coordinates by hand. That would be extremely difficult though. | | |
| ▲ | jfindley 19 minutes ago | parent | next [-] | | All the good commercial parametric CAD apps have an API that allow you to define models programatically to avoid repitition, or do more complicated things like ensure gear ratios are exactly correct. I'm not sure I entirely understand what you're getting at with the "stays in sync" part though. | |
| ▲ | hyperbrainer 9 hours ago | parent | prev | next [-] | | > "highly paramteric like fastners, gears, 3D printed boxes" 1. These parts should probably be on McMaster. If you are not using them straight from there, you better have a _great_ reason as to why not when it comes up in the design review. 2. Solidworks has Smart Fasteners, Inventor has Spur Gear Component Generator, Sketch->Extrude->Shell takes 30 seconds, so not sure why 3D printed boxes would be faster or better with this for most stuff. Also, this stuff is easily solved by things like the component library and configurations. | | |
| ▲ | IshKebab 9 hours ago | parent [-] | | > you better have a _great_ reason as to why not Because I don't live in America? | | |
| ▲ | bluGill an hour ago | parent | next [-] | | Are you saying that you don't us McMaster because they don't ship to where you live? That seems silly - you can still download their drawings and then find an alternate source. They are a great listing of everything you might ever want to buy, but you can almost always find an alternative source. There is also the possibility you think because McMaster is in the US they don't have metric parts. This is wrong, a lot of engineering in the US is done in metric - nearly all big manufacturing companies went metric 40 years ago, so they have plenty of metric parts that you should work with. Of course most manufacturing is small companies that still haven't gone metric, but they also deal with metric once in a while, and in any case you wouldn't be ordering from them anyway. | |
| ▲ | dymk 8 hours ago | parent | prev | next [-] | | Are ISO standard parts not used where you live? McMaster is in the US but the much of the parts and CAD are standard | |
| ▲ | hyperbrainer 8 hours ago | parent | prev [-] | | I download and use parts dimensioned in metric to ISO standards all the time... |
|
| |
| ▲ | DannyBee 15 hours ago | parent | prev | next [-] | | This is actually what onshape is, under the covers. The GUI is really just using their scripting primitives, etc. You can access it the same as they can, actually. | | |
| ▲ | throwup238 9 hours ago | parent [-] | | Onshape is just a GUI over the Parasolid geometric modeling kernel, the same kernel used by Solidworks [1]. Whatever their scripting primitives are, they're at best a thin wrapper over Parasolid (which is true for the entire industry - it's all Siemens Parasolid and Dassault ACIS). [1] https://en.wikipedia.org/wiki/Parasolid#Applications | | |
| ▲ | DannyBee 4 hours ago | parent | next [-] | | Yes, this is all true, but the comment I responded to wanted to be able to basically code rather than GUI sometimes , but still have the GUI up to date. Because of how onshape was built it makes this very very easy. Solidworks very much does not. Fusion360 also has good enough python bindings but it's still nowhere near as easy or integrated to do this (or debug it) as onshape. So I'm kinda not sure what you are going for here. The fact that they are all the same kernels under the cover is sort of irrelevant. It's not that thin a layer and the layer matters a lot since it is what you get to use. It's like saying all of userspace is just syscalls. That's not what users see or interact with, the layer they interact with matters a lot to them. | |
| ▲ | squeedles 4 hours ago | parent | prev [-] | | And both of them were written by Ian Braid, Alan Grayer, and Charles Lang (and others) in Cambridge. Parasolid was v1 and old school C, then they got the C++ bug like many of us at the time and did ACIS as v2. |
|
| |
| ▲ | prennert 7 hours ago | parent | prev | next [-] | | Ha! Since you mention SVG, there is a trick! Draw your free-hand shape in Inkscape, export to SVG, import it in FreeCAD and go from there. I used that trick to trace a part from an image and it worked surprisingly well. Not very efficient compared to commercial tooling, but despite the clumsiness its fairly intuitive and free. | |
| ▲ | amelius 17 hours ago | parent | prev | next [-] | | > Like editing an SVG in notepad instead of Inkscape. Speaking of which, I would love to have parametric capabilities in Inkscape. | | |
| ▲ | fainpul 7 hours ago | parent | next [-] | | https://graphite.art/ https://paragraphic.design/ | | |
| ▲ | WillAdams 2 hours ago | parent [-] | | Note that Graphite does _not_ work with a stylus --- in the web version the input is too jerky/disjointed, for the desktop, it won't react to a stylus in any fashion at all (for the Windows version). |
| |
| ▲ | TheTaytay 14 hours ago | parent | prev | next [-] | | I recently stumbled across cuttle.xyz, and it’s a code-based parametric vector editor. I recently did a real world art project in it and LOVED it. | |
| ▲ | avhon1 7 hours ago | parent | prev [-] | | FWIW, the FLOSS CAD program SolveSpace can generate parametric sketches and export them as SVG files (file > export 2d view) | | |
| |
| ▲ | aaronblohowiak 17 hours ago | parent | prev | next [-] | | >I still feel like there's an unexplored space where you combine the benefits of both somehow though. Like a code-based CAD but it also has a GUI editor that stays in sync and avoids the need to type in coordinates by hand. That would be extremely difficult though. I think you can do this if the data representation of operations and values is human readable. The simplest implementation would restrict the language/data format to operations representable in the gui. Unlike trying to solve the "visual programming" problems, we don't need or desire Turing completeness. Very interesting indeed! | |
| ▲ | 9 hours ago | parent | prev | next [-] | | [deleted] | |
| ▲ | NonHyloMorph 17 hours ago | parent | prev [-] | | Are you aware of Rhino 3D with grasshopper? | | |
| ▲ | dymk 8 hours ago | parent [-] | | Rhino has no free tier. I’d love to play with it, and it’s where AutoDesk made the right call. It’s why Fusion 360 has such a strong ecosystem for hobbyists / prosumers. | | |
|
|
|
|
| ▲ | gwbas1c 18 hours ago | parent | prev | next [-] |
| Read a bit before critisizing: > One thing I care about that most CAD tools don't: vcad is designed to be used by AI coding agents. |
| |
| ▲ | amelius 17 hours ago | parent | next [-] | | AI coding agents are notoriously bad at anything that involves spatial awareness. | | |
| ▲ | neomantra 2 hours ago | parent | next [-] | | Over the weekend I took pictures of the four walls of my office and asked Claude Desktop to examine them and give me a plan for tackling it. It absolutely “understood” my room, identifying the different (messy) workspaces and various piles of stuff on the ground. It generated a checklist with targeted advice and said that I should be motivated to clean up because the “welcome back daddy” sign up on the wall indicates that my kids love me and want a nice space to share with me. I vibe-code TUI and GUI by making statements like “make the panel on the right side two pixels thinner”. Related to this thread, I explored agentic looping for 3d models (with a swift library, could be done with this Rust one by following the workflow:
https://github.com/ConAcademy/WeaselToonCadova | |
| ▲ | storystarling 5 hours ago | parent | prev [-] | | I've found they are actually quite good at semantic geometry even if they struggle with visual or pixel-based reasoning. Since this is parametric the agent just needs to understand the API and constraints rather than visualize the final output. It seems like a code-first interface is exactly what you want for this. |
| |
| ▲ | ilogik 18 hours ago | parent | prev [-] | | For that there’s openscad | | |
| ▲ | dymk 8 hours ago | parent | next [-] | | Breaks down for complex parts with lots of repeated operations, suffers from floating point rounding errors. No constraint solver. | | |
| ▲ | WillAdams 2 hours ago | parent [-] | | Usually when one needs constraints one can code it up as a recursive function. |
| |
| ▲ | hnuser123456 17 hours ago | parent | prev [-] | | I've even already asked an LLM to generate designs in openscad, and there's plenty of examples out there. Obviously there's a complexity limit, but there's also a cheat sheet that makes it pretty easy to discover how to do almost anything that's possible within. |
|
|
|
| ▲ | b38tn1k 16 hours ago | parent | prev [-] |
| [dead] |