fix(paperjs): fix scale bug

This commit is contained in:
2026-03-04 10:36:24 +08:00
parent 448a64df3b
commit 19010c4b41
3 changed files with 325 additions and 140 deletions

View File

@@ -1,5 +1,53 @@
import paper from "paper"
const scaleFlatPoint = (point: any, scale: number): [number, number] => {
return [point[0] * scale, point[1] * scale]
}
const scaleSegmentToPoint = (seg: any, scale: number): any => {
if (seg instanceof paper.Point) {
return [seg.x * scale, seg.y * scale]
}
if (seg instanceof paper.Segment) {
return [seg.point.x * scale, seg.point.y * scale]
}
if (
Array.isArray(seg) &&
seg.length >= 2 &&
typeof seg[0] === "number" &&
typeof seg[1] === "number"
) {
return scaleFlatPoint(seg, scale)
}
if (
Array.isArray(seg) &&
Array.isArray(seg[0]) &&
seg[0].length >= 2 &&
typeof seg[0][0] === "number" &&
typeof seg[0][1] === "number"
) {
// Support paper JSON segment format: [[x,y], [handleInX, handleInY], [handleOutX, handleOutY]]
return scaleFlatPoint(seg[0], scale)
}
if (
seg?.point &&
typeof seg.point.x === "number" &&
typeof seg.point.y === "number"
) {
return [seg.point.x * scale, seg.point.y * scale]
}
if (
seg?.point &&
Array.isArray(seg.point) &&
seg.point.length >= 2 &&
typeof seg.point[0] === "number" &&
typeof seg.point[1] === "number"
) {
return [seg.point[0] * scale, seg.point[1] * scale]
}
return seg
}
// 调整原始比例点位到当前图片的缩放比例
export const adjustPoints: (
id: string,
@@ -34,25 +82,13 @@ export const adjustPoints: (
let adjustedPoints = points.map((child) => {
return child.map((seg: any) => {
if (seg instanceof paper.Point) {
return [seg.x * scale, seg.y * scale]
} else if (seg instanceof paper.Segment) {
return [seg.point.x * scale, seg.point.y * scale]
} else {
return seg.map((item: any) => item * scale)
}
return scaleSegmentToPoint(seg, scale)
})
})
let adjustedHollowPoints = hollowPoints.map((child) => {
return child.map((seg: any) => {
if (seg instanceof paper.Point) {
return [seg.x * scale, seg.y * scale]
} else if (seg instanceof paper.Segment) {
return [seg.point.x * scale, seg.point.y * scale]
} else {
return seg.map((item: any) => item * scale)
}
return scaleSegmentToPoint(seg, scale)
})
})
@@ -103,25 +139,13 @@ export const adjustAllPoints: (
let adjustedPoints = points.map((child) => {
return child.map((seg: any) => {
if (seg instanceof paper.Point) {
return [seg.x * scale, seg.y * scale]
} else if (seg instanceof paper.Segment) {
return [seg.point.x * scale, seg.point.y * scale]
} else {
return seg.map((item: any) => item * scale)
}
return scaleSegmentToPoint(seg, scale)
})
})
let adjustedHollowPoints = hollowPoints.map((child) => {
return child.map((seg: any) => {
if (seg instanceof paper.Point) {
return [seg.x * scale, seg.y * scale]
} else if (seg instanceof paper.Segment) {
return [seg.point.x * scale, seg.point.y * scale]
} else {
return seg.map((item: any) => item * scale)
}
return scaleSegmentToPoint(seg, scale)
})
})