6 minutes ago, recp said:I'm only re-calculating center if parent transform changed. Because if object may move, then I have to re-calculate it, right?
Typically when a parent transform changes, there is no need to recalculate the origin (translate, offset, whatever you call it, but centre is not a good term because it doesn't need to be a centre). This is because the origin is defined in terms of the parent space. (However you can apply the parent transform to get the origin in world space. You may for example need this if you want to point a camera at a world space location.)
I am still not clear what you are trying to do, or what you are finding problematic, so it is difficult to help without a precise question. Are you trying to visualize a node changing its rotation about a point other than its local origin? Or actually rotate the vertices in local space while maintaining a separate origin? Perhaps a diagram would help explain.
Usually if you want to rotate an object in relation to a parent (even a null parent) you move the local origin to the centre of rotation, and perform the rotation. A good way to get a handle on how these things work maybe be to experiment with a scene graph hierarchy in blender or other 3d modelling program. This is essential to understand before trying to implement any kind of hierarchical animation.