/// <summary> /// Gets the surface with the specified description. /// </summary> public static Quadtree <F> Get(_SurfaceDesc <T, F> Surface) { Quadtree <F> surf; if (Surface.Lower.Depth == 0) { surf = Quadtree <F> .Singleton(Surface.SurfaceizeFunc(Surface.Lower.Value, Surface.Higher.Value, Surface.Axis)); } else { if (!_SurfaceCache.TryGetValue(Surface, out surf)) { // RECURSE! int axisind = (int)Surface.Axis; Quadtree <F>[] children = new Quadtree <F> [4]; for (int t = 0; t < 4; t++) { _SurfaceDesc <T, F> subsurf = new _SurfaceDesc <T, F>() { Axis = Surface.Axis, Lower = Surface.Lower[Octree.Indices[axisind, t, 1]], Higher = Surface.Higher[Octree.Indices[axisind, t, 0]], SurfaceizeFunc = Surface.SurfaceizeFunc }; children[t] = Get(subsurf); } surf = _SurfaceCache[Surface] = Quadtree <F> .Create(Surface.Lower.Depth, children); } } return(surf); }
public int GetHashCode(_SurfaceDesc <T, F> obj) { return(obj.GetHashCode()); }
public bool Equals(_SurfaceDesc <T, F> x, _SurfaceDesc <T, F> y) { return(x.Axis == y.Axis && x.Higher == y.Higher && x.Lower == y.Lower && x.SurfaceizeFunc == y.SurfaceizeFunc); }