If anyone is curious I started a discussion forum [1] with the goal of researching possible paths to good quality open source CAD, after an off-hand tweet of mine about open source CAD got significant traction on twitter.
Based on what I know so far, it seems that FreeCAD might be finally getting the investment it needs to mature as a real option. There is an organization called Ondsel which is taking on a lot of UI and assembly bench improvements, and I have heard that their preview versions are worth checking out. [2]
Notably, the big question about open source CAD relates to the geometry kernel used. They take decades to produce, and only OpenCASCADE is even remotely mature enough. OpenCASCADE is also somewhat tricky to work with, but it seems to be our only choice. Even if we had millions of dollars of investment in open source CAD it seems unlikely we could do better than OpenCASCADE based on what I have learned.
So my next step when I get some time is to explore how the Ondsel branch of FreeCAD is going and see if I can convince myself this is the path we should all be supporting. I do see no other paths currently, so my hope is that we see FreeCAD mature enough that it becomes usable by professional mechanical engineers.
I'm working on an MPL-licensed, free forever CAD environment for molecular nanotechnology. It is extremely early, indeed I hesitate to even mention it as it is currently undergoing the final stages of a rewrite to run on a game engine back-end, and it isn't much more than boilerplate at the moment. But we have a small community of people interested in this, and we are currently raising money to support further development, among other things.
The key point though is that the atomistic modeling is sort-of an add-on to a bog-standard CAD workflow. You still use boolean geometry to produce surface representations, even if those surfaces are discretized crystal structures.
I had intended that once it was up and running I would reach out to some people I know that are interested in a more modern alternative to FreeCAD. Perhaps it would make sense to combine efforts?
I reread the sub-thread and I can see how my attention got carried away from the topic. The maintenance of models might be perceived as an add on to a much more scientific-heavy CAD workflows. The value of engineering tools is not going to go away no matter how data exchange and collaboration tools advance. I hope you find people who can help with the scientific-heavy work that would certainly require funding.
However I would still like to learn how PartCAD (and part-time open source hobbyists behind it, without any funding) can help nonetheless.
I’d really like to learn what are the modelling needs of molecular nanotechnology. Would it need another packaging tool, or just a separate index repository to main another set of parts? Is there any chance you can consider the persistence layer being modular and implemented as code from day one? I would appreciate an opportunity to debate about it with an experienced professional.
We’re looking at various options for code representations of models. Stuff like cadquery is inspirational, but a stronger type system and runtime guarantees are needed. It also ties very closely to version control, as an AST-aware VCS can effectively merge edit histories with visual diffs, and permit editing the history itself. This more resembles the workflow of f-reps than b-reps, but we haven’t made a firm decision on representation.
Having a standard repository of parts is also critical. We are also considering ways that the interface can be made modular and plugin driven such that importing a part into a workspace also imports widgets for instantiating and interacting with that part.
I wonder myself why would we run third party Python scripts that can do anything, run an infinite loop, download something from Internet or delete files from the home folder, and keep our fingers crossed it calls “show_object” at the end…
Have you considered using Java? I mean real classes that implement interfaces you introduce, not classes with a single “main()” method. So you instantiate an instance of that class when you add a part.
You can use a handcrafted JVM or Javaagents to ensure that it’s only doing the things you want (like they do on Spark clusters to ensure that ML jobs are only doing ML). Since you are after describing and instantiating objects, why not using something so object oriented?
I want to introduce something like that as an option in PartCAD to see if anyone likes to use it.
Let me know if you want to give PartCAD a try for your model storing/sharing needs. I’ll be happy to customize/extend it for your needs. I always loved chemistry and physics but never had a chance to apply that at work.
Hmm. Indeed that makes a lot of sense to use wasm instead. Let’s table the language aside for a moment. What data format would you expect to be spit out by third-party models? Is there anything generic enough to store both b-reps, f-reps, and whatever might be suitable for nanotechnology?
I personally don’t think FreeCAD needs an alternative. It’s good enough for most needs and it’s maturing. But it needs to be used for what it is good for: visual workflows. FreeCAD and all other CAD tools (that might be needed or preferred for some workflows) need to get out of the business of storing CAD data in proprietary binary files that are no good for any collaboration. Instead, either natively or through plugins, they need to import/export code. Once the design is stored like code, regular coding techniques kick in. And don’t just mean merging. Linting, code coverage, the whole shebang. That’s the kind of workflow that PartCAD aims to facilitate.
Well, as a professional mechanical engineer with 20 years of cad experience, I disagree that FreeCAD is “good enough for most needs”. It didn’t even have assembly support until a preview of that feature was added to a fork a month or so ago, and it was a non-starter before that. I currently believe FreeCAD is the best hope we have but there’s a long road ahead before it is “good enough”.
As far as storing cad files as you describe, how does that interface with OpenCASCADE file formats? The data storage is related to the CAD kernel I think, so it might be difficult to move to a “store models as code” storage model.
That’s why I said other CAD tools can be used for some workflows. For most humans interacting with technology nowadays out there FreeCAD will do. Anyway, even if I’m wrong about FreeCAD, PartCAD doesn’t have much to do with what happens between “Load” and “Save”. CAD is a tool that some people will use. PartCAD should support as many of those tools as possible.
The question of format used to store part info is more relevant to PartCAD. However I do not think PartCAD should prescribe any. PartCAD must be modular and support as many formats as it can. And let the competition decide. Maybe the supported/compatible CAD kernels will contribute to the competition of file formats. Maybe the file format chosen by the community (e.g. for LLM related reasons) will contribute to what CAD tools support. We’ll see in 20 years.
I personally don’t think the community at a whole will gravitate towards anything like OpenCASCADE file formats. I find CadQuery and build123d more promising (no matter what’s under their hood at the moment). I believe it must be human-readable (and, thus, LLM-readable) text. But CadQuery and build123d are not the end of the evolution. I’m sure we will face next technology iterations that are at least more LLM friendly, secure (e.g. to prevent arbitrary I/O from code), and more structured (to help retain the code structure and formatting in the “Load”-“Change”-“Save” cycle).
PartCAD will be there to facilitate modular design and collaboration, and to include as many people and their tools as possible. Not to facilitate any closed formats or tool ecosystems that commercial tool vendors are trying to prescribe to us today, no matter how convincing their arguments sound. Large profits enable generation of very convincing arguments.
No matter how difficult it is going to be to “store models as code”, I personally believe the humanity will succeed at that. However PartCAD will support all common file formats. It currently (2 days after a preview release which somehow went huge) supports CadQuery, build123d and STEP files.
I understand and agree with that. But to push back on the first sentence, I really don't think FreeCAD is acceptable. It's clunky, it's notorious for crashing on large models, its user interface is antiquated and really difficult to learn, and the code base is a monstrosity.
Yeah, it did steal some of my time and gave me some gray hair too. However as I mentioned in another comment, PartCAD is not there to replace existing CAD tools. It’s there to extend the definition of computer aided design to include modularity and collaboration. The tools that we called CAD-tools will be called “CAD Design GUI” tools. For decades their marketing departments have successfully sold us the idea of those tools being the complete technology solution. Charging ridiculous amounts of money for any collaboration feature. And I don’t blame them. They are smart. But we, as a humanity, need to be even smarter. Smarter than agreeing to having no “merge/rebase” functionality in 2023.
But on the topic of CAD/CAM systems, there IS value in having a single workflow tool from design to manufacture. Fusion 360 shows how beneficial it can be to have these different aspects of the workflow be seamlessly integrated.
There’s no justifiable reason to Balkanize all the CAD tools based on function. Users don’t want that.
Users who want to continue paying for the value of having all tools under one roof can continue doing so. From time to time they might not be opposed to the idea of importing a part or two from a public repository. At least for some simulation tests. They might also find value in using a proprietary private PartCAD repository when they migrate from one all-under-one-roof tool to another after being squeezed dry by the previous vendor.
No one really knows what all of the users want. The commercial tool vendors would tell us that all users want exactly what they sell. My subjective experience suggested a hypothesis that some users might want something different. After two days of PartCAD’s initial revision being out there, it would be fair to say that a lot of users want it. The demand and feedback exceeded all expectations.
Of course! There is more than one concept that has value. And each concept also has a price (or price range as there will always be multiple implementations of each concept, each implementation will deteriorate over time and so on and so forth). There will always be more than one class of consumers, more than one set of value/costs preferences. Otherwise we would only have one programming language, wouldn’t we? So acknowledging one concept has value doesn’t mean announcing that it is the only concept worth existing.
I only draw simple hobby projects from time to time and have given freecad a chance several times, but it can't even begin to keep up with commercial tools.
Cool, that sounds hopeful. FreeCAD's Assembly workbench mess (aka several competing ones instead of a single blessed one) is why I stopped using it. So if that gets solved it'll be very welcome (by me). :)
Good news on that front, FreeCAD is working on adding an official Assembly workbench as we speak. They added OndselSolver as the core back in november, and seem to be working to add the workbench by the next major version. https://blog.freecad.org is a great place to keep an eye on things.
Thanks for the link. I’ll definitely study that. I’m not sure at the moment whether NopSCADlib has exactly the same ambitions or not. But it certainly deserves to be learned from. PartCAD has OpenSCAD support pretty high up on the todo list.
Project goals may differ slightly (NopSCADlib evolved somewhat naturally out of building CAD, CAD assemblies, Bills of Material, and assembly instructions for 3D printers) but there is a ton of overlap in functionality.
I think PartCAD would take in packages like NopSCADlib and make them accessible in a unified way along with other part repositories. In that sense the goals of the two projects are orthogonal but complementary. A similar example would be Adafruit, https://github.com/adafruit/Adafruit_CAD_Parts. In fact there are many such repos out their that are very useful but in their own islands.
Mashing up CAD design and software dependency management is something I hadn’t considered, and I’m liking it. Many CAD projects might be described as “derivative works” that embed/extend other works (mold design, wiring, AEC, and the general mechanical assembly). Most CAD apps have “component libraries” but even the best of them are lacking and there is precious little interoperability between them.
I miss my days working on CAD and this is renewing my excitement for it a bit.
Having just browsed the Readme it sounds like it could be the missing link between KiCad and FreeCAD. Not that a link doesn't exist now but it's difficult and unpleasant to work with.
Being able to near simultaneously work on a design in the 2 programs would be lovely.
linking those and I think a wasm hosted kicad library editor would help the community keep on top of useful models. It seems a lot of the issues with part libraries is curation and trust so everyone builds their own.
Thanks for the attention to PartCAD and all the contextual information shared in this thread. It was just the initial version released a couple days ago. It doesn’t even match the OpenVMP’s internal “bill of materials” library. For sure it doesn’t yet implement all of the tool gaps discovered so far by the OpenVMP project and other robotics projects I consulted with. But PartCAD will incrementally get there. The goal is not to replace core features of other engineering tools. But to connect such core features with appropriate collaboration and data storage tools (git, cloud storages etc) while dismissing some absurd features (such as saving a design into a binary blob from CAD tools…). Have patience and consider to contribute.
I looked at the post, I feel like we're missing dinner context here, because what it looks like it's doing seems very naive. As far as I know, Onshape is the only CAD product that has true git style branching and merging versioning.
Unfortunately every successful startup in this space gets bought out by the competition. After buy out, the CAD product gets cut down and real development stops. First they loose their agnostic features (spaceclaim); if they used to be compatible with a whole range of upstream and downstream products, all support for competitors products is dropped. Then they stop the real innovation, to keep the space open for their flagship products (onshape), or give their product a chance to catch up.
The current state of this is that there are PDM (Product Data Management) packages for each major CAD package [1] that handle version control, lists of components ("Bill of Material" in our biz).
There is the concept of CAD "assemblies" which are many individual parts assembled together, which can themselves be members of bigger CAD assemblies until the global product has all subassemblies.
There are then component libraries which have generic CAD files (in the CAD and outside), but they lack the full knowledge of their context - ie you may have a CAD file of a motor, but the CAD file doesn't know it needs a shaft coupling to match its 10mm output shaft diameter, which could in theory be used to pull in dependencies or at least debug your assembly (ie if the coupling attached doesn't have a 10mm ID, error out).
TL;DR: Geometry isn't enough, you need to know the specs and behavior model (like voltage --> torque curve for a motor) to do this, as the total "package" is very dependent on what else is in the model (or should be).
This is actually why we at Volition [2] are building the largest repo of hardware components in the world (26M today) with both CAD and deep spec data, with the goal of eventually powering systems to be able to do stuff like this, and of course as a marketplace we're hoping you'll buy the actual parts from us too :-)
The main bit of STEP that I designed is how to model properties that depend on other property values, it doesn't get much use in CAD systems right now but there does seem some interest in getting it better used in the future.
Another area of current work is in adding UUIDs to a model so that after doing a round trip from STEP into a proprietary CAD system and back to STEP you can work out which bits of the model are new and which not. This could be useful for parts libraries as well.
How might this work in a GUI context? It would be absolutely amazing if there was some way to make it work on FreeCAD so we could share reusable pieces.
The one missing thing I've always wanted to see in FreeCAD is something where you draw a circle on a face as an anchor point (the same way that the hole operation works) and put a point on the circle for orientation.
Then you could export the part with it's anchor points embedded in the file, or import a part with it's anchor point fitted on an existing point (With whatever offset, inversion, etc you want).
Would this be suitable for creating this kind of system?
I believe you mentioned two orthogonal features. 1) Import/export from CAD tools. Absolutely. That’s one of the main goals. PartCAD will be the persistence layer for parts I create in FreeCAD. (Whole OpenVMP was designed in FreeCAD.) In another channel I’m trying to convince the author of similar plugins to join PartCAD. 2) Enrich the model metadata with anchor/relative position/orientation. Absolutely. This will be required to enable replacement/alternative parts maintained by different parties. We can come up with a convention how to define such metadata in FreeCAD so that PartCAD is able to recognise it, until FreeCAD supports it natively.
That is exactly what I was hoping for! 3DP/CAD is still one of the most exciting areas in FOSS and it's really cool to see this kind of thing moving forward.
I've wanted a package manager for openSCAD as well.
I really like using BOSL2, and so when I publish my scads for friends, right now I just include the copy of BOSL I'm using (I forked it the one time I needed to add a custom patch) as a git submodule [1]
This doesn't seem to say if the mating system allows more complex methods than absolute 3D grid location/orientation? E.g can it mate to parts relatively and specify constraints on degrees of freedom?
build123d is an open source parametric 2D and 3D CAD tool in Python that succeeds cadquery, and instead of jQuery/pyquery-like method chaining has `with:` context managers. https://build123d.readthedocs.io/en/latest/
> [...] With just a few lines of code, you can create parametric parts that are easily reviewable and version controlled using tools like git and GitHub. Documentation can be automatically generated from the source code of your designs, similar to the documentation you’re currently reading. Additionally, comprehensive test suites can automatically validate parts, ensuring that no flaws are introduced during their lifecycle.
> The benefits of adopting a full software development pipeline are numerous and extend beyond the scope of this text. ; git w/ tests and CI/CD
Ideas for open source (parametric) parts libraries:
- [ ] Dimensional lumber (1x4, 2x4, 2x10) and e.g. HempWood would be a great addition to a parts library.
FWIW Conda-forge has signatures and build with clang in CI according to feedstock conda recipes (which have a meta.yml and optionally build.sh and/or build.bat, and a URL to watch for upstream changes).
Docker containers are ~= OCI containers which are stored in OCI container image repositories; which can host other artifacts with content signatures too.
Based on what I know so far, it seems that FreeCAD might be finally getting the investment it needs to mature as a real option. There is an organization called Ondsel which is taking on a lot of UI and assembly bench improvements, and I have heard that their preview versions are worth checking out. [2]
Notably, the big question about open source CAD relates to the geometry kernel used. They take decades to produce, and only OpenCASCADE is even remotely mature enough. OpenCASCADE is also somewhat tricky to work with, but it seems to be our only choice. Even if we had millions of dollars of investment in open source CAD it seems unlikely we could do better than OpenCASCADE based on what I have learned.
So my next step when I get some time is to explore how the Ondsel branch of FreeCAD is going and see if I can convince myself this is the path we should all be supporting. I do see no other paths currently, so my hope is that we see FreeCAD mature enough that it becomes usable by professional mechanical engineers.
[1] https://github.com/tlalexander/open-cad-foundation/discussio...
[2] https://ondsel.com/download/