[OpenSCAD] Engineering Fits and Tolerance

Hugo Jackson hugo at apres.net
Tue Oct 29 18:00:14 EDT 2019

Has any thought been given to incorporating engineering fits and tolerances into OpenSCAD? As I understand it, OpenSCAD was originally conceived for the creation of STL files for a 3D printer and I’ve been thinking that the base functionality might be improved by a little more CAM in the CAD.

For some time I’ve been using wrappers around most of the OpenSCAD modules in order to introduce engineering fits into the parts I create as 3d printers on the whole offer increasing precision and repeatability.

Using a special variable $fit I can arbitrarily call up a module and it will adjust the the final size of the geometry according to the engineering fit I specify. e.g.

	cylinder(d = 5, h = 2, $fit = “g6”);

I think anyone who has created interconnecting parts is familiar with the requirement to adjust for tolerance, but the core language as it stands requires this to be accomplished on a piecemeal basis, but to my way of thinking fit and tolerance are integral to the original purpose of OpenSCAD.

I think this is particularly relevant as more and more users are acquiring machines that use different processes and that I might well wish to print a part on an FDM printer one day and a DLP the next, which I think would naturally call for a different fit specification.

I also created some constants: kLeft, kRight, kFront, kBack, kTop & kBottom and use 6 element arrays to selectively apply tolerance, and use a special variable $faces to pass on that information as required:

	cube([7,3,8], $fit = “H11”, $faces = kLeft + kRight);

And of course if I’m creating a project with lots of references to fit then I simply create an identifier for the fit, e.g.

shaftFit = “h7”;

So that if I move to a different type of machine where more or less tolerance is indicated, I only need to change the definition of shaftFit.

I did some poking around in the mailing list archives and couldn’t see any reference to a discussion on this, but I’m sure it’s occurred to others before me, I just thought I’d ask where the community stands on incorporating this kind of functionality into the core language.

More information about the Discuss mailing list