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:
Backgroundlayer (fill + logo)Worldlayer (NodeEllipsevariants)Overlaylayer (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
| Method | Description |
|---|---|
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
| Method | Description |
|---|---|
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