private FragmentObject CreateFragmentObject(int index0, int index1, int index2)
    {
        GameObject fragment = ResourceManager.GetInstance().GetPrefab("Prefab/Effects", "ScreenFragmentObject");

        // 添加到TopEffectLayer
        UIManager.GetInstance().AddGoToLayer(fragment, LayerId.STGTopEffect);
        // 获取组件
        MeshFilter   meshFilter   = fragment.GetComponent <MeshFilter>();
        MeshRenderer meshRenderer = fragment.GetComponent <MeshRenderer>();
        Mesh         mesh         = new Mesh();

        // 设置层级
        meshRenderer.sortingLayerName = "STG";
        // 计算顶点
        Vector3 vec0      = _vertexList[index0];
        Vector3 vec1      = _vertexList[index1];
        Vector3 vec2      = _vertexList[index2];
        Vector3 centerPos = (vec0 + vec1 + vec2) / 3;

        // 设置坐标
        fragment.transform.localPosition = centerPos;
        // 计算相对位置
        vec0 -= centerPos;
        vec1 -= centerPos;
        vec2 -= centerPos;
        mesh.SetVertices(new List <Vector3>()
        {
            vec0, vec1, vec2
        });
        // 设置三角形以及计算uv
        mesh.triangles  = new int[] { 0, 1, 2 };
        mesh.uv         = new Vector2[] { _uvList[index0], _uvList[index1], _uvList[index2] };
        meshFilter.mesh = mesh;
        // 创建碎片对象
        FragmentObject fragmentObject = new FragmentObject()
        {
            fragTf       = fragment.transform,
            meshRenderer = meshRenderer,
            originalPos  = centerPos,
        };

        return(fragmentObject);
    }
        private FragmentObject AddReportSting(String s)
        {
            FragmentObject.TrimatMarkEnum clr;
            //CircleData c_d;            
            string[] ss = s.Split(new Char[] { ',' });
            double zval;
            double z1val=0;
            double theta1;
            double theta2;
            double rad;
            FragmentObject fragmentMark = null;

            if (ss.Length >= 9)
            {
                if (ss[7].Trim() == "") ss[7] = "Not Specified";
                if (ss[8].Trim() == "") ss[8] = "Not Specified";
                if (ss[6].Trim() == "") ss[6] = "Not Specified";

                ObjectData ob = new ObjectData();

                ob.FragData = ss[0].Trim();
                ob.Theta1Data = ss[1].Trim();
                ob.Theta2Data = ss[2].Trim();
                ob.ZData = ss[3].Trim();
                ob.XData = ss[4].Trim();
                ob.YData = ss[5].Trim();
                ob.TypeData = ss[6].Trim();
                ob.ShapeData = ss[7].Trim();
                ob.SizeData = ss[8].Trim();

                if(ss.Length > 9)
                    ob.Z1Data = ss[9].Trim();

                TableStrinsCollection.Add(ob);
                //add circles collection.  will be used later ================
                {
                    zval = Convert.ToDouble(ss[3].Trim());

                    if (ss.Length > 9 && ss[9] != string.Empty)
                        z1val = Convert.ToDouble(ss[9].Trim());
                    theta1 = Convert.ToDouble(ss[1].Trim());
                    theta2 = Convert.ToDouble(ss[2].Trim());
                    switch (ss[6].Trim())
                    {
                        case "Metal":
                            clr = FragmentObject.TrimatMarkEnum.Metal;
                            break;
                        case "Organic":
                            clr = FragmentObject.TrimatMarkEnum.Organic;
                            break;
                        case "Inorganic":
                            clr = FragmentObject.TrimatMarkEnum.Inorganic;
                            break;
                        default:
                            clr = FragmentObject.TrimatMarkEnum.Unknown;
                            break;
                    }
                    switch (ss[8].Trim())
                    {
                        case "< 4 mm":
                            rad = 4;
                            break;
                        case "5mm-8mm":
                            rad = 8;
                            break;
                        case "9mm-12mm":
                            rad = 12;
                            break;
                        case "13mm-16mm":
                            rad = 16;
                            break;
                        case "17mm-20mm":
                            rad = 20;
                            break;
                        case ">20mm":
                            rad = 25;
                            break;
                        default:
                            rad = m_XrayImageDisplay.DefaultMarkRadiusSizeMillimeters;
                            break;
                    }

                    fragmentMark = new FragmentObject(new Point(), clr, rad, theta1, theta2, zval, z1val, FragmentObject.MarkTypeEnum.Mark);
                }
            }

            return fragmentMark;
        }
        public Collection<FragmentObject> UpdateDisplay(byte[] data)
        {
            char[] delimiter = new char[2];
            delimiter[0] = (char)10;
            delimiter[1] = (char)13; 
           
            int CommentCounter1;
            int CommentCounter2;
            int charcnt;
            string Comments;
            string headerbuf;
            string[] split = null;
            String[] h_split = null;
            bool hflag = true;
            string Adornerdata = System.Text.Encoding.Default.GetString(data);
            Collection<FragmentObject> FragmentMarkList = new Collection<FragmentObject>();

            CommentCounter1 = 0;
            CommentCounter2 = 0;
            Comments = "";
            headerbuf = "";
            
            if (Adornerdata.Length > 0)
            {
                ObservableCollection<ObjectData> TSC = TableStrinsCollection;
                TSC.Clear();
                
                split = Adornerdata.Split(delimiter);
                if (split.Length > 0)
                {
                    for (int i = 0; i < split.Length; i++)
                    {
                        split[i] = split[i].Trim();
                    }
                    // header info===============================================================================
                    for (int i = 0; i < split.Length; i++)
                    {
                        if (split[i] != "" && hflag == true)
                        {
                            h_split = split[i].Split(new Char[] { '`' });
                            if (h_split.Length > 3)
                            {
                                TestNameField.Text = h_split[0].Trim();
                                ProjectNameField.Text = h_split[1].Trim();
                                MissionNameField.Text = h_split[2].Trim();
                                BundleField.Text = h_split[3].Trim();
                                hflag = false;

                            }
                        }
                        if (split[i] != "" && hflag == false)
                        {

                            charcnt = split[i].Where(c => c == ',').Count();
                            if (charcnt == 9)//this is report string
                            {
                                FragmentObject fragmentMark = AddReportSting(split[i]);
                                FragmentMarkList.Add(fragmentMark);
                            }
                        }
                    }
                    //========================================= find comments if any
                    for (int i = 0; i < split.Length; i++)
                    {
                        if (split[i].Contains("%%%"))
                        {
                            CommentCounter1 = i;
                            break;
                        }
                    }
                    if (CommentCounter1 > 0)
                    {
                        for (int i = CommentCounter1 + 1; i < split.Length; i++)
                        {
                            if (split[i].Contains("%%%"))
                            {
                                CommentCounter2 = i;
                                break;
                            }
                        }
                        for (int i = CommentCounter1 + 1; i < CommentCounter2; i++)
                        {
                            if (split[i] != "" && !split[i].Contains("Annotation"))
                            {
                                Comments += (split[i] + "\n");
                            }
                        }
                        CommentsField.Text = Comments;
                    }

                    //================= find uniformity if any
                    for (int jj = 0; jj < split.Length; jj++)
                    {
                        if (split[jj].Contains("Uniformity Data ="))
                        {
                            string[] oo = split[jj].Split(new Char[] { '=' });
                            if (oo.Length == 2 && oo[1] != string.Empty)
                            {
                                UniformityData = oo[1].Trim();

                                Point pt1 = new Point();
                                Point pt2 = new Point();

                                string[] sp = UniformityData.Split(new Char[] { '&' });
                                pt1.X = Convert.ToDouble(sp[0]);
                                pt1.Y = Convert.ToDouble(sp[1]);
                                pt2.X = Convert.ToDouble(sp[2]);
                                pt2.Y = Convert.ToDouble(sp[3]);

                                FragmentObject fragObject = new FragmentObject(pt1,FragmentObject.TrimatMarkEnum.Unknown, 0, 0, 0, 0, 0, FragmentObject.MarkTypeEnum.Uniformity);
                                FragmentMarkList.Add(fragObject);
                                fragObject = new FragmentObject(pt2,FragmentObject.TrimatMarkEnum.Unknown, 0, 0, 0, 0, 0, FragmentObject.MarkTypeEnum.Uniformity);
                                FragmentMarkList.Add(fragObject);
                            }
                        }
                    }
                }
            }

            return FragmentMarkList;
        }
        private FragmentObject AddReportSting(String s)
        {
            FragmentObject.TrimatMarkEnum clr;
            //CircleData c_d;
            string[]       ss = s.Split(new Char[] { ',' });
            double         zval;
            double         z1val = 0;
            double         theta1;
            double         theta2;
            double         rad;
            FragmentObject fragmentMark = null;

            if (ss.Length >= 9)
            {
                if (ss[7].Trim() == "")
                {
                    ss[7] = "Not Specified";
                }
                if (ss[8].Trim() == "")
                {
                    ss[8] = "Not Specified";
                }
                if (ss[6].Trim() == "")
                {
                    ss[6] = "Not Specified";
                }

                ObjectData ob = new ObjectData();

                ob.FragData   = ss[0].Trim();
                ob.Theta1Data = ss[1].Trim();
                ob.Theta2Data = ss[2].Trim();
                ob.ZData      = ss[3].Trim();
                ob.XData      = ss[4].Trim();
                ob.YData      = ss[5].Trim();
                ob.TypeData   = ss[6].Trim();
                ob.ShapeData  = ss[7].Trim();
                ob.SizeData   = ss[8].Trim();

                if (ss.Length > 9)
                {
                    ob.Z1Data = ss[9].Trim();
                }

                TableStrinsCollection.Add(ob);
                //add circles collection.  will be used later ================
                {
                    zval = Convert.ToDouble(ss[3].Trim());

                    if (ss.Length > 9 && ss[9] != string.Empty)
                    {
                        z1val = Convert.ToDouble(ss[9].Trim());
                    }
                    theta1 = Convert.ToDouble(ss[1].Trim());
                    theta2 = Convert.ToDouble(ss[2].Trim());
                    switch (ss[6].Trim())
                    {
                    case "Metal":
                        clr = FragmentObject.TrimatMarkEnum.Metal;
                        break;

                    case "Organic":
                        clr = FragmentObject.TrimatMarkEnum.Organic;
                        break;

                    case "Inorganic":
                        clr = FragmentObject.TrimatMarkEnum.Inorganic;
                        break;

                    default:
                        clr = FragmentObject.TrimatMarkEnum.Unknown;
                        break;
                    }
                    switch (ss[8].Trim())
                    {
                    case "< 4 mm":
                        rad = 4;
                        break;

                    case "5mm-8mm":
                        rad = 8;
                        break;

                    case "9mm-12mm":
                        rad = 12;
                        break;

                    case "13mm-16mm":
                        rad = 16;
                        break;

                    case "17mm-20mm":
                        rad = 20;
                        break;

                    case ">20mm":
                        rad = 25;
                        break;

                    default:
                        rad = m_XrayImageDisplay.DefaultMarkRadiusSizeMillimeters;
                        break;
                    }

                    fragmentMark = new FragmentObject(new Point(), clr, rad, theta1, theta2, zval, z1val, FragmentObject.MarkTypeEnum.Mark);
                }
            }

            return(fragmentMark);
        }
        public Collection <FragmentObject> UpdateDisplay(byte[] data)
        {
            char[] delimiter = new char[2];
            delimiter[0] = (char)10;
            delimiter[1] = (char)13;

            int    CommentCounter1;
            int    CommentCounter2;
            int    charcnt;
            string Comments;
            string headerbuf;

            string[] split       = null;
            String[] h_split     = null;
            bool     hflag       = true;
            string   Adornerdata = System.Text.Encoding.Default.GetString(data);
            Collection <FragmentObject> FragmentMarkList = new Collection <FragmentObject>();

            CommentCounter1 = 0;
            CommentCounter2 = 0;
            Comments        = "";
            headerbuf       = "";

            if (Adornerdata.Length > 0)
            {
                ObservableCollection <ObjectData> TSC = TableStrinsCollection;
                TSC.Clear();

                split = Adornerdata.Split(delimiter);
                if (split.Length > 0)
                {
                    for (int i = 0; i < split.Length; i++)
                    {
                        split[i] = split[i].Trim();
                    }
                    // header info===============================================================================
                    for (int i = 0; i < split.Length; i++)
                    {
                        if (split[i] != "" && hflag == true)
                        {
                            h_split = split[i].Split(new Char[] { '`' });
                            if (h_split.Length > 3)
                            {
                                TestNameField.Text    = h_split[0].Trim();
                                ProjectNameField.Text = h_split[1].Trim();
                                MissionNameField.Text = h_split[2].Trim();
                                BundleField.Text      = h_split[3].Trim();
                                hflag = false;
                            }
                        }
                        if (split[i] != "" && hflag == false)
                        {
                            charcnt = split[i].Where(c => c == ',').Count();
                            if (charcnt == 9)//this is report string
                            {
                                FragmentObject fragmentMark = AddReportSting(split[i]);
                                FragmentMarkList.Add(fragmentMark);
                            }
                        }
                    }
                    //========================================= find comments if any
                    for (int i = 0; i < split.Length; i++)
                    {
                        if (split[i].Contains("%%%"))
                        {
                            CommentCounter1 = i;
                            break;
                        }
                    }
                    if (CommentCounter1 > 0)
                    {
                        for (int i = CommentCounter1 + 1; i < split.Length; i++)
                        {
                            if (split[i].Contains("%%%"))
                            {
                                CommentCounter2 = i;
                                break;
                            }
                        }
                        for (int i = CommentCounter1 + 1; i < CommentCounter2; i++)
                        {
                            if (split[i] != "" && !split[i].Contains("Annotation"))
                            {
                                Comments += (split[i] + "\n");
                            }
                        }
                        CommentsField.Text = Comments;
                    }

                    //================= find uniformity if any
                    for (int jj = 0; jj < split.Length; jj++)
                    {
                        if (split[jj].Contains("Uniformity Data ="))
                        {
                            string[] oo = split[jj].Split(new Char[] { '=' });
                            if (oo.Length == 2 && oo[1] != string.Empty)
                            {
                                UniformityData = oo[1].Trim();

                                Point pt1 = new Point();
                                Point pt2 = new Point();

                                string[] sp = UniformityData.Split(new Char[] { '&' });
                                pt1.X = Convert.ToDouble(sp[0]);
                                pt1.Y = Convert.ToDouble(sp[1]);
                                pt2.X = Convert.ToDouble(sp[2]);
                                pt2.Y = Convert.ToDouble(sp[3]);

                                FragmentObject fragObject = new FragmentObject(pt1, FragmentObject.TrimatMarkEnum.Unknown, 0, 0, 0, 0, 0, FragmentObject.MarkTypeEnum.Uniformity);
                                FragmentMarkList.Add(fragObject);
                                fragObject = new FragmentObject(pt2, FragmentObject.TrimatMarkEnum.Unknown, 0, 0, 0, 0, 0, FragmentObject.MarkTypeEnum.Uniformity);
                                FragmentMarkList.Add(fragObject);
                            }
                        }
                    }
                }
            }

            return(FragmentMarkList);
        }
Beispiel #6
0
 public void ChangeMarkRadiusAndTrimatType(int tableIndex, double NewRadiusInPixels, FragmentObject.TrimatMarkEnum trimatType)
 {
     m_View1FragmentAdorner.UpdateMarkRadiusAndTrimatType(tableIndex, NewRadiusInPixels, trimatType);
     m_View0FragmentAdorner.UpdateMarkRadiusAndTrimatType(tableIndex, NewRadiusInPixels, trimatType);
 }