Cancel
Showing results for
Search instead for
Did you mean:

# tolerant edge

Genius
To my limited knowledge, surfaces in NX might have four types of edge:

● analytical curve (line, arc)
● spline
● intersection curve
● tolerant curve/edge

"analytical curve" and "spline" are easy to understand. "intersection curve" is simply a precedural curve, just as Offset Surface is a prcedural surface. All these three types are mathematically precise.

The difficult one is "tolerant curve". I've read the doc again and again, but still failed to understand it. The doc states: "The system represents a tolerant edge by combining spline curves on adjoining surface edges within a tolerance distance from one another."

(1)

In my understanding, an edge is an edge. For example, Swept gives a heavy surface. But even a heavy surface is a mathematically precise surface, which has mathematically exact edges, just as a light surface given by Studio Surface.

Why does NX need aother type of edges? Can anybody kindly give an example?

(2)

Trim Curve has a special option -- Output Exact Geometry. The doc states: "Outputs Intersection curves whenever possible. If that is not possible, a tolerant curve is produced."

When is Outputs Intersection Curves "not possible"? Can anybody kindly give an example?

Thanks!

9 REPLIES 9

# Re: tolerant edge

Phenom

1)  Sew is one such example (and it is what the doc mentions).  Surfaces has to be sewn to form solids, but their edges, while precise, are never exactly coincident, due to modeling imperfections caused by the user or the inevitable approximations made by freeform commands (many calculations the software does are of the numeric kind - i.e. iterative - not analytic, so they aren't absolutely precise).  For a reason or another, real-world surfaces are never perfectly contiguous (i.e. G0 continuous).

Now, if you have several surfaces whose adjacent edges - while precise - ar not exactly coincident, how are you going to handle the common edge once they are sewn, if you can only use precise edges ?   What NX does is to take as the common edge the edge of the first surface you selected and enlarge it into a tube as to include the edge of the surface you selected as second.  So you end up with a tube whose radius (i.e. edge tolerance) is the distance between the edges, and this is the tolerant edge.   "The system represents a tolerant edge by combining spline curves on adjoining surface edges within a tolerance distance from one another."

The command tolerance plays a decisive role in all that.   For example if you have two surfaces to be sewn, whose adjacent edges are in fact 0.01 mm. apart and such edges are precise (i.e. not tolerant edges), the Sew command will refuse to sew them if the tolerance specified in the command is less than 0.01, while if it is at least 0.01 it will create as common edge a tube with radius 0.01.

Suppose your adjacend edges were 0.5 mm. apart. In that case, if you want to sew the surfaces  you need to specify 0.5 mm. as command tolerance and you will end up with a tube 0.5 mm. thick as common edge !

Now suppose  your adjacent edges were actually 1.01 mm. apart and they were not precise edge but tolerant edges with 0.5 mm. tolerance each.  If you specify a tight 0.01 mm command tolerance, Sew will sew them anyway even if they are 1.01 mm. apart, because the tubes are in effect just 0.01 distant from one another, so you will end up with a gigantic tube as common edge.  This is the "natural increase of tolerances" the manual mention, and please note that there is no going back (unless you unparameterize and manually redefine each tube as a precise edge, a Job's job that I did once for an entire part and I do NOT want do to again -  that's the result of being not aware of such issues).  Imagine a part where most edges are that large,  a mess impossible to deal with.

You may want to create similar examples in NX, playing with tolerance and Sew, in order to see how this works.

Without tolerant edges our parts would fall apart :-)

2) if you specify a direction, Trim sheet should ouput exact geometries.  By default it is set to normally project curves on the surface to be trimmed, and a projection normal to a surface cannot - in my understanding - create a precise geometry.   Have a go.

# Re: tolerant edge

Siemens Phenom

A "tolerant edge" actually has two curves associated with it. Each of these is a "parameter space" curve, called an "sp-curve" in NX, or a "curve on parametric surface" in IGES (type 142). So, we have an sp-curve for each of the faces that meet at the edge. The nice thing about an sp-curve is that it is guaranteed to lie *exactly* on the surface that's used in its definition.

So, suppose we have two faces F1 and F2 meeting at a tolerant edge. Then we'll have an sp-curve C1 that lies exactly on F1, and an sp-curve C2 thet lies exactly on F2. The problem is that C1 and C2 will not be identical. In fact, it's a mathematical fact that they *can't* be identical unless we use curves of ridiculously high degree.

However, C1 and C2 are guaranteed to lie in a tolerance tube that typically has a diameter of around 0.001mm to 0.01 mm, and the topological information in the model tells applications that there should be no "crack" along the edge.

As you noted, an edge of type "intersection curve" is quite different. It's defined procedurally: to compute a point on an intersection curve, NX (Parasolid, actually) intersects the two adjacent faces plus a plane. The computed point is guaranteed to lie on both adjacent faces to within a tolerance of 0.00001 mm, though typically the computation is much more accurate than this.

So, why don't we get rid of tolerant edges, and use intersection curves everywhere ? The main reason is that the procedural definition doesn't work very well when the two adjoining faces are tangent to each other (or nearly tangent). Trying to compute points by intersecting surfaces that are nearly tangent is a recipe for disaster.

Actually, many systems don't have procedural intersection curves, so they have to use tolerant edges a lot more than NX does (though they might not call them "tolerant edges"). So, you'll often get tolerant edges when you import data from other systems.

Trim Sheet works differently depending on the projection direction you use. If you project along a vector, then NX can (optionally)  build an Extruded surface internally, and use this to define a procedural intersection curve. But if you project normal, then building a suitable intersecting surface is much more difficult, so a tolerant edge is produced, instead.

yamada

# Re: tolerant edge

Genius

Hi @Maurizio  Thank you for explanation from real modeling viewpoint!

Hi @Yamada  Thank you for explanation from system mechanism viewpoint!

Thorough, crsytal-clear, and awesome materials that should be incorporated into NX documentation!

Some further questions:

In my current understanding, for a single face, a single tolerant edge is composed of two elements: an sp-curve and a tolerance value. The sp-curve is derived from the face procedurally. This is ok.

1. For a single face, how is the tolerance value for each tolerant edge decided?

• Can it be changed without affecting the face itself and other edges?
• The tolerance specified in a Swept feature seems to affect the construction of the surface. Is it also used for all the tolerant edges?

2. For a single face, is it possible to change a tolerant edge to an intersection/spline edge (where possible), or vice versa, either in the interactive environment or with a journal?

3. In modelling practice, we need only care about tolerant edges when working with topological operations, e.g. Sew, Thicken .... In situations unrelated to topology, it's basically no problem to treat all the tolerant edges simply as intersection curves or bezier splines. Is this correct?

Thanks again!

# Re: tolerant edge

Siemens Phenom

Answers to some (but not all) of your questions:

> 1. For a single face, how is the tolerance value for each tolerant edge decided?

Usually from some tolerance value input by the user, or from the current Modeling Tolerance. Most of what I wrote was about a situation where two faces meet at an edge. If there's only one face, things are different.

> 2. For a single face, is it possible to change a tolerant edge to an intersection/spline edge or vice versa

The Export-->Heal command tries to simplify edge geometry, and I think it will sometimes replace tolerant edges by intersection curves. But it can't do this if only one face is adjacent to the edge (because you need two surfaces to do an intersection, obviously).

If you want to replace all edges by tolerant edges, you can Extract all the individual faces of a body and then sew them back together again. I can't imagine why you would do this, though.

> 3. In modelling practice, we need only care about tolerant edges when working with topological operations

Not sure what you mean by "topological operations". If you're doing boolean operations on solid bodies, you won't get many tolerant edges. If you're doing class A work, and you never do any surface trimming, then you won't get any tolerant edges.

yamada

# Re: tolerant edge

Genius

Hi @Yamada   Thank you for your answers!

# Re: tolerant edge

Phenom

1. For a single face, how is the tolerance value for each tolerant edge decided?

Can it be changed without affecting the face itself and other edges?

yes, by using Replace Edge the edge tolerance gets back to the current modeling tolerance

The tolerance specified in a Swept feature seems to affect the construction of the surface. Is it also used for all the tolerant edges?

it is. Have a go.

2. For a single face, is it possible to change a tolerant edge to an intersection/spline edge (where possible), or vice versa, either in the interactive environment or with a journal?

Replace Edge seems to create tolerant edges only (it performs a projection), no precise edges. So I don't know any tool for this other than what @Yamada has already mentioned (Untrim restores Swept precise edges, though)

3. In modelling practice, we need only care about tolerant edges when working with topological operations, e.g. Sew, Thicken .... In situations unrelated to topology, it's basically no problem to treat all the tolerant edges simply as intersection curves or bezier splines. Is this correct?

I think so, I suppose that downward commands refer to the sp-curve of the tube, because changing the tube tolerance seem not to make any difference to downward maths.  Yet, I'm curious to know if users have the same experience, or someone has found some difference.

As you and Yamada pointed out, when it comes to modeling you do notice differences, as there are portions of edges which are missing (due to nearby tubes) and downward modeling operations can fail.

Highlighted

# Re: tolerant edge

Genius

Hi @Maurizio   Thank you for your answers to all the questions!

To speak frankly, I simply ignored all the commands with old-styled dialog box. I would try to understand how Replace Edge works. And I wonder whether NX has a new-styled replacement for it.

# Re: tolerant edge

Phenom

@surfactant wrote:

To speak frankly, I simply ignored all the commands with old-styled dialog box. I would try to understand how Replace Edge works. And I wonder whether NX has a new-styled replacement for it.

no, and it doesn't need any replacement, it does a very good job actually.   You are bound to use it often if you do surfacing, you should only be careful as to check it doesn't change face math, which happens if you try to redefine edges in a position that goes beyond the original one (that can ruins the surf completely, causing self intersections and whatever).

It was once used also to get back to untrimmed original surf and to remove holes, but there are now new commands for this.

The only drawback is that, well, it unparameterizes the surf, no big deal for my workflow (and I suppose for most surfacers here) but it could be for you :-)

# Re: tolerant edge

Genius

Hi @Maurizio   Very helpful information on Replace Edge. Thank you!