|
FUNCTION convert_plane_angle_for_pair_from_radian (pair : kinematic_pair, angle_expr : REAL) : plane_angle_measure; LOCAL link_rep : kinematic_link_representation := representation_of_link ( pair . joint . first_link ) ; link_cntxt : representation_context ; pa_units : SET OF unit := [ ] ; pau : unit ; conv_factor : REAL := 1.0 ; result : plane_angle_measure ; 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 ) ) ; conv_factor := conv_factor * 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 : conv_factor := 1.e18 * conv_factor ; si_prefix . peta : conv_factor := 1.e15 * conv_factor ; si_prefix . tera : conv_factor := 1.e12 * conv_factor ; si_prefix . giga : conv_factor := 1.e9 * conv_factor ; si_prefix . mega : conv_factor := 1.e6 * conv_factor ; si_prefix . kilo : conv_factor := 1.e3 * conv_factor ; si_prefix . hecto : conv_factor := 1.e2 * conv_factor ; si_prefix . deca : conv_factor := 1.e1 * conv_factor ; si_prefix . deci : conv_factor := 1.e-1 * conv_factor ; si_prefix . centi : conv_factor := 1.e-2 * conv_factor ; si_prefix . milli : conv_factor := 1.e-3 * conv_factor ; si_prefix . micro : conv_factor := 1.e-6 * conv_factor ; si_prefix . nano : conv_factor := 1.e-9 * conv_factor ; si_prefix . pico : conv_factor := 1.e-12 * conv_factor ; si_prefix . femto : conv_factor := 1.e-15 * conv_factor ; si_prefix . atto : conv_factor := 1.e-18 * conv_factor ; END_CASE ; result := angle_expr / conv_factor ; RETURN ( result ) ; END_FUNCTION; -- convert_plane_angle_for_pair_from_radian |
|
public class FConvert_plane_angle_for_pair_from_radian public static Value run(SdaiContext _context, Value pair, Value angle_expr) |