internal void UpdateControlPoint()
        {
            GraphController controller = edgeController.GetGraphController();
            Slot            startSlot  = controller.GetSlot(this.StartSlotId) as Slot;
            Slot            endSlot    = controller.GetSlot(this.EndSlotId) as Slot;
            Point           startPoint = startSlot.GetPosition();
            Point           endPoint   = endSlot.GetPosition();

            UpdateControlPoint(startPoint, endPoint, startSlot.SlotType != SlotType.Output);

            this.Dirty = true;
        }
        internal VisualEdge(EdgeController edgeController, uint startSlotId, uint endSlotId, bool isImplicit)
        {
            this.edgeController = edgeController;
            if (isImplicit)
            {
                this.EdgeType = EdgeType.ImplicitConnection;
            }
            else
            {
                this.EdgeType = EdgeType.ExplicitConnection;
            }
            this.version     = VisualEdge.Version.Current;
            this.StartSlotId = startSlotId;
            this.EndSlotId   = endSlotId;

            // Generate new ID for this visual edge.
            GraphController graphController = edgeController.GetGraphController();
            IdGenerator     idGenerator     = graphController.GetIdGenerator();

            this.EdgeId = idGenerator.GetNextId(ComponentType.Edge);

            controlPoints.Add(new Point());
            controlPoints.Add(new Point());
            controlPoints.Add(new Point());
            controlPoints.Add(new Point());

            GraphController controller = edgeController.GetGraphController();
            Slot            startSlot  = controller.GetSlot(this.StartSlotId) as Slot;
            Slot            endSlot    = controller.GetSlot(this.EndSlotId) as Slot;

            if (startSlot != null && endSlot != null)
            {
                Point startPoint = startSlot.GetPosition();
                Point endPoint   = endSlot.GetPosition();
                UpdateControlPoint(startPoint, endPoint, startSlot.SlotType != SlotType.Output);
            }
            else
            {
                throw new ArgumentNullException("startSlot or endSlot");
            }
        }
        public AuditStatus Audit()
        {
            GraphController controller = edgeController.GetGraphController();
            Slot            startSlot  = controller.GetSlot(this.StartSlotId) as Slot;
            Slot            endSlot    = controller.GetSlot(this.EndSlotId) as Slot;

            if (startSlot != null && endSlot != null)
            {
                Point startPoint      = startSlot.GetPosition();
                Point endPoint        = endSlot.GetPosition();
                bool  positionChanged = false;

                if (startSlot.SlotType == SlotType.Output)
                {
                    if (startPoint != controlPoints[0] || endPoint != controlPoints[3])
                    {
                        positionChanged = true;
                    }
                }
                else
                {
                    if (startPoint != controlPoints[3] || endPoint != controlPoints[0])
                    {
                        positionChanged = true;
                    }
                }

                if (positionChanged)
                {
                    UpdateControlPoint(startPoint, endPoint, startSlot.SlotType != SlotType.Output);
                    //this.Dirty = true;
                    //this.Compose();
                    return(AuditStatus.PersistentDataChanged);
                }
            }

            return(AuditStatus.NoChange);
        }