allow width and height to have a different number of click points

This commit is contained in:
2025-02-18 11:53:28 +00:00
parent 68cbf59f04
commit 78905b59f0
9 changed files with 129 additions and 75 deletions

BIN
dotscape

Binary file not shown.

View File

@@ -1,6 +1,6 @@
signature APP_INIT = signature APP_INIT =
sig sig
val fromWindowWidthAndHeight: int * int * int -> AppType.app_type val fromWindowWidthAndHeight: int * int * int * int -> AppType.app_type
end end
structure AppInit :> APP_INIT = structure AppInit :> APP_INIT =
@@ -14,18 +14,22 @@ struct
, wFinish , wFinish
, hStart , hStart
, hFinish , hFinish
, numClickPoints , widthClickPoints
, heightClickPoints
) : app_type = ) : app_type =
let let
val xClickPoints = ClickPoints.generate (wStart, wFinish, numClickPoints) val xClickPoints =
val yClickPoints = ClickPoints.generate (hStart, hFinish, numClickPoints) ClickPoints.generate (wStart, wFinish, widthClickPoints)
val yClickPoints =
ClickPoints.generate (hStart, hFinish, heightClickPoints)
in in
{ mode = AppType.NORMAL_MODE { mode = AppType.NORMAL_MODE
, triangles = [] , triangles = []
, triangleStage = NO_TRIANGLE , triangleStage = NO_TRIANGLE
, windowWidth = windowWidth , windowWidth = windowWidth
, windowHeight = windowHeight , windowHeight = windowHeight
, numClickPoints = numClickPoints , numClickPointsX = widthClickPoints
, numClickPointsY = heightClickPoints
, xClickPoints = xClickPoints , xClickPoints = xClickPoints
, yClickPoints = yClickPoints , yClickPoints = yClickPoints
, undo = [] , undo = []
@@ -45,18 +49,9 @@ struct
} }
end end
fun fromWindowWidthAndHeight (windowWidth, windowHeight, numClickPoints) = fun fromWindowWidthAndHeight
if windowWidth = windowHeight then (windowWidth, windowHeight, widthClickPoints, heightClickPoints) =
helpFromWidthAndHeight if windowWidth > windowHeight then
( windowWidth
, windowHeight
, 0
, windowWidth
, 0
, windowHeight
, numClickPoints
)
else if windowWidth > windowHeight then
let let
val difference = windowWidth - windowHeight val difference = windowWidth - windowHeight
val wStart = difference div 2 val wStart = difference div 2
@@ -69,7 +64,8 @@ struct
, wFinish , wFinish
, 0 , 0
, windowHeight , windowHeight
, numClickPoints , widthClickPoints
, heightClickPoints
) )
end end
else else
@@ -85,7 +81,8 @@ struct
, windowWidth , windowWidth
, hStart , hStart
, hFinish , hFinish
, numClickPoints , widthClickPoints
, heightClickPoints
) )
end end
end end

View File

@@ -28,7 +28,8 @@ sig
, triangleStage: triangle_stage , triangleStage: triangle_stage
, windowWidth: int , windowWidth: int
, windowHeight: int , windowHeight: int
, numClickPoints: int , numClickPointsX: int
, numClickPointsY: int
, xClickPoints: Real32.real vector , xClickPoints: Real32.real vector
, yClickPoints: Real32.real vector , yClickPoints: Real32.real vector
, undo: (Real32.real * Real32.real) list , undo: (Real32.real * Real32.real) list
@@ -86,7 +87,8 @@ struct
, triangleStage: triangle_stage , triangleStage: triangle_stage
, windowWidth: int , windowWidth: int
, windowHeight: int , windowHeight: int
, numClickPoints: int , numClickPointsX: int
, numClickPointsY: int
, xClickPoints: Real32.real vector , xClickPoints: Real32.real vector
, yClickPoints: Real32.real vector , yClickPoints: Real32.real vector
, undo: (Real32.real * Real32.real) list , undo: (Real32.real * Real32.real) list

View File

@@ -80,7 +80,8 @@ struct
{ triangleStage = _ { triangleStage = _
, mode , mode
, triangles , triangles
, numClickPoints , numClickPointsX
, numClickPointsY
, xClickPoints , xClickPoints
, yClickPoints , yClickPoints
, windowWidth , windowWidth
@@ -108,7 +109,8 @@ struct
, redo = [] , redo = []
, mode = mode , mode = mode
, triangles = triangles , triangles = triangles
, numClickPoints = numClickPoints , numClickPointsX = numClickPointsX
, numClickPointsY = numClickPointsY
, xClickPoints = xClickPoints , xClickPoints = xClickPoints
, yClickPoints = yClickPoints , yClickPoints = yClickPoints
, windowWidth = windowWidth , windowWidth = windowWidth
@@ -136,7 +138,8 @@ struct
{ mode { mode
, triangles , triangles
, triangleStage = _ , triangleStage = _
, numClickPoints , numClickPointsX
, numClickPointsY
, xClickPoints , xClickPoints
, yClickPoints , yClickPoints
, windowWidth , windowWidth
@@ -176,7 +179,8 @@ struct
, triangles = newTriangles , triangles = newTriangles
, undo = newUndo , undo = newUndo
, redo = [] , redo = []
, numClickPoints = numClickPoints , numClickPointsX = numClickPointsX
, numClickPointsY = numClickPointsY
, xClickPoints = xClickPoints , xClickPoints = xClickPoints
, yClickPoints = yClickPoints , yClickPoints = yClickPoints
, windowWidth = windowWidth , windowWidth = windowWidth
@@ -202,7 +206,8 @@ struct
{ mode { mode
, xClickPoints , xClickPoints
, yClickPoints , yClickPoints
, numClickPoints , numClickPointsX
, numClickPointsY
, windowWidth , windowWidth
, windowHeight , windowHeight
, triangles , triangles
@@ -226,7 +231,8 @@ struct
{ mode = mode { mode = mode
, xClickPoints = xClickPoints , xClickPoints = xClickPoints
, yClickPoints = yClickPoints , yClickPoints = yClickPoints
, numClickPoints = numClickPoints , numClickPointsX = numClickPointsX
, numClickPointsY = numClickPointsY
, triangles = triangles , triangles = triangles
, triangleStage = triangleStage , triangleStage = triangleStage
, windowWidth = windowWidth , windowWidth = windowWidth
@@ -254,7 +260,8 @@ struct
{ mode { mode
, xClickPoints , xClickPoints
, yClickPoints , yClickPoints
, numClickPoints , numClickPointsX
, numClickPointsY
, windowWidth , windowWidth
, windowHeight , windowHeight
, triangles , triangles
@@ -278,7 +285,8 @@ struct
{ mode = mode { mode = mode
, xClickPoints = xClickPoints , xClickPoints = xClickPoints
, yClickPoints = yClickPoints , yClickPoints = yClickPoints
, numClickPoints = numClickPoints , numClickPointsX = numClickPointsX
, numClickPointsY = numClickPointsY
, triangles = triangles , triangles = triangles
, triangleStage = triangleStage , triangleStage = triangleStage
, windowWidth = windowWidth , windowWidth = windowWidth
@@ -308,7 +316,8 @@ struct
{ mode { mode
, xClickPoints = _ , xClickPoints = _
, yClickPoints = _ , yClickPoints = _
, numClickPoints , numClickPointsX
, numClickPointsY
, windowWidth = _ , windowWidth = _
, windowHeight = _ , windowHeight = _
, triangles , triangles
@@ -329,13 +338,14 @@ struct
, num , num
} = app } = app
val xClickPoints = ClickPoints.generate (wStart, wFinish, numClickPoints) val xClickPoints = ClickPoints.generate (wStart, wFinish, numClickPointsX)
val yClickPoints = ClickPoints.generate (hStart, hFinish, numClickPoints) val yClickPoints = ClickPoints.generate (hStart, hFinish, numClickPointsY)
in in
{ mode = mode { mode = mode
, xClickPoints = xClickPoints , xClickPoints = xClickPoints
, yClickPoints = yClickPoints , yClickPoints = yClickPoints
, numClickPoints = numClickPoints , numClickPointsX = numClickPointsX
, numClickPointsY = numClickPointsY
, triangles = triangles , triangles = triangles
, triangleStage = triangleStage , triangleStage = triangleStage
, windowWidth = windowWidth , windowWidth = windowWidth
@@ -388,7 +398,8 @@ struct
, mouseY = _ , mouseY = _
, triangles , triangles
, triangleStage , triangleStage
, numClickPoints , numClickPointsX
, numClickPointsY
, xClickPoints , xClickPoints
, yClickPoints , yClickPoints
, windowWidth , windowWidth
@@ -412,7 +423,8 @@ struct
, mouseY = mouseY , mouseY = mouseY
, triangles = triangles , triangles = triangles
, triangleStage = triangleStage , triangleStage = triangleStage
, numClickPoints = numClickPoints , numClickPointsX = numClickPointsX
, numClickPointsY = numClickPointsY
, xClickPoints = xClickPoints , xClickPoints = xClickPoints
, yClickPoints = yClickPoints , yClickPoints = yClickPoints
, windowWidth = windowWidth , windowWidth = windowWidth
@@ -439,7 +451,8 @@ struct
{ mode { mode
, triangleStage = _ , triangleStage = _
, triangles = _ , triangles = _
, numClickPoints , numClickPointsX
, numClickPointsY
, xClickPoints , xClickPoints
, yClickPoints , yClickPoints
, windowWidth , windowWidth
@@ -472,7 +485,8 @@ struct
, triangles = newTriangles , triangles = newTriangles
, undo = newUndo , undo = newUndo
, redo = newRedo , redo = newRedo
, numClickPoints = numClickPoints , numClickPointsX = numClickPointsX
, numClickPointsY = numClickPointsY
, xClickPoints = xClickPoints , xClickPoints = xClickPoints
, yClickPoints = yClickPoints , yClickPoints = yClickPoints
, windowWidth = windowWidth , windowWidth = windowWidth
@@ -499,7 +513,8 @@ struct
{ mode { mode
, triangleStage = _ , triangleStage = _
, triangles = _ , triangles = _
, numClickPoints , numClickPointsX
, numClickPointsY
, xClickPoints , xClickPoints
, yClickPoints , yClickPoints
, windowWidth , windowWidth
@@ -531,7 +546,8 @@ struct
, triangles = newTriangles , triangles = newTriangles
, undo = newUndo , undo = newUndo
, redo = newRedo , redo = newRedo
, numClickPoints = numClickPoints , numClickPointsX = numClickPointsX
, numClickPointsY = numClickPointsY
, xClickPoints = xClickPoints , xClickPoints = xClickPoints
, yClickPoints = yClickPoints , yClickPoints = yClickPoints
, windowWidth = windowWidth , windowWidth = windowWidth
@@ -557,7 +573,8 @@ struct
{ mode { mode
, triangleStage , triangleStage
, triangles , triangles
, numClickPoints , numClickPointsX
, numClickPointsY
, xClickPoints , xClickPoints
, yClickPoints , yClickPoints
, windowWidth , windowWidth
@@ -584,7 +601,8 @@ struct
, triangles = triangles , triangles = triangles
, undo = undo , undo = undo
, redo = redo , redo = redo
, numClickPoints = numClickPoints , numClickPointsX = numClickPointsX
, numClickPointsY = numClickPointsY
, xClickPoints = xClickPoints , xClickPoints = xClickPoints
, yClickPoints = yClickPoints , yClickPoints = yClickPoints
, windowWidth = windowWidth , windowWidth = windowWidth
@@ -609,7 +627,8 @@ struct
{ mode = _ { mode = _
, triangleStage , triangleStage
, triangles , triangles
, numClickPoints , numClickPointsX
, numClickPointsY
, xClickPoints , xClickPoints
, yClickPoints , yClickPoints
, windowWidth , windowWidth
@@ -636,7 +655,8 @@ struct
, triangles = triangles , triangles = triangles
, undo = undo , undo = undo
, redo = redo , redo = redo
, numClickPoints = numClickPoints , numClickPointsX = numClickPointsX
, numClickPointsY = numClickPointsY
, xClickPoints = xClickPoints , xClickPoints = xClickPoints
, yClickPoints = yClickPoints , yClickPoints = yClickPoints
, windowWidth = windowWidth , windowWidth = windowWidth
@@ -661,7 +681,8 @@ struct
{ mode = _ { mode = _
, xClickPoints , xClickPoints
, yClickPoints , yClickPoints
, numClickPoints , numClickPointsX
, numClickPointsY
, windowWidth , windowWidth
, windowHeight , windowHeight
, undo , undo
@@ -690,7 +711,8 @@ struct
, undo = [] , undo = []
, redo = [] , redo = []
, showGraph = showGraph , showGraph = showGraph
, numClickPoints = numClickPoints , numClickPointsX = numClickPointsX
, numClickPointsY = numClickPointsY
, xClickPoints = xClickPoints , xClickPoints = xClickPoints
, yClickPoints = yClickPoints , yClickPoints = yClickPoints
, windowWidth = windowWidth , windowWidth = windowWidth
@@ -715,7 +737,8 @@ struct
{ mode { mode
, xClickPoints , xClickPoints
, yClickPoints , yClickPoints
, numClickPoints , numClickPointsX
, numClickPointsY
, windowWidth , windowWidth
, windowHeight , windowHeight
, triangles , triangles
@@ -739,7 +762,8 @@ struct
{ mode = mode { mode = mode
, xClickPoints = xClickPoints , xClickPoints = xClickPoints
, yClickPoints = yClickPoints , yClickPoints = yClickPoints
, numClickPoints = numClickPoints , numClickPointsX = numClickPointsX
, numClickPointsY = numClickPointsY
, triangles = triangles , triangles = triangles
, triangleStage = triangleStage , triangleStage = triangleStage
, windowWidth = windowWidth , windowWidth = windowWidth
@@ -767,7 +791,8 @@ struct
{ mode { mode
, xClickPoints , xClickPoints
, yClickPoints , yClickPoints
, numClickPoints , numClickPointsX
, numClickPointsY
, windowWidth , windowWidth
, windowHeight , windowHeight
, triangles , triangles
@@ -791,7 +816,8 @@ struct
{ mode = mode { mode = mode
, xClickPoints = xClickPoints , xClickPoints = xClickPoints
, yClickPoints = yClickPoints , yClickPoints = yClickPoints
, numClickPoints = numClickPoints , numClickPointsX = numClickPointsX
, numClickPointsY = numClickPointsY
, triangles = triangles , triangles = triangles
, triangleStage = triangleStage , triangleStage = triangleStage
, windowWidth = windowWidth , windowWidth = windowWidth
@@ -813,13 +839,14 @@ struct
} }
end end
fun num (app: app_type, newNum): app_type = fun num (app: app_type, newNum) : app_type =
let let
val val
{ triangleStage { triangleStage
, mode , mode
, triangles , triangles
, numClickPoints , numClickPointsX
, numClickPointsY
, xClickPoints , xClickPoints
, yClickPoints , yClickPoints
, windowWidth , windowWidth
@@ -846,7 +873,8 @@ struct
, redo = [] , redo = []
, mode = mode , mode = mode
, triangles = triangles , triangles = triangles
, numClickPoints = numClickPoints , numClickPointsX = numClickPointsX
, numClickPointsY = numClickPointsY
, xClickPoints = xClickPoints , xClickPoints = xClickPoints
, yClickPoints = yClickPoints , yClickPoints = yClickPoints
, windowWidth = windowWidth , windowWidth = windowWidth
@@ -866,13 +894,14 @@ struct
} }
end end
fun r (app: app_type): app_type = fun r (app: app_type) : app_type =
let let
val val
{ triangleStage { triangleStage
, mode , mode
, triangles , triangles
, numClickPoints , numClickPointsX
, numClickPointsY
, xClickPoints , xClickPoints
, yClickPoints , yClickPoints
, windowWidth , windowWidth
@@ -900,7 +929,8 @@ struct
, redo = [] , redo = []
, mode = mode , mode = mode
, triangles = triangles , triangles = triangles
, numClickPoints = numClickPoints , numClickPointsX = numClickPointsX
, numClickPointsY = numClickPointsY
, xClickPoints = xClickPoints , xClickPoints = xClickPoints
, yClickPoints = yClickPoints , yClickPoints = yClickPoints
, windowWidth = windowWidth , windowWidth = windowWidth
@@ -920,13 +950,14 @@ struct
} }
end end
fun g (app: app_type): app_type = fun g (app: app_type) : app_type =
let let
val val
{ triangleStage { triangleStage
, mode , mode
, triangles , triangles
, numClickPoints , numClickPointsX
, numClickPointsY
, xClickPoints , xClickPoints
, yClickPoints , yClickPoints
, windowWidth , windowWidth
@@ -954,7 +985,8 @@ struct
, redo = [] , redo = []
, mode = mode , mode = mode
, triangles = triangles , triangles = triangles
, numClickPoints = numClickPoints , numClickPointsX = numClickPointsX
, numClickPointsY = numClickPointsY
, xClickPoints = xClickPoints , xClickPoints = xClickPoints
, yClickPoints = yClickPoints , yClickPoints = yClickPoints
, windowWidth = windowWidth , windowWidth = windowWidth
@@ -974,13 +1006,14 @@ struct
} }
end end
fun b (app: app_type): app_type = fun b (app: app_type) : app_type =
let let
val val
{ triangleStage { triangleStage
, mode , mode
, triangles , triangles
, numClickPoints , numClickPointsX
, numClickPointsY
, xClickPoints , xClickPoints
, yClickPoints , yClickPoints
, windowWidth , windowWidth
@@ -1008,7 +1041,8 @@ struct
, redo = [] , redo = []
, mode = mode , mode = mode
, triangles = triangles , triangles = triangles
, numClickPoints = numClickPoints , numClickPointsX = numClickPointsX
, numClickPointsY = numClickPointsY
, xClickPoints = xClickPoints , xClickPoints = xClickPoints
, yClickPoints = yClickPoints , yClickPoints = yClickPoints
, windowWidth = windowWidth , windowWidth = windowWidth

View File

@@ -5,7 +5,14 @@ end
structure ParseFile :> PARSE_FILE = structure ParseFile :> PARSE_FILE =
struct struct
datatype triangle_token = X | Y | R | G | B | COORD of Real32.real | UNKNOWN of string datatype triangle_token =
X
| Y
| R
| G
| B
| COORD of Real32.real
| UNKNOWN of string
val zero: Real32.real = 0.0 val zero: Real32.real = 0.0

View File

@@ -2,7 +2,8 @@ structure Constants =
struct struct
val windowWidth = 1000 val windowWidth = 1000
val windowHeight = 900 val windowHeight = 900
val initialNumClickPoints = 15 val initialWidthClickPoints = 16
val initialHeightClickPoints = 20
val graphVertexShaderString = val graphVertexShaderString =
"#version 300 es\n\ "#version 300 es\n\

View File

@@ -65,19 +65,31 @@ struct
[ x1 [ x1
, ",\n" , ",\n"
, y1 , y1
, ", r, g, b,\n" , ",\n"
, r
, ",\n"
, g
, ",\n"
, b
, ",\n"
, x2 , x2
, ",\n" , ",\n"
, y2 , y2
, ", r, g, b,\n" , ",\n"
, r
, ",\n"
, g
, ",\n"
, b
, ",\n"
, x3 , x3
, ",\n" , ",\n"
, y3 , y3
, ", \n" , ",\n"
, r , r
, ", " , ",\n"
, g , g
, ", " , ",\n"
, b , b
, case tl of , case tl of
[] => "\n" [] => "\n"
@@ -99,10 +111,8 @@ struct
val _ = TextIO.output (io, fileStartString) val _ = TextIO.output (io, fileStartString)
val functionStartString = val functionStartString =
" fun lerp (startX, startY, drawWidth, drawHeight, windowWidth, windowHeight, r, g, b) : Real32.real vector =\n\ " fun lerp (startX, startY, drawWidth, drawHeight, windowWidth, windowHeight) : Real32.real vector =\n\
\ let\n\ \ let\n\
\ val startX = Real32.fromInt startX\n\
\ val startY = Real32.fromInt startY\n\
\ val endY = windowHeight - startY\n\ \ val endY = windowHeight - startY\n\
\ val startY = windowHeight - (startY + drawHeight)\n\ \ val startY = windowHeight - (startY + drawHeight)\n\
\ val endX = startX + drawWidth\n\ \ val endX = startX + drawWidth\n\

View File

@@ -18,7 +18,8 @@ struct
val initialModel = AppInit.fromWindowWidthAndHeight val initialModel = AppInit.fromWindowWidthAndHeight
( Constants.windowWidth ( Constants.windowWidth
, Constants.windowHeight , Constants.windowHeight
, Constants.initialNumClickPoints , Constants.initialWidthClickPoints
, Constants.initialHeightClickPoints
) )
val graphLines = GraphLines.generate initialModel val graphLines = GraphLines.generate initialModel

View File

@@ -24,7 +24,8 @@ sig
| KEY_SPACE | KEY_SPACE
| USE_TRIANGLES of AppType.triangle list | USE_TRIANGLES of AppType.triangle list
| TRIANGLES_LOAD_ERROR | TRIANGLES_LOAD_ERROR
| FILE_BROWSER_AND_PATH of { fileBrowser: AppType.file_browser_item vector, path: string } | FILE_BROWSER_AND_PATH of
{fileBrowser: AppType.file_browser_item vector, path: string}
end end
structure InputMessage :> INPUT_MESSAGE = structure InputMessage :> INPUT_MESSAGE =
@@ -53,5 +54,6 @@ struct
| KEY_SPACE | KEY_SPACE
| USE_TRIANGLES of AppType.triangle list | USE_TRIANGLES of AppType.triangle list
| TRIANGLES_LOAD_ERROR | TRIANGLES_LOAD_ERROR
| FILE_BROWSER_AND_PATH of { fileBrowser: AppType.file_browser_item vector, path: string } | FILE_BROWSER_AND_PATH of
{fileBrowser: AppType.file_browser_item vector, path: string}
end end