// Use this for initialization
    void Start()
    {
        GlobalVariableBackground.Instance.conManager.FrameEnable += Instance_FrameEnable;
        modelGameObject modelGameobject;

        if (transform.parent != null)
        {
            modelGameobject = transform.parent.GetComponent <modelGameObject>();
            if (modelGameobject != null)
            {
                modelGameobject.ChildToDrawColor += ModelFrameManager_ChildToDrawColor;
                modelGameobject.ChildToSymmetric += ModelGameobject_ChildToSymmetric;
            }
        }
        pick = GlobalVariableBackground.Instance.conManager.pickClick;
    }
    private void Awake()
    {
        GlobalVariableBackground.Instance.conManager = this;
        senceModel = GameObject.Find("SenceModel");
        line       = GlobalVariableBackground.Instance.MaterialLine;
        selectLine = GlobalVariableBackground.Instance.MaterialSelectLine;
        pickUpObj  = new Others.PackUpObject();
        pickClick  = new Others.PackUpObject();

        //pointPickObj = GameObject.CreatePrimitive(PrimitiveType.Cube);
        //pointPickObj.GetComponent<MeshRenderer>().enabled = false;
        //Destroy(pointPickObj.GetComponent<BoxCollider>());
        //pointPickObj.GetComponent<MeshFilter>().mesh = GlobalVariableBackground.Instance.miniCubeMesh;
        //pointPickObj.transform.localScale = pointPickObj.transform.localScale * 1.01f;
        pickmode            = Enums.PickMode.Point;
        colorPointArrayTemp = new Color[24];
        for (int i = 0; i < 24; i++)
        {
            //基佬紫
            colorPointArrayTemp[i] = Color.HSVToRGB(304 / 360f, 1f, 1f);
        }
        pointTriTemp = GlobalVariableBackground.Instance.miniCubeMesh.triangles;
    }
    /// <summary>
    /// 跟随显示选中网格或点
    /// </summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    private Others.PackUpObject PickUpObject(Others.PackUpObject obj)
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        //射线投射
        if (Physics.Raycast(ray, out hit))
        {
            if (hit.transform == null)//如果射线没有碰撞到Transform,return
            {
                obj.isMeshHave = false;
                return(obj);
            }

            if (obj == null)
            {
                obj = new Others.PackUpObject();
            }

            if (obj.pickUpName.Equals(hit.transform.name) && obj.pickUpIndex == hit.triangleIndex && pickmode == Enums.PickMode.cell)
            {
                return(obj);
            }

            //获取hit.transform的MeshFilter组件
            MeshFilter meshFilter = hit.transform.GetComponent <MeshFilter>();
            if (meshFilter == null)
            {
                obj.isMeshHave = false;
                return(obj);
            }

            if (hit.transform.parent == null)
            {
                obj.isMeshHave = false;
                return(obj);
            }

            modelFrameManager modelChild = hit.transform.parent.GetComponent <modelFrameManager>();
            if (modelChild == null)
            {
                obj.isMeshHave = false;
                return(obj);
            }

            if (!hit.transform.name.Contains("|"))
            {
                obj.isMeshHave = false;
                return(obj);
            }

            Mesh      mesh     = meshFilter.mesh;
            int[]     triArray = mesh.triangles;
            Vector3[] vecArray = mesh.vertices;
            //CLoadTest.Cell_Out cell = modelChild.vtkframe.meshArray[index].cellArray[hit.triangleIndex];
            //int number = cell.number;
            int hitIndex = hit.triangleIndex * 3;
            //AddLineArray(listVec, listTri, MakeQuad(vecArray[triArray[hitIndex]], vecArray[triArray[hitIndex + 1]], 0.001f));
            //AddLineArray(listVec, listTri, MakeQuad(vecArray[triArray[hitIndex + 1]], vecArray[triArray[hitIndex + 2]], 0.001f));
            //AddLineArray(listVec, listTri, MakeQuad(vecArray[triArray[hitIndex + 2]], vecArray[triArray[hitIndex]], 0.001f));
            obj.AttIndex = modelChild.modelState.attIndex;
            switch (pickmode)
            {
            case Enums.PickMode.Point:
                Vector3 v1 = transform.TransformPoint(vecArray[triArray[hitIndex]]);
                Vector3 v2 = transform.TransformPoint(vecArray[triArray[hitIndex + 1]]);
                Vector3 v3 = transform.TransformPoint(vecArray[triArray[hitIndex + 2]]);

                float   f1 = Vector3.Distance(v1, hit.point);
                float   f2 = Vector3.Distance(v2, hit.point);
                float   f3 = Vector3.Distance(v3, hit.point);
                Vector3 vec;
                if (f1 < f2 && f1 < f3)
                {
                    vec            = v1;
                    obj.pointIndex = triArray[hitIndex];
                }
                else if (f2 < f1 && f2 < f3)
                {
                    vec            = v2;
                    obj.pointIndex = triArray[hitIndex + 1];
                }
                else
                {
                    vec            = v3;
                    obj.pointIndex = triArray[hitIndex + 2];
                }

                Vector3[] vecTemp = GetPointCube(vec, 0.04f);
                obj.mesh.vertices  = vecTemp;
                obj.mesh.triangles = pointTriTemp;
                obj.mesh.colors    = colorPointArrayTemp;
                obj.mesh.RecalculateNormals();
                obj.pickUpIndex = hit.triangleIndex;
                obj.pickUpName  = hit.transform.name;
                obj.isMeshHave  = true;
                obj.isPointMode = true;
                //GlobalVariableBackground.Instance.conManager.WriteLog("obj.pickUpName is " + obj.pickUpName + " obj.pickUpIndex is " + obj.pickUpIndex);
                int index = Convert.ToInt32(obj.pickUpName.Split('|')[1]);
                break;

            case Enums.PickMode.cell:
                //TODO:追加线颜色处理
                AddLineArray3(listVec, listTri, MakeQuad(vecArray[triArray[hitIndex]], vecArray[triArray[hitIndex + 1]], vecArray[triArray[hitIndex + 2]], GlobalVariableBackground.Instance.Linewight * 1.5f));
                Color[] colorArray = new Color[listVec.Count];

                for (int i = 0; i < listVec.Count; i++)
                {
                    //基佬紫
                    colorArray[i] = Color.HSVToRGB(304 / 360f, 1f, 1f);
                }

                //Mesh ms = new Mesh();
                if (obj.mesh.vertices.Length > listVec.Count)
                {
                    obj.mesh.triangles = listTri.ToArray();
                    obj.mesh.SetVertices(listVec);
                }
                else
                {
                    obj.mesh.SetVertices(listVec);
                    obj.mesh.triangles = listTri.ToArray();
                }
                obj.mesh.colors = colorArray;
                obj.mesh.RecalculateNormals();
                listVec.Clear();
                listTri.Clear();
                colorArray      = null;
                obj.pickUpIndex = hit.triangleIndex;
                obj.pickUpName  = hit.transform.name;
                obj.isMeshHave  = true;
                obj.isPointMode = false;

                //GlobalVariableBackground.Instance.conManager.WriteLog("obj.pickUpName is " + obj.pickUpName + " obj.pickUpIndex is " + obj.pickUpIndex);
                break;

            default:
                break;
            }
            return(obj);
        }
        obj.isMeshHave = false;
        return(obj);
    }