Paper.js focuses heavily on the direct manipulation of vector graphics, paths, segments, handles, anchor points, etc.
That's why we decided to have path items represent their geometry alway in coordinates that are directly relating to their parent context (e.g. the layer or group they are in), meaning they don't store transformation matrices but apply them instead to their geometry.
There is a shape contstructor for the representation of simple forms that are not described by bezier segments: circle, ellipse, rectangle, and soon rounded rectangle. These shapes use matrices for their positioning, and thus will exhibit the behavior you are used to from Qt.
If you wan this same behavior for path items, then you simply have to put them into a group that has #transformContent set to false at the moment. You could try setting #transformContent to false directly on path, but I'm not sure if this would work correctly with all the hit-testing stuff currently.
But in my eyes using #transformContent is not intuitive enough, which is why I'd like to introduce a new constructor, e.g. MovieClip, which always uses transformations, and later on offers key-framing.
I think this way, we can offer the best of both worlds.
We had initially chosen this approach because paper.js focuses heavily on simplifying the API for teaching purposes. Having to explain matrices to people who just learned to program is simply not helping. Having to explain why the points you're adding to a path do not appear where you expect them to doesn't help either.
I hope that makes sense?
Oh, and I just remembered: We absolute need a #localToGlobal() and a #globalToLocal() method on Item!
Best,
Jürg