Last year I posted an article about a baseball cap head-up display. I’ve been looking to improve on it, and have decided to use CAD and 3D printing to do it properly. So the first step was to learn a CAD package, preferably something free and available under Linux.

I thought I’d try FreeCAD. I don’t know whether this is common among CAD packages, but I really enjoyed the way its Sketcher tool uses constraint-based rules to specify the design. Instead of specifying (x,y) coordinates for each point, you first draw approximate lines and then start imposing constraints. For example, you might specify that a line is 15mm long, or that two lines must be angled 60 degrees from each other, or that two points must have a horizontal separation of 20mm.

Every time a constraint is added the degrees-of-freedom counter goes down, and when it hits zero you have a fully-constrained design, ready for export.

At least, that’s the theory. In practice, FreeCAD is still in beta, and I ran into a few problems …

  • Crashes. Frequent crashes. They’re not hard to reproduce, and crash bugs are pretty easy to catch and fix, so I’m surprised they’re still around. Or maybe they’re not easy to fix, in which case an auto-save feature is needed urgently.
  • Performance. I was sketching the cross-section of a 75mm radius parabolic dish at 1mm intervals, and as I was getting to 150 points it was taking over 10 seconds to re-calculate after adding each new point. Given that a basic PC can do over a billion floating point operations per second, that’s really poor, especially since half the points were locked with explicit (x,y) coordinates and didn’t need re-calculating.
  • Lack of feedback. After entering all the points it becomes a game of tracking down and removing all the degrees of freedom. But the interface doesn’t show which points are unconstrained, so a lot of guesswork is required. That’s a pain when there are 150 points and when you’ve accidentally put two points in the same location and one of them is unconstrained.
  • Needs another constraint type. When designing 3D objects it’s fairly common to construct a “wall” around a complex shape, for example when designing a hollow object. So it would be really nice to be able to constrain two lines to be parallel and separated by a certain distance. FreeCAD lets you set two lines to be parallel, and you can constrain a point to be a certain distance from a line, and if you use both of these simultaneously you can achieve the desired result. But it’s easy to make mistakes and the rules are difficult to maintain, so a single constraint would be much better.
  • Needs B-splines. I realize it can be difficult to calculate constraints for polynomial curves, but if you’re making a 3D object odds are it needs a curved surface of some sort. My parabolic dish certainly does. How about constraining the points based on the straight line segments, but rendering them as B-splines?

Anyway, I’ve now finished drawing the parabolic curve. Luckily I realized that you only need half a parabola to create a 3D dish, since it gets rotated around its Y axis. It remains to be seen whether the 3D editing tools in FreeCAD are up to scratch.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s