Path Node (INodePath)
Path Node (INodePath)
INodePath extends IShapeBase and gives you freeform vector geometry via path commands.
Use it when Rect/Ellipse/Line are not enough and you need custom silhouettes, icons, or branded shapes.
export interface INodePath extends IShapeBase {
getCommands(): PathCommand[];
setCommands(value: PathCommand[]): void;
moveTo(to: Vector2): void;
lineTo(to: Vector2): void;
quadTo(control: Vector2, to: Vector2): void;
cubicTo(control1: Vector2, control2: Vector2, to: Vector2): void;
closePath(): void;
clearPath(): void;
isClosed(): boolean;
toString(): string;
}
Live Preview
The scene below renders two Path shapes:
- heart (cubic curves)
- lightning bolt (line segments)
Create a Heart with Commands
import { NodePath, PathCommandType, StrokeAlign } from "@flowscape-ui/core-sdk";
const heart = new NodePath(1);
heart.setName("HeartPath");
heart.setPosition(-280, -40);
heart.setSize(220, 220);
heart.setFill("#ef4444");
heart.setStrokeFill("#fecaca");
heart.setStrokeWidth({ t: 8, r: 8, b: 8, l: 8 });
heart.setStrokeAlign(StrokeAlign.Inside);
heart.setCommands([
{ type: PathCommandType.MoveTo, to: { x: 50, y: 15 } },
{
type: PathCommandType.CubicTo,
control1: { x: 35, y: -5 },
control2: { x: 0, y: 5 },
to: { x: 0, y: 37 },
},
{
type: PathCommandType.CubicTo,
control1: { x: 0, y: 62 },
control2: { x: 23, y: 82 },
to: { x: 50, y: 105 },
},
{
type: PathCommandType.CubicTo,
control1: { x: 77, y: 82 },
control2: { x: 100, y: 62 },
to: { x: 100, y: 37 },
},
{
type: PathCommandType.CubicTo,
control1: { x: 100, y: 5 },
control2: { x: 65, y: -5 },
to: { x: 50, y: 15 },
},
{ type: PathCommandType.Close },
]);
layerWorld.addNode(heart);
scene.invalidate();
Create a Path from SVG String
import { NodePath, StrokeAlign } from "@flowscape-ui/core-sdk";
const bolt = NodePath.fromString(
2,
"M28 0 L2 54 H27 L16 108 L58 43 H34 L45 0 Z",
);
bolt.setName("LightningPath");
bolt.setPosition(220, 20);
bolt.setSize(180, 280);
bolt.setFill("#f59e0b");
bolt.setStrokeFill("#fef3c7");
bolt.setStrokeWidth({ t: 8, r: 8, b: 8, l: 8 });
bolt.setStrokeAlign(StrokeAlign.Inside);
layerWorld.addNode(bolt);
scene.invalidate();
Command Types
| Command | Purpose |
|---|---|
MoveTo | Move cursor without drawing. |
LineTo | Add straight segment. |
QuadTo | Add quadratic bezier segment. |
CubicTo | Add cubic bezier segment. |
Close | Close current subpath. |
Inheritance
INode
-> IShapeBase
-> INodePath
INodePath inherits all standard shape/base behavior: fill, stroke, transform, hierarchy, bounds, hit testing, serialization.