|
FUNCTION plane_angle_for_pair_in_radian (pair : kinematic_pair, angle : plane_angle_measure) : plane_angle_measure; LOCAL converted_angle : plane_angle_measure := angle ; link_rep : kinematic_link_representation := representation_of_link ( pair . joint . first_link ) ; link_cntxt : representation_context ; pa_units : SET OF unit := [ ] ; pau : unit ; END_LOCAL ; link_cntxt := link_rep \ representation . context_of_items ; IF NOT ( 'measure_schema.global_unit_assigned_context' IN TYPEOF ( link_cntxt ) ) THEN RETURN ( ? ) ; END_IF ; pa_units := QUERY ( unit <* link_cntxt \ global_unit_assigned_context . units | 'measure_schema.plane_angle_unit' IN TYPEOF ( unit ) ) ; IF SIZEOF ( pa_units ) <> 1 THEN RETURN ( ? ) ; END_IF ; pau := pa_units [ 1 ] ; IF ( NOT ( 'measure_schema.si_unit' IN TYPEOF ( pau ) ) AND NOT ( 'measure_schema.conversion_based_unit' IN TYPEOF ( pau ) ) ) THEN RETURN ( ? ) ; END_IF ; REPEAT WHILE ( 'measure_schema.conversion_based_unit' IN TYPEOF ( pau ) ) ; converted_angle := converted_angle * pau \ conversion_based_unit . conversion_factor . value_component ; pau := pau \ conversion_based_unit . conversion_factor . unit_component ; IF ( ( NOT ( 'measure_schema.si_unit' IN TYPEOF ( pau ) ) AND NOT ( 'measure_schema.conversion_based_unit' IN TYPEOF ( pau ) ) ) OR ( NOT ( 'measure_schema.plane_angle_unit' IN TYPEOF ( pau ) ) ) ) THEN RETURN ( ? ) ; END_IF ; END_REPEAT ; IF ( pau \ si_unit . name <> si_unit_name . radian ) THEN RETURN ( ? ) ; END_IF ; CASE pau \ si_unit . prefix OF si_prefix . exa : RETURN ( 1.e18 * converted_angle ) ; si_prefix . peta : RETURN ( 1.e15 * converted_angle ) ; si_prefix . tera : RETURN ( 1.e12 * converted_angle ) ; si_prefix . giga : RETURN ( 1.e9 * converted_angle ) ; si_prefix . mega : RETURN ( 1.e6 * converted_angle ) ; si_prefix . kilo : RETURN ( 1.e3 * converted_angle ) ; si_prefix . hecto : RETURN ( 1.e2 * converted_angle ) ; si_prefix . deca : RETURN ( 1.e1 * converted_angle ) ; si_prefix . deci : RETURN ( 1.e-1 * converted_angle ) ; si_prefix . centi : RETURN ( 1.e-2 * converted_angle ) ; si_prefix . milli : RETURN ( 1.e-3 * converted_angle ) ; si_prefix . micro : RETURN ( 1.e-6 * converted_angle ) ; si_prefix . nano : RETURN ( 1.e-9 * converted_angle ) ; si_prefix . pico : RETURN ( 1.e-12 * converted_angle ) ; si_prefix . femto : RETURN ( 1.e-15 * converted_angle ) ; si_prefix . atto : RETURN ( 1.e-18 * converted_angle ) ; OTHERWISE : RETURN ( converted_angle ) ; END_CASE ; END_FUNCTION; -- plane_angle_for_pair_in_radian |
|
public class FPlane_angle_for_pair_in_radian public static Value run(SdaiContext _context, Value pair, Value angle) |