That’s almost correct - the exception is when the mapping onto the face is produce UVQ values where the Q value is not 1.0.
Lets have a quick look at the various ways a texture can be mapped on to a face:




All the three first cases will produce UVQ mapping where the Q value is 1.0 - this means the texture mapping plane is planar to the face.
In the last case the texture plane is different from the face’s plane - and you will see values of Q that is not 1.0.
Many file formats doesn’t support the Q value - and that’s where the TextureWriter comes in. When you feed the Texture writer a face where the texture plane is different from the face it will generate a new texture and new UV coordinates. This allows exporters to export SketchUp models which is visually accurate.
(Some exporters take the approach of dividing U and V by Q - but that’s just an approximation and visual deviation will occur. However some exporters prefer this over generating a large amount of unique textures.)
When applying projected textures you often end up with perspective mapping because the source texture mapping normal will be different from the target faces’ normal.

Unfortunately the documentation for the TextureWriter doesn’t explain this behaviour very well. We have an open issue to improve this. But that’s the original intent for it. It has never been intended to always crop and create new unique textures.
The Ruby API Sketchup::TextureWriter class is a thin wrapper on top of our internal C++ TextureWriter class which our exporters use. When you observe that an export - or any usage of TextureWriter - produce a mix of cropped and non-cropped textures, that is intended behaviour. Our exporters prefer to export original texture files - but will fall back to creating unique ones only when needed to preserve visual appearance of the exported mesh.
One common requests we have from developers is to export all textures in a model without cropping. I think this is the first time I’ve heard it’s desired to see the behaviour for all faces.
If you can provide us with an use-case for why you want all textures for all faces to be cropped like this I can file a feature request.