program DelphiBenchmark;
uses
Windows,
ShellAPI,
SysUtils,
Classes,
Clipper.SVG in '..\Utils\Clipper.SVG.pas',
ClipMisc in '..\Utils\ClipMisc.pas',
Timer in '..\Utils\Timer.pas',
Clipper.Core in '..\Clipper2Lib\Clipper.Core.pas',
Clipper.Engine in '..\Clipper2Lib\Clipper.Engine.pas',
Clipper.Minkowski in '..\Clipper2Lib\Clipper.Minkowski.pas',
Clipper.Offset in '..\Clipper2Lib\Clipper.Offset.pas',
Clipper in '..\Clipper2Lib\Clipper.pas',
Clipper.RectClip in '..\Clipper2Lib\Clipper.RectClip.pas';
var
s : string;
i,j : integer;
subj,clip : TPaths64;
solution : TPaths64;
edgeCount : integer;
timerRec : TTimeRec;
timeTotal : double;
maxWidth : integer = 800;
maxHeight : integer = 600;
minEdgeCnt : integer = 1000;
maxEdgeCnt : integer = 5000;
loopCount : integer = 1;
begin
Randomize;
for j := (minEdgeCnt div 1000) to (maxEdgeCnt div 1000) do
begin
timeTotal := 0;
edgeCount := j * 1000;
for i := 1 to loopCount do
begin
if (i = 1) then
begin
WriteLn('Testing edge count: ' + Inttostr(edgeCount));
Write('Loop: 1 ');
end
else Write(inttostr(i) + ' ');
setLength(subj, 1);
subj[0] := MakeRandomPath(maxWidth, maxHeight, edgeCount);
setLength(clip, 1);
clip[0] := MakeRandomPath(maxWidth, maxHeight, edgeCount);
StartTimer(timerRec);
solution := Intersect(subj, clip, frNonZero);
timeTotal := timeTotal + EndTimer(timerRec);
end; WriteLn(Format('Average time: %1.0n msecs', [timeTotal*1000/loopCount]));
WriteLn('');
end;
with TSvgWriter.Create(frNonZero) do
try
AddText('sample', 0,0);
AddPaths(subj, false, $1000BBFF, $800099FF, 0.8);
AddPaths(clip, false, $12F99F00, $80FF9900, 0.8);
AddPaths(solution, false, $2000FF00, $FF006600, 0.8);
SaveToFile('test.svg');
finally
free;
end;
ShellExecute(0, nil, 'test.svg', Nil, Nil, SW_NORMAL);
WriteLn('Finished. Press Enter to exit.');
ReadLn(s);
end.