Given three integers >= 2, create an ASCII cube in an orthogonal (cabinet) projection. 
The three integers represent height, width and depth (measured in visible characters) including the corners. The corners should be 'o's or '+', free choice. 

w: 10, h: 5, d: 4 
Thus gives:

```
   o--------o
  /        /|
 /        / |
o--------o  |
|        |  o
|        | /
|        |/
o--------o

```

Now, to make this slightly harder, all faces can either be solid, transparent or missing.
We order the faces like this:

```
   o--------o
  /        /|
 /    2   / |
o--------o 3|
|        |  o
|   1    | /
|        |/
o--------o

  ---
  |2|
-------
|5|1|3|
-------
  |4|
  ---
  |6|
  ---

```

And supply a list of tokens, S, T or M. The original example is thus:

```
w 10
h 5
d 4
S S S S S S

   o--------o
  /        /|
 /        / |
o--------o  |
|        |  o
|        | /
|        |/ 
o--------o

```

If one face is transparent, we can see anything that is behind it:

```
T S S S S S

   o--------o
  /        /|
 /        / |
o--------o  |
|  o-----|  o
| /      | /
|/       |/
o--------o

T T T T T T

   o--------o
  /|       /|
 / |      / |
o--------o  |
|  o-----|--o
| /      | /
|/       |/
o--------o

```

For pairs of missing faces, adjacent edges or corners are no longer visible:

```
M M S S S S

   o--------o
  /|       /|
 / |      / |
o  |     o  |
|  o-----|  o
| /      | /
|/       |/
o--------o

M M S S M S

   o--------o
   |       /|
   |      / |
   |     o  |
   o-----|  o
  /      | /
 /       |/
o--------o

```

Code golf, shortest code wins!
Trailing spaces and newlines are fine, you're free to choose input method and input order.