コード例 #1
0
ファイル: Octree.cs プロジェクト: madmaxoft/MineViewer
            /// <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);
            }
コード例 #2
0
ファイル: Octree.cs プロジェクト: madmaxoft/MineViewer
 public int GetHashCode(_SurfaceDesc <T, F> obj)
 {
     return(obj.GetHashCode());
 }
コード例 #3
0
ファイル: Octree.cs プロジェクト: madmaxoft/MineViewer
 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);
 }