# C# <s>199</s> <s>197</s> 196 bytes
<!-- language: c# -->
string f(int n){var u=n<0;int m=u?-n:n;string a="",b=" O ";for(;m-->0;)b+="\n/ \\\n\\ /\n "+(m==0?"O ":u?"\\ ":"/ ");for(;++m<3;)a+=string.Concat(b.Split('\n').Select(s=>s[m]))+"\n";return u?b:a;}
Ungolfed version:
<!-- language: c# -->
string f(int n)
{
var u = n < 0;
int m = u ? -n : n;
string a = "", b = " O ";
for (; m-- > 0; ) b += "\n/ \\\n\\ /\n " + (m == 0 ? "O " : u ? "\\ " : "/ ");
for (; ++m < 3;) a += string.Concat(b.Split('\n').Select(s => s[m])) + "\n";
return u ? b : a;
}
The idea is to build the horizontal display from the vertical display by rendering the transposed matrix of characters.