基于两点绘制工字梁

时间:2011-09-07 17:01:30

标签: c# .net winforms gdi+

我有两个点结构,我需要根据这些点绘制一个I-Beam,其中每个点代表工字梁两侧的横截面。端盖的宽度应固定且任意。

基本上我需要绘制三条线。首先我将DrawLine(Point1,Point2),然后我需要数学来弄清楚如何在垂直角度上绘制下两行,以便它们以Point1和Point2为中心。

下图显示了我需要根据中心线绘制的内容。但是,这条线可以是任何角度。连接线的Point1和Point2可以是2D空间中的任何位置。

Example of an I-Beam

2 个答案:

答案 0 :(得分:4)

您可以尝试使用LineCaps:

protected void DrawIBeam(Graphics g, Point fromPoint, Point toPoint)
{
  using (GraphicsPath hPath = new GraphicsPath())
  {
    hPath.AddLine(new Point(-5, 0), new Point(5, 0));
    CustomLineCap myCap = new CustomLineCap(null, hPath);
    myCap.SetStrokeCaps(LineCap.Round, LineCap.Round);
    using (Pen myPen = new Pen(Color.Black, 2))
    {
      myPen.CustomStartCap = myCap;
      myPen.CustomEndCap = myCap;
      g.DrawLine(myPen, fromPoint, toPoint);
    }
  }
}

并称之为:

DrawIBeam(e.Graphics, new Point(10, 10), new Point(60, 60));

enter image description here

来自CustomLineCap Class

答案 1 :(得分:1)

假设宽度是I光束I部分宽度的一半,首先找到您绘制的第一条线的斜率。

接下来,取斜率的负倒数,并从两个方向上的长度宽度的Point1绘制一条直线。这就是为什么宽度是你想要绘制的宽度的一半。

最后,你从两个方向的长度宽度的第2点画一条线。

以下是drawing a perpendicular line的数学公式。