public DoFLink(DoFPart partA, DoFPart partB, DoFLinkType linkType) { Type = linkType; PartA = partA; PartB = partB; DoFNumber = 0; }
public DoFPart otherPart(DoFPart callingPart) { if (callingPart == PartA) { return(PartB); } else { return(PartA); } }
private List <DoFPart> grabChain(DoFPart chainStart, List <DoFPart> partPile) { List <DoFPart> preChain = new List <DoFPart>(); List <DoFPart> postChain = new List <DoFPart>(); bool loop = false; if (chainStart.connections.Count == 0) { preChain.Add(chainStart); } else { DoFPart partIter; DoFPart lastPart; if (chainStart.connections.Count == 2) { partIter = chainStart.connections[0].otherPart(chainStart); lastPart = chainStart; while (partPile.Contains(partIter) && partIter != chainStart) { preChain.Add(partIter); if (partIter.connections.Count == 1) { break; } else { if (partIter.connections[0].otherPart(partIter) != lastPart) { lastPart = partIter; partIter = partIter.connections[0].otherPart(partIter); } else { lastPart = partIter; partIter = partIter.connections[1].otherPart(partIter); } } } if (partIter == chainStart) { loop = true; } } if (loop == false) { partIter = chainStart.connections[1].otherPart(chainStart); lastPart = chainStart; while (partPile.Contains(partIter)) { preChain.Add(partIter); if (partIter.connections.Count == 1) { break; } else { if (partIter.connections[0].otherPart(partIter) != lastPart) { lastPart = partIter; partIter = partIter.connections[0].otherPart(partIter); } else { lastPart = partIter; partIter = partIter.connections[1].otherPart(partIter); } } } } } preChain.Reverse(); preChain.Add(chainStart); List <DoFPart> result = preChain; result = (result.Concat(postChain)).ToList(); return(result); }
public void add(DoFPart partToAdd) { Parts.Add(partToAdd); }