diff --git a/package.json b/package.json index c526574..63e4fe2 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "format:check": "biome format ." }, "devDependencies": { - "@biomejs/biome": "^2.2.2", + "@biomejs/biome": "^2.3.3", "@react-hook/resize-observer": "^2.0.2", "@tscircuit/math-utils": "^0.0.19", "@types/bun": "^1.2.21", diff --git a/principale b/principale new file mode 100644 index 0000000..0dadaa0 --- /dev/null +++ b/principale @@ -0,0 +1,13 @@ +code src/solvers/UntanglingSolver.ts +@' +export interface Point { + x: number; + y: number; +} + +export interface TraceLine { + start: Point; + end: Point; + path?: Point[]; +} +'@ | Out-File -FilePath src/types.ts -Encoding utf8 diff --git a/src/schematicTracePipelineSolver.ts# b/src/schematicTracePipelineSolver.ts# new file mode 100644 index 0000000..0589496 --- /dev/null +++ b/src/schematicTracePipelineSolver.ts# @@ -0,0 +1,6 @@ +import { UntanglingSolver } from "./solvers/UntanglingSolver.ts" + +const traces = this.traceLinesSolver.solve(pairwiseConnections) +const untangledTraces = new UntanglingSolver().solve(traces) + +return untangledTraces \ No newline at end of file diff --git a/src/solvers/UntanglingSolver.ts b/src/solvers/UntanglingSolver.ts new file mode 100644 index 0000000..d033370 --- /dev/null +++ b/src/solvers/UntanglingSolver.ts @@ -0,0 +1,25 @@ +import type { TraceLine } from "../types" + +export class UntanglingSolver { + solve(traces: TraceLine[]): TraceLine[] { + return traces.map((trace) => { + const dx = Math.abs(trace.start.x - trace.end.x) + const dy = Math.abs(trace.start.y - trace.end.y) + + if (dx > 3 && dy < 0.5) { + const midX = (trace.start.x + trace.end.x) / 2 + const offset = trace.start.y > 0 ? 1.5 : -1.5 + + return { + ...trace, + path: [ + trace.start, + { x: midX, y: trace.start.y + offset }, + trace.end, + ], + } + } + return trace + }) + } +} diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..2e9dc45 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,10 @@ +export interface Point { + x: number + y: number +} + +export interface TraceLine { + start: Point + end: Point + path?: Point[] +}