2025-07-06 01:38:02 +01:00
|
|
|
structure ClickPoints =
|
|
|
|
|
struct
|
|
|
|
|
fun generate (start, finish, numPoints) =
|
|
|
|
|
let
|
|
|
|
|
val difference = finish - start
|
|
|
|
|
val increment = Real32.fromInt difference / Real32.fromInt numPoints
|
|
|
|
|
val start = Real32.fromInt start
|
|
|
|
|
in
|
|
|
|
|
Vector.tabulate (numPoints + 1, fn idx =>
|
|
|
|
|
(Real32.fromInt idx * increment) + start)
|
|
|
|
|
end
|
2025-07-06 02:49:38 +01:00
|
|
|
|
|
|
|
|
fun getDrawDot (xpos, ypos, windowWidth, windowHeight) =
|
|
|
|
|
let
|
|
|
|
|
(* calculate normalised device coordinates *)
|
|
|
|
|
val halfWidth = Real32.fromInt (windowWidth div 2)
|
|
|
|
|
val halfHeight = Real32.fromInt (windowHeight div 2)
|
|
|
|
|
val hpos = xpos - halfWidth
|
|
|
|
|
val vpos = ~(ypos - halfHeight)
|
|
|
|
|
|
|
|
|
|
(* coordinates to form small box around clicked area *)
|
|
|
|
|
val left = (hpos - 5.0) / halfWidth
|
|
|
|
|
val right = (hpos + 5.0) / halfWidth
|
|
|
|
|
val bottom = (vpos - 5.0) / halfHeight
|
|
|
|
|
val top = (vpos + 5.0) / halfHeight
|
|
|
|
|
in
|
|
|
|
|
Ndc.ltrbToVertex (left, top, right, bottom)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
fun getDrawDotRgb (xpos, ypos, r, g, b, windowWidth, windowHeight) =
|
|
|
|
|
let
|
|
|
|
|
(* calculate normalised device coordinates *)
|
|
|
|
|
val halfWidth = Real32.fromInt (windowWidth div 2)
|
|
|
|
|
val halfHeight = Real32.fromInt (windowHeight div 2)
|
|
|
|
|
val hpos = xpos - halfWidth
|
|
|
|
|
val vpos = ~(ypos - halfHeight)
|
|
|
|
|
|
|
|
|
|
(* coordinates to form small box around clicked area *)
|
|
|
|
|
val left = (hpos - 5.0) / halfWidth
|
|
|
|
|
val right = (hpos + 5.0) / halfWidth
|
|
|
|
|
val bottom = (vpos - 5.0) / halfHeight
|
|
|
|
|
val top = (vpos + 5.0) / halfHeight
|
|
|
|
|
in
|
|
|
|
|
Ndc.ltrbToVertexRgb (left, top, right, bottom, r, g, b)
|
|
|
|
|
end
|
2025-07-06 01:38:02 +01:00
|
|
|
end
|