コード例 #1
0
ファイル: KDtreeBlender.cs プロジェクト: vr-paint/brush
    public void KdtreeAdd(int i)
    {                                                                                   //左邊是這個檔案裡的 MyDrawLine 其實是同一個
        MyDrawLine = GameObject.Find("RightHand").GetComponent <DrawLine>().MyDrawLine; //右邊是別的檔案裡定義的

        List <Transform> RegisterList = new List <Transform>();

        //建樹過程

        //if(MyDrawLine.Length>=1){
        //    int i = MyDrawLine.Length - 1;
        //for (int i = LineInBox.Length - 1; i < LineInBox.Length; i++)
        //for (int i=0; i<MyDrawLine.Length-1; i++)//可能會變很慢
        if (i >= 0)
        {//TODO: 這裡有magic魔法/魔術, 有鬼!
         //int setJ = 0;

            for (int j = 0; j < MyDrawLine[i].GetComponent <GraphicsLineRenderer>().vertices.Length; j++)
            {
                if (j % 3 == 0)
                {
                    continue;
                }

                GameObject KdtreeGameObject = new GameObject();                              //這是建出 Kdtree 裡面的小朋友 (KDtree0_1 之類的)
                KdtreeGameObject.transform.parent = GameObject.Find("KDtree" + i).transform; //把小朋友的爸爸設好
                KdtreeGameObject.name             = ("KDtree" + i + "_" + j);
                KdtreeGameObject.AddComponent <SetArray>();
                KdtreeGameObject.GetComponent <SetArray>().SetI(i);
                KdtreeGameObject.GetComponent <SetArray>().SetJ(j);
                float _x = MyDrawLine[i].GetComponent <GraphicsLineRenderer>().vertices[j].x;
                float _y = MyDrawLine[i].GetComponent <GraphicsLineRenderer>().vertices[j].y;
                float _z = MyDrawLine[i].GetComponent <GraphicsLineRenderer>().vertices[j].z;
                KdtreeGameObject.transform.position = new Vector3(_x, _y, _z);
                RegisterList.Add(KdtreeGameObject.transform);
                //SetJ++;
            }
        }
        //BlenderKdtree = new KdTree<Transform>();不能在這裡新建 KdTree資料結構,會清空。應該持續用同一個舊的 tree
        BlenderKdtree.AddAll(RegisterList);
        //以上是建樹
    }
コード例 #2
0
ファイル: KDtreeBlender.cs プロジェクト: vr-paint/brush
 public void find(Vector3 LVPOS1, Vector3 LVPOS2)
 {
     if (Vector3.Distance(LVPOS1, BlenderKdtree.FindClosest(LVPOS1).transform.position) < 0.05)
     {
         //Closet.GetComponent<MeshFilter>().mesh.vertices;
         Vector3[] vertices = Closet.GetComponent <MeshFilter>().mesh.vertices;
         vertices[vertices.Length - 2] = BlenderKdtree.FindClosest(LVPOS1).transform.position;
         Closet.GetComponent <MeshFilter>().mesh.vertices = vertices;
         //LineInBox[oldLine].gameObject.GetComponent<MeshFilter>().mesh.vertices = LineInBox[oldLine].gameObject.GetComponent<GraphicsLineRenderer>().vertices;
     }
     else
     {// Debug.Log("GOOD");
     }
     if (Vector3.Distance(LVPOS2, BlenderKdtree.FindClosest(LVPOS2).transform.position) < 0.05)
     {
         Vector3[] vertices = Closet.GetComponent <MeshFilter>().mesh.vertices;
         vertices[vertices.Length - 1] = BlenderKdtree.FindClosest(LVPOS2).transform.position;
         Closet.GetComponent <MeshFilter>().mesh.vertices = vertices;
     }
     else
     {// Debug.Log("Bad");
     }
 }