mirror of
https://github.com/penpot/penpot.git
synced 2025-12-12 06:24:17 +01:00
✨ Add reader tag support for geom matrix
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
{penpot/inst app.common.time/inst
|
{penpot/inst app.common.time/inst
|
||||||
penpot/cron app.util.cron/cron
|
penpot/cron app.util.cron/cron
|
||||||
penpot/duration app.common.time/duration
|
penpot/duration app.common.time/duration
|
||||||
|
penpot/matrix app.common.geom.matrix/decode-matrix
|
||||||
penpot/point app.common.geom.point/decode-point}
|
penpot/point app.common.geom.point/decode-point}
|
||||||
|
|||||||
@@ -7,8 +7,6 @@
|
|||||||
(ns app.common.geom.matrix
|
(ns app.common.geom.matrix
|
||||||
(:require
|
(:require
|
||||||
#?(:clj [app.common.fressian :as fres])
|
#?(:clj [app.common.fressian :as fres])
|
||||||
#?(:cljs [cljs.pprint :as pp]
|
|
||||||
:clj [clojure.pprint :as pp])
|
|
||||||
[app.common.data :as d]
|
[app.common.data :as d]
|
||||||
[app.common.data.macros :as dm]
|
[app.common.data.macros :as dm]
|
||||||
[app.common.geom.point :as gpt]
|
[app.common.geom.point :as gpt]
|
||||||
@@ -17,32 +15,15 @@
|
|||||||
[app.common.schema :as sm]
|
[app.common.schema :as sm]
|
||||||
[app.common.schema.generators :as sg]
|
[app.common.schema.generators :as sg]
|
||||||
[app.common.schema.openapi :as-alias oapi]
|
[app.common.schema.openapi :as-alias oapi]
|
||||||
[app.common.spec :as us]
|
|
||||||
[app.common.transit :as t]
|
[app.common.transit :as t]
|
||||||
[clojure.spec.alpha :as s])
|
[clojure.pprint :as pp])
|
||||||
#?(:clj
|
#?(:clj
|
||||||
(:import
|
(:import
|
||||||
java.util.List)))
|
java.util.List)))
|
||||||
|
|
||||||
|
|
||||||
(def precision 6)
|
(def precision 6)
|
||||||
|
|
||||||
;; --- Matrix Impl
|
;; --- Matrix Impl
|
||||||
(cr/defrecord Matrix [^double a
|
|
||||||
^double b
|
|
||||||
^double c
|
|
||||||
^double d
|
|
||||||
^double e
|
|
||||||
^double f]
|
|
||||||
Object
|
|
||||||
(toString [this]
|
|
||||||
(dm/fmt "matrix(%, %, %, %, %, %)"
|
|
||||||
(mth/to-fixed (.-a this) precision)
|
|
||||||
(mth/to-fixed (.-b this) precision)
|
|
||||||
(mth/to-fixed (.-c this) precision)
|
|
||||||
(mth/to-fixed (.-d this) precision)
|
|
||||||
(mth/to-fixed (.-e this) precision)
|
|
||||||
(mth/to-fixed (.-f this) precision))))
|
|
||||||
|
|
||||||
(defn format-precision
|
(defn format-precision
|
||||||
[mtx precision]
|
[mtx precision]
|
||||||
@@ -55,6 +36,16 @@
|
|||||||
(mth/to-fixed (.-e mtx) precision)
|
(mth/to-fixed (.-e mtx) precision)
|
||||||
(mth/to-fixed (.-f mtx) precision))))
|
(mth/to-fixed (.-f mtx) precision))))
|
||||||
|
|
||||||
|
(cr/defrecord Matrix [^double a
|
||||||
|
^double b
|
||||||
|
^double c
|
||||||
|
^double d
|
||||||
|
^double e
|
||||||
|
^double f]
|
||||||
|
Object
|
||||||
|
(toString [this]
|
||||||
|
(format-precision this precision)))
|
||||||
|
|
||||||
(defn matrix?
|
(defn matrix?
|
||||||
"Return true if `v` is Matrix instance."
|
"Return true if `v` is Matrix instance."
|
||||||
[v]
|
[v]
|
||||||
@@ -141,20 +132,6 @@
|
|||||||
::oapi/type "string"
|
::oapi/type "string"
|
||||||
::oapi/format "matrix"}}))
|
::oapi/format "matrix"}}))
|
||||||
|
|
||||||
;; FIXME: deprecated
|
|
||||||
(s/def ::a ::us/safe-float)
|
|
||||||
(s/def ::b ::us/safe-float)
|
|
||||||
(s/def ::c ::us/safe-float)
|
|
||||||
(s/def ::d ::us/safe-float)
|
|
||||||
(s/def ::e ::us/safe-float)
|
|
||||||
(s/def ::f ::us/safe-float)
|
|
||||||
|
|
||||||
(s/def ::matrix-attrs
|
|
||||||
(s/keys :req-un [::a ::b ::c ::d ::e ::f]))
|
|
||||||
|
|
||||||
(s/def ::matrix
|
|
||||||
(s/and ::matrix-attrs matrix?))
|
|
||||||
|
|
||||||
(defn close?
|
(defn close?
|
||||||
[^Matrix m1 ^Matrix m2]
|
[^Matrix m1 ^Matrix m2]
|
||||||
(and ^boolean (mth/close? (.-a m1) (.-a m2))
|
(and ^boolean (mth/close? (.-a m1) (.-a m2))
|
||||||
@@ -437,6 +414,20 @@
|
|||||||
^boolean (mth/almost-zero? (dm/get-prop m :c))
|
^boolean (mth/almost-zero? (dm/get-prop m :c))
|
||||||
^boolean (mth/almost-zero? (- (dm/get-prop m :d) 1))))
|
^boolean (mth/almost-zero? (- (dm/get-prop m :d) 1))))
|
||||||
|
|
||||||
|
#?(:clj
|
||||||
|
(defmethod print-method Matrix
|
||||||
|
[o w]
|
||||||
|
(print-dup o w)))
|
||||||
|
|
||||||
|
#?(:clj
|
||||||
|
(defmethod print-dup Matrix
|
||||||
|
[^Matrix mtx ^java.io.Writer writer]
|
||||||
|
(.write writer (str "#penpot/matrix \"" (matrix->str mtx) "\""))))
|
||||||
|
|
||||||
|
(defmethod pp/simple-dispatch Matrix
|
||||||
|
[obj]
|
||||||
|
(pr obj))
|
||||||
|
|
||||||
#?(:clj
|
#?(:clj
|
||||||
(fres/add-handlers!
|
(fres/add-handlers!
|
||||||
{:name "penpot/matrix"
|
{:name "penpot/matrix"
|
||||||
|
|||||||
Reference in New Issue
Block a user