weasel API - v0.8.0
    Preparing search index...

    Function annulusSemiAxes

    • An annulus region's effective outer semi-axes, with minBandPx applied.

      The affordance declares the natural ellipse (typically the smallest one containing the inner rect) plus a screen-space floor on band thickness; this is where the floor becomes world units, because this is where the view is known. Paint calls it too, so the visible ring and the hoverable ring are the same ring.

      Parameters

      • shape: {
            cx: number;
            cy: number;
            innerHeight: number;
            innerWidth: number;
            innerX: number;
            innerY: number;
            kind: "annulus";
            minBandPx?: number;
            rx: number;
            ry: number;
        }
        • cx: number

          Outer-ellipse center (target-local).

        • cy: number
        • innerHeight: number
        • innerWidth: number
        • innerX: number

          Inner rect (target-local) — the cutout. Typically the selection's AABB.

        • innerY: number
        • kind: "annulus"
        • OptionalminBandPx?: number

          Minimum band thickness outside the inner rect, in screen pixels. The framework widens rx/ry to at least innerHalfExtent + minBandPx / meanScale(view.scale) for both paint and hit-test.

          This exists because the clamp has to know the view and the affordance doesn't: ChromeState carries no scale. Expressing the floor in world units instead (which is what the rotate ring used to do) makes the band shrink on screen as you zoom in, until the ring around a small shape is too thin to hover.

        • rx: number

          Outer-ellipse semi-axes (target-local).

        • ry: number
      • view: View

      Returns { rx: number; ry: number }