FUNCTION gbsf_check_surface
(sf : surface) : BOOLEAN;
IF (('AIC_GEOMETRICALLY_BOUNDED_SURFACE.B_SPLINE_SURFACE' IN TYPEOF(sf)) AND (sf\b_spline_surface.self_intersect = FALSE) OR (sf\b_spline_surface.self_intersect = UNKNOWN)) THEN RETURN (TRUE); ELSE IF SIZEOF(['AIC_GEOMETRICALLY_BOUNDED_SURFACE.SPHERICAL_SURFACE', 'AIC_GEOMETRICALLY_BOUNDED_SURFACE.TOROIDAL_SURFACE', 'AIC_GEOMETRICALLY_BOUNDED_SURFACE.CURVE_BOUNDED_SURFACE', 'AIC_GEOMETRICALLY_BOUNDED_SURFACE.RECTANGULAR_TRIMMED_SURFACE'] * TYPEOF(sf)) = 1 THEN RETURN (TRUE); ELSE IF (('AIC_GEOMETRICALLY_BOUNDED_SURFACE.OFFSET_SURFACE' IN TYPEOF(sf)) AND (sf\offset_surface.self_intersect = FALSE) OR (sf\offset_surface.self_intersect = UNKNOWN)) THEN RETURN (gbsf_check_surface(sf\offset_surface.basis_surface)); ELSE IF 'AIC_GEOMETRICALLY_BOUNDED_SURFACE.RECTANGULAR_COMPOSITE_SURFACE' IN TYPEOF(sf) THEN REPEAT i := 1 TO SIZEOF(sf\rectangular_composite_surface.segments); REPEAT j := 1 TO SIZEOF(sf\rectangular_composite_surface.segments[i]); IF NOT (gbsf_check_surface(sf\rectangular_composite_surface.segments[i][j].parent_surface)) THEN RETURN (FALSE); END_IF; END_REPEAT; END_REPEAT; RETURN (TRUE); ELSE IF 'AIC_GEOMETRICALLY_BOUNDED_SURFACE.SURFACE_REPLICA' IN TYPEOF(sf) THEN RETURN (gbsf_check_surface(sf\surface_replica.parent_surface)); ELSE IF 'AIC_GEOMETRICALLY_BOUNDED_SURFACE.SURFACE_OF_REVOLUTION' IN TYPEOF(sf) THEN RETURN (gbsf_check_curve(sf\swept_surface.swept_curve)); END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; RETURN (FALSE); END_FUNCTION; -- gbsf_check_surface
|