diff --git a/dotscape b/dotscape index 19c91ad..2fb74ea 100755 Binary files a/dotscape and b/dotscape differ diff --git a/functional-core/app/app-init.sml b/functional-core/app/app-init.sml index 0888eb3..0624581 100644 --- a/functional-core/app/app-init.sml +++ b/functional-core/app/app-init.sml @@ -1,6 +1,6 @@ signature APP_INIT = sig - val fromWindowWidthAndHeight: int * int -> AppType.app_type + val fromWindowWidthAndHeight: int * int * int -> AppType.app_type end structure AppInit :> APP_INIT = @@ -8,15 +8,23 @@ struct open AppType fun helpFromWidthAndHeight - (windowWidth, windowHeight, wStart, wFinish, hStart, hFinish) : app_type = + ( windowWidth + , windowHeight + , wStart + , wFinish + , hStart + , hFinish + , numClickPoints + ) : app_type = let - val xClickPoints = ClickPoints.generate (wStart, wFinish) - val yClickPoints = ClickPoints.generate (hStart, hFinish) + val xClickPoints = ClickPoints.generate (wStart, wFinish, numClickPoints) + val yClickPoints = ClickPoints.generate (hStart, hFinish, numClickPoints) in { triangles = [] , triangleStage = NO_TRIANGLE , windowWidth = windowWidth , windowHeight = windowHeight + , numClickPoints = numClickPoints , xClickPoints = xClickPoints , yClickPoints = yClickPoints , undo = [] @@ -29,10 +37,17 @@ struct } end - fun fromWindowWidthAndHeight (windowWidth, windowHeight) = + fun fromWindowWidthAndHeight (windowWidth, windowHeight, numClickPoints) = if windowWidth = windowHeight then helpFromWidthAndHeight - (windowWidth, windowHeight, 0, windowWidth, 0, windowHeight) + ( windowWidth + , windowHeight + , 0 + , windowWidth + , 0 + , windowHeight + , numClickPoints + ) else if windowWidth > windowHeight then let val difference = windowWidth - windowHeight @@ -40,7 +55,14 @@ struct val wFinish = wStart + windowHeight in helpFromWidthAndHeight - (windowWidth, windowHeight, wStart, wFinish, 0, windowHeight) + ( windowWidth + , windowHeight + , wStart + , wFinish + , 0 + , windowHeight + , numClickPoints + ) end else let @@ -49,6 +71,13 @@ struct val hFinish = hStart + windowWidth in helpFromWidthAndHeight - (windowWidth, windowHeight, 0, windowWidth, hStart, hFinish) + ( windowWidth + , windowHeight + , 0 + , windowWidth + , hStart + , hFinish + , numClickPoints + ) end end diff --git a/functional-core/app/app-type.sml b/functional-core/app/app-type.sml index 50150ba..f6044bb 100644 --- a/functional-core/app/app-type.sml +++ b/functional-core/app/app-type.sml @@ -15,12 +15,12 @@ sig , y3: Real32.real } - type app_type = { triangles: triangle list , triangleStage: triangle_stage , windowWidth: int , windowHeight: int + , numClickPoints: int , xClickPoints: Real32.real vector , yClickPoints: Real32.real vector , undo: (Real32.real * Real32.real) list @@ -63,6 +63,7 @@ struct , triangleStage: triangle_stage , windowWidth: int , windowHeight: int + , numClickPoints: int , xClickPoints: Real32.real vector , yClickPoints: Real32.real vector , undo: (Real32.real * Real32.real) list diff --git a/functional-core/app/app-with.sml b/functional-core/app/app-with.sml index a2c75dc..e2e6ab8 100644 --- a/functional-core/app/app-with.sml +++ b/functional-core/app/app-with.sml @@ -65,6 +65,7 @@ struct val { triangleStage = _ , triangles + , numClickPoints , xClickPoints , yClickPoints , windowWidth @@ -84,6 +85,7 @@ struct , undo = newUndo , redo = [] , triangles = triangles + , numClickPoints = numClickPoints , xClickPoints = xClickPoints , yClickPoints = yClickPoints , windowWidth = windowWidth @@ -103,6 +105,7 @@ struct val { triangles , triangleStage = _ + , numClickPoints , xClickPoints , yClickPoints , windowWidth @@ -124,6 +127,7 @@ struct , triangles = newTriangles , undo = newUndo , redo = [] + , numClickPoints = numClickPoints , xClickPoints = xClickPoints , yClickPoints = yClickPoints , windowWidth = windowWidth @@ -141,6 +145,7 @@ struct val { xClickPoints , yClickPoints + , numClickPoints , windowWidth , windowHeight , triangles @@ -156,6 +161,7 @@ struct in { xClickPoints = xClickPoints , yClickPoints = yClickPoints + , numClickPoints = numClickPoints , triangles = triangles , triangleStage = triangleStage , windowWidth = windowWidth @@ -175,6 +181,7 @@ struct val { xClickPoints , yClickPoints + , numClickPoints , windowWidth , windowHeight , triangles @@ -190,6 +197,7 @@ struct in { xClickPoints = xClickPoints , yClickPoints = yClickPoints + , numClickPoints = numClickPoints , triangles = triangles , triangleStage = triangleStage , windowWidth = windowWidth @@ -211,6 +219,7 @@ struct val { xClickPoints = _ , yClickPoints = _ + , numClickPoints , windowWidth = _ , windowHeight = _ , triangles @@ -224,11 +233,12 @@ struct , arrowY } = app - val xClickPoints = ClickPoints.generate (wStart, wFinish) - val yClickPoints = ClickPoints.generate (hStart, hFinish) + val xClickPoints = ClickPoints.generate (wStart, wFinish, numClickPoints) + val yClickPoints = ClickPoints.generate (hStart, hFinish, numClickPoints) in { xClickPoints = xClickPoints , yClickPoints = yClickPoints + , numClickPoints = numClickPoints , triangles = triangles , triangleStage = triangleStage , windowWidth = windowWidth @@ -273,6 +283,7 @@ struct , mouseY = _ , triangles , triangleStage + , numClickPoints , xClickPoints , yClickPoints , windowWidth @@ -288,6 +299,7 @@ struct , mouseY = mouseY , triangles = triangles , triangleStage = triangleStage + , numClickPoints = numClickPoints , xClickPoints = xClickPoints , yClickPoints = yClickPoints , windowWidth = windowWidth @@ -306,6 +318,7 @@ struct val { triangleStage = _ , triangles = _ + , numClickPoints , xClickPoints , yClickPoints , windowWidth @@ -330,6 +343,7 @@ struct , triangles = newTriangles , undo = newUndo , redo = newRedo + , numClickPoints = numClickPoints , xClickPoints = xClickPoints , yClickPoints = yClickPoints , windowWidth = windowWidth @@ -348,6 +362,7 @@ struct val { triangleStage = _ , triangles = _ + , numClickPoints , xClickPoints , yClickPoints , windowWidth @@ -371,6 +386,7 @@ struct , triangles = newTriangles , undo = newUndo , redo = newRedo + , numClickPoints = numClickPoints , xClickPoints = xClickPoints , yClickPoints = yClickPoints , windowWidth = windowWidth @@ -388,6 +404,7 @@ struct val { triangleStage , triangles + , numClickPoints , xClickPoints , yClickPoints , windowWidth @@ -406,6 +423,7 @@ struct , triangles = triangles , undo = undo , redo = redo + , numClickPoints = numClickPoints , xClickPoints = xClickPoints , yClickPoints = yClickPoints , windowWidth = windowWidth @@ -422,6 +440,7 @@ struct val { xClickPoints , yClickPoints + , numClickPoints , windowWidth , windowHeight , undo @@ -442,6 +461,7 @@ struct , undo = [] , redo = [] , showGraph = showGraph + , numClickPoints = numClickPoints , xClickPoints = xClickPoints , yClickPoints = yClickPoints , windowWidth = windowWidth diff --git a/functional-core/app/click-points.sml b/functional-core/app/click-points.sml index dd77aa7..66428c9 100644 --- a/functional-core/app/click-points.sml +++ b/functional-core/app/click-points.sml @@ -1,6 +1,6 @@ signature CLICK_POINTS = sig - val generate: int * int -> Real32.real vector + val generate: int * int * int -> Real32.real vector val getClickPositionFromMouse: AppType.app_type -> (int * int) option val getDrawDot: Real32.real @@ -18,13 +18,14 @@ end structure ClickPoints :> CLICK_POINTS = struct - fun generate (start, finish) = + fun generate (start, finish, numPoints) = let val difference = finish - start - val increment = Real32.fromInt difference / 40.0 + val increment = Real32.fromInt difference / Real32.fromInt numPoints val start = Real32.fromInt start in - Vector.tabulate (41, fn idx => (Real32.fromInt idx * increment) + start) + Vector.tabulate (numPoints + 1, fn idx => + (Real32.fromInt idx * increment) + start) end (* diff --git a/imperative-shell/constants.sml b/imperative-shell/constants.sml index ea3626e..1c19805 100644 --- a/imperative-shell/constants.sml +++ b/imperative-shell/constants.sml @@ -2,6 +2,7 @@ structure Constants = struct val windowWidth = 1000 val windowHeight = 900 + val initialNumClickPoints = 26 val graphVertexShaderString = "#version 300 es\n\ diff --git a/imperative-shell/shell.sml b/imperative-shell/shell.sml index 07017cc..5920ac1 100644 --- a/imperative-shell/shell.sml +++ b/imperative-shell/shell.sml @@ -15,9 +15,11 @@ struct val _ = Glfw.makeContextCurrent window val _ = Gles3.loadGlad () - val initialModel = - AppInit.fromWindowWidthAndHeight - (Constants.windowWidth, Constants.windowHeight) + val initialModel = AppInit.fromWindowWidthAndHeight + ( Constants.windowWidth + , Constants.windowHeight + , Constants.initialNumClickPoints + ) val graphLines = GraphLines.generate initialModel val graphDrawObject = AppDraw.initGraphLines ()