Source : ISO 10303-521
SCHEMA aic_manifold_subsurface;
USE FROM
aic_topologically_bounded_surface;
-- ISO 10303-511
USE FROM
geometry_schema -- ISO 10303-42
(cartesian_transformation_operator_3d);
USE FROM
topology_schema -- ISO 10303-42
(closed_shell,
connected_face_set,
connected_face_sub_set,
face,
open_shell,
subedge,
subface);
USE FROM
representation_schema -- ISO 10303-43
(mapped_item);
USE FROM
product_property_representation_schema -- ISO 10303-41
(shape_representation);
ENTITY manifold_subsurface_shape_representation
SUBTYPE OF (shape_representation);
WHERE
WR1: SIZEOF (QUERY (it <* SELF.items |
NOT (SIZEOF (['AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET',
'AIC_MANIFOLD_SUBSURFACE.MAPPED_ITEM',
'AIC_MANIFOLD_SUBSURFACE.AXIS2_PLACEMENT_3D'] *
TYPEOF(it)) = 1))) = 0;
WR2: SIZEOF (QUERY (it <* SELF.items |
SIZEOF(['AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET',
'AIC_MANIFOLD_SUBSURFACE.MAPPED_ITEM'] * TYPEOF(it)) =1 )) > 0;
WR3: SIZEOF (QUERY (mi <* QUERY (it <* items |
'AIC_MANIFOLD_SUBSURFACE.MAPPED_ITEM' IN TYPEOF(it)) |
NOT ('AIC_MANIFOLD_SUBSURFACE.MANIFOLD_SUBSURFACE_SHAPE_REPRESENTATION' IN
TYPEOF(mi\mapped_item.mapping_source.
mapped_representation)))) = 0;
WR4: SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items |
'AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) |
NOT('AIC_MANIFOLD_SUBSURFACE.OPEN_SHELL' IN TYPEOF(cfss)))) = 0;
WR5: SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items |
'AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) |
NOT( (('AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET' IN
TYPEOF(cfss\connected_face_sub_set.parent_face_set))AND
(SIZEOF(QUERY(fac <* cfss\connected_face_sub_set.parent_face_set\connected_face_set.cfs_faces | NOT
advanced_face_properties(fac))) = 0)) OR
(SIZEOF(QUERY(fac <* cfss\connected_face_sub_set.parent_face_set\connected_face_set.cfs_faces | NOT
('AIC_MANIFOLD_SUBSURFACE.ADVANCED_FACE' IN TYPEOF(fac)))) = 0)
))) = 0;
WR6: SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items |
'AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) |
( SIZEOF (QUERY (fac <* cfss\connected_face_set.cfs_faces | NOT
advanced_face_properties(fac))) = 0))) = 0;
WR7: SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items |
'AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) |
NOT (SIZEOF (QUERY(fcs <* cfss\connected_face_set.cfs_faces |
('AIC_MANIFOLD_SUBSURFACE.SUBFACE' IN TYPEOF(fcs)) AND
NOT (SIZEOF(QUERY (elp_fbnds <* QUERY (bnds <* fcs.bounds |
'AIC_MANIFOLD_SUBSURFACE.EDGE_LOOP' IN TYPEOF(bnds.bound)) |
NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list |
NOT(('AIC_MANIFOLD_SUBSURFACE.EDGE_CURVE' IN
TYPEOF(oe.edge_element)) OR
('AIC_MANIFOLD_SUBSURFACE.SUBEDGE' IN
TYPEOF(oe.edge_element)) ))) = 0
))) = 0
))) = 0
))) = 0;
WR8: SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items |
'AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) |
NOT (SIZEOF (QUERY(fcs <* cfss\connected_face_set.cfs_faces |
('AIC_MANIFOLD_SUBSURFACE.SUBFACE' IN TYPEOF(fcs)) AND
NOT (SIZEOF(QUERY (elp_fbnds <* QUERY (bnds <* fcs.bounds |
'AIC_MANIFOLD_SUBSURFACE.EDGE_LOOP' IN TYPEOF(bnds.bound)) |
NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list |
NOT(('AIC_MANIFOLD_SUBSURFACE.VERTEX_POINT' IN TYPEOF(oe.edge_start))
AND ('AIC_MANIFOLD_SUBSURFACE.VERTEX_POINT' IN
TYPEOF(oe.edge_end))
))) = 0
))) = 0
))) = 0
))) = 0;
WR9: SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items |
'AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) |
NOT (SIZEOF (QUERY(fcs <* cfss\connected_face_set.cfs_faces |
( 'AIC_MANIFOLD_SUBSURFACE.SUBFACE' IN TYPEOF(fcs)) AND
( NOT (SIZEOF(QUERY (bnds <* fcs.bounds |
NOT (SIZEOF (['AIC_MANIFOLD_SUBSURFACE.EDGE_LOOP',
'AIC_MANIFOLD_SUBSURFACE.VERTEX_LOOP'] *
TYPEOF(bnds.bound)) = 1 )
)) = 0)
))) = 0
))) = 0;
WR10: SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items |
'AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) |
NOT (SIZEOF (QUERY(fcs <* cfss\connected_face_set.cfs_faces |
( 'AIC_MANIFOLD_SUBSURFACE.SUBFACE' IN TYPEOF(fcs)) AND
( NOT (SIZEOF(QUERY (elp_fbnds <* QUERY (bnds <* fcs.bounds |
'AIC_MANIFOLD_SUBSURFACE.EDGE_LOOP' IN TYPEOF(bnds.bound)) |
NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list |
NOT (SIZEOF (['AIC_MANIFOLD_SUBSURFACE.LINE',
'AIC_MANIFOLD_SUBSURFACE.CONIC',
'AIC_MANIFOLD_SUBSURFACE.POLYLINE',
'AIC_MANIFOLD_SUBSURFACE.SURFACE_CURVE',
'AIC_MANIFOLD_SUBSURFACE.B_SPLINE_CURVE' ] *
TYPEOF(oe.edge_element\edge_curve.edge_geometry)) = 1 )
)) = 0
))) = 0
)))) = 0
))) = 0;
WR11: SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items |
'AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) |
NOT (SIZEOF (QUERY(fcs <* cfss\connected_face_set.cfs_faces |
( 'AIC_MANIFOLD_SUBSURFACE.SUBFACE' IN TYPEOF(fcs)) AND
(NOT (SIZEOF(QUERY (elp_fbnds <* QUERY (bnds <* fcs.bounds |
'AIC_MANIFOLD_SUBSURFACE.EDGE_LOOP' IN TYPEOF(bnds.bound)) |
NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list |
('AIC_MANIFOLD_SUBSURFACE.SURFACE_CURVE' IN
TYPEOF(oe.edge_element\edge_curve.edge_geometry)) AND
(NOT ((SIZEOF (QUERY (sc_ag <*
oe.edge_element\edge_curve.edge_geometry\
surface_curve.associated_geometry |
NOT ('AIC_TOPOLOGICALLY_BOUNDED_SURFACE.PCURVE' IN
TYPEOF(sc_ag)))) = 0)))
)) = 0
))) = 0
)))) = 0
))) = 0;
WR12: SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items |
'AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) |
NOT (SIZEOF (QUERY(fcs <* cfss\connected_face_set.cfs_faces |
( 'AIC_MANIFOLD_SUBSURFACE.SUBFACE' IN TYPEOF(fcs)) AND
(NOT (SIZEOF(QUERY (elp_fbnds <* QUERY (bnds <* fcs.bounds |
'AIC_MANIFOLD_SUBSURFACE.EDGE_LOOP' IN TYPEOF(bnds.bound)) |
NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list |
('AIC_MANIFOLD_SUBSURFACE.POLYLINE' IN
TYPEOF(oe.edge_element\edge_curve.edge_geometry)) AND
(NOT (SIZEOF (oe\oriented_edge.edge_element\
edge_curve.edge_geometry\polyline.points) >= 3))
)) = 0
))) = 0
)))) = 0
))) = 0;
END_ENTITY;
FUNCTION advanced_face_properties
(testface : face) : BOOLEAN;
IF 'AIC_MANIFOLD_SUBSURFACE.ADVANCED_FACE' IN TYPEOF(testface) THEN RETURN (TRUE); END_IF; (* if testface is a subface recursively test the parent_face, return FALSE for all other types of face *) IF ('AIC_MANIFOLD_SUBSURFACE.SUBFACE' IN TYPEOF(testface)) THEN RETURN(advanced_face_properties(testface\subface.parent_face)); ELSE RETURN (FALSE); END_IF;
END_FUNCTION;
END_SCHEMA; -- aic_manifold_subsurface