         self[0, 3] = Double(t.tx)
         self[1, 3] = Double(t.ty)
     }
-    
+
+    /** Creates a new transform from a `CATransform3D` structure.
+    
+    :param: t A `CATransform3D` structure.
+    */
     public init(_ t: CATransform3D) {
         self[0, 0] = Double(t.m11)
         self[0, 1] = Double(t.m12)

        self[2, 2] = 1
        self[3, 3] = 1
    }
    
    public init(_ t: CGAffineTransform) {
        self.init()
        self[0, 0] = Double(t.a)

        t[2, 2] = sz
        return t
    }

    /** Creates a transform that represents a rotation. The `axis` component is optional.

        let t = C4Transform.makeRotation(M_PI)

    :param: angle The angle, in radians, to rotate
    :param: axis The axis around which to rotate, defaults to the z axis {0,0,1}

    :returns: A `C4Transform` that can be used to rotate a receiver.
    */
    public static func makeRotation(angle: Double, axis: C4Vector = C4Vector(x: 0, y: 0, z : 1)) -> C4Transform {
        if axis.isZero() {
            return C4Transform()
