Can a node have two parents?

Remember, a NodePath is a particular path to follow from the root to a node, and there are now two ways to reach it your node now that it has two parents. You are using ‘find’, and you are getting only one of the NodePaths pointing to that node. Furthermore, setPos is being applied to the underlying node, thereby inadvertently affecting both NodePaths. This is not what you want.

Assuming that each of your cells has a different coordinate frame, you need to be able to enter a position that’s different for each instance of your node. This means you need to insert an intervening node for every instance containing the position of the node relative to the cell position.

If you did this right, every NodePath pointing to that node will have the same getPos(render) as a result. This also means you’re able to take an arbitrary NodePath to reposition it using setPos(render, pos).

Alternatively, you can leave the cells without a position, which obviates the need of inserting intermediate “instance” nodes altogether, since you can then just use setPos(pos) to set the local transformation.

On a sidenote, you mention “actual instancing”; however, there is no functional difference between what you are doing with addChild versus what instanceTo does. The only thing that instanceTo does is automatically insert an intervening node and returns a NodePath to this intervening node, allowing you to do setPos(render, pos) on the result, similar to what I described above.