fix(paperjs): fix scale bug
This commit is contained in:
@@ -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)
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user