[OpenSCAD] Engineering Fits and Tolerance
alex at alexgibson.net
Thu Oct 31 07:28:37 EDT 2019
Going back to your original question Hugh, and your example:
cylinder(d = 5, h = 2, $fit = “g6”);
The way I've seen a lot of machine parts (usually 3D printer) programmed in OpenSCAD is this:
cylinder(d = g6, h = 2);
...and above this at the top of the file...
fit_tolerance = 0.5;
machine_tolerance = 0.2;
g6 = 5+fit_tolerance+machine_tolerance;
Rather than being 'piecemeal' I think building up layers of tolerance like this can be very helpful and reduce confusion and repetitive typing within the body of your design code. Every time you want that size hole in your project, you just use d= g6 by name. You can tune the tolerances after the initial design without re-coding.
The idea of a global $fit variable seems nice, but you would have to have it associated with a big table which defines what g6 and many other tolerances are, which you'd need to remember as you are designing the part. Also it could not take into account multiple fudge factors, and to me that's the real beauty of OpenSCAD for this sort of thing.
Have you tried a similar method, defining named dimensions?
One think I've started to do in my recent bigger projects is to break out dimensions and specific geometry modules into their own separate files:
0_dimensions.scad <named dimensions - for example m3_bolt_hole = 3.2; < this is where I do all tolerances etc.
1_geometry.scad <for example Nema 17 mount pattern holes, as a 2D pattern
2_component <say a 3D printed mount for the motor
3_subassembly <say the mount with motor, screws, pulley etc
4_majorassembly <say the whole axis
5_render <the whole project for rendering.
This has really helped me to improve version control and ease of navigation around complex projects - and made it easier to recycle code and incorporate scanned or downloaded parts.
• Project management
• Operations & Process improvement
• 3D Printing
From: Discuss [mailto:discuss-bounces at lists.openscad.org] On Behalf Of Hugo Jackson
Sent: 29 October 2019 22:00
To: OpenSCAD general discussion
Subject: [OpenSCAD] Engineering Fits and Tolerance
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.
OpenSCAD mailing list
Discuss at lists.openscad.org
More information about the Discuss