FUNCTION gbsf_check_curve
(cv : representation_item) : BOOLEAN;
IF SIZEOF(['AIC_GEOMETRICALLY_BOUNDED_SURFACE.BOUNDED_CURVE', 'AIC_GEOMETRICALLY_BOUNDED_SURFACE.CONIC', 'AIC_GEOMETRICALLY_BOUNDED_SURFACE.CURVE_REPLICA', 'AIC_GEOMETRICALLY_BOUNDED_SURFACE.LINE', 'AIC_GEOMETRICALLY_BOUNDED_SURFACE.OFFSET_CURVE_3D'] * TYPEOF(cv)) > 1 THEN RETURN (FALSE); END_IF; IF SIZEOF(['AIC_GEOMETRICALLY_BOUNDED_SURFACE.CIRCLE', 'AIC_GEOMETRICALLY_BOUNDED_SURFACE.ELLIPSE', 'AIC_GEOMETRICALLY_BOUNDED_SURFACE.TRIMMED_CURVE'] * TYPEOF(cv)) = 1 THEN RETURN (TRUE); ELSE IF (('AIC_GEOMETRICALLY_BOUNDED_SURFACE.B_SPLINE_CURVE' IN TYPEOF(cv)) AND (cv\b_spline_curve.self_intersect = FALSE) OR (cv\b_spline_curve.self_intersect = UNKNOWN)) THEN RETURN (TRUE); ELSE IF (('AIC_GEOMETRICALLY_BOUNDED_SURFACE.COMPOSITE_CURVE' IN TYPEOF(cv)) AND (cv\composite_curve.self_intersect = FALSE) OR (cv\composite_curve.self_intersect = UNKNOWN)) THEN RETURN (SIZEOF(QUERY(seg <* cv\composite_curve.segments | NOT (gbsf_check_curve(seg.parent_curve)))) = 0); ELSE IF 'AIC_GEOMETRICALLY_BOUNDED_SURFACE.CURVE_REPLICA' IN TYPEOF(cv) THEN RETURN (gbsf_check_curve(cv\curve_replica.parent_curve)); ELSE IF (('AIC_GEOMETRICALLY_BOUNDED_SURFACE.OFFSET_CURVE_3D' IN TYPEOF(cv)) AND ((cv\offset_curve_3d.self_intersect = FALSE) OR (cv\offset_curve_3d.self_intersect = UNKNOWN)) AND (NOT ('AIC_GEOMETRICALLY_BOUNDED_SURFACE.POLYLINE' IN TYPEOF(cv\offset_curve_3d.basis_curve)))) THEN RETURN (gbsf_check_curve(cv\offset_curve_3d.basis_curve)); ELSE IF 'AIC_GEOMETRICALLY_BOUNDED_SURFACE.PCURVE' IN TYPEOF(cv) THEN RETURN ((gbsf_check_curve(cv\pcurve.reference_to_curve\representation.items[1])) AND (gbsf_check_surface(cv\pcurve.basis_surface))); ELSE IF 'AIC_GEOMETRICALLY_BOUNDED_SURFACE.POLYLINE' IN TYPEOF(cv) THEN IF (SIZEOF(cv\polyline.points) >= 3) THEN RETURN (TRUE); END_IF; ELSE IF 'AIC_GEOMETRICALLY_BOUNDED_SURFACE.SURFACE_CURVE' IN TYPEOF(cv) THEN IF gbsf_check_curve(cv\surface_curve.curve_3d) THEN REPEAT i := 1 TO SIZEOF(cv\surface_curve.associated_geometry); IF 'AIC_GEOMETRICALLY_BOUNDED_SURFACE.SURFACE' IN TYPEOF(cv\surface_curve.associated_geometry[i]) THEN IF NOT gbsf_check_surface(cv\surface_curve.associated_geometry[i]) THEN RETURN (FALSE); END_IF; ELSE IF 'AIC_GEOMETRICALLY_BOUNDED_SURFACE.PCURVE' IN TYPEOF(cv\surface_curve.associated_geometry[i]) THEN IF NOT gbsf_check_curve(cv\surface_curve.associated_geometry[i]) THEN RETURN (FALSE); END_IF; END_IF; END_IF; END_REPEAT; RETURN (TRUE); END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; RETURN (FALSE); END_FUNCTION; -- gbsf_check_curve
|