Controlling object visibility with distance to other object's vertices
There is ways to do this in Python, but I will explain a way I found to do it using drivers.
You can control the visibility of an object in the viewport and in renders by right clicking on the Visibility section of the Object properties tab and adding a driver.

In the driver popup change it to Distance type.

In this case I have an empty driving the 1st input of the driver, and the object I wish to change the visibility of in the 2nd input.
You can edit the distance between the objects that will trigger the state change in the drivers editor window. Also, the expression in my example has &quot;var-5&quot; which adds m units to the switching distance. (try it and see)
You can use CTRL-L -&gt; Animation Data to copy the drivers to other objects but you will need to update them to use themselves as one of the inputs.
The hard part... If you want every vertex of your cylinder to trigger every one of your hexagons, then you will need to hook an empty to every vertex, then create one of these drivers for every empty, then copy and edit every one of them to every hexagon and edit those! Sounds like a LOT of effort.
There is probably other ways to do this without Python, but this is the way I found.
As I said above, Python would be much better for this.