Skip to main content

Ellipse Node (INodeEllipse)

Ellipse Node (INodeEllipse)

INodeEllipse extends IShapeBase and adds ellipse-specific controls for donut ratio and arc angles.

export interface INodeEllipse extends IShapeBase {
getInnerRatio(): number;
setInnerRatio(value: number): void;

getStartAngle(): number;
setStartAngle(value: number): void;

getEndAngle(): number;
setEndAngle(value: number): void;

getSweepAngle(): number;
}

Live Preview

The example below uses warm, high-contrast colors and shows multiple ellipse variants in one scene:

  • Background layer (fill + logo)
  • World layer (NodeEllipse variants)
  • Overlay layer (editor overlays/interactions)

Variations in Code

1. Solid Ellipse

import {
NodeEllipse,
StrokeAlign,
} from '@flowscape-ui/core-sdk';

const ellipse = new NodeEllipse(1);
ellipse.setName('Solid');
ellipse.setSize(260, 260);
ellipse.setPosition(-460, -160);
ellipse.setFill('#ff7a00');
ellipse.setStrokeFill('#ffe0b2');
ellipse.setStrokeWidth({ t: 8, r: 8, b: 8, l: 8 });
ellipse.setStrokeAlign(StrokeAlign.Inside);
ellipse.setInnerRatio(0);
ellipse.setStartAngle(0);
ellipse.setEndAngle(360);

layerWorld.addNode(ellipse);
scene.invalidate();

2. Donut Ellipse

const donut = new NodeEllipse(2);
donut.setName('Donut');
donut.setSize(260, 260);
donut.setPosition(-120, -160);
donut.setFill('#ff4d00');
donut.setStrokeFill('#ffe9c7');
donut.setStrokeWidth({ t: 10, r: 10, b: 10, l: 10 });
donut.setStrokeAlign(StrokeAlign.Inside);
donut.setInnerRatio(0.58);
donut.setStartAngle(0);
donut.setEndAngle(360);
layerWorld.addNode(donut);

3. Arc Ellipse

const arc = new NodeEllipse(3);
arc.setName('Arc');
arc.setSize(260, 260);
arc.setPosition(220, -160);
arc.setFill('#ff9f1c');
arc.setStrokeFill('#fff0d6');
arc.setStrokeWidth({ t: 10, r: 10, b: 10, l: 10 });
arc.setStrokeAlign(StrokeAlign.Inside);
arc.setInnerRatio(0);
arc.setStartAngle(28);
arc.setEndAngle(306);
layerWorld.addNode(arc);

4. Ring Arc

const ringArc = new NodeEllipse(4);
ringArc.setName('Ring Arc');
ringArc.setSize(260, 260);
ringArc.setPosition(-460, 140);
ringArc.setFill('#ff5a36');
ringArc.setStrokeFill('#ffd8bf');
ringArc.setStrokeWidth({ t: 10, r: 10, b: 10, l: 10 });
ringArc.setStrokeAlign(StrokeAlign.Inside);
ringArc.setInnerRatio(0.7);
ringArc.setStartAngle(44);
ringArc.setEndAngle(332);
layerWorld.addNode(ringArc);

5. Rotated Donut

const rotated = new NodeEllipse(5);
rotated.setName('Tilted Donut');
rotated.setSize(260, 260);
rotated.setPosition(-120, 140);
rotated.setRotation(0.24);
rotated.setFill('#f97316');
rotated.setStrokeFill('#fff1db');
rotated.setStrokeWidth({ t: 8, r: 8, b: 8, l: 8 });
rotated.setStrokeAlign(StrokeAlign.Inside);
rotated.setInnerRatio(0.3);
rotated.setStartAngle(0);
rotated.setEndAngle(360);
layerWorld.addNode(rotated);

6. Thin Ring

const thinRing = new NodeEllipse(6);
thinRing.setName('Sun Ring');
thinRing.setSize(260, 260);
thinRing.setPosition(220, 140);
thinRing.setFill('#ffb347');
thinRing.setStrokeFill('#fff5dd');
thinRing.setStrokeWidth({ t: 12, r: 12, b: 12, l: 12 });
thinRing.setStrokeAlign(StrokeAlign.Inside);
thinRing.setInnerRatio(0.82);
thinRing.setStartAngle(0);
thinRing.setEndAngle(360);
layerWorld.addNode(thinRing);

Ratio API

MethodDescription
getInnerRatio()Returns inner ratio (0 means filled ellipse).
setInnerRatio(value)Sets inner ratio, clamped to [0, 0.999].

innerRatio > 0 creates a donut-like visual form.

Angle API

MethodDescription
getStartAngle()Returns arc start angle in degrees.
setStartAngle(value)Sets arc start angle in degrees.
getEndAngle()Returns arc end angle in degrees.
setEndAngle(value)Sets arc end angle in degrees.
getSweepAngle()Returns computed sweep (endAngle - startAngle).

These methods let you build full ellipses, arcs, and ring-like segments.

Inheritance

INode
-> IShapeBase
-> INodeEllipse

INodeEllipse also inherits all shape/base methods:

  • fill and stroke API
  • transform and hierarchy API
  • bounds and hit-test API
  • serialization API

Next