1
0
mirror of https://github.com/moparisthebest/Simba synced 2025-01-30 14:50:18 -05:00

More fixes for FindDTM and FindDTMs.

The rotated variant do not function correctly, yet.
I think the entire idea they are based on should be slightly different.



git-svn-id: http://www.villavu.com/repositories/merlijn/mufasa@111 3f818213-9676-44b0-a9b4-5e4c4e03d09d
This commit is contained in:
Wizzup? 2009-10-06 18:08:41 +00:00
parent fa648c717d
commit 8648fbb120
6 changed files with 786 additions and 759 deletions

View File

@ -41,7 +41,7 @@
<CursorPos X="33" Y="12"/> <CursorPos X="33" Y="12"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="0"/> <EditorIndex Value="0"/>
<UsageCount Value="167"/> <UsageCount Value="169"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit0> </Unit0>
<Unit1> <Unit1>
@ -173,7 +173,7 @@
<CursorPos X="10" Y="11"/> <CursorPos X="10" Y="11"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="12"/> <EditorIndex Value="12"/>
<UsageCount Value="133"/> <UsageCount Value="135"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit18> </Unit18>
<Unit19> <Unit19>
@ -305,17 +305,17 @@
<CursorPos X="39" Y="8"/> <CursorPos X="39" Y="8"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="2"/> <EditorIndex Value="2"/>
<UsageCount Value="132"/> <UsageCount Value="134"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit37> </Unit37>
<Unit38> <Unit38>
<Filename Value="../../Units/MMLCore/mufasatypes.pas"/> <Filename Value="../../Units/MMLCore/mufasatypes.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="MufasaTypes"/> <UnitName Value="MufasaTypes"/>
<CursorPos X="38" Y="32"/> <CursorPos X="51" Y="37"/>
<TopLine Value="11"/> <TopLine Value="39"/>
<EditorIndex Value="1"/> <EditorIndex Value="1"/>
<UsageCount Value="132"/> <UsageCount Value="134"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit38> </Unit38>
<Unit39> <Unit39>
@ -331,16 +331,16 @@
<UnitName Value="files"/> <UnitName Value="files"/>
<CursorPos X="15" Y="76"/> <CursorPos X="15" Y="76"/>
<TopLine Value="47"/> <TopLine Value="47"/>
<UsageCount Value="133"/> <UsageCount Value="135"/>
</Unit40> </Unit40>
<Unit41> <Unit41>
<Filename Value="../../Units/MMLCore/window.pas"/> <Filename Value="../../Units/MMLCore/window.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="Window"/> <UnitName Value="Window"/>
<CursorPos X="4" Y="228"/> <CursorPos X="57" Y="250"/>
<TopLine Value="228"/> <TopLine Value="228"/>
<EditorIndex Value="4"/> <EditorIndex Value="4"/>
<UsageCount Value="132"/> <UsageCount Value="134"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit41> </Unit41>
<Unit42> <Unit42>
@ -377,7 +377,7 @@
<UnitName Value="finder"/> <UnitName Value="finder"/>
<CursorPos X="79" Y="29"/> <CursorPos X="79" Y="29"/>
<TopLine Value="15"/> <TopLine Value="15"/>
<UsageCount Value="125"/> <UsageCount Value="127"/>
</Unit46> </Unit46>
<Unit47> <Unit47>
<Filename Value="../../../lazarus/lcl/graphics.pp"/> <Filename Value="../../../lazarus/lcl/graphics.pp"/>
@ -392,7 +392,7 @@
<UnitName Value="MMLThread"/> <UnitName Value="MMLThread"/>
<CursorPos X="10" Y="62"/> <CursorPos X="10" Y="62"/>
<TopLine Value="50"/> <TopLine Value="50"/>
<UsageCount Value="123"/> <UsageCount Value="125"/>
</Unit48> </Unit48>
<Unit49> <Unit49>
<Filename Value="../../../Documents/fpc/rtl/objpas/classes/classesh.inc"/> <Filename Value="../../../Documents/fpc/rtl/objpas/classes/classesh.inc"/>
@ -407,7 +407,7 @@
<CursorPos X="34" Y="114"/> <CursorPos X="34" Y="114"/>
<TopLine Value="101"/> <TopLine Value="101"/>
<EditorIndex Value="8"/> <EditorIndex Value="8"/>
<UsageCount Value="121"/> <UsageCount Value="123"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit50> </Unit50>
<Unit51> <Unit51>
@ -518,7 +518,7 @@
<CursorPos X="60" Y="12"/> <CursorPos X="60" Y="12"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="9"/> <EditorIndex Value="9"/>
<UsageCount Value="34"/> <UsageCount Value="35"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit66> </Unit66>
<Unit67> <Unit67>
@ -539,7 +539,7 @@
<UnitName Value="bitmaps"/> <UnitName Value="bitmaps"/>
<CursorPos X="31" Y="430"/> <CursorPos X="31" Y="430"/>
<TopLine Value="419"/> <TopLine Value="419"/>
<UsageCount Value="111"/> <UsageCount Value="113"/>
</Unit69> </Unit69>
<Unit70> <Unit70>
<Filename Value="../../../FPC/FPCCheckout/packages/fcl-image/src/fpcanvas.pp"/> <Filename Value="../../../FPC/FPCCheckout/packages/fcl-image/src/fpcanvas.pp"/>
@ -559,7 +559,7 @@
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<CursorPos X="11" Y="61"/> <CursorPos X="11" Y="61"/>
<TopLine Value="65"/> <TopLine Value="65"/>
<UsageCount Value="110"/> <UsageCount Value="112"/>
</Unit72> </Unit72>
<Unit73> <Unit73>
<Filename Value="../../../FPC/FPCCheckout/packages/fcl-image/src/fpcanvas.inc"/> <Filename Value="../../../FPC/FPCCheckout/packages/fcl-image/src/fpcanvas.inc"/>
@ -691,7 +691,7 @@
<UnitName Value="colour_conv"/> <UnitName Value="colour_conv"/>
<CursorPos X="11" Y="148"/> <CursorPos X="11" Y="148"/>
<TopLine Value="140"/> <TopLine Value="140"/>
<UsageCount Value="93"/> <UsageCount Value="95"/>
</Unit92> </Unit92>
<Unit93> <Unit93>
<Filename Value="../../../cogat/Units/CogatUnits/compcolors.pas"/> <Filename Value="../../../cogat/Units/CogatUnits/compcolors.pas"/>
@ -750,7 +750,7 @@
<UnitName Value="plugins"/> <UnitName Value="plugins"/>
<CursorPos X="86" Y="128"/> <CursorPos X="86" Y="128"/>
<TopLine Value="128"/> <TopLine Value="128"/>
<UsageCount Value="87"/> <UsageCount Value="89"/>
</Unit101> </Unit101>
<Unit102> <Unit102>
<Filename Value="../../../Compilertje/Units/CogatUnits/compfiles.pas"/> <Filename Value="../../../Compilertje/Units/CogatUnits/compfiles.pas"/>
@ -835,17 +835,17 @@
<CursorPos X="9" Y="79"/> <CursorPos X="9" Y="79"/>
<TopLine Value="61"/> <TopLine Value="61"/>
<EditorIndex Value="7"/> <EditorIndex Value="7"/>
<UsageCount Value="23"/> <UsageCount Value="24"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit114> </Unit114>
<Unit115> <Unit115>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="dtm"/> <UnitName Value="dtm"/>
<CursorPos X="3" Y="399"/> <CursorPos X="31" Y="235"/>
<TopLine Value="387"/> <TopLine Value="226"/>
<EditorIndex Value="3"/> <EditorIndex Value="3"/>
<UsageCount Value="68"/> <UsageCount Value="70"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit115> </Unit115>
<Unit116> <Unit116>
@ -862,7 +862,7 @@
<CursorPos X="53" Y="33"/> <CursorPos X="53" Y="33"/>
<TopLine Value="15"/> <TopLine Value="15"/>
<EditorIndex Value="10"/> <EditorIndex Value="10"/>
<UsageCount Value="64"/> <UsageCount Value="66"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit117> </Unit117>
<Unit118> <Unit118>
@ -888,7 +888,7 @@
<UnitName Value="windowselector"/> <UnitName Value="windowselector"/>
<CursorPos X="76" Y="83"/> <CursorPos X="76" Y="83"/>
<TopLine Value="65"/> <TopLine Value="65"/>
<UsageCount Value="54"/> <UsageCount Value="56"/>
</Unit120> </Unit120>
<Unit121> <Unit121>
<Filename Value="../../../../../../usr/lib64/fpc/2.2.4/source/rtl/objpas/classes/classesh.inc"/> <Filename Value="../../../../../../usr/lib64/fpc/2.2.4/source/rtl/objpas/classes/classesh.inc"/>
@ -923,7 +923,7 @@
<CursorPos X="1" Y="13"/> <CursorPos X="1" Y="13"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="6"/> <EditorIndex Value="6"/>
<UsageCount Value="41"/> <UsageCount Value="43"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit125> </Unit125>
<Unit126> <Unit126>
@ -938,7 +938,7 @@
<CursorPos X="2" Y="23"/> <CursorPos X="2" Y="23"/>
<TopLine Value="6"/> <TopLine Value="6"/>
<EditorIndex Value="11"/> <EditorIndex Value="11"/>
<UsageCount Value="18"/> <UsageCount Value="19"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit127> </Unit127>
<Unit128> <Unit128>
@ -969,7 +969,7 @@
<CursorPos X="35" Y="45"/> <CursorPos X="35" Y="45"/>
<TopLine Value="14"/> <TopLine Value="14"/>
<EditorIndex Value="5"/> <EditorIndex Value="5"/>
<UsageCount Value="21"/> <UsageCount Value="23"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit131> </Unit131>
<Unit132> <Unit132>
@ -982,124 +982,124 @@
</Units> </Units>
<JumpHistory Count="30" HistoryIndex="29"> <JumpHistory Count="30" HistoryIndex="29">
<Position1> <Position1>
<Filename Value="../../Units/MMLAddon/PSInc/pscompile.inc"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="18" Column="30" TopLine="1"/> <Caret Line="89" Column="25" TopLine="74"/>
</Position1> </Position1>
<Position2> <Position2>
<Filename Value="../../../cogat/Units/CogatUnits/compdtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="61" Column="24" TopLine="41"/> <Caret Line="228" Column="81" TopLine="224"/>
</Position2> </Position2>
<Position3> <Position3>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="8" Column="27" TopLine="1"/> <Caret Line="80" Column="60" TopLine="74"/>
</Position3> </Position3>
<Position4> <Position4>
<Filename Value="../../Units/MMLAddon/mmlpsthread.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="49" Column="5" TopLine="31"/> <Caret Line="8" Column="66" TopLine="1"/>
</Position4> </Position4>
<Position5> <Position5>
<Filename Value="../../Units/MMLAddon/PSInc/pscompile.inc"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="63" Column="30" TopLine="48"/> <Caret Line="389" Column="16" TopLine="374"/>
</Position5> </Position5>
<Position6> <Position6>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="672" Column="16" TopLine="306"/> <Caret Line="21" Column="28" TopLine="21"/>
</Position6> </Position6>
<Position7> <Position7>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="792" Column="34" TopLine="788"/> <Caret Line="26" Column="28" TopLine="21"/>
</Position7> </Position7>
<Position8> <Position8>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="718" Column="4" TopLine="695"/> <Caret Line="32" Column="30" TopLine="21"/>
</Position8> </Position8>
<Position9> <Position9>
<Filename Value="../../../cogat/Units/CogatUnits/compdtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="79" Column="9" TopLine="61"/> <Caret Line="37" Column="29" TopLine="21"/>
</Position9> </Position9>
<Position10> <Position10>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLAddon/PSInc/Wrappers/dtm.inc"/>
<Caret Line="629" Column="32" TopLine="594"/> <Caret Line="13" Column="42" TopLine="1"/>
</Position10> </Position10>
<Position11> <Position11>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLAddon/PSInc/Wrappers/dtm.inc"/>
<Caret Line="89" Column="25" TopLine="74"/> <Caret Line="32" Column="36" TopLine="11"/>
</Position11> </Position11>
<Position12> <Position12>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLAddon/PSInc/Wrappers/dtm.inc"/>
<Caret Line="228" Column="81" TopLine="224"/> <Caret Line="23" Column="50" TopLine="1"/>
</Position12> </Position12>
<Position13> <Position13>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="80" Column="60" TopLine="74"/> <Caret Line="26" Column="1" TopLine="8"/>
</Position13> </Position13>
<Position14> <Position14>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="8" Column="66" TopLine="1"/> <Caret Line="24" Column="41" TopLine="9"/>
</Position14> </Position14>
<Position15> <Position15>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="389" Column="16" TopLine="374"/> <Caret Line="33" Column="37" TopLine="18"/>
</Position15> </Position15>
<Position16> <Position16>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="21" Column="28" TopLine="21"/> <Caret Line="21" Column="32" TopLine="6"/>
</Position16> </Position16>
<Position17> <Position17>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="26" Column="28" TopLine="21"/> <Caret Line="439" Column="31" TopLine="418"/>
</Position17> </Position17>
<Position18> <Position18>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="32" Column="30" TopLine="21"/> <Caret Line="422" Column="47" TopLine="418"/>
</Position18> </Position18>
<Position19> <Position19>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="37" Column="29" TopLine="21"/> <Caret Line="447" Column="34" TopLine="425"/>
</Position19> </Position19>
<Position20> <Position20>
<Filename Value="../../Units/MMLAddon/PSInc/Wrappers/dtm.inc"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="13" Column="42" TopLine="1"/> <Caret Line="393" Column="3" TopLine="380"/>
</Position20> </Position20>
<Position21> <Position21>
<Filename Value="../../Units/MMLAddon/PSInc/Wrappers/dtm.inc"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="32" Column="36" TopLine="11"/> <Caret Line="451" Column="43" TopLine="434"/>
</Position21> </Position21>
<Position22> <Position22>
<Filename Value="../../Units/MMLAddon/PSInc/Wrappers/dtm.inc"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="23" Column="50" TopLine="1"/> <Caret Line="8" Column="28" TopLine="1"/>
</Position22> </Position22>
<Position23> <Position23>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="26" Column="1" TopLine="8"/> <Caret Line="676" Column="43" TopLine="661"/>
</Position23> </Position23>
<Position24> <Position24>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="24" Column="41" TopLine="9"/> <Caret Line="675" Column="29" TopLine="651"/>
</Position24> </Position24>
<Position25> <Position25>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="33" Column="37" TopLine="18"/> <Caret Line="251" Column="20" TopLine="232"/>
</Position25> </Position25>
<Position26> <Position26>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="21" Column="32" TopLine="6"/> <Caret Line="236" Column="38" TopLine="217"/>
</Position26> </Position26>
<Position27> <Position27>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="439" Column="31" TopLine="418"/> <Caret Line="643" Column="19" TopLine="630"/>
</Position27> </Position27>
<Position28> <Position28>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="422" Column="47" TopLine="418"/> <Caret Line="700" Column="23" TopLine="685"/>
</Position28> </Position28>
<Position29> <Position29>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="447" Column="34" TopLine="425"/> <Caret Line="233" Column="44" TopLine="217"/>
</Position29> </Position29>
<Position30> <Position30>
<Filename Value="../../Units/MMLCore/dtm.pas"/> <Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="393" Column="3" TopLine="380"/> <Caret Line="687" Column="30" TopLine="675"/>
</Position30> </Position30>
</JumpHistory> </JumpHistory>
</ProjectOptions> </ProjectOptions>

View File

@ -1,7 +1,7 @@
object Form1: TForm1 object Form1: TForm1
Left = 384 Left = 1523
Height = 553 Height = 553
Top = 129 Top = 172
Width = 723 Width = 723
ActiveControl = SynEdit1 ActiveControl = SynEdit1
Caption = 'Mufasa v2' Caption = 'Mufasa v2'
@ -25,7 +25,6 @@ object Form1: TForm1
ParentColor = False ParentColor = False
ParentFont = False ParentFont = False
TabOrder = 0 TabOrder = 0
BookMarkOptions.OnChange = nil
Gutter.Width = 57 Gutter.Width = 57
Gutter.MouseActions = < Gutter.MouseActions = <
item item

File diff suppressed because it is too large Load Diff

View File

@ -10,18 +10,18 @@ const
var var
ppdtm: pdtm; ppdtm: pdtm;
w,h,x,y,dtm,i: integer; w,h,x,y,dtm,i: integer;
a: extended; a: extended;
p,pp: TPointArray; p,pp: TPointArray;
c,t,asz,ash: TIntegerArray; c,t,asz,ash: TIntegerArray;
begin begin
p := [Point(0,0), Point(1,1)]; p := [Point(0,0), Point(1,1), Point(-4, -4)];
c := [clWhite, clWhite]; c := [clWhite, clWhite, clWhite];
t := [0, 0]; t := [0, 0, 0];
asz := [4, 4]; asz := [0, 4, 4];
ash := [dtm_Rectangle, dtm_Rectangle]; ash := [dtm_Rectangle, dtm_Rectangle, dtm_Rectangle];
setlength(ppdtm.p,2); setlength(ppdtm.p,2);
setlength(ppdtm.c,2); setlength(ppdtm.c,2);
setlength(ppdtm.t,2); setlength(ppdtm.t,2);
@ -29,7 +29,7 @@ begin
setlength(ppdtm.ash,2); setlength(ppdtm.ash,2);
ppdtm.p := p; ppdtm.p := p;
ppdtm.c := c; ppdtm.c := c;
ppdtm.t := t; ppdtm.t := t;
ppdtm.asz := asz; ppdtm.asz := asz;
ppdtm.ash := ash; ppdtm.ash := ash;
@ -37,6 +37,8 @@ begin
dtm := AddpDTM(ppdtm); dtm := AddpDTM(ppdtm);
getclientdimensions(w,h); getclientdimensions(w,h);
writeln(inttostr(w) + ', ' + inttostr(h));
if FindDTM(dtm, x, y, 0, 0, w-1, h-1) then if FindDTM(dtm, x, y, 0, 0, w-1, h-1) then
begin begin
writeln('Found DTM at ' + inttostr(x) + ', ' + inttostr(y)); writeln('Found DTM at ' + inttostr(x) + ', ' + inttostr(y));
@ -45,7 +47,7 @@ begin
if FindDTMs(dtm, p, 0, 0, w-1, h-1) then if FindDTMs(dtm, p, 0, 0, w-1, h-1) then
begin begin
writeln('Found ' + inttostr(length(p)) + ' DTM(s). First one at ' + writeln('Found ' + inttostr(length(p)) + ' DTM(s). First one at ' +
inttostr(p[0].x) + ', ' + inttostr(p[0].y)); inttostr(p[0].x) + ', ' + inttostr(p[0].y));
movemouse(p[0].x,p[0].y); movemouse(p[0].x,p[0].y);
end; end;
@ -54,5 +56,5 @@ begin
begin begin
writeln('Found DTM at ' + inttostr(x) + ', ' + inttostr(y) + ' Angle: ' + FloatToStr(a)); writeln('Found DTM at ' + inttostr(x) + ', ' + inttostr(y) + ' Angle: ' + FloatToStr(a));
movemouse(x,y); movemouse(x,y);
end; end;
end. end.

View File

@ -225,21 +225,6 @@ Begin
Result := False; Result := False;
End; End;
function RotatePoints(P: TPointArray; A, cx, cy: Extended): TPointArray; inline;
var
I, L: Integer;
begin
L := High(P);
SetLength(Result, L + 1);
for I := 0 to L do
begin
Result[I].X := Round(cx + cos(A) * (p[i].x - cx) - sin(A) * (p[i].y - cy));
Result[I].Y := Round(cy + sin(A) * (p[i].x - cx) + cos(A) * (p[i].y - cy));
end;
end;
{/\ {/\
Rotates the given point (p) by A (in radians) around the point defined by cx, cy. Rotates the given point (p) by A (in radians) around the point defined by cx, cy.
/\} /\}
@ -382,6 +367,47 @@ begin
FreeSpots[High(FreeSpots)] := DTM; FreeSpots[High(FreeSpots)] := DTM;
end; end;
procedure DTMBounds(dtm: pDTM; var x1, y1, x2, y2: Integer);
var
i: Integer;
B: TBox;
begin
for i := 0 to high(dtm.p) do
begin
B.X1 := Min(B.X1, dtm.p[i].X - dtm.asz[i]);
B.Y1 := Min(B.Y1, dtm.p[i].Y - dtm.asz[i]);
B.X2 := Max(B.X2, dtm.p[i].X + dtm.asz[i]);
B.Y2 := Max(B.Y2, dtm.p[i].Y + dtm.asz[i]);
end;
writeln(inttostr(B.x1) + ', ' + inttostr(b.y1) + ', ' + inttostr(b.x2) +
', ' + inttostr(b.y2));
x1 += -B.X1;
y1 += -B.Y1;
X2 -= B.X2;
Y2 -= B.Y2;
end;
procedure DTMRotatedBounds(dtm: pDTM; var x1, y1, x2, y2: Integer);
var
i: Integer;
B: TBox;
begin
for i := 0 to high(dtm.p) do
begin
B.X1 := Min(B.X1, dtm.p[i].X - dtm.asz[i]);
B.Y1 := Min(B.Y1, dtm.p[i].Y - dtm.asz[i]);
B.X2 := Max(B.X2, dtm.p[i].X + dtm.asz[i]);
B.Y2 := Max(B.Y2, dtm.p[i].Y + dtm.asz[i]);
end;
writeln(inttostr(B.x1) + ', ' + inttostr(b.y1) + ', ' + inttostr(b.x2) +
', ' + inttostr(b.y2));
x1 += -B.X1 * 2;
y1 += -B.Y1 * 2;
X2 -= B.X2 * 2;
Y2 -= B.Y2 * 2;
end;
{ {
Tries to find the given DTM (index). If found will put the point the dtm has Tries to find the given DTM (index). If found will put the point the dtm has
been found at in x, y and result to true. been found at in x, y and result to true.
@ -412,24 +438,23 @@ var
I, J, H, dH: Integer; I, J, H, dH: Integer;
Found: Boolean; Found: Boolean;
TempTP: TPoint; TempTP: TPoint;
MaxSubPointDist: TPoint;
begin begin
MaxSubPointDist := Point(0,0);
for I := 1 to High(DTM.p) do for I := 1 to High(DTM.p) do
begin begin
DTM.p[I].x := DTM.p[I].x - DTM.p[0].x; DTM.p[I].x := DTM.p[I].x - DTM.p[0].x;
DTM.p[I].y := DTM.p[I].y - DTM.p[0].y; DTM.p[I].y := DTM.p[I].y - DTM.p[0].y;
MaxSubPointDist.X := Max(DTM.p[I].x, MaxSubPointDist.X);
MaxSubPointDist.Y := Max(DTM.p[I].y, MaxSubPointDist.Y);
end; end;
X2 := X2 - MaxSubPointDist.X; writeln(inttostr(x1) + ', ' + inttostr(y1) + ', ' + inttostr(x2) +
Y2 := Y2 - MaxSubPointDist.Y; ', ' + inttostr(y2));
X1 := X1 + MaxSubPointDist.X; DTMBounds(DTM, x1, y1, x2, y2);
Y1 := Y1 + MaxSubPointDist.Y; writeln(inttostr(x1) + ', ' + inttostr(y1) + ', ' + inttostr(x2) +
{If X2 > X1 then ', ' + inttostr(y2));
{If X2 > X1 then
//Exit; //Exit;
If Y2 > Y1 then } If Y2 > Y1 then }
//Exit; //Exit;
@ -509,11 +534,9 @@ Var
I, J, H, dH: Integer; I, J, H, dH: Integer;
Found: Boolean; Found: Boolean;
TempTP: TPoint; TempTP: TPoint;
MaxSubPointDist: TPoint;
Begin Begin
Result := False; Result := False;
MaxSubPointDist := Point(0,0);
SetLength(Points, 0); SetLength(Points, 0);
For I := 1 To High(DTM.p) Do For I := 1 To High(DTM.p) Do
Begin Begin
@ -521,10 +544,11 @@ Begin
DTM.p[I].y := DTM.p[I].y - DTM.p[0].y; DTM.p[I].y := DTM.p[I].y - DTM.p[0].y;
End; End;
X2 := X2 - MaxSubPointDist.X; writeln(inttostr(x1) + ', ' + inttostr(y1) + ', ' + inttostr(x2) +
Y2 := Y2 - MaxSubPointDist.Y; ', ' + inttostr(y2));
X1 := X1 + MaxSubPointDist.X; DTMBounds(DTM, x1, y1, x2, y2);
Y1 := Y1 + MaxSubPointDist.Y; writeln(inttostr(x1) + ', ' + inttostr(y1) + ', ' + inttostr(x2) +
', ' + inttostr(y2));
{If X2 > X1 then {If X2 > X1 then
//Exit; //Exit;
If Y2 > Y1 then } If Y2 > Y1 then }
@ -608,17 +632,17 @@ Var
MaxSubPointDist: TPoint; MaxSubPointDist: TPoint;
Begin Begin
MaxSubPointDist := Point(0,0);
For I := 1 To High(DTM.p) Do For I := 1 To High(DTM.p) Do
Begin Begin
DTM.p[I].x := DTM.p[I].x - DTM.p[0].x; DTM.p[I].x := DTM.p[I].x - DTM.p[0].x;
DTM.p[I].y := DTM.p[I].y - DTM.p[0].y; DTM.p[I].y := DTM.p[I].y - DTM.p[0].y;
End; End;
X2 := X2 - MaxSubPointDist.X; writeln(inttostr(x1) + ', ' + inttostr(y1) + ', ' + inttostr(x2) +
Y2 := Y2 - MaxSubPointDist.Y; ', ' + inttostr(y2));
X1 := X1 + MaxSubPointDist.X; DTMRotatedBounds(DTM, x1, y1, x2, y2);
Y1 := Y1 + MaxSubPointDist.Y; writeln(inttostr(x1) + ', ' + inttostr(y1) + ', ' + inttostr(x2) +
', ' + inttostr(y2));
{If X2 > X1 then {If X2 > X1 then
//Exit; //Exit;
If Y2 > Y1 then } If Y2 > Y1 then }
@ -668,9 +692,13 @@ Begin
For R := 0 To High(Angle) Do For R := 0 To High(Angle) Do
Begin Begin
writeln('dtm: ' + inttostr(dtm.p[j].x) + ', ' + inttostr(dtm.p[j].y));
writeln('mP: ' + inttostr(mP[i].x) + ', ' + inttostr(mP[i].y));
TempTP.X := DTM.p[J].X + mP[I].X; TempTP.X := DTM.p[J].X + mP[I].X;
TempTP.Y := DTM.p[J].Y + mP[I].Y; TempTP.Y := DTM.p[J].Y + mP[I].Y;
writeln('TempTP: ' + inttostr(TempTP.x) + ', ' + inttostr(TempTP.y));
TempTP := RotatePoint(TempTP, Angle[R], mP[I].X, mP[I].Y); TempTP := RotatePoint(TempTP, Angle[R], mP[I].X, mP[I].Y);
writeln('TempTP: ' + inttostr(TempTP.x) + ', ' + inttostr(TempTP.y));
If Not AreaShape(DTM.c[J], DTM.t[J], DTM.asz[J], DTM.ash[J], TempTP) Then If Not AreaShape(DTM.c[J], DTM.t[J], DTM.asz[J], DTM.ash[J], TempTP) Then
Begin Begin
For W := R To High(Angle) - 1 Do For W := R To High(Angle) - 1 Do
@ -741,20 +769,15 @@ Var
tAngle: Extended; tAngle: Extended;
Found: Boolean; Found: Boolean;
TempTP: TPoint; TempTP: TPoint;
MaxSubPointDist: TPoint;
Begin Begin
MaxSubPointDist := Point(0,0);
For I := 1 To High(DTM.p) Do For I := 1 To High(DTM.p) Do
Begin Begin
DTM.p[I].x := DTM.p[I].x - DTM.p[0].x; DTM.p[I].x := DTM.p[I].x - DTM.p[0].x;
DTM.p[I].y := DTM.p[I].y - DTM.p[0].y; DTM.p[I].y := DTM.p[I].y - DTM.p[0].y;
End; End;
X2 := X2 - MaxSubPointDist.X; DTMBounds(DTM, x1, y1, x2, y2);
Y2 := Y2 - MaxSubPointDist.Y;
X1 := X1 + MaxSubPointDist.X;
Y1 := Y1 + MaxSubPointDist.Y;
{If X2 > X1 then {If X2 > X1 then
//Exit; //Exit;
If Y2 > Y1 then } If Y2 > Y1 then }

View File

@ -37,6 +37,10 @@ type
Possibly add .name too? Possibly add .name too?
Then one could give DTM names, which would be easy for debugging. Then one could give DTM names, which would be easy for debugging.
} }
TBox = record
x1, y1, x2, y2: Integer;
end;
pDTM = record pDTM = record
p: TPointArray; p: TPointArray;
c, t, asz, ash: TIntegerArray; c, t, asz, ash: TIntegerArray;