3d array on mesh

Great Week everyone!

I’m looking for a solution to the array problem; I need to array 48 blocks on a round surface.
Those 48 should be divide into 4 grids of 12 blocks (3*4).and should be an array in different areas on the surface.
the pattern:

There is an offset of 3 mm from each other
the grid:

So far, so good but, each block have to be perpendicular to the surface, so the contour that we will get from the intersection of the block with the surface should be as close as possible to the block contour before the intersection.
See the image as an example of good vs. bad intersection contour

But the biggest problem is that the surface is a 3d scan, and I have it only as a mesh file.
I have tried on rhino(6) the contour function and then use of array on crv, but I can’t control it right, and it not looks like the necessary grid.
Image 2878 (altho it the best solution by now)
and also managed to do so with GH at first with cylinders that look like that :

but I can’t control the number of cylinders.
Do you have any suggestions on how to solve it?
need some help.gh (1.5 MB) need some help.gh.3dm (2.0 MB)

Thanks a lot!