private void OnLogicLoaded(object sender, DependencyLogicCore newValue) { this.GraphArea.LogicCore = newValue; this.GraphArea.GenerateGraph(); this.ZoomControl.ZoomToFill(); }
public async Task GenerateLogic(string packagePath, CancellationToken cancellationToken = default, IProgress <ProgressData> progress = null) { var reader = new AppxManifestReader(); using (var fileReader = FileReaderFactory.CreateFileReader(packagePath)) { this.Package = await reader.Read(fileReader, false, cancellationToken).ConfigureAwait(false); } var graph = new DependencyBidirectionalGraph(); var mapping = await this.dependencyMapper.GetGraph(this.Package, cancellationToken, progress).ConfigureAwait(false); var dict = new Dictionary <GraphElement, DependencyVertex>(); foreach (var item in mapping.Elements) { DependencyVertex dv; if (item is RootGraphElement root) { dv = new RootDependencyVertex(root.Package); } else if (item is PackageGraphElement appxPackage) { dv = new InstalledDependencyVertex(appxPackage.Package); } else if (item is OperatingSystemGraphElement ose) { dv = new SystemDependencyVertex(ose.MaxRequiredCaption); } else { dv = new DependencyVertex(); if (item is MissingPackageGraphElement mpe) { dv.Text = mpe.PackageName; } else { dv.Text = "?"; } } dv.ID = item.Id; graph.AddVertex(dv); dict[item] = dv; } foreach (var relation in mapping.Relations) { graph.AddEdge(new DependencyEdge() { Source = dict[relation.Left], Target = dict[relation.Right], Text = relation.RelationDescription }); } var logicCore = new DependencyLogicCore(); logicCore.Graph = graph; logicCore.DefaultLayoutAlgorithm = LayoutAlgorithmTypeEnum.KK; logicCore.DefaultLayoutAlgorithmParams = logicCore.AlgorithmFactory.CreateLayoutParameters(LayoutAlgorithmTypeEnum.KK); ((KKLayoutParameters)logicCore.DefaultLayoutAlgorithmParams).MaxIterations = 100; logicCore.DefaultOverlapRemovalAlgorithm = OverlapRemovalAlgorithmTypeEnum.FSA; logicCore.DefaultOverlapRemovalAlgorithmParams = logicCore.AlgorithmFactory.CreateOverlapRemovalParameters(OverlapRemovalAlgorithmTypeEnum.FSA); ((OverlapRemovalParameters)logicCore.DefaultOverlapRemovalAlgorithmParams).HorizontalGap = 50; ((OverlapRemovalParameters)logicCore.DefaultOverlapRemovalAlgorithmParams).VerticalGap = 50; logicCore.DefaultEdgeRoutingAlgorithm = EdgeRoutingAlgorithmTypeEnum.SimpleER; logicCore.AsyncAlgorithmCompute = false; logicCore.EdgeCurvingEnabled = true; this.LogicCore = logicCore; }