of course it should be a geometry plugin (or a simple object plugin)
of course it would be better to use Substitute Modifier, Xref objects or Xref scene for source geometry
but…
here is a simple snippet how to make the job with using nodes from Selection Set with name “honey”
if there is no this set the built-in hexagon shape will be used:
try(destroydialog Honeycomber) catch()
rollout Honeycomber "Honeycomber" width:191
(
spinner seed_sp "Seed: " type:#integer range:[0, 1e9, 0] fieldwidth:48 enabled:off
spinner width_sp "Width: " type:#integer range:[1, 100, 4] fieldwidth:48 offset:[0,6]
spinner height_sp "Height: " type:#integer range:[1, 100, 4] fieldwidth:48
spinner cellsize_sp "Cell Size: " type:#float range:[0, 1e9, 40] fieldwidth:48 offset:[0,6]
spinner spacing_sp "Spacing: " type:#float range:[0, 1e9, 3] fieldwidth:48
button make_bt "Make" width:182 offset:[0,4]
on make_bt pressed do undo "Make Honeycombs" on
(
try(delete $honey*) catch()
ss = if not keyboard.altpressed do selectionSets["honey"]
nodes = if ss != undefined do join #() ss
w = width_sp.value
h = height_sp.value
r = cellsize_sp.value
t = (cos 30) * r
s = spacing_sp.value
for z = 0 to h-1 do
(
for x = 0 to w-1 do
(
px = (2*t + s) * (x + (mod z 2)/2)
pz = (1.5 * r + s*(tan 60)/2) * z
tm = matrix3 1
if (random 0 1) == 1 do prescale tm [-1,1,1] -- flip x
if (random 0 1) == 1 do prescale tm [1,-1,1] -- flip y
prerotateZ tm ((random 0 5) * 60) -- spin
rotateX tm 90
rotateY tm 30
translate tm [px,0,pz]
node = if nodes != undefined then
(
instance nodes[random 1 nodes.count] wirecolor:green name:#honey
)
else
(
ngon sides:6 radius:10 scribe:1 wirecolor:orange name:#honey
)
sc = node.max.x - node.min.x
node.transform = tm
scale node (r*2/[sc,sc,sc])
node
)
)
)
on make_bt rightclick do undo "Delete All" on try(delete $honey*) catch()
)
createdialog Honeycomber
It’s free to be modified or improved. Volunteers are welcome