List of: Discussion Topic
Subjects: Tolerant Modeling
Contents: Kernel

Blending has both "tolerant modeling friendly" and "tolerant modeling hot" features.

Tolerant Friendly Features

Tolerant friendly means that blending algorithms behave sensibly when tolerant edges are encountered. Tolerant modeling friendly features in blending include:

When a blend rolls over a tolerant edge that connects two faces smoothly, blending will respond by automatically inserting a tolerant edge between the adjacent blend faces that get built.
Blending rolls straight over a precise but near-tangent edge. Instead of leading to a near-tangent mitre with very difficult near-tangent surface intersections, and a concomitantly poor chance of success, this is detected and resolved using a tolerant edge.
Supporting areas of the algorithms have been augmented to be tolerant modeling friendly. This includes some features in capping, and the Boolean stage of the blend (blend stage two).

These features are always enabled and cannot be disabled. The rationale for this is that if the input part already has tolerant edges in it, and the blend boundaries actually encounter these edges, then it is almost certainly essential that blending will have to construct tolerant edges of its own, or else fail. Tolerant edges are a local feature on a part, however, so if the model contains tolerant edges but the blend does not encounter them, then no new tolerant edges will be created.

Tolerant Hot Features

The blending algorithms will use tolerant modeling when this gives a better route to completing a blend--even when the original part contained only precise edges. This is referred to as being "tolerant modeling hot".

The tolerant modeling hot features of blending are disabled by default. They may be enabled by setting the option bl_tolerant_hot to TRUE. Unless this option is turned on, the blending algorithms will never create a tolerant edge if none was encountered on the blank, even if difficult near-tangencies are involved.

When bl_tolerant_hot is on, the option res_near_tangent controls the maximum angle allowed between two faces along an edge if that edge is still to be treated as "near-tangent". In practice, this means that tolerant modeling will be used to resolve the difficulty, and a tolerant edge is likely to result between the adjacent blend faces there.

The res_near_tangent option is the same option that controls the definition of "near-tangency" for local operations.

As a rule of thumb, res_near_tangent times the blend radius gives an upper bound on the tolerance of any tolerant edges created in a near-tangent situation, so long as that near-tangent edge in the input part is not itself tolerant. If the near-tangent edge is tolerant too, then that tolerance would have to be added in also to get a reliable bound. In practice the blending algorithms usually achieve a much better value those described here.

Scheme Example

; Create a stepped block.
(define body
(wire-body:points (list (position 0 0 0)
(position 0 10 0)
(position 0 10 10)
(position 0 5 10)
(position 0 5 5)
(position 0 0 5)
(position 0 0 0))))
(sweep:law body (gvector 10 0 0))
(blend:entities body 1.5 'fix)
(edge:tolerant (list-ref (entity:edges body) 1))
(tolerant:move (list-ref (entity:edges body) 1) (gvector 0 -1 0))
(blend:entities body 1.5 'fix)