Beispiel #1
0
 /// <summary>
 /// 计算角度,获取对应角度最小的点
 /// </summary>
 /// <param name='i'>
 /// 已经计算到第几个
 /// </param>
 /// <param name='mid_vec2'>
 /// 所在点
 /// </param>
 /// <param name='mid_array'>
 /// 系列点
 /// </param>
 void CalAngle(int mid_num, Vector2 mid_vec2, ArrayList mid_array)
 {
     if (mid_array.Count > mid_num)
     {
         float fangle_pre = -180;
         int   mark_num   = -1;
         for (int i = mid_num; i < mid_array.Count; i++)
         {
             //内积公式倒推,求出角度。
             Vector2 vec1   = new Vector2(0, 1);
             Vector2 vec2   = new Vector2(mid_vec2.x - ((doLableData)(mid_array[i])).vPosEnd.x, ((doLableData)(mid_array[i])).vPosEnd.y - mid_vec2.y);
             float   fangle = (float)((vec1.x * vec2.x + vec1.y * vec2.y) / (System.Math.Sqrt(vec1.x * vec1.x + vec1.y + vec1.y) + System.Math.Sqrt(vec2.x * vec2.x + vec2.y * vec2.y)));
             fangle = (float)System.Math.Acos(fangle);
             //如果角度大于之前的,则记录,用于最后交换位置用.
             if (fangle > fangle_pre)
             {
                 fangle_pre = fangle;
                 mark_num   = i;
             }
         }
         //交换当前行数与lable与最小角度的lable数据.
         if (mark_num != -1)
         {
             doLableData midData  = (doLableData)mid_array[mid_num];
             doLableData midData2 = (doLableData)mid_array[mark_num];
             mid_array.RemoveAt(mid_num);
             mid_array.Insert(mid_num, midData2);
             mid_array.RemoveAt(mark_num);
             mid_array.Insert(mark_num, midData);
         }
     }
 }
Beispiel #2
0
 /// <summary>
 /// 调节左右显示窗口显示到上下半个窗口.
 /// </summary>
 void adjust_show_lable_ud()
 {
     //左边窗口分上下窗口均匀显示.
     if (array_pos_left.Count > 0)
     {
         for (int i = 0; i < array_pos_left.Count / 2; i++)
         {
             doLableData midData = (doLableData)array_pos_left[i];
             array_pos_lu.Add(midData);
         }
         for (int i = array_pos_left.Count / 2; i < array_pos_left.Count; i++)
         {
             doLableData midData = (doLableData)array_pos_left[i];
             array_pos_ld.Add(midData);
         }
     }
     //右边窗口上下均匀显示.
     if (array_pos_right.Count > 0)
     {
         for (int i = 0; i < array_pos_right.Count / 2; i++)
         {
             doLableData midData = (doLableData)array_pos_right[i];
             array_pos_ru.Add(midData);
         }
         for (int i = array_pos_right.Count / 2; i < array_pos_right.Count; i++)
         {
             doLableData midData = (doLableData)array_pos_right[i];
             array_pos_rd.Add(midData);
         }
     }
 }
Beispiel #3
0
    void show_BigPart_Lable()
    {
        GUI.Button(new Rect(100, 100, 200, 40), ((string [])((ArrayList)m_read_Tree_xls.mmenu_top_array[0])[0])[0]);
        GUI.Button(new Rect(Screen.width - 300, 100, 200, 40), ((string [])((ArrayList)m_read_Tree_xls.mmenu_top_array[2])[0])[0]);
        GUI.Button(new Rect(100, Screen.height - 200, 200, 40), ((string [])((ArrayList)m_read_Tree_xls.mmenu_top_array[3])[0])[0]);
        array_pos.Clear();
        //开合模部分
        doLableData mid_data = new doLableData();

        mid_data.vPosStart = new Vector3(300, 140, 0);
        mid_data.vPosEnd   = GameObject.Find("CameraFree").camera.WorldToScreenPoint(GameObject.Find("ZSJ_KHM_5").transform.position);
        mid_data.vPosEnd.y = Screen.height - mid_data.vPosEnd.y;
        mid_data.vPosEnd.z = 0;
        array_pos.Add(mid_data);
        //注射部分
        doLableData mid_data1 = new doLableData();

        mid_data1.vPosStart = new Vector3(Screen.width - 300, 140, 0);
        mid_data1.vPosEnd   = GameObject.Find("CameraFree").camera.WorldToScreenPoint(GameObject.Find("ZSJ_Inj_2").transform.position);
        mid_data1.vPosEnd.y = Screen.height - mid_data1.vPosEnd.y;
        mid_data1.vPosEnd.z = 0;
        array_pos.Add(mid_data1);
        //注射部分
        doLableData mid_data2 = new doLableData();

        mid_data2.vPosStart = new Vector3(300, Screen.height - 200, 0);
        mid_data2.vPosEnd   = GameObject.Find("CameraFree").camera.WorldToScreenPoint(GameObject.Find("ZSJ_JZ_68").transform.position);
        mid_data2.vPosEnd.y = Screen.height - mid_data2.vPosEnd.y;
        mid_data2.vPosEnd.z = 0;
        array_pos.Add(mid_data2);
    }
Beispiel #4
0
 public void setData(doLableData other)
 {
     vPosStart   = other.vPosStart;
     vPosEnd     = other.vPosEnd;
     rGUIRect    = other.rGUIRect;
     strPartName = other.strPartName;
 }
Beispiel #5
0
 /// <summary>
 /// 调节屏幕上需要显示的标注的显示位置
 /// </summary>
 /// <param name='mid_doData'>
 /// Mid_do data.
 /// </param>
 void adjust_show_lable_lr(doLableData mid_doData)
 {
     //左半屏幕
     if (mid_doData.vPosEnd.x < Screen.width / 2)
     {
         array_pos_left.Add(mid_doData);
     }
     else
     {
         array_pos_right.Add(mid_doData);
     }
 }
Beispiel #6
0
    void OnGUI()
    {
        if (FuncPara.outlineOn)
        {
            //清空历史数据;
            array_pos.Clear();
            array_pos_ld.Clear();
            array_pos_lu.Clear();
            array_pos_rd.Clear();
            array_pos_ru.Clear();
            array_pos_left.Clear();
            array_pos_right.Clear();

            float distanceJudge   = 1f;
            float measurementPara = 1.2f;
            if (cameraType == "Orthographic")
            {
                distanceJudge   = camerafree.orthographicSize;
                measurementPara = orthographicPara;
            }
            else
            {
                distanceJudge   = camerafree.fieldOfView;
                measurementPara = perspectivePara;
            }

            if (distanceJudge < measurementPara)             //距离较近时
            {
                for (int j = 0; j < m_read_Tree_xls.mmenu_top_array.Count; j++)
                {
                    for (int i = 0; i < ((ArrayList)m_read_Tree_xls.mmenu_top_array[j]).Count; i++)                    //bumingba
                    {
                        string mid_str_name = ((string [])((ArrayList)m_read_Tree_xls.mmenu_top_array[j])[i])[1];      //Excel表格第三列:物体名字
                        if (GameObject.Find(mid_str_name).renderer.isVisible)
                        //GUI.Button(new Rect(100,i*30,300,30),i + ":" + mid_str_name);
                        {
                            if (((string [])((ArrayList)m_read_Tree_xls.mmenu_top_array[j])[i])[2].Length > 3)                              //好像是遮挡物体字符串,一般用不到
                            {
                                //Array<string> mid_array;
                                string [] mid_array = ((string [])((ArrayList)m_read_Tree_xls.mmenu_top_array[j])[i])[2].Split((",").ToCharArray());
                                int       k         = 0;
                                for (; k < mid_array.Length; k++)
                                {
                                    if (GameObject.Find(mid_array[k]).renderer.material.color.a > 0.8f)
                                    {
                                        break;
                                    }
                                }
                                if (k == mid_array.Length)
                                {
                                    doLableData mdoData = new doLableData();
                                    mdoData.strPartName = ((string [])((ArrayList)m_read_Tree_xls.mmenu_top_array[j])[i])[0];                                      //Excel表格第三列:部件中文名字
                                    Vector3 mid_vec = GameObject.Find("CameraFree").camera.WorldToScreenPoint(GameObject.Find(mid_str_name).transform.position);
                                    mid_vec.y       = Screen.height - mid_vec.y;
                                    mid_vec.z       = 0;
                                    mdoData.vPosEnd = mid_vec;
                                    adjust_show_lable_lr(mdoData);
                                }
                            }
                            else                              //大概是没有遮挡物体的意思,一般都走这条路
                            {
                                doLableData mdoData = new doLableData();
                                mdoData.strPartName = ((string [])((ArrayList)m_read_Tree_xls.mmenu_top_array[j])[i])[0];
                                Vector3 mid_vec = GameObject.Find("CameraFree").camera.WorldToScreenPoint(GameObject.Find(mid_str_name).transform.position);
                                mid_vec.y       = Screen.height - mid_vec.y;
                                mid_vec.z       = 0;
                                mdoData.vPosEnd = mid_vec;
                                adjust_show_lable_lr(mdoData);
                            }
                        }
                    }
                }
            }
            else              //远距离所有都显示
            {
                for (int i = 0; i < m_read_Tree_xls.mmenu_top_array.Count; i++)
                {
                    string mid_str_name = ((string [])((ArrayList)m_read_Tree_xls.mmenu_top_array[i])[0])[1];                     //Excel表格第三列:物体名字
                    if (GameObject.Find(mid_str_name).renderer.isVisible)
                    {
                        doLableData mdoData = new doLableData();
                        mdoData.strPartName = ((string [])((ArrayList)m_read_Tree_xls.mmenu_top_array[i])[0])[0];
                        Vector3 mid_vec = GameObject.Find("CameraFree").camera.WorldToScreenPoint(GameObject.Find(((string[])((ArrayList)m_read_Tree_xls.mmenu_top_array[i])[0])[1]).transform.position);
                        mid_vec.y       = Screen.height - mid_vec.y;
                        mid_vec.z       = 0;
                        mdoData.vPosEnd = mid_vec;
                        adjust_show_lable_lr(mdoData);
                    }
                }
                //for(int i=0;i < m_read_Tree_xls.mmenu_top_array.Count; i++)
                //{}
                //显示大结构,
                //show_BigPart_Lable();
            }
            //排序
            mySortCompare msort = new mySortCompare();
            array_pos_left.Sort(msort);
            array_pos_right.Sort(msort);

            //调节显示lable,上下.
            adjust_show_lable_ud();

            mySortCompare1 msort1 = new mySortCompare1();
            array_pos_lu.Sort(msort1);
            array_pos_ld.Sort(msort1);
            array_pos_ru.Sort(msort1);
            array_pos_rd.Sort(msort1);

            ftime += Time.deltaTime;
            //给array排序.
            if (ftime > 0.2f)
            {
                array_sort();
                //防止两个lable重叠;
                ajust_angle_sort();
                //防止线闯过另外一个lable
                //ajust_pos_line();
            }
            //显示标注;
            LabelDisplay();
        }
    }