protected override List<PoseProfile> CoreParameterToPose(bool right = true)
        {
            double width   = Parameters["Width"].Value;
            double height  = Parameters["Height"].Value;
            double palmdir = Parameters["PalmDir"].Value;
            double finger  = Parameters["Finger"].Value;
            double headud  = Parameters["HeadUpDown"].Value;
            double headlr  = Parameters["HeadLeftRight"].Value;

            double shoulderPitch_open = -20*height+90;
            double shoulderRoll_open = -20 * width -10;
            double elbowYaw_open = 29.5*width + 90;
            double elbowRoll_open = 88.5;
            double wristYaw_open = 60*palmdir;
            double hand_open = 1;

            double shoulderPitch_close = -25*height+70;
            double shoulderRoll_close = -10*width+10;
            double elbowYaw_close = -10*width+65;
            double elbowRoll_close = 88.5;
            double wristYaw_close = -20;
            double hand_close = 0.2 * finger + 0.6;

            // degree
            double headPitch = base.NormalizeHeadPitch(headud);
            // degree
            double headYaw = double.NaN;

            RArm rarmposeopen = new RArm(false, 
                shoulderPitch_open, shoulderRoll_open,
                elbowYaw_open, elbowRoll_open,
                wristYaw_open, hand_open);
            LArm larmposeopen = (LArm)rarmposeopen.MirrorLeftRight();

            RArm rarmposeclose = new RArm(false,
                shoulderPitch_close, shoulderRoll_close,
                elbowYaw_close, elbowRoll_close,
                wristYaw_close, hand_close);
            LArm larmposeclose = (LArm)rarmposeclose.MirrorLeftRight();

            Head head = new Head(false, headPitch, headYaw);

            PoseProfile arm_r_pose_open = new PoseProfile("OpenPose", rarmposeopen, true, 0.3, 0);
            PoseProfile arm_l_pose_open = new PoseProfile("OpenPose", larmposeopen, true, 0.3, 0);
            PoseProfile head_pose       = new PoseProfile("OpenPose", head);
            PoseProfile arm_r_pose_close = new PoseProfile("ClosePose", rarmposeclose, true, 1, 0);
            PoseProfile arm_l_pose_close = new PoseProfile("ClosePose", larmposeclose, true, 1, 0);

            List<PoseProfile> lpp = new List<PoseProfile>();
            lpp.Add(arm_r_pose_open);
            lpp.Add(arm_l_pose_open);
            lpp.Add(head_pose);
            lpp.Add(arm_r_pose_close);
            lpp.Add(arm_l_pose_close);

            return lpp;
        }
        protected override List<PoseProfile> CoreParameterToPose(bool right = true)
        {
            double width     = Parameters["Width"].Value;
            double amplitude = Parameters["Amplitude"].Value;
            double palmdir   = Parameters["PalmDir"].Value;
            double finger    = Parameters["Finger"].Value;
            double headud    = Parameters["HeadUpDown"].Value;
            double headlr    = Parameters["HeadLeftRight"].Value;

            // width
            double shldroll = -20 * width;
            double elbyaw = 25 * width + 65;

            // high pose
            double shldptch_high = -15 * amplitude + 45;
            double elbroll_high = 13.5 * amplitude + 75;

            // low pose
            double shldptch_low = 5 * amplitude + 85;
            double elbroll_low = 15 * amplitude + 60;

            double hand = 0.3 * finger + 0.5;
            double wristyaw = 60 * palmdir + 30;

            // degree
            double headPitch = base.NormalizeHeadPitch(headud);
            // degree
            double headYaw = double.NaN;

            Head head = new Head(false, headPitch, headYaw);
            RArm rarm_high = new RArm(false, shldptch_high, shldroll, elbyaw, elbroll_high, wristyaw, hand);
            RArm rarm_low = new RArm(false, shldptch_low, shldroll, elbyaw, elbroll_low, wristyaw, hand);
            LArm larm_high = (LArm)rarm_high.MirrorLeftRight();
            LArm larm_low = (LArm)rarm_low.MirrorLeftRight();

            // Joints
            PoseProfile pose_head = new PoseProfile("Pose1", head);
            PoseProfile pose_larm_high = new PoseProfile("Pose1", larm_high);
            PoseProfile pose_larm_low = new PoseProfile("Pose2", larm_low);
            PoseProfile pose_rarm_high = new PoseProfile("Pose2", rarm_high);
            PoseProfile pose_rarm_low = new PoseProfile("Pose3", rarm_low);
            PoseProfile pose_larm_high1 = new PoseProfile("Pose3", larm_high);
            PoseProfile pose_larm_low1 = new PoseProfile("Pose4", larm_low);

            List<PoseProfile> lpp = new List<PoseProfile>();
            lpp.Add(pose_head);
            lpp.Add(pose_larm_high);
            lpp.Add(pose_larm_low);
            lpp.Add(pose_rarm_high);
            lpp.Add(pose_rarm_low);
            lpp.Add(pose_larm_high1);
            lpp.Add(pose_larm_low1);

            return lpp;
        }
        protected override List<PoseProfile> CoreParameterToPose(bool right = true)
        {
            double width   = Parameters["Width"].Value;
            double amp     = Parameters["Amplitude"].Value;
            double palmdir = Parameters["PalmDir"].Value;
            double finger  = Parameters["Finger"].Value;
            double headud  = Parameters["HeadUpDown"].Value;
            double headlr  = Parameters["HeadLeftRight"].Value;

            double shoulderRoll = -30 * width;
            double elbowYaw = 39.5 * width + 80;
            double elbowRollLow = -28 * amp + 30;
            double elbowRollHigh = 28.5 * amp + 60;
            double shoulderPitchLow = 20 * amp + 70;
            double shoulderPitchHigh = -10 * amp + 30;
            double wristYaw = 74 * palmdir + 30;
            // finger 0~1
            double hand = 0.4 * finger + 0.6;

            // degree
            double headPitch = base.NormalizeHeadPitch(headud);
            // degree
            double headYaw = double.NaN;

            RArm rarmposelow = new RArm(false,shoulderPitchLow,shoulderRoll,elbowYaw,elbowRollLow,wristYaw,hand);
            LArm larmposelow = (LArm)rarmposelow.MirrorLeftRight();

            RArm rarmposehigh = new RArm(false,shoulderPitchHigh,shoulderRoll,elbowYaw,elbowRollHigh,wristYaw,hand);
            LArm larmposehigh = (LArm)rarmposehigh.MirrorLeftRight();

            Head head = new Head(false, headPitch, headYaw);

            PoseProfile arm_r_pose_low = new PoseProfile("LowPose", rarmposelow, true, 0.3, 0);
            PoseProfile arm_l_pose_low = new PoseProfile("LowPose", larmposelow, true, 0.3, 0);

            PoseProfile head_pose = new PoseProfile("LowPose", head);

            PoseProfile arm_r_pose_high = new PoseProfile("HighPose", rarmposehigh, true, 1, 0);
            PoseProfile arm_l_pose_high = new PoseProfile("HighPose", larmposehigh, true, 1, 0);

            List<PoseProfile> lpp = new List<PoseProfile>();
            lpp.Add(arm_r_pose_low);
            lpp.Add(arm_l_pose_low);
            lpp.Add(head_pose);
            lpp.Add(arm_r_pose_high);
            lpp.Add(arm_l_pose_high);

            return lpp;
        }
        protected override List<PoseProfile> CoreParameterToPose(bool right = true)
        {
            double width     = Parameters["Width"].Value;
            double height    = Parameters["Height"].Value;
            double finger    = Parameters["Finger"].Value;
            double headud    = Parameters["HeadUpDown"].Value;
            double headlr    = Parameters["HeadLeftRight"].Value;

            // right
            double shldroll_r =-15*width -5;
            double elbyaw_r   =90;
            double shldptch_r =-40*height+90;
            double elbroll_r  =28.5*height+60;
            double wristyaw_r =74.5*height+30;
            double hand_r     =0.3*finger+0.5;

            // degree
            double headPitch = base.NormalizeHeadPitch(headud);
            double headYaw = double.NaN;

            Head head = new Head(false, headPitch, headYaw);
            RArm rarm_one = new RArm(false, shldptch_r, shldroll_r,
                elbyaw_r, elbroll_r, wristyaw_r, hand_r);
            LArm larm_theother = (LArm)rarm_one.MirrorLeftRight();

            // Joints
            PoseProfile pose_head = new PoseProfile("Prepare", head);
            List<PoseProfile> lpp_prepare = base.ArmChest("Prepare");
            PoseProfile pose_rarm_one = new PoseProfile("One", rarm_one);
            PoseProfile pose_larm_theother = new PoseProfile("TheOther", larm_theother);

            List<PoseProfile> lpp = new List<PoseProfile>();
            lpp.Add(pose_head);
            lpp.AddRange(lpp_prepare);
            lpp.Add(pose_rarm_one);
            lpp.Add(pose_larm_theother);

            return lpp;
        }
        protected List<PoseProfile> StandArmPose(string mfname)
        {
            RArm armR = new RArm(
                false,
                86,
                -7,
                68,
                23.5,
                6,
                0.3);
            LArm armL = (LArm)armR.MirrorLeftRight();
            PoseProfile armppR = new PoseProfile(mfname, armR);
            PoseProfile armppL = new PoseProfile(mfname, armL);
            List<PoseProfile> lpp = new List<PoseProfile>();
            lpp.Add(armppR);
            lpp.Add(armppL);

            return lpp;
        }