@typecad/typecad
Version:
🤖programmatically 💥create 🛰️hardware
116 lines (115 loc) • 3.35 kB
TypeScript
export declare function pointToSegmentDistance(px: number, py: number, x1: number, y1: number, x2: number, y2: number): number;
export interface IGridCell {
x: number;
y: number;
layer: string;
occupied: boolean;
net?: string;
isManualRoute?: boolean;
absoluteBlock?: boolean;
pad?: boolean;
cost: number;
clearance?: number;
obstacleHalfWidthMm?: number;
obstacleIds?: string[];
}
export interface IRoutingObstacle {
type: 'component' | 'pad' | 'track' | 'zone' | 'keepout' | 'outline';
bounds: {
minX: number;
maxX: number;
minY: number;
maxY: number;
};
layers: string[];
net?: string;
clearance: number;
priority?: number;
isManualRoute?: boolean;
segment?: {
x1: number;
y1: number;
x2: number;
y2: number;
width: number;
};
padShape?: {
shape: 'circle' | 'rect' | 'oval' | 'roundrect';
center: {
x: number;
y: number;
};
width: number;
height: number;
rotation: number;
};
polygon?: {
points: {
x: number;
y: number;
}[];
};
}
export declare class RoutingGrid {
private debug;
private bounds;
private gridResolution;
private layers;
private cells;
private gridWidth;
private gridHeight;
private maxObstacleClearance;
private maxObstacleHalfWidthMm;
private obstacles;
constructor(bounds: {
minX: number;
maxX: number;
minY: number;
maxY: number;
}, gridResolution: number, layers: string[], debug?: boolean);
addObstacle(obstacle: IRoutingObstacle): void;
isPadCell(x: number, y: number, layer: string): boolean;
hasPadWithinClearance(x: number, y: number, layer: string, clearanceMm: number): boolean;
isOccupied(x: number, y: number, layer: string, clearance?: number, net?: string, considerObstacleClearance?: boolean, sumObstacleClearance?: boolean): boolean;
checkTrackObstaclePrecise(worldX: number, worldY: number, layer: string, clearance: number, net?: string): boolean;
private getCellObstacle;
gridToWorldX(gridX: number): number;
gridToWorldY(gridY: number): number;
getWorldXFromGrid(gridX: number): number;
getWorldYFromGrid(gridY: number): number;
private isCellOccupied;
getCellCost(x: number, y: number, layer: string): number;
setCellCost(x: number, y: number, layer: string, cost: number): void;
worldToGrid(worldX: number, worldY: number): {
x: number;
y: number;
};
gridToWorld(gridX: number, gridY: number): {
x: number;
y: number;
};
isInBounds(x: number, y: number): boolean;
private getCellKey;
getCell(x: number, y: number, layer: string): IGridCell | undefined;
private worldBoundsToGridBounds;
getDimensions(): {
width: number;
height: number;
layers: number;
};
getResolution(): number;
getLayers(): string[];
getBounds(): {
minX: number;
maxX: number;
minY: number;
maxY: number;
};
clear(): void;
getStats(): {
totalCells: number;
occupiedCells: number;
freeCells: number;
occupancyPercent: number;
};
}