begin refactoring AppUpdate structure
This commit is contained in:
@@ -1,7 +1,2 @@
|
|||||||
signature UPDATE_MESSAGE =
|
structure UpdateMessage =
|
||||||
sig
|
|
||||||
datatype t = DRAW of DrawMessage.t | FILE of FileMessage.t
|
|
||||||
end
|
|
||||||
|
|
||||||
structure UpdateMessage :> UPDATE_MESSAGE =
|
|
||||||
struct datatype t = DRAW of DrawMessage.t | FILE of FileMessage.t end
|
struct datatype t = DRAW of DrawMessage.t | FILE of FileMessage.t end
|
||||||
|
|||||||
44
temp-squares/fcore/app-update.sml
Normal file
44
temp-squares/fcore/app-update.sml
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
structure AppUpdate =
|
||||||
|
struct
|
||||||
|
open AppType
|
||||||
|
|
||||||
|
open DrawMessage
|
||||||
|
open FileMessage
|
||||||
|
open InputMessage
|
||||||
|
open UpdateMessage
|
||||||
|
|
||||||
|
fun getDotVecFromIndices (model: app_type, hIdx, vIdx) =
|
||||||
|
let
|
||||||
|
val {windowWidth, windowHeight, xClickPoints, yClickPoints, ...} = model
|
||||||
|
val xpos = Vector.sub (xClickPoints, hIdx)
|
||||||
|
val ypos = Vector.sub (yClickPoints, vIdx)
|
||||||
|
|
||||||
|
val endXpos =
|
||||||
|
if hIdx + 1 = Vector.length xClickPoints then
|
||||||
|
xpos
|
||||||
|
else
|
||||||
|
Vector.sub (xClickPoints, hIdx + 1)
|
||||||
|
|
||||||
|
val endYpos =
|
||||||
|
if vIdx + 1 = Vector.length yClickPoints then
|
||||||
|
ypos
|
||||||
|
else
|
||||||
|
Vector.sub (yClickPoints, vIdx + 1)
|
||||||
|
|
||||||
|
val tl =
|
||||||
|
ClickPoints.getDrawDotRgb
|
||||||
|
(xpos, ypos, 1.0, 0.0, 0.0, windowWidth, windowHeight)
|
||||||
|
val tr =
|
||||||
|
ClickPoints.getDrawDotRgb
|
||||||
|
(endXpos, ypos, 1.0, 0.0, 0.0, windowWidth, windowHeight)
|
||||||
|
val bl =
|
||||||
|
ClickPoints.getDrawDotRgb
|
||||||
|
(xpos, endYpos, 1.0, 0.0, 0.0, windowWidth, windowHeight)
|
||||||
|
val br =
|
||||||
|
ClickPoints.getDrawDotRgb
|
||||||
|
(endXpos, endYpos, 1.0, 0.0, 0.0, windowWidth, windowHeight)
|
||||||
|
in
|
||||||
|
Vector.concat [tl, tr, bl, br]
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
@@ -9,4 +9,38 @@ struct
|
|||||||
Vector.tabulate (numPoints + 1, fn idx =>
|
Vector.tabulate (numPoints + 1, fn idx =>
|
||||||
(Real32.fromInt idx * increment) + start)
|
(Real32.fromInt idx * increment) + start)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
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
|
||||||
end
|
end
|
||||||
|
|||||||
23
temp-squares/fcore/ndc.sml
Normal file
23
temp-squares/fcore/ndc.sml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
structure Ndc =
|
||||||
|
struct
|
||||||
|
(* ndc = normalised device coordinates *)
|
||||||
|
fun ltrbToVertex (left, top, right, bottom) =
|
||||||
|
#[ left, bottom
|
||||||
|
, right, bottom
|
||||||
|
, left, top
|
||||||
|
|
||||||
|
, left, top
|
||||||
|
, right, bottom
|
||||||
|
, right, top
|
||||||
|
]
|
||||||
|
|
||||||
|
fun ltrbToVertexRgb (left, top, right, bottom, r, g, b) =
|
||||||
|
#[ left, bottom, r, g, b
|
||||||
|
, right, bottom, r, g, b
|
||||||
|
, left, top, r, g, b
|
||||||
|
|
||||||
|
, left, top, r, g, b
|
||||||
|
, right, bottom, r, g, b
|
||||||
|
, right, top, r, g, b
|
||||||
|
]
|
||||||
|
end
|
||||||
2
temp-squares/message-types/update-msg.sml
Normal file
2
temp-squares/message-types/update-msg.sml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
structure UpdateMessage =
|
||||||
|
struct datatype t = DRAW of DrawMessage.t | FILE of FileMessage.t end
|
||||||
@@ -2,16 +2,22 @@ $(SML_LIB)/basis/basis.mlb
|
|||||||
|
|
||||||
(* FUNCTIONAL CORE *)
|
(* FUNCTIONAL CORE *)
|
||||||
fcore/app-type.sml
|
fcore/app-type.sml
|
||||||
fcore/click-points.sml
|
|
||||||
fcore/app-init.sml
|
|
||||||
fcore/app-with.sml
|
|
||||||
|
|
||||||
ann
|
ann
|
||||||
"allowVectorExps true"
|
"allowVectorExps true"
|
||||||
in
|
in
|
||||||
|
fcore/ndc.sml
|
||||||
fcore/graph-lines.sml
|
fcore/graph-lines.sml
|
||||||
end
|
end
|
||||||
|
|
||||||
|
fcore/click-points.sml
|
||||||
|
fcore/app-init.sml
|
||||||
|
fcore/app-with.sml
|
||||||
|
|
||||||
message-types/draw-msg.sml
|
message-types/draw-msg.sml
|
||||||
message-types/file-msg.sml
|
message-types/file-msg.sml
|
||||||
message-types/input-msg.sml
|
message-types/input-msg.sml
|
||||||
|
message-types/update-msg.sml
|
||||||
|
|
||||||
|
fcore/app-update.sml
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user