progress fixing bugs in generated export string
This commit is contained in:
@@ -25,16 +25,14 @@ struct
|
|||||||
fun fromPixelX (xpos, windowWidth, windowHeight) =
|
fun fromPixelX (xpos, windowWidth, windowHeight) =
|
||||||
let
|
let
|
||||||
val halfWidth = Real32.fromInt windowWidth / 2.0
|
val halfWidth = Real32.fromInt windowWidth / 2.0
|
||||||
val xpos = xpos - halfWidth
|
|
||||||
in
|
in
|
||||||
xpos / halfWidth
|
(xpos - halfWidth) / halfWidth
|
||||||
end
|
end
|
||||||
|
|
||||||
fun fromPixelY (ypos, windowWidth, windowHeight) =
|
fun fromPixelY (ypos, windowWidth, windowHeight) =
|
||||||
let
|
let
|
||||||
val halfHeight = Real32.fromInt windowHeight / 2.0
|
val halfHeight = Real32.fromInt windowHeight / 2.0
|
||||||
val ypos = ~(ypos - halfHeight)
|
|
||||||
in
|
in
|
||||||
ypos / halfHeight
|
~((ypos - halfHeight) / halfHeight)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -500,67 +500,55 @@ struct
|
|||||||
|
|
||||||
fun intToRealString num =
|
fun intToRealString num =
|
||||||
let
|
let
|
||||||
val result = Real32.fromInt num
|
val result = Real.fromInt num
|
||||||
val result = Real32.toString result
|
val result = Real.toString result
|
||||||
in
|
in
|
||||||
if String.isSubstring "." result then result else result ^ ".0"
|
if String.isSubstring "." result then result else result ^ ".0"
|
||||||
end
|
end
|
||||||
|
|
||||||
fun colToRealString col =
|
fun colToRealString col =
|
||||||
let
|
let
|
||||||
val result = Real32.fromInt col / 255.0
|
val result = Real.fromInt col / 255.0
|
||||||
val result = Real32.toString result
|
val result = Real.toString result
|
||||||
in
|
in
|
||||||
if String.isSubstring "." result then result else result ^ ".0"
|
if String.isSubstring "." result then result else result ^ ".0"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
fun makeXString x =
|
||||||
|
let val x = intToRealString x
|
||||||
|
in "xToNdc (xOffset, " ^ x ^ ", scale, halfWidth)"
|
||||||
|
end
|
||||||
|
|
||||||
|
fun makeEndXString (startX, endX) =
|
||||||
|
let val endX = intToRealString endX
|
||||||
|
in "endXToNdc (xOffset, " ^ startX ^ ", " ^ endX ^ ", scale, halfWidth)"
|
||||||
|
end
|
||||||
|
|
||||||
|
fun makeYString y =
|
||||||
|
let val y = intToRealString y
|
||||||
|
in "yToNdc (yOffset, " ^ y ^ ", scale, halfHeight)"
|
||||||
|
end
|
||||||
|
|
||||||
|
fun makeEndYString (startY, endY) =
|
||||||
|
let val endY = intToRealString endY
|
||||||
|
in "endYToNdc (yOffset, " ^ startY ^ ", " ^ endY ^ ", scale, halfHeight)"
|
||||||
|
end
|
||||||
|
|
||||||
fun toExportStringFolder ({x, ex, y, ey, data = {r, g, b, a}}, acc) =
|
fun toExportStringFolder ({x, ex, y, ey, data = {r, g, b, a}}, acc) =
|
||||||
let
|
let
|
||||||
val x = intToRealString x
|
val x = makeXString x
|
||||||
val y = intToRealString y
|
val y = makeYString y
|
||||||
val ex = intToRealString ex
|
val ex = makeEndXString (x, ex)
|
||||||
val ey = intToRealString ey
|
val ey = makeYString ey
|
||||||
val r = colToRealString r
|
val r = colToRealString r
|
||||||
val g = colToRealString g
|
val g = colToRealString g
|
||||||
val b = colToRealString b
|
val b = colToRealString b
|
||||||
|
|
||||||
val x = String.concat ["(((x + ", x, ") - halfWidth) / halfWidth)"]
|
|
||||||
val y = String.concat ["((~(y + ", y, ") - halfHeight) / halfHeight)"]
|
|
||||||
|
|
||||||
val ex = String.concat
|
|
||||||
[ "((((("
|
|
||||||
, "("
|
|
||||||
, ex
|
|
||||||
, "+ x)"
|
|
||||||
, " - "
|
|
||||||
, x
|
|
||||||
, ") "
|
|
||||||
, "* scale) + "
|
|
||||||
, x
|
|
||||||
, ") - halfWidth) / halfWidth)"
|
|
||||||
]
|
|
||||||
|
|
||||||
val ey = String.concat
|
|
||||||
[ "("
|
|
||||||
, "("
|
|
||||||
, "("
|
|
||||||
, "("
|
|
||||||
, "("
|
|
||||||
, "("
|
|
||||||
, ey
|
|
||||||
, "+ y)"
|
|
||||||
, " - "
|
|
||||||
, y
|
|
||||||
, ")"
|
|
||||||
, "* scale) + "
|
|
||||||
, y
|
|
||||||
, ") - halfHeight) / halfHeight)"
|
|
||||||
]
|
|
||||||
in
|
|
||||||
(* based on triangle order formed by `Ndc.ltrbToVertexRgb` function *)
|
(* based on triangle order formed by `Ndc.ltrbToVertexRgb` function *)
|
||||||
x :: ey :: r :: g :: b :: ex :: ey :: r :: g :: b :: x :: y :: r :: g :: b
|
val item = String.concatWith ",\n"
|
||||||
:: x :: y :: r :: g :: b :: ex :: ey :: r :: g :: b :: ex :: y :: r :: g
|
[x, ey, ex, ey, x, y, x, y, ex, ey, ex, y]
|
||||||
:: b :: acc
|
in
|
||||||
|
item :: acc
|
||||||
end
|
end
|
||||||
|
|
||||||
fun toExportString (squares, canvasWidth, canvasHeight) =
|
fun toExportString (squares, canvasWidth, canvasHeight) =
|
||||||
@@ -571,19 +559,35 @@ struct
|
|||||||
|
|
||||||
val coords = BinTree.foldr (toExportStringFolder, bintree, [])
|
val coords = BinTree.foldr (toExportStringFolder, bintree, [])
|
||||||
val coords = String.concatWith ",\n" coords
|
val coords = String.concatWith ",\n" coords
|
||||||
|
in
|
||||||
val header = String.concat
|
String.concat
|
||||||
[ "structure AAA = \nstruct\n"
|
[ "structure AAA = \nstruct\n"
|
||||||
, " fun lerp (x, y, scale, windowWidth, windowHeight) =\n"
|
|
||||||
|
, " fun xToNdc (xOffset, xpos, scale, halfWidth) =\n"
|
||||||
|
, " ((xpos * scale + xOffset) - halfWidth) / halfWidth\n\n"
|
||||||
|
|
||||||
|
, " fun endXToNdc (xOffset, startX, endX, scale, halfWidth) =\n"
|
||||||
|
, " (((endX - startX) * scale + xOffset) - halfWidth) / halfWidth\n\n"
|
||||||
|
|
||||||
|
, " fun yToNdc (yOffset, ypos, scale, halfHeight) =\n"
|
||||||
|
, " ~(((ypos * scale + yOffset) - halfHeight) / halfHeight)\n\n"
|
||||||
|
|
||||||
|
, " fun endYToNdc (yOffset, startY, endY, scale, halfHeight) =\n"
|
||||||
|
, " ~((((endY - startY) * scale + yOffset) - halfHeight) / halfHeight)\n\n"
|
||||||
|
|
||||||
|
, " fun lerp (xOffset, yOffset, scale, windowWidth, windowHeight) =\n"
|
||||||
, " let\n"
|
, " let\n"
|
||||||
, " val halfWidth = Real32.fromInt windowWidth / 2.0\n"
|
, " val windowWidth = Real32.fromInt windowWidth\n"
|
||||||
, " val halfHeight = Real32.fromInt windowHeight / 2.0\n"
|
, " val halfWidth = windowWidth / 2.0\n"
|
||||||
|
, " val windowHeight = Real32.fromInt windowHeight\n"
|
||||||
|
, " val halfHeight = windowHeight / 2.0\n"
|
||||||
, " in\n"
|
, " in\n"
|
||||||
, " #[\n"
|
, " #[\n"
|
||||||
|
, coords
|
||||||
|
, "\n"
|
||||||
|
, " ]\n"
|
||||||
|
, " end\n"
|
||||||
|
, "end\n"
|
||||||
]
|
]
|
||||||
|
|
||||||
val footer = String.concat ["\n ]\n", " end\n", "end\n"]
|
|
||||||
in
|
|
||||||
String.concat [header, coords, footer]
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
4 4 { {0 0 1 0 0 0 0 1 } {1 0 1 1 0 0 0 1 } {2 1 2 4 0 0 0 1 } {2 3 3 4 0 0 0 1 } }
|
50 50 { {0 0 4 4 0 0 0 1 } {0 45 4 50 0 0 0 1 } {45 0 49 4 0 0 0 1 } {45 45 49 50 0 0 0 1 } }
|
||||||
|
|||||||
73
green.sml
Normal file
73
green.sml
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
structure AAA =
|
||||||
|
struct
|
||||||
|
fun xToNdc (xOffset, xpos, scale, halfWidth) =
|
||||||
|
((xpos * scale + xOffset) - halfWidth) / halfWidth
|
||||||
|
|
||||||
|
fun endXToNdc (xOffset, startX, endX, scale, halfWidth) =
|
||||||
|
(((endX - startX) * scale + xOffset) - halfWidth) / halfWidth
|
||||||
|
|
||||||
|
fun yToNdc (yOffset, ypos, scale, halfHeight) =
|
||||||
|
~(((ypos * scale + yOffset) - halfHeight) / halfHeight)
|
||||||
|
|
||||||
|
fun endYToNdc (yOffset, startY, endY, scale, halfHeight) =
|
||||||
|
~((((endY - startY) * scale + yOffset) - halfHeight) / halfHeight)
|
||||||
|
|
||||||
|
fun lerp (xOffset, yOffset, scale, windowWidth, windowHeight) =
|
||||||
|
let
|
||||||
|
val windowWidth = Real32.fromInt windowWidth
|
||||||
|
val windowHeight = Real32.fromInt windowHeight
|
||||||
|
val halfWidth = windowWidth / 2.0
|
||||||
|
val halfHeight = windowHeight / 2.0
|
||||||
|
in
|
||||||
|
#[
|
||||||
|
xToNdc (xOffset, 0.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 4.0, scale, halfHeight),
|
||||||
|
endXToNdc (xOffset, xToNdc (xOffset, 0.0, scale, halfWidth), 4.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 4.0, scale, halfHeight),
|
||||||
|
xToNdc (xOffset, 0.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 0.0, scale, halfHeight),
|
||||||
|
xToNdc (xOffset, 0.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 0.0, scale, halfHeight),
|
||||||
|
endXToNdc (xOffset, xToNdc (xOffset, 0.0, scale, halfWidth), 4.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 4.0, scale, halfHeight),
|
||||||
|
endXToNdc (xOffset, xToNdc (xOffset, 0.0, scale, halfWidth), 4.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 0.0, scale, halfHeight),
|
||||||
|
xToNdc (xOffset, 0.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 50.0, scale, halfHeight),
|
||||||
|
endXToNdc (xOffset, xToNdc (xOffset, 0.0, scale, halfWidth), 4.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 50.0, scale, halfHeight),
|
||||||
|
xToNdc (xOffset, 0.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 45.0, scale, halfHeight),
|
||||||
|
xToNdc (xOffset, 0.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 45.0, scale, halfHeight),
|
||||||
|
endXToNdc (xOffset, xToNdc (xOffset, 0.0, scale, halfWidth), 4.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 50.0, scale, halfHeight),
|
||||||
|
endXToNdc (xOffset, xToNdc (xOffset, 0.0, scale, halfWidth), 4.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 45.0, scale, halfHeight),
|
||||||
|
xToNdc (xOffset, 45.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 4.0, scale, halfHeight),
|
||||||
|
endXToNdc (xOffset, xToNdc (xOffset, 45.0, scale, halfWidth), 49.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 4.0, scale, halfHeight),
|
||||||
|
xToNdc (xOffset, 45.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 0.0, scale, halfHeight),
|
||||||
|
xToNdc (xOffset, 45.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 0.0, scale, halfHeight),
|
||||||
|
endXToNdc (xOffset, xToNdc (xOffset, 45.0, scale, halfWidth), 49.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 4.0, scale, halfHeight),
|
||||||
|
endXToNdc (xOffset, xToNdc (xOffset, 45.0, scale, halfWidth), 49.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 0.0, scale, halfHeight),
|
||||||
|
xToNdc (xOffset, 45.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 50.0, scale, halfHeight),
|
||||||
|
endXToNdc (xOffset, xToNdc (xOffset, 45.0, scale, halfWidth), 49.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 50.0, scale, halfHeight),
|
||||||
|
xToNdc (xOffset, 45.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 45.0, scale, halfHeight),
|
||||||
|
xToNdc (xOffset, 45.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 45.0, scale, halfHeight),
|
||||||
|
endXToNdc (xOffset, xToNdc (xOffset, 45.0, scale, halfWidth), 49.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 50.0, scale, halfHeight),
|
||||||
|
endXToNdc (xOffset, xToNdc (xOffset, 45.0, scale, halfWidth), 49.0, scale, halfWidth),
|
||||||
|
yToNdc (yOffset, 45.0, scale, halfHeight)
|
||||||
|
]
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user