如何找到移动绘图线的矩形宽度高度x和y?

时间:2014-09-26 06:35:30

标签: c# .net winforms

在课程的顶部,我做了:

public static int redlinerectwidth= 0;
public static int redlinerectheight = 0;
public static int redlinerectx = 0;
public static int redlinerecty = 0;

然后在一个方法中,我从一个表格中调用它来移动一条画线:

foreach (PointF pt in MovingPoints)
            {
                if (clouds != null)
                {
                    e.FillEllipse(Brushes.Red, (pt.X + distance) , pt.Y , 2f, 2f);
            }   }

最后在表格中我知道整个操作何时结束,此时我想构建一个红线矩形。

  1. 红线的第一个位置
  2. 宽度
  3. 身高
  4. Thel ast position。
  5. 所以它就像一个矩形。

    在form1 top中,我添加了:

    private Rectangle redlinerectangle;
    

    在form1中,我有一个后台工作者,此时操作结束:

    if (counter == PaddingPoints.distancetoscan)
                        {
                            counter = 0;
                            CloudEnteringAlert.ClearList();
                            padrectangle = PaddingPoints.rect;
                            break;
                        }
    

    当操作结束时,我想从类中的4个变量构建redlinerectangle。

    如何从foreach循环中获取clas的数​​据,最后创建矩形?

    修改

    或者更好的是在顶部和底部绘制一条线,这样它看起来就像一个矩形,一旦向右移动,矩形就会变大。 +距离使X坐标向右移动。

    我正在绘制点,因为List MovingPoints有许多点,它看起来像一条移动的红线。 但我所看到的是一条红线停留在原地,另一条直线移动到正确的距离,达到了之前的一些价值。

    foreach(PointsInt中的Point pt)             {                 e.FillEllipse(Brushes.Red,pt.X *(float)currentFactor,pt.Y *(float)currentFactor,2f,2f);             }

    首先我画了一条红线然后我正在使用MovingPoints列表和距离将另一条线移到右边。

    我怎样才能使那个带有MovigPoints foreach循环的第二条红线向右移动,因为当它向右移动时会实时构建的isctangle?

    这是截止操作结束时有两条红线。 左边的那个是起点而不是移动。右边是从左到右移动。

    我需要当第二​​行向右移动时,它会显示一条顶部和底部线条,当它向右移动时会加速。

    red lines

    所以最后我会有一个矩形。 例如,一个变量名称rect,它将是在右行移动时由两条线实时绘制的矩形。

1 个答案:

答案 0 :(得分:1)

请不要将 foreach 两者称为画线。当你移动一次线时绘制矩形:

Pen myPen = new Pen(Brushes.Red, 2);
float x, y width, height;

y = PointsInt.Min(p => p.Y);
PointF pointsIntMin = PointsInt.First(p => p.Y == y); //point with minimum Y in PointsInt list
y = PointsInt.Max(p => p.Y);
PointF pointsIntMax = PointsInt.First(p => p.Y == y); //point with maximum Y in PointsInt list

y = MovingPoints.Min(p => p.Y);
PointF movingPointsMin = MovingPoints.First(p => p.Y == y); //point with minimum Y in MovingPoints list
y = MovingPoints.Max(p => p.Y);
PointF movingPointsMax = PointsInt.First(p => p.Y == y); //point with minimum Y in MovingPoints list

x = pointsIntMin.X * (float)currentFactor;
y = pointsIntMin.Y * (float)currentFactor;
width = movingPointsMin.X + distance - x
height = (pointsIntMax.Y - pointsIntMin.Y) * (float)currentFactor;

if (clouds != null)
{
    e.DrawRectangle(myPen, (int)x, (int)y, (int)width, (int)height);
}

myPen.Dispose();

enter image description here

瓦尔特