How to make a grid of objects with individual rotations? My goal at the moment is to create a 2D field of a particular object, with each instance rotated a 45° more than the last. An ASCII art illustration of what I want to get, from a top-down view:

| / - \ | / - \ | . . .
/ - \ | / - \ | / . . .
- \ | / - \ | / - . . .
\ | / - \ | / - | . . .
.
.
.


Well, something like that. I'd have to fiddle with the 2D aspect, but it's first dimension I can't seem to get a hold of, just getting what looks like the object spinning as it moves forward. I can't seem to accomplish this in a way that doesn't involve ultimately duplicating each instance by hand.

Here's what I've tried:

I first reach for the array modifier, naturally, but as you can see it doesn't work; the translation of each object is done to the "local axes"(?) of the previous repetition, meaning it'll spin the array in a circle instead of what I want.



So while searching I learned about dupliframes and tried using that. It takes care of the 45° rotation that stumps the array modifier, but then I'd like to use an array modifier to repeat the group of four I have. That modifier doesn't work:



Not too surprising, considering I am animating an array-modified object now, so I guess I'll just "apply" the dupliframes (make them individual objects) and try to link an array modifier between them. But it creates the same issue as above.

At this point I'd have to apply rotations to get it to work, but in doing so I need to un-share the underlying mesh, and then that ends up not being a solution, since it's no better than manual copy-pasting.

Ideally, there'd be a better array modifier that worked on objects rather than meshes, and that would just let me say "Rotate: (0, 0, -45°)  Translate: (0, 2, 0), on global axes" for a total of four objects and have it handle the apparently super tricky task I want to accomplish (then further modifiers would be able to simply repeat the group of four, of course).

However, since as far as I know this ideal modifier doesn't exist, what's the closest approximation to it? Or am I stuck needing to manually duplicate everything?

(Honestly, if I could just tell the array modifier to be based on the global/world axes instead of local ones, this would already be solved.)
The Sverchok Add-on has convenient nodes for this:





You pick the object you want to duplicate, and you pass it a set of Matrices. These Matrices contain location and rotation data each. 


The location data comes from the Plane generator (this generates the grid of locations using a subdivided plane with X and Y divisions (W, H).) 
The rotation data comes from the Vector (0,0,1)  node and the integer range node produces a steady stream of 25 or (W*H) sequential integer going from [0 .. 18 .. 36 ... etc]


You might set the step size in the list Range int node to 45 or -45, and adjust the W and H to suit you.



The Plane generator generates coordinates (viewing from topview) from bottom left to top right. If you really want to start top left you would transform the output of Plane with a Rotation node.





I think the benefit of this method is that it's entirely dynamic. You can pick whatever number of rows or columns and the step rotation.