say we have a wall that will get a texture (say bricks, instead of the UV texture I will show here):
the texture is using the surface uvs, but we want constant-sized bricks over the object, so we use object properties > texture mapping to set up a cubic projection of size [0.5 0.5 0.5]:
so far so good, but now say we need to scale the wall:
less good now; looking again in object properties > texture mapping we can see the problem:
rather than constantly trying to maintain our projection size here as we edit our model, we can instead use wcs/ocs (box style) in the texture:
our cubic projection will now be irrelevant for this texture, with UV coordinates for each point in the object being based on its position in world space (the W in WCS – World Coordinate Space/System)
as such we are back to our desired texture tile sizes:
and now, we keep that size when once again scaling the wall:
however, if we rotate the wall, then we see a new problem:
our object is rotating within the world space, which remains static, yielding uvs that are not aligned with our geometry (you can see the effect in real time in the rendered viewport)
for such cases, we can use the ApplyOcsMapping command to define a coordinate system aligned with the object (the O in OCS), so that when we rotate it, the textures remain “stuck” to the object: