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

View File

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

View File

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

View File

@@ -5,7 +5,14 @@ end
structure ParseFile :> PARSE_FILE =
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

View File

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

View File

@@ -65,19 +65,31 @@ struct
[ x1
, ",\n"
, y1
, ", r, g, b,\n"
, ",\n"
, r
, ",\n"
, g
, ",\n"
, b
, ",\n"
, x2
, ",\n"
, y2
, ", r, g, b,\n"
, ",\n"
, r
, ",\n"
, g
, ",\n"
, b
, ",\n"
, x3
, ",\n"
, y3
, ", \n"
, ",\n"
, r
, ", "
, ",\n"
, g
, ", "
, ",\n"
, b
, case tl of
[] => "\n"
@@ -99,10 +111,8 @@ struct
val _ = TextIO.output (io, fileStartString)
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\
\ val startX = Real32.fromInt startX\n\
\ val startY = Real32.fromInt startY\n\
\ val endY = windowHeight - startY\n\
\ val startY = windowHeight - (startY + drawHeight)\n\
\ val endX = startX + drawWidth\n\

View File

@@ -18,7 +18,8 @@ struct
val initialModel = AppInit.fromWindowWidthAndHeight
( Constants.windowWidth
, Constants.windowHeight
, Constants.initialNumClickPoints
, Constants.initialWidthClickPoints
, Constants.initialHeightClickPoints
)
val graphLines = GraphLines.generate initialModel
@@ -27,7 +28,7 @@ struct
val dotDrawObject = AppDraw.initDot ()
val triangleDrawObject = AppDraw.initTriangles ()
val modalTextDrawObject = AppDraw.initModalText ()
val inputMailbox = Mailbox.mailbox ()

View File

@@ -24,7 +24,8 @@ sig
| KEY_SPACE
| USE_TRIANGLES of AppType.triangle list
| 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
structure InputMessage :> INPUT_MESSAGE =
@@ -53,5 +54,6 @@ struct
| KEY_SPACE
| USE_TRIANGLES of AppType.triangle list
| 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