FUNCTION msf_surface_check 
          (surf : surface) : BOOLEAN;
 IF 'AIC_MANIFOLD_SURFACE.ELEMENTARY_SURFACE' IN  TYPEOF(surf) THEN     RETURN(TRUE);   ELSE  
      (* a swept_surface shall have a valid sweeping curve      *)     IF  'AIC_MANIFOLD_SURFACE.SWEPT_SURFACE' IN  TYPEOF  (surf) THEN         RETURN  (msf_curve_check(surf\swept_surface.swept_curve));       ELSE           (* an offset_surface shall NOT  self-intersect AND shall          REFERENCE a valid surface        *)       IF  (('AIC_MANIFOLD_SURFACE.OFFSET_SURFACE' IN  TYPEOF (surf)) AND         (surf\offset_surface.self_intersect = FALSE) OR          (surf\offset_surface.self_intersect = UNKNOWN)) THEN         RETURN (msf_surface_check(surf\offset_surface.basis_surface));       ELSE            (* a surface_replica shall have a valid parent surface          *)         IF  'AIC_MANIFOLD_SURFACE.SURFACE_REPLICA' IN  TYPEOF(surf) THEN            RETURN(msf_surface_check(surf\surface_replica.parent_surface));          ELSE
            (* a b_spline_surface shall NOT self-intersect            *)           IF (('AIC_MANIFOLD_SURFACE.B_SPLINE_SURFACE' IN TYPEOF(surf)) AND             (surf\b_spline_surface.self_intersect = FALSE) OR             (surf\b_spline_surface.self_intersect = UNKNOWN)) THEN             RETURN(TRUE);           END_IF;         END_IF;        END_IF;      END_IF;    END_IF;    RETURN(FALSE); END_FUNCTION; -- msf_surface_check 
 |