Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function TPAFromBoxDiagonal(bx: TBox; startCorner: Integer): TPointArray;
- var
- x, y, z, l, j, r, w, h, e, o, s, n: Integer;
- c: TPoint;
- begin
- l := pp_BoxSize(bx);
- SetLength(Result, l);
- if (l > 0) then
- begin
- s := startCorner;
- pp_EnsureRange(s, 0, 3);
- pp_BoxDimensions(bx, w, h);
- z := ((bx.X1 + h) - 1);
- if ((s = 1) or (s = 4)) then
- c := Point(bx.X2, bx.Y1)
- else
- c := Point(bx.X1, bx.Y1);
- r := 0;
- e := 0;
- o := 0;
- j := 0;
- n := -1;
- case s of
- 0: // TOP-LEFT
- repeat
- if (c.X > z) then
- e := (c.X - z);
- if (c.X > bx.X2) then
- o := (c.X - bx.X2);
- y := (bx.Y1 + o);
- for x := (c.X - o) downto (bx.X1 + e) do
- begin
- Result[r] := Point(x, y);
- if (y < bx.Y2) then
- y := (y + 1);
- r := (r + 1);
- end;
- c.X := (c.X + 1);
- until (c.X > (bx.X2 + h));
- 1: // TOP-RIGHT
- repeat
- if (c.X < bx.X1) then
- o := (o + 1);
- y := (bx.Y1 + o);
- for x := (c.X + o) to (bx.X2 - e) do
- begin
- Result[r] := Point(x, y);
- if (y < bx.Y2) then
- y := (y + 1);
- r := (r + 1);
- end;
- c.X := (c.X - 1);
- if ((bx.X2 - c.X) > (h - 1)) then
- e := (e + 1);
- until (r >= l);
- 2: // BOTTOM-LEFT
- repeat
- if (c.X > bx.X2) then
- o := (c.X - bx.X2);
- if (c.X > z) then
- e := (c.X - z)
- else
- n := (n + 1);
- y := (bx.Y2 - n);
- for x := (bx.X1 + e) to (c.X - o) do
- begin
- Result[r] := Point(x, y);
- if (y < bx.Y2) then
- y := (y + 1);
- r := (r + 1);
- end;
- c.X := (c.X + 1);
- until (c.X > (bx.X2 + h));
- 3: // BOTTOM-RIGHT
- repeat
- if (c.X < (bx.X2 - h)) then
- o := (o + 1);
- y := (bx.Y2 - o);
- for x := (c.X + o) to (bx.X2 - e) do
- begin
- Result[r] := Point(x, y);
- if (y > bx.Y2) then
- y := (y + 1);
- r := (r + 1);
- end;
- c.X := (c.X - 1);
- if ((bx.X2 - c.X) > (h - 1)) then
- e := (e + 1);
- until (r >= l);
- end;
- end;
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement