Hello @blastframe,
yes, there is a loop in that script which is like my pseudo-code one. If they are doing the same thing is a bit a point of view. The script evaluates each frame to do something each frame, while my pseudo code evaluates all frames to do something after that. So, for clarity again as pseudo code:
# Evaluate all frames and do something for each frame, i.e., what Maxime's
# script does.
for frame in FRAMES:
for item in document:
item = evaluate(item, frame)
DoSomthing(item)
# Evaluate all frames and after that do something, i.e., what I am proposing.
# From a more abstract point of view, both are doing the same thing. The only
# difference here is that we are not interested in the intermediate results,
# only in updating an item with is prior state: `item = evaluate(item, frame)`
for frame in FRAMES:
for item in document:
item = evaluate(item, frame)
DoSomthing(someItem)
If you say, you are fine with not respecting this than this will simplify things. And most things that impact (deform) caches, won't be impacted by that. But there are direct cases which are affected, e.g. cloth simulations, some deformers like for example the collision the deformer and more. And indirect cases like when you have a particle system whose state over three corners will impact some deformation.
And yes, this is very taxing to do, because you must evaluate a lot of stuff each frame. And you will have likely to execute all passes (animation, expressions, and caches); in the end it depends on how a specific scene is setup. The performant way to do this is cache the required data yourself. Like for example the collision deformer can do it; i.e., you click a button and then all data is calculated which then later is only played back.
I would not say that it is impossible to do this in Python, but you will lack some important types to store such data in Python that are exposed in our C++ API. Python is also in general not well suited for such task, due to its inherent slowness of iteration. But that does not mean that with some smart thinking you could not make it work in Python in a performant way. This all depends on what you are exactly trying to do and is more of a general complexity of an algorithm or project design question (and therefore out of scope of support).
The bottom line is that your initial question of Get a Deformed Point Position Over Time might contain more complexity than anticipated by you, because it implies something is the recursive function itself and time. Which is always a pain in the *** to handle.
Cheers,
Ferdinand