             }
             return cache.originalBoundary!
         }
+    }
+    
+    public mutating func rotate(_ angle: Double) {
+        let center = self.center
+        self.transform *= SDTransform.translate(x: -center.x, y: -center.y) * SDTransform.rotate(angle) * SDTransform.translate(x: center.x, y: center.y)
+    }
+    
+    public mutating func scale(_ scale: Double) {
+        let center = self.center
+        self.transform *= SDTransform.translate(x: -center.x, y: -center.y) * SDTransform.scale(scale) * SDTransform.translate(x: center.x, y: center.y)
     }
     
     public var frame : [Point] {

                    var boundary = cache.boundary
                    let offset = newValue - _center
                    boundary?.origin += offset
                    baseTransform *= SDTransform.translate(x: offset.x, y: offset.y)
                    return Cache(originalBoundary: cache.originalBoundary, boundary: boundary, table: cache.table)
                }
            }

    
    public var center : Point {
        get {
            return originalBoundary.center * transform
        }
        set {
            let _center = center
