I read up on this a bit, and the general advice is either âbuy a $35K printerâ or âadd a fudge factor of 0.02mm to everythingâ. Neither is satisfactory.
The solution I have come up with is twofold:
-
print and measure a test piece for every new filament to determine how much of a fudge factor is needed for various features
-
for prints that require accurate features (basically anything that isnât a toy or decoration), print a base layer (usually 0.5mm, sinking the model into the build surface in Cura if measurements on the top need to be accurate)
This has become part of the design phase, as generally the designs are intended for a specific filament, so the fudge factor is added (and commented) in the .scad file and the STL re-generated.
Sucks to have to do this, but it works.
The test piece is simple:
include <MCAD/math.scad>
inch = mm_per_inch;
half_inch = mm_per_inch * 0.5;
quarter_inch = mm_per_inch * 0.25;
eighth = mm_per_inch * 0.125;
sixteenth = mm_per_inch * 0.0625;
difference() {
// base and tabs
union() {
cube([inch, inch+half_inch, sixteenth]);
translate([half_inch + quarter_inch, sixteenth + (2*quarter_inch), 0]) {
cylinder(d=quarter_inch, h=eighth, $fn=99);
translate([0, quarter_inch+sixteenth, 0])
cylinder(d=eighth, h=eighth, $fn=99);
translate([0, half_inch + eighth, 0])
cylinder(d=sixteenth, h=eighth, $fn=99);
}
translate([eighth, inch+half_inch-eighth, 0])
cube([half_inch, sixteenth, eighth]);
}
// holes
translate([quarter_inch, half_inch, 0])
cube([eighth, eighth, sixteenth]);
translate([eighth, half_inch + quarter_inch, 0])
cube([half_inch, half_inch, sixteenth]);
translate([sixteenth, sixteenth, 0])
cube([half_inch, quarter_inch, sixteenth]);
translate([half_inch + quarter_inch, quarter_inch, 0]) {
cylinder(d=quarter_inch, h=sixteenth, $fn=99);
translate([0, half_inch + quarter_inch + sixteenth, 0])
cylinder(d=eighth, h=sixteenth, $fn=99);
translate([0, inch+sixteenth, 0])
cylinder(d=sixteenth, h=sixteenth, $fn=99);
}
}
Just a few holes and tabs that have to be the same size (and always arenât), a fixed distance from the edges (usually off by about 0.01" , and even that could be measurement error).
Hereâs the STL:
imperial-feature-measure-test.stl (406.3 KB)
The quick-and-simple use is to measure each hole and cylindrical tab; the difference of each from nominal will provide guidelines on how to compensate for plasticity in those feature types (spoiler: itâs not as simple as adding a fixed number). Iâll probably bang out some accompanying code to determine the specifics based on an input file of expected-vs-actual measurements (for distance, ID, OD, etc)