Ejemplo n.º 1
0
        public void addFace(List <MeshRange> face, Vector3 pos)
        {
            MeshRange f = new MeshRange();

            f.begin = pos;
            f.end   = pos;
            face.Add(f);
            merge(face);
        }
Ejemplo n.º 2
0
        void merge(List <MeshRange> face)
        {
            bool change;

            if (face.Count < 2)
            {
                return;
            }
            //1 = begin 2 = end
            Vector3 a1, b1, a2, b2;

            do
            {
                change = false;
                for (int i = 0; i < face.Count - 1; i++)
                {
                    for (int j = i + 1; j < face.Count; j++)
                    {
                        a1 = face[i].begin; a2 = face[i].end;
                        b1 = face[j].begin; b2 = face[j].end;
                        if ((a1.x == b1.x && a1.y == b1.y && a2.x == b2.x && a2.y == b2.y && (Math.Abs(a2.z - b1.z) == 1 || Math.Abs(a1.z - b2.z) == 1)) ||
                            (a1.x == b1.x && a1.z == b1.z && a2.x == b2.x && a2.z == b2.z && (Math.Abs(a2.y - b1.y) == 1 || Math.Abs(a1.y - b2.y) == 1)) ||
                            (a1.z == b1.z && a1.y == b1.y && a2.z == b2.z && a2.y == b2.y && (Math.Abs(a2.x - b1.x) == 1 || Math.Abs(a1.x - b2.x) == 1)))
                        {
                            Vector3   begin = face[i].begin;
                            Vector3   end   = face[j].end;
                            MeshRange range = new MeshRange();
                            range.begin = begin;
                            range.end   = end;
                            face.Remove(face[j]);
                            face.Remove(face[i]);
                            ////Debug.Log(i);
                            face.Add(range);
                            change = true;
                        }
                    }
                }
            } while (change);
        }