@tscircuit/core 0.0.1242 → 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 +146 -12
- package/package.json +3 -2
package/dist/index.js
CHANGED
|
@@ -4559,6 +4559,13 @@ var findInflatedPcbViaForPoint = (vias, point6) => {
|
|
|
4559
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)
|
|
4560
4560
|
);
|
|
4561
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
|
+
};
|
|
4562
4569
|
function Trace_doInitialPcbManualTraceRender(trace) {
|
|
4563
4570
|
if (trace.root?.pcbDisabled) return;
|
|
4564
4571
|
const { db } = trace.root;
|
|
@@ -4652,6 +4659,7 @@ function Trace_doInitialPcbManualTraceRender(trace) {
|
|
|
4652
4659
|
trace._inflatedPcbVias,
|
|
4653
4660
|
originalPoint
|
|
4654
4661
|
);
|
|
4662
|
+
const routePointViaDiameter = getViaDiameterFromRoutePoint(point6);
|
|
4655
4663
|
const fromLayer = maybeFlipLayer(
|
|
4656
4664
|
inflatedPcbVia?.from_layer ?? point6.from_layer
|
|
4657
4665
|
);
|
|
@@ -4666,8 +4674,8 @@ function Trace_doInitialPcbManualTraceRender(trace) {
|
|
|
4666
4674
|
pcb_trace_id: pcb_trace2.pcb_trace_id,
|
|
4667
4675
|
x: point6.x,
|
|
4668
4676
|
y: point6.y,
|
|
4669
|
-
hole_diameter: inflatedPcbVia?.hole_diameter ?? holeDiameter2,
|
|
4670
|
-
outer_diameter: inflatedPcbVia?.outer_diameter ?? padDiameter2,
|
|
4677
|
+
hole_diameter: inflatedPcbVia?.hole_diameter ?? routePointViaDiameter.holeDiameter ?? holeDiameter2,
|
|
4678
|
+
outer_diameter: inflatedPcbVia?.outer_diameter ?? routePointViaDiameter.outerDiameter ?? padDiameter2,
|
|
4671
4679
|
layers,
|
|
4672
4680
|
from_layer: fromLayer,
|
|
4673
4681
|
to_layer: toLayer,
|
|
@@ -18542,10 +18550,14 @@ function getDrcTolerancesFromAutoroutingPhaseProps(phaseProps) {
|
|
|
18542
18550
|
function Group_getRoutingPhasePlans(group) {
|
|
18543
18551
|
const traces = group.selectAll("trace");
|
|
18544
18552
|
const nets = group.selectAll("net");
|
|
18545
|
-
if (traces.length === 0 && nets.length === 0) return [];
|
|
18546
18553
|
const plansByPhaseIndex = /* @__PURE__ */ new Map();
|
|
18547
18554
|
const autoroutersByPhaseIndex = getAutoroutersByPhaseIndex(group);
|
|
18548
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 [];
|
|
18549
18561
|
for (const net of nets) {
|
|
18550
18562
|
const routingPhaseIndex = getNetRoutingPhaseIndex(net);
|
|
18551
18563
|
getOrCreateRoutingPhasePlan(plansByPhaseIndex, routingPhaseIndex).nets.push(
|
|
@@ -18575,7 +18587,7 @@ function Group_getRoutingPhasePlans(group) {
|
|
|
18575
18587
|
plan.drcTolerances = phaseProps ? getDrcTolerancesFromAutoroutingPhaseProps(phaseProps) : void 0;
|
|
18576
18588
|
}
|
|
18577
18589
|
const defaultPhaseProps = phasePropsByPhaseIndex.get(null);
|
|
18578
|
-
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) {
|
|
18579
18591
|
const reroutePlan = plans[0];
|
|
18580
18592
|
return [
|
|
18581
18593
|
{
|
|
@@ -19004,6 +19016,110 @@ function insertAutoplacedJumpers(params) {
|
|
|
19004
19016
|
}
|
|
19005
19017
|
}
|
|
19006
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
|
+
|
|
19007
19123
|
// lib/components/primitive-components/Group/split-pcb-traces-on-jumper-segments.ts
|
|
19008
19124
|
function splitPcbTracesOnJumperSegments(route) {
|
|
19009
19125
|
const jumperRoutes = route.filter(
|
|
@@ -19449,11 +19565,23 @@ var Group6 = class extends NormalComponent3 {
|
|
|
19449
19565
|
const debug11 = Debug13("tscircuit:core:_hasTracesToRoute");
|
|
19450
19566
|
const routingPhasePlans = this._getRoutingPhasePlans();
|
|
19451
19567
|
let traceCount = 0;
|
|
19568
|
+
let hasReroutePhaseWithRegion = false;
|
|
19452
19569
|
for (const routingPhasePlan of routingPhasePlans) {
|
|
19453
19570
|
traceCount += routingPhasePlan.traces.length;
|
|
19571
|
+
hasReroutePhaseWithRegion ||= Boolean(
|
|
19572
|
+
routingPhasePlan.reroute && routingPhasePlan.region
|
|
19573
|
+
);
|
|
19454
19574
|
}
|
|
19455
19575
|
debug11(`[${this.getString()}] has ${traceCount} traces to route`);
|
|
19456
|
-
|
|
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;
|
|
19457
19585
|
}
|
|
19458
19586
|
async _runEffectMakeHttpAutoroutingRequest() {
|
|
19459
19587
|
const { db } = this.root;
|
|
@@ -19598,6 +19726,7 @@ var Group6 = class extends NormalComponent3 {
|
|
|
19598
19726
|
const hasPhasedAutorouting = Group_hasPhasedAutorouting(routingPhasePlans);
|
|
19599
19727
|
const outputTraces = [];
|
|
19600
19728
|
const outputJumpers = [];
|
|
19729
|
+
const existingRerouteSeedTraces = getExistingSimplifiedPcbTracesForReroute(this);
|
|
19601
19730
|
for (const routingPhasePlan of routingPhasePlans) {
|
|
19602
19731
|
const phaseAutorouterConfig = routingPhasePlan.autorouter ? getPresetAutoroutingConfig(
|
|
19603
19732
|
routingPhasePlan.autorouter,
|
|
@@ -19609,7 +19738,7 @@ var Group6 = class extends NormalComponent3 {
|
|
|
19609
19738
|
);
|
|
19610
19739
|
const rerouteOriginalSrj = isReroutePhase ? {
|
|
19611
19740
|
...baseSimpleRouteJson,
|
|
19612
|
-
traces: outputTraces
|
|
19741
|
+
traces: [...existingRerouteSeedTraces, ...outputTraces]
|
|
19613
19742
|
} : null;
|
|
19614
19743
|
if (isReroutePhase && rerouteOriginalSrj) {
|
|
19615
19744
|
simpleRouteJson = getRerouteSimpleRouteJson(
|
|
@@ -19633,7 +19762,7 @@ var Group6 = class extends NormalComponent3 {
|
|
|
19633
19762
|
simpleRouteJson,
|
|
19634
19763
|
routingPhasePlan.drcTolerances
|
|
19635
19764
|
);
|
|
19636
|
-
if (hasPhasedAutorouting && simpleRouteJson.connections.length === 0) {
|
|
19765
|
+
if ((hasPhasedAutorouting || isReroutePhase) && simpleRouteJson.connections.length === 0) {
|
|
19637
19766
|
continue;
|
|
19638
19767
|
}
|
|
19639
19768
|
const phaseIsAutoJumperPreset = routingPhasePlan.autorouter !== void 0 ? this._isAutoJumperAutorouter(phaseAutorouterConfig) : isAutoJumperPreset;
|
|
@@ -19864,13 +19993,17 @@ var Group6 = class extends NormalComponent3 {
|
|
|
19864
19993
|
subcircuit_id: this.subcircuit_id
|
|
19865
19994
|
});
|
|
19866
19995
|
}
|
|
19996
|
+
deleteExistingPcbTracesReplacedBy({
|
|
19997
|
+
group: this,
|
|
19998
|
+
outputPcbTraces: output_pcb_traces
|
|
19999
|
+
});
|
|
19867
20000
|
for (const pcb_trace of output_pcb_traces) {
|
|
19868
20001
|
if (pcb_trace.type !== "pcb_trace") continue;
|
|
19869
|
-
pcb_trace.
|
|
19870
|
-
if (
|
|
19871
|
-
const sourceTraceId = pcb_trace.connection_name;
|
|
20002
|
+
const sourceTraceId = pcb_trace.source_trace_id ?? pcb_trace.connection_name;
|
|
20003
|
+
if (sourceTraceId) {
|
|
19872
20004
|
pcb_trace.source_trace_id = sourceTraceId;
|
|
19873
20005
|
}
|
|
20006
|
+
pcb_trace.subcircuit_id ??= (sourceTraceId ? db.source_trace.get(sourceTraceId)?.subcircuit_id : void 0) ?? this.subcircuit_id;
|
|
19874
20007
|
let segments = splitPcbTracesOnJumperSegments(pcb_trace.route);
|
|
19875
20008
|
if (segments === null) {
|
|
19876
20009
|
segments = [pcb_trace.route];
|
|
@@ -20965,7 +21098,7 @@ import { identity as identity5 } from "transformation-matrix";
|
|
|
20965
21098
|
var package_default = {
|
|
20966
21099
|
name: "@tscircuit/core",
|
|
20967
21100
|
type: "module",
|
|
20968
|
-
version: "0.0.
|
|
21101
|
+
version: "0.0.1242",
|
|
20969
21102
|
types: "dist/index.d.ts",
|
|
20970
21103
|
main: "dist/index.js",
|
|
20971
21104
|
module: "dist/index.js",
|
|
@@ -21039,7 +21172,7 @@ var package_default = {
|
|
|
21039
21172
|
flatbush: "^4.5.0",
|
|
21040
21173
|
"graphics-debug": "^0.0.89",
|
|
21041
21174
|
howfat: "^0.3.8",
|
|
21042
|
-
"kicad-to-circuit-json": "^0.0.
|
|
21175
|
+
"kicad-to-circuit-json": "^0.0.60",
|
|
21043
21176
|
kicadts: "^0.0.35",
|
|
21044
21177
|
"live-server": "^1.2.2",
|
|
21045
21178
|
"looks-same": "^9.0.1",
|
|
@@ -21050,6 +21183,7 @@ var package_default = {
|
|
|
21050
21183
|
"react-dom": "^19.1.0",
|
|
21051
21184
|
"schematic-symbols": "^0.0.208",
|
|
21052
21185
|
spicey: "^0.0.14",
|
|
21186
|
+
"stack-svgs": "^0.0.1",
|
|
21053
21187
|
"ts-expect": "^1.3.0",
|
|
21054
21188
|
tsup: "^8.2.4"
|
|
21055
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
|
},
|