<p>Cura does correctly account for line extrusion widths wheen positioning the lines, and attempting to fix this with negative <code>xy_offset</code> was a mistake that led to lots of problems: in some cases, it completely eliminated tiny components of the model and left gaps in layers. At some point after asking this question, I did a new test with 8mm peg and hole, and I was actually able to force the 8mm peg into the hole (but not remove it) using tools, without cracking the parts, so I think past tiny sizes where dimensional accuracy is very difficult to achieve, everything is just about right.</p>

CC BY-SA 4.0
2019-06-08T20:10:40.563Z
2019-06-08T20:10:40.563Z
R.. GitHub STOP HELPING ICE
<p>Filament expands slightly as it is extruded. Also, the width of the extrusion depends on the volume of plastic extruded (not the nozzle size), as well as the amount that it is "squidged" down. Some slicers (e.g. Simplify3D) allow you to specify the width of the extrusion that you desire, but I'm not sure if Cura does this. You can fine tune the width of extrusions by adjusting the flow rate. Note that apertures get larger as nozzles wear out, but this should not affect the width of the extrusion very much since the determining factor is volumetric flow rate.</p>

<p>I would say that if you are getting a dimensional accuracy of +/- 0.1mm, you are doing pretty well. If you want to improve on this, you will need to calibrate your extruder and also monitor closely the average diameter of the filament that you are using. I have included a link to an external article, since doing this is beyond the scope of my answer. However, I doubt if it is possible to get push-fit accuracy with FDM printing without fudging the dimensions of the objects that you want to print.</p>

<p><a href="https://www.3dhubs.com/talk/t/howto-calibrate-tune-and-fine-tune-your-printer-and-filament/5695" rel="nofollow noreferrer">3D Hubs: How to calibrate, tune and fine tune your printer and filament</a></p>

CC BY-SA 4.0
2019-02-09T09:52:32.440Z
The effect you are describing is called "die swell"; you can counteract this effect in the [calibration of the extruder](/a/6484/).
0scar
CC BY-SA 4.0
2019-02-09T13:59:59.570Z
Do you know if Cura compensates for the width of extrusion it's attempting to produce by positioning of the path? Of course this won't solve the problem if the width of extrusion (after "die swell") differs from what it expects, but if it doesn't do such compensation I don't think any reduction in extrusion rate could fix this.
R.. GitHub STOP HELPING ICE
CC BY-SA 4.0
2019-02-09T14:29:20.750Z
I've no idea. You could, of course, just examine the G-code. S3D sets a default line width of 0.48mm for a 0.4mm nozzle, whereas Cura just uses the nozzle diameter. Maybe S3D is trying to compensate for die swell?
Mick
CC BY-SA 4.0
2019-02-09T14:37:33.740Z
Interesting. Yeah, I probably need to dig into the gcode output to figure out what it's doing (or the source, but that's usually worse).
R.. GitHub STOP HELPING ICE
CC BY-SA 4.0
2019-02-11T19:00:12.683Z
I'm not sure I'd call it "fudging."  For a given material, and a reasonable range of hole sizes, you should be able to *calibrate* (much nicer-sounding word :-) ) the excess pin diameter and/or the loss of hole diameter.
Carl Witthoft
CC BY-SA 4.0
2019-02-11T19:38:05.610Z
@CarlWitthoft: I'd call it *fudging* (or *a hack*) if you have to modify the object geometry rather than the slicing parameters to fix it. *Calibration* should be something that happens at the slicing layer to produce an output that accurately reflects the source model.
R.. GitHub STOP HELPING ICE
CC BY-SA 4.0
2019-02-11T19:50:09.757Z
I think the `wall_0_inset` setting of CuraEngine might be what I need. It looks like it's auto-set when called from Cura python gui (but doesn't do anything even then unless `wall_line_width_0` is less than `machine_nozzle_size`), but needs to be computed and set manually when invoking CuraEngine directly.
R.. GitHub STOP HELPING ICE
CC BY-SA 4.0
2019-02-11T20:08:52.250Z
Or perhaps just `xy_offset`...
R.. GitHub STOP HELPING ICE
CC BY-SA 4.0
2019-02-11T21:29:39.307Z
I've been able to fudge/calibrate it with either `xy_offset=-0.1` or `material_flow=80`, but the latter leaves serious ridges in the top skin and obviously isn't right. I haven't been able to get `wall_0_inset` to do anything meaningful.
R.. GitHub STOP HELPING ICE
CC BY-SA 4.0
2019-02-11T23:20:31.380Z
@Mick: From examining the gcode, Cura does indeed position the path for the outer wall inset by half the nozzle-width from the surface. Further, `xy_offset` behaves as expected and allows it to be offset from there in either direction.
R.. GitHub STOP HELPING ICE
CC BY-SA 4.0
2019-02-09T08:20:41.960Z
2019-02-09T08:25:45.100Z
2019-02-09T08:25:45.100Z
Mick
<p>Using CuraEngine with my Ender 3, I'm getting what I'd call inconsistent inner and outer dimensions - for example, a nominally 3&nbsp;mm peg is significantly larger than a 3&nbsp;mm hole, and it takes dimensions something like 2.9&nbsp;mm for the peg and 3.1&nbsp;mm for the hole to get them to fit. Is this level of error normal? Is it caused by overextrusion, or does CuraEngine run its paths along the curve of the slice rather than offset by approximately half the nozzle width inside the sliced region? The magnitude of the error being almost exactly 0.2&nbsp;mm, which is half of the 0.4&nbsp;mm nozzle diameter, makes me wonder if it's the latter.</p>

<print-quality><ultimaker-cura><slicing><creality-ender-3>
Inconsistent inner/outer dimensions
R.. GitHub STOP HELPING ICE
# Inconsistent inner/outer dimensions

(Asked by: username_0 on 2019-02-09)

Using CuraEngine with my Ender 3, I'm getting what I'd call inconsistent inner and outer dimensions - for example, a nominally 3 mm peg is significantly larger than a 3 mm hole, and it takes dimensions something like 2.9 mm for the peg and 3.1 mm for the hole to get them to fit. Is this level of error normal? Is it caused by overextrusion, or does CuraEngine run its paths along the curve of the slice rather than offset by approximately half the nozzle width inside the sliced region? The magnitude of the error being almost exactly 0.2 mm, which is half of the 0.4 mm nozzle diameter, makes me wonder if it's the latter.

**Tags:** print-quality, ultimaker-cura, slicing, creality-ender-3


---

## 2 answers

### Answer by username_0 on 2019-06-08. Score: 0 | Accepted answer

Cura does correctly account for line extrusion widths wheen positioning the lines, and attempting to fix this with negative `xy_offset` was a mistake that led to lots of problems: in some cases, it completely eliminated tiny components of the model and left gaps in layers. At some point after asking this question, I did a new test with 8mm peg and hole, and I was actually able to force the 8mm peg into the hole (but not remove it) using tools, without cracking the parts, so I think past tiny sizes where dimensional accuracy is very difficult to achieve, everything is just about right.


---

### Answer by username_1 on 2019-02-09. Score: 3

Filament expands slightly as it is extruded. Also, the width of the extrusion depends on the volume of plastic extruded (not the nozzle size), as well as the amount that it is "squidged" down. Some slicers (e.g. Simplify3D) allow you to specify the width of the extrusion that you desire, but I'm not sure if Cura does this. You can fine tune the width of extrusions by adjusting the flow rate. Note that apertures get larger as nozzles wear out, but this should not affect the width of the extrusion very much since the determining factor is volumetric flow rate.

I would say that if you are getting a dimensional accuracy of +/- 0.1mm, you are doing pretty well. If you want to improve on this, you will need to calibrate your extruder and also monitor closely the average diameter of the filament that you are using. I have included a link to an external article, since doing this is beyond the scope of my answer. However, I doubt if it is possible to get push-fit accuracy with FDM printing without fudging the dimensions of the objects that you want to print.

[3D Hubs: How to calibrate, tune and fine tune your printer and filament](https://www.3dhubs.com/talk/t/howto-calibrate-tune-and-fine-tune-your-printer-and-filament/5695)

> **Comments:**
> **username_2**: The effect you are describing is called "die swell"; you can counteract this effect in the [calibration of the extruder](/a/6484/).  
> **username_0**: Do you know if Cura compensates for the width of extrusion it's attempting to produce by positioning of the path? Of course this won't solve the problem if the width of extrusion (after "die swell") differs from what it expects, but if it doesn't do such compensation I don't think any reduction in extrusion rate could fix this.  
> **username_1**: I've no idea. You could, of course, just examine the G-code. S3D sets a default line width of 0.48mm for a 0.4mm nozzle, whereas Cura just uses the nozzle diameter. Maybe S3D is trying to compensate for die swell?  
> **username_0**: Interesting. Yeah, I probably need to dig into the gcode output to figure out what it's doing (or the source, but that's usually worse).  
> **username_3**: I'm not sure I'd call it "fudging."  For a given material, and a reasonable range of hole sizes, you should be able to *calibrate* (much nicer-sounding word :-) ) the excess pin diameter and/or the loss of hole diameter.  
> **username_0**: @username_3: I'd call it *fudging* (or *a hack*) if you have to modify the object geometry rather than the slicing parameters to fix it. *Calibration* should be something that happens at the slicing layer to produce an output that accurately reflects the source model.  
> **username_0**: I think the `wall_0_inset` setting of CuraEngine might be what I need. It looks like it's auto-set when called from Cura python gui (but doesn't do anything even then unless `wall_line_width_0` is less than `machine_nozzle_size`), but needs to be computed and set manually when invoking CuraEngine directly.  
> **username_0**: Or perhaps just `xy_offset`...  
> **username_0**: I've been able to fudge/calibrate it with either `xy_offset=-0.1` or `material_flow=80`, but the latter leaves serious ridges in the top skin and obviously isn't right. I haven't been able to get `wall_0_inset` to do anything meaningful.  
> **username_0**: @username_1: From examining the gcode, Cura does indeed position the path for the outer wall inset by half the nozzle-width from the surface. Further, `xy_offset` behaves as expected and allows it to be offset from there in either direction.  

---

