penpot/frontend/src/app/util/kdtree.cljs
2022-09-20 23:23:22 +02:00

30 lines
935 B
Clojure

;; This Source Code Form is subject to the terms of the Mozilla Public
;; License, v. 2.0. If a copy of the MPL was not distributed with this
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
;;
;; Copyright (c) KALEIDOS INC
(ns app.util.kdtree
"A cljs layer on top of js impl of kdtree located in `kdtree_impl.js`."
(:require [app.util.kdtree-impl :as impl]))
(defn create
"Create an empty or initialized kd-tree instance."
([] (impl/create))
([points] (impl/create (clj->js points))))
(defn setup!
"Generate new kd-tree instance with provided generation parameter
or just return a previously created from internal LRU cache."
[t w h ws hs]
(impl/setup t w h ws hs))
(defn nearest
"Search nearest points to the provided point
and return the `n` maximum results."
([t p]
(nearest t p 10))
([t p n]
{:pre [(vector? p)]}
(let [p (into-array p)]
(map clj->js (impl/nearest t p n)))))