public override void Layout(PDE.ToolFramework.Modeling.Diagrams.FixedGeometryPoints fixedPoints)
        {
            RectangleD sourceBounds = this.SourceAnchor.FromShape.AbsoluteBounds;
            this.SetStartPoint(new PointD(sourceBounds.Center.X, sourceBounds.Bottom + 10));

            RectangleD targetBounds = this.TargetAnchor.ToShape.AbsoluteBounds;
            this.SetEndPoint(new PointD(targetBounds.Center.X, targetBounds.Top - 10));

            this.UpdateLinkPlacement();

            base.Layout(FixedGeometryPoints.SourceAndTarget);
        }
        /*
        protected override void Initialize()
        {
            base.Initialize();
        }

        protected override void OnUndoCommandExecuted()
        {
            base.OnUndoCommandExecuted();

            //this.Layout();
        }

        protected override void OnRedoCommandExecuted()
        {
            base.OnRedoCommandExecuted();

            //this.Layout();
        }

        private void Layout()
        {
            if (this.Store.InUndoRedoOrRollback)
            {
                return;
            }

            // disable undo manager
            this.Store.UndoManager.UndoState = UndoState.DisabledNoFlush;

            // create transation to apply layout information
            using (Transaction t = this.Store.TransactionManager.BeginTransaction("Layout"))
            {
                // layout diagram    
                DiagramLayouter.Layout(this.Diagram);

                t.Commit();
            }

            // enable undo manager
            this.Store.UndoManager.UndoState = UndoState.Enabled;
        }

        public override void OnChildShapeElementAdded(Microsoft.VisualStudio.Modeling.ElementAddedEventArgs args)
        {
            base.OnChildShapeElementAdded(args);

            this.Layout();
        }

        public override void OnChildShapeElementRemoved(ElementDeletedEventArgs args)
        {
            base.OnChildShapeElementRemoved(args);

            this.Layout();
        }

        public override void OnLinkShapeElementAdded(ElementAddedEventArgs args)
        {
            base.OnLinkShapeElementAdded(args);

            this.Layout();
        }

        public override void OnLinkShapeElementRemoved(ElementDeletedEventArgs args)
        {
            base.OnLinkShapeElementRemoved(args);

            this.Layout();
        }

        */

        protected override bool CanCreateRelationshipShapeMarriedToShape(PDE.ToolFramework.Modeling.Visualization.ViewModel.DiagramSurface.ViewModelRelationshipCreationInfo info)
        {
            FamilyTreePerson source = info.Source.Element as global::Tum.FamilyTreeDSL.FamilyTreePerson;
            FamilyTreePerson target = info.Target.Element as global::Tum.FamilyTreeDSL.FamilyTreePerson;

            if (source == null || target == null)
                return false;

            if (source.Husband != null || source.Wife != null)
                return false;

            if (target.Husband != null || target.Wife != null)
                return false;

            if (source == target)
                return false;

            return base.CanCreateRelationshipShapeMarriedToShape(info);
        }