Dual tolerance option in Rhino?

Is there a way to have two separate options for tolerance in Rhino, a custom one for the “Split” and “Trim” tools only, and a default one for the Absilute tolerance used with all the rest commands?

For example, the “Split and Trim” tolerance could be 10 or 100 times more accurate than the default one:
If “Default tolerance” = 0.01 mm
then “Split and Trim tolerance” = 0.0001 mm

This also could be applied to the “Project” tool, because projected curves are often used as trimming objects as well.

When using curves or surfaces to split surfaces, Rhino sometimes tends to project them improperly (even in the parallel views), thus it splits the surface in a slightly deviated area. That may produce eventual errors and even creation of a bad object. It happens when I want the new cutting line to be very close to the border of a surface, especially if they are at a very small angle. To make a perfectly accurate split and avoid errors, I temporarily increase the tolerance from “Rhino options > Units > Absolute tolerance” from 0.01 mm to 0.001 or 0.0001 mm. After I complete the splitting, I revert to the original tolerance. It would be nice if Rhino uses more accurate tolerances only for the split/cut commands, while keeping the absolute tolerance for the other commands at their default.



PS: I already described the issue at this post What rhino commands do you use on a regular basis and think others don't know about? - #85 by Rhino_Bulgaria but the reason I post this in a separate topic is that it’s essential for the program to split/trim the surfaces properly, in order to avoid further issues that are the result of inaccurate splitting/trimming.


But… what would this apply to if not split and trim? Join?

If you have an example of this:

Please post or send it to tech@mcneel.com

In general it is a good workflow to set the file tolerance perhaps 10x smaller than you really want (to get clean joins at the end) and then, if needed, back out the tolerance by 10x at the end if joining leaves some nakeds.


I use “Large objects - Millimeters” with absolute tolerance set to 0.01 mm. The inability to properly split a surface via curve (or another surface) happens when the latter is positioned so close to the end of the surface that’s going to be cut that it’s below the absolute tolerance.

For example, in the attached file I created one straight line that’s 0.0082680 millimeters away from the edge, making it shorter than the 0.01 mm that the file uses as a reference. Running “Rebuild edges” before the split/trim command also won’t help. If you try to split the surface from the left view using the line, Rhino will fail to do it unless the tolerance is set to 0.008 mm or a bit lower. With anything between 0.005 mm and 0.008 mm Rhino splits the surface somehow, even though it does that with only the highest 2.2 mm long area of the surface and won’t follow the true shape of the straight line. What’s interesting in this example is that an absolute tolerance of 0.0001 mm will also fail, even though the line is clearly crossing the surface. I also extended the line at either side, but this also haven’t helped. However, tolerances of 0.00001 mm and 0.000001 mm split the surface just like the 0.008 mm one did. I have no idea why 0.0001 mm failed.

This unwanted deviation also happens with projected curves, where they differ from the original curve that was used for the projection. In this situation, the projected curve tends to “snap” along the edge of the surface within the tolerance amount (up to 0.01 mm deviation) rather than to be an exact copy of the original.

Manually changing the absolute tolerance every time before such tight cut resolves the problem, but a more elegant solution would be to have a separate, 10 times more accurate setting for the “Split”, “Trim” and “Project curves” tools. If the rest tools also use too accurate setting, that would lead to other problems such like over-complexity of control polygons (too high control point count) and will significantly increase the file size and time for calculation of various commands.

Tolerance test.3dm (158.7 KB)

Which tools, though?


Well as Pascal said those are the most important tools for the tolerance settings, otherwise there’s just…rail fitting? If you are really concerned about accuracy, I would turn the angle tolerance down to 0.1 degrees from 1, that default does seem sloppy.

The question though is why are you trying to trim less than 0.001 off this? Without knowing anything else about the model, it would seem that either it should simply be modeled at 0.001 tolerance, or there’s something else wrong that you’re trying to fix. It’s not exactly certain that what’s going on here is “inaccuracy” from not tight enough tolerance, the distance is so small relative to the size of your model that it’s starting to push the limits of what sort of precision you can practically expect.

1 Like


if Absolute tolerance = 0.01 mm
then Split, Trim and Project curves is 10x or 100x of the absolute tolerance (0.001 mm or 0.0001 mm)

As seen from my Rhino file attached in my previous post, Rhino is unable to properly split the surface even with tolerance set 10x times above the default one. For some weird reason it did with 0.005 mm, though.

EDIT: When I set absolute tolerance to 0.0001 mm and angle tolerance to 0.01 degrees, the split also fails. If I revert to angle tolerance of 1 degree, the split happens, but not properly following the straight line that was used for the split command.



I think Pascal meant, which tools is it a problem for you having the tolerance too tight? I was going to say that tolerance tighter than 0.01 mm is really unnecessary for any sort of normal object, but I guess I usually work with 0.0001" which is much tighter, and I don’t have any problems with geometry getting “too” heavy due to that. But 0.001mm is about 1/2 that, and that does seem just…silly unless your object is extremely small.

The split seems to work here at 0.001 or 0.0001(which I sure don’t recommend,) regardless of angle setting.

I think that the default angle tolerance for “Large objects - millimeters” was chosen very properly by the McNeel team. It’s a balanced setting that works in 99% of the situations without making the file size too big, while at the same time provides enough accuracy. As I mentioned in my previous post, increasing the angle tolerance from 1 degree to 0.01 degree actually prevents the split command to work properly.

The angle tolerance of 0.1 degree or less is only needed in rare occasions such like trying to achieve near class-A surface quality transitions with the “Match surface” command. Most of the time I use 1 degree, because the 0.1 degree settings adds too many extra control points.

As for your question, the aforementioned inaccurate split happens also when I have to split multiple surfaces (no matter joined or not) and the splitting object (be it a curve or surface) is crossing some of their edges closer than the absolute tolerance, or when a mode is being used to make a thick model with the “Offset surface” command".

The attached model is actually an offset surface that’s 3 mm smaller than the original one, and is one of multiple surfaces joined together. Sometimes Rhino produces errors that result in an offset surface with one or more surface edges that will not join together, despite the perfect surface continuity of the original model used for the “Offset surface” command. Even “Join 2 naked edges” won’t help, and I try to avoid using this command, because my understanding is that it tries to make a fake joining (more like a visual solution than an actual one) while the issue remains if the surfaces are eventually exploded and joined again. To fix such tiny errors that happen with the offset surfaces, I have to remove extremely tiny amount of them, and this is where only an extreme amount of absolute tolerance helps with the Trim and Split tools. Otherwise, they fail. This is why it would be a lot easier to just have these two tools using 10x or 100x better tolerance.

Where does that make extra control points? I disagree about 1 degree default, that’s big enough that building geometry from curves trimmed with that tolerance can result in failing edge fillets and…come to think of it exactly the sort of discrepancies in offset surfaces you’re trying to fix here. I never go tighter than 0.1, the impact is not excessive, and the result is geometry that offsets with a minimum of hassle.

Is the Split tool splitting the surface into 3 pieces, or 2 pieces only? The straight curve crosses the very top and bottom of the surface, while at the middle it’s outside of the latter. If you zoom in you will notice that.

Have you tried to split the surface from the Left view? From Perspective view the split is successful even with absolute tolerance of 0.01 mm, but that is using a different projection direction (usually the vertical one along the Z-axis or automatic one depending on the surface orientation). However, the problem persists from the left view. Tomorrow I will download Rhino 6 evaluation to my other PC to see if it will make any change.

I don’t see an attachment.

Well, the issue is not related to offset surfaces being trimmed by a curve, because it happens in random situations where other commands such like Blend surface and Match surface were used. And I already mentioned that with “Match surface” I use 0.1 degree setting inside that command that allows to use its own internal tolerance. If only the Split and Trim commands also had internal tolerance, Rhino would perform more accurately.

The attachment is in my 2nd post in this thread that’s here:

Proof that the proposed approach with 10x tolerance precision just for the trimming process works. I used this solution countess times during the years.


can it be a toggle between Coarse vs. Fine Tolerances? something that you can define in the template? I think this can be helpful in these scenarios.

1 Like

Bumping the tolerance precision setting for the trim or split or project operations helped me many times, where the default file tolerance setting failed, so I think it’s natural to be able to set a dedicated option for those tools only that are separate from the general file tolerance. One funny thing is that “Match surface” already has its own optional customizable setting for tolerance, though it’s accessible via its own pop-up window rather than being part of the Rhino options.

Hello Bobi,

Yes nice. Thank you. Maybe I am not at all on base, but if I am on base [sorry if this has been brought up elsewhere] but could this technique be used where a Boolean fails? I have been attempting to purposely get a failed Boolean Union whereby I would reattempt the failed union with a looser tolerance, see if now the union works and checks out ok [if successful] then tighten the tolerance back up and then check the unioed object again.

Thank you,


Hello- you can make macros/buttons to set tolerance as needed

-_DocumentProperties _Units _AbsloluteTolerance .001 _EnterEnd

but be careful - operations made at different tolerances will have different levels of accuracy so you need to make sure you know what the desired tolerance is and and not go fatter/bigger than that.



I use the 10x or 100x tolerance precision approach only for trimming of surfaces where the default tolerance fails.
I use the default tolerance for all the modeling tools to ensure that the resulting surfaces will have the minimum possible amount of control points.