Esempio n. 1
0
 public bool Equals(_SliceDesc <T, F> x, _SliceDesc <T, F> y)
 {
     return
         (x.SurfaceizeFunc == y.SurfaceizeFunc &&
          x.Axis == y.Axis &&
          x.Level == y.Level &&
          x.Octree == y.Octree);
 }
Esempio n. 2
0
            // <summary>
            /// Gets the slice borders for the specified slice description.
            /// </summary>
            public static Quadtree <F> Get(_SliceDesc <T, F> Slice)
            {
                if (Slice.Octree.Depth == 0)
                {
                    throw new ArgumentException();
                }

                Quadtree <F> tree;

                if (!_SliceCache.TryGetValue(Slice, out tree))
                {
                    Axis a  = Slice.Axis;
                    int  ai = (int)a;
                    int  l  = Slice.Level;
                    int  hs = 1 << (Slice.Octree.Depth - 1);

                    if (l == hs - 1)
                    {
                        Quadtree <F>[] children = new Quadtree <F> [4];
                        for (int r = 0; r < 4; r++)
                        {
                            children[r] = _SurfaceDesc <T, F> .Get(new _SurfaceDesc <T, F>()
                            {
                                Axis           = a,
                                Lower          = Slice.Octree[Cubia.Octree.Indices[ai, r, 0]],
                                Higher         = Slice.Octree[Cubia.Octree.Indices[ai, r, 1]],
                                SurfaceizeFunc = Slice.SurfaceizeFunc
                            });
                        }
                        tree = Quadtree <F> .Create(children[0].Depth + 1, children);
                    }
                    else
                    {
                        int            i        = l < hs ? 0 : 1;
                        Quadtree <F>[] children = new Quadtree <F> [4];
                        for (int r = 0; r < 4; r++)
                        {
                            children[r] = _SliceDesc <T, F> .Get(new _SliceDesc <T, F>()
                            {
                                Axis           = a,
                                Level          = l - (i *hs),
                                SurfaceizeFunc = Slice.SurfaceizeFunc,
                                Octree         = Slice.Octree[Cubia.Octree.Indices[ai, r, i]]
                            });
                        }
                        tree = Quadtree <F> .Create(children[0].Depth + 1, children);
                    }

                    _SliceCache[Slice] = tree;
                }
                return(tree);
            }
Esempio n. 3
0
 public int GetHashCode(_SliceDesc <T, F> obj)
 {
     return(obj.GetHashCode());
 }