예제 #1
0
 public bool IsBorderTrixelFace(TrixelEmplacement id, FaceOrientation face)
 {
     return(this.IsBorderTrixelFace(id.GetTraversal(face)));
 }
예제 #2
0
파일: ArtObject.cs 프로젝트: tanis2000/FEZ
 public bool IsBorderTrixelFace(TrixelEmplacement id, FaceOrientation face)
 {
   return this.IsBorderTrixelFace(id.GetTraversal(face));
 }
예제 #3
0
        private HashSet <TrixelEmplacement> TraverseSurface(TrixelEmplacement origin, ICollection <TrixelEmplacement> subSurface)
        {
            HashSet <TrixelEmplacement> hashSet = new HashSet <TrixelEmplacement>()
            {
                origin
            };
            Queue <TrixelSurface.TrixelToTraverse> queue = new Queue <TrixelSurface.TrixelToTraverse>();

            queue.Enqueue(new TrixelSurface.TrixelToTraverse()
            {
                Trixel = origin
            });
            while (queue.Count != 0)
            {
                TrixelSurface.TrixelToTraverse toTraverse = queue.Dequeue();
                TrixelEmplacement trixelEmplacement       = toTraverse.Trixel;
                using (IEnumerator <FaceOrientation> enumerator = Enumerable.Where <FaceOrientation>((IEnumerable <FaceOrientation>) this.tangentFaces, (Func <FaceOrientation, bool>)(x =>
                {
                    if (toTraverse.Except.HasValue)
                    {
                        return(toTraverse.Except.Value != x);
                    }
                    else
                    {
                        return(true);
                    }
                })).GetEnumerator())
                {
label_8:
                    while (enumerator.MoveNext())
                    {
                        FaceOrientation   current   = enumerator.Current;
                        TrixelEmplacement traversal = trixelEmplacement.GetTraversal(current);
                        while (true)
                        {
                            if (!hashSet.Contains(traversal) && subSurface.Contains(traversal))
                            {
                                hashSet.Add(traversal);
                                if (hashSet.Count != subSurface.Count)
                                {
                                    queue.Enqueue(new TrixelSurface.TrixelToTraverse()
                                    {
                                        Trixel = traversal,
                                        Except = new FaceOrientation?(current)
                                    });
                                    traversal = traversal.GetTraversal(current);
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else
                            {
                                goto label_8;
                            }
                        }
                        return(hashSet);
                    }
                }
            }
            return(hashSet);
        }