Example #1
0
        /// <summary>
        /// Registers the specified model unique identifier.
        /// </summary>
        /// <typeparam name="T">Geometry Buffer Type</typeparam>
        /// <param name="modelGuid">The model unique identifier.</param>
        /// <param name="geometry">The geometry.</param>
        /// <returns></returns>
        public IGeometryBufferProxy Register <T>(Guid modelGuid, Geometry3D geometry) where T : class, IGeometryBufferModel, new()
        {
            if (geometry == null || modelGuid == Guid.Empty)
            {
                return(GeometryBufferProxy <T> .Empty);
            }
            lock (bufferDictionary)
            {
                GeometryBufferContainer container = null;
                if (bufferDictionary.TryGetValue(typeof(T), geometry.GUID, out container))
                {
#if DEBUGDETAIL
                    Debug.WriteLine("Existing buffer found, GeomoetryGUID = " + geometry.GUID);
#endif
                    container.Attach(modelGuid);
                }
                else
                {
#if DEBUGDETAIL
                    Debug.WriteLine("Buffer not found, create new buffer. GeomoetryGUID = " + geometry.GUID);
#endif
                    container = GeometryBufferContainer.Create <T>();
                    var id = geometry.GUID;
                    container.Disposed += (s, e) =>
                    {
                        lock (bufferDictionary)
                        {
                            bufferDictionary.Remove(typeof(T), id);
                        }
                    };
                    container.Buffer.Geometry = geometry;
                    container.Attach(modelGuid);
                    bufferDictionary.Add(typeof(T), geometry.GUID, container);
                }
                return(new GeometryBufferProxy <T>(modelGuid, geometry.GUID, container.Buffer, this));
            }
        }
Example #2
0
        /// <summary>
        /// Unregisters the specified model unique identifier.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="proxy">Buffer Proxy</param>
        /// <returns></returns>
        public bool Unregister <T>(IGeometryBufferProxy proxy) where T : class, IGeometryBufferModel
        {
            if (proxy.GeometryGuid == Guid.Empty || proxy.ModelGuid == Guid.Empty)
            {
                return(false);
            }
            lock (bufferDictionary)
            {
                GeometryBufferContainer container = null;
                if (bufferDictionary.TryGetValue(typeof(T), proxy.GeometryGuid, out container))
                {
#if DEBUGDETAIL
                    Debug.WriteLine("Existing buffer found, Detach model from buffer. ModelGUID = " + proxy.ModelGuid);
#endif
                    container.Detach(proxy.ModelGuid);
                    return(true);
                }
                else
                {
                    Debug.WriteLine("Unregister geometry buffer, buffer is not found.");
                    return(false);
                }
            }
        }