Rectangle
public defstruct Rectangle <: Shape :
width: Double with: (ensure => non-negative!)
height: Double with: (ensure => non-negative!)
pose: Pose
public defn Rectangle (w:Double, h:Double) :
Rectangle(w, h, loc(0.0, 0.0))
public defn Rectangle (anchor:Anchor, w:Double, h:Double) :
val [vt, hr] = components(anchor)
val dx = match(hr) :
(hr:W) : w / 2.0
(hr:C) : 0.0
(hr:E) : w / -2.0
val dy = match(vt) :
(vt:S) : h / 2.0
(vt:C) : 0.0
(vt:N) : h / -2.0
Rectangle(w, h, loc(dx, dy))
Rectangle(2.0, 3.0, loc(0.0, 0.0))
Rectangle(2.0, 3.0)
Rectangle(C, 2.0, 3.0)