Adaptive Slicing

From: George Sachs (sachs@pipeline.com)
Date: Tue Feb 25 1997 - 21:34:42 EET


Dear Ray,

Here are a few of my thoughts on this subject (If you like these can be
pursued in greater detail via private reply ). I also believe these
questions have been worked on by a number of companies including 3D Systems,
the Sparx company (Sweden) and Schroff Development (Kansas).

>My name is Ray Hope. I've been working on slicing procedures for layered
>manufacturing, and am using layers with sloping boundary surfaces to
>eliminate the stair case effect. Note I am obtaining the definition of
parts from B-spline surfaces. Layer
>error is approximated from the radius of curvature and angle of the surface
normal.

(G.S) the curvature changes across the entire surface so a local curvature
calculation is not very useful, neither is any one surface normal. A
chordal/cross-sectional deviation measure is at least a worst case deviation
over a surface REGION. The chordal/cross-sectional deviation is illustrated
below

                                         Surface cross section
                                                 * | *
                                         * | *
                                    * | chordal *
                                  * | deviation *
             end tangent O--------------- |------------------O end tangent
                    & straight edge approximation &

               curvature
curvature

> The method mentioned above to predict the error, produces a predicted
>error much less than the true value near inflection points. This is
>because at an inflection point the curvature becomes zero, and is also very
>small nearby. So how should we predict error near inflection points?
……….
>Lets consider a threaded bolt. In the threaded section the best results
>will be achieved with fine layer thicknesses, but for the head of the bolt,
>and the unthreaded section, much thicker layers can be used with no loss
>of detail. My problem is mainly in finding a robust procedure to select
>the best layer thickness in the threaded section, to keep the error within a
>specified tolerance. In this case, using the curvature to estimate error does
>not work as the triangular threads have zero curvature.

A chordal deviation tolerance will still work in both these situations (see
below). G.S.

Brock Rooney comments:
>These are some of the reasons why it is better to slice a set of
>triangles with matching vertices, such as a well faceted, valid STL file.

(G.S.) This would be OK except that the advantage of using surfaces is that
they are smooth and can be examined to arbitrary precision. A given STL file
is only an approximation to an arbitrary tolerance (and not smooth at that).
The whole idea behind an adaptive algorithm is to seek to optimize the
approximation so that it better agrees with the ideal (i.e. a surface).
Unless you are willing (and able) to repeatedly re-tesselate a bunch of
surfaces (fast!) with different tesselation tolerances, this method is not
great. It is true however that most tesselation (STL conversion) algorithms
currently in use allow the user to specify at least a chordal deviation
tolerance, which can be used to limit the error between an approximate
linear edge and the desired curved edge. So along these lines it would be
possible to convert all the surfaces to an STL format with a specified and
desirable chordal deviation tolerance and then to do the adaptive slicing
using this data, with the knowledge that any cross section of any ONE
triangle will not deviate more than the specified deviation tolerance from
each surface. By increasing the slice thickness so that each slice it
encompasses many triangular facets, however, things get more complicated
since now a set of small connected straight line sections (one from each
triangle) has to be replaced with a single straight chord spanning them and
the error has to be re-computed since it is larger than each individual
error (this shouldn't be too hard though).

If the tessalation approach is not to your liking you can work directly with
the surfaces by looking at a pair of consecutive cross sectional profiles
and the resulting "ruled" edge to see how much the edge deviates from the
actual surfaces. You would similarly want to find the cross sectional rib
curves along each surface which connect the two slice profiles together and
then measure the chordal deviation from these curves. You could use points,
normals and curvature along each section to approximate these curves using
parabolas or even better cubics. It is then a simple matter of mathematics
to compute the chordal deviation from these approximate curves and the chord
connecting each end point. As a BONUS it is also possible to derive a
formula which PREDICTS the number of straight line segments needed to
approximate any one such curve while maintaining a DESIRED chordal
deviation. This count can then be used to subdivide any section into smaller
sections as needed, without having to resort to a trial and error approach
(sort of like a Newton/Ralphson iteration). The use of an STL file is
similar in that the work of finding the correct planar approximation is done
for you. An even more robust approach would be to determine the actual
curved profile between slices, by taking planar sections though the surfaces
perpendicular to the slices and using the actual intersection curves in the
deviation calculations (I leave the details to you…I wouldn't want to spoil
the fun!) This method would work even when dealing with multiple surfaces
which are not curvature or even tangent continuous, since if you compute the
actual (as opposed to approximate) cross sectional profile, it will consist
of a C-zero curve (a piecewise smooth curve) which never the less has a
chordal deviation. The threaded bolt should pose no great problem (but each
resulting optimal slice through the threads would end up being thinner than
the thread pitch) .

I hope I haven't completely misunderstood what your goals are!

George Sachs
Paradigm Systems



This archive was generated by hypermail 2.1.2 : Tue Jun 05 2001 - 22:39:23 EEST