FUNCTION suitably_based_mechanism
(mbp : mechanism_base_placement, mech : mechanism) : BOOLEAN;
LOCAL kprop : kinematic_property_definition; kgrep : kinematic_ground_representation; klrep : kinematic_link_representation; klnk : kinematic_link; kjnts : BAG OF kinematic_joint; nmechs : BAG OF mechanism; nmbps : BAG OF mechanism_base_placement; END_LOCAL;
kprop := mech.containing_property;
IF ('KINEMATIC_STRUCTURE_SCHEMA.KINEMATIC_GROUND_REPRESENTATION' IN TYPEOF (mbp\representation_relationship.rep_1)) THEN kgrep := mbp\representation_relationship.rep_1;
IF (kgrep.property\property_definition_representation.definition :=: kprop) THEN RETURN (TRUE); ELSE RETURN (FALSE); END_IF; ELSE klrep := mbp\representation_relationship.rep_1; klnk := klrep.link_representation_relation.topological_aspects; kjnts := USEDIN (klnk, 'KINEMATIC_STRUCTURE_SCHEMA.KINEMATIC_JOINT.FIRST_LINK') + USEDIN (klnk, 'KINEMATIC_STRUCTURE_SCHEMA.KINEMATIC_JOINT.SECOND_LINK'); nmechs := USEDIN (kjnts[1].structure, 'KINEMATIC_STRUCTURE_SCHEMA.MECHANISM.STRUCTURE_DEFINITION');
IF (nmechs[1] :=: mech) THEN RETURN (FALSE); ELSE IF (nmechs[1].containing_property :<>: kprop) THEN RETURN (FALSE); ELSE nmbps := USEDIN (nmechs[1], 'KINEMATIC_STRUCTURE_SCHEMA.'+ 'MECHANISM_BASE_PLACEMENT.BASE_OF_MECHANISM');
IF (SIZEOF (nmbps) = 0) THEN RETURN (FALSE); ELSE RETURN (suitably_based_mechanism (nmbps[1], mech)); END_IF; END_IF; END_IF; END_IF; END_FUNCTION; -- suitably_based_mechanism
|