in packages/core/src/utils/path.ts [236:314]
static calculateBounds(path: Directive[]) {
const aX = []
const aY = []
let current: Directive
let subpathStartX = 0
let subpathStartY = 0
let x = 0
let y = 0
let bounds: { x: number, y: number }[]
for (let i = 0, n = path.length; i < n; ++i) {
current = path[i]
switch (current[0]) {
case 'L':
x = current[1]
y = current[2]
bounds = []
break
case 'M':
x = current[1]
y = current[2]
subpathStartX = x
subpathStartY = y
bounds = []
break
case 'C':
bounds = getBoundsOfCurve(x, y,
current[1],
current[2],
current[3],
current[4],
current[5],
current[6]
)
x = current[5]
y = current[6]
break
case 'Q':
bounds = getBoundsOfCurve(x, y,
current[1],
current[2],
current[1],
current[2],
current[3],
current[4]
)
x = current[3]
y = current[4]
break
case 'z':
case 'Z':
x = subpathStartX
y = subpathStartY
break
}
bounds!.forEach(function (point) {
aX.push(point.x)
aY.push(point.y)
})
aX.push(x)
aY.push(y)
}
const minX = Math.min(...aX),
minY = Math.min(...aY),
maxX = Math.max(...aX),
maxY = Math.max(...aY)
return Rect.fromLTRB(
minX,
minY,
maxX,
maxY,
)
}