Schema: aic_geometrically_bounded_2d_wireframe

Source : ISO 10303-503



SCHEMA aic_geometrically_bounded_2d_wireframe;

USE FROM geometric_model_schema   -- ISO 10303-42
  (geometric_curve_set,
   geometric_set);

USE FROM geometry_schema   -- ISO 10303-42
  (axis2_placement_2d,
   b_spline_curve_with_knots,
   bezier_curve,
   circle,
   composite_curve,
   composite_curve_segment,
   curve,
   curve_replica,
   ellipse,
   geometric_representation_context,
   hyperbola,
   line,
   offset_curve_2d,
   parabola,
   point_on_curve,
   polyline,
   quasi_uniform_curve,
   rational_b_spline_curve,
   trimmed_curve,
   uniform_curve);

USE FROM product_property_representation_schema   -- ISO 10303-41
  (shape_representation);

USE FROM representation_schema   -- ISO 10303-43
  (mapped_item);


ENTITY geometrically_bounded_2d_wireframe_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: SELF.context_of_items\geometric_representation_context. coordinate_space_dimension = 2;
  WR2: SIZEOF (QUERY (item <* SELF.items | NOT (SIZEOF (TYPEOF (item) * ['AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.GEOMETRIC_CURVE_SET', 'AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.AXIS2_PLACEMENT_2D', 'AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.MAPPED_ITEM']) = 1) )) = 0;
  WR3: SIZEOF (QUERY (item <* SELF.items | SIZEOF (TYPEOF (item) * ['AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.GEOMETRIC_CURVE_SET', 'AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.MAPPED_ITEM']) = 1 )) >= 1;
  WR4: SIZEOF (QUERY (mi <* QUERY (item <* SELF.items | ('AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.MAPPED_ITEM' IN TYPEOF (item))) | NOT ('AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.' + 'GEOMETRICALLY_BOUNDED_2D_WIREFRAME_REPRESENTATION' IN TYPEOF (mi\mapped_item.mapping_source.mapped_representation)) )) = 0;
  WR5: SIZEOF (QUERY (gcs <* QUERY (item <* SELF.items | ('AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.GEOMETRIC_CURVE_SET' IN TYPEOF (item))) | NOT (SIZEOF (QUERY (elem <* gcs\geometric_set.elements | NOT (SIZEOF (TYPEOF (elem) * ['AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.B_SPLINE_CURVE', 'AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.CIRCLE', 'AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.COMPOSITE_CURVE', 'AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.ELLIPSE', 'AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.OFFSET_CURVE_2D', 'AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.POINT', 'AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.POLYLINE', 'AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.TRIMMED_CURVE']) = 1) )) = 0) )) = 0;
  WR6: SIZEOF (QUERY (gcs <* QUERY (item <* SELF.items | ('AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.GEOMETRIC_CURVE_SET' IN TYPEOF (item))) | NOT (SIZEOF (QUERY (crv <* QUERY (elem <* gcs\geometric_set.elements | ('AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.CURVE' IN TYPEOF (elem))) | NOT (valid_basis_curve_in_2d_wireframe (crv)) )) = 0) )) = 0;
  WR7: SIZEOF (QUERY (gcs <* QUERY (item <* SELF.items | ('AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.GEOMETRIC_CURVE_SET' IN TYPEOF (item))) | NOT (SIZEOF (QUERY (pnt <* QUERY (elem <* gcs\geometric_set.elements | ('AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.POINT' IN TYPEOF(elem))) | NOT (SIZEOF (TYPEOF (pnt) * ['AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.CARTESIAN_POINT', 'AIC_GEOMETRICALLY_BOUNDED_2D_WIREFRAME.POINT_ON_CURVE']) = 1) )) = 0) )) = 0;
END_ENTITY;

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;

END_SCHEMA;  -- aic_geometrically_bounded_2d_wireframe