Python 2, 174 164164 154 bytes (based on matrix operations)
-10 bytes thanks to ngn.
- -10 bytes thanks to ngn.
- -10 bytes thanks to Jonathan Frech.
from numpy import*
s=[['#']]
exec'b=fliplr(s);s=vstack((hstack((flipud(s),b)),hstack((eye(len(s)),rot90(b)))));'*6
s[s>'#']=' ';print'\n'.join(''.join(l)'
for l in s:print''.join(l)