{ This file is part of the Mufasa Macro Library (MML) Copyright (c) 2009 by Raymond van Venetiƫ and Merlijn Wajer MML is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. MML is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with MML. If not, see . See the file COPYING, included in this distribution, for details about the copyright. TPA functions for the Mufasa Macro Library } unit tpa; {$mode objfpc}{$H+} interface uses Classes, SysUtils, mufasatypes; function SplitTPAEx(arr: TPointArray; w, h: Integer): T2DPointArray; implementation function SplitTPAEx(arr: TPointArray; w, h: Integer): T2DPointArray; var t1, t2, c, ec, tc, l: Integer; tpa: TPointArray; begin tpa := Copy(arr); l := High(tpa); if (l < 0) then Exit; SetLength(Result, l + 1); c := 0; ec := 0; while ((l - ec) >= 0) do begin SetLength(Result[c], 1); Result[c][0] := tpa[0]; tpa[0] := tpa[l - ec]; Inc(ec); tc := 1; t1 := 0; while (t1 < tc) do begin t2 := 0; while (t2 <= (l - ec)) do begin if (Abs(Result[c][t1].x - tpa[t2].x) <= w) and (Abs(Result[c][t1].y - tpa[t2].y) <= h) then begin SetLength(Result[c], tc +1); Result[c][tc] := tpa[t2]; tpa[t2] := tpa[l - ec]; Inc(ec); Inc(tc); Dec(t2); end; Inc(t2); end; Inc(t1); end; Inc(c); end; SetLength(Result, c); end; end.