   var miterLimit : Float { get }
 }
 
-/// State object passed down amongst transformational elements
-struct SVGState {
-  var transform = SVGMatrix.Identity
-  
-  func applyTransform(transform : SVGMatrix) -> SVGState {
-    return SVGState(transform: GLKMatrix3Multiply(self.transform, transform))
-  }
-}
-
 // Basic SVG Protocols
-
 protocol SVGTransformable {
   var transform : SVGMatrix { get }
 }

    return CGPoint(x: x?.value ?? 0, y: y?.value ?? 0)
  }
  
  override func drawToContext(context: CGContextRef, state: SVGState) {
    var points = [start, end]
    CGContextAddLines(context, &points, 2)
    handleStrokeAndFill(context)

  var points : [CGPoint] {
    return attributes["points"] as? [CGPoint] ?? []
  }
  override func drawToContext(context: CGContextRef) {
    var pts = points
    CGContextAddLines(context, &pts, pts.count)
    CGContextClosePath(context)
