示例#1
0
 //	Triangles for normal cube
 void Triangles(int index, int vertIndex)
 {
     triangles[index + 0] = new MeshTri {
         triangle = 3 + vertIndex
     };
     triangles[index + 1] = new MeshTri {
         triangle = 1 + vertIndex
     };
     triangles[index + 2] = new MeshTri {
         triangle = 0 + vertIndex
     };
     triangles[index + 3] = new MeshTri {
         triangle = 3 + vertIndex
     };
     triangles[index + 4] = new MeshTri {
         triangle = 2 + vertIndex
     };
     triangles[index + 5] = new MeshTri {
         triangle = 1 + vertIndex
     };
 }
示例#2
0
    public GameObject CreateMeshTriObject(MeshTri mt)
    {
        //GameObject s = GameObject.CreatePrimitive (PrimitiveType.Sphere);
        //s.transform.position = mt.CenterLocation;
        //s.transform.localScale = Vector3.one * mt.CenterRadius;

        GameObject go = new GameObject();

        go.name               = "energy tri";
        go.transform.parent   = this.transform;
        go.transform.position = mt.CenterLocation;
        go.AddComponent <MeshFilter> ().mesh       = mt.GenerateMesh();
        go.AddComponent <MeshRenderer> ().material = this.MaterialForLines;

        var ft = go.AddComponent <FlowTriangle> ();

        ft.NodeA = mt.A;
        ft.NodeB = mt.B;
        ft.NodeC = mt.C;

        return(go);
    }
示例#3
0
    void PerformGenerate()
    {
        this.SetupUniqueIndices();
        var verts = GameObject.FindObjectsOfType <FlowVertexNode> ();



        for (int iv = 0; iv < verts.Length; iv++)
        {
            var center  = verts[iv];
            var nearish = verts
                          .Where(k => (k.Location - center.Location).magnitude < 2.0)
                          .OrderBy(k => (k.Location - center.Location).magnitude)
                          .Take(20).ToList();
            for (int ik = 0; ik < nearish.Count; ik++)
            {
                if (center.UniqueIndex < nearish[ik].UniqueIndex)
                {
                    //CreateLineObjects(this.transform, center,
                    //	                  nearish[ik]);
                }

                for (int ij = 0; ij < nearish.Count; ij++)
                {
                    var a = center;
                    var b = nearish[ik];
                    var c = nearish[ij];
                    if ((a.UniqueIndex < b.UniqueIndex) && (a.UniqueIndex < c.UniqueIndex) &&
                        (b.UniqueIndex < c.UniqueIndex))
                    {
                        MeshTri tri = new MeshTri(a, b, c);
                        this.MyTris.Add(tri);
                    }
                }
            }
        }

        if (true)         // delauny simplification:
        {
            int mi = 0;
            while (mi < this.MyTris.Count)
            {
                var  t       = this.MyTris[mi];
                bool isValid = true;
                for (int vi = 0; (vi < verts.Length) && isValid; vi++)
                {
                    var iv = verts[vi];
                    if (!t.ReferencesVertex(iv))
                    {
                        if (t.CenterSphereContainsPoint(iv.Location))
                        {
                            isValid = false;
                        }
                    }
                }
                if (isValid)
                {
                    mi++;
                }
                else
                {
                    this.MyTris.RemoveAt(mi);
                }
            }
        }

        foreach (var m in this.MyTris)
        {
            this.CreateMeshTriObject(m);
        }
    }
示例#4
0
 void addTriangle(MeshTri tri)
 {
     tris.Add(tri);
 }