SolveSpace – Parametric 2D/3D CAD
solvespace.com
solvespace.com
Ramez: "I love what you've done. It's plain brilliant. Thank you."
Peneloppe PPE: "Thanks for this CAD Jesus,
I have tried most if not all reputable CAD softwares and none of them felt great to me ( or did not keep my files hostage )...
I have not yet imagined something I could not make with SolveSpace, the latest being a print in place bearing with 50 microns tolerances :P"
Azial: "Omg, this render performance increase on macOS! Its sooo fluid, thank you so much!"
Dave: "Solvespace is slowly but surely becoming the Inkscape of the CAD world..."
timestretch (HN): "SolveSpace's precision, constraints, and great keyboard user interface make it a fun program to design parts in. It is among the best open source tools out there."
It is quite an honor to be maintaining this piece of software that I did not create in the first place. We've passed the 50 contributor mark recently but can definitely use more help, it's a complex code base with huge capability for its size.
While sketchup make 2017 is still my go to for anything architectural or furniture and Freecad for anything 3d print, Blender is always the app I whish I was using all the time, even knowing fully well is not the right tool for anything cad.
I came across the cadsketcher via Maker Tales and can recommend his youtube channel for anyone new to Blender just trying to make it work for CAD.
The resulting design is not for commercial use but to be passed to the professionals (architect/builder). Simple enough for my mom to understand yet detailed enough for the professionals to know what I want precisely.
Paid version can export to DXF (AutoCAD)
I’m still stuck at the last free version 2017 make. The new free web thing is kind of okay, but really suffers in even a slightly bigger models.
Haven’t tried the newer paid versions. It’s a real shame most of these cad-like stuff are going subscription only. As a hobbyist, my needs are really sporadic :/
I also use it for modeling 3D prints when I don't need the part to be parameterized.
Of course then you' have to source measurements etc. yourself and there's no helper features, so some of these other suggestions look quite good.
Perhaps one of these?
Also: Blender.
https://github.com/solvespace/solvespace/issues/430#issuecom...
Ended up liking it enough that my father decided to use it to design the home he wants to build. He even found a builder who uses the pro version of the software (Chief Architect) so my father could view / tweak the model.
[1] https://homedesigner.chiefarchitect.com/
[2] They let you upload a certain number of models to their online viewer here's the basement (note not great on mobile): https://3d-viewer.chiefarchitect.com/go?share=55721013273615...
But it's not without its bugs, and frankly the performance seemed to steadily deteriorate as more of the code was "cleaned up" to use more modern C++/STL stuff over the years.
I use a local fork from an older release that instead diverges even further away from using C++ crap in a very performance-sensitive area (the IdList indexing is done ad-hoc) and it's been far more usable for the large-ish models I tend to work on (designing sheds/roofs and cabin structures). The same models I work efficiently on are basically impossible to work with in current upstream releases (when I last tried them, admittedly pre-pandemic so years ago), almost every operation becomes a many-second stall.
Edit:
My local fork is based on Alexey Egorov's changes @
https://github.com/Evil-Spirit/solvespace-master/tree/id-lis...
The last time I went down this path, IIRC the interactivity had improved substantially even on large assemblies, but a bunch of new bugs had been introduced. So I just stayed on the old branch with the indexing fix, it's been relatively bug-free for the stuff I do. From what I recall even just picking lines/points/faces with mouse clicks had become unreliable and inconsistent in the last new release I tried, it was very broken.
[0] https://github.com/solvespace/solvespace/commit/7674be791e84...
That makes me sad. We aim to avoid introducing bugs. I am aware of one open NURBS issue that is an actual regression where the model works in version 2.3 but not 3.0. Of course it may be affecting others too and we just haven't been told.
But between being busy rebuilding my home's roof structure at the time, which is what I was trying to use SolveSpace to assist in, and being generally frustrated with the seeming lack of interest/prioritizing the kinds of performance regressions and general scalability limits my use case kept encountering, I spent less effort working with upstream. I was doing quite large assemblies of stick-frame structures, and it seemed most users were doing simple models for 3D printing.
Another factor around that era was whitequark had abruptly quit SolveSpace maintenance, and seemed to be the only active person at the time. We'd often chatted about issues in IRC and they were usually super helpful, when they told me they were no longer involved I kind of gave up hope.
Glad to see things seem to have rebounded since, and my roof is all done so maybe I'll retry some of the things I was tripping over bugs attempting, using the latest release.
Whitequark said the project was in (several) good hands and called me out by name. Jonathan then contacted me to kind of formalize my promotion and my first action was to invite several important contributors to the "solvespace organization" on github. They aren't super active but made important contributions, and I feel like I can call on them for issues in specific areas and they respond as well as I could hope for OSS volunteers. The project seems much more secure as a result, while development remains slow but steady ;-)
I don't think the problem is really the ID list implementation, but algorithms with O(n*2) time complexity. Evey time we improve the ID list by a decent amount someone just adds a few more components or whatever and it slows down again.
So far my experience with both SolveSpace and FreeCAD have been: Even if you can reuse a part of your design multiple times (and even this is a nontrivial problem), you surely can't do that with different parameters!
My brain hurts from how it goes against all programming principles about DNRY, modularity, and composability.
OpenSCAD is great, but sometimes I just want to fidget around with an object like in this SolveSpace demo video.
As a novice it does seem to me that there's room for an open source CAD tool that offers a bridge between the two approaches. For what it's worth my opinions on a few tools:
• SolveSpace - solid, but a bit limited in its capabilities (e.g. no fillets or chamfers)
• FreeCAD - very powerful but almost unusably buggy (others seem to have had better experiences)
• OpenSCAD - very powerful but requires coding for everything
Then there are various non-3D cad tools and a few online ones (of which I've got the most use out of TinkerCAD which is easy to use because it is very limited in its capabilities)
It is great if your design consists of boolean operations of several independent components. But many designs require complex interdependent relationships between the component geometries. Your OpenSCAD file will begin to contain a lot of trigonometry, projections, linear solves, etc. Eventually you will need a nonlinear solver...
I really enjoyed writing OpenSCAD code when it was suitable, though. Now I want to learn if there are any code-based constraint-based CAD packages.
You cannot query generated or imported geometry in any way. Not even calculate bounding box which can come handy if you want to place something on top of your model etc..
Equally big problem is schizma between modules and functions. Functions can't draw anything but can return values. Modules can draw but can't return anything. So you cannot even calculate the bounding box (or anything similar) yourself even without STL import.
CadQuery on the other can do queries.. give me bounding box. give me a second face parallel with XY from this point in direction of +Z.
Btw. FreeCAD bugginess realy varies. I have had a much better experience with a package built from master on Gentoo and Nix than with the stable appimage.
https://github.com/CadQuery/cadquery
There seems to be just one maintainer dealing with build related things and he is of a very different opinion what is anti-pattern or just don't want absolutely anybody to touch his code into which he poured his hours.
https://github.com/CadQuery/OCP/pull/61 https://github.com/CadQuery/pywrap/pull/38
Yeah. I'm salty about it.
You're not the only one. CadQuery will never catch on until they sever conda with a chainsaw.
Just not an option for most folks.
This is really interesting point, and I understand how you feel like that, however I completely disagree.
I have both a software/programming and industrial/product design background with extensive experience of professional CAD tools such as SolidWorks and Creo(Pro/E).
Parametric CAD, in my view, is a perfect example of "visual programming", you have variables, iteration/patterning reducing repetition, composability of objects/sketches again reducing repetition, modularity of design though a hierarchy of assemblies. The alignment between programming principles and CAD modelling principles, while not immediately obvious, are very much there. An elegantly designed CAD model is just as beautiful (in its construction) as elegantly written code.
Also just as in software where there are "methodologies" and techniques such as TDD, with cad there are methodologies to constructing a model, such as "top down", "bottom up" and "skeleton modelling". All about ensuring your design intent is captured, the models are maintainable and will update successfully with parametric changes.
When modelling with parametric CAD you are not only designing the object, you are designing a cad model that represents the design intent in an elegant and maintainable way.
> So far my experience with both SolveSpace and FreeCAD have been: Even if you can reuse a part of your design multiple times (and even this is a nontrivial problem), you surely can't do that with different parameters!
True SolveSpace and FreeCAD can't do this, however all professional CAD packages can and it's an important feature of them. In SolidWorks they are called "configurations" and can be driven by an excel spreadsheet, you can literally create thousands of variations from a single model.
We can use more people with both backgrounds to work on Solvespace ;-)
This is on the radar for Solvespace but it's going to be fairly major rework to get it right. I'm still learning how all the pieces of the code fit together. The group structure in Solvespace is kinda crap - groups are "solver groups" meaning each group is costraint-solved independently with parameters in other groups held constant. Named parameters will help and there is a branch, but we need to work out scoping rules and some other stuff.
What I'd really like is the ability to make assemblies with multiple parts linked in the same group. And ultimately to have free parameters in those linked parts, but that's really challenging. Expert coders welcome to have a look.
https://github.com/deadsy/sdfx
In general I like to write code to define objects, but there are some situations where a graphical editing UI would be nice. ie- Curve and polygon design.
You can sort of imagine a hybrid approach where you could crack open a mini editor to design a curve and then use it to generate code (table of numbers) which you could then extrude/sweep/loft or whatever.
The main advantage of OpenSCAD is that it doesn't "blow up" when you change a variable to be out of some range where things work. In OpenSCAD, you can put it back if it does cause a problem.
Changing a dimension in SolveSpace sometimes throws off the whole design. SolveSpace's precision, constraints, and great keyboard user interface make it a fun program to design parts in. It is among the best open source tools out there.
I tried out "plasticity" (trying to get off of FreeCad) but prefer this as it's very simple to use.
I'm curious, what makes you think that?
There is also solvespace-cli which is built along with it. Nice for doing things like generating thumbnails of sketches.
It was lacking in one type of constraint, but it was open source so I was able to extend the code and contribute a feature after 8 years of weekly use.
Keep at it! There is a bit of learning curve and we need more people to keep climbing it. My way in was though the NURBS code which hadn't been touched in 2 or 3 years when I found it.
Old comment: https://github.com/solvespace/solvespace/issues/453#issuecom...
https://github.com/solvespace/solvespace/issues/149
https://github.com/solvespace/solvespace/issues/453
https://github.com/solvespace/solvespace/issues/577
edit: dang, got ninja'd by one of the devs in the cited threads!
Geometric constraints.
Make detailed dimensioned drawings and 3D models suitable for sending to a machine shop to get real parts made. Also export STEP files for other CAD/CAM applications.
My biggest gripe with SolveSpace won't let you write code, everything is done in the UI which is very limiting and a big turn-off, especially given what the underlying geometry engine is capable of.
On the other hand, OpenSCAD doesn't have a constraint solver (you can't easily say something like "compute the intersection of these two circles and project the resulting point on this surface and extrude a cylinder from that point along the normal of that surface"), whereas SolveSpace does, and it's a very powerful way to model things.
OpenSCAD is also very annoying in the sense that it doesn't allow you to "probe" your model to construct it further: it has exactly zero self-introspection features. To give a simple example, it's almost impossible to compute the bounding box of a model or its barycenter, which is very limiting.
Otherwise it’s a bit less flexible — e.g. it’s harder to do value constraints (e.g get dimensions from a spreadsheet); and it isn’t compatible with scripting yet; you can’t just point-click-chamfer your parts; you need to do metric holes and indents for bolt heads manually; etc, etc
But what is available works almost without any problems (except for 3D constraints and occasional problems with difference operations on curved surfaces) — and is soo fun to use.