@tscircuit/core 0.0.1161 → 0.0.1162
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.d.ts +61 -52
- package/dist/index.js +351 -143
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as circuit_json from 'circuit-json';
|
|
2
2
|
import { PcbTraceError, PcbPlacementError, PcbManualEditConflictWarning, PcbViaClearanceError, LayerRef, AnyCircuitElement, Size, PcbTraceRoutePoint, AnySourceComponent, PcbTrace as PcbTrace$1, PcbVia, SchematicPort, SchematicComponent, RouteHintPoint, CircuitJson } from 'circuit-json';
|
|
3
3
|
import * as _tscircuit_props from '@tscircuit/props';
|
|
4
|
-
import { PlatformConfig, traceProps, subcircuitGroupProps, AutorouterConfig, PcbSx, SupplierPartNumbers, CadModelProp, SchematicPortArrangement, groupProps, boardProps, subcircuitProps, subpanelProps, capacitorProps, chipProps, pinoutProps, diodeProps, fuseProps, jumperProps, interconnectProps, solderjumperProps, ledProps, powerSourceProps, voltageSourceProps, currentSourceProps, resistorProps, constraintProps, fabricationNoteRectProps, fabricationNotePathProps, fabricationNoteTextProps, fabricationNoteDimensionProps, pcbNoteLineProps, pcbNoteRectProps, pcbNoteTextProps, pcbNotePathProps, pcbNoteDimensionProps, footprintProps, breakoutProps, breakoutPointProps, holeProps, pcbKeepoutProps, netLabelProps, cadmodelProps, cadassemblyProps, platedHoleProps, courtyardCircleProps, courtyardOutlineProps, courtyardRectProps, silkscreenCircleProps, silkscreenPathProps, silkscreenRectProps, silkscreenTextProps, silkscreenLineProps, smtPadProps, fiducialProps, traceHintProps, viaProps, copperPourProps, copperTextProps, cutoutProps, batteryProps, pinHeaderProps, resonatorProps, inductorProps, potentiometerProps, pushButtonProps, crystalProps, transistorProps, mosfetProps, opampProps, OpAmpPinLabels, switchProps, SwitchProps, testpointProps, schematicTextProps, schematicLineProps, schematicRectProps, schematicArcProps, schematicCircleProps, schematicPathProps, schematicBoxProps, schematicTableProps, schematicRowProps, schematicCellProps, symbolProps, analogSimulationProps, voltageProbeProps, CapacitorProps, ChipProps, DiodeProps, ResistorProps, ManualEditEvent, ManualEditsFile, ChipConnections, manual_edits_file } from '@tscircuit/props';
|
|
4
|
+
import { PlatformConfig, traceProps, netProps, subcircuitGroupProps, AutorouterConfig, PcbSx, SupplierPartNumbers, CadModelProp, SchematicPortArrangement, groupProps, boardProps, subcircuitProps, subpanelProps, capacitorProps, chipProps, pinoutProps, diodeProps, fuseProps, jumperProps, interconnectProps, solderjumperProps, ledProps, powerSourceProps, voltageSourceProps, currentSourceProps, resistorProps, constraintProps, fabricationNoteRectProps, fabricationNotePathProps, fabricationNoteTextProps, fabricationNoteDimensionProps, pcbNoteLineProps, pcbNoteRectProps, pcbNoteTextProps, pcbNotePathProps, pcbNoteDimensionProps, footprintProps, breakoutProps, breakoutPointProps, holeProps, pcbKeepoutProps, netLabelProps, cadmodelProps, cadassemblyProps, platedHoleProps, courtyardCircleProps, courtyardOutlineProps, courtyardRectProps, silkscreenCircleProps, silkscreenPathProps, silkscreenRectProps, silkscreenTextProps, silkscreenLineProps, smtPadProps, fiducialProps, traceHintProps, viaProps, copperPourProps, copperTextProps, cutoutProps, batteryProps, pinHeaderProps, resonatorProps, inductorProps, potentiometerProps, pushButtonProps, crystalProps, transistorProps, mosfetProps, opampProps, OpAmpPinLabels, switchProps, SwitchProps, testpointProps, schematicTextProps, schematicLineProps, schematicRectProps, schematicArcProps, schematicCircleProps, schematicPathProps, schematicBoxProps, schematicTableProps, schematicRowProps, schematicCellProps, symbolProps, analogSimulationProps, voltageProbeProps, CapacitorProps, ChipProps, DiodeProps, ResistorProps, ManualEditEvent, ManualEditsFile, ChipConnections, manual_edits_file } from '@tscircuit/props';
|
|
5
5
|
export { kicadFootprintStrings } from '@tscircuit/props';
|
|
6
6
|
import * as react from 'react';
|
|
7
7
|
import react__default, { ReactElement, DetailedHTMLProps, SVGProps } from 'react';
|
|
@@ -397,57 +397,6 @@ interface IGroup extends PrimitiveComponent {
|
|
|
397
397
|
}): void;
|
|
398
398
|
}
|
|
399
399
|
|
|
400
|
-
declare const netProps: z.ZodObject<{
|
|
401
|
-
name: z.ZodEffects<z.ZodString, string, string>;
|
|
402
|
-
}, "strip", z.ZodTypeAny, {
|
|
403
|
-
name: string;
|
|
404
|
-
}, {
|
|
405
|
-
name: string;
|
|
406
|
-
}>;
|
|
407
|
-
declare class Net extends PrimitiveComponent<typeof netProps> {
|
|
408
|
-
source_net_id?: string;
|
|
409
|
-
subcircuit_connectivity_map_key: string | null;
|
|
410
|
-
get config(): {
|
|
411
|
-
componentName: string;
|
|
412
|
-
zodProps: z.ZodObject<{
|
|
413
|
-
name: z.ZodEffects<z.ZodString, string, string>;
|
|
414
|
-
}, "strip", z.ZodTypeAny, {
|
|
415
|
-
name: string;
|
|
416
|
-
}, {
|
|
417
|
-
name: string;
|
|
418
|
-
}>;
|
|
419
|
-
};
|
|
420
|
-
getPortSelector(): string;
|
|
421
|
-
doInitialSourceRender(): void;
|
|
422
|
-
doInitialSourceParentAttachment(): void;
|
|
423
|
-
/**
|
|
424
|
-
* Get all ports connected to this net.
|
|
425
|
-
*
|
|
426
|
-
* TODO currently we're not checking for indirect connections (traces that are
|
|
427
|
-
* connected to other traces that are in turn connected to the net)
|
|
428
|
-
*/
|
|
429
|
-
getAllConnectedPorts(): Port[];
|
|
430
|
-
/**
|
|
431
|
-
* Get all traces that are directly connected to this net, i.e. they list
|
|
432
|
-
* this net in their path, from, or to props
|
|
433
|
-
*/
|
|
434
|
-
_getAllDirectlyConnectedTraces(): Trace[];
|
|
435
|
-
/**
|
|
436
|
-
* Add PCB Traces to connect net islands together. A net island is a set of
|
|
437
|
-
* ports that are connected to each other. If a there are multiple net islands
|
|
438
|
-
* that means that the net is not fully connected and we need to add traces
|
|
439
|
-
* such that the nets are fully connected
|
|
440
|
-
*
|
|
441
|
-
* Sometimes this phase doesn't find any net islands if the autorouter did
|
|
442
|
-
* a good job and connected the islands. In some sense this is a "backup"
|
|
443
|
-
* routing phase for autorouters that don't care about connecting nets.
|
|
444
|
-
*
|
|
445
|
-
* This should only run if the autorouter is sequential-trace
|
|
446
|
-
*/
|
|
447
|
-
doInitialPcbRouteNetIslands(): void;
|
|
448
|
-
renderError(message: Parameters<typeof PrimitiveComponent.prototype.renderError>[0]): void;
|
|
449
|
-
}
|
|
450
|
-
|
|
451
400
|
interface TraceI extends PrimitiveComponent<typeof traceProps> {
|
|
452
401
|
source_trace_id: string | null;
|
|
453
402
|
subcircuit_connectivity_map_key: string | null;
|
|
@@ -1049,8 +998,68 @@ declare class Trace extends PrimitiveComponent<typeof traceProps> implements Tra
|
|
|
1049
998
|
doInitialSchematicTraceRender(): void;
|
|
1050
999
|
}
|
|
1051
1000
|
|
|
1001
|
+
declare class Net extends PrimitiveComponent<typeof netProps> {
|
|
1002
|
+
source_net_id?: string;
|
|
1003
|
+
subcircuit_connectivity_map_key: string | null;
|
|
1004
|
+
get config(): {
|
|
1005
|
+
componentName: string;
|
|
1006
|
+
zodProps: zod.ZodObject<{
|
|
1007
|
+
name: zod.ZodString;
|
|
1008
|
+
connectsTo: zod.ZodOptional<zod.ZodUnion<[zod.ZodString, zod.ZodArray<zod.ZodString, "many">]>>;
|
|
1009
|
+
routingPhaseIndex: zod.ZodOptional<zod.ZodNullable<zod.ZodNumber>>;
|
|
1010
|
+
highlightColor: zod.ZodOptional<zod.ZodString>;
|
|
1011
|
+
isPowerNet: zod.ZodOptional<zod.ZodBoolean>;
|
|
1012
|
+
isGroundNet: zod.ZodOptional<zod.ZodBoolean>;
|
|
1013
|
+
}, "strip", zod.ZodTypeAny, {
|
|
1014
|
+
name: string;
|
|
1015
|
+
highlightColor?: string | undefined;
|
|
1016
|
+
connectsTo?: string | string[] | undefined;
|
|
1017
|
+
routingPhaseIndex?: number | null | undefined;
|
|
1018
|
+
isPowerNet?: boolean | undefined;
|
|
1019
|
+
isGroundNet?: boolean | undefined;
|
|
1020
|
+
}, {
|
|
1021
|
+
name: string;
|
|
1022
|
+
highlightColor?: string | undefined;
|
|
1023
|
+
connectsTo?: string | string[] | undefined;
|
|
1024
|
+
routingPhaseIndex?: number | null | undefined;
|
|
1025
|
+
isPowerNet?: boolean | undefined;
|
|
1026
|
+
isGroundNet?: boolean | undefined;
|
|
1027
|
+
}>;
|
|
1028
|
+
};
|
|
1029
|
+
getPortSelector(): string;
|
|
1030
|
+
doInitialSourceRender(): void;
|
|
1031
|
+
doInitialSourceParentAttachment(): void;
|
|
1032
|
+
/**
|
|
1033
|
+
* Get all ports connected to this net.
|
|
1034
|
+
*
|
|
1035
|
+
* TODO currently we're not checking for indirect connections (traces that are
|
|
1036
|
+
* connected to other traces that are in turn connected to the net)
|
|
1037
|
+
*/
|
|
1038
|
+
getAllConnectedPorts(): Port[];
|
|
1039
|
+
/**
|
|
1040
|
+
* Get all traces that are directly connected to this net, i.e. they list
|
|
1041
|
+
* this net in their path, from, or to props
|
|
1042
|
+
*/
|
|
1043
|
+
_getAllDirectlyConnectedTraces(): Trace[];
|
|
1044
|
+
/**
|
|
1045
|
+
* Add PCB Traces to connect net islands together. A net island is a set of
|
|
1046
|
+
* ports that are connected to each other. If a there are multiple net islands
|
|
1047
|
+
* that means that the net is not fully connected and we need to add traces
|
|
1048
|
+
* such that the nets are fully connected
|
|
1049
|
+
*
|
|
1050
|
+
* Sometimes this phase doesn't find any net islands if the autorouter did
|
|
1051
|
+
* a good job and connected the islands. In some sense this is a "backup"
|
|
1052
|
+
* routing phase for autorouters that don't care about connecting nets.
|
|
1053
|
+
*
|
|
1054
|
+
* This should only run if the autorouter is sequential-trace
|
|
1055
|
+
*/
|
|
1056
|
+
doInitialPcbRouteNetIslands(): void;
|
|
1057
|
+
renderError(message: Parameters<typeof PrimitiveComponent.prototype.renderError>[0]): void;
|
|
1058
|
+
}
|
|
1059
|
+
|
|
1052
1060
|
interface RoutingPhasePlan {
|
|
1053
1061
|
routingPhaseIndex: number | null;
|
|
1062
|
+
nets: Net[];
|
|
1054
1063
|
traces: Trace[];
|
|
1055
1064
|
}
|
|
1056
1065
|
|
package/dist/index.js
CHANGED
|
@@ -288,6 +288,9 @@ var mergeRoutes = (routes) => {
|
|
|
288
288
|
return merged;
|
|
289
289
|
};
|
|
290
290
|
|
|
291
|
+
// lib/components/primitive-components/Net.ts
|
|
292
|
+
import { netProps } from "@tscircuit/props";
|
|
293
|
+
|
|
291
294
|
// lib/components/base-components/PrimitiveComponent/PrimitiveComponent.ts
|
|
292
295
|
import { selectAll, selectOne } from "css-select";
|
|
293
296
|
import "debug";
|
|
@@ -2113,9 +2116,6 @@ var PrimitiveComponent2 = class extends Renderable {
|
|
|
2113
2116
|
}
|
|
2114
2117
|
};
|
|
2115
2118
|
|
|
2116
|
-
// lib/components/primitive-components/Net.ts
|
|
2117
|
-
import { z as z2 } from "zod";
|
|
2118
|
-
|
|
2119
2119
|
// lib/utils/pairs.ts
|
|
2120
2120
|
function pairs(arr) {
|
|
2121
2121
|
const result = [];
|
|
@@ -2127,14 +2127,6 @@ function pairs(arr) {
|
|
|
2127
2127
|
|
|
2128
2128
|
// lib/components/primitive-components/Net.ts
|
|
2129
2129
|
import { autoroute } from "@tscircuit/infgrid-ijump-astar";
|
|
2130
|
-
var netProps = z2.object({
|
|
2131
|
-
name: z2.string().refine(
|
|
2132
|
-
(val) => !/[+-]/.test(val),
|
|
2133
|
-
(val) => ({
|
|
2134
|
-
message: `Net names cannot contain "+" or "-" (component "Net" received "${val}"). Try using underscores instead, e.g. VCC_P`
|
|
2135
|
-
})
|
|
2136
|
-
)
|
|
2137
|
-
});
|
|
2138
2130
|
var Net = class extends PrimitiveComponent2 {
|
|
2139
2131
|
source_net_id;
|
|
2140
2132
|
subcircuit_connectivity_map_key = null;
|
|
@@ -4588,7 +4580,7 @@ function Trace_doInitialPcbManualTraceRender(trace) {
|
|
|
4588
4580
|
for (const pt of pcbPath) {
|
|
4589
4581
|
let coordinates;
|
|
4590
4582
|
let isGlobalPosition = false;
|
|
4591
|
-
const
|
|
4583
|
+
const isViaPoint2 = typeof pt !== "string" && pt.via;
|
|
4592
4584
|
let viaFromLayer;
|
|
4593
4585
|
let viaToLayer;
|
|
4594
4586
|
if (typeof pt === "string") {
|
|
@@ -4630,7 +4622,7 @@ function Trace_doInitialPcbManualTraceRender(trace) {
|
|
|
4630
4622
|
}
|
|
4631
4623
|
}
|
|
4632
4624
|
const finalCoordinates = isGlobalPosition ? coordinates : applyToPoint2(transform, coordinates);
|
|
4633
|
-
if (
|
|
4625
|
+
if (isViaPoint2) {
|
|
4634
4626
|
route.push({
|
|
4635
4627
|
route_type: "via",
|
|
4636
4628
|
x: finalCoordinates.x,
|
|
@@ -5124,7 +5116,7 @@ var extendCatalogue = (objects) => {
|
|
|
5124
5116
|
import { identity as identity3 } from "transformation-matrix";
|
|
5125
5117
|
|
|
5126
5118
|
// lib/components/primitive-components/ErrorPlaceholder.ts
|
|
5127
|
-
import { z as
|
|
5119
|
+
import { z as z3 } from "zod";
|
|
5128
5120
|
var ErrorPlaceholderComponent = class extends PrimitiveComponent2 {
|
|
5129
5121
|
constructor(props, error) {
|
|
5130
5122
|
super(props);
|
|
@@ -5196,7 +5188,7 @@ var ErrorPlaceholderComponent = class extends PrimitiveComponent2 {
|
|
|
5196
5188
|
get config() {
|
|
5197
5189
|
return {
|
|
5198
5190
|
componentName: "ErrorPlaceholder",
|
|
5199
|
-
zodProps:
|
|
5191
|
+
zodProps: z3.object({}).passthrough()
|
|
5200
5192
|
};
|
|
5201
5193
|
}
|
|
5202
5194
|
doInitialSourceRender() {
|
|
@@ -6678,14 +6670,14 @@ var PcbNoteText = class extends PrimitiveComponent2 {
|
|
|
6678
6670
|
};
|
|
6679
6671
|
|
|
6680
6672
|
// lib/components/primitive-components/PcbTrace.ts
|
|
6681
|
-
import { z as
|
|
6673
|
+
import { z as z5 } from "zod";
|
|
6682
6674
|
import { pcb_trace_route_point } from "circuit-json";
|
|
6683
6675
|
import { applyToPoint as applyToPoint11 } from "transformation-matrix";
|
|
6684
|
-
var pcbTraceProps =
|
|
6685
|
-
route:
|
|
6676
|
+
var pcbTraceProps = z5.object({
|
|
6677
|
+
route: z5.array(pcb_trace_route_point),
|
|
6686
6678
|
// If this primitive PcbTrace needs to be associated with a source_trace_id
|
|
6687
6679
|
// it can be added as a prop here. For footprints, it's often not needed.
|
|
6688
|
-
source_trace_id:
|
|
6680
|
+
source_trace_id: z5.string().optional()
|
|
6689
6681
|
});
|
|
6690
6682
|
var PcbTrace = class extends PrimitiveComponent2 {
|
|
6691
6683
|
pcb_trace_id = null;
|
|
@@ -8512,7 +8504,7 @@ var SCHEMATIC_COMPONENT_OUTLINE_STROKE_WIDTH = 0.12;
|
|
|
8512
8504
|
// lib/components/primitive-components/Port/Port.ts
|
|
8513
8505
|
import "schematic-symbols";
|
|
8514
8506
|
import { applyToPoint as applyToPoint16, compose as compose4, translate as translate3 } from "transformation-matrix";
|
|
8515
|
-
import { z as
|
|
8507
|
+
import { z as z6 } from "zod";
|
|
8516
8508
|
|
|
8517
8509
|
// lib/components/primitive-components/Port/getCenterOfPcbPrimitives.ts
|
|
8518
8510
|
var getCenterOfPcbPrimitives = (pcbPrimitives) => {
|
|
@@ -8596,17 +8588,17 @@ var applyPinAttributesToSourcePort = (sourcePortProps, attributes) => {
|
|
|
8596
8588
|
};
|
|
8597
8589
|
|
|
8598
8590
|
// lib/components/primitive-components/Port/Port.ts
|
|
8599
|
-
var portProps =
|
|
8600
|
-
name:
|
|
8601
|
-
pinNumber:
|
|
8602
|
-
schStemLength:
|
|
8603
|
-
aliases:
|
|
8604
|
-
layer:
|
|
8605
|
-
layers:
|
|
8606
|
-
schX:
|
|
8607
|
-
schY:
|
|
8608
|
-
direction:
|
|
8609
|
-
connectsTo:
|
|
8591
|
+
var portProps = z6.object({
|
|
8592
|
+
name: z6.string().optional(),
|
|
8593
|
+
pinNumber: z6.number().optional(),
|
|
8594
|
+
schStemLength: z6.number().optional(),
|
|
8595
|
+
aliases: z6.array(z6.string()).optional(),
|
|
8596
|
+
layer: z6.string().optional(),
|
|
8597
|
+
layers: z6.array(z6.string()).optional(),
|
|
8598
|
+
schX: z6.number().optional(),
|
|
8599
|
+
schY: z6.number().optional(),
|
|
8600
|
+
direction: z6.enum(["up", "down", "left", "right"]).optional(),
|
|
8601
|
+
connectsTo: z6.union([z6.string(), z6.array(z6.string())]).optional()
|
|
8610
8602
|
});
|
|
8611
8603
|
var Port = class extends PrimitiveComponent2 {
|
|
8612
8604
|
source_port_id = null;
|
|
@@ -9573,7 +9565,7 @@ import {
|
|
|
9573
9565
|
} from "react";
|
|
9574
9566
|
import { symbols as symbols2 } from "schematic-symbols";
|
|
9575
9567
|
import { decomposeTSR as decomposeTSR8 } from "transformation-matrix";
|
|
9576
|
-
import { z as
|
|
9568
|
+
import { z as z8 } from "zod";
|
|
9577
9569
|
|
|
9578
9570
|
// lib/components/primitive-components/CadAssembly.ts
|
|
9579
9571
|
import { cadassemblyProps } from "@tscircuit/props";
|
|
@@ -9589,7 +9581,7 @@ var CadAssembly = class extends PrimitiveComponent2 {
|
|
|
9589
9581
|
|
|
9590
9582
|
// lib/components/primitive-components/CadModel.ts
|
|
9591
9583
|
import { cadmodelProps, point3 } from "@tscircuit/props";
|
|
9592
|
-
import { z as
|
|
9584
|
+
import { z as z7 } from "zod";
|
|
9593
9585
|
import { distance as distance7 } from "circuit-json";
|
|
9594
9586
|
import { decomposeTSR as decomposeTSR7 } from "transformation-matrix";
|
|
9595
9587
|
|
|
@@ -9631,8 +9623,8 @@ var constructAssetUrl = (targetUrl, baseUrl) => {
|
|
|
9631
9623
|
};
|
|
9632
9624
|
|
|
9633
9625
|
// lib/components/primitive-components/CadModel.ts
|
|
9634
|
-
var rotation =
|
|
9635
|
-
var rotation3 =
|
|
9626
|
+
var rotation = z7.union([z7.number(), z7.string()]);
|
|
9627
|
+
var rotation3 = z7.object({ x: rotation, y: rotation, z: rotation });
|
|
9636
9628
|
var CadModel = class extends PrimitiveComponent2 {
|
|
9637
9629
|
get config() {
|
|
9638
9630
|
return {
|
|
@@ -10559,7 +10551,7 @@ function getLogicalPortsFromPortHintGroups(portHintGroups, opts) {
|
|
|
10559
10551
|
|
|
10560
10552
|
// lib/components/base-components/NormalComponent/NormalComponent.ts
|
|
10561
10553
|
var debug3 = Debug5("tscircuit:core");
|
|
10562
|
-
var rotation32 =
|
|
10554
|
+
var rotation32 = z8.object({
|
|
10563
10555
|
x: rotation2,
|
|
10564
10556
|
y: rotation2,
|
|
10565
10557
|
z: rotation2
|
|
@@ -13519,8 +13511,18 @@ var getSimpleRouteJsonFromCircuitJson = ({
|
|
|
13519
13511
|
const connectionsFromNets = [];
|
|
13520
13512
|
for (const net of source_nets) {
|
|
13521
13513
|
const connectedSourceTraces = db.source_trace.list().filter((st) => st.connected_source_net_ids?.includes(net.source_net_id));
|
|
13514
|
+
let nominalTraceWidthFromConnectedTraces;
|
|
13515
|
+
for (const sourceTrace of connectedSourceTraces) {
|
|
13516
|
+
if (sourceTrace.min_trace_thickness === void 0) continue;
|
|
13517
|
+
nominalTraceWidthFromConnectedTraces = Math.max(
|
|
13518
|
+
nominalTraceWidthFromConnectedTraces ?? 0,
|
|
13519
|
+
sourceTrace.min_trace_thickness
|
|
13520
|
+
);
|
|
13521
|
+
}
|
|
13522
13522
|
connectionsFromNets.push({
|
|
13523
13523
|
name: net.source_net_id ?? connMap.getNetConnectedToId(net.source_net_id),
|
|
13524
|
+
nominalTraceWidth: nominalTraceWidthFromConnectedTraces,
|
|
13525
|
+
width: nominalTraceWidthFromConnectedTraces,
|
|
13524
13526
|
pointsToConnect: connectedSourceTraces.flatMap((st) => {
|
|
13525
13527
|
const pcb_ports = db.pcb_port.list().filter(
|
|
13526
13528
|
(p) => st.connected_source_port_ids.includes(p.source_port_id)
|
|
@@ -17352,15 +17354,201 @@ function Group_doInitialSourceAddConnectivityMapKey(group) {
|
|
|
17352
17354
|
}
|
|
17353
17355
|
|
|
17354
17356
|
// lib/components/primitive-components/Group/Group_getRoutingPhasePlans.ts
|
|
17357
|
+
function getPhaseSortValue(routingPhaseIndex) {
|
|
17358
|
+
return routingPhaseIndex === null ? Number.POSITIVE_INFINITY : routingPhaseIndex;
|
|
17359
|
+
}
|
|
17360
|
+
function compareRoutingPhasePlans(a, b) {
|
|
17361
|
+
return getPhaseSortValue(a.routingPhaseIndex) - getPhaseSortValue(b.routingPhaseIndex);
|
|
17362
|
+
}
|
|
17363
|
+
function getOrCreateRoutingPhasePlan(plansByPhaseIndex, routingPhaseIndex) {
|
|
17364
|
+
let plan = plansByPhaseIndex.get(routingPhaseIndex);
|
|
17365
|
+
if (!plan) {
|
|
17366
|
+
plan = { routingPhaseIndex, nets: [], traces: [] };
|
|
17367
|
+
plansByPhaseIndex.set(routingPhaseIndex, plan);
|
|
17368
|
+
}
|
|
17369
|
+
return plan;
|
|
17370
|
+
}
|
|
17371
|
+
function getNetRoutingPhaseIndex(net) {
|
|
17372
|
+
return net.props.routingPhaseIndex ?? null;
|
|
17373
|
+
}
|
|
17374
|
+
function getTraceRoutingPhaseIndex(trace) {
|
|
17375
|
+
const traceRoutingPhaseIndex = trace.props.routingPhaseIndex;
|
|
17376
|
+
if (traceRoutingPhaseIndex !== void 0) return traceRoutingPhaseIndex;
|
|
17377
|
+
let routingPhaseIndex = null;
|
|
17378
|
+
const connectedNets = trace._findConnectedNets().nets;
|
|
17379
|
+
for (const net of connectedNets) {
|
|
17380
|
+
const netRoutingPhaseIndex = net.props.routingPhaseIndex;
|
|
17381
|
+
if (typeof netRoutingPhaseIndex === "number") {
|
|
17382
|
+
if (routingPhaseIndex === null || netRoutingPhaseIndex < routingPhaseIndex) {
|
|
17383
|
+
routingPhaseIndex = netRoutingPhaseIndex;
|
|
17384
|
+
}
|
|
17385
|
+
}
|
|
17386
|
+
}
|
|
17387
|
+
return routingPhaseIndex;
|
|
17388
|
+
}
|
|
17355
17389
|
function Group_getRoutingPhasePlans(group) {
|
|
17356
17390
|
const traces = group.selectAll("trace");
|
|
17357
|
-
|
|
17358
|
-
return [
|
|
17359
|
-
|
|
17360
|
-
|
|
17361
|
-
|
|
17391
|
+
const nets = group.selectAll("net");
|
|
17392
|
+
if (traces.length === 0 && nets.length === 0) return [];
|
|
17393
|
+
const plansByPhaseIndex = /* @__PURE__ */ new Map();
|
|
17394
|
+
for (const net of nets) {
|
|
17395
|
+
const routingPhaseIndex = getNetRoutingPhaseIndex(net);
|
|
17396
|
+
getOrCreateRoutingPhasePlan(plansByPhaseIndex, routingPhaseIndex).nets.push(
|
|
17397
|
+
net
|
|
17398
|
+
);
|
|
17399
|
+
}
|
|
17400
|
+
for (const trace of traces) {
|
|
17401
|
+
const routingPhaseIndex = getTraceRoutingPhaseIndex(trace);
|
|
17402
|
+
getOrCreateRoutingPhasePlan(
|
|
17403
|
+
plansByPhaseIndex,
|
|
17404
|
+
routingPhaseIndex
|
|
17405
|
+
).traces.push(trace);
|
|
17406
|
+
}
|
|
17407
|
+
return Array.from(plansByPhaseIndex.values()).sort(compareRoutingPhasePlans);
|
|
17408
|
+
}
|
|
17409
|
+
|
|
17410
|
+
// lib/components/primitive-components/Group/Group_phasedAutoroutingUtils.ts
|
|
17411
|
+
function isWirePoint(point6) {
|
|
17412
|
+
return point6.route_type === "wire";
|
|
17413
|
+
}
|
|
17414
|
+
function isViaPoint(point6) {
|
|
17415
|
+
return point6.route_type === "via";
|
|
17416
|
+
}
|
|
17417
|
+
function isJumperPoint(point6) {
|
|
17418
|
+
return point6.route_type === "jumper";
|
|
17419
|
+
}
|
|
17420
|
+
function getTraceConnectionName(trace) {
|
|
17421
|
+
return trace.connection_name ?? trace.pcb_trace_id;
|
|
17422
|
+
}
|
|
17423
|
+
function getWireWidth(start, end) {
|
|
17424
|
+
if (isWirePoint(start)) return start.width;
|
|
17425
|
+
if (isWirePoint(end)) return end.width;
|
|
17426
|
+
return 0.1;
|
|
17427
|
+
}
|
|
17428
|
+
function getSegmentLayer(start, end) {
|
|
17429
|
+
if (isWirePoint(start)) return start.layer;
|
|
17430
|
+
if (isWirePoint(end)) return end.layer;
|
|
17431
|
+
if (isJumperPoint(start)) return start.layer;
|
|
17432
|
+
if (isJumperPoint(end)) return end.layer;
|
|
17433
|
+
return null;
|
|
17434
|
+
}
|
|
17435
|
+
function getRoutePointX(point6) {
|
|
17436
|
+
if (isJumperPoint(point6)) return null;
|
|
17437
|
+
return point6.x;
|
|
17438
|
+
}
|
|
17439
|
+
function getRoutePointY(point6) {
|
|
17440
|
+
if (isJumperPoint(point6)) return null;
|
|
17441
|
+
return point6.y;
|
|
17442
|
+
}
|
|
17443
|
+
function createWireObstacle(start, end, connectedTo, obstacleIndex) {
|
|
17444
|
+
const startX = getRoutePointX(start);
|
|
17445
|
+
const startY = getRoutePointY(start);
|
|
17446
|
+
const endX = getRoutePointX(end);
|
|
17447
|
+
const endY = getRoutePointY(end);
|
|
17448
|
+
const layer = getSegmentLayer(start, end);
|
|
17449
|
+
if (startX === null || startY === null) return null;
|
|
17450
|
+
if (endX === null || endY === null) return null;
|
|
17451
|
+
if (!layer) return null;
|
|
17452
|
+
const width = getWireWidth(start, end);
|
|
17453
|
+
const dx = Math.abs(startX - endX);
|
|
17454
|
+
const dy = Math.abs(startY - endY);
|
|
17455
|
+
return {
|
|
17456
|
+
obstacleId: `${connectedTo}_phase_obstacle_${obstacleIndex}`,
|
|
17457
|
+
type: "rect",
|
|
17458
|
+
layers: [layer],
|
|
17459
|
+
center: {
|
|
17460
|
+
x: (startX + endX) / 2,
|
|
17461
|
+
y: (startY + endY) / 2
|
|
17462
|
+
},
|
|
17463
|
+
width: dx + width,
|
|
17464
|
+
height: dy + width,
|
|
17465
|
+
connectedTo: [connectedTo]
|
|
17466
|
+
};
|
|
17467
|
+
}
|
|
17468
|
+
function createJumperObstacle(point6, connectedTo, obstacleIndex) {
|
|
17469
|
+
const dx = Math.abs(point6.start.x - point6.end.x);
|
|
17470
|
+
const dy = Math.abs(point6.start.y - point6.end.y);
|
|
17471
|
+
const width = 0.6;
|
|
17472
|
+
return {
|
|
17473
|
+
obstacleId: `${connectedTo}_phase_jumper_obstacle_${obstacleIndex}`,
|
|
17474
|
+
type: "rect",
|
|
17475
|
+
layers: [point6.layer],
|
|
17476
|
+
center: {
|
|
17477
|
+
x: (point6.start.x + point6.end.x) / 2,
|
|
17478
|
+
y: (point6.start.y + point6.end.y) / 2
|
|
17479
|
+
},
|
|
17480
|
+
width: dx + width,
|
|
17481
|
+
height: dy + width,
|
|
17482
|
+
connectedTo: [connectedTo]
|
|
17483
|
+
};
|
|
17484
|
+
}
|
|
17485
|
+
function createViaObstacle(point6, connectedTo, obstacleIndex) {
|
|
17486
|
+
return {
|
|
17487
|
+
obstacleId: `${connectedTo}_phase_via_obstacle_${obstacleIndex}`,
|
|
17488
|
+
type: "rect",
|
|
17489
|
+
layers: [point6.from_layer, point6.to_layer],
|
|
17490
|
+
center: { x: point6.x, y: point6.y },
|
|
17491
|
+
width: 0.6,
|
|
17492
|
+
height: 0.6,
|
|
17493
|
+
connectedTo: [connectedTo]
|
|
17494
|
+
};
|
|
17495
|
+
}
|
|
17496
|
+
function addTraceObstacles(obstacles, trace) {
|
|
17497
|
+
const connectedTo = getTraceConnectionName(trace);
|
|
17498
|
+
for (let routeIndex = 0; routeIndex < trace.route.length; routeIndex++) {
|
|
17499
|
+
const routePoint = trace.route[routeIndex];
|
|
17500
|
+
if (isViaPoint(routePoint)) {
|
|
17501
|
+
obstacles.push(createViaObstacle(routePoint, connectedTo, routeIndex));
|
|
17502
|
+
} else if (isJumperPoint(routePoint)) {
|
|
17503
|
+
obstacles.push(createJumperObstacle(routePoint, connectedTo, routeIndex));
|
|
17504
|
+
}
|
|
17505
|
+
if (routeIndex === trace.route.length - 1) continue;
|
|
17506
|
+
const nextPoint = trace.route[routeIndex + 1];
|
|
17507
|
+
const obstacle = createWireObstacle(
|
|
17508
|
+
routePoint,
|
|
17509
|
+
nextPoint,
|
|
17510
|
+
connectedTo,
|
|
17511
|
+
routeIndex
|
|
17512
|
+
);
|
|
17513
|
+
if (obstacle) obstacles.push(obstacle);
|
|
17514
|
+
}
|
|
17515
|
+
}
|
|
17516
|
+
function connectionIsInRoutingPhase(connection, phasePlan) {
|
|
17517
|
+
for (const trace of phasePlan.traces) {
|
|
17518
|
+
if (!trace.source_trace_id) continue;
|
|
17519
|
+
if (connection.source_trace_id === trace.source_trace_id) return true;
|
|
17520
|
+
if (connection.name === trace.source_trace_id) return true;
|
|
17521
|
+
}
|
|
17522
|
+
for (const net of phasePlan.nets) {
|
|
17523
|
+
if (!net.source_net_id) continue;
|
|
17524
|
+
if (connection.name === net.source_net_id) return true;
|
|
17525
|
+
}
|
|
17526
|
+
return false;
|
|
17527
|
+
}
|
|
17528
|
+
function Group_hasPhasedAutorouting(routingPhasePlans) {
|
|
17529
|
+
for (const plan of routingPhasePlans) {
|
|
17530
|
+
if (plan.routingPhaseIndex !== null) return true;
|
|
17531
|
+
}
|
|
17532
|
+
return false;
|
|
17533
|
+
}
|
|
17534
|
+
function Group_filterSimpleRouteJsonForPhase(simpleRouteJson, phasePlan) {
|
|
17535
|
+
const connections = [];
|
|
17536
|
+
for (const connection of simpleRouteJson.connections) {
|
|
17537
|
+
if (connectionIsInRoutingPhase(connection, phasePlan)) {
|
|
17538
|
+
connections.push(connection);
|
|
17362
17539
|
}
|
|
17363
|
-
|
|
17540
|
+
}
|
|
17541
|
+
return {
|
|
17542
|
+
...simpleRouteJson,
|
|
17543
|
+
connections
|
|
17544
|
+
};
|
|
17545
|
+
}
|
|
17546
|
+
function Group_getObstaclesFromRoutedTraces(traces) {
|
|
17547
|
+
const obstacles = [];
|
|
17548
|
+
for (const trace of traces) {
|
|
17549
|
+
addTraceObstacles(obstacles, trace);
|
|
17550
|
+
}
|
|
17551
|
+
return obstacles;
|
|
17364
17552
|
}
|
|
17365
17553
|
|
|
17366
17554
|
// lib/components/primitive-components/Group/add-port-ids-to-traces-at-jumper-pads.ts
|
|
@@ -18052,123 +18240,143 @@ var Group6 = class extends NormalComponent3 {
|
|
|
18052
18240
|
const isLaserPrefabPreset = this._isLaserPrefabAutorouter(autorouterConfig);
|
|
18053
18241
|
const isAutoJumperPreset = this._isAutoJumperAutorouter(autorouterConfig);
|
|
18054
18242
|
const isSingleLayerBoard = this._getSubcircuitLayerCount() === 1;
|
|
18055
|
-
const { simpleRouteJson } = getSimpleRouteJsonFromCircuitJson({
|
|
18243
|
+
const { simpleRouteJson: baseSimpleRouteJson } = getSimpleRouteJsonFromCircuitJson({
|
|
18056
18244
|
db,
|
|
18057
18245
|
minTraceWidth: this.props.autorouter?.minTraceWidth ?? 0.15,
|
|
18058
18246
|
nominalTraceWidth: this.props.nominalTraceWidth,
|
|
18059
18247
|
subcircuit_id: this.subcircuit_id,
|
|
18060
18248
|
subcircuitComponent: this
|
|
18061
18249
|
});
|
|
18062
|
-
|
|
18063
|
-
|
|
18064
|
-
|
|
18065
|
-
|
|
18250
|
+
const routingPhasePlans = this._getRoutingPhasePlans();
|
|
18251
|
+
const hasPhasedAutorouting = Group_hasPhasedAutorouting(routingPhasePlans);
|
|
18252
|
+
const outputTraces = [];
|
|
18253
|
+
const outputJumpers = [];
|
|
18254
|
+
for (const routingPhasePlan of routingPhasePlans) {
|
|
18255
|
+
let simpleRouteJson = baseSimpleRouteJson;
|
|
18256
|
+
if (hasPhasedAutorouting) {
|
|
18257
|
+
simpleRouteJson = Group_filterSimpleRouteJsonForPhase(
|
|
18258
|
+
baseSimpleRouteJson,
|
|
18259
|
+
routingPhasePlan
|
|
18260
|
+
);
|
|
18261
|
+
simpleRouteJson.obstacles = [
|
|
18262
|
+
...simpleRouteJson.obstacles,
|
|
18263
|
+
...Group_getObstaclesFromRoutedTraces(outputTraces)
|
|
18264
|
+
];
|
|
18066
18265
|
}
|
|
18067
|
-
|
|
18068
|
-
|
|
18069
|
-
|
|
18070
|
-
|
|
18071
|
-
|
|
18072
|
-
|
|
18073
|
-
|
|
18074
|
-
|
|
18075
|
-
|
|
18076
|
-
|
|
18077
|
-
|
|
18078
|
-
|
|
18079
|
-
|
|
18080
|
-
|
|
18081
|
-
}
|
|
18082
|
-
this.root?.emit("autorouting:start", {
|
|
18083
|
-
subcircuit_id: this.subcircuit_id,
|
|
18084
|
-
componentDisplayName: this.getString(),
|
|
18085
|
-
simpleRouteJson
|
|
18086
|
-
});
|
|
18087
|
-
let autorouter;
|
|
18088
|
-
if (autorouterConfig.algorithmFn) {
|
|
18089
|
-
autorouter = await autorouterConfig.algorithmFn(simpleRouteJson);
|
|
18090
|
-
} else {
|
|
18091
|
-
const autorouterVersion2 = this.props.autorouterVersion;
|
|
18092
|
-
const effortLevel = this.props.autorouterEffortLevel;
|
|
18093
|
-
const effort = effortLevel ? Number.parseInt(effortLevel.replace("x", ""), 10) : void 0;
|
|
18094
|
-
autorouter = new TscircuitAutorouter(simpleRouteJson, {
|
|
18095
|
-
// Optional configuration parameters
|
|
18096
|
-
capacityDepth: this.props.autorouter?.capacityDepth,
|
|
18097
|
-
targetMinCapacity: this.props.autorouter?.targetMinCapacity,
|
|
18098
|
-
useAssignableSolver: isLaserPrefabPreset || isSingleLayerBoard,
|
|
18099
|
-
useAutoJumperSolver: isAutoJumperPreset,
|
|
18100
|
-
autorouterVersion: autorouterVersion2,
|
|
18101
|
-
effort,
|
|
18102
|
-
onSolverStarted: ({ solverName, solverParams }) => this.root?.emit("solver:started", {
|
|
18103
|
-
type: "solver:started",
|
|
18104
|
-
solverName,
|
|
18105
|
-
solverParams,
|
|
18106
|
-
componentName: this.getString()
|
|
18107
|
-
})
|
|
18108
|
-
});
|
|
18109
|
-
}
|
|
18110
|
-
const routingPromise = new Promise(
|
|
18111
|
-
(resolve, reject) => {
|
|
18112
|
-
autorouter.on("complete", (event) => {
|
|
18113
|
-
debug11(`[${this.getString()}] local autorouting complete`);
|
|
18114
|
-
resolve(event.traces);
|
|
18115
|
-
});
|
|
18116
|
-
autorouter.on("error", (event) => {
|
|
18117
|
-
debug11(
|
|
18118
|
-
`[${this.getString()}] local autorouting error: ${event.error.message}`
|
|
18119
|
-
);
|
|
18120
|
-
reject(event.error);
|
|
18266
|
+
if (hasPhasedAutorouting && simpleRouteJson.connections.length === 0) {
|
|
18267
|
+
continue;
|
|
18268
|
+
}
|
|
18269
|
+
if (isAutoJumperPreset) {
|
|
18270
|
+
simpleRouteJson.allowJumpers = true;
|
|
18271
|
+
if (autorouterConfig.availableJumperTypes) {
|
|
18272
|
+
simpleRouteJson.availableJumperTypes = autorouterConfig.availableJumperTypes;
|
|
18273
|
+
}
|
|
18274
|
+
}
|
|
18275
|
+
if (debug11.enabled) {
|
|
18276
|
+
;
|
|
18277
|
+
global.debugOutputArray?.push({
|
|
18278
|
+
name: `simpleroutejson-${this.props.name}.json`,
|
|
18279
|
+
obj: simpleRouteJson
|
|
18121
18280
|
});
|
|
18122
18281
|
}
|
|
18123
|
-
|
|
18124
|
-
|
|
18125
|
-
|
|
18282
|
+
if (debug11.enabled) {
|
|
18283
|
+
const graphicsObject = convertSrjToGraphicsObject(
|
|
18284
|
+
simpleRouteJson
|
|
18285
|
+
);
|
|
18286
|
+
graphicsObject.title = `autorouting-${this.props.name}`;
|
|
18287
|
+
global.debugGraphics?.push(graphicsObject);
|
|
18288
|
+
}
|
|
18289
|
+
this.root?.emit("autorouting:start", {
|
|
18126
18290
|
subcircuit_id: this.subcircuit_id,
|
|
18127
18291
|
componentDisplayName: this.getString(),
|
|
18128
|
-
|
|
18292
|
+
simpleRouteJson
|
|
18129
18293
|
});
|
|
18130
|
-
|
|
18131
|
-
|
|
18132
|
-
|
|
18133
|
-
|
|
18134
|
-
|
|
18135
|
-
const
|
|
18136
|
-
|
|
18137
|
-
|
|
18138
|
-
|
|
18139
|
-
|
|
18140
|
-
|
|
18294
|
+
let autorouter;
|
|
18295
|
+
if (autorouterConfig.algorithmFn) {
|
|
18296
|
+
autorouter = await autorouterConfig.algorithmFn(simpleRouteJson);
|
|
18297
|
+
} else {
|
|
18298
|
+
const autorouterVersion2 = this.props.autorouterVersion;
|
|
18299
|
+
const effortLevel = this.props.autorouterEffortLevel;
|
|
18300
|
+
const effort = effortLevel ? Number.parseInt(effortLevel.replace("x", ""), 10) : void 0;
|
|
18301
|
+
autorouter = new TscircuitAutorouter(simpleRouteJson, {
|
|
18302
|
+
// Optional configuration parameters
|
|
18303
|
+
capacityDepth: this.props.autorouter?.capacityDepth,
|
|
18304
|
+
targetMinCapacity: this.props.autorouter?.targetMinCapacity,
|
|
18305
|
+
useAssignableSolver: isLaserPrefabPreset || isSingleLayerBoard,
|
|
18306
|
+
useAutoJumperSolver: isAutoJumperPreset,
|
|
18307
|
+
autorouterVersion: autorouterVersion2,
|
|
18308
|
+
effort,
|
|
18309
|
+
onSolverStarted: ({ solverName, solverParams }) => this.root?.emit("solver:started", {
|
|
18310
|
+
type: "solver:started",
|
|
18311
|
+
solverName,
|
|
18312
|
+
solverParams,
|
|
18313
|
+
componentName: this.getString()
|
|
18314
|
+
})
|
|
18141
18315
|
});
|
|
18142
18316
|
}
|
|
18143
|
-
|
|
18144
|
-
|
|
18145
|
-
|
|
18146
|
-
|
|
18147
|
-
|
|
18148
|
-
|
|
18149
|
-
|
|
18150
|
-
|
|
18151
|
-
|
|
18152
|
-
|
|
18153
|
-
|
|
18154
|
-
|
|
18155
|
-
|
|
18156
|
-
|
|
18157
|
-
|
|
18158
|
-
|
|
18317
|
+
const routingPromise = new Promise(
|
|
18318
|
+
(resolve, reject) => {
|
|
18319
|
+
autorouter.on("complete", (event) => {
|
|
18320
|
+
debug11(`[${this.getString()}] local autorouting complete`);
|
|
18321
|
+
resolve(event.traces);
|
|
18322
|
+
});
|
|
18323
|
+
autorouter.on("error", (event) => {
|
|
18324
|
+
debug11(
|
|
18325
|
+
`[${this.getString()}] local autorouting error: ${event.error.message}`
|
|
18326
|
+
);
|
|
18327
|
+
reject(event.error);
|
|
18328
|
+
});
|
|
18329
|
+
}
|
|
18330
|
+
);
|
|
18331
|
+
autorouter.on("progress", (event) => {
|
|
18332
|
+
this.root?.emit("autorouting:progress", {
|
|
18333
|
+
subcircuit_id: this.subcircuit_id,
|
|
18334
|
+
componentDisplayName: this.getString(),
|
|
18335
|
+
...event
|
|
18336
|
+
});
|
|
18159
18337
|
});
|
|
18160
|
-
|
|
18161
|
-
|
|
18162
|
-
|
|
18163
|
-
|
|
18338
|
+
autorouter.start();
|
|
18339
|
+
try {
|
|
18340
|
+
const traces = await routingPromise;
|
|
18341
|
+
if (autorouter.getConnectedOffboardObstacles) {
|
|
18342
|
+
const connectedOffboardObstacles = autorouter.getConnectedOffboardObstacles();
|
|
18343
|
+
createSourceTracesFromOffboardConnections({
|
|
18344
|
+
db,
|
|
18345
|
+
connectedOffboardObstacles,
|
|
18346
|
+
simpleRouteJson,
|
|
18347
|
+
subcircuit_id: this.subcircuit_id
|
|
18348
|
+
});
|
|
18349
|
+
}
|
|
18350
|
+
const solver = autorouter.solver;
|
|
18351
|
+
if (solver?.getOutputJumpers) {
|
|
18352
|
+
outputJumpers.push(...solver.getOutputJumpers() || []);
|
|
18353
|
+
}
|
|
18354
|
+
outputTraces.push(...traces);
|
|
18355
|
+
} catch (error) {
|
|
18356
|
+
const { db: db2 } = this.root;
|
|
18357
|
+
db2.pcb_autorouting_error.insert({
|
|
18358
|
+
pcb_error_id: `pcb_autorouter_error_subcircuit_${this.subcircuit_id}`,
|
|
18359
|
+
error_type: "pcb_autorouting_error",
|
|
18164
18360
|
message: error instanceof Error ? error.message : String(error)
|
|
18165
|
-
}
|
|
18166
|
-
|
|
18167
|
-
|
|
18168
|
-
|
|
18169
|
-
|
|
18170
|
-
|
|
18361
|
+
});
|
|
18362
|
+
this.root?.emit("autorouting:error", {
|
|
18363
|
+
subcircuit_id: this.subcircuit_id,
|
|
18364
|
+
componentDisplayName: this.getString(),
|
|
18365
|
+
error: {
|
|
18366
|
+
message: error instanceof Error ? error.message : String(error)
|
|
18367
|
+
},
|
|
18368
|
+
simpleRouteJson
|
|
18369
|
+
});
|
|
18370
|
+
throw error;
|
|
18371
|
+
} finally {
|
|
18372
|
+
autorouter.stop();
|
|
18373
|
+
}
|
|
18171
18374
|
}
|
|
18375
|
+
this._asyncAutoroutingResult = {
|
|
18376
|
+
output_pcb_traces: outputTraces,
|
|
18377
|
+
output_jumpers: outputJumpers
|
|
18378
|
+
};
|
|
18379
|
+
this._markDirty("PcbTraceRender");
|
|
18172
18380
|
}
|
|
18173
18381
|
_startAsyncAutorouting() {
|
|
18174
18382
|
if (this._hasStartedAsyncAutorouting) return;
|
|
@@ -19345,7 +19553,7 @@ import { identity as identity5 } from "transformation-matrix";
|
|
|
19345
19553
|
var package_default = {
|
|
19346
19554
|
name: "@tscircuit/core",
|
|
19347
19555
|
type: "module",
|
|
19348
|
-
version: "0.0.
|
|
19556
|
+
version: "0.0.1161",
|
|
19349
19557
|
types: "dist/index.d.ts",
|
|
19350
19558
|
main: "dist/index.js",
|
|
19351
19559
|
module: "dist/index.js",
|