|
|
|
@ -288,6 +288,35 @@ export const getFreedrawShape = <Point extends GlobalPoint | LocalPoint>(
|
|
|
|
|
) as GeometricShape<Point>;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const getPointsOnRoughCurve = <Point extends GlobalPoint | LocalPoint>(
|
|
|
|
|
roughCurve: Drawable,
|
|
|
|
|
) => {
|
|
|
|
|
const ops = getCurvePathOps(roughCurve);
|
|
|
|
|
|
|
|
|
|
const points: Point[] = [];
|
|
|
|
|
let odd = false;
|
|
|
|
|
for (const operation of ops) {
|
|
|
|
|
if (operation.op === "move") {
|
|
|
|
|
odd = !odd;
|
|
|
|
|
if (odd) {
|
|
|
|
|
points.push(pointFrom(operation.data[0], operation.data[1]));
|
|
|
|
|
}
|
|
|
|
|
} else if (operation.op === "bcurveTo") {
|
|
|
|
|
if (odd) {
|
|
|
|
|
points.push(pointFrom(operation.data[0], operation.data[1]));
|
|
|
|
|
points.push(pointFrom(operation.data[2], operation.data[3]));
|
|
|
|
|
points.push(pointFrom(operation.data[4], operation.data[5]));
|
|
|
|
|
}
|
|
|
|
|
} else if (operation.op === "lineTo") {
|
|
|
|
|
if (odd) {
|
|
|
|
|
points.push(pointFrom(operation.data[0], operation.data[1]));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return points;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const getClosedCurveShape = <Point extends GlobalPoint | LocalPoint>(
|
|
|
|
|
element: ExcalidrawLinearElement,
|
|
|
|
|
roughShape: Drawable,
|
|
|
|
@ -311,31 +340,10 @@ export const getClosedCurveShape = <Point extends GlobalPoint | LocalPoint>(
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const ops = getCurvePathOps(roughShape);
|
|
|
|
|
|
|
|
|
|
const points: Point[] = [];
|
|
|
|
|
let odd = false;
|
|
|
|
|
for (const operation of ops) {
|
|
|
|
|
if (operation.op === "move") {
|
|
|
|
|
odd = !odd;
|
|
|
|
|
if (odd) {
|
|
|
|
|
points.push(pointFrom(operation.data[0], operation.data[1]));
|
|
|
|
|
}
|
|
|
|
|
} else if (operation.op === "bcurveTo") {
|
|
|
|
|
if (odd) {
|
|
|
|
|
points.push(pointFrom(operation.data[0], operation.data[1]));
|
|
|
|
|
points.push(pointFrom(operation.data[2], operation.data[3]));
|
|
|
|
|
points.push(pointFrom(operation.data[4], operation.data[5]));
|
|
|
|
|
}
|
|
|
|
|
} else if (operation.op === "lineTo") {
|
|
|
|
|
if (odd) {
|
|
|
|
|
points.push(pointFrom(operation.data[0], operation.data[1]));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const polygonPoints = pointsOnBezierCurves(points, 10, 5).map((p) =>
|
|
|
|
|
transform(p as Point),
|
|
|
|
|
const polygonPoints = pointsOnBezierCurves(
|
|
|
|
|
getPointsOnRoughCurve(roughShape),
|
|
|
|
|
10,
|
|
|
|
|
5,
|
|
|
|
|
) as Point[];
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|