public PointF GetTextBoxSide(Point textboxIndex, TextBoxSides side) { PointF returnPoint = new PointF(); if (side == TextBoxSides.TopLeft || side == TextBoxSides.TopMiddle || side == TextBoxSides.TopRight) { returnPoint.Y = textboxes[textboxIndex.X, textboxIndex.Y].Top; } else if (side == TextBoxSides.RightMiddle || side == TextBoxSides.LeftMiddle) { returnPoint.Y = textboxes[textboxIndex.X, textboxIndex.Y].Location.Y + textboxes[textboxIndex.X, textboxIndex.Y].Size.Height / 2; } else { returnPoint.Y = textboxes[textboxIndex.X, textboxIndex.Y].Bottom; } if (side == TextBoxSides.BottomRight || side == TextBoxSides.RightMiddle || side == TextBoxSides.TopRight) { returnPoint.X = textboxes[textboxIndex.X, textboxIndex.Y].Right; } else if (side == TextBoxSides.TopMiddle || side == TextBoxSides.BottomMiddle) { returnPoint.X = textboxes[textboxIndex.X, textboxIndex.Y].Location.X + textboxes[textboxIndex.X, textboxIndex.Y].Size.Width / 2; } else { returnPoint.X = textboxes[textboxIndex.X, textboxIndex.Y].Left; } return(returnPoint); }
public TextBoxSides OppositeSide(TextBoxSides side) { switch (side) { case (TextBoxSides.TopLeft): return(TextBoxSides.BottomRight); case (TextBoxSides.TopMiddle): return(TextBoxSides.BottomMiddle); case (TextBoxSides.TopRight): return(TextBoxSides.BottomLeft); case (TextBoxSides.RightMiddle): return(TextBoxSides.LeftMiddle); case (TextBoxSides.BottomRight): return(TextBoxSides.TopLeft); case (TextBoxSides.BottomMiddle): return(TextBoxSides.TopMiddle); case (TextBoxSides.BottomLeft): return(TextBoxSides.TopRight); default: return(TextBoxSides.RightMiddle); } }
public void ShowTextBoxPath(Node <Point> textboxNode, Color color, Pen pen) { textboxes[textboxNode.Value.X, textboxNode.Value.Y].BackColor = color; if (textboxNode.Children.Count > 0) { TextBoxSides connectingSide = OnWhatSide(textboxNode.Value, textboxNode.Children[0].Value); TextBoxSides oppositeSide = OppositeSide(connectingSide); PointF thisSide = GetTextBoxSide(textboxNode.Value, connectingSide); PointF otherSide = GetTextBoxSide(textboxNode.Children[0].Value, oppositeSide); Pen p = new Pen(pen.Color); p.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor; gfx.DrawLine(p, thisSide, otherSide); ShowTextBoxPath(textboxNode.Children[0], color, pen); } }