mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-10-08 18:48:12 +08:00
Bezier-rs: Add Euclidean parameterization to Bezier::evaluate (#828)
* Add enum to evaluate for differenciating compute type * Add euclidean parameterization and update styling in the UI Co-authored-by: Rob Nadal <robnadal44@gmail.com> * Update usage of evaluate in graphite * Add description * Code review changes * Update tests * Improve ComputeType ergonomics * Large code review/cleanup pass Co-authored-by: Rob Nadal <robnadal44@gmail.com> Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
committed by
Keavon Chambers
co-authored by
Rob Nadal
Keavon Chambers
parent
a220bfa759
commit
01a9724389
@@ -1,27 +0,0 @@
|
||||
import { BezierCurveType, WasmBezierConstructorKey } from "@/utils/types";
|
||||
|
||||
export function getCurveType(numPoints: number): BezierCurveType {
|
||||
switch (numPoints) {
|
||||
case 2:
|
||||
return BezierCurveType.Linear;
|
||||
case 3:
|
||||
return BezierCurveType.Quadratic;
|
||||
case 4:
|
||||
return BezierCurveType.Cubic;
|
||||
default:
|
||||
throw new Error("Invalid number of points for a bezier");
|
||||
}
|
||||
}
|
||||
|
||||
export function getConstructorKey(bezierCurveType: BezierCurveType): WasmBezierConstructorKey {
|
||||
switch (bezierCurveType) {
|
||||
case BezierCurveType.Linear:
|
||||
return "new_linear";
|
||||
case BezierCurveType.Quadratic:
|
||||
return "new_quadratic";
|
||||
case BezierCurveType.Cubic:
|
||||
return "new_cubic";
|
||||
default:
|
||||
throw new Error("Invalid value for a BezierCurveType");
|
||||
}
|
||||
}
|
||||
@@ -8,13 +8,12 @@ export type WasmBezierManipulatorKey = "set_start" | "set_handle_start" | "set_h
|
||||
export type WasmSubpathInstance = InstanceType<WasmRawInstance["WasmSubpath"]>;
|
||||
export type WasmSubpathManipulatorKey = "set_anchor" | "set_in_handle" | "set_out_handle";
|
||||
|
||||
export enum BezierCurveType {
|
||||
Linear = "Linear",
|
||||
Quadratic = "Quadratic",
|
||||
Cubic = "Cubic",
|
||||
}
|
||||
export const BEZIER_CURVE_TYPE = ["Linear", "Quadratic", "Cubic"] as const;
|
||||
export type BezierCurveType = typeof BEZIER_CURVE_TYPE[number];
|
||||
|
||||
export type BezierCallback = (bezier: WasmBezierInstance, options: Record<string, number>, mouseLocation?: [number, number]) => string;
|
||||
export type ComputeType = "Euclidean" | "Parametric";
|
||||
|
||||
export type BezierCallback = (bezier: WasmBezierInstance, options: Record<string, number>, mouseLocation?: [number, number], computeType?: ComputeType) => string;
|
||||
export type SubpathCallback = (subpath: WasmSubpathInstance) => string;
|
||||
|
||||
export type ExampleOptions = {
|
||||
@@ -33,3 +32,24 @@ export type SliderOption = {
|
||||
variable: string;
|
||||
unit?: string | string[];
|
||||
};
|
||||
|
||||
export function getCurveType(numPoints: number): BezierCurveType {
|
||||
const mapping: Record<number, BezierCurveType> = {
|
||||
2: "Linear",
|
||||
3: "Quadratic",
|
||||
4: "Cubic",
|
||||
};
|
||||
|
||||
if (!(numPoints in mapping)) throw new Error("Invalid number of points for a bezier");
|
||||
|
||||
return mapping[numPoints];
|
||||
}
|
||||
|
||||
export function getConstructorKey(bezierCurveType: BezierCurveType): WasmBezierConstructorKey {
|
||||
const mapping: Record<BezierCurveType, WasmBezierConstructorKey> = {
|
||||
Linear: "new_linear",
|
||||
Quadratic: "new_quadratic",
|
||||
Cubic: "new_cubic",
|
||||
};
|
||||
return mapping[bezierCurveType];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user