public void AddTriangle(TensileTriangle _tt) { if (!ConnectedTriangles.Contains(_tt)) { ConnectedTriangles.Add(_tt); } }
public void AddVertexEdgeTriangle(TensileEdge SE, int index) { int V0 = SE.StartVertice; int V1 = SE.EndVertice; if (SE.GetConnecetedTriangles().Count() == 1) { Vector3 _p = SE.PosToGrow(index); _edgeGraph.edgeGraph.AddVertex(); int V = _edgeGraph.edgeGraph.VertexCount - 1; _edgeGraph.edgeGraph.AddEdge(V, V0); _edgeGraph.edgeGraph.AddEdge(V, V1); addPosition(_p); var tObj = Instantiate(TGVertexPrefab, transform); tObj.SetBarHolder(BarsHolder); tObj.SetStrHolder(StringHolder); tObj.transform.localPosition = _p; tObj.SetupStructure(Scale, DefState, V); _edgeGraph.TensileVertexObjects[V0].AddConnectedVertObjInLayer(tObj); _edgeGraph.TensileVertexObjects[V1].AddConnectedVertObjInLayer(tObj); _edgeGraph.TensileVertexObjects.Add(tObj); SE.AddDiagonalVertex(tObj); SE.NeighborVertexEnd = tObj; var eObj0 = Instantiate(TGEdgePrefab, transform); eObj0.SetBarHolder(BarsHolder); eObj0.SetStrHolder(StringHolder); eObj0.SetupStructure(Scale, DefState, V, V0, savedPositions); _edgeGraph.TensileEdgeObjects.Add(eObj0); var eObj1 = Instantiate(TGEdgePrefab, transform); eObj1.SetBarHolder(BarsHolder); eObj1.SetStrHolder(StringHolder); eObj1.SetupStructure(Scale, DefState, V, V1, savedPositions); _edgeGraph.TensileEdgeObjects.Add(eObj1); var tri = new TensileTriangle(); tri.SetupTriangle(V, V0, V1, savedPositions); _edgeGraph.TensileTriangle.Add(tri); tri.addTensileEdgeObjs(SE); tri.addTensileEdgeObjs(eObj0); tri.addTensileEdgeObjs(eObj1); tri.addTensileVertexObjs(tObj); tri.addTensileVertexObjs(_edgeGraph.TensileVertexObjects[V0]); tri.addTensileVertexObjs(_edgeGraph.TensileVertexObjects[V1]); SE.AddTriangle(tri); eObj0.AddTriangle(tri); eObj0.AddConnectedVertex(tObj); eObj0.AddConnectedVertex(_edgeGraph.TensileVertexObjects[V0]); eObj0.AddDiagonalVertex(_edgeGraph.TensileVertexObjects[V1]); tObj.AddEdgeObjs(eObj0); _edgeGraph.TensileVertexObjects[V0].AddEdgeObjs(eObj0); eObj1.AddTriangle(tri); eObj1.AddDiagonalVertex(_edgeGraph.TensileVertexObjects[V0]); eObj1.AddConnectedVertex(tObj); eObj1.AddConnectedVertex(_edgeGraph.TensileVertexObjects[V1]); tObj.AddEdgeObjs(eObj1); _edgeGraph.TensileVertexObjects[V1].AddEdgeObjs(eObj1); List <TensileEdge> SharedPointEdges = new List <TensileEdge>(); foreach (var e in _edgeGraph.TensileEdgeObjects) { if (e.GetPositionToGrow().Count != 0) { var P = e.GetPositionToGrow()[index]; if (P == _p && e != SE) { SharedPointEdges.Add(e); var tp = e.PosToGrow(index); } } } if (SharedPointEdges.Count != 0) { foreach (var e in SharedPointEdges) { var _v0 = e.StartVertice; var _v1 = e.EndVertice; int _v2 = V; e.AddDiagonalVertex(_edgeGraph.TensileVertexObjects[V]); TensileTriangle _tri = new TensileTriangle(); _tri.SetupTriangle(_v0, _v1, _v2, savedPositions); e.AddTriangle(_tri); _tri.addTensileEdgeObjs(e); _tri.addTensileVertexObjs(_edgeGraph.TensileVertexObjects[_v0]); _tri.addTensileVertexObjs(_edgeGraph.TensileVertexObjects[_v1]); _tri.addTensileVertexObjs(_edgeGraph.TensileVertexObjects[_v2]); TensileEdge ne; List <TensileEdge> NearEdges = new List <TensileEdge>(2); int NearEdgeCount = 0; foreach (var ve in _edgeGraph.TensileVertexObjects[V].GetConnectedEdgeObjs()) { if (ve.StartVertice == _v0 || ve.EndVertice == _v0) { NearEdgeCount++; NearEdges.Add(ve); } else if (ve.StartVertice == _v1 || ve.EndVertice == _v1) { NearEdgeCount++; NearEdges.Add(ve); } } if (NearEdgeCount == 1) { foreach (var ve in _edgeGraph.TensileVertexObjects[V].GetConnectedEdgeObjs()) { if (ve.StartVertice == _v0 || ve.EndVertice == _v0) { //NearEdgeCount++; ne = ve; ne.AddDiagonalVertex(_edgeGraph.TensileVertexObjects[_v1]); ne.AddTriangle(_tri); _tri.addTensileEdgeObjs(ne); var eObj2 = Instantiate(TGEdgePrefab, transform); eObj2.SetBarHolder(BarsHolder); eObj2.SetStrHolder(StringHolder); eObj2.SetupStructure(Scale, DefState, _v1, _v2, savedPositions); eObj2.AddDiagonalVertex(_edgeGraph.TensileVertexObjects[_v0]); _edgeGraph.edgeGraph.AddEdge(_v1, _v2); eObj2.AddConnectedVertex(_edgeGraph.TensileVertexObjects[_v1]); eObj2.AddConnectedVertex(_edgeGraph.TensileVertexObjects[_v2]); eObj2.AddTriangle(_tri); _tri.addTensileEdgeObjs(eObj2); _edgeGraph.TensileEdgeObjects.Add(eObj2); _edgeGraph.TensileVertexObjects[_v2].AddEdgeObjs(eObj2); _edgeGraph.TensileVertexObjects[_v1].AddEdgeObjs(eObj2); _edgeGraph.TensileVertexObjects[_v1].AddConnectedVertObjInLayer(_edgeGraph.TensileVertexObjects[_v2]); break; } else if (ve.StartVertice == _v1 || ve.EndVertice == _v1) { // NearEdgeCount++; ne = ve; ne.AddDiagonalVertex(_edgeGraph.TensileVertexObjects[_v0]); ne.AddTriangle(_tri); _tri.addTensileEdgeObjs(ne); var eObj2 = Instantiate(TGEdgePrefab, transform); eObj2.SetBarHolder(BarsHolder); eObj2.SetStrHolder(StringHolder); eObj2.SetupStructure(Scale, DefState, _v0, _v2, savedPositions); eObj2.AddDiagonalVertex(_edgeGraph.TensileVertexObjects[_v1]); _edgeGraph.edgeGraph.AddEdge(_v0, _v2); eObj2.AddConnectedVertex(_edgeGraph.TensileVertexObjects[_v0]); eObj2.AddConnectedVertex(_edgeGraph.TensileVertexObjects[_v2]); eObj2.AddTriangle(_tri); _tri.addTensileEdgeObjs(eObj2); _edgeGraph.TensileEdgeObjects.Add(eObj2); _edgeGraph.TensileVertexObjects[_v2].AddEdgeObjs(eObj2); _edgeGraph.TensileVertexObjects[_v0].AddEdgeObjs(eObj2); _edgeGraph.TensileVertexObjects[_v0].AddConnectedVertObjInLayer(_edgeGraph.TensileVertexObjects[_v2]); break; } else { continue; } } } if (NearEdgeCount == 0) { ne = Instantiate(TGEdgePrefab, transform);; ne.SetBarHolder(BarsHolder); ne.SetStrHolder(StringHolder); ne.SetupStructure(Scale, DefState, _v1, _v2, savedPositions); ne.AddDiagonalVertex(_edgeGraph.TensileVertexObjects[_v0]); _edgeGraph.edgeGraph.AddEdge(_v1, _v2); ne.AddConnectedVertex(_edgeGraph.TensileVertexObjects[_v1]); ne.AddConnectedVertex(_edgeGraph.TensileVertexObjects[_v2]); ne.AddTriangle(_tri); _tri.addTensileEdgeObjs(ne); _edgeGraph.TensileEdgeObjects.Add(ne); _edgeGraph.TensileVertexObjects[_v2].AddEdgeObjs(ne); _edgeGraph.TensileVertexObjects[_v1].AddEdgeObjs(ne); var eObj2 = Instantiate(TGEdgePrefab, transform); eObj2.SetBarHolder(BarsHolder); eObj2.SetStrHolder(StringHolder); eObj2.SetupStructure(Scale, DefState, _v0, _v2, savedPositions); eObj2.AddDiagonalVertex(_edgeGraph.TensileVertexObjects[_v1]); _edgeGraph.edgeGraph.AddEdge(_v0, _v2); eObj2.AddConnectedVertex(_edgeGraph.TensileVertexObjects[_v0]); eObj2.AddConnectedVertex(_edgeGraph.TensileVertexObjects[_v2]); eObj2.AddTriangle(_tri); _tri.addTensileEdgeObjs(eObj2); _edgeGraph.TensileEdgeObjects.Add(eObj2); _edgeGraph.TensileVertexObjects[_v2].AddEdgeObjs(eObj2); _edgeGraph.TensileVertexObjects[_v0].AddEdgeObjs(eObj2); _edgeGraph.TensileVertexObjects[_v0].AddConnectedVertObjInLayer(_edgeGraph.TensileVertexObjects[_v2]); _edgeGraph.TensileVertexObjects[_v1].AddConnectedVertObjInLayer(_edgeGraph.TensileVertexObjects[_v2]); } if (NearEdgeCount == 2) { NearEdges[0].AddTriangle(_tri); NearEdges[1].AddTriangle(_tri); NearEdges[0].AddDiagonalVertex(_edgeGraph.TensileVertexObjects[_v1]); NearEdges[1].AddDiagonalVertex(_edgeGraph.TensileVertexObjects[_v0]); _tri.addTensileEdgeObjs(NearEdges[0]); _tri.addTensileEdgeObjs(NearEdges[1]); _edgeGraph.TensileVertexObjects[_v0].AddConnectedVertObjInLayer(_edgeGraph.TensileVertexObjects[_v2]); _edgeGraph.TensileVertexObjects[_v1].AddConnectedVertObjInLayer(_edgeGraph.TensileVertexObjects[_v2]); } } } if (_edgeGraph.TensileVertexObjects[V].GetConnectedEdgeObjs().Count() == 6) { List <TensileEdge> ToTriEdges = new List <TensileEdge>(2); foreach (var ce in _edgeGraph.TensileVertexObjects[V].GetConnectedEdgeObjs()) { if (ce.GetConnecetedTriangles().Count() == 1) { ToTriEdges.Add(ce); } } int _vt0; int _vt1; if (ToTriEdges[0].StartVertice == V) { _vt0 = ToTriEdges[0].EndVertice; } else { _vt0 = ToTriEdges[0].StartVertice; } if (ToTriEdges[1].StartVertice == V) { _vt1 = ToTriEdges[1].EndVertice; } else { _vt1 = ToTriEdges[1].StartVertice; } TensileTriangle TT = new TensileTriangle(); TT.SetupTriangle(_vt0, _vt1, V, savedPositions); ToTriEdges[0].AddDiagonalVertex(_edgeGraph.TensileVertexObjects[_vt1]); ToTriEdges[1].AddDiagonalVertex(_edgeGraph.TensileVertexObjects[_vt0]); ToTriEdges[0].AddTriangle(TT); ToTriEdges[1].AddTriangle(TT); var te = Instantiate(TGEdgePrefab, transform); te.SetBarHolder(BarsHolder); te.SetStrHolder(StringHolder); te.SetupStructure(Scale, DefState, _vt0, _vt1, savedPositions); te.AddDiagonalVertex(_edgeGraph.TensileVertexObjects[V]); _edgeGraph.edgeGraph.AddEdge(_vt0, _vt1); te.AddConnectedVertex(_edgeGraph.TensileVertexObjects[_vt0]); te.AddConnectedVertex(_edgeGraph.TensileVertexObjects[_vt1]); te.AddTriangle(TT); TT.addTensileEdgeObjs(te); _edgeGraph.TensileEdgeObjects.Add(te); _edgeGraph.TensileVertexObjects[_vt1].AddEdgeObjs(te); _edgeGraph.TensileVertexObjects[_vt0].AddEdgeObjs(te); _edgeGraph.TensileVertexObjects[_vt0].AddConnectedVertObjInLayer(_edgeGraph.TensileVertexObjects[_vt1]); } } }
IEnumerable <TensileTriangle> CreateTriangle() { List <TensileTriangle> T = new List <TensileTriangle>(); int xSize = SegmentCount - 1; int zSize = SegmentCount - 1; int[] triangleVerts = new int[xSize * zSize * 3 * LayerCount]; for (int y = 0, ti = 0, vi = 0; y < LayerCount; y++, vi += 1) { for (int z = 0; z < zSize; z++, vi++) { for (int x = 0; x < xSize - z; x++, vi++) { { if (x < xSize - z - 1) { triangleVerts[ti] = vi; triangleVerts[ti + 1] = vi + xSize - z + 1; triangleVerts[ti + 2] = vi + 1; triangleVerts[ti + 3] = vi + 1; triangleVerts[ti + 4] = vi + xSize - z + 1; triangleVerts[ti + 5] = vi + xSize - z + 2; ti += 6; } else { triangleVerts[ti] = vi; triangleVerts[ti + 1] = vi + xSize - z + 1; triangleVerts[ti + 2] = vi + 1; ti += 3; } } } } } TriangleVerts = triangleVerts; for (int i = 0; i < triangleVerts.Length; i += 3) { TensileTriangle Tri = new TensileTriangle(); int v0 = triangleVerts[i]; int v1 = triangleVerts[i + 1]; int v2 = triangleVerts[i + 2]; //print(v0 + "," + v1 + "," + v2); Tri.SetupTriangle(v0, v1, v2, savedPositions); foreach (var te in Tri.GetTriEdges()) { int S = te[0]; int E = te[1]; int D = Tri.GiveDiagonalVertice(S, E); Tri.addTensileEdgeObjs(EdgeObj2d[S, E]); EdgeObj2d[S, E].AddTriangle(Tri); EdgeObj2d[S, E].AddDiagonalVertex(_edgeGraph.TensileVertexObjects[D]); } T.Add(Tri); } return(T); }
IEnumerable <TensileTriangle> CreateTriangle() { List <TensileTriangle> T = new List <TensileTriangle>(); int xSize = countX - 1; int zSize = countZ - 1; int[] triangles = new int[xSize * zSize * 6 * countY]; for (int y = 0, ti = 0, vi = 0; y < countY; y++, vi += countX) { for (int z = 0; z < zSize; z++, vi++) { for (int x = 0; x < xSize; x++, ti += 6, vi++) { if (z % 2 == 0) { //if (x < xSize - 1) { triangles[ti] = vi; triangles[ti + 3] = triangles[ti + 2] = vi + 1; triangles[ti + 4] = triangles[ti + 1] = vi + xSize + 1; triangles[ti + 5] = vi + xSize + 2; } } else { triangles[ti] = triangles[ti + 3] = vi; triangles[ti + 1] = vi + xSize + 1; triangles[ti + 2] = triangles[ti + 4] = vi + xSize + 2; triangles[ti + 5] = vi + 1; } } } } TriangleVerts = triangles; for (int i = 0; i < triangles.Length; i += 3) { TensileTriangle Tri = new TensileTriangle(); int v0 = triangles[i]; int v1 = triangles[i + 1]; int v2 = triangles[i + 2]; //print(v0 + "," + v1 + "," + v2); Tri.SetupTriangle(v0, v1, v2, currentPositions); foreach (var te in Tri.GetTriEdges()) { int S = te[0]; int E = te[1]; int D = Tri.GiveDiagonalVertice(S, E); Tri.addTensileEdgeObjs(EdgeObj2d[S, E]); EdgeObj2d[S, E].AddTriangle(Tri); EdgeObj2d[S, E].AddDiagonalVertex(_edgeGraph.TensileVertexObjects[D]); } T.Add(Tri); } return(T); }