     @addElement((box, x, y) -> new BaseElements.Router(box, x, y, 0))
     @addElement((box, x, y) -> new BaseElements.Switch(box, x, y, 0))
 
+#The Surface holds visual representations of Systems and Elements
 class Surface
   #Constructs a Surface object given a @ve visual environment
   constructor: (@ve) ->

    @baseRect = new Shapes.Rectangle(0x262626, 0, 0, 0, @width, @height)
    @ve.scene.add(@baseRect.obj3d)

class VisualEnvironment
  constructor: (@container) ->
    @scene = new THREE.Scene()
    @width = container.offsetWidth


}

#The BaseElements object holds classes which are Visual representations of the
#objects that comprise a Cypress networked CPS system
BaseElements = {
 
  #The Controller class is a visual representation of a controller e.g., a
  #computer that hosts control code
  Controller: class Controller
    constructor: (@parent, x, y, z) ->
      @shp = new Shapes.Diamond(0x007474, x, y, z, 15)
      @parent.obj3d.add(@shp.obj3d)

  #Router is a visual representation of an IP-network router 
  Router: class Router
    constructor: (@parent, x, y, z) ->
      @shp = new Shapes.Circle(0x0047ca, x, y, z, 15)
      @parent.obj3d.add(@shp.obj3d)

  #Switch is a visual representation of an IP-network swtich
  Switch: class Switch
    constructor: (@parent, x, y, z) ->
      @shp= new Shapes.Rectangle(0x0047ca, x, y, z, 25, 25)
