| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import {
- curveBasis,
- curveBasisClosed,
- curveBasisOpen,
- curveBundle,
- curveBumpX,
- curveBumpY,
- curveCardinal,
- curveCardinalClosed,
- curveCardinalOpen,
- curveCatmullRom,
- curveCatmullRomClosed,
- curveCatmullRomOpen,
- curveLinear,
- curveLinearClosed,
- curveMonotoneX,
- curveMonotoneY,
- curveNatural,
- curveStep,
- curveStepAfter,
- curveStepBefore
- } from "d3";
- const curves = new Map([
- ["basis", curveBasis],
- ["basis-closed", curveBasisClosed],
- ["basis-open", curveBasisOpen],
- ["bundle", curveBundle],
- ["bump-x", curveBumpX],
- ["bump-y", curveBumpY],
- ["cardinal", curveCardinal],
- ["cardinal-closed", curveCardinalClosed],
- ["cardinal-open", curveCardinalOpen],
- ["catmull-rom", curveCatmullRom],
- ["catmull-rom-closed", curveCatmullRomClosed],
- ["catmull-rom-open", curveCatmullRomOpen],
- ["linear", curveLinear],
- ["linear-closed", curveLinearClosed],
- ["monotone-x", curveMonotoneX],
- ["monotone-y", curveMonotoneY],
- ["natural", curveNatural],
- ["step", curveStep],
- ["step-after", curveStepAfter],
- ["step-before", curveStepBefore]
- ]);
- export function maybeCurve(curve = curveLinear, tension) {
- if (typeof curve === "function") return curve; // custom curve
- const c = curves.get(`${curve}`.toLowerCase());
- if (!c) throw new Error(`unknown curve: ${curve}`);
- if (tension !== undefined) {
- if ("beta" in c) {
- return c.beta(tension);
- } else if ("tension" in c) {
- return c.tension(tension);
- } else if ("alpha" in c) {
- return c.alpha(tension);
- }
- }
- return c;
- }
- // For the “auto” curve, return a symbol instead of a curve implementation;
- // we’ll use d3.geoPath to render if there’s a projection.
- export function maybeCurveAuto(curve = curveAuto, tension) {
- return typeof curve !== "function" && `${curve}`.toLowerCase() === "auto" ? curveAuto : maybeCurve(curve, tension);
- }
- // This is a special built-in curve that will use d3.geoPath when there is a
- // projection, and the linear curve when there is not. You can explicitly
- // opt-out of d3.geoPath and instead use d3.line with the "linear" curve.
- export function curveAuto(context) {
- return curveLinear(context);
- }
|