参考如下绘制平行线的代码
private Point downPoint = Point.Empty; // 鼠标按下的坐标
private Point movePoint = Point.Empty; // 鼠标移动的坐标
private double lineSpace = 12.0f; // 线条之间的距离
private Point offsetPointA = Point.Empty; // 偏移坐标A
private Point offsetPointB = Point.Empty; // 偏移坐标B
private double PointToAngle(Point AOrigin, Point APoint)
{
if (APoint.X == AOrigin.X)
if (APoint.Y > AOrigin.Y)
return Math.PI * 0.5f;
else return Math.PI * 1.5f;
else if (APoint.Y == AOrigin.Y)
if (APoint.X > AOrigin.X)
return 0;
else return Math.PI;
else
{
double Result = Math.Atan((double)(AOrigin.Y - APoint.Y) /
(AOrigin.X - APoint.X));
if ((APoint.X < AOrigin.X) && (APoint.Y > AOrigin.Y))
return Result + Math.PI;
else if ((APoint.X < AOrigin.X) && (APoint.Y < AOrigin.Y))
return Result + Math.PI;
else if ((APoint.X > AOrigin.X) && (APoint.Y < AOrigin.Y))
return Result + 2 * Math.PI;
else return Result;
}
} /* PointToAngle */
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
downPoint = e.Location;
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (downPoint != Point.Empty)
{
Graphics vGraphics = CreateGraphics();
if (movePoint != Point.Empty)
{
vGraphics.DrawLine(new Pen(BackColor), offsetPointA,
new Point(movePoint.X + offsetPointA.X - downPoint.X,
movePoint.Y + offsetPointA.Y - downPoint.Y));
vGraphics.DrawLine(new Pen(BackColor), offsetPointB,
new Point(movePoint.X + offsetPointB.X - downPoint.X,
movePoint.Y + offsetPointB.Y - downPoint.Y));
vGraphics.DrawLine(new Pen(BackColor), downPoint, movePoint);
}
movePoint = e.Location;
double angle = PointToAngle(downPoint, movePoint);
offsetPointA.X = (int)(Math.Cos(angle + 0.5f * Math.PI) * lineSpace +
downPoint.X);
offsetPointA.Y = (int)(Math.Sin(angle + 0.5f * Math.PI) * lineSpace +
downPoint.Y);
offsetPointB.X = (int)(Math.Cos(angle - 0.5f * Math.PI) * lineSpace +
downPoint.X);
offsetPointB.Y = (int)(Math.Sin(angle - 0.5f * Math.PI) * lineSpace +
downPoint.Y);
vGraphics.DrawLine(Pens.Red, offsetPointA,
new Point(movePoint.X + offsetPointA.X - downPoint.X,
movePoint.Y + offsetPointA.Y - downPoint.Y));
vGraphics.DrawLine(Pens.Red, offsetPointB,
new Point(movePoint.X + offsetPointB.X - downPoint.X,
movePoint.Y + offsetPointB.Y - downPoint.Y)); vGraphics.DrawLine(Pens.Blue, downPoint, movePoint);
vGraphics.Dispose();
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
downPoint = Point.Empty;
}
垂线的代码只要参照如上代码将角度旋转90度即可