         if self.isEmpty {
             return []
         }
-        if !self.bigBound.isIntersect(other.bigBound) {
+        if !self.boundary.isIntersect(other.boundary) {
             return self.solids
         }
         
-        let overlap = self.spacePartition.search(overlap: other.bigBound)
+        let overlap = self.spacePartition.search(overlap: other.boundary)
         var result: [ShapeRegion.Solid] = []
         result.reserveCapacity(solids.count)
         for (index, solid) in solids.enumerated() {

        return solids.reduce(0) { $0 + $1.area }
    }
    
    fileprivate var bigBound: Rect {
        return boundary.inset(dx: _boundInset * Swift.max(1, abs(boundary.x), abs(boundary.width)), dy: _boundInset * Swift.max(1, abs(boundary.y), abs(boundary.height)))
    }
    
    public var shape: Shape {
        let _path = Shape(solids.flatMap { $0.components.enumerated().map { $1.area.sign == ($0 == 0 ? .plus : .minus) ? $1 : $1.reversed() } })
        _path.cacheTable[ShapeCacheNonZeroRegionKey] = self

    
    fileprivate var cacheId: ObjectIdentifier {
        return ObjectIdentifier(cache)
    }
    
    fileprivate func reversed() -> ShapeRegion.Solid {
