public static LinkDirection GetClosestDirectionPoints(LinkDrawing linkDrawing) { ILinkableDrawing destinationDrawing = linkDrawing.DestinationDrawing; ILinkableDrawing sourceDrawing = linkDrawing.SourceDrawing; CardinalDirection[] directionsArray = new CardinalDirection[] { CardinalDirection.North, CardinalDirection.South, CardinalDirection.West, CardinalDirection.East }; List<CardinalDirection> directions = new List<CardinalDirection>(directionsArray); CardinalDirection from = CardinalDirection.None; CardinalDirection to = CardinalDirection.None; if (destinationDrawing.LinkAttachMode == LinkAttachMode.LEFT_RIGHT) { if (destinationDrawing.Location.X > sourceDrawing.Location.X + sourceDrawing.Size.Width / 2) { to = CardinalDirection.West; } else { to = CardinalDirection.East; } } else if (destinationDrawing.LinkAttachMode == LinkAttachMode.ALL) { if (destinationDrawing.Location.Y > sourceDrawing.Location.Y + sourceDrawing.Size.Height) { to = CardinalDirection.South; } else if (destinationDrawing.Location.Y + destinationDrawing.Size.Height < sourceDrawing.Location.Y) { to = CardinalDirection.North; } else if (destinationDrawing.Location.X > sourceDrawing.Location.X + sourceDrawing.Size.Width) { to = CardinalDirection.East; } else if (destinationDrawing.Location.X + destinationDrawing.Size.Width < sourceDrawing.Location.X) { to = CardinalDirection.West; } } if (sourceDrawing.LinkAttachMode == LinkAttachMode.ALL) { if (sourceDrawing.Location.Y > destinationDrawing.Location.Y + destinationDrawing.Size.Height) { from = CardinalDirection.South; } else if (sourceDrawing.Location.Y + sourceDrawing.Size.Height < destinationDrawing.Location.Y) { from = CardinalDirection.North; } else if (sourceDrawing.Location.X > destinationDrawing.Location.X + destinationDrawing.Size.Width) { from = CardinalDirection.East; } else if (sourceDrawing.Location.X + sourceDrawing.Size.Width < destinationDrawing.Location.X) { from = CardinalDirection.West; } } else if (sourceDrawing.LinkAttachMode == LinkAttachMode.LEFT_RIGHT) { if (sourceDrawing.Location.X > destinationDrawing.Location.X + destinationDrawing.Size.Width / 2) { from = CardinalDirection.East; } else { from = CardinalDirection.West; } } return new LinkDirection(from, to); }
Rectangle getLinkInvalidatedRegion(LinkDrawing linkDrawing) { MergeableRectangle rectangle = new MergeableRectangle(linkDrawing.Bounds); linkDrawing.Invalidated = true; ILinkableDrawing sourceDrawing = linkDrawing.SourceDrawing; ILinkableDrawing destinationDrawing = linkDrawing.DestinationDrawing; sourceDrawing.Invalidated = true; destinationDrawing.Invalidated = true; rectangle.Merge(sourceDrawing.InvalidatedRegion); rectangle.Merge(sourceDrawing.InvalidatedRegion); foreach (IDrawing drawing in containerDrawer.Drawings) { if (drawing.Bounds.IntersectsWith(rectangle.Bounds)) { drawing.Invalidated = true; rectangle.Merge(drawing.Bounds); } } return rectangle.Bounds; }
public LinkDrawing CreateLink(ILink link, int lineWidth, int selectedLineWidth, LinkStyle linkStyle) { LinkDrawing linkDrawing = new LinkDrawing(link, lineWidth, selectedLineWidth, linkStyle); return linkDrawing; }
private void OnLinkDirectionChanged(LinkDrawing link, LinkDirection previousDirection, LinkDirection newDirection) { IDrawing sourceDrawing = link.SourceDrawing; IDrawing destinationDrawing = link.DestinationDrawing; link.Invalidated = true; NSWEDrawing source = virtualMapping[sourceDrawing]; NSWEDrawing destination = virtualMapping[destinationDrawing]; switch (previousDirection.From) { case CardinalDirection.None: source.LinkPointsNone.Remove(link.SourcePoint); source.LinksNone.Remove(link); break; case CardinalDirection.North: source.LinkPointsSouth.Remove(link.SourcePoint); source.LinksSouth.Remove(link); break; case CardinalDirection.South: source.LinkPointsNorth.Remove(link.SourcePoint); source.LinksNorth.Remove(link); break; case CardinalDirection.West: source.LinkPointsEast.Remove(link.SourcePoint); source.LinksEast.Remove(link); break; case CardinalDirection.East: source.LinkPointsWest.Remove(link.SourcePoint); source.LinksWest.Remove(link); break; } switch (previousDirection.To) { case CardinalDirection.None: destination.LinkPointsNone.Remove(link.DestinationPoint); destination.LinksNone.Remove(link); break; case CardinalDirection.South: destination.LinkPointsNorth.Remove(link.DestinationPoint); destination.LinksNorth.Remove(link); break; case CardinalDirection.North: destination.LinkPointsSouth.Remove(link.DestinationPoint); destination.LinksSouth.Remove(link); break; case CardinalDirection.East: destination.LinkPointsWest.Remove(link.DestinationPoint); destination.LinksWest.Remove(link); break; case CardinalDirection.West: destination.LinkPointsEast.Remove(link.DestinationPoint); destination.LinksEast.Remove(link); break; } switch (newDirection.From) { case CardinalDirection.None: source.LinkPointsNone.Add(link.SourcePoint); source.LinksNone.Add(link); break; case CardinalDirection.North: source.LinkPointsSouth.Add(link.SourcePoint); source.LinksSouth.Add(link); break; case CardinalDirection.South: source.LinkPointsNorth.Add(link.SourcePoint); source.LinksNorth.Add(link); break; case CardinalDirection.West: source.LinkPointsEast.Add(link.SourcePoint); source.LinksEast.Add(link); break; case CardinalDirection.East: source.LinkPointsWest.Add(link.SourcePoint); source.LinksWest.Add(link); break; } switch (newDirection.To) { case CardinalDirection.None: destination.LinkPointsNone.Add(link.DestinationPoint); destination.LinksNone.Add(link); break; case CardinalDirection.North: destination.LinkPointsSouth.Add(link.DestinationPoint); destination.LinksSouth.Add(link); break; case CardinalDirection.South: destination.LinkPointsNorth.Add(link.DestinationPoint); destination.LinksNorth.Add(link); break; case CardinalDirection.West: destination.LinkPointsEast.Add(link.DestinationPoint); destination.LinksEast.Add(link); break; case CardinalDirection.East: destination.LinkPointsWest.Add(link.DestinationPoint); destination.LinksWest.Add(link); break; } if (this.LinkDirectionChangedEvent != null) LinkDirectionChangedEvent(link, new LinkDirectionChangedArg(link, newDirection, link.Direction)); }
public void RegisterLink(LinkDrawing link) { NSWEDrawing nsweDestination = registerDrawing(link.DestinationDrawing); NSWEDrawing nsweSource = registerDrawing(link.SourceDrawing); nsweSource.OutputLinkList.Add(link); nsweDestination.InputLinkList.Add(link); nsweSource.Links.Add(link); nsweDestination.Links.Add(link); }
public void AddLinkDrawing(ILinkableDrawing source, ILinkableDrawing destination) { LinkDrawing linkDrawing = new LinkDrawing(source, destination, 1.0f, 3.0f, LinkStyle.StreightLines); ContainerDrawer.LinkOrchestrator.AddLinkDrawing(linkDrawing); }
public static Point[] GetLinePoints(LinkDrawing linkDrawing) { Point[] points = { linkDrawing.SourcePoint.Location, linkDrawing.DestinationPoint.Location }; if (AreOpposite(linkDrawing.Direction.From, linkDrawing.Direction.To)) { if (linkDrawing.Direction.From == CardinalDirection.South || linkDrawing.Direction.From == CardinalDirection.North) { Point p1 = new Point(linkDrawing.DestinationPoint.X, (linkDrawing.DestinationPoint.Y + linkDrawing.SourcePoint.Y) / 2); Point p2 = new Point(linkDrawing.SourcePoint.X, (linkDrawing.DestinationPoint.Y + linkDrawing.SourcePoint.Y) / 2); return new Point[] { linkDrawing.DestinationPoint.Location, p1, p2, linkDrawing.SourcePoint.Location }; } else { Point p1 = new Point((linkDrawing.DestinationPoint.X + linkDrawing.SourcePoint.X) / 2, linkDrawing.DestinationPoint.Y); Point p2 = new Point((linkDrawing.DestinationPoint.X + linkDrawing.SourcePoint.X) / 2, linkDrawing.SourcePoint.Y); return new Point[] { linkDrawing.DestinationPoint.Location, p1, p2, linkDrawing.SourcePoint.Location }; } } if (AreOrthogonal(linkDrawing.Direction.From, linkDrawing.Direction.To)) { Point p1 = new Point(); if (linkDrawing.Direction.From == CardinalDirection.West || linkDrawing.Direction.From == CardinalDirection.East) { p1 = new Point(linkDrawing.DestinationPoint.X, linkDrawing.SourcePoint.Y); } else if (linkDrawing.Direction.To == CardinalDirection.West || linkDrawing.Direction.To == CardinalDirection.East) { p1 = new Point(linkDrawing.SourcePoint.X, linkDrawing.DestinationPoint.Y); } return new Point[] { linkDrawing.SourcePoint.Location, p1, linkDrawing.DestinationPoint.Location }; } return points; }
public LinkPoint(LinkDrawing linkDrawing) { this.linkDrawing = linkDrawing; }
void InvalidateLinkDrawing(LinkDrawing linkDrawing) { MergeableRectangle newRectangleToInvalidate = new MergeableRectangle(linkDrawing.Bounds); newRectangleToInvalidate.Merge(getLinkInvalidatedRegion(linkDrawing)); newRectangleToInvalidate.Merge( getStructureInvalidatedRegion(linkDrawing.SourceDrawing)); newRectangleToInvalidate.Merge( getStructureInvalidatedRegion(linkDrawing.DestinationDrawing)); Rectangle auxRectangle = newRectangleToInvalidate.Bounds; invalidateOverlappingDrawings(previouslyInvalidatedRectangle); newRectangleToInvalidate.Merge(previouslyInvalidatedRectangle); invalidateOverlappingDrawings(newRectangleToInvalidate.Bounds); previouslyInvalidatedRectangle = auxRectangle; int scaleFactor = containerDrawer.DiagramContainer.ZoomFactor / 100; Rectangle r = new Rectangle(newRectangleToInvalidate.Bounds.X * scaleFactor, newRectangleToInvalidate.Bounds.Y * scaleFactor, newRectangleToInvalidate.Bounds.Width * scaleFactor, newRectangleToInvalidate.Bounds.Height * scaleFactor); containerDrawer.DiagramContainer.Invalidate(r); previouslyInvalidatedRectangle = newRectangleToInvalidate.Bounds; }
public void AddLinkDrawing(LinkDrawing linkDrawing) { RegisterLink(linkDrawing); }
private void RegisterLink(LinkDrawing linkDrawing) { ILinkableDrawing sourceDrawing = linkDrawing.SourceDrawing; ILinkableDrawing destinationDrawing = linkDrawing.DestinationDrawing; sourceDrawing.DrawingLinks.Add(linkDrawing); destinationDrawing.DrawingLinks.Add(linkDrawing); containerDrawer.Drawings.Insert(0, linkDrawing); linkStrategy.RegisterLink(linkDrawing); links.Add(linkDrawing); linkStrategy.DirectLinks(sourceDrawing); linkStrategy.DirectLinks(destinationDrawing); }
public CardinalLinkPoint(LinkDrawing linkDrawing) : base(linkDrawing) { this.direction = CardinalDirection.None; }
public LinkDirectionChangedArg(LinkDrawing link, LinkDirection newDirection, LinkDirection prevDirection) { this.link = link; this.newDirection = newDirection; this.prevDirection = prevDirection; }