예제 #1
0
 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();
     }
 }
예제 #2
0
 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();
     }
 }
예제 #3
0
 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;
             }
         }
     }
 }