This changes makes it possible to copy evaluated result and put it
to the original bmain.
Prior to this change from the API point of view there was false
perception that it is possible, while in practice it was very fragile:
it only worked if the ID did not reference any evaluated IDs.
This change makes it so id.copy() Python API call will make it so
the copied ID only references original data-blocks. This sounds a bit
implicit, so here is motivational aspect why it is considered better
approach to all other:
- There needs to be a way to support the described scenario, in the lest fragile way. Requiring to always use an explicit function call or an argument is too verbose and is easy to be missed.
- The id.copy() is already doing implicit thing: it always adds the result to the bmain. So it might as well ensure the copied result does not reference evaluated data-blocks.
- Added clarity in the documentation should address possible confusion.
The limitation of this change is that the copy() of evaluated geometry will clear its reference to the shape key. This is because the key is only referenced for validness of RNA paths for drivers and the key itself might not match topology of evaluated geometry due to modifiers.