I don't really want to make another cloth example. I've made like 10 and posted them all on this forum from one time or another.
To move a point out of a box one way I've found useful lately is to use an sdf (signed distance field). Logic is basically this:
var dx, dy
function sdf(px,py)
-- dx = (px-box.x)*cos(-box.angle)-(py-box.y)*sin(-box.angle)
-- dy = (px-box.x)*sin(-box.angle)+(py-box.y)*cos(-box.angle)
-- dx = abs(dx) - box.width/2
-- dy = abs(dy) - box.height/2
-- return distance(0,0, max(0, dx), max(dy,0))+ min(0, max(dx,dy))
var d=0
for each point
-- set d to sdf(point.x,point.y)
-- if d<radius
-- -- point move radius-d pixels at angle angle(d,d, sdf(point.x+0.0001, point.y), sdf(point.x, point.y+0.0001)
You'd have to modify it slightly to work with more than one box. There are probably other ways to do it too.