Overview
So the algorithm is a simple fill algorithm that first finds the number of blocks needed to adequately cover the diagonal. Then it walks along this diagonal is block long increments. At each increment the fill algorithm branches out at both right angles and adds blocks so long as the center is within the box.
Also just walked though this with a few pen and paper examples so might take some refining.
The diagonal walking bit.

The Algorithm
Input and computing a few bit of basic info
List BoxCenterList BlockWidth BlockLength DiagonalLength = (TR - BL).lenght() DiagonalDirection = (TR - BL).Normalize() DiagonalDirectionRightAngle = new Vector2(-DiagonalDirection.Y, DiagonalDirection.X) Center = (TR + BL) / 2
First we find the center, and then calculate the number of blocks needed to adequately cover the diagonal.
BlocksAlongDiagonal = Math.Ceiling(DiagonalLength / BlockLenght) //Number of blocks along diagonal BlockDiagonal = BlocksAlongDiagonal * BlockLenght //Length of the bridge along the diagonal
For filling the blocks in we start in the bottom left corner along the diagonal such that the walking point is in the center of where the block should be.
StartPoint = Center - ((DiagonalDirection * BlockDiagonal) / 2) StartPoint += BlockLenght / 2
And then we begin walking up the diagonal.
for (i in Range(BlockLenght)) BoxCenterList.Add(StartPoint)
Branch out at a 90 degree angle and add boxes so long as the center is in the box
TravelVector = StartPoint + (DiagonalDirection * BlockWidth) while(rectangle.contains(TravelVector)) BoxCenterList.Add(TravelVector) TravelVector += (DiagonalDirection * BlockWidth)
Branch out at the other 90 degree angle and add boxes so long as the center is in the box
TravelVector = StartPoint + (-DiagonalDirection * BlockWidth) while(rectangle.contains(TravelVector)) BoxCenterList.Add(TravelVector) TravelVector += (-DiagonalDirection * BlockWidth) StartPoint =+ DiagonalDirection * BlockLenght
To use the algorithm simply take the BoxCenterList and add a box at each location rotated to align with the DiagonalDirection vector. If you want to guarantee the entire box is covered change the condition from "is the center in the box" to "is a corner in the box"