2014-09-26 59 views
-1

在類我沒有的頂部:如何找到移動繪圖線的矩形寬度高度x和y?

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位置的第一位置。

所以它就像一個矩形。

在Form1上面我說:

private Rectangle redlinerectangle; 

在Form1我有一個BackgroundWorker,在這一點上,操作結束:

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

當操作結束時,我希望建立從redlinerectangle班上的4個變量。

我如何從clas sfrom foreach循環獲取數據並在最後創建矩形?

編輯

或更好,也借鑑頂部底部的一條線,右所以它看起來像一個矩形,一旦它移動到右邊的矩形將會得到更大。 +距離使X座標向右移動。

我在繪製點,而且由於列表移動點有很多點,它看起來像一條移動的紅線。 但我看到的是一條紅線停留在地方,另一條線向右移動,直到達到一定的價值。

的foreach(在PointsInt點Pt) { e.FillEllipse(Brushes.Red,pt.X *(浮點)currentFactor,pt.Y *(浮點)currentFactor,2F,2F); }

首先,我畫了一條紅線,然後我使用MovePoints列表和距離將另一條線移動到右邊。

如何使第二條紅色線與MovigPoints foreach循環一起移動到右側,以便當它向右移動時實時構建矩形?

這是操作結束的截圖,有兩條紅線。 左邊的那個是開始的地方,沒有移動。右邊是從左向右移動。

我需要的是,當第二行向右移動時,它也會顯示一條頂部和底部線條,當它向右移動時將會擡起。

red lines

所以最終我將有一個矩形。 例如,一個變量名稱矩形將是兩條線實時繪製的矩形,而右邊的線正在移動。

回答

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

瓦爾特

+0

@JamesAharon更好explenation – 2014-09-26 10:26:23

+0

非常感謝你見編輯。 – 2014-09-26 10:54:34

相關問題