@tscircuit/core 0.0.1241 → 0.0.1243
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +164 -12
- package/package.json +3 -2
package/dist/index.js
CHANGED
|
@@ -2778,6 +2778,24 @@ var getObstaclesFromCircuitJson = (soup, connMap) => {
|
|
|
2778
2778
|
...element.shape === "rotated_pill" ? { ccwRotationDegrees: element.ccw_rotation } : {},
|
|
2779
2779
|
connectedTo: withNetId([element.pcb_smtpad_id])
|
|
2780
2780
|
});
|
|
2781
|
+
} else if (element.shape === "polygon") {
|
|
2782
|
+
const xs = element.points.map((point6) => point6.x);
|
|
2783
|
+
const ys = element.points.map((point6) => point6.y);
|
|
2784
|
+
const minX = Math.min(...xs);
|
|
2785
|
+
const maxX = Math.max(...xs);
|
|
2786
|
+
const minY = Math.min(...ys);
|
|
2787
|
+
const maxY = Math.max(...ys);
|
|
2788
|
+
obstacles.push({
|
|
2789
|
+
type: "rect",
|
|
2790
|
+
layers: [element.layer],
|
|
2791
|
+
center: {
|
|
2792
|
+
x: (minX + maxX) / 2,
|
|
2793
|
+
y: (minY + maxY) / 2
|
|
2794
|
+
},
|
|
2795
|
+
width: maxX - minX,
|
|
2796
|
+
height: maxY - minY,
|
|
2797
|
+
connectedTo: withNetId([element.pcb_smtpad_id])
|
|
2798
|
+
});
|
|
2781
2799
|
}
|
|
2782
2800
|
} else if (element.type === "pcb_keepout") {
|
|
2783
2801
|
if (element.shape === "circle") {
|
|
@@ -4541,6 +4559,13 @@ var findInflatedPcbViaForPoint = (vias, point6) => {
|
|
|
4541
4559
|
(via) => Math.abs(via.x - point6.x) < 1e-4 && Math.abs(via.y - point6.y) < 1e-4 && (!via.from_layer || via.from_layer === point6.from_layer) && (!via.to_layer || via.to_layer === point6.to_layer)
|
|
4542
4560
|
);
|
|
4543
4561
|
};
|
|
4562
|
+
var getViaDiameterFromRoutePoint = (point6) => {
|
|
4563
|
+
const viaPoint = point6;
|
|
4564
|
+
return {
|
|
4565
|
+
holeDiameter: viaPoint.hole_diameter ?? viaPoint.via_hole_diameter,
|
|
4566
|
+
outerDiameter: viaPoint.outer_diameter ?? viaPoint.via_diameter
|
|
4567
|
+
};
|
|
4568
|
+
};
|
|
4544
4569
|
function Trace_doInitialPcbManualTraceRender(trace) {
|
|
4545
4570
|
if (trace.root?.pcbDisabled) return;
|
|
4546
4571
|
const { db } = trace.root;
|
|
@@ -4634,6 +4659,7 @@ function Trace_doInitialPcbManualTraceRender(trace) {
|
|
|
4634
4659
|
trace._inflatedPcbVias,
|
|
4635
4660
|
originalPoint
|
|
4636
4661
|
);
|
|
4662
|
+
const routePointViaDiameter = getViaDiameterFromRoutePoint(point6);
|
|
4637
4663
|
const fromLayer = maybeFlipLayer(
|
|
4638
4664
|
inflatedPcbVia?.from_layer ?? point6.from_layer
|
|
4639
4665
|
);
|
|
@@ -4648,8 +4674,8 @@ function Trace_doInitialPcbManualTraceRender(trace) {
|
|
|
4648
4674
|
pcb_trace_id: pcb_trace2.pcb_trace_id,
|
|
4649
4675
|
x: point6.x,
|
|
4650
4676
|
y: point6.y,
|
|
4651
|
-
hole_diameter: inflatedPcbVia?.hole_diameter ?? holeDiameter2,
|
|
4652
|
-
outer_diameter: inflatedPcbVia?.outer_diameter ?? padDiameter2,
|
|
4677
|
+
hole_diameter: inflatedPcbVia?.hole_diameter ?? routePointViaDiameter.holeDiameter ?? holeDiameter2,
|
|
4678
|
+
outer_diameter: inflatedPcbVia?.outer_diameter ?? routePointViaDiameter.outerDiameter ?? padDiameter2,
|
|
4653
4679
|
layers,
|
|
4654
4680
|
from_layer: fromLayer,
|
|
4655
4681
|
to_layer: toLayer,
|
|
@@ -18524,10 +18550,14 @@ function getDrcTolerancesFromAutoroutingPhaseProps(phaseProps) {
|
|
|
18524
18550
|
function Group_getRoutingPhasePlans(group) {
|
|
18525
18551
|
const traces = group.selectAll("trace");
|
|
18526
18552
|
const nets = group.selectAll("net");
|
|
18527
|
-
if (traces.length === 0 && nets.length === 0) return [];
|
|
18528
18553
|
const plansByPhaseIndex = /* @__PURE__ */ new Map();
|
|
18529
18554
|
const autoroutersByPhaseIndex = getAutoroutersByPhaseIndex(group);
|
|
18530
18555
|
const phasePropsByPhaseIndex = getAutoroutingPhasePropsByPhaseIndex(group);
|
|
18556
|
+
const hasDirectRoutingTargets = traces.length > 0 || nets.length > 0;
|
|
18557
|
+
const hasReroutePhase = Array.from(phasePropsByPhaseIndex.values()).some(
|
|
18558
|
+
(phaseProps) => phaseProps.reroute
|
|
18559
|
+
);
|
|
18560
|
+
if (!hasDirectRoutingTargets && !hasReroutePhase) return [];
|
|
18531
18561
|
for (const net of nets) {
|
|
18532
18562
|
const routingPhaseIndex = getNetRoutingPhaseIndex(net);
|
|
18533
18563
|
getOrCreateRoutingPhasePlan(plansByPhaseIndex, routingPhaseIndex).nets.push(
|
|
@@ -18557,7 +18587,7 @@ function Group_getRoutingPhasePlans(group) {
|
|
|
18557
18587
|
plan.drcTolerances = phaseProps ? getDrcTolerancesFromAutoroutingPhaseProps(phaseProps) : void 0;
|
|
18558
18588
|
}
|
|
18559
18589
|
const defaultPhaseProps = phasePropsByPhaseIndex.get(null);
|
|
18560
|
-
if (phasePropsByPhaseIndex.size === 1 && defaultPhaseProps?.reroute && plans.length === 1 && plans[0]?.routingPhaseIndex === null) {
|
|
18590
|
+
if (hasDirectRoutingTargets && phasePropsByPhaseIndex.size === 1 && defaultPhaseProps?.reroute && plans.length === 1 && plans[0]?.routingPhaseIndex === null) {
|
|
18561
18591
|
const reroutePlan = plans[0];
|
|
18562
18592
|
return [
|
|
18563
18593
|
{
|
|
@@ -18986,6 +19016,110 @@ function insertAutoplacedJumpers(params) {
|
|
|
18986
19016
|
}
|
|
18987
19017
|
}
|
|
18988
19018
|
|
|
19019
|
+
// lib/components/primitive-components/Group/region-replacement/convert-pcb-trace-to-simplified-pcb-trace.ts
|
|
19020
|
+
function convertPcbTraceToSimplifiedPcbTrace(trace) {
|
|
19021
|
+
return {
|
|
19022
|
+
...trace,
|
|
19023
|
+
type: "pcb_trace",
|
|
19024
|
+
pcb_trace_id: trace.pcb_trace_id,
|
|
19025
|
+
connection_name: trace.connection_name ?? trace.source_trace_id ?? trace.pcb_trace_id,
|
|
19026
|
+
route: trace.route.map((point6) => ({ ...point6 }))
|
|
19027
|
+
};
|
|
19028
|
+
}
|
|
19029
|
+
|
|
19030
|
+
// lib/components/primitive-components/Group/region-replacement/get-relevant-subcircuit-ids-for-reroute.ts
|
|
19031
|
+
function getRelevantSubcircuitIdsForReroute(group) {
|
|
19032
|
+
const relevantSubcircuitIds = /* @__PURE__ */ new Set();
|
|
19033
|
+
if (!group.subcircuit_id) return relevantSubcircuitIds;
|
|
19034
|
+
relevantSubcircuitIds.add(group.subcircuit_id);
|
|
19035
|
+
const db = group.root?.db;
|
|
19036
|
+
if (!db) return relevantSubcircuitIds;
|
|
19037
|
+
for (const subcircuitId of getDescendantSubcircuitIds(
|
|
19038
|
+
db,
|
|
19039
|
+
group.subcircuit_id
|
|
19040
|
+
)) {
|
|
19041
|
+
relevantSubcircuitIds.add(subcircuitId);
|
|
19042
|
+
}
|
|
19043
|
+
return relevantSubcircuitIds;
|
|
19044
|
+
}
|
|
19045
|
+
|
|
19046
|
+
// lib/components/primitive-components/Group/region-replacement/get-existing-pcb-traces-for-reroute.ts
|
|
19047
|
+
function getExistingPcbTracesForReroute(group) {
|
|
19048
|
+
const db = group.root?.db;
|
|
19049
|
+
if (!db) return [];
|
|
19050
|
+
const relevantSubcircuitIds = getRelevantSubcircuitIdsForReroute(group);
|
|
19051
|
+
return db.pcb_trace.list().filter((trace) => {
|
|
19052
|
+
if (!trace.route || trace.route.length < 2) return false;
|
|
19053
|
+
if (!group.subcircuit_id) return true;
|
|
19054
|
+
return Boolean(
|
|
19055
|
+
trace.subcircuit_id && relevantSubcircuitIds.has(trace.subcircuit_id)
|
|
19056
|
+
);
|
|
19057
|
+
});
|
|
19058
|
+
}
|
|
19059
|
+
|
|
19060
|
+
// lib/components/primitive-components/Group/region-replacement/delete-existing-pcb-traces-replaced-by.ts
|
|
19061
|
+
function addPossibleReplacementSourceTraceId(sourceTraceIds, value) {
|
|
19062
|
+
if (typeof value !== "string" || value.length === 0) return;
|
|
19063
|
+
sourceTraceIds.add(value);
|
|
19064
|
+
const rerouteSuffixIndex = value.indexOf("_reroute_");
|
|
19065
|
+
if (rerouteSuffixIndex > 0) {
|
|
19066
|
+
sourceTraceIds.add(value.slice(0, rerouteSuffixIndex));
|
|
19067
|
+
}
|
|
19068
|
+
}
|
|
19069
|
+
function deleteExistingPcbTracesReplacedBy({
|
|
19070
|
+
group,
|
|
19071
|
+
outputPcbTraces
|
|
19072
|
+
}) {
|
|
19073
|
+
const db = group.root?.db;
|
|
19074
|
+
if (!db) return;
|
|
19075
|
+
const replacementPcbTraceIds = /* @__PURE__ */ new Set();
|
|
19076
|
+
const replacementSourceTraceIds = /* @__PURE__ */ new Set();
|
|
19077
|
+
for (const trace of outputPcbTraces) {
|
|
19078
|
+
if (trace.type !== "pcb_trace") continue;
|
|
19079
|
+
const replacementTrace = trace;
|
|
19080
|
+
replacementPcbTraceIds.add(replacementTrace.pcb_trace_id);
|
|
19081
|
+
addPossibleReplacementSourceTraceId(
|
|
19082
|
+
replacementSourceTraceIds,
|
|
19083
|
+
replacementTrace.source_trace_id
|
|
19084
|
+
);
|
|
19085
|
+
addPossibleReplacementSourceTraceId(
|
|
19086
|
+
replacementSourceTraceIds,
|
|
19087
|
+
replacementTrace.connection_name
|
|
19088
|
+
);
|
|
19089
|
+
addPossibleReplacementSourceTraceId(
|
|
19090
|
+
replacementSourceTraceIds,
|
|
19091
|
+
replacementTrace.rootConnectionName
|
|
19092
|
+
);
|
|
19093
|
+
}
|
|
19094
|
+
if (replacementPcbTraceIds.size === 0 && replacementSourceTraceIds.size === 0) {
|
|
19095
|
+
return;
|
|
19096
|
+
}
|
|
19097
|
+
const tracesToDelete = getExistingPcbTracesForReroute(group).filter(
|
|
19098
|
+
(trace) => replacementPcbTraceIds.has(trace.pcb_trace_id) || Boolean(
|
|
19099
|
+
trace.source_trace_id && replacementSourceTraceIds.has(trace.source_trace_id)
|
|
19100
|
+
)
|
|
19101
|
+
);
|
|
19102
|
+
if (tracesToDelete.length === 0) return;
|
|
19103
|
+
const deletedPcbTraceIds = new Set(
|
|
19104
|
+
tracesToDelete.map((trace) => trace.pcb_trace_id)
|
|
19105
|
+
);
|
|
19106
|
+
for (const via of db.pcb_via.list()) {
|
|
19107
|
+
if (via.pcb_trace_id && deletedPcbTraceIds.has(via.pcb_trace_id)) {
|
|
19108
|
+
db.pcb_via.delete(via.pcb_via_id);
|
|
19109
|
+
}
|
|
19110
|
+
}
|
|
19111
|
+
for (const trace of tracesToDelete) {
|
|
19112
|
+
db.pcb_trace.delete(trace.pcb_trace_id);
|
|
19113
|
+
}
|
|
19114
|
+
}
|
|
19115
|
+
|
|
19116
|
+
// lib/components/primitive-components/Group/region-replacement/get-existing-simplified-pcb-traces-for-reroute.ts
|
|
19117
|
+
function getExistingSimplifiedPcbTracesForReroute(group) {
|
|
19118
|
+
return getExistingPcbTracesForReroute(group).map(
|
|
19119
|
+
convertPcbTraceToSimplifiedPcbTrace
|
|
19120
|
+
);
|
|
19121
|
+
}
|
|
19122
|
+
|
|
18989
19123
|
// lib/components/primitive-components/Group/split-pcb-traces-on-jumper-segments.ts
|
|
18990
19124
|
function splitPcbTracesOnJumperSegments(route) {
|
|
18991
19125
|
const jumperRoutes = route.filter(
|
|
@@ -19431,11 +19565,23 @@ var Group6 = class extends NormalComponent3 {
|
|
|
19431
19565
|
const debug11 = Debug13("tscircuit:core:_hasTracesToRoute");
|
|
19432
19566
|
const routingPhasePlans = this._getRoutingPhasePlans();
|
|
19433
19567
|
let traceCount = 0;
|
|
19568
|
+
let hasReroutePhaseWithRegion = false;
|
|
19434
19569
|
for (const routingPhasePlan of routingPhasePlans) {
|
|
19435
19570
|
traceCount += routingPhasePlan.traces.length;
|
|
19571
|
+
hasReroutePhaseWithRegion ||= Boolean(
|
|
19572
|
+
routingPhasePlan.reroute && routingPhasePlan.region
|
|
19573
|
+
);
|
|
19436
19574
|
}
|
|
19437
19575
|
debug11(`[${this.getString()}] has ${traceCount} traces to route`);
|
|
19438
|
-
|
|
19576
|
+
if (traceCount > 0) return true;
|
|
19577
|
+
if (hasReroutePhaseWithRegion) {
|
|
19578
|
+
const existingTraceCount = getExistingPcbTracesForReroute(this).length;
|
|
19579
|
+
debug11(
|
|
19580
|
+
`[${this.getString()}] has ${existingTraceCount} existing pcb traces available for reroute`
|
|
19581
|
+
);
|
|
19582
|
+
return existingTraceCount > 0;
|
|
19583
|
+
}
|
|
19584
|
+
return false;
|
|
19439
19585
|
}
|
|
19440
19586
|
async _runEffectMakeHttpAutoroutingRequest() {
|
|
19441
19587
|
const { db } = this.root;
|
|
@@ -19580,6 +19726,7 @@ var Group6 = class extends NormalComponent3 {
|
|
|
19580
19726
|
const hasPhasedAutorouting = Group_hasPhasedAutorouting(routingPhasePlans);
|
|
19581
19727
|
const outputTraces = [];
|
|
19582
19728
|
const outputJumpers = [];
|
|
19729
|
+
const existingRerouteSeedTraces = getExistingSimplifiedPcbTracesForReroute(this);
|
|
19583
19730
|
for (const routingPhasePlan of routingPhasePlans) {
|
|
19584
19731
|
const phaseAutorouterConfig = routingPhasePlan.autorouter ? getPresetAutoroutingConfig(
|
|
19585
19732
|
routingPhasePlan.autorouter,
|
|
@@ -19591,7 +19738,7 @@ var Group6 = class extends NormalComponent3 {
|
|
|
19591
19738
|
);
|
|
19592
19739
|
const rerouteOriginalSrj = isReroutePhase ? {
|
|
19593
19740
|
...baseSimpleRouteJson,
|
|
19594
|
-
traces: outputTraces
|
|
19741
|
+
traces: [...existingRerouteSeedTraces, ...outputTraces]
|
|
19595
19742
|
} : null;
|
|
19596
19743
|
if (isReroutePhase && rerouteOriginalSrj) {
|
|
19597
19744
|
simpleRouteJson = getRerouteSimpleRouteJson(
|
|
@@ -19615,7 +19762,7 @@ var Group6 = class extends NormalComponent3 {
|
|
|
19615
19762
|
simpleRouteJson,
|
|
19616
19763
|
routingPhasePlan.drcTolerances
|
|
19617
19764
|
);
|
|
19618
|
-
if (hasPhasedAutorouting && simpleRouteJson.connections.length === 0) {
|
|
19765
|
+
if ((hasPhasedAutorouting || isReroutePhase) && simpleRouteJson.connections.length === 0) {
|
|
19619
19766
|
continue;
|
|
19620
19767
|
}
|
|
19621
19768
|
const phaseIsAutoJumperPreset = routingPhasePlan.autorouter !== void 0 ? this._isAutoJumperAutorouter(phaseAutorouterConfig) : isAutoJumperPreset;
|
|
@@ -19846,13 +19993,17 @@ var Group6 = class extends NormalComponent3 {
|
|
|
19846
19993
|
subcircuit_id: this.subcircuit_id
|
|
19847
19994
|
});
|
|
19848
19995
|
}
|
|
19996
|
+
deleteExistingPcbTracesReplacedBy({
|
|
19997
|
+
group: this,
|
|
19998
|
+
outputPcbTraces: output_pcb_traces
|
|
19999
|
+
});
|
|
19849
20000
|
for (const pcb_trace of output_pcb_traces) {
|
|
19850
20001
|
if (pcb_trace.type !== "pcb_trace") continue;
|
|
19851
|
-
pcb_trace.
|
|
19852
|
-
if (
|
|
19853
|
-
const sourceTraceId = pcb_trace.connection_name;
|
|
20002
|
+
const sourceTraceId = pcb_trace.source_trace_id ?? pcb_trace.connection_name;
|
|
20003
|
+
if (sourceTraceId) {
|
|
19854
20004
|
pcb_trace.source_trace_id = sourceTraceId;
|
|
19855
20005
|
}
|
|
20006
|
+
pcb_trace.subcircuit_id ??= (sourceTraceId ? db.source_trace.get(sourceTraceId)?.subcircuit_id : void 0) ?? this.subcircuit_id;
|
|
19856
20007
|
let segments = splitPcbTracesOnJumperSegments(pcb_trace.route);
|
|
19857
20008
|
if (segments === null) {
|
|
19858
20009
|
segments = [pcb_trace.route];
|
|
@@ -20947,7 +21098,7 @@ import { identity as identity5 } from "transformation-matrix";
|
|
|
20947
21098
|
var package_default = {
|
|
20948
21099
|
name: "@tscircuit/core",
|
|
20949
21100
|
type: "module",
|
|
20950
|
-
version: "0.0.
|
|
21101
|
+
version: "0.0.1242",
|
|
20951
21102
|
types: "dist/index.d.ts",
|
|
20952
21103
|
main: "dist/index.js",
|
|
20953
21104
|
module: "dist/index.js",
|
|
@@ -21021,7 +21172,7 @@ var package_default = {
|
|
|
21021
21172
|
flatbush: "^4.5.0",
|
|
21022
21173
|
"graphics-debug": "^0.0.89",
|
|
21023
21174
|
howfat: "^0.3.8",
|
|
21024
|
-
"kicad-to-circuit-json": "^0.0.
|
|
21175
|
+
"kicad-to-circuit-json": "^0.0.60",
|
|
21025
21176
|
kicadts: "^0.0.35",
|
|
21026
21177
|
"live-server": "^1.2.2",
|
|
21027
21178
|
"looks-same": "^9.0.1",
|
|
@@ -21032,6 +21183,7 @@ var package_default = {
|
|
|
21032
21183
|
"react-dom": "^19.1.0",
|
|
21033
21184
|
"schematic-symbols": "^0.0.208",
|
|
21034
21185
|
spicey: "^0.0.14",
|
|
21186
|
+
"stack-svgs": "^0.0.1",
|
|
21035
21187
|
"ts-expect": "^1.3.0",
|
|
21036
21188
|
tsup: "^8.2.4"
|
|
21037
21189
|
},
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tscircuit/core",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.1243",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"module": "dist/index.js",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"flatbush": "^4.5.0",
|
|
76
76
|
"graphics-debug": "^0.0.89",
|
|
77
77
|
"howfat": "^0.3.8",
|
|
78
|
-
"kicad-to-circuit-json": "^0.0.
|
|
78
|
+
"kicad-to-circuit-json": "^0.0.60",
|
|
79
79
|
"kicadts": "^0.0.35",
|
|
80
80
|
"live-server": "^1.2.2",
|
|
81
81
|
"looks-same": "^9.0.1",
|
|
@@ -86,6 +86,7 @@
|
|
|
86
86
|
"react-dom": "^19.1.0",
|
|
87
87
|
"schematic-symbols": "^0.0.208",
|
|
88
88
|
"spicey": "^0.0.14",
|
|
89
|
+
"stack-svgs": "^0.0.1",
|
|
89
90
|
"ts-expect": "^1.3.0",
|
|
90
91
|
"tsup": "^8.2.4"
|
|
91
92
|
},
|