Skip to content

Commit f79e177

Browse files
committed
More comprehensive parameters for kdtree
1 parent 3c1d19b commit f79e177

2 files changed

Lines changed: 113 additions & 176 deletions

File tree

Source/script/imports/simba.import_kdtree.pas

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,27 @@ function TKDTree.InitBranch(): Integer;
5555
function TKDTree.Copy(): TKDTree;
5656
procedure TKDTree.Init(const AData: TKDItems);
5757
function TKDTree.IndexOf(const Value: TSingleArray): Integer;
58-
function TKDTree.KNearest(Vector: TSingleArray; K: Integer; NotEqual: Boolean = False): TKDItems;
59-
function TKDTree.KNearestIndex(Vector: TSingleArray; K: Integer; NotEqual: Boolean = False): TIntegerArray;
60-
function TKDTree.RangeQuery(Low, High: TSingleArray): TKDItems;
61-
function TKDTree.RangeQueryEx(Center: TSingleArray; Radii: TSingleArray; Hide: Boolean): TKDItems;
58+
function TKDTree.KNearest(Vector: TSingleArray; K: Integer; Setting: TTreeSettings=[]; WorkingRef:Int32=NONE): TKDItems;
59+
function TKDTree.KNearestIndex(Vector: TSingleArray; K: Integer; Setting: TTreeSettings=[]; WorkingRef:Int32=NONE): TIntegerArray;
60+
function TKDTree.RangeQuery(Low, High: TSingleArray; Setting: TTreeSettings = []; WorkingRef: Integer = NONE): TKDItems;
61+
function TKDTree.RangeQueryEx(Center: TSingleArray; Radii: TSingleArray; Setting: TTreeSettings = []; WorkingRef: Integer = NONE): TKDItems;
6262
function TKDTree.KNearestClassify(Vector: TSingleArray; K: Integer): Integer;
6363
function TKDTree.WeightedKNearestClassify(Vector: TSingleArray; K: Integer): Integer;
6464
function TKDTree.Clusters(Radii: TSingleArray): T2DKDItems;
6565
```
66+
67+
The flags you can set:
68+
```
69+
ETreeSetting = (
70+
tsNotEqual, // if this exact vector is matched it should be ignored and not returned
71+
tsHideResult, // hides all the resulting nodes if this flag is set
72+
tsRefSensitive, // you may pass a reference group and only scan within it's ID
73+
tsIgnoreHidden // ignores that the node is hidden
74+
);
75+
76+
TTreeSettings = set of ETreeSetting;
77+
```
78+
6679
*)
6780

6881
(*
@@ -128,33 +141,42 @@ procedure _LapeKDTreeIndexOf(const Params: PParamArray; const Result: Pointer);
128141
PInteger(Result)^ := TKDTree(Params^[0]^).IndexOf(TSingleArray(Params^[1]^));
129142
end;
130143

144+
(*
145+
TKDTree.KNearest
146+
---------------------
147+
```
148+
function TKDTree.KNearest(Vector: TSingleArray; K: Integer; Setting: TTreeSettings=[]; WorkingRef:Int32=NONE): TIntegerArray;
149+
```
150+
151+
Returns an array that with the k elements (vectors) that are nearby the given vector.
152+
*)
131153
procedure _LapeKDTreeKNearest(const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
132154
begin
133-
TKDItems(Result^) := TKDTree(Params^[0]^).KNearest(TSingleArray(Params^[1]^), Integer(Params^[2]^), Boolean(Params^[3]^));
155+
TKDItems(Result^) := TKDTree(Params^[0]^).KNearest(TSingleArray(Params^[1]^), Integer(Params^[2]^), TTreeSettings(Params^[3]^), Integer(Params^[4]^));
134156
end;
135157

136158
(*
137159
TKDTree.KNearestIndex
138160
---------------------
139161
```
140-
function TKDTree.KNearestIndex(Vector: TSingleArray; K: Integer; NotEqual: Boolean = False): TIntegerArray;
162+
function TKDTree.KNearestIndex(Vector: TSingleArray; K: Integer; Setting: TTreeSettings=[]; WorkingRef:Int32=NONE): TIntegerArray;
141163
```
142164
143165
Returns an array that with indices that can be used to access the kdtree data directly if needed. As an alterantive to getting the vector itself.
144166
*)
145167
procedure _LapeKDTreeKNearestIndex(const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
146168
begin
147-
TIntegerArray(Result^) := TKDTree(Params^[0]^).KNearestIndex(TSingleArray(Params^[1]^), Integer(Params^[2]^), Boolean(Params^[3]^));
169+
TIntegerArray(Result^) := TKDTree(Params^[0]^).KNearestIndex(TSingleArray(Params^[1]^), Integer(Params^[2]^), TTreeSettings(Params^[3]^), Integer(Params^[4]^));
148170
end;
149171

150172
procedure _LapeKDTreeRangeQuery(const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
151173
begin
152-
TKDItems(Result^) := TKDTree(Params^[0]^).RangeQuery(TSingleArray(Params^[1]^), TSingleArray(Params^[2]^));
174+
TKDItems(Result^) := TKDTree(Params^[0]^).RangeQuery(TSingleArray(Params^[1]^), TSingleArray(Params^[2]^), TTreeSettings(Params^[3]^), Integer(Params^[4]^));
153175
end;
154176

155177
procedure _LapeKDTreeRangeQueryEx(const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
156178
begin
157-
TKDItems(Result^) := TKDTree(Params^[0]^).RangeQueryEx(TSingleArray(Params^[1]^), TSingleArray(Params^[2]^), Boolean(Params^[3]^));
179+
TKDItems(Result^) := TKDTree(Params^[0]^).RangeQueryEx(TSingleArray(Params^[1]^), TSingleArray(Params^[2]^), TTreeSettings(Params^[3]^), Integer(Params^[4]^));
158180
end;
159181

160182
(*
@@ -224,6 +246,8 @@ procedure ImportKDTree(Script: TSimbaScript);
224246
with Script.Compiler do
225247
begin
226248
//DumpSection := 'KDTree';
249+
addGlobalType('(NotEqual, HideResult, RefSensitive, IgnoreHidden);', 'ETreeSetting');
250+
addGlobalType('set of ETreeSetting;', 'TTreeSettings');
227251

228252
addGlobalType('record Ref: Integer; Vector: TSingleArray; end;', 'TKDItem');
229253
addGlobalType('record Split: TKDItem; L, R: Integer; Hidden: Boolean; end;', 'TKDNode');
@@ -237,10 +261,10 @@ procedure ImportKDTree(Script: TSimbaScript);
237261

238262
addGlobalFunc('function TKDTree.Copy(): TKDTree;', @_LapeKDTreeCopy);
239263
addGlobalFunc('function TKDTree.IndexOf(const Value: TSingleArray): Integer;', @_LapeKDTreeIndexOf);
240-
addGlobalFunc('function TKDTree.KNearest(Vector: TSingleArray; K: Integer; NotEqual: Boolean = False): TKDItems;', @_LapeKDTreeKNearest);
241-
addGlobalFunc('function TKDTree.KNearestIndex(Vector: TSingleArray; K: Integer; NotEqual: Boolean = False): TIntegerArray;', @_LapeKDTreeKNearestIndex);
242-
addGlobalFunc('function TKDTree.RangeQuery(Low, High: TSingleArray): TKDItems;', @_LapeKDTreeRangeQuery);
243-
addGlobalFunc('function TKDTree.RangeQueryEx(Center: TSingleArray; Radii: TSingleArray; Hide: Boolean): TKDItems;', @_LapeKDTreeRangeQueryEx);
264+
addGlobalFunc('function TKDTree.KNearest(Vector: TSingleArray; K: Integer; Setting: TTreeSettings = []; WorkingRef: Integer = -1): TKDItems;', @_LapeKDTreeKNearest);
265+
addGlobalFunc('function TKDTree.KNearestIndex(Vector: TSingleArray; K: Integer; Setting: TTreeSettings = []; WorkingRef: Integer = -1): TIntegerArray;', @_LapeKDTreeKNearestIndex);
266+
addGlobalFunc('function TKDTree.RangeQuery(Low, High: TSingleArray; Setting: TTreeSettings = []; WorkingRef: Integer = -1): TKDItems;', @_LapeKDTreeRangeQuery);
267+
addGlobalFunc('function TKDTree.RangeQueryEx(Center: TSingleArray; Radii: TSingleArray; Setting: TTreeSettings = []; WorkingRef: Integer = -1): TKDItems;', @_LapeKDTreeRangeQueryEx);
244268
addGlobalFunc('function TKDTree.KNearestClassify(Vector: TSingleArray; K: Integer): Integer;', @_LapeKDTreeKNearestClassify);
245269
addGlobalFunc('function TKDTree.WeightedKNearestClassify(Vector: TSingleArray; K: Integer): Integer;', @_LapeKDTreeWeightedKNearestClassify);
246270
addGlobalFunc('function TKDTree.Clusters(Radii: TSingleArray): T2DKDItems;', @_LapeKDTreeClusters);

0 commit comments

Comments
 (0)