public GraphSceneDisplayMeshVisitor( IGraphSceneDisplayMesh <TSinkItem, TSinkEdge> mesh, IGraphSceneDisplayMeshBackHandler <TSinkItem, TSinkEdge> backHandler, IGraph <TSinkItem, TSinkEdge> graph, TSinkItem item) { this.Mesh = mesh; this.BackHandler = backHandler as GraphSceneDisplayMeshBackHandler <TSinkItem, TSourceItem, TSinkEdge, TSourceEdge>; this.SourceGraph = graph; this.SourceItem = item; this.SourceDisplay = Mesh.Displays.FirstOrDefault(d => d.Data.Graph == SourceGraph); this.SourceScene = Mesh.Scenes.FirstOrDefault(s => s.Graph == SourceGraph); this.BackGraph = BackGraphOf(SourceGraph); this.BackItem = BackItemOf(SourceGraph, item); }
//IGraphSceneMeshBackHandler<TItem, TEdge> BackHandler (IGraph<TItem, TEdge> graph); //IGraphSceneMeshBackHandler<TItem, TEdge> BackHandler<TSourceItem, TSourceEdge> (); protected virtual IGraphSceneDisplayMeshBackHandler <TItem, TEdge> BackHandler(Type[] types) { if (types != null) { var key = Tuple.Create(types[1], types[3]); IGraphSceneDisplayMeshBackHandler <TItem, TEdge> backHandler = null; if (!_backHandlers.TryGetValue(key, out backHandler)) { backHandler = Activator.CreateInstance(typeof(GraphSceneDisplayMeshBackHandler <, , ,>).MakeGenericType(types)) as IGraphSceneDisplayMeshBackHandler <TItem, TEdge>; _backHandlers.Add(key, backHandler); backHandler.Scenes = () => this.Scenes; backHandler.Displays = () => this.Displays; } return(backHandler); } return(null); }