This section is intended only for developers interested in the workings of
Shadow. It should be
helpful for maintainance, debugging, and possible coding extensions.
It is meant to accompany code and comments. Not all steps below are
necessarily executed, depending on selected options.
- Input objects converted to shells.
- All surfaces (including those in shells) converted to open
surfaces.
- Surface boundaries introduced as unshared edges of shell.
- All shared and unshared edges converted to piecewise linear form.
- Contour extraction.
- Includes surface, discontinuity, and shared edge contours.
- Unshared boundary contours extracted in step 4.
- Extracted contours trimmed against existing trim loops.
- Contours oriented with occlussion to the right as seen in image
space projection.
- Extracted contours inserted as trim edges.
- Contours linked to form segments spanning entire shell or closed
loops.
- Neighboring endpoints corrected in a variety of ways during
linking.
- New edges form new loops, or split or merge existing loops.
- Resulting connected regions assigned back/frontfacing tag based on
normal.
- *Connected regions not seperated into distinct shells yet.
See * below.
- Unshared boundary contour extraction.
- Extraction here avoids need to split boundary contours for correct
orientation.
- Planar projection of contours for given viewpoint.
- Center of interest set at midpoint of bounding box enclosing
extracted contours.
- Viewpoint must be outside the bounding box to avoid projections
to infinity.
- Contours mapped to XY image plane based on viewpoint and coi.
- Contour segmentation.
- Contours split by angle for cusp detection and to avoid
self-intersection.
- Pairwise intersection of contours to detect T-junctures.
- Information on juncture types and adjacencies maintained.
- Contour classification.
- Single raycast from viewpoint to each contour segment.
- *Avoids costly intersections between ray and identical untrimmed
shell surfaces.
- Classes assigned based on cardinality of intersection sets along
the ray.
- Occluded region assigned to each contour based on first
intersection after contour.
- Filtering of intersection points due to instability of ray-contour
intersections.
- Correction of contour class and juncture type based on contour
topology constraints.
- Face partitioning.
- Finishes step 3, yielding a seperate shell for each connected
region.
- Cincture formation.
- Cinctures offer improved robustness and efficiency (See
references.).
- Constructed through consideration of contour image space topology.
- Casting of shadow cinctures.
- Cinctures cast as ruled surfaces for given viewpoint.
- Shadow cinture intersection/Contour projection.
- Projections extracted as shadow cincture-occluded region
intersections.
- Intersections linked into single segments spanning shadow
cinctures.
- Ending juncture types used to increase robustness.
- Contour projections inserted as trim edges.
- Follows step 3 without back/frontface tagging.
- Region partitioning.
- Partitioned region classifications.
- Tag regions as to whether analysis query is satisfied or not.
- Region classification based on classification of defining
(bounding) contours.
- No additional raycasts needed for region classification.
- Desired regions written to stdout.
- Regions chosen based on keep option and region
classification.
Further details available in:
Robust Hidden Region Partitioning of Complex Freeform Models with Shadow
Cinctures
, Greg Heflin and Elaine Cohen, submitted for publication.
and
Discrete and Multview Accessibility Analysis of Complex Models
, Greg Heflin, Ph.D. Thesis, CS Department, University of Utah, work in
progress.
Alpha_1 Developer's Manual Version 95.06.
Copyright © 1995, University of Utah
alpha1@cs.utah.edu
Author
Gregory S. Heflin
heflin@cs.utah.edu