Exemple #1
0
 private static void AddTrianglesV1(IList<Triangle> ts, int len, Box3Fill OuterBox, Vector3 padXYZ, IList<Box3Fill> InnerBoxes)
 {
     int len1 = len - 1;
     OuterBox.AddTriangle(ts[len1], padXYZ);
     for (int i = 0; i < len1; i++)
     {
         Triangle t1 = ts[i];
         bool used = false;
         OuterBox.AddTriangle(t1, padXYZ);
         for (int ii = i + 1; ii < len; ii++)
         {
             Triangle t2 = ts[ii];
             int shared = SharedVertexs(t1, t2);
             if (shared == 3) continue;
             if (shared == 2)
             {
                 Box3Fill B = new Box3Fill(t1, t2, padXYZ);
                 InnerBoxes.Add(B);
                 used = true;
             }
         }
         if (!used)
         {
             Box3Fill B = new Box3Fill(true);
             B.AddTriangle(t1, padXYZ);
             InnerBoxes.Add(B);
         }
     }
 }
Exemple #2
0
 private static void AddTrianglesV4(IEnumerable<Triangle> ts, int len, Box3Fill OuterBox, Vector3 padXYZ, IList<Box3Fill> InnerBoxes)
 {
     foreach (Triangle t1 in ts)
     {
         OuterBox.AddTriangle(t1, padXYZ);
         Vertex v1 = t1.v1;
         Vertex v2 = t1.v2;
         Vertex v3 = t1.v3;
         AddThreeTwo(v1, v2, v3,InnerBoxes, padXYZ);
     }
 }
Exemple #3
0
        private static void AddTrianglesV4S(IList<Triangle> ts, int len, Box3Fill OuterBox, Vector3 padXYZ, IList<Box3Fill> InnerBoxes)
        {
            List<Vertex> Shared;
            List<Vertex> UnShared;

            Box3Fill B;// = new Box3Fill(t1, t2, padXYZ);
            for (int i = 0; i < len; i += 1)
            {
                Triangle t1 = ts[i];
                if (t1 == null) continue;
                OuterBox.AddTriangle(t1, padXYZ);
                //InnerBoxes.Add(B);
                bool used = false;
                for (int ii = i + 1; ii < len; ii++)
                {
                    Triangle t2 = ts[ii];
                    if (t2 == null) continue;
                    List<Vertex> verts = AddedVertexs(t1, t2,out Shared,out UnShared);
                 //   if (Shared.Count == 0) continue;
                    if (Shared.Count == 2)
                    {
                       // ts[ii] = null;
                        B = new Box3Fill(t1, t2, padXYZ);
                        InnerBoxes.Add(B);
                        used = true;
                      //  break;
                    }
                }
                if (!used)
                {
                    Vertex v1 = t1.v1;
                    Vertex v2 = t1.v2;
                    Vertex v3 = t1.v3;
                    AddThreeTwo(v1, v2, v3, InnerBoxes, padXYZ);
                }
            }
        }
Exemple #4
0
 private static void AddTrianglesV34(IList<Triangle> ts, int len, Box3Fill OuterBox, Vector3 padXYZ, IList<Box3Fill> InnerBoxes)
 {
     //int len1 = len - 2;
     //OuterBox.AddTriangle(ts[len - 1], padXYZ);
     for (int i = 0; i < len; i += 1)
     {
         Triangle t1 = ts[i];
         if (t1 == null) continue;
         OuterBox.AddTriangle(t1, padXYZ);
         Box3Fill B;// = new Box3Fill(t1, t2, padXYZ);
         //InnerBoxes.Add(B);
         bool used = false;
         for (int ii = i + 1; ii < len; ii++)
         {
             Triangle t2 = ts[ii];
             if (t2 == null) continue;
             int shared = SharedVertexs(t1, t2);
             if (shared == 3) continue;
             if (shared == 2)
             {
                 ts[ii] = null;
                 B = new Box3Fill(t1, t2, padXYZ);
                 InnerBoxes.Add(B);
                 used = true;
             }
         }
         if (!used)
         {
             AddThreeFour(2, t1.v1, t1.v2, t1.v3, InnerBoxes, padXYZ);
         }
     }
 }
Exemple #5
0
        private static void AddTrianglesV32(IList<Triangle> ts, int len, Box3Fill OuterBox, Vector3 padXYZ,
            IList<Box3Fill> InnerBoxes)
        {
            Triangle t1 = ts[0];
            Triangle t2 = ts[len - 1];
            OuterBox.AddTriangle(t1, padXYZ);
            OuterBox.AddTriangle(t2, padXYZ);
            Box3Fill B;// = new Box3Fill(t1, t2, padXYZ);
            //InnerBoxes.Add(B);

            int len2 = len - 2;
            OuterBox.AddTriangle(ts[len - 1], padXYZ);
            for (int i = 0; i < len2; i += 1)
            {
                t1 = ts[i];
                if (t1 == null) continue;
                t2 = ts[i + 1];
                if (t2 == null) continue;
                OuterBox.AddTriangle(t1, padXYZ);
                OuterBox.AddTriangle(t2, padXYZ);
                B = new Box3Fill(t1, t2, padXYZ);
                InnerBoxes.Add(B);
                bool used = false;
                for (int ii = i + 2; ii < len; ii++)
                {
                    t2 = ts[ii];
                    if (t2 == null) continue;
                    int shared = SharedVertexs(t1, t2);
                    if (shared == 3) continue;
                    if (shared == 2)
                    {
                        B = new Box3Fill(t1, t2, padXYZ);
                        InnerBoxes.Add(B);
                       // ts[ii] = null;
                        used = true;
                    }
                }
                if (!used)
                {
                    B = new Box3Fill(true);
                    B.AddTriangle(t1, padXYZ);
                    InnerBoxes.Add(B);
                }
            }
        }
Exemple #6
0
        private static void AddTrianglesV321(IList<Triangle> ts, int len, Box3Fill OuterBox, Vector3 padXYZ, IList<Box3Fill> InnerBoxes)
        {
            int len2 = len - 2;
            int len1 = len - 1;
            OuterBox.AddTriangle(ts[len - 1], padXYZ);
            for (int i = 0; i < len2; i += 2)
            {
                Triangle t1 = ts[i];
                if (t1 == null) continue;
                OuterBox.AddTriangle(t1, padXYZ);
                Triangle t2 = ts[i + 1];
                if (t2 != null)
                {
                    OuterBox.AddTriangle(t2, padXYZ);
                    InnerBoxes.Add(new Box3Fill(t1, t2, padXYZ));
                }
                bool used = false;
                int until = i + 1;

                for (int ii = len1; ii > until;ii-- )
                {
                    t2 = ts[ii];
                    if (t2 == null) continue;
                    int shared = SharedVertexs(t1, t2);
                    if (shared == 3) continue;
                    if (shared == 2)
                    {
                        InnerBoxes.Add(new Box3Fill(t1, t2, padXYZ));
                        ts[ii] = null;
                        used = true;
                    }
                }
                if (!used)
                {
                    Box3Fill B = new Box3Fill(true);
                    B.AddTriangle(t1, padXYZ);
                    InnerBoxes.Add(B);
                }
            }
        }
Exemple #7
0
 private static void AddTrianglesV2(IList<Triangle> ts, int len, Box3Fill OuterBox, Vector3 padXYZ, IList<Box3Fill> InnerBoxes)
 {
     foreach (Triangle t1 in ts)
     {
         Box3Fill B = new Box3Fill(true);
         OuterBox.AddTriangle(t1, padXYZ);
         B.AddTriangle(t1, padXYZ);
         InnerBoxes.Add(B);
     }
 }
Exemple #8
0
        private static void AddTrianglesV13(IList<Triangle> ts, int len, Box3Fill OuterBox, Vector3 padXYZ, IList<Box3Fill> InnerBoxes)
        {
            Vertex[] unsharedV = new Vertex[6];
            Vertex[] sharedV = new Vertex[3];
            //int len1 = len - 1;
            //OuterBox.AddTriangle(ts[len1], padXYZ);
            for (int i = 0; i < len; i++)
            {
                Triangle t1 = ts[i];
                if (t1 == null) continue;
                bool used = false;
                OuterBox.AddTriangle(t1, padXYZ);
                for (int ii = i + 1; ii < len; ii++)
                {
                    Triangle t2 = ts[ii];
                    if (t2 == null) continue;
                    int shared = SharedVertexs(t1, t2,sharedV,unsharedV);
                    if (shared == 3) continue;
                    if (shared == 2)
                    {
                        Vertex u1 = unsharedV[0];
                        Vertex u2 = unsharedV[1];
                        Vertex s1 = sharedV[0];
                        Vertex s2 = sharedV[1];
                        float ZDiff = u1.Z - u2.Z;
                        if (ZDiff < 0) ZDiff = -ZDiff;
                        if (ZDiff < 3)
                        {
                            Box3Fill B = new Box3Fill(t1, t2, padXYZ);
                            InnerBoxes.Add(B);
                            used = true;
                        }
                        else
                        {

                        }
                    }
                }
                if (!used)
                {
                    AddThreeFour(2, t1.v1, t1.v2, t1.v3, InnerBoxes, padXYZ);
                }
            }
        }