       @obj3d.position.y = y
       @obj3d.position.z = z
 
+  Line: class Line
+    constructor: (color, x, y, z, width, height) ->
+      @material = new THREE.LineBasicMaterial({color: color, linewidth: 3})
+      @geom = new THREE.Geometry()
+      w = width/2
+      h = height/2
+      @geom.vertices.push(
+        new THREE.Vector3(-w,  h, z),
+        new THREE.Vector3( w, -h, z)
+      )
+      @obj3d = new THREE.Line(@geom, @material)
+      @obj3d.position.x = x
+      @obj3d.position.y = y
+      @obj3d.position.z = z
+
 }
 
 #The BaseElements object holds classes which are Visual representations of the

  #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)
      @shp.obj3d.userData = this
      @parent.obj3d.add(@shp.obj3d)
    
    #cyjs generates the json for this object
    cyjs: ->


    @addElement((box, x, y) -> new BaseElements.Controller(box, x, y, 5))
    @addElement((box, x, y) -> new BaseElements.Router(box, x, y, 5))
    @addElement((box, x, y) -> new BaseElements.Switch(box, x, y, 5))
    @addElement((box, x, y) -> new BaseElements.Link(box, x, y, 5))

#The Surface holds visual representations of Systems and Elements
class Surface
