| FUNCTION nmsf_surface_check (surf : surface) : BOOLEAN;
 
 IF 'AIC_NON_MANIFOLD_SURFACE.ELEMENTARY_SURFACE' IN  TYPEOF(surf) THENEND_FUNCTION; -- nmsf_surface_checkRETURN(TRUE);
 ELSE
 
 (* a swept_surface shall have a valid sweeping curve
 *)
 IF  'AIC_NON_MANIFOLD_SURFACE.SWEPT_SURFACE' IN  TYPEOF  (surf) THEN
 RETURN  (nmsf_curve_check(surf\swept_surface.swept_curve));
 ELSE
 
 (* an offset_surface shall NOT  self-intersect AND shall
 REFERENCE a valid surface
 *)
 IF  (('AIC_NON_MANIFOLD_SURFACE.OFFSET_SURFACE' IN  TYPEOF (surf)) AND
 (surf\offset_surface.self_intersect = FALSE) OR
 (surf\offset_surface.self_intersect = UNKNOWN)) THEN
 RETURN (nmsf_surface_check(surf\offset_surface.basis_surface));
 ELSE
 
 (* a surface_replica shall have a valid parent surface
 *)
 IF  'AIC_NON_MANIFOLD_SURFACE.SURFACE_REPLICA' IN  TYPEOF(surf) THEN
 RETURN(nmsf_surface_check(surf\surface_replica.parent_surface));
 ELSE
 
 (* a b_spline_surface shall NOT self-intersect
 *)
 IF (('AIC_NON_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);
 
 |