public void DeleteLink(int _index, DestroyFn destroyFn = null) { if (destroyFn != null) { destroyFn(links[_index]); } else { DestroyImmediate(links[_index]); } for (int i = _index + 1; i < links.Length; ++i) { TxLinkHandle link = links[i]; links[--link.index] = link; } System.Array.Resize(ref links, links.Length - 1); foreach (TxTruss.NamedSet s in trussData.linksSet) { List <int> newIndices = new List <int>(); for (int i = 0; i < s.indices.Length; ++i) { if (s.indices[i] < _index) { newIndices.Add(s.indices[i]); } else if (s.indices[i] > _index) { newIndices.Add(s.indices[i] - 1); } } s.indices = newIndices.ToArray(); } }
public void DeleteFace(int _index, DestroyFn destroyFn = null) { if (destroyFn != null) { destroyFn(faces[_index]); } else { DestroyImmediate(faces[_index]); } for (int i = _index + 1; i < faces.Length; ++i) { TxFaceHandle face = faces[i]; faces[--face.index] = face; } System.Array.Resize(ref faces, faces.Length - 1); foreach (TxTruss.NamedSet s in trussData.facesSet) { List <int> newIndices = new List <int>(); for (int i = 0; i < s.indices.Length; ++i) { if (s.indices[i] < _index) { newIndices.Add(s.indices[i]); } else if (s.indices[i] > _index) { newIndices.Add(s.indices[i] - 1); } } s.indices = newIndices.ToArray(); } }
public void DeleteNode(int _index, DestroyFn destroyFn = null) { if (destroyFn != null) { destroyFn(nodes[_index]); } else { DestroyImmediate(nodes[_index]); } for (int i = _index + 1; i < nodes.Length; ++i) { TxNodeHandle node = nodes[i]; nodes[--node.index] = node; } System.Array.Resize(ref nodes, nodes.Length - 1); foreach (TxTruss.NamedSet s in trussData.nodesSet) { List <int> newIndices = new List <int>(); for (int i = 0; i < s.indices.Length; ++i) { if (s.indices[i] < _index) { newIndices.Add(s.indices[i]); } else if (s.indices[i] > _index) { newIndices.Add(s.indices[i] - 1); } } s.indices = newIndices.ToArray(); } for (int i = links.Length - 1; i >= 0; --i) { TxLinkHandle link = links[i]; if (link.node0 == _index || link.node1 == _index) { DeleteLink(i, destroyFn); } else { if (link.node0 > _index) { --link.node0; } if (link.node1 > _index) { --link.node1; } } } for (int i = faces.Length - 1; i >= 0; --i) { TxFaceHandle face = faces[i]; if (face.node0 == _index || face.node1 == _index || face.node2 == _index) { DeleteFace(i, destroyFn); } else { if (face.node0 > _index) { --face.node0; } if (face.node1 > _index) { --face.node1; } if (face.node2 > _index) { --face.node2; } } } }