@skillpet/circuit
Version:
Circuit diagram library — render electrical schematics from JSON, with interactive SVG, themes, and Vue/React components
223 lines (222 loc) • 7.44 kB
TypeScript
/**
* Arcs and labels — aligned with Python `elements/lines.py` (`Arc2`–`EncircleBox`).
*/
import { Element } from "../element.js";
import type { Arcdirection } from "../types.js";
import { Point, type XY } from "../geometry/point.js";
/** Quadratic Bezier arc between `at` and `to` (or `delta`). */
export declare class Arc2 extends Element {
constructor(userParams?: Record<string, unknown> & {
k?: number;
arrow?: string;
to?: XY;
delta?: XY;
});
to(target: XY, dx?: number, dy?: number): this;
delta(dx: number, dy: number): this;
k(k: number): this;
arrow(arrow: string | undefined): this;
_place(dwgxy: XY, dwgtheta: number, dwgparams: Record<string, unknown>): {
point: Point;
theta: number;
};
}
/** Cubic Bezier arc (`th1`/`th2` in degrees). */
export declare class Arc3 extends Element {
constructor(userParams?: Record<string, unknown> & {
k?: number;
th1?: number;
th2?: number;
arrow?: string;
to?: XY;
delta?: XY;
arrowlength?: number;
arrowwidth?: number;
});
to(target: XY, dx?: number, dy?: number): this;
delta(dx: number, dy: number): this;
k(k: number): this;
th1(deg: number): this;
th2(deg: number): this;
arrow(arrow: string | undefined): this;
arrowlength(len: number): this;
arrowwidth(w: number): this;
protected setLabelAlign(dx: number, dy: number): void;
_place(dwgxy: XY, dwgtheta: number, dwgparams: Record<string, unknown>): {
point: Point;
theta: number;
};
}
/** Curved annotation arrow (label near tail). */
export declare class Annotate extends Arc3 {
constructor(userParams?: Record<string, unknown> & {
k?: number;
th1?: number;
th2?: number;
arrow?: string;
to?: XY;
delta?: XY;
arrowlength?: number;
arrowwidth?: number;
});
protected setLabelAlign(_dx: number, dy: number): void;
}
/** Arc3 with horizontal tangents at endpoints (Z-shaped). */
export declare class ArcZ extends Arc3 {
constructor(userParams?: Record<string, unknown> & {
k?: number;
arrow?: string;
to?: XY;
delta?: XY;
arrowlength?: number;
arrowwidth?: number;
});
}
/** Arc3 with vertical tangents at endpoints (N-shaped). */
export declare class ArcN extends Arc3 {
constructor(userParams?: Record<string, unknown> & {
k?: number;
arrow?: string;
to?: XY;
delta?: XY;
arrowlength?: number;
arrowwidth?: number;
});
}
/** Circular arc through `at` and `to`. */
export declare class ArcLoop extends Element {
constructor(userParams?: Record<string, unknown> & {
radius?: number;
arrow?: string;
to?: XY;
delta?: XY;
arrowlength?: number;
arrowwidth?: number;
});
to(target: XY, dx?: number, dy?: number): this;
delta(dx: number, dy: number): this;
radius(r: number): this;
arrow(arrow: string | undefined): this;
arrowlength(len: number): this;
arrowwidth(w: number): this;
_place(dwgxy: XY, dwgtheta: number, dwgparams: Record<string, unknown>): {
point: Point;
theta: number;
};
}
/** Current arrow above/below a line (use `overElement` to mimic Python `.at(el)`). */
export declare class CurrentLabel extends Element {
protected _side: "top" | "bottom" | "left" | "right";
constructor(userParams?: Record<string, unknown> & {
length?: number;
top?: boolean;
reverse?: boolean;
ofst?: number;
headlength?: number;
headwidth?: number;
/** When set, position and θ are taken from this element (after it is placed). */
overElement?: Element;
});
/**
* When `xy` is an {@link Element}, behave like Python `CurrentLabel.at(el)`:
* inherit placement from that element (stored as `overElement`).
*/
at(xy: XY | readonly [Element, string] | Element, dx?: number, dy?: number): this;
/** Alias for `at(otherElement)` (Python-style name). */
over(el: Element): this;
protected placeArrowSegment(_loc: string): void;
/**
* Python `CurrentLabel.at(Element)` — `ilabel`, host `flip`/`reverse`, bbox in **local** coords then `transform`.
*/
protected placeFromOverElement(over: Element): void;
_place(dwgxy: XY, dwgtheta: number, dwgparams: Record<string, unknown>): {
point: Point;
theta: number;
};
}
/** Voltage label as a quadratic arc. */
export declare class VoltageLabelArc extends CurrentLabel {
constructor(userParams?: Record<string, unknown> & {
length?: number;
ofst?: number;
bend?: number;
top?: boolean;
reverse?: boolean;
headlength?: number;
headwidth?: number;
overElement?: Element;
});
protected placeArrowSegment(_loc: string): void;
}
/** Inline current arrow on a lead (`overElement` mimics `.at(el)`). */
export declare class CurrentLabelInline extends Element {
constructor(direction?: "in" | "out", ofst?: number, start?: boolean, userParams?: Record<string, unknown> & {
headlength?: number;
headwidth?: number;
overElement?: Element;
});
at(xy: XY | readonly [Element, string] | Element, dx?: number, dy?: number): this;
over(el: Element): this;
_place(dwgxy: XY, dwgtheta: number, dwgparams: Record<string, unknown>): {
point: Point;
theta: number;
};
}
/** Right-angle impedance-style arrow. */
export declare class ZLabel extends Element {
constructor(userParams?: Record<string, unknown> & {
ofst?: number;
hofst?: number;
length?: number;
lengthtip?: number;
headlength?: number;
headwidth?: number;
flip?: boolean;
overElement?: Element;
});
at(xy: XY | readonly [Element, string] | Element, dx?: number, dy?: number): this;
over(el: Element): this;
_place(dwgxy: XY, dwgtheta: number, dwgparams: Record<string, unknown>): {
point: Point;
theta: number;
};
}
/** Elliptical loop arrow (mesh notation). */
export declare class LoopArrow extends Element {
constructor(userParams?: Record<string, unknown> & {
direction?: Arcdirection;
theta1?: number;
theta2?: number;
width?: number;
height?: number;
});
}
/** Loop current inside a quad of placed elements (order: top, right, bottom, left). */
export declare class LoopCurrent extends LoopArrow {
constructor(userParams: Record<string, unknown> & {
elm_list: [Element, Element, Element, Element];
direction?: Arcdirection;
theta1?: number;
theta2?: number;
pad?: number;
});
}
/** Ellipse around a list of elements. */
export declare class Encircle extends Element {
constructor(userParams: Record<string, unknown> & {
elm_list: Element[];
padx?: number;
pady?: number;
includelabels?: boolean;
});
}
/** Rounded rectangle around a list of elements. */
export declare class EncircleBox extends Element {
constructor(userParams: Record<string, unknown> & {
elm_list: Element[];
cornerradius?: number;
padx?: number;
pady?: number;
includelabels?: boolean;
});
}