SCHEMA aic_csg;
  
USE FROM aic_advanced_brep;
 USE FROM aic_faceted_brep;
 USE FROM geometric_model_schema ( block, boolean_operand, boolean_operator, boolean_result, box_domain, boxed_half_space, csg_primitive, csg_select, csg_solid, extruded_face_solid, half_space_solid, revolved_face_solid, right_angular_wedge, right_circular_cone, right_circular_cylinder, solid_replica, sphere, torus);
  
ENTITY csg_shape_representation 
 SUBTYPE OF ( shape_representation );
 WHERE 
WR1 : SELF.context_of_items\geometric_representation_context.coordinate_space_dimension = 3;
WR2 : 
SIZEOF ( 
QUERY ( it <* SELF.items| ( SIZEOF ([ 'AIC_CSG.CSG_SOLID', 'AIC_CSG.MAPPED_ITEM', 'AIC_CSG.AXIS2_PLACEMENT_3D', 'AIC_CSG.SOLID_REPLICA', 'AIC_CSG.REVOLVED_FACE_SOLID', 'AIC_CSG.EXTRUDED_FACE_SOLID' ] * TYPEOF (it)) <> 1) )) = 0;
WR3 : 
SIZEOF ( 
QUERY ( mi <* 
QUERY ( it <* SELF.items| ('AIC_CSG.MAPPED_ITEM' IN TYPEOF (it)) )| NOT ('AIC_CSG.CSG_SHAPE_REPRESENTATION' IN TYPEOF (mi\mapped_item.mapping_source.mapped_representation)) )) = 0;
WR4 : 
SIZEOF ( 
QUERY ( sr <* 
QUERY ( it <* SELF.items| ('AIC_CSG.SOLID_REPLICA' IN TYPEOF (it)) )| ( SIZEOF ([ 'AIC_CSG.CSG_SOLID', 'AIC_CSG.REVOLVED_FACE_SOLID', 'AIC_CSG.EXTRUDED_FACE_SOLID' ] * TYPEOF (sr\solid_replica.parent_solid)) = 0) )) = 0;
WR5 : 
SIZEOF ( 
QUERY ( it <* SELF.items| NOT ('AIC_CSG.AXIS2_PLACEMENT_3D' IN TYPEOF (it)) )) > 0;
 END_ENTITY ;
END_SCHEMA;
 