Files
web-cad/frontend/src/canvas/SpatialIndex.ts
T

61 lines
1.2 KiB
TypeScript
Raw Normal View History

import RBush from 'rbush';
type BBox = {
minX: number;
minY: number;
maxX: number;
maxY: number;
id?: string;
};
type SpatialItem = {
id: string;
minX: number;
minY: number;
maxX: number;
maxY: number;
[key: string]: any; // Allow additional properties
};
export class SpatialIndex {
private rbush: RBush<SpatialItem>;
constructor() {
this.rbush = new RBush<SpatialItem>();
}
public insert(item: BBox & { id: string }): void {
this.rbush.insert(item as SpatialItem);
}
public remove(item: BBox & { id: string }): void {
// RBush requires the exact same object for removal
// In practice, you might need to search for the item first
this.rbush.remove(item as SpatialItem);
}
public search(bbox: BBox): SpatialItem[] {
return this.rbush.search(bbox);
}
public load(items: (BBox & { id: string })[]): void {
this.rbush.load(items as SpatialItem[]);
}
public clear(): void {
this.rbush.clear();
}
public all(): SpatialItem[] {
return this.rbush.all();
}
public toJSON(): any {
return this.rbush.toJSON();
}
public fromJSON(data: any): void {
this.rbush.fromJSON(data);
}
}