Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
SolveSpace – Parametric 2D/3D CAD (solvespace.com)
199 points by cab404 on May 22, 2022 | hide | past | favorite | 82 comments


I keep a short file of quotes about solvespace:

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.


SolveSpace is by far the most interesting thing happening in open source 3D parametric CAD, specifically because they have built their own advanced parametric CAD kernel and constraint solver. The only other "advanced" open source kernel is Open Cascade which is a little difficult to work with, and nowhere near the commercial Parasolid in its functionality and accessibility. I would love to see some significant sponsorship of SolveSpace, there is enormous potential for a modern and useable Parametric Kernel.


For people not familiar with it, Parasolid is the geometry engine that powers a bunch of prominent commercial CAD/CAD-adjacent tools. SolidWorks, Onshape, Ansys, Abaqus etc. It's kind of the benchmark to beat for open source competitors like SolveSpace, which I agree is a very exciting tool.


A while ago I found CAD Sketcher https://www.cadsketcher.com/ which integrates SolveSpace constrain solver in Blender which while might still not be a fully useful working tool is pretty interesting to play with.

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 am similar. I started using Blender for 3D printing models and while it is awkward - it works. And it has the potential to do so much other really cool stuff.

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.


Slightly OOT: What software (can be paid) for designing a house? I'm a software engineer with no background in civil engineering / related fields. AutoCAD is too complex, Photoshop too abstract. I'm thinking the Sims :) But I need "real" measurements.

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.


Sketchup is really in a nice spot for this kind of stuff.

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 :/


There's a web version at my.sketchup.com. It lacks some of the features of the desktop software, but works well enough. I drew up the interior of my home to aid in renovations.

I also use it for modeling 3D prints when I don't need the part to be parameterized.



Second this. It’s free and simple


My dad essentially "designed" 2 houses using nothing but Excel with square cells. He's an Excel fan and an engineer... seemed to work quite well.

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.


Please post screenshots of this!


It's a stretch, but Solvespace has been used:

https://github.com/solvespace/solvespace/issues/430#issuecom...


I've had good experiences with Home Designer [1]. Used it to mock up how I wanted my basement finished [2] so I could solicit quotes and ended up running around the house measuring rooms so I could model the rest of the house (for fun... didn't really serve a purpose).

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...


I looked at a bunch a while back and found this to be a nice middle ground with a usable mobile interface: https://floorplancreator.net/

Paid version can export to DXF (AutoCAD)


Rhinoceros is $800 and used for product design, shipbuilding and architecture. We’re currently getting permits and structural done on our family home with drawings created with it. It also comes with a parametric solver system, grasshopper.


> I'm thinking the Sims :) But I need "real" measurements.

Perhaps one of these?

https://floorplanner.com/

https://planner5d.com/

https://www.smart3dplanner.de/


SketchUp. Pretty easy for an amateur/hobbyist to learn, powerful enough that your architect might use it, too. You can try the web based version for free.


SketchUp is probably a good option for your use case, although I've never used it (or any other CAD).


Autodesk inventor architectural looks very easy to use but might be way too expensive.


Sketchup

Also: Blender.


This is by far my favorite CAD program for quick engineering-oriented designs.

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...


That ID list change never made it in and AFAICT it isn't known to be complete. The performance gain was huge though. We have made a lot of progress on performance over the last couple years and it's way better than the old 2.3 version. Version 3.1 incorporates Eigen for matrix operations in the solver - another old contribution by Alexey Egorov that we finally merged.

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.


You should really give Solvespace 3.x a shot... it's come a long way and a lot of performance issues have been solved.


It does look like they finally improved the IdList in 2021 according to [0]. When I have time I'll give it a spin on some of the models I was last working on.

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...


>> but a bunch of new bugs had been introduced.

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.


It saddened me at the time as well, and normally I would have spent substantial time working with upstream to try fix such regressions.

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.


>> Another factor around that era was whitequark had abruptly quit SolveSpace maintenance, and seemed to be the only active person at the time.

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 ;-)


This software is low key the best open source CAD software. Although it looks ancient, it's under active development and has a much lower learning curve than FreeCAD IMHO. It's a really good fit for the skill level of someone who has a 3D printer. I've designed dozens of parts for my printer and random crap around the house with Solvespace. It's a very useful tool.


Version 3.1 allows you to use the link feature to bring in STL files. The 3D printing crowd should love it.


Just guaranteed me to look at it!


I have a big conceptual problem with these interactive editors: I'm a programmer and am very used to splitting things into functions and objects which can be then called with / have different parameters and be composed into another functions and objects.

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.


Have you played around with OpenSCAD? That comes from the programmatic direction.

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)


OpenSCAD is just a generator.

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.


OpenSCAD lacks a constraint solver so cannot, IMO, be called "very powerful".

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.


How does blender not meet these needs?


Blender is very very good for animation and 3d graphics. But it is not designed well for engineering and cad. It certainly can be used but many of the tooling is not designed for 3d printed parts for example.


> My brain hurts from how it goes against all programming principles about DNRY, modularity, and composability.

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.


>> 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).

We can use more people with both backgrounds to work on Solvespace ;-)


There are ways to do this in FreeCAD. Including spreadsheets.


Look at OnShape. Freemium option available! You can make models that are parameter driven and then import those models elsewhere and use different parameters. It is fully DRY if you learn how to use it properly. There is even a JavaScript like language called feature script that allows you to design your own feature tree nodes parameterized and validated as you like with custom UI and custom geometry driven by the parameters. Amazing system. For kicks I wrote a surfboard design tool that generates a skeleton frame for hollow wood veneer surfboards. It was just an excercise in "can I do it" but it turned out well.


I would also suggest having a look at CadQuery, SolidPython, and PyMesh:

https://github.com/CadQuery/cadquery

https://github.com/SolidCode/SolidPython

https://github.com/PyMesh/PyMesh


CadQuery is very nice except for its DevOps side. Its whole build system for producing Conda packages (some may consider Conda problem in itself) is super-dependent on Azure pipelines. Even bigger problem is that it's riddled with hardcoded paths, redundant copies of files, disregarding recommended usage notes of its 3rd party libraries.. basically it contains every DevOps related anti-pattern you can think of.

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.


> Yeah. I'm salty about it.

You're not the only one. CadQuery will never catch on until they sever conda with a chainsaw.


CadQuery is damn near impossible to install without ruining your system (drags in the whole ffing conda ecosystem).

Just not an option for most folks.


>> 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!

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.


Would be interesting if something like OpenSCAD had an interactive editor that allowed for exporting to an openscad code module.

OpenSCAD is great, but sometimes I just want to fidget around with an object like in this SolveSpace demo video.


I find using spreadsheet functionality and referencing those values works pretty well. you might use something like assembly4 plugin as well.


It's not about reusing values. It's about reusing whole complex designs. I know that there is some very very new feature called Variant link but I haven't managed to comprehend it yet.


I wrote this (in golang) to satisfy my need to generate STLs for 3d printing.

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.


A hybrid approach where you could "sketch" with SolveSpace, but then generate OpenSCAD style code that you could later edit would be amazing.

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.


Alternately, it would be way cool to have a modeling language which would make designs for Solvespace.


This is a nice piece of software, but I wish they had a clean, documented Python API to be able to drive it purely programatically (à la OpenSCAD / CADQuery).


Yes. I couldn't even figure out from the reference manual how to generate an input file programmatically. Presumably the saved file format is human readable, and could be reverse-engineered, but documentation would help.


The is a python API for it's constraints solver: https://pyslvs-ui.readthedocs.io/en/stable/python-solvespace... However the solid geometry engine is tightly coupled with the application and not exposed by a public API.


This feels like a terminal based 3d application, and I love it!

I tried out "plasticity" (trying to get off of FreeCad) but prefer this as it's very simple to use.


Now you mention it it does remind me vaguely of Tektronix and VT320 interactions with applications on a Vax in my university days!


>> This feels like a terminal based 3d application, and I love it!

There is also solvespace-cli which is built along with it. Nice for doing things like generating thumbnails of sketches.


> This feels like a terminal based 3d application

I'm curious, what makes you think that?


From my point of view, the default color palette give a very strong impression of that feel


Love this piece of software! I tried a few other free CAD programs before and this is one my favorite.


I have to give this upvotes every few years this resurfaces on HN. This is the best option for visualizing linkages and the outputs from such mechanisms.

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.


>> 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.


Although apparently(?) less engineering-oriented, check out OpenScad, which has a much wider install base and I think is more mature with a large ecosystem:

https://openscad.org/


Their approach seems different. SolveSpace is interactive-oriented (similar to most CAD programs) whereas OSCAD is code-oriented. Depending on what someone is doing guess they're complementary?


SolveSpace, if it added a python API to its geometry engine and constraint solver would be the best of both worlds and an absolute killer app.


JFYI, Here are my SolveSpace showcases (models & videos).[0]

[0] https://git.io/DailySolveSpace


As someone with simple 2D drafting needs, who wanted a reason to throw QCAD out a 10th story window, thank you OP.


One issue is that they won’t add fillets and chamfers.


I don't think that's an accurate way of saying it, and that a better way is that "Solvespace doesn't have tools to generate fillets and chamfers. The developers have shown some limited examples, but adding full-featured tools would be very difficult."

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!


It's on the radar. As has been discussed many times, a general edge modifier tool is a long way out for technical reasons. I was working on adding Chamfer/Fillet/ and Draft Angle to straight extrusions which will cover many use cases. But even that needs a bunch more work.

Old comment: https://github.com/solvespace/solvespace/issues/453#issuecom...


Could you provide a bit more detail about this? I haven't tried it, but I would expect that you could just define another surface with a such-and-such borders and such-and-such curvature?


I was hoping this was a modelling software with solvers for electro/thermo/aero dynamics, etc. What is this solving?


>> What is this solving?

Geometric constraints.


Ahh gotcha


What does this do that I can't do in Blender?


>> What does this do that I can't do in Blender?

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.


There's an effort to make this available in Blender:

https://www.cadsketcher.com/


So why would I choose his over openscad? What’s better/worse?


These are just different.

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.


Solvespace 3.1 (due soon RC1 is out) will allow linking STL files, so you can do your OpenSCAD stuff that way, then link in the STLs in solvespace. Not sure how useful that's going to be but it's something for those who like both tools.


Actually, I chose it over Openscad for one reason — it doesn’t crash that often)

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.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: