private void onClick_rotate()
 {
     _mode = Mode_Enum.Rotate;
     StageManager.SetStage_Load_Model();
 }
 private void onClick_move()
 {
     _mode = Mode_Enum.Move;
     StageManager.SetStage_Load_Model();
 }
 private void onClick_scale()
 {
     _mode = Mode_Enum.Scale;
     StageManager.SetStage_Load_Model();
 }
    void Update()
    {
        //hide operate container when click empty place. check update_mode
        if (!EventSystem.current.IsPointerOverGameObject())
        {
            if (Input.GetKeyDown(KeyCode.Mouse0))
            {
                _mode = Mode_Enum.None;
            }
        }

        /*************** btn_export ***************/
        bool exportable =
            StageManager.GetStageList().Contains(StageManager.Stage_Enum.Gcode_Render) &&
            GcodeRenderManager.GetInstance().GetInfo().isRendered&&
            StageManager.GetCurStage() != StageManager.Stage_Enum.Gcode_Send &&
            GcodeRenderManager.GetInstance().IsInBounds();

        if (exportable)
        {
            btn_export.spriteState = _ss_exportEnable;
            btn_export.gameObject.GetComponent <Image>().sprite = _sp_export_normal;
        }
        else
        {
            btn_export.spriteState = _ss_exportDisable;
            btn_export.gameObject.GetComponent <Image>().sprite = _sp_export_disable;
        }

        /*************** btn_print ***************/
        bool active_print =
            StageManager.GetStageList().Contains(StageManager.Stage_Enum.Gcode_Render) &&
            !GcodeRenderManager.GetInstance().GetInfo().isParsing&&
            StageManager.GetCurStage() != StageManager.Stage_Enum.Gcode_Send &&
            PortConnectManager.GetInstance().IsConnected() &&
            GcodeRenderManager.GetInstance().IsInBounds();

        btn_print.interactable = active_print;

        /*************** other widget ***************/
        switch (StageManager.GetCurStage())
        {
        case StageManager.Stage_Enum.Idle:

            btn_open.interactable   = true;
            btn_move.interactable   = false;
            btn_scale.interactable  = false;
            btn_rotate.interactable = false;

            img_moveContainer.GetComponent <Transform>().gameObject.SetActive(false);
            img_scaleContainer.GetComponent <Transform>().gameObject.SetActive(false);
            img_rotateContainer.GetComponent <Transform>().gameObject.SetActive(false);

            break;

        case StageManager.Stage_Enum.Load_Model:

            if (ModelManager.GetInstance().GetInfo().isParsing)
            {
                btn_open.interactable   = false;
                btn_move.interactable   = false;
                btn_scale.interactable  = false;
                btn_rotate.interactable = false;

                img_moveContainer.GetComponent <Transform>().gameObject.SetActive(false);
                img_scaleContainer.GetComponent <Transform>().gameObject.SetActive(false);
                img_rotateContainer.GetComponent <Transform>().gameObject.SetActive(false);
            }
            else
            {
                btn_open.interactable   = true;
                btn_move.interactable   = true;
                btn_scale.interactable  = true;
                btn_rotate.interactable = true;

                update_mode();
            }

            break;

        case StageManager.Stage_Enum.Gcode_Create:

            btn_open.interactable   = false;
            btn_move.interactable   = false;
            btn_scale.interactable  = false;
            btn_rotate.interactable = false;

            img_moveContainer.GetComponent <Transform>().gameObject.SetActive(false);
            img_scaleContainer.GetComponent <Transform>().gameObject.SetActive(false);
            img_rotateContainer.GetComponent <Transform>().gameObject.SetActive(false);

            break;

        case StageManager.Stage_Enum.Gcode_Render:
            //Sigle thread so far
            //todo: Rendering/Rendered
            if (GcodeRenderManager.GetInstance().GetInfo().isParsing)
            {
                btn_open.interactable   = false;
                btn_move.interactable   = false;
                btn_scale.interactable  = false;
                btn_rotate.interactable = false;

                img_moveContainer.GetComponent <Transform>().gameObject.SetActive(false);
                img_scaleContainer.GetComponent <Transform>().gameObject.SetActive(false);
                img_rotateContainer.GetComponent <Transform>().gameObject.SetActive(false);
            }
            else
            {
                btn_open.interactable   = true;
                btn_move.interactable   = true;
                btn_scale.interactable  = true;
                btn_rotate.interactable = true;

                update_mode();
            }
            break;

        case StageManager.Stage_Enum.Gcode_Send:

            btn_open.interactable   = false;
            btn_move.interactable   = false;
            btn_scale.interactable  = false;
            btn_rotate.interactable = false;

            img_moveContainer.GetComponent <Transform>().gameObject.SetActive(false);
            img_scaleContainer.GetComponent <Transform>().gameObject.SetActive(false);
            img_rotateContainer.GetComponent <Transform>().gameObject.SetActive(false);

            break;
        }

        if (ModelManager.GetInstance().GetRenderOperateBean() != null)
        {
            if (!input_moveX.isFocused)
            {
                input_moveX.text = (ModelManager.GetInstance().GetRenderOperateBean().move.x).ToString("0.0");
            }

            if (!input_moveY.isFocused)
            {
                input_moveY.text = (ModelManager.GetInstance().GetRenderOperateBean().move.y).ToString("0.0");
            }

            if (!input_scale.isFocused)
            {
                input_scale.text = (ModelManager.GetInstance().GetRenderOperateBean().scale * 100).ToString("0.0");
            }

            if (!input_rotateX.isFocused)
            {
                input_rotateX.text = (ModelManager.GetInstance().GetRenderOperateBean().rotate.x).ToString("0.0");
            }

            if (!input_rotateY.isFocused)
            {
                input_rotateY.text = (ModelManager.GetInstance().GetRenderOperateBean().rotate.y).ToString("0.0");
            }

            if (!input_rotateZ.isFocused)
            {
                input_rotateZ.text = (ModelManager.GetInstance().GetRenderOperateBean().rotate.z).ToString("0.0");
            }

            slider_moveX.value = ModelManager.GetInstance().GetRenderOperateBean().move.x;
            slider_moveY.value = ModelManager.GetInstance().GetRenderOperateBean().move.y;

            slider_scale.value = ModelManager.GetInstance().GetRenderOperateBean().scale;

            slider_rotateX.value = ModelManager.GetInstance().GetRenderOperateBean().rotate.x;
            slider_rotateY.value = ModelManager.GetInstance().GetRenderOperateBean().rotate.y;
            slider_rotateZ.value = ModelManager.GetInstance().GetRenderOperateBean().rotate.z;
        }
    }