예제 #1
0
 public DoFLink(DoFPart partA, DoFPart partB, DoFLinkType linkType)
 {
     Type      = linkType;
     PartA     = partA;
     PartB     = partB;
     DoFNumber = 0;
 }
예제 #2
0
 public DoFPart otherPart(DoFPart callingPart)
 {
     if (callingPart == PartA)
     {
         return(PartB);
     }
     else
     {
         return(PartA);
     }
 }
예제 #3
0
        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);
        }
예제 #4
0
 public void add(DoFPart partToAdd)
 {
     Parts.Add(partToAdd);
 }