示例#1
0
文件: Graph.cs 项目: MrsSima/REAL.NET
        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
            });
        }
示例#2
0
文件: Graph.cs 项目: forki/REAL.NET
        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
            });
        }
示例#3
0
        // 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);
            }
        }