FUNCTION frame_associated_to_background
(frame : rigid_placement, background : kinematic_frame_background) : BOOLEAN;
LOCAL rep_bag : BAG OF kinematic_frame_background_representation; trf_bag : BAG OF kinematic_frame_based_transformation; trm_bag : BAG OF kinematic_frame_based_transformation; ass_bag : BAG OF kinematic_frame_background_representation_association; rep : kinematic_frame_background_representation; ass : kinematic_frame_background_representation_association; END_LOCAL;
rep_bag := QUERY ( bg <* USEDIN (background, 'KINEMATIC_STRUCTURE_SCHEMA.' + 'REPRESENTATION.ITEMS')| 'KINEMATIC_STRUCTURE_SCHEMA.'+ 'KINEMATIC_FRAME_BACKGROUND_REPRESENTATION' IN TYPEOF (bg) );
IF SIZEOF (rep_bag) = 0 THEN RETURN (FALSE); END_IF;
trf_bag := USEDIN (frame, 'KINEMATIC_STRUCTURE_SCHEMA.' + 'KINEMATIC_FRAME_BASED_TRANSFORMATION.' + 'TRANSFORMATOR');
IF SIZEOF (trf_bag) = 0 THEN RETURN (FALSE); END_IF;
REPEAT i := 1 TO HIINDEX (rep_bag); rep := rep_bag[i];
ass_bag := QUERY ( kfbra <* USEDIN ( rep, 'KINEMATIC_STRUCTURE_SCHEMA.' + 'REPRESENTATION_RELATIONSHIP.REP_2') | 'KINEMATIC_STRUCTURE_SCHEMA.'+ 'KINEMATIC_FRAME_BACKGROUND_REPRESENTATION_ASSOCIATION' IN TYPEOF ( kfbra ) );
IF SIZEOF (ass_bag) > 0 THEN REPEAT j:= 1 TO HIINDEX (ass_bag); ass := ass_bag[j];
trm_bag := QUERY (trm <* trf_bag | (trm :=: ass\representation_relationship_with_transformation. transformation_operator));
IF SIZEOF (trm_bag) > 0 THEN RETURN (TRUE); END_IF;
END_REPEAT; END_IF; END_REPEAT;
RETURN (FALSE); END_FUNCTION; -- frame_associated_to_background
|