mirror of
https://github.com/excalidraw/excalidraw.git
synced 2025-05-03 10:00:07 -04:00
chore: Unify math types, utils and functions (#8389)
Co-authored-by: dwelle <5153846+dwelle@users.noreply.github.com>
This commit is contained in:
parent
e3d1dee9d0
commit
f4dd23fc31
98 changed files with 4291 additions and 3661 deletions
|
@ -1,3 +1,4 @@
|
|||
import type { Point as RoughPoint } from "roughjs/bin/geometry";
|
||||
import type { Drawable, Options } from "roughjs/bin/core";
|
||||
import type { RoughGenerator } from "roughjs/bin/generator";
|
||||
import { getDiamondPoints, getArrowheadPoints } from "../element";
|
||||
|
@ -9,7 +10,6 @@ import type {
|
|||
ExcalidrawLinearElement,
|
||||
Arrowhead,
|
||||
} from "../element/types";
|
||||
import { isPathALoop, getCornerRadius, distanceSq2d } from "../math";
|
||||
import { generateFreeDrawShape } from "../renderer/renderElement";
|
||||
import { isTransparent, assertNever } from "../utils";
|
||||
import { simplify } from "points-on-curve";
|
||||
|
@ -23,6 +23,13 @@ import {
|
|||
} from "../element/typeChecks";
|
||||
import { canChangeRoundness } from "./comparisons";
|
||||
import type { EmbedsValidationStatus } from "../types";
|
||||
import {
|
||||
point,
|
||||
pointDistance,
|
||||
type GlobalPoint,
|
||||
type LocalPoint,
|
||||
} from "../../math";
|
||||
import { getCornerRadius, isPathALoop } from "../shapes";
|
||||
|
||||
const getDashArrayDashed = (strokeWidth: number) => [8, 8 + strokeWidth];
|
||||
|
||||
|
@ -399,12 +406,14 @@ export const _generateElementShape = (
|
|||
|
||||
// points array can be empty in the beginning, so it is important to add
|
||||
// initial position to it
|
||||
const points = element.points.length ? element.points : [[0, 0]];
|
||||
const points = element.points.length
|
||||
? element.points
|
||||
: [point<LocalPoint>(0, 0)];
|
||||
|
||||
if (isElbowArrow(element)) {
|
||||
shape = [
|
||||
generator.path(
|
||||
generateElbowArrowShape(points as [number, number][], 16),
|
||||
generateElbowArrowShape(points, 16),
|
||||
generateRoughOptions(element, true),
|
||||
),
|
||||
];
|
||||
|
@ -412,12 +421,16 @@ export const _generateElementShape = (
|
|||
// curve is always the first element
|
||||
// this simplifies finding the curve for an element
|
||||
if (options.fill) {
|
||||
shape = [generator.polygon(points as [number, number][], options)];
|
||||
shape = [
|
||||
generator.polygon(points as unknown as RoughPoint[], options),
|
||||
];
|
||||
} else {
|
||||
shape = [generator.linearPath(points as [number, number][], options)];
|
||||
shape = [
|
||||
generator.linearPath(points as unknown as RoughPoint[], options),
|
||||
];
|
||||
}
|
||||
} else {
|
||||
shape = [generator.curve(points as [number, number][], options)];
|
||||
shape = [generator.curve(points as unknown as RoughPoint[], options)];
|
||||
}
|
||||
|
||||
// add lines only in arrow
|
||||
|
@ -491,8 +504,8 @@ export const _generateElementShape = (
|
|||
}
|
||||
};
|
||||
|
||||
const generateElbowArrowShape = (
|
||||
points: [number, number][],
|
||||
const generateElbowArrowShape = <Point extends GlobalPoint | LocalPoint>(
|
||||
points: readonly Point[],
|
||||
radius: number,
|
||||
) => {
|
||||
const subpoints = [] as [number, number][];
|
||||
|
@ -501,8 +514,8 @@ const generateElbowArrowShape = (
|
|||
const next = points[i + 1];
|
||||
const corner = Math.min(
|
||||
radius,
|
||||
Math.sqrt(distanceSq2d(points[i], next)) / 2,
|
||||
Math.sqrt(distanceSq2d(points[i], prev)) / 2,
|
||||
pointDistance(points[i], next) / 2,
|
||||
pointDistance(points[i], prev) / 2,
|
||||
);
|
||||
|
||||
if (prev[0] < points[i][0] && prev[1] === points[i][1]) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue