@@ -26,24 +26,38 @@ implementation
2626Distance
2727--------
2828```
29- function Distance(const X1, Y1, X2, Y2: Double): Double;
30- ```
29+ function Distance(X1, Y1, X2, Y2: Double; Algo: EDistanceAlgo = EDistanceAlgo.Euclidean): Double;
30+ ```
31+ Calculates the distance between X1,Y1 and X2,Y2.
32+ If not provided the `Algo` parameter defaults to Euclidean.
33+ But can be any of these:
34+ - `EDistanceAlgo.Euclidean`
35+ - `EDistanceAlgo.EuclideanSq`
36+ - `EDistanceAlgo.Manhattan`
37+ - `EDistanceAlgo.Chebyshev`
3138*)
32- procedure _LapeDistance (const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
39+ procedure _LapeDistance1 (const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
3340begin
34- PDouble(Result)^ := Distance(PDouble(Params^[0 ])^, PDouble(Params^[1 ])^, PDouble(Params^[2 ])^, PDouble(Params^[3 ])^);
41+ PDouble(Result)^ := Distance(PDouble(Params^[0 ])^, PDouble(Params^[1 ])^, PDouble(Params^[2 ])^, PDouble(Params^[3 ])^, EDistanceAlgo(Params^[ 4 ]^) );
3542end ;
3643
3744(*
3845Distance
3946--------
4047```
41- function Distance(const P1, P2: TPoint): Double;
48+ function Distance(P1, P2: TPoint; Algo: EDistanceAlgo = EDistanceAlgo.Euclidean ): Double;
4249```
50+ Calculates the distance between two points.
51+ If not provided the `Algo` parameter defaults to Euclidean.
52+ But can be any of these:
53+ - `EDistanceAlgo.Euclidean`
54+ - `EDistanceAlgo.EuclideanSq`
55+ - `EDistanceAlgo.Manhattan`
56+ - `EDistanceAlgo.Chebyshev`
4357*)
44- procedure _LapeDistanceEx (const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
58+ procedure _LapeDistance2 (const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
4559begin
46- PDouble(Result)^ := Distance(PPoint(Params^[0 ])^, PPoint(Params^[1 ])^);
60+ PDouble(Result)^ := Distance(PPoint(Params^[0 ])^, PPoint(Params^[1 ])^, EDistanceAlgo(Params^[ 2 ]^) );
4761end ;
4862
4963(*
@@ -170,7 +184,7 @@ procedure _LapeLog10(const Params: PParamArray; const Result: Pointer); LAPE_WRA
170184NextPower2
171185----------
172186```
173- function NextPower2(const n: Integer): Integer;
187+ function NextPower2(n: Integer): Integer;
174188```
175189*)
176190procedure _LapeNextPower2 (const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
@@ -182,7 +196,7 @@ procedure _LapeNextPower2(const Params: PParamArray; const Result: Pointer); LAP
182196Modulo
183197------
184198```
185- function Modulo(const X, Y: Integer): Integer;
199+ function Modulo(X, Y: Integer): Integer;
186200```
187201*)
188202procedure _LapeModulo (const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
@@ -194,7 +208,7 @@ procedure _LapeModulo(const Params: PParamArray; const Result: Pointer); LAPE_WR
194208Modulo
195209------
196210```
197- function Modulo(const X, Y: Double): Double;
211+ function Modulo(X, Y: Double): Double;
198212```
199213*)
200214procedure _LapeModuloF (const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
@@ -206,7 +220,7 @@ procedure _LapeModuloF(const Params: PParamArray; const Result: Pointer); LAPE_W
206220DeltaAngle
207221----------
208222```
209- function DeltaAngle(const DegreesA, DegreesB: Double; R: Double = 360): Double;
223+ function DeltaAngle(DegreesA, DegreesB: Double; R: Double = 360): Double;
210224```
211225*)
212226procedure _LapeDeltaAngle (const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
@@ -219,7 +233,7 @@ procedure _LapeDeltaAngle(const Params: PParamArray; const Result: Pointer); LAP
219233CrossProduct
220234------------
221235```
222- function CrossProduct(const r, p, q: TPoint): Int64;
236+ function CrossProduct(r, p, q: TPoint): Int64;
223237```
224238*)
225239procedure _LapeCrossProduct1 (const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
@@ -231,7 +245,7 @@ procedure _LapeCrossProduct1(const Params: PParamArray; const Result: Pointer);
231245CrossProduct
232246------------
233247```
234- function CrossProduct(const rx,ry, px,py, qx,qy: Double): Double;
248+ function CrossProduct(rx,ry, px,py, qx,qy: Double): Double;
235249```
236250*)
237251procedure _LapeCrossProduct2 (const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
@@ -243,7 +257,7 @@ procedure _LapeCrossProduct2(const Params: PParamArray; const Result: Pointer);
243257LinesIntersect
244258--------------
245259```
246- function LinesIntersect(const P1, P2, Q1, Q2: TPoint): Boolean;
260+ function LinesIntersect(P1, P2, Q1, Q2: TPoint): Boolean;
247261```
248262*)
249263procedure _LapeLinesIntersect1 (const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
@@ -255,7 +269,7 @@ procedure _LapeLinesIntersect1(const Params: PParamArray; const Result: Pointer)
255269LinesIntersect
256270--------------
257271```
258- function LinesIntersect(const P1, P2, Q1, Q2: TPoint; out Where: TPoint): Boolean;
272+ function LinesIntersect(P1, P2, Q1, Q2: TPoint; out Where: TPoint): Boolean;
259273```
260274*)
261275procedure _LapeLinesIntersect2 (const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
@@ -267,7 +281,7 @@ procedure _LapeLinesIntersect2(const Params: PParamArray; const Result: Pointer)
267281DistToLine
268282----------
269283```
270- function DistToLine(const P, P1, P2: TPoint; out Nearest: TPoint): Double;
284+ function DistToLine(P, P1, P2: TPoint; out Nearest: TPoint): Double;
271285```
272286*)
273287procedure _LapeDistToLine1 (const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
@@ -279,7 +293,7 @@ procedure _LapeDistToLine1(const Params: PParamArray; const Result: Pointer); LA
279293DistToLine
280294----------
281295```
282- function DistToLine(const P, P1, P2: TPoint): Double;
296+ function DistToLine(P, P1, P2: TPoint): Double;
283297```
284298*)
285299procedure _LapeDistToLine2 (const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
@@ -291,7 +305,7 @@ procedure _LapeDistToLine2(const Params: PParamArray; const Result: Pointer); LA
291305IsNumber
292306--------
293307```
294- function IsNumber(const Value: Single): Boolean;
308+ function IsNumber(Value: Single): Boolean;
295309```
296310*)
297311procedure _LapeIsNumberS (const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
@@ -322,11 +336,13 @@ procedure ImportMath(Script: TSimbaScript);
322336 addGlobalVar(SQRT_3, ' SQRT_3' ).isConstant := True;
323337 addGlobalVar(SQRT_5, ' SQRT_5' ).isConstant := True;
324338
325- addGlobalFunc(' function IsNumber(const Value: Single): Boolean; overload' , @_LapeIsNumberS);
326- addGlobalFunc(' function IsNumber(const Value: Double): Boolean; overload' , @_LapeIsNumberD);
339+ addGlobalType(' enum(Euclidean, EuclideanSq, Manhattan, Chebyshev)' , ' EDistanceAlgo' );
340+
341+ addGlobalFunc(' function IsNumber(Value: Single): Boolean; overload' , @_LapeIsNumberS);
342+ addGlobalFunc(' function IsNumber(Value: Double): Boolean; overload' , @_LapeIsNumberD);
327343
328- addGlobalFunc(' function Distance(const X1, Y1, X2, Y2: Double): Double; overload' , @_LapeDistance );
329- addGlobalFunc(' function Distance(const P1, P2: TPoint): Double; overload' , @_LapeDistanceEx );
344+ addGlobalFunc(' function Distance(X1, Y1, X2, Y2: Double; Algo: EDistanceAlgo = EDistanceAlgo.Euclidean ): Double; overload' , @_LapeDistance1 );
345+ addGlobalFunc(' function Distance(P1, P2: TPoint; Algo: EDistanceAlgo = EDistanceAlgo.Euclidean ): Double; overload' , @_LapeDistance2 );
330346
331347 addGlobalFunc(' function Sar(x: Integer; Shift: Byte): Integer' , @_LapeSar);
332348 addGlobalFunc(' function Ror(x: UInt32; Shift: Byte): UInt32' , @_LapeRor);
@@ -346,15 +362,15 @@ procedure ImportMath(Script: TSimbaScript);
346362 addGlobalFunc(' function Modulo(const X, Y: Integer): Integer; overload' , @_LapeModulo);
347363 addGlobalFunc(' function Modulo(const X, Y: Double): Double; overload' , @_LapeModuloF);
348364
349- addGlobalFunc(' function DeltaAngle(const DegreesA, DegreesB: Double; R: Double = 360): Double' , @_LapeDeltaAngle);
365+ addGlobalFunc(' function DeltaAngle(DegreesA, DegreesB: Double; R: Double = 360): Double' , @_LapeDeltaAngle);
350366
351- addGlobalFunc(' function CrossProduct(const r, p, q: TPoint): Int64; overload' , @_LapeCrossProduct1);
352- addGlobalFunc(' function CrossProduct(const rx,ry, px,py, qx,qy: Double): Double; overload' , @_LapeCrossProduct2);
353- addGlobalFunc(' function LinesIntersect(const P1, P2, Q1, Q2: TPoint): Boolean; overload' , @_LapeLinesIntersect1);
354- addGlobalFunc(' function LinesIntersect(const P1, P2, Q1, Q2: TPoint; out Where: TPoint): Boolean; overload' , @_LapeLinesIntersect2);
367+ addGlobalFunc(' function CrossProduct(r, p, q: TPoint): Int64; overload' , @_LapeCrossProduct1);
368+ addGlobalFunc(' function CrossProduct(rx,ry, px,py, qx,qy: Double): Double; overload' , @_LapeCrossProduct2);
369+ addGlobalFunc(' function LinesIntersect(P1, P2, Q1, Q2: TPoint): Boolean; overload' , @_LapeLinesIntersect1);
370+ addGlobalFunc(' function LinesIntersect(P1, P2, Q1, Q2: TPoint; out Where: TPoint): Boolean; overload' , @_LapeLinesIntersect2);
355371
356- addGlobalFunc(' function DistToLine(const P, P1, P2: TPoint; out Nearest: TPoint): Double; overload' , @_LapeDistToLine1);
357- addGlobalFunc(' function DistToLine(const P, P1, P2: TPoint): Double; overload' , @_LapeDistToLine2);
372+ addGlobalFunc(' function DistToLine(P, P1, P2: TPoint; out Nearest: TPoint): Double; overload' , @_LapeDistToLine1);
373+ addGlobalFunc(' function DistToLine(P, P1, P2: TPoint): Double; overload' , @_LapeDistToLine2);
358374
359375 DumpSection := ' ' ;
360376 end ;
0 commit comments