← Back to posts

Interactive Graphics

In the previous tutorial, we tried input element slider, however, graphics primitives can also act like an virtual input device.

There are several events we can capture, but lets focus on zoom and drag

udata = {{-1,0}, {1,0}}; Graphics[{ Cyan, Line[udata // Offload], Red, PointSize[0.05], EventHandler[Point[{0,0.5}], { "drag" -> drag, "zoom" -> zoom }] }, PlotRange->{{-1,1}, {0,1}}] (*VB[*)(Graphics[{RGBColor[0, 1, 1], Line[Offload[udata]], RGBColor[1, 0, 0], PointSize[0.05], EventListener[Point[{0, 0.5}], {"drag" -> "08dc3540-a7b3-4287-8d74-408462b43666", "zoom" -> "08dc3540-a7b3-4287-8d74-408462b43666"}]}, PlotRange -> {{-1, 1}, {0, 1}}])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KWlMIB4HkHAvSizIyEwuTmOFyftkFpekMcPkg9ydnPNz8osygWyGTEYYgTDOJzMvFcJjBxL+aWk5+YkpxSDTSlMSSxKxmAQ2hAFGQPRyAomA/My8kuDMqtSiWTNBYKU9xJm8QMK1LDWvBOSy1LzUIogWVpgWiCqY08GGFjGAwQN7VDkEL6g0JzUYxEgpSkwPVgEyDCxSko1NTQx0E82TjHVNjCzMdS1SzE10TQwsTMyMkkyMzczMsOivys/PJVM/xNM5+SVBiXnpqbhcCvbTfyCAhDumX8HiAM6RZHE="*)(*]VB*)

Ok, then lets generate the data

ClearAll[generate]; generate[{x_, y_}, k_] := Table[{t, y Exp[- (*FB[*)(((*SpB[*)Power[(x - t)(*|*),(*|*)2](*]SpB*))(*,*)/(*,*)(2 k))(*]FB*)]}, {t,-1,1, 0.03}]

We should generate it everytime, when we have interact with a dot

defaults = {{0, 0.5}, 1/20.}; drag[xy_] := ( defaults[[1]] = xy; udata = generate @@ defaults; ) zoom[k_] := ( defaults[[2]] = k / 20.; udata = generate @@ defaults; )

Now try to drag and use a mouse wheel on a point above