Stable vector data IDs in the graph
In order to apply the vector modify node on a graphic group, it is necessary to be able to identify which graphic element within the graphic group.
We could do this by index (e.g. modification to graphic element 3 within the graphic group). However @Keavon wants to allow re-arranging the graphic elements without impacting the result.
In order to do this, each graphic element will get an id assigned when creating it. Nodes will be able to get their own id by having the input TaggedValue::MyNodeId (which would be populated during graph pre-processing). In order to avoid cutting and pasting changing the node id (as it does currently) some more logic to check if no such id exists will be added.
Each graphic group must contain unique ids. It is the job of the constructing node to enforce this (e.g. incrementing one of the ids to avoid collision).
This is implemented in impl crate::vector::ConcatElement for super::VectorData and pub fn vector_new_ids_from_hash. The Flatten Vector Elements node uses .concat, where the vector data ids are generated from the hash of the input vector id and layer NodeId which that vector passes through. vector_new_ids_from_hash is used by the repeat nodes and follows a similar concept. A better method could be created that does not rely on the layer ids, maybe the Path node id can be used instead.