private void InitModel(string modelName) { Repo.IModel model = this.repo.Model(modelName); if (model == null) { return; } foreach (var node in model.Nodes) { this.CreateNode(node); } foreach (var edge in model.Edges) { /* var isViolation = Constraints.CheckEdge(edge, this.repo, modelName); */ var sourceNode = edge.From as Repo.INode; var targetNode = edge.To as Repo.INode; if (sourceNode == null || targetNode == null) { // Editor does not support edges linked to edges. Yet. continue; } if (this.dataGraph.Vertices.Count(v => v.Node == sourceNode) == 0 || this.dataGraph.Vertices.Count(v => v.Node == targetNode) == 0) { // Link to an attribute node. TODO: It's ugly. continue; } var source = this.dataGraph.Vertices.First(v => v.Node == sourceNode); var target = this.dataGraph.Vertices.First(v => v.Node == targetNode); var newEdge = new DataEdge(source, target, false) { EdgeType = DataEdge.EdgeTypeEnum.Association }; this.dataGraph.AddEdge(newEdge); this.DrawNewEdge(source.Node, target.Node); } this.DrawGraph(); }
private void CreateEdge(Repo.IEdge edge) { var prevVerVertex = this.prevVer?.Vertex as DataVertex; var ctrlVerVertex = this.ctrlVer?.Vertex as DataVertex; if (prevVerVertex == null || ctrlVerVertex == null) { return; } var newEdge = new DataEdge(prevVerVertex, ctrlVerVertex, true); this.dataGraph.AddEdge(newEdge); this.DrawNewEdge(prevVerVertex.Node, ctrlVerVertex.Node); var ec = new EdgeControl(this.prevVer, this.ctrlVer, newEdge); this.g_Area.InsertEdge(newEdge, ec); }