FUNCTION nmsf_curve_check
(cv : representation_item) : BOOLEAN;
IF SIZEOF (['AIC_NON_MANIFOLD_SURFACE.BOUNDED_CURVE', 'AIC_NON_MANIFOLD_SURFACE.CONIC', 'AIC_NON_MANIFOLD_SURFACE.CURVE_REPLICA', 'AIC_NON_MANIFOLD_SURFACE.LINE', 'AIC_NON_MANIFOLD_SURFACE.OFFSET_CURVE_3D'] * TYPEOF(cv)) > 1 THEN RETURN(FALSE); ELSE
(* b_spline_curves shall NOT self-intersect *) IF (('AIC_NON_MANIFOLD_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
(* conics AND lines are valid curve types *) IF SIZEOF (['AIC_NON_MANIFOLD_SURFACE.CONIC', 'AIC_NON_MANIFOLD_SURFACE.LINE'] * TYPEOF (cv)) = 1 THEN RETURN(TRUE); ELSE
(* a curve_replica shall REFERENCE a valid curve *) IF 'AIC_NON_MANIFOLD_SURFACE.CURVE_REPLICA' IN TYPEOF(cv) THEN RETURN (nmsf_curve_check(cv\curve_replica.parent_curve)); ELSE (* an offset_curve_3d shall NOT self-intersect and shall REFERENCE a valid curve; a polyline is NOT a valid basis_curve *) IF (('AIC_NON_MANIFOLD_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_NON_MANIFOLD_SURFACE.POLYLINE' IN TYPEOF (cv\offset_curve_3d.basis_curve)))) THEN RETURN (nmsf_curve_check(cv\offset_curve_3d.basis_curve)); ELSE (* a pcurve shall REFERENCE a valid curve AND a valid basis_surface *) IF 'AIC_NON_MANIFOLD_SURFACE.PCURVE' IN TYPEOF(cv) THEN RETURN ((nmsf_curve_check (cv\pcurve.reference_to_curve\representation.items[1])) AND (nmsf_surface_check(cv\pcurve.basis_surface))); ELSE (* a surface_curve references a curve_3d AND one or two pcurves OR one OR two surfaces OR one of each; all OF these references shall be valid *) IF 'AIC_NON_MANIFOLD_SURFACE.SURFACE_CURVE' IN TYPEOF(cv) THEN
(* IF the curve REFERENCE is correct, check also the rest *) IF nmsf_curve_check(cv\surface_curve.curve_3d) THEN REPEAT i := 1 TO SIZEOF (cv\surface_curve.associated_geometry);
(* do FOR one OR two associated_geometrys: *) IF 'AIC_NON_MANIFOLD_SURFACE.SURFACE' IN TYPEOF (cv\surface_curve.associated_geometry[i]) THEN IF NOT nmsf_surface_check (cv\surface_curve.associated_geometry[i]) THEN RETURN(FALSE); END_IF; ELSE IF 'AIC_NON_MANIFOLD_SURFACE.PCURVE' IN TYPEOF (cv\surface_curve.associated_geometry[i]) THEN IF NOT nmsf_curve_check (cv\surface_curve.associated_geometry[i]) THEN RETURN(FALSE); END_IF; END_IF; END_IF; END_REPEAT; RETURN(TRUE); END_IF; ELSE
(* a polyline shall have at least 3 points *) IF 'AIC_NON_MANIFOLD_SURFACE.POLYLINE' IN TYPEOF(cv) THEN IF (SIZEOF (cv\polyline.points) >= 3) THEN RETURN (TRUE); END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; (* FALSE is returned IF the input parameter cv is NOT a valid curve. *) RETURN (FALSE); END_FUNCTION; -- nmsf_curve_check
|