FUNCTION valid_basis_curve_in_2d_wireframe
(crv : curve) : BOOLEAN;
IF SIZEOF (['AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.POLYLINE', 'AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.B_SPLINE_CURVE', 'AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.ELLIPSE', 'AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.CIRCLE'] * TYPEOF (crv)) = 1 THEN RETURN (TRUE); ELSE -- IF the curve is a trimmed_curve IF (('AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.TRIMMED_CURVE') IN TYPEOF (crv)) THEN -- IF a line, parabola, OR hyperbola is being trimmed, THEN valid IF SIZEOF (['AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.LINE', 'AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.PARABOLA', 'AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.HYPERBOLA'] * TYPEOF(crv\trimmed_curve.basis_curve)) = 1 THEN RETURN (TRUE); -- otherwise, recursively check basis_curve ELSE RETURN (valid_basis_curve_in_2d_wireframe (crv\trimmed_curve.basis_curve)); END_IF; ELSE -- recursively check the offset_curve basis curve IF (('AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.OFFSET_CURVE_2D') IN TYPEOF (crv)) THEN RETURN (valid_basis_curve_in_2d_wireframe (crv\offset_curve_2d.basis_curve)); ELSE -- recursively check the curve_replica parent curve IF (('AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.CURVE_REPLICA') IN TYPEOF (crv)) THEN RETURN (valid_basis_curve_in_2d_wireframe (crv\curve_replica.parent_curve)); ELSE -- recursively check the composite_curve segments IF (('AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.COMPOSITE_CURVE') IN TYPEOF (crv)) THEN RETURN (SIZEOF (QUERY (ccs <* crv\composite_curve.segments | NOT (valid_basis_curve_in_2d_wireframe (ccs.parent_curve)))) = 0); END_IF; END_IF; END_IF; END_IF; END_IF; RETURN (FALSE); END_FUNCTION; -- valid_basis_curve_in_2d_wireframe
|