diff --git a/Doc/sphinx/features/exten.rst b/Doc/sphinx/features/exten.rst index 861594f..8b2b18a 100644 --- a/Doc/sphinx/features/exten.rst +++ b/Doc/sphinx/features/exten.rst @@ -14,9 +14,17 @@ Recommended Simba Extensions ---------------------------- Recommended: - * SRL Updater (and Downloader) - * DTM Editor + + * Extension Updater (highly recommended) + * SRL Updater (and Installer/Download) * Associate Files + * Security extension. (Implements a File and Fire wall) + +For developers: + + * DTM Editor + * Paster Extension + * CRov, Crash Recovery. .. note:: You can also use the Reflection Updater (and Downloader) for updating diff --git a/Doc/sphinx/features/scriptmanager.rst b/Doc/sphinx/features/scriptmanager.rst index 774bacb..e574b01 100644 --- a/Doc/sphinx/features/scriptmanager.rst +++ b/Doc/sphinx/features/scriptmanager.rst @@ -1,5 +1,5 @@ Simba Script Manager ==================== -Community-created scripts will be available for download from the +Community-created scripts will be available for download from the Script Manager. The script manager will appear in release 1.0. diff --git a/Projects/Simba/Simba.lpi b/Projects/Simba/Simba.lpi index 98b9499..3d3d76c 100644 --- a/Projects/Simba/Simba.lpi +++ b/Projects/Simba/Simba.lpi @@ -35,20 +35,16 @@ - + - - - - - - + + - + - + @@ -308,10 +304,19 @@ + + + + + + + + + - + diff --git a/Projects/Simba/Simba.lpr b/Projects/Simba/Simba.lpr index ac13155..26c37db 100644 --- a/Projects/Simba/Simba.lpr +++ b/Projects/Simba/Simba.lpr @@ -33,7 +33,7 @@ uses {$ENDIF}{$ENDIF} Interfaces, Forms, SimbaUnit, colourhistory, About, internets, debugimage, framefunctionlist, simpleanalyzer, updater, updateform, Simbasettings, - libloader, mufasabase, v_ideCodeInsight, + libloader, mufasabase, tpa, v_ideCodeInsight, PSDump, v_ideCodeParser, v_AutoCompleteForm, CastaliaPasLex, CastaliaPasLexTypes, CastaliaSimplePasPar, CastaliaSimplePasParTypes, dcpbase64, mPasLex, v_Constants, v_MiscFunctions, diff --git a/Projects/Simba/Simba.res b/Projects/Simba/Simba.res index 42c7633..0087bd7 100644 Binary files a/Projects/Simba/Simba.res and b/Projects/Simba/Simba.res differ diff --git a/Units/MMLAddon/PSInc/Wrappers/tpa.inc b/Units/MMLAddon/PSInc/Wrappers/tpa.inc index 0c7c547..c35a0a3 100644 --- a/Units/MMLAddon/PSInc/Wrappers/tpa.inc +++ b/Units/MMLAddon/PSInc/Wrappers/tpa.inc @@ -143,6 +143,11 @@ begin FilterPointsLine(points,radial,radius,mx,my); end; +procedure ps_FilterTPADist(var TPA: TPointArray; maxDist: integer); +begin + FilterTPADist(TPA, maxDist); +end; + function ps_GetATPABounds(const ATPA: T2DPointArray): TBox;extdecl; begin result := GetATPABounds(ATPA); diff --git a/Units/MMLAddon/PSInc/psexportedmethods.inc b/Units/MMLAddon/PSInc/psexportedmethods.inc index 4dad21c..42b7b3c 100644 --- a/Units/MMLAddon/PSInc/psexportedmethods.inc +++ b/Units/MMLAddon/PSInc/psexportedmethods.inc @@ -458,6 +458,7 @@ AddFunction(@ps_FloodFillTPA,'function FloodFillTPA(const TPA : TPointArray) : T AddFunction(@ps_FilterPointsPie,'procedure FilterPointsPie(var Points: TPointArray; const SD, ED, MinR, MaxR: Extended; Mx, My: Integer);'); AddFunction(@ps_FilterPointsLine,'procedure FilterPointsLine(var Points: TPointArray; Radial: Extended; Radius, MX, MY: Integer);'); AddFunction(@ps_filterpointsdist,'procedure FilterPointsDist(var Points: TPointArray; const MinDist, MaxDist: Extended; Mx, My: Integer);'); +AddFunction(@ps_filterTPADist, 'procedure FilterTPADist(var TPA: TPointArray; maxDist: integer);'); AddFunction(@ps_GetATPABounds,'function GetATPABounds(const ATPA: T2DPointArray): TBox;'); AddFunction(@ps_GetTPABounds,'function GetTPABounds(const TPA: TPointArray): TBox;'); AddFunction(@ps_FindTPAinTPA,'function FindTPAinTPA(const SearchTPA, TotalTPA: TPointArray; var Matches: TPointArray): Boolean;'); diff --git a/Units/MMLCore/tpa.pas b/Units/MMLCore/tpa.pas index 9c0abae..ea6b6c9 100644 --- a/Units/MMLCore/tpa.pas +++ b/Units/MMLCore/tpa.pas @@ -67,6 +67,7 @@ function FloodFillTPA(const TPA : TPointArray) : T2DPointArray; procedure FilterPointsPie(var Points: TPointArray; const SD, ED, MinR, MaxR: Extended; Mx, My: Integer); procedure FilterPointsDist(var Points: TPointArray; const MinDist,MaxDist: Extended; Mx, My: Integer); procedure FilterPointsLine(var Points: TPointArray; Radial: Extended; Radius, MX, MY: Integer); +procedure FilterTPADist(var TPA: TPointArray; maxDist: integer); function RemoveDistTPointArray(x, y, dist: Integer;const ThePoints: TPointArray; RemoveHigher: Boolean): TPointArray; function GetATPABounds(const ATPA: T2DPointArray): TBox; function GetTPABounds(const TPA: TPointArray): TBox; @@ -1168,6 +1169,55 @@ begin Points:= P; end; +{/\ + Removes points in the TPA that are within maxDist of each other. +/\} +procedure FilterTPADist(var TPA: TPointArray; maxDist: integer); +var + c, i, j, l, h, maxDistSq: integer; + newTPA: TPointArray; + inBadElements: TBooleanArray; +begin + h := high(TPA); + l := (h + 1); + maxDistSq := (maxDist * maxDist); + + setLength(inBadElements, l); + setLength(newTPA, l); + + for i := 0 to h do + inBadElements[i] := false; + + for i := 0 to (h - 1) do + begin + if (inBadElements[i]) then + continue; + + for j := (i + 1) to h do + begin + if (inBadElements[j]) then + continue; + + // simplified -> a^2 + b^2 <= c^2 + if (((TPA[i].x - TPA[j].x) * (TPA[i].x - TPA[j].x)) + ((TPA[i].y - TPA[j].y) * (TPA[i].y - TPA[j].y)) <= maxDistSq) then + inBadElements[j] := true; + end; + end; + + c := 0; + + // set the new TPA + for i := 0 to h do + if (not inBadElements[i]) then + begin + newTPA[c] := TPA[i]; + inc(c); + end; + + setLength(newTPA, c); + TPA := newTPA; +end; + {/\ Removes the points that are inside or outside the distance Dist from the point (x, y) from the TPointArray ThePoints. /\}