internal void RequestElemSelection(string message)
        {
            UserInputAction userInputAction = new UserInputAction
            {
                requestInputType = UserInputAction.RequestInputType.ElemSelection,
                message          = message
            };

            userInputTypes.Add(userInputAction);
        }
        internal void RequestPoints(string message)
        {
            UserInputAction userInputAction = new UserInputAction
            {
                requestInputType = UserInputAction.RequestInputType.Points,
                message          = message
            };

            userInputTypes.Add(userInputAction);
        }
        /// <summary>
        /// 사용자에게 벡터를 입력하도록 요청. 사용자가 키보드로 절대좌표를 입력한 경우는 입력값을 벡터로 반환. 마우스로 첫번째 점을 입력한 경우는 두번째 점을 요청하여 벡터 반환.
        /// </summary>
        internal void RequestVectorValue(string message)
        {
            UserInputAction userInputAction = new UserInputAction
            {
                requestInputType = UserInputAction.RequestInputType.VectorValue,
                message          = message
            };

            userInputTypes.Add(userInputAction);
        }
        internal void RequestPoints(int numPoint)
        {
            UserInputAction userInputAction = new UserInputAction
            {
                requestInputType  = UserInputAction.RequestInputType.Points,
                message           = Properties.Resource.String8,
                numPointRequested = numPoint,
                viewType          = viewType
            };

            userInputTypes.Add(userInputAction);
        }
        internal void DoAction()
        {
            if (actionStep >= userInputTypes.Count)
            {
                End();
                return;
            }
            UserInputAction userInputType = userInputTypes[actionStep];

            doingActionInputType = userInputType.requestInputType;
            switch (userInputType.requestInputType)
            {
            case UserInputAction.RequestInputType.Point:
                break;

            case UserInputAction.RequestInputType.TwoPoints:
                break;

            case UserInputAction.RequestInputType.Points:
                main.Cmd.viewType = viewType;
                main.Cmd.RequestInput_Points(userInputType.message, userInputType.numPointRequested);
                numContinuousPoint = 0;
                main.Cmd.actionAfterPointWithPoint += Put_ContinuousPoint;
                main.Cmd.actionAfterPoints         += Put;
                return;

            case UserInputAction.RequestInputType.ElemSelection:
                if (main.Fem.Selection.elems.Count == 0)
                {
                    main.Cmd.SendRequestMessage(userInputType.message);
                    End();
                }
                else
                {
                    NextAction();
                }
                return;

            case UserInputAction.RequestInputType.NodeSelection:
                if (main.Fem.Selection.nodes.Count == 0)
                {
                    main.Cmd.SendRequestMessage(userInputType.message);
                    End();
                }
                else
                {
                    NextAction();
                }
                return;

            case UserInputAction.RequestInputType.Selection:
                if (main.Fem.Selection.nodes.Count + main.Fem.Selection.elems.Count == 0)
                {
                    main.Cmd.SendRequestMessage(userInputType.message);
                    End();
                }
                else
                {
                    NextAction();
                }
                return;

            case UserInputAction.RequestInputType.Int:
                main.Cmd.RequestInput_Int(userInputType.message);
                main.Cmd.actionAfterIntWithInt += Put;
                return;

            case UserInputAction.RequestInputType.Ints:
                main.Cmd.RequestInput_Ints(userInputType.message);
                main.Cmd.actionAfterIntsWithInts += Put;
                return;

            case UserInputAction.RequestInputType.Double:
                break;

            case UserInputAction.RequestInputType.Distance:
                break;

            case UserInputAction.RequestInputType.Vector:
                //main.cmd.SendRequestMessage(userInputAction.message);
                //main.MouseDown += GetDirection;
                main.Cmd.RequestInput_Vector(userInputType.message);
                main.Cmd.actionAfterVecWithVec += Put;
                return;

            case UserInputAction.RequestInputType.VectorValue:
                main.Cmd.RequestInput_VectorValue(userInputType.message);
                main.Cmd.actionAfterVecWithVec += Put;
                return;

            default:
                break;
            }
            main.Cmd.ErrorMessage(Properties.Resource.String9);
            End();
            return;
        } //Command에 요청하거나 액션 수행.