Пример #1
0
        /// <summary>
        /// Split and adding the connector when symbol is dragged form Stencil and dropped over connector
        /// </summary>
        /// <param name="param">
        /// </param>
        private void OnSymbolDropCommandExecute(object param)
        {
            IEnumerable <object> targetCollection = (param as ItemDropEventArgs).Target as IEnumerable <object>;

            if (targetCollection != null)
            {
                ConnectorVM newConnector = new ConnectorVM {
                    SourceNode = (param as ItemDropEventArgs).Source
                };
                foreach (object target in targetCollection)
                {
                    if (target is IConnector)
                    {
                        if ((target as ConnectorVM).TargetNode != null)
                        {
                            newConnector.TargetNode = (target as ConnectorVM).TargetNode;
                            (this.Connectors as ObservableCollection <ConnectorVM>).Add(newConnector);
                        }

                        (target as ConnectorVM).TargetNode = (param as ItemDropEventArgs).Source;
                        return;
                    }
                }
            }
        }
Пример #2
0
        /// <summary>
        /// To add connectors when node is dragging and on diagram page and placed over Connector
        /// </summary>
        /// <param name="param">
        /// value of NodeChangedEventArgs
        /// </param>
        private void OnNodeChangedCommandExecute(object param)
        {
            if ((param as DiagramEventArgs).Item is NodeVM)
            {
                this.FindQuickCommandVisibility(param as DiagramEventArgs);
            }

            // Enables the allow drop constraints when node/Connector intersectes.
            ObservableCollection <ConnectorVM> ConnectorsCollections =
                this.Connectors as ObservableCollection <ConnectorVM>;
            ObservableCollection <NodeVM> NodesCollections = this.Nodes as ObservableCollection <NodeVM>;

            // To split and add the connectors when exisiting node is dropped on connector.
            if ((param as ChangeEventArgs <object, NodeChangedEventArgs>).NewValue.InteractionState
                == NodeChangedInteractionState.Dragged)
            {
                Rect nodeBounds = new Rect(0, 0, 0, 0);
                if ((((param as DiagramEventArgs).Item as NodeVM).Info as INodeInfo).InOutConnectors == null)
                {
                    nodeBounds = (((param as DiagramEventArgs).Item as NodeVM).Info as INodeInfo).Bounds;
                    ObservableCollection <ConnectorVM> ConnectorCollection =
                        this.Connectors as ObservableCollection <ConnectorVM>;
                    if (ConnectorCollection.Count > 0)
                    {
                        foreach (ConnectorVM connector in ConnectorCollection)
                        {
                            Rect Connectorbounds = (connector.Info as IConnectorInfo).Bounds;
                            if (nodeBounds.IntersectsWith(Connectorbounds))
                            {
                                ConnectorVM newConnector = new ConnectorVM
                                {
                                    SourceNode = (param as DiagramEventArgs).Item,
                                    TargetNode = connector.TargetNode
                                };
                                connector.TargetNode = (param as DiagramEventArgs).Item;
                                (this.Connectors as ObservableCollection <ConnectorVM>).Add(newConnector);
                                break;
                            }
                        }
                    }
                }
            }
        }
Пример #3
0
 public void ConnectorCreate(ConnectorVM connectorVM)
 {
     Connector connector = new Connector();
 }
Пример #4
0
        /// <summary>
        /// This command executes when an item gets deleted.
        /// </summary>
        /// <param name="param">
        /// The param.
        /// </param>
        private void ItemDeletingCommandExecute(object param)
        {
            int val = ((this.SelectedItems as FlowChartSelectorVm).Connectors as IEnumerable <object>).Count();

            if (val == 0)
            {
                NodeVM deletingNode = (param as ItemDeletingEventArgs).Item as NodeVM;

                if ((param as ItemDeletingEventArgs).Item is NodeVM &&
                    (deletingNode.Info as INodeInfo).InConnectors != null &&
                    (deletingNode.Info as INodeInfo).OutConnectors != null)
                {
                    if ((deletingNode.Info as INodeInfo).InConnectors.Count() > 1 &&
                        (deletingNode.Info as INodeInfo).OutConnectors.Count() > 1 ||
                        (deletingNode.Info as INodeInfo).InConnectors.Count() == 1 &&
                        (deletingNode.Info as INodeInfo).OutConnectors.Count() == 0 ||
                        (deletingNode.Info as INodeInfo).InConnectors.Count() == 0 &&
                        (deletingNode.Info as INodeInfo).OutConnectors.Count() == 1 ||
                        (deletingNode.Info as INodeInfo).InConnectors.Count() == 0 &&
                        (deletingNode.Info as INodeInfo).OutConnectors.Count() > 1 ||
                        (deletingNode.Info as INodeInfo).InConnectors.Count() > 1 &&
                        (deletingNode.Info as INodeInfo).OutConnectors.Count() == 0)
                    {
                        (param as ItemDeletingEventArgs).DeleteDependentConnector = true;
                    }
                    else
                    {
                        (param as ItemDeletingEventArgs).DeleteDependentConnector = false;

                        if ((deletingNode.Info as INodeInfo).InConnectors.Count() == 1 &&
                            (deletingNode.Info as INodeInfo).OutConnectors.Count() == 1)
                        {
                            NodeVM      newtargetNode = null;
                            ConnectorVM outconnector  =
                                (deletingNode.Info as INodeInfo).OutConnectors.ToList()[0] as ConnectorVM;
                            newtargetNode = outconnector.TargetNode as NodeVM;
                            this.ConnectorCollection.Remove(outconnector);

                            ConnectorVM inconnector =
                                (deletingNode.Info as INodeInfo).InConnectors.ToList()[0] as ConnectorVM;
                            inconnector.TargetNode = newtargetNode;

                            if (inconnector.SourceNode == inconnector.TargetNode)
                            {
                                this.ConnectorCollection.Remove(inconnector);
                            }
                        }
                        else if ((deletingNode.Info as INodeInfo).InConnectors.Count() > 1 &&
                                 (deletingNode.Info as INodeInfo).OutConnectors.Count() == 1)
                        {
                            NodeVM      newtargetNode = null;
                            ConnectorVM outconnector  =
                                (deletingNode.Info as INodeInfo).OutConnectors.ToList()[0] as ConnectorVM;
                            newtargetNode = outconnector.TargetNode as NodeVM;
                            this.ConnectorCollection.Remove(outconnector);

                            IEnumerable <IConnector> inConnectorsCollction =
                                (deletingNode.Info as INodeInfo).InConnectors;
                            foreach (ConnectorVM connector in inConnectorsCollction.ToList())
                            {
                                connector.TargetNode = newtargetNode;
                            }
                        }
                        else if ((deletingNode.Info as INodeInfo).InConnectors.Count() == 1 &&
                                 (deletingNode.Info as INodeInfo).OutConnectors.Count() > 1)
                        {
                            NodeVM      newtargetNode = null;
                            ConnectorVM inconnector   =
                                (deletingNode.Info as INodeInfo).InConnectors.ToList()[0] as ConnectorVM;
                            newtargetNode = inconnector.SourceNode as NodeVM;
                            this.ConnectorCollection.Remove(inconnector);

                            IEnumerable <IConnector> outConnectorsCollection =
                                (deletingNode.Info as INodeInfo).OutConnectors;
                            foreach (ConnectorVM connector in outConnectorsCollection.ToList())
                            {
                                connector.SourceNode = newtargetNode;
                            }
                        }
                    }
                }
            }
        }
Пример #5
0
        /// <summary>
        /// Command for adding shapes into diagram
        /// </summary>
        /// <param name="param"> Name of the shape</param>
        void OnAddShapesCommand(object param)
        {
            ConnectorVM connector = new ConnectorVM()
            {
            };

            var    nodescollection = Diagram.Nodes as ObservableCollection <NodeVM>;
            NodeVM selectedNode    = (this.Nodes as ObservableCollection <object>).First() as NodeVM;

            if (selectedNode != null)
            {
                Rect selectedNodeBounds = (selectedNode.Info as INodeInfo).Bounds;
                if (PanelDirection == "Right")
                {
                    offsetx = selectedNodeBounds.Right + 100;
                    offsety = selectedNode.OffsetY;
                }
                else if (PanelDirection == "Left")
                {
                    offsetx = selectedNodeBounds.Left - 100;
                    offsety = selectedNode.OffsetY;
                }
                else if (PanelDirection == "Top")
                {
                    offsetx = selectedNode.OffsetX;
                    offsety = selectedNodeBounds.Top - 75;
                }
                else if (PanelDirection == "Bottom")
                {
                    offsetx = selectedNode.OffsetX;
                    offsety = selectedNodeBounds.Bottom + 75;
                }
                connector.SourceNode    = selectedNode;
                selectedNode.IsSelected = false;
            }


            NodeVM node = new NodeVM()
            {
                OffsetX = offsetx,
                OffsetY = offsety,
                Shape   = App.Current.Resources[param],
            };

            if (param.ToString().Equals("Process") || param.ToString().Equals("Decision") || param.ToString().Equals("MultiDocument") ||
                param.ToString().Equals("Terminator") || param.ToString().Equals("Sort") || param.ToString().Equals("Document") ||
                param.ToString().Equals("DirectData") || param.ToString().Equals("ManualOperation") || param.ToString().Equals("InternalStorage") ||
                param.ToString().Equals("Card") || param.ToString().Equals("PredefinedProcess") || param.ToString().Equals("Or"))
            {
                if (param.ToString().Equals("Terminator"))
                {
                    node.UnitHeight = 37;
                    node.UnitWidth  = 94;
                }
                else if (param.ToString().Equals("Or"))
                {
                    node.UnitHeight = 75;
                    node.UnitWidth  = 75;
                }
                else
                {
                    node.UnitHeight = 56;
                    node.UnitWidth  = 94;
                }

                if (param.ToString().Equals("MultiDocument") || param.ToString().Equals("Document"))
                {
                    node.Ports = new DiagramBuilder.ViewModel.PortCollection()
                    {
                        new NodePortVM()
                        {
                            NodeOffsetX = 0,
                            NodeOffsetY = 0.5,
                            Shape       = App.Current.Resources["Rectangle"],
                            ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                        },
                        new NodePortVM()
                        {
                            NodeOffsetX = 0.5,
                            NodeOffsetY = 0,
                            Shape       = App.Current.Resources["Rectangle"],
                            ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                        },
                        new NodePortVM()
                        {
                            NodeOffsetX = 1,
                            NodeOffsetY = 0.5,
                            Shape       = App.Current.Resources["Rectangle"],
                            ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                        },
                        new NodePortVM()
                        {
                            NodeOffsetX = 0.5,
                            NodeOffsetY = 0.9,
                            Shape       = App.Current.Resources["Rectangle"],
                            ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                        },
                    };
                }
                else if (param.ToString().Equals("ManualOperation"))
                {
                    node.Ports = new DiagramBuilder.ViewModel.PortCollection()
                    {
                        new NodePortVM()
                        {
                            NodeOffsetX = 0.1,
                            NodeOffsetY = 0.5,
                            Shape       = App.Current.Resources["Rectangle"],
                            ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                        },
                        new NodePortVM()
                        {
                            NodeOffsetX = 0.5,
                            NodeOffsetY = 0,
                            Shape       = App.Current.Resources["Rectangle"],
                            ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                        },
                        new NodePortVM()
                        {
                            NodeOffsetX = 0.9,
                            NodeOffsetY = 0.5,
                            Shape       = App.Current.Resources["Rectangle"],
                            ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                        },
                        new NodePortVM()
                        {
                            NodeOffsetX = 0.5,
                            NodeOffsetY = 1,
                            Shape       = App.Current.Resources["Rectangle"],
                            ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                        },
                    };
                }
                else
                {
                    node.Ports = new DiagramBuilder.ViewModel.PortCollection()
                    {
                        new NodePortVM()
                        {
                            NodeOffsetX = 0,
                            NodeOffsetY = 0.5,
                            Shape       = App.Current.Resources["Rectangle"],
                            ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                        },
                        new NodePortVM()
                        {
                            NodeOffsetX = 0.5,
                            NodeOffsetY = 0,
                            Shape       = App.Current.Resources["Rectangle"],
                            ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                        },
                        new NodePortVM()
                        {
                            NodeOffsetX = 1,
                            NodeOffsetY = 0.5,
                            Shape       = App.Current.Resources["Rectangle"],
                            ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                        },
                        new NodePortVM()
                        {
                            NodeOffsetX = 0.5,
                            NodeOffsetY = 1,
                            Shape       = App.Current.Resources["Rectangle"],
                            ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                        },
                    };
                }
            }
            else if (param.ToString().Equals("SequentialData") || param.ToString().Equals("SequentialAccessStorage"))
            {
                node.UnitHeight = 95;
                node.UnitWidth  = 95;
                node.Ports      = new DiagramBuilder.ViewModel.PortCollection()
                {
                    new NodePortVM()
                    {
                        NodeOffsetX = 0,
                        NodeOffsetY = 0.5,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.5,
                        NodeOffsetY = 0,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.95,
                        NodeOffsetY = 0.5,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.5,
                        NodeOffsetY = 1,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 1,
                        NodeOffsetY = 1,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                };
            }
            else if (param.ToString().Equals("Collate"))
            {
                node.UnitHeight = 75;
                node.UnitWidth  = 75;
                node.Ports      = new DiagramBuilder.ViewModel.PortCollection()
                {
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.5,
                        NodeOffsetY = 0,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.5,
                        NodeOffsetY = 0.5,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.5,
                        NodeOffsetY = 1,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                };
            }
            else if (param.ToString().Equals("SummingJunction"))
            {
                node.UnitHeight = 75;
                node.UnitWidth  = 75;
                node.Ports      = new DiagramBuilder.ViewModel.PortCollection()
                {
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.5,
                        NodeOffsetY = 0,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0,
                        NodeOffsetY = 0.5,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 1,
                        NodeOffsetY = 0.5,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.5,
                        NodeOffsetY = 1,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.15,
                        NodeOffsetY = 0.15,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.85,
                        NodeOffsetY = 0.15,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.15,
                        NodeOffsetY = 0.85,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.85,
                        NodeOffsetY = 0.85,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                };
            }
            else if (param.ToString().Equals("Extract") || param.ToString().Equals("Merge"))
            {
                node.UnitHeight = 75;
                node.UnitWidth  = 75;
                node.Ports      = new DiagramBuilder.ViewModel.PortCollection()
                {
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.5,
                        NodeOffsetY = 0,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.5,
                        NodeOffsetY = 1,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.25,
                        NodeOffsetY = 0.5,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.75,
                        NodeOffsetY = 0.5,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                };
            }
            else if (param.ToString().Equals("OffPageReference"))
            {
                node.UnitHeight = 45;
                node.UnitWidth  = 45;
                node.Ports      = new DiagramBuilder.ViewModel.PortCollection()
                {
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.5,
                        NodeOffsetY = 0,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.5,
                        NodeOffsetY = 1,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0,
                        NodeOffsetY = 0.7,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 1,
                        NodeOffsetY = 0.7,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                };
            }
            else if (param.ToString().Equals("StoredData"))
            {
                node.UnitHeight = 56;
                node.UnitWidth  = 95;
                node.Ports      = new DiagramBuilder.ViewModel.PortCollection()
                {
                    new NodePortVM()
                    {
                        NodeOffsetX = 0,
                        NodeOffsetY = 0.5,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.5,
                        NodeOffsetY = 0,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.9,
                        NodeOffsetY = 0.5,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.5,
                        NodeOffsetY = 1,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                };
            }
            else if (param.ToString().Equals("Data"))
            {
                node.UnitHeight = 56;
                node.UnitWidth  = 95;
                node.Ports      = new DiagramBuilder.ViewModel.PortCollection()
                {
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.1,
                        NodeOffsetY = 0.5,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.5,
                        NodeOffsetY = 0,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.9,
                        NodeOffsetY = 0.5,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.5,
                        NodeOffsetY = 1,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                };
            }
            else if (param.ToString().Equals("ManualInput"))
            {
                node.UnitHeight = 56;
                node.UnitWidth  = 95;
                node.Ports      = new DiagramBuilder.ViewModel.PortCollection()
                {
                    new NodePortVM()
                    {
                        NodeOffsetX = 0,
                        NodeOffsetY = 0.5,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.5,
                        NodeOffsetY = 0.2,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 1,
                        NodeOffsetY = 0.5,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                    new NodePortVM()
                    {
                        NodeOffsetX = 0.5,
                        NodeOffsetY = 1,
                        Shape       = App.Current.Resources["Rectangle"],
                        ShapeStyle  = App.Current.Resources["portShapeStyle"] as Style,
                    },
                };
            }

            connector.Constraints |= ConnectorConstraints.AllowDrop;
            node.Constraints      |= NodeConstraints.AllowDrop;
            (Diagram.Nodes as ObservableCollection <NodeVM>).Add(node);
            connector.TargetNode = node;
            (Diagram.Connectors as ObservableCollection <ConnectorVM>).Add(connector);
            node.IsSelected = true;
        }