/// <summary>
 /// Returns the non-simplified scene.
 /// </summary>
 /// <returns></returns>
 private IScene2DPrimitivesSource GetNonSimplifiedStream()
 {
     if (_nonSimplifiedScene == null)
     {
         long position = _index.SceneIndexes[_index.SceneIndexes.Length - 1];
         _stream.Seek(position, SeekOrigin.Begin);
         LimitedStream stream = new LimitedStream(_stream);
         //Scene2DRTreeSerializer serializer = new Scene2DRTreeSerializer(true);
         //_nonSimplifiedScene = new Scene2DPrimitivesSource(serializer.Deserialize(stream));
         OsmSharp.UI.Renderer.Scene.Storage.Styled.Scene2DStyledSerializer serializer =
             new Styled.Scene2DStyledSerializer();
         _nonSimplifiedScene = serializer.Deserialize(stream, true);
     }
     return(_nonSimplifiedScene);
 }
 /// <summary>
 /// Returns the non-simplified scene.
 /// </summary>
 /// <returns></returns>
 private IScene2DPrimitivesSource GetNonSimplifiedStream()
 {
     if (_nonSimplifiedScene == null)
     {
         long position = _index.SceneIndexes[_index.SceneIndexes.Length - 1];
         _stream.Seek(position, SeekOrigin.Begin);
         LimitedStream stream = new LimitedStream(_stream);
         //Scene2DRTreeSerializer serializer = new Scene2DRTreeSerializer(true);
         //_nonSimplifiedScene = new Scene2DPrimitivesSource(serializer.Deserialize(stream));
         OsmSharp.UI.Renderer.Scene.Storage.Styled.Scene2DStyledSerializer serializer =
             new Styled.Scene2DStyledSerializer();
         _nonSimplifiedScene = serializer.Deserialize(stream, true);
     }
     return _nonSimplifiedScene;
 }
        /// <summary>
        /// Fills the given simple scene with objects inside the given view and for the given zoomFactor.
        /// </summary>
        /// <param name="scene"></param>
        /// <param name="view"></param>
        /// <param name="zoomFactor"></param>
        public void Get(Scene2DSimple scene, View2D view, float zoomFactor)
        {
            lock (_stream) {             // make sure there is only synchonous access to the stream.
                // check what is in the non-simplified scene.
                IScene2DPrimitivesSource simpleSource = this.GetNonSimplifiedStream();
                simpleSource.Get(scene, view, zoomFactor);

                // check what index this zoomfactor is for.
                int idx = this.SearchForScene(zoomFactor);
                if (idx >= 0)                                              // the index was found.
                {
                    if (!_loadedScenes.TryGetValue(idx, out simpleSource)) // the scene was not found.
                    {
                        long position = _index.SceneIndexes [idx];
                        _stream.Seek(position, SeekOrigin.Begin);
                        LimitedStream stream = new LimitedStream(_stream);
                        //Scene2DRTreeSerializer serializer = new Scene2DRTreeSerializer(true);
                        //simpleSource = new Scene2DPrimitivesSource(serializer.Deserialize(stream));
                        OsmSharp.UI.Renderer.Scene.Storage.Styled.Scene2DStyledSerializer serializer =
                            new Styled.Scene2DStyledSerializer();
                        simpleSource = serializer.Deserialize(stream, true);
                        _loadedScenes.Add(idx, simpleSource);
                    }
                    simpleSource.Get(scene, view, zoomFactor);

                    OsmSharp.Logging.Log.TraceEvent("Scene2DLayeredSource", System.Diagnostics.TraceEventType.Verbose,
                                                    string.Format("Deserialized from scene at zoom {0} and idx {1} synchronized.", zoomFactor, idx));
                }
            }
        }
        /// <summary>
        /// Fills the given simple scene with objects inside the given view and for the given zoomFactor.
        /// </summary>
        /// <param name="scene"></param>
        /// <param name="view"></param>
        /// <param name="zoomFactor"></param>
        public void Get(Scene2DSimple scene, View2D view, float zoomFactor)
        {
            lock (_stream) { // make sure there is only synchonous access to the stream.
                // check what is in the non-simplified scene.
                IScene2DPrimitivesSource simpleSource = this.GetNonSimplifiedStream ();
                simpleSource.Get (scene, view, zoomFactor);

                // check what index this zoomfactor is for.
                int idx = this.SearchForScene (zoomFactor);
                if (idx >= 0) { // the index was found.
                    if (!_loadedScenes.TryGetValue (idx, out simpleSource)) { // the scene was not found.
                        long position = _index.SceneIndexes [idx];
                        _stream.Seek (position, SeekOrigin.Begin);
                        LimitedStream stream = new LimitedStream (_stream);
                        //Scene2DRTreeSerializer serializer = new Scene2DRTreeSerializer(true);
                        //simpleSource = new Scene2DPrimitivesSource(serializer.Deserialize(stream));
                        OsmSharp.UI.Renderer.Scene.Storage.Styled.Scene2DStyledSerializer serializer =
                            new Styled.Scene2DStyledSerializer ();
                        simpleSource = serializer.Deserialize (stream, true);
                        _loadedScenes.Add (idx, simpleSource);
                    }
                    simpleSource.Get (scene, view, zoomFactor);

                    OsmSharp.Logging.Log.TraceEvent ("Scene2DLayeredSource", System.Diagnostics.TraceEventType.Verbose,
                        string.Format ("Deserialized from scene at zoom {0} and idx {1} synchronized.", zoomFactor, idx));
                }
            }
        }