public void GenerateGraph(List <ClassificationConcept> concepts) { if (concepts == null || concepts.Count == 0) { return; } var conceptGraph = new ConceptGraph(); var vertecies = concepts.Select(c => new ConceptVertex(c)).ToList(); conceptGraph.AddVertexRange(vertecies); foreach (var vertex in vertecies) { var parent = vertex.FindConceptParent(vertecies); if (parent != null) { conceptGraph.AddEdge(new ConceptEdge(parent, vertex)); } } if (conceptGraph.Edges.Count() == 0) { LayoutAlgorithmType = "LinLog"; } else { LayoutAlgorithmType = "EfficientSugiyama"; } Graph = conceptGraph; }
private void LoadConcepts() { var currentAssembly = Assembly.GetExecutingAssembly(); var resourceName = "MathIO.Source.Concepts.json"; using (Stream stream = currentAssembly.GetManifestResourceStream(resourceName)) using (var file = new StreamReader(stream)) using (var reader = new JsonTextReader(file)) { var jArray = (JArray)JToken.ReadFrom(reader); foreach (JToken jt in jArray) { var jo = jt as JObject; Debug.Assert(jo != null); var concept = (string)jo.GetValue("concept"); var topic = (string)jo.GetValue("topic"); var ignore = (bool)jo.GetValue("ignore"); if (ignore) { continue; } var isError = (bool)jo.GetValue("isError"); var conceptNode = new ConceptNode(concept, topic, isError); if (!ConceptGraph.ContainsVertex(conceptNode)) { ConceptGraph.AddVertex(conceptNode); } var dependencies = jo.GetValue("dependencies") as JArray; if (dependencies == null) { continue; } foreach (JToken dependToken in dependencies) { var dependentConcept = (string)dependToken; if (dependentConcept == null) { continue; } ConceptNode cn = ConceptGraph.SearchConceptNode(dependentConcept); if (cn == null) { cn = new ConceptNode(dependentConcept); ConceptGraph.AddVertex(cn); } ConceptGraph.AddEdge(new Edge <ConceptNode>(cn, conceptNode)); } } } }