JS is awesome and is sometimes how I do things with a grid too.
But for awhile now I’ve mostly switched to using Jitter matrices, because for me it’s ultimately the most flexible thing for layering several grid/arc UI elements
I made this patch awhile back for someone who wanted to get started using Jitter matrices for their grid programming. It’s a simple polyphonic MIDI sequencer. Using the “setcell” and “getcell” messages aren’t my favorite (or most efficient) ways to access matrix data, but this was a proof of concept / example kind of thing anyways.
Copy the code inside and select New from Clipboard in Max's file menu
<pre><code>
----------begin_max5_patcher----------
2986.3oc0c08bqhaE+4j+Jz0Smosy5jf.gPpOz4NSaeamYenu0t6bGLVwlDL
3B37wcm8+8dj.bbBx1RX4fuY2jrAiQ7624ScNG796We0jYEuHplf9an+K5pq
98qu5J0gjG3p1+9pIqheIIKtRcZSRJVsRjWOYZyqUKdoVc7hYYoKhqKJeEUI
JSEUnh6QkEapEn374n+yOiJl8fHotBUWfJEqJdRfPaxyEIhppX3csNtrV8lp
WJP+x+9efVIegEhpopK.7tVj9DbY2Tghg+ZwhLwMwyxDvxUuYMZ1qnh7rWQw
IOlW7blX9hz7EnGEvEtDtPva7uHuL4E0pCVJxDwvQ+qc.IKEtUJ1jqPCs8fq
iqSVBWmuUB24MrT.O51voHdD4VO3KbHKjvBBCwSQ99925MEwht0C8asWg7Mq
RyyD0JxC2dvz4sT1C2f4jIucp.c0ctdxC9GWes7GSOUYylRfk9eaD4IhRTRV
QxiSQOuLMYI54zrLz7x3mARccV7qKEwyAhTIDVTlNGH+JzyB3jfeGO+oX3Rf
185ok+B2O+ER4RRJxS9Sbn5WRtzBFy+7yX0KSqPv+pPZ7pFt.sJttL8koH0q
VmBGNYoH4QohVCal.DEPSkBzuNoH+WmfpJ.xCkDmqHW3Og2CnBBlb5nMx9oM
FK31fc9hv.kPeop1VVj5YEK58IvhaJyAyXPe5KS1OzHLl71mPUfPoc3aETXr
yOT.OVwqUpCJwmzcjzDAtyJ.Mjj3L8FB96G1XO+vawTJMhDEDfofdMEvOknD
oAAxeI+oE7.8yyvnJc0ZvaqjCTfUTd2atOt+cdHJskYHDxszORLAbkyULmO.
hwg9XyEOCWyd7hTq.txGPMm640GULeVuvHjFS.+8gv.cHz+rivUwOJjnDbcC
5td1hzHVi7yCaO5h1iAdmNTygpecsn4FXx8YEwfrn6+.8atiF9IvOq0XOP4m
Nv+vP2WGzizCc79fdZtaw62yPqpWZMh8T9uH3AfXhkBaobdXPtMCydX1C4iB
PgnHDCTXQXeagOMP4EmyG.7CrTf6To8WtAEM4Pwrvj2kFRPD3vJzSE.2mKSL
1Rz5Mxp2GAvTlFoqeX3sQgCCvzwFvoGT7BlsrdhWp2PEugrQFsaxenHMGEbH
CXdiqpPU9mgGwiktzKBC0iRxA8XM8T7bsG3VIxP3IGZWDr9obF52jREwdmUg
XK8UOKNegyQ8eG4YKlIbxf0oGaK3lhp7Tbl0flpR.A7dYsflP+zBJu+7PpxR
SDHeqgseyVp7GfBNI7B.2kE01i518KQFhv9yKCr8sMyp0Yo0pcQpJ7B3BeYb
18SQUqk0qRsyaUsXjGVVTPvFq.EixRqpaJWnb250KiqUGZ6t0KxK5pkyO+u9
m5KBS2FPjkMDt0hqSKx+l9yPS0sBvZxFj23lowCKwpxCR9DJSS774uQ0Rxa6
N4UjbhpbGKD.CVhtunTxywuJJEyQySqT00ZmBFZ6l88CzERBqBF2xX1sY+.9
YeqvpbJ9JPMKVHJqNXD2HZTe30V2tlDOry1DGMlaO.rIVK.EDPYPVpSawc.t
e0N3CHgKLcLIgGRqus06ixhAiRVFWhvTDyZBoIcSvJe.jfsglf66u0be67fT
2bPa.8ahBBGOv8P4wG6cU78zCJqog79.Fy8jP8XhZs.dOaiJ3XoY286AS.Gr
LvfBUMDRn0V.N.XB7Bh01EDvEYU52ESQOroRFF9QAD3.6yTFMew1vDAArlj3
7Y2F9w9tQFPXBuOghk+r.soRB6V+kcszTlOhpyQnzl1cNaScMDC8YwetTzzu
RYOk.FMNqDhC+JRjKa0IDlV0+gtNhJ6AZWtMEqWWTkBaLnBRYQb6gSsQSM2a
5cIN.qoulbp8It3c9q4dI5latoTbOvWGp.kXHZae2OPFFf0H8HoG6oCY9iYz
mJy.M.o9df7YA8DtzH6C83gO6x1tLMtqIm86jNMtCr.fueRjcmL8d1A21Ooo
Z6QsMTzOX.vzaLEzOIdYcI5OkhQ2gdKgmCfTbyzGXe9Tb9OD3Tqc7IfZ1XmD
YRV5ZzWg6RjG7q3WjEV1V7GFxaxfLzdBH5xIARCL28Nn4tdkiga7yCGasilR
c7UY8KxD4KpWhnji6EfRZFID+AXPPF6Zcof8lYsIT904oq.m7LzWKt+9JQsY
N7o314Dv2dB.e4XPnmJr0.niL7sOHOiegQF1YNnmNFtwAicIXb7SVGdnsPZ1
uKaFcDj+RLt94z74EOaKRw97vdI2xrev3XgWV581WoI862ocTAGPklXjKVMA
8SJV6.TQaT8o1.U+KRg+15w+lB.1ZVwqIT.kauBvEVbw6kQB1xId1xD9gpJO
xI1SDdi9nIIKfl2g9GaYCLyWxF3H6mUonQcei0nYnT42ViXBSh3.B9vAE0n.
ruowibrBwJK.qKpG6AaRr0FBM0.Kv9VDGM5aUncniAMdbn0J.XkCfnif6PM3
1yR4eqbu66AK2ap0qs.knLsam6AadFKn72Vpx3UBfo+VSIn2snniT2WfamxB
zNygiozQimNp8cckZaSWU14t1Y2gZ2Jj8qtThkw76ULeq85QCuDlxqtRDUcz
dOG3wz40W9.l7wlOae1vTxkPC3O7zeEnOrGt+FjhremvzQc.kkidg8hd49.s
zNPma.+Qdzrgj+rVpGv56CHv9b8n3e.l5w8v.j9szb.y.YH6GhQfTuEft15N
DNHZr4fF0fAE.PW2OCirmCF8beMeJr1SkxzjVv.FCKB6GuovZODRX+3CCoRY
jwn1g6+gXBevpD4y0QEvW8MRrejkHiZRBMNIvVqGndpa+3SiI0ZvGvuPFZb6
Y.uv9iW0.Fg7.5nWnr20IY4m3Cf0vAqNluulQ2lqwb.OfmTF+OG6g8V0vigc
s9BjOf5NvWfOd78E7QsAaMLz8w8Ad.EN6yytXlBZu8v2+Tp34mRqRmklkV+5
63eU20aVPkzc21kI+rBQLedY7hpjxBHYicp+SBjL5i0KAFdwxcOdSkhV1+Mz
7BO0+ElsXUw72UaoYEkyga9cNhohJll8462z7i8WCrNAPd7JQ6SRWYZbVQUB
jjwKqi2Va0cmOrA7T+sa8.emXUcaolVyO7owiB1xi+dYcUwlxjtq71GRdvLu
CdyEU0o4pmdkcOKYGtjmkVMJ6VKOiVKuSdshLYs5tiNw0hXzZE4h0JzHNTcG
8lTcU570EfRT01mG6f9OO1zlxZwC7074KBeWq62Lx9TvRv6NqsKN9DEZAFSj
mtPCxvG4ez0xyIJidlfqPlCLnk06+nKE0Ep8JamiRfdNwZ1yDTodh7O80hZj
vR9zac5dekO00FpXbx3Rtk1iGUQYVb5FWlovicBtnFsVdNiCO5Z0cGchqkQQ
vHNQdgMR2f3DGuXijWX2fKix3.Sck6v.iba3jk5XRqtzMNsUxD63HmgoitRb
GrRTiVIm3tPE763gHcApLJeWlKPEyDcBF4bjfnYKMV+ReZIFyLIRc21jFikl
9NeBtJibOeKD1mlYoQgV8vmkMd3YT9JN.kbiRj0yE1obS7HvcguGtI6Yj6h.
5LiVIWjtL2jnDL94Paznkled7xYRtYbWDumG9YYwYh2StK7fwLw1l4BkSFwz
HBm5JYzFdXtvzNxD1yIk9gZRLsODN5CUqS9weRuBxA6wTSqEv5FjEyOSLiqo
cEbMqd+y7yHh7GTPbjeHpI6G0Ia8kZRIGotnT6ThoqzohoPSBfPchojINW6n
3SCSlD4mhcE6cLcOmTRtPSzHBibka7ihIWnQPXV3z3jVo.SBXPbgbJvjrhjy
IitMf4c9W5fyRZnFsxzyx1wLXk8OKzsIXVNDDtekMxQ5wI6llOGud8Shxp12
sZMmrJ9gB0oylp9S4+6NXaS4mTJjSTPy4qZ68j3xjko0hj5MkM8Q+k14kehr
A+k4aRaWa.svRVU+Z1Ga381Vv+PbRwrldrKeLTDPdTxSW8ZsGd0lr5tq3Vbn
lAB4UoZcbCaoFUhq+iq++3kAsI.
-----------end_max5_patcher-----------
</code></pre>