98 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Drawing;
 | 
						|
using System.Drawing.Drawing2D;
 | 
						|
using DevComponents.Tree.Display;
 | 
						|
 | 
						|
namespace DevComponents.Tree.Display
 | 
						|
{
 | 
						|
	/// <summary>
 | 
						|
	/// Represents the line connector display class.
 | 
						|
	/// </summary>
 | 
						|
	public class LineConnectorDisplay:NodeConnectorDisplay
 | 
						|
	{
 | 
						|
		/// <summary>
 | 
						|
		/// Draws connector line between two nodes.
 | 
						|
		/// </summary>
 | 
						|
		/// <param name="info">Connector context information.</param>
 | 
						|
		public override void DrawConnector(ConnectorRendererEventArgs info)
 | 
						|
		{
 | 
						|
			if(info.NodeConnector.LineColor.IsEmpty || info.NodeConnector.LineWidth<=0)
 | 
						|
				return;
 | 
						|
 | 
						|
			DrawStarConnector(info);
 | 
						|
		}
 | 
						|
 | 
						|
		private void DrawStarConnector(ConnectorRendererEventArgs info)
 | 
						|
		{
 | 
						|
			Point pStart=this.GetStartPoint(info);
 | 
						|
			Point[] parr=this.GetEndPoint(info);
 | 
						|
			Point pEnd=parr[0];
 | 
						|
			Point pEndUnderLine=parr[1];
 | 
						|
 | 
						|
			if(info.ConnectorPoints==null)
 | 
						|
			{
 | 
						|
				// Determine whether curve can be drawn
 | 
						|
				if(Math.Abs(pStart.X-pEnd.X)<=6 || Math.Abs(pStart.Y-pEnd.Y)<=10)
 | 
						|
				{
 | 
						|
					DrawLineConnector(info,pStart,pEnd,pEndUnderLine);
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					Point pBottom=new Point();
 | 
						|
					Point pTop=new Point();
 | 
						|
					if(pEnd.X<pStart.X)
 | 
						|
					{
 | 
						|
						pBottom.X=pStart.X-info.NodeConnector.LineWidth;
 | 
						|
						pTop.X=pEnd.X+1;
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						pBottom.X=pStart.X+info.NodeConnector.LineWidth;
 | 
						|
						pTop.X=pEnd.X-1;
 | 
						|
					}
 | 
						|
					pBottom.Y=pStart.Y;
 | 
						|
					pTop.Y=pEnd.Y;
 | 
						|
 | 
						|
					GraphicsPath path=new GraphicsPath();
 | 
						|
					path.AddLine(pStart,pBottom);
 | 
						|
					path.AddLine(pBottom,pEnd);
 | 
						|
					path.AddLine(pEnd,pTop);
 | 
						|
					path.AddLine(pTop,pStart);
 | 
						|
					path.CloseAllFigures();
 | 
						|
 | 
						|
					using(Brush brush=this.GetLineBrush(info))
 | 
						|
						info.Graphics.FillPath(brush,path);
 | 
						|
				}
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				ConnectorPointInfo pointInfo=GetConnectorPointInfo(info,pStart,pEnd);
 | 
						|
				
 | 
						|
				if(pointInfo.Points2==null)
 | 
						|
				{
 | 
						|
					using(Pen pen=this.GetLinePen(info))
 | 
						|
					{
 | 
						|
						info.Graphics.DrawLines(pen,pointInfo.Points1);
 | 
						|
					}
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					using(GraphicsPath path=new GraphicsPath())
 | 
						|
					{
 | 
						|
						path.AddLines(pointInfo.Points1);
 | 
						|
						path.AddLines(pointInfo.Points2);
 | 
						|
						path.CloseAllFigures();
 | 
						|
 | 
						|
						using(Brush brush=this.GetLineBrush(info))
 | 
						|
						{
 | 
						|
							info.Graphics.FillPath(brush,path);
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			DrawEndLine(info,pStart,pEnd,pEndUnderLine);
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |