public void CreateEdge(IEdge edge, IElement prevVer, IElement ctrlVer) { _ = prevVer ?? throw new ArgumentNullException(nameof(prevVer)); _ = ctrlVer ?? throw new ArgumentNullException(nameof(prevVer)); var sourceViewModel = this.DataGraph.Vertices.FirstOrDefault(x => x.Node == prevVer); var targetViewModel = this.DataGraph.Vertices.FirstOrDefault(x => x.Node == ctrlVer); _ = sourceViewModel ?? throw new InvalidOperationException(); _ = targetViewModel ?? throw new InvalidOperationException(); var newEdge = new EdgeViewModel(sourceViewModel, targetViewModel, Convert.ToDouble(true)) { Edge = edge }; this.DataGraph.AddEdge(newEdge); var args = new DataEdgeArgs { EdgeViewModel = newEdge }; this.AddNewEdgeControl?.Invoke(this, args); this.ElementAdded?.Invoke(this, new ElementAddedEventArgs { Element = edge }); }
public void CreateEdge(IEdge edge, NodeViewModel prevVer, NodeViewModel ctrlVer) { if (prevVer == null || ctrlVer == null) { return; } var newEdge = new EdgeViewModel(prevVer, ctrlVer, Convert.ToDouble(true)); var args = new DataEdgeArgs { EdgeViewModel = newEdge }; this.AddNewEdgeControl?.Invoke(this, args); this.ElementAdded?.Invoke(this, new ElementAddedEventArgs { Element = edge }); }
// Should be replaced public void InitModel(string modelName) { var model = this.model.Repo.Model(modelName); if (model == null) { return; } foreach (var node in model.Nodes) { this.CreateNodeWithoutPos(node); } foreach (var edge in model.Edges) { /* var isViolation = Constraints.CheckEdge(edgeViewModel, this.repo, modelName); */ var sourceNode = edge.From as INode; var targetNode = edge.To as 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 EdgeViewModel(source, target, Convert.ToDouble(false)) { Edge = edge, EdgeType = EdgeViewModel.EdgeTypeEnum.Association }; var attributeInfos = edge.Attributes.Select(x => new AttributeViewModel(x, x.Name, x.Kind.ToString()) { Value = x.StringValue }); var attributes = attributeInfos as IList <AttributeViewModel> ?? attributeInfos.ToList(); attributes.ForEach(x => newEdge.Attributes.Add(x)); var value = attributes.SingleOrDefault(x => x.Name == "Value"); if (value != null) { newEdge.EdgeType = EdgeViewModel.EdgeTypeEnum.Attribute; newEdge.Text = value.Value; } this.DataGraph.AddEdge(newEdge); var args = new DataEdgeArgs { EdgeViewModel = newEdge }; this.AddNewEdgeControlWithoutVCP?.Invoke(this, args); this.ElementAdded?.Invoke(this, new ElementAddedEventArgs { Element = edge }); } this.RelayoutGraph?.Invoke(this, EventArgs.Empty); this.ZoomToFill?.Invoke(this, EventArgs.Empty); if (modelName == "GreenhouseTestModel") { this.AddVertexConnectionPoints?.Invoke(this, EventArgs.Empty); } }