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); }
// <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); }
public int GetHashCode(_SliceDesc <T, F> obj) { return(obj.GetHashCode()); }