Overview Schemas Index

AIC_MANIFOLD_SURFACE (jsdai.SAic_manifold_surface)


FUNCTION msf_curve_check
          (cv : representation_item) : BOOLEAN;

IF SIZEOF  (['AIC_MANIFOLD_SURFACE.BOUNDED_CURVE',
  'AIC_MANIFOLD_SURFACE.CONIC',
  'AIC_MANIFOLD_SURFACE.CURVE_REPLICA', 'AIC_MANIFOLD_SURFACE.LINE',
  'AIC_MANIFOLD_SURFACE.OFFSET_CURVE_3D'] * TYPEOF(cv)) > 1 THEN
  RETURN(FALSE);
END_IF;

(* b_spline_curves shall NOT  self-intersect
 *)
IF (('AIC_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_MANIFOLD_SURFACE.CONIC', 'AIC_MANIFOLD_SURFACE.LINE'] 
    * TYPEOF  (cv)) = 1 THEN
    RETURN(TRUE);
  ELSE

    (* a curve_replica shall REFERENCE  a valid curve
     *)
    IF  'AIC_MANIFOLD_SURFACE.CURVE_REPLICA' IN  TYPEOF(cv) THEN
      RETURN  (msf_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_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_MANIFOLD_SURFACE.POLYLINE' IN  TYPEOF
        (cv\offset_curve_3d.basis_curve)))) THEN
        RETURN  (msf_curve_check(cv\offset_curve_3d.basis_curve)); 
      ELSE  
 
        (* a pcurve shall REFERENCE  a valid curve AND  a valid
           basis_surface
         *)
        IF  'AIC_MANIFOLD_SURFACE.PCURVE' IN  TYPEOF(cv) THEN  
          RETURN  ((msf_curve_check
          (cv\pcurve.reference_to_curve\representation.items[1])) AND
          (msf_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_MANIFOLD_SURFACE.SURFACE_CURVE' IN  TYPEOF(cv) THEN  

            (* IF  the curve REFERENCE is correct, check also the rest
             *)
            IF  msf_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_MANIFOLD_SURFACE.SURFACE' IN  
                  TYPEOF  (cv\surface_curve.associated_geometry[i]) THEN   
                  IF  NOT  msf_surface_check
                    (cv\surface_curve.associated_geometry[i]) THEN   
                    RETURN(FALSE);  
                  END_IF;  
                ELSE  
                  IF  'AIC_MANIFOLD_SURFACE.PCURVE' IN  TYPEOF 
                    (cv\surface_curve.associated_geometry[i]) THEN   
                    IF  NOT  msf_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_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; 
(* FALSE is returned IF the input parameter cv is NOT a valid curve.
 *)
RETURN (FALSE);

END_FUNCTION; -- msf_curve_check

public class FMsf_curve_check
          public static Value run(SdaiContext _context, Value cv)