# 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.