Sure.
If you truly want instancing, you just call tree.instanceTo(newParent) 1000 times. Each call will return a new instance, attached to the indicated parent node. Note that each instance must have a different parent, and you will want to apply a unique transform to each parent, so that the trees are not all in the same place.
But usually, instancing is more trouble than it’s worth. You might find it much easier to work with duplication. In this case, just call tree.copyTo(newParent) 1000 times. Each call will return a new copy. All the copies can be attached to the same parent, if you like, and you can set a unique transform directly on each copy.
It’s not really wasteful of memory to use copies instead of instances, since the actual vertex tables are still shared. And rendering time is the same either way: in either case, the graphics card still has to draw 1000 trees.
Note that if you are building up geometry by assembling pieces like this, you should also consider with calling nodePath.flattenStrong() when you are finished. Proper use of flattenStrong() is a complex optimization problem.
flattenStrong() will combined adjacent nodes together, accumulating many smaller polysets into fewer larger polysets, which can be an important performance optimization when you are going to see all of those polysets at the same time anyway. (It also, incidentally, duplicates out instances.) Of course, it also impedes culling–if all the trees are combined into one object, then all the trees must be drawn all the time, which can hurt performance. So the right way to use flattenStrong() is to collect together a number of trees that are all nearby each other under a common node, and call flattenStrong() on that.
Of course, whether you use flattening or not, you’d still want to group together nearby trees under a common node anyway, to maximize the benefit of hierarchical scene graph culling–if the entire volume of collected trees is outside the viewing frustum, then Panda won’t need to consider each tree individually.
Or, if your CPU and graphics card are good enough, you can just attach all of the trees to one node and not think about performance optimization–you might be happy enough with the resulting frame rate. This is one of the strengths of Panda: you can put off the optimization issues if you don’t want to think about them.
David