Chamfer Not Obeying Tolerances

I realize that it would be a better process if I revolved this object with a chamfer already in its profile, yet I would appreciate it, if the chamfer command would obey my tolerances.

Steps to reproduce:
Draw a cylinder.
Chamfer it.
Dimension the inner edge result at varying radials.

(Thank you)

Chamfer.3dm (503.9 KB)

Hi Brenda,

What are you measuring? If I make a chamfer with distance 0.05, then compare the inner circle to a circle of radius 0.95, the deviation is 1.72e-07, which is about 1/10 of your tolerance. Since the inner curve of the chamfer is not a true circle, the radius will vary as you go around it. I do think that we should recognize when a chamfer is a simple shape (cone in this case) and give the exact answer.

Hi Chuck,

I don’t know what you are seeing, but I am seeing a diameter change at the .00x000 position.
In measuring the inner edge of the chamfer, I am seeing from: 1.93657 to 1.93798.

My absolute and relative tolerances are both set at an overkill setting of: .0000001. My angular tolerances are .001 Degree.

At these tolerance settings, a user should be able to make a telescope mirror, not worrying about press-fit bearings. Neither of those examples are exaggerations.

I need to chamfer an inside hole with a woodruff key slot in it, so it would seem that making an exception may not work for that.

I consider this a serious issue because we need that we can count on Rhino’s stated accuracy.

The problem is that the inner “circle” is not a true circle, but an approximation to one. DimDiameter measures the the local radius of curvature and doubles it. Absolute tolerance has nothing to do with the range of values for the local radius of curvature of the inner curve, which is an approximation to the exact circle that you expect. It is a measurement of the maximum deviation of the approximation to the theoretical answer. For an absurd example, the approximation could consist of line segments of length 0.00000001. The approximation would be well within tolerance, but the radius would be infinite everywhere. As I said, Rhino should, but doesn’t, recognize simple cases like this where the exact answer can be found, and use the exact answer rather than the approximation. This would make the dimensioning look nicer. I hope to get to that for v6.

Hope to get it in V6?

If it were a press-fit bearing, it would fail!
If it were your car’s crankshaft, your engine would seize.
If it were your hard drive, you would lose your data.

The inner curve in your chamfer is off of the exact answer by 18 times the width of an aluminum atom.


I am sorry, but that is not correct. The range varies by 0.00141 inches, not millimeters.

This is a problem.

[For instance, I press-fit bearing of that size only has .001 interference to secure it. Such bearings are in your car alternator, the water pump. A piece of hair is about, 0.00141, and we can see that. For noting, a competent machinist can lathe a cylinder or bore a hole about 1/5 of that tolerance before heat becomes an issue. My nice but unexceptional $100 average Mitutoyo micrometer can measure to .00005 inches.]

You are not understanding what I am saying. Make a circle of the correct radius, with the correct center, and compare it, as a set of points, to the inner curve of the chamfer using CrvDeviation. You will see that they are the same to about 0.0000001. You cannot use DimDiameter to measure something that is not a perfect circle. It has no meaning whatsoever.

Here’s an example- see how the radius of the red curve varies by more than a unit depending on where you ask, but the deviation from the exact circle at r=32 is only .014.

Deviation vs radius deviation.3dm (58.9 KB)


Should DimDiameter do a check to make sure the object is a perfect circle or part of a perfect circle? (I assume a “perfect” circle would be a rational B-Spline with the appropriate weights.)

No actually, a “perfect” circle or arc is a specific circle or arc entity in Rhino - a parametrically defined object. These get converted to NURBS curves on the fly when needed.


In a general a NURBS curve with appropriate set of knots including parameterization and weights can be an exact curve or arc. Circular Arcs and Circles I assumed an “exact” circle or arc is a “perfect” circle or arc, even if does not happen to be a circle or arc entity in Rhino.

I’ve found that the diameter dimension appears to give fairly accurate and consistent measurements for a inside diameter which a slice taken out of it. However, the edge that was chambered is out by quite a bit.

The chamfer command just makes bad chamfers, and I am sorry, but it’s not to be trusted.

I’m sorry you feel that way. Maybe this will convince you. I’ve attached the chamfer surface from your original file, along withe the center point of the circle from the original file. Turn on near osnap. Analyse distance, pick the center as the first point and drag along the inside chamfer edge. You will see that the distance varies between 0.9687501 and 0.9687549. If this doesn’t convince you, then there is nothing more that I can say.ChamferA.3dm (491.7 KB)

Again, measuring radius or diameter of a curve that is not a circle gives no information about how far off from any true circle it is. CrvDeviation will give you that inforrmation.


And how would we get that on paper?
For communicating our ideas for the rest of the world?

Hi Brenda - that is a valid question, but a different one from whether or not Chamfer is making stuff within tolerance…


This is a real-world part. The other one might be as well. Anyway, I tried the CrvDeviation, on the inside edge. Without exploding the part, it’s not returning anything.

BTW, solid-works snobs will be checking my stuff.

RA.3dm (705.1 KB)

CrvDeviation requires 2 curves - in this case, the edge and the true circle the edge should be- in this case, the inner edge of the chamfer, moved to the plane of the outer edge and offset to the outer edge-

Maximum deviation = 8.20475e-07

SolidWorks should be ok with that, I’d think, no matter what Dimensioning returns. As Chuck said, it is on the pile to make simpler curves when possible, but the result here is well within tolerance- there is nothing wrong with the chamfer.


Not to completely hijack the discussion and more or less on topic; I most often work with cylindrical objects and when putting a fillet or a chamfer on these, I often replace the fillet (chamfer) with a revolve that is made from an intersection curve between the fillet (chamfer) with a plane. Why? Because I don’t like it that the command puts in 3 extra isocurves per quadrant. The revolve is cleaner (just an isocurve per quad). Couldn’t Rhino do this on its own?