top | item 44474620

Proposal: GUI-first, text-based mechanical CAD inspired by software engineering

29 points| thinkmachyx | 8 months ago

Most mechanical CAD tools (SolidWorks, Fusion, FreeCAD) still lock all modeling into opaque binary files. That makes it hard to track changes, collaborate with Git, or automate builds.

I’ve written a proposal for an alternative paradigm:

- GUI-first, like KiCad - visual modeling is the default

- Text-based source files (YAML/JSON) — readable, diffable, Git-friendly

- Separation of source and result - .step, .stl and previews are built artifacts

- Parametric logic is explicit - slot width = tab width + clearance

Works with Git, CI, or scripting — no more PDM lock-in The proposal is called SplitCAD, and it's just a concept for now — not a working tool. But I’d love to hear from anyone frustrated by the limitations of current mechanical CAD.

GitHub: https://github.com/yuanxun-yx/SplitCAD

55 comments

order

bluGill|7 months ago

That won't help. I've worked with graphical programming languages before. They work well enough, but in every case I've seen the files saved are not merge-able. Even code generation tools a trivial change will sometimes result in saved files that are almost entirely. Even with text based coding, sometimes you have to make major changes to a file and you tell everyone else on the project don't touch that file since their changes will not merge - the difference is because you are working with the text you know this will happen.

What you want is something that allows more than one person to work on a project. Programming started with file locks - you can divide a large project into pieces (parts, sub assemblies...) and then lock those pieces. I think that is done by the better CADs already, if not it is easy and you should apply that.

Eventually we figured out how to create merge tools - break the program up into lines, and if a line is changed by only one person apply the change, otherwise make sometime redo that line manually. Until you figure out how to merge graphical drawings you are stuck. Making the file next based isn't going to fix anything because the tools will sometimes need to restructure the file based on what seems like a trivial change.

rjsw|7 months ago

There is current work in STEP AP242 to annotate parts of a design with UUIDs to make it easier to work out if elements of a saved file are new or modifications of a pre-existing one.

marcosdumay|7 months ago

IMO, graphical languages should have graphical merge tools. You can't expect the text to be mergeable, but it's not enough reason to refuse file diffing as a concept.

The problem is that graphical tools are usually large, proprietary software made with the explicit purpose of locking people into an entire ecosystem. Diffing is a small specialized operation that enables portability and interoperability between ecosystems, so tool creators actively avoid those.

X-Ryl669|7 months ago

FreeCAD files are zip file containing XML documents. There's nothing binary in them, you can modify them by hand if you want. The main issue being that the format itself isn't standardized, so it's continuously evolving, it can't be used as an inter-exchange format. Notice that the last standard revision for STEP files does contains some tools for saving the parametric functions in the file (so the STEP boundary surface description isn't static anymore but can be parametric too). It's not made to save all the possibilities of a huge CAD toolkit, but if such a toolkit wanted to, it could map the functions in the file to its own parametric function and allow skipping a lot of work for recreating the part.

thinkmachyx|7 months ago

Thanks for mentioning that. I’ve tried to use git with freecad’s format before. The main idea of my proposal is to provide a source/result separation workflow, like code compilation. This gives user clean content to save to the repo.

IshKebab|7 months ago

I don't think this will ever really work well. CAD is just too visual. You're never going to be able to meaningfully diff/merge anything but the most trivial changes.

Code-based CAD is fine for things that are highly regular like fasteners, springs, etc. You're never going to design a motorbike or a chainsaw using OpenSCAD though (at least not if you aren't masochistic).

loloquwowndueo|7 months ago

Sounds like a gui editor for openscad would be just the thing for this, right?

bluGill|7 months ago

Unlikely - a GUI editor is likely to restructure a file on what looks like a trivial change and thus the result cannot be merged.

aDyslecticCrow|7 months ago

A gui with tools for openscad that map to real functions would do the trick.

willrshansen|7 months ago

I got into FreeCAD's python interface, and then Cadquery for 3d printing a few years back, and I think you've got about 70% of the solution.

Things you've got right:

   - Human-readable text file is source of truth
   - GUI editing is first-class, because it's easier to work on (most of the time)
Features your proposed solution is missing that I want:

   - Full power of an established programming language.  Yaml or json won't cut it.
   - Code and GUI on equal footing.  Edit in GUI -> see generated code.  Edit in code -> see result on model.
The main problem with Cadquery is that it's entirely code-first, and you lose out on the intuitiveness of GUI editing

One of the less obvious things I really like about dealing with code cad is that feature selection can be based on intent. Like "upper-rightmost feature" rather than "feature closest to this coordinate I just clicked". There's got to be a good way to incorporate this aspect into the "edit in GUI -> code is generated" step (without just requiring manual code editing), but I'm not good enough at UX immediately see it.

WillAdams|7 months ago

In what way does LibreCAD writing out .dxfs, or Solvespace or BRL-CAD having a human-readable file format option developed not suit your needs?

That said, I believe this would be helped immensely by an overview of CAD --- fortunately, one was published a while back, and dragged back from 404-ness by one CAD vendor:

https://www.shapr3d.com/history-of-cad/introduction

a reading of that to understand the overall context would probably provide a solid foundation for your efforts.

There has been some recent discussion of making OpenSCAD and derivatives thereof more interactive:

https://groups.google.com/g/pythonscad/c/a-FVSiRnzhw

and various efforts/research:

https://www.reddit.com/r/openscad/comments/18wpaoz/investiga...

https://old.reddit.com/r/openscad/comments/1eswe2w/i_made_a_...

Try that latter at:

https://scriptcad.com/paulftw/2.0-demo

Agree w/ @jpm_sd that Dune 3D is well worth looking at (it's the only interactive 3D CAD where I was actually able to make it through the tutorial).

severak_cz|7 months ago

I am already working on something similar yet much smaller - simple, easy to use 2D CAD for hobbyists, maps and geometric art. I have working prototype implemented in lua (Love2D) [0] and barebones text based file format[1].

Curently I am experimenting with drawing things in DeltaCAD (another easy to use CAD - unfortunately abandonware now), converting it to my format (via DXF export) and displaying it with javascript. I want to reimplement second version in javascript to be able to run it in browser and use better GUI components than those which I tried to implement myself.

[0] - https://github.com/severak/graph-paper

[1] - https://github.com/severak/graph-paper/blob/main/doc/file-fo...

zxspectrum1982|7 months ago

Other than git-friendly, this is how I remember AutoCAD 10 from ancient times.

WillAdams|7 months ago

Wouldn't it have been git-friendly if .dxf was used as the file format?

stergios|7 months ago

Me too. I had a secondary monochrome monitor just for the text commands.

ddingus|8 months ago

I live seeing efforts like this.

But I am just going to put this here so the general thoughts incorporate a fundamental problem before significant labor investments go too far:

What is a probable, viable, possible answer to the geometry kernel problem?

Parasolid, arguably the leader and generally most capable geometry kernel we have today, is or at least I can't see past...

...is just not something easily duplicated.

There are a bazillion man months of time in that body of code. And those are hard hours!

For those unfamiliar, the geometry kernel is the piece that resolves geometry cases to make operations possible. Imagine a cylinder and rectangle. Now imagine they have some common volume. They intersect, in other words.

Put a fillet on one edge to blend the edge.

How many literal edge and corner cases can you come up with?

There are way more than you think!

Now multiply that tiny problem space with all the geometry used every day.

And then multiple that time again by what it takes to make it robust.

And the whole thing, as it stand today is not even multi-threaded!

Any CAD that we expect to see even moderate general use in a professional sense, needs this piece.

How do we, meaning anyone interested in CAD this way, get past this?

I wish there were some OSS type license for Parasolid. It could be treated like the Linux kernel.

Whatever replaces Parasolid and friends, should be treated like the Linux kernel.

The closest we have is Open Cascade.

Sorry. I do not want to piss on a good vision. But this has to be said.

Peace and good luck!

I used voice input on this. Pleqse forgive typos.

blobfish01|7 months ago

Great comment! I think the size and scope of BRep modeling kernels is lost on 99% CAD users. IMHO: I have reached the point where I think there should be a generation of library development before a CAD application is even considered. This is coming from a person who has spent 10 years on an open source cad application, so I am not naive. The modeling kernel, of course, is lacking but also 3d visualization needs some love. More options in that space, but still lacking.

tda|7 months ago

> I wish there were some OSS type license for Parasolid. It could be treated like the Linux kernel.

> Whatever replaces Parasolid and friends, should be treated like the Linux kernel.

So much this! But the undertaking is so daunting, how do we get there? A capable, OSS CAD kernel would provide so much value to the world. I whish e.g. the EU could just "nationalise" such important, crucial software and redistribute it openly. Or that through some Chinese effort a newer and better kernel just lands out of nowhere and disrupt the field, like with DeepSeek.

The world has benefitted so immensely from Linux being freely available, has anyone even tried to put a price on the benefit to humanity? Imagine being stuck in a world where on big corporations can have proper OS-es, and everyone else is stuck with some anaemic locked down kernel...

rjsw|7 months ago

> I wish there were some OSS type license for Parasolid. It could be treated like the Linux kernel.

I did propose that licencing it as dual AGPL + commercial could be a way around the objections to the attempts to make JT into an ISO standard, didn't get anywhere.

thinkmachyx|8 months ago

Thanks a lot for the thoughtful and respectful reply! I really appreciate that you raising the engine issue without dismissing the whole idea.

Although building such engine requires tons of work, but the engine we’re having is indeed a bit of old. Except for the problems I mentioned, you also mentioned they’re still single threaded. That’s why I think it’s still worth building a new one, especially when there’s no good open sourced one currently.

I’m a big supporter of open source. If we have something like that in the future, we should of course make it open source like Linux kernel and allow everyone to enjoy the benefit of it.

api|7 months ago

Outsider here but — is it conceivable that instead of writing a geometry kernel one could be trained? Use the existing geometry kernels and all the open CAD documents you can find to generate gigantic amounts of training data and train a geometry model.

Of course the catch here is going to be the precision required for real world use. A ton of impressive AI demos are just that — demos. They are good enough to wow as a demo. Still, if the data set is big enough, and you’d probably want to run the model itself in at least fp32 precision, maybe you could get something.

There is a body of machine learning work that’s been done on precision annealing of models. Basically you train to min loss and then go into a finer grained domain using something like simulated annealing to fine tune parameters.

therouwboat|7 months ago

Code review seem unnecessary, since nobody cares how you made something as long as it is correct. (Measure model, measure finished part) I sometimes modify models in mastercam when designer is away.

Technical drawing comes with list of changes and more important projects have approval processes.