Get the tolerance related to Curve/Surface Evaluator

The STEP file claims the tolerance is 0.000001. Since the edge curve entities are shared by adjacent faces, the edges are identical. When everything goes as planned, there is no need to use a tolerance for the joining. The resulting edge tolerances, that are as large as 2.2531090370642774e-05 in your model, come from how far off the surfaces the edge curves are.

What do you think Rhino should do in this case, beyond reading in the data in the STEP file? One possibility would be to set the file tolerance to 2.2531090370642774e-05. This would not make sense when you import the file into an existing 3dm document but it might otherwise.

Previous versions of Rhino open this file with the tolerance as .0001

In previous versions we used 0.0001 as the minimum tolerance. This caused problems.

I can’t even begin to imagine what that bizarre statement means

The 0.000001 tolerance will cause problems for 99% of users who try to do any further modeling with this file. I doubt that a .0001 tolerance would cause even 10% of users problems.

As the Xnurbs guy said the very tight tolerances make sense if it means 0.000001 meters. In other words, the tolerance may not be using the same unit system as the geometry

Your STEP file says the tolerance is 0.000001. We have always used the tolerance stated in the STEP file unless it was smaller than a chosen minimum value. In the past that was 0.0001. Now it’s not. Moving it back to 0.0001 would make you happy for this particular file. It would cause problems in other files. I have no idea why the software that wrote your file used an incorrect tolerance.

This is not unique to one file. XNurbs posted another example and the other STEP files that I have downloaded from this Forum also have ridiculously tight tolerance. All the proprietary STEP file that I have received in the last few months also have opened with incorrect tolerance.

I am afraid it is a Rhino bug. The tolerance 0.000001 or 0.00001 is based on meters! Also the geometries in STEP are based on meters. When Rhino loads STEP, Rhino “converts” the geometries into mm, but forgets converting the tolerance.

From Rhino’c comments, it appears that Rhino may use a STEP translation from a third party, and may not know what is going on. Rhino should send a bug report to the developer of the STEP translation.

From your STEP file:


I thought maybe the 0.000001 really goes with the mm unit, rather than inches from which the file units are derived, but that would be even worse. I think some export packages just always stick 0.000001 in the STEP file no matter how noisy the joins are.

Maybe the right thing to do is give you the option of setting the document tolerance to the tolerance in the STEP file or using the maximum edge tolerance if it’s bigger. I have seen some files where the STEP file tolerance is a typical value of, say, 0.001, but the actual distance from edge curves to the surfaces they should be trimming is huge, like 0.5. One problem with this approach is that therre could be surfaces or edges that are smaller than that tolerance.

Most of the work in our STEP import code is trying to interpret incorrect information in the STEP file. This is just another example, I guess.


I just want to remark that we also use step import/export. On most projects we need to actually build with a precision of +/- 0,1mm on objects of 90 to 150m. Rhino documentations says that we then should set the tolerance to 0,01mm. Some Projects use meters as units. Therefore we need to use 0,00001 as standard. If something needs to be build with tighter tolerances we need to go to 0,000001. I think that it must be possible to import/export and of course model with these settings, that also counts for plugins as xnurbs.

The right thing for a Rhino user to do is (as I advised Xnurbs) use the “import” command instead of the “Open” command. The tolerance setting that you get when you use “open” is completely unreliable when bringing in data from other CAD systems

And there is no point in users complaining about the unreliability of the tolerance when opening STEP files because past complaints have just made the problem worse.



As @JoergH mentioned, some projects use meters as units, so could you show us how to get the document unit setting? If users use meters as units, would Curve/Surface Evaluator returns results based on meters?

I did not check the STEP file. Based on your description, I think it may be a Rhino bug:
Simply speaking, UNCERTAINTY_MEASURE_WITH_UNIT 1.0E-006 may mean precise geometries, e.g., an arc or a straight line. NURBS needs to use a tolerance for non-precise geometries. Rhino document tolerance is for NURBS, and you cannot use the tolerance setting for precise geometries.

Yes that is correct. The Rhino absolute tolerance is what is used for non-precise calculations. This includes the joining of surfaces to create a Brep. If 2 surface edges are within tolerance then the edges can be joined and a new common edge definition is created for both surfaces. The original edge definition is forever lost (unless an undo is used)

Setting the Rhino tolerance to 1.0E-006when opening mm unit document is either a bug or a kick in the teeth to the user.

const ON_3dmUnitsAndTolerances& units = pDoc->Properties().UnitsAndTolerances();

Yes, of course.

The few STEP files created by KeyCreator that I found online all have 1e-6 assigned to UNCERTAINTY_MEASURE_WITH_UNIT no matter the units. This matches the ACIS-based “coincident distance” as explained under Modeling Range on .