Good question.
gnx's belong to vnodes, not positions. Your question is equivalent to asking, given a vnodes, how do I create the desired clone.
Most of the time it will be easier to use positions rather than vnodes. For example, here is tested code that, given a position, moves a clone of that position to the last node of c.p:
# Get the position of a node whose headline is 'Target Node'
child_p = g.findNodeAnywhere(c, 'Target Node')
assert child_p
# Clone the node.
clone = child_p.clone()
# Move the node
p = c.p
n = p.numberOfChildren()
clone.moveToNthChildOf(p, n)
# Make all children visible and redraw.
p.expand()
c.redraw()
If all you have is a gnx, then you can search for any position whose vnode has that gnx. Here is tested code.
child_p = None
for p in c.all_positions():
if p.gnx == 'ekr.20200225134818.1': # The gnx of my target node.
child_p = p
break
assert child_p
clone = child_p.clone()
And then you can proceed as before:
p = c.p # Don't use the p in the search loop!
n = p.numberOfChildren()
clone.moveToNthChildOf(p, n)
p.expand()
c.redraw()
HTH.
Edward
P.S. If performance is a big consideration, you might be able to use one of Leo's dictionaries that associates vnodes with gnx's. But I'll leave that complication for (much) later :-)
EKR