@tscircuit/pcb-viewer 1.7.0 → 1.8.1
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 +237 -154
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -9469,6 +9469,9 @@ var require_dist = __commonJS({
|
|
|
9469
9469
|
schematic_path: function() {
|
|
9470
9470
|
return schematic_path;
|
|
9471
9471
|
},
|
|
9472
|
+
schematic_pin_styles: function() {
|
|
9473
|
+
return schematic_pin_styles;
|
|
9474
|
+
},
|
|
9472
9475
|
schematic_port: function() {
|
|
9473
9476
|
return schematic_port;
|
|
9474
9477
|
},
|
|
@@ -9809,6 +9812,12 @@ var require_dist = __commonJS({
|
|
|
9809
9812
|
points: import_zod22.z.array(point)
|
|
9810
9813
|
});
|
|
9811
9814
|
var import_zod23 = require_lib2();
|
|
9815
|
+
var schematic_pin_styles = import_zod23.z.record(import_zod23.z.object({
|
|
9816
|
+
left_margin: length.optional(),
|
|
9817
|
+
right_margin: length.optional(),
|
|
9818
|
+
top_margin: length.optional(),
|
|
9819
|
+
bottom_margin: length.optional()
|
|
9820
|
+
}));
|
|
9812
9821
|
var schematic_component = import_zod23.z.object({
|
|
9813
9822
|
type: import_zod23.z.literal("schematic_component"),
|
|
9814
9823
|
rotation: rotation.default(0),
|
|
@@ -9817,7 +9826,9 @@ var require_dist = __commonJS({
|
|
|
9817
9826
|
source_component_id: import_zod23.z.string(),
|
|
9818
9827
|
schematic_component_id: import_zod23.z.string(),
|
|
9819
9828
|
pin_spacing: length.optional(),
|
|
9829
|
+
pin_styles: schematic_pin_styles.optional(),
|
|
9820
9830
|
box_width: length.optional(),
|
|
9831
|
+
symbol_name: import_zod23.z.string().optional(),
|
|
9821
9832
|
port_arrangement: import_zod23.z.union([
|
|
9822
9833
|
import_zod23.z.object({
|
|
9823
9834
|
left_size: import_zod23.z.number(),
|
|
@@ -10094,6 +10105,11 @@ var require_dist = __commonJS({
|
|
|
10094
10105
|
source_trace_id: import_zod39.z.string().optional(),
|
|
10095
10106
|
pcb_component_id: import_zod39.z.string().optional(),
|
|
10096
10107
|
pcb_trace_id: import_zod39.z.string(),
|
|
10108
|
+
route_thickness_mode: import_zod39.z.enum([
|
|
10109
|
+
"constant",
|
|
10110
|
+
"interpolated"
|
|
10111
|
+
]).default("interpolated").optional(),
|
|
10112
|
+
should_round_corners: import_zod39.z.boolean().optional(),
|
|
10097
10113
|
route: import_zod39.z.array(import_zod39.z.union([
|
|
10098
10114
|
import_zod39.z.object({
|
|
10099
10115
|
route_type: import_zod39.z.literal("wire"),
|
|
@@ -10147,9 +10163,11 @@ var require_dist = __commonJS({
|
|
|
10147
10163
|
var import_zod43 = require_lib2();
|
|
10148
10164
|
var pcb_board = import_zod43.z.object({
|
|
10149
10165
|
type: import_zod43.z.literal("pcb_board"),
|
|
10166
|
+
pcb_board_id: import_zod43.z.string().default("pcb_board_0").optional(),
|
|
10150
10167
|
width: length,
|
|
10151
10168
|
height: length,
|
|
10152
|
-
center: point
|
|
10169
|
+
center: point,
|
|
10170
|
+
outline: import_zod43.z.array(point).optional()
|
|
10153
10171
|
}).describe("Defines the board outline of the PCB");
|
|
10154
10172
|
var import_zod44 = require_lib2();
|
|
10155
10173
|
var pcb_placement_error = import_zod44.z.object({
|
|
@@ -11786,6 +11804,12 @@ var drawPill = function(drawer, pill) {
|
|
|
11786
11804
|
});
|
|
11787
11805
|
drawer.pill(pill.x, pill.y, pill.w, pill.h);
|
|
11788
11806
|
};
|
|
11807
|
+
var drawPolygon = function(drawer, polygon) {
|
|
11808
|
+
drawer.equip({
|
|
11809
|
+
color: polygon.layer
|
|
11810
|
+
});
|
|
11811
|
+
drawer.polygon(polygon.points);
|
|
11812
|
+
};
|
|
11789
11813
|
var drawPrimitive = function(drawer, primitive) {
|
|
11790
11814
|
switch(primitive.pcb_drawing_type){
|
|
11791
11815
|
case "line":
|
|
@@ -11800,6 +11824,8 @@ var drawPrimitive = function(drawer, primitive) {
|
|
|
11800
11824
|
return drawOval(drawer, primitive);
|
|
11801
11825
|
case "pill":
|
|
11802
11826
|
return drawPill(drawer, primitive);
|
|
11827
|
+
case "polygon":
|
|
11828
|
+
return drawPolygon(drawer, primitive);
|
|
11803
11829
|
}
|
|
11804
11830
|
};
|
|
11805
11831
|
var drawPrimitives = function(drawer, primitives) {
|
|
@@ -12225,6 +12251,34 @@ var Drawer = /*#__PURE__*/ function() {
|
|
|
12225
12251
|
ctx.closePath();
|
|
12226
12252
|
}
|
|
12227
12253
|
},
|
|
12254
|
+
{
|
|
12255
|
+
key: "polygon",
|
|
12256
|
+
value: function polygon(points) {
|
|
12257
|
+
var _this = this;
|
|
12258
|
+
if (points.length < 3) {
|
|
12259
|
+
console.warn("Polygon must have at least 3 points");
|
|
12260
|
+
return;
|
|
12261
|
+
}
|
|
12262
|
+
this.applyAperture();
|
|
12263
|
+
var ctx = this.getLayerCtx();
|
|
12264
|
+
var transformedPoints = points.map(function(point) {
|
|
12265
|
+
return (0, import_transformation_matrix.applyToPoint)(_this.transform, [
|
|
12266
|
+
point.x,
|
|
12267
|
+
point.y
|
|
12268
|
+
]);
|
|
12269
|
+
});
|
|
12270
|
+
ctx.beginPath();
|
|
12271
|
+
ctx.moveTo(transformedPoints[0][0], transformedPoints[0][1]);
|
|
12272
|
+
for(var i = 1; i < transformedPoints.length; i++){
|
|
12273
|
+
ctx.lineTo(transformedPoints[i][0], transformedPoints[i][1]);
|
|
12274
|
+
}
|
|
12275
|
+
ctx.closePath();
|
|
12276
|
+
ctx.fill();
|
|
12277
|
+
var lineWidth = scaleOnly(this.transform, this.aperture.size);
|
|
12278
|
+
ctx.lineWidth = lineWidth;
|
|
12279
|
+
ctx.stroke();
|
|
12280
|
+
}
|
|
12281
|
+
},
|
|
12228
12282
|
{
|
|
12229
12283
|
/* NOTE: This is not gerber compatible */ key: "debugText",
|
|
12230
12284
|
value: function debugText(text, x, y) {
|
|
@@ -12488,6 +12542,85 @@ var CanvasPrimitiveRenderer = function(param) {
|
|
|
12488
12542
|
var import_react14 = require("react");
|
|
12489
12543
|
// src/lib/convert-element-to-primitive.ts
|
|
12490
12544
|
var import_soup_util = __toESM(require_dist2());
|
|
12545
|
+
// src/lib/util/expand-stroke.ts
|
|
12546
|
+
function getExpandedStroke(strokeInput, defaultWidth) {
|
|
12547
|
+
if (strokeInput.length < 2) {
|
|
12548
|
+
throw new Error("Stroke must have at least two points");
|
|
12549
|
+
}
|
|
12550
|
+
var stroke = strokeInput.map(function(point) {
|
|
12551
|
+
if (Array.isArray(point)) {
|
|
12552
|
+
return {
|
|
12553
|
+
x: point[0],
|
|
12554
|
+
y: point[1]
|
|
12555
|
+
};
|
|
12556
|
+
}
|
|
12557
|
+
return point;
|
|
12558
|
+
});
|
|
12559
|
+
var leftSide = [];
|
|
12560
|
+
var rightSide = [];
|
|
12561
|
+
function getNormal(p1, p2) {
|
|
12562
|
+
var dx = p2.x - p1.x;
|
|
12563
|
+
var dy = p2.y - p1.y;
|
|
12564
|
+
var length = Math.sqrt(dx * dx + dy * dy);
|
|
12565
|
+
return {
|
|
12566
|
+
x: -dy / length,
|
|
12567
|
+
y: dx / length
|
|
12568
|
+
};
|
|
12569
|
+
}
|
|
12570
|
+
function addPoint(point, normal, factor, width) {
|
|
12571
|
+
var halfWidth = width / 2;
|
|
12572
|
+
var newPoint = {
|
|
12573
|
+
x: point.x + normal.x * halfWidth * factor,
|
|
12574
|
+
y: point.y + normal.y * halfWidth * factor
|
|
12575
|
+
};
|
|
12576
|
+
if (factor > 0) {
|
|
12577
|
+
leftSide.push(newPoint);
|
|
12578
|
+
} else {
|
|
12579
|
+
rightSide.unshift(newPoint);
|
|
12580
|
+
}
|
|
12581
|
+
}
|
|
12582
|
+
var firstNormal = getNormal(stroke[0], stroke[1]);
|
|
12583
|
+
var _stroke__trace_width;
|
|
12584
|
+
var firstWidth = (_stroke__trace_width = stroke[0].trace_width) !== null && _stroke__trace_width !== void 0 ? _stroke__trace_width : defaultWidth;
|
|
12585
|
+
addPoint(stroke[0], firstNormal, 1, firstWidth);
|
|
12586
|
+
addPoint(stroke[0], firstNormal, -1, firstWidth);
|
|
12587
|
+
for(var i = 1; i < stroke.length - 1; i++){
|
|
12588
|
+
var prev = stroke[i - 1];
|
|
12589
|
+
var current = stroke[i];
|
|
12590
|
+
var next = stroke[i + 1];
|
|
12591
|
+
var normalPrev = getNormal(prev, current);
|
|
12592
|
+
var normalNext = getNormal(current, next);
|
|
12593
|
+
var miterX = normalPrev.x + normalNext.x;
|
|
12594
|
+
var miterY = normalPrev.y + normalNext.y;
|
|
12595
|
+
var miterLength = Math.sqrt(miterX * miterX + miterY * miterY);
|
|
12596
|
+
var _current_trace_width;
|
|
12597
|
+
var currentWidth = (_current_trace_width = current.trace_width) !== null && _current_trace_width !== void 0 ? _current_trace_width : defaultWidth;
|
|
12598
|
+
var miterLimit = 2;
|
|
12599
|
+
if (miterLength / 2 > miterLimit * (currentWidth / 2)) {
|
|
12600
|
+
addPoint(current, normalPrev, 1, currentWidth);
|
|
12601
|
+
addPoint(current, normalNext, 1, currentWidth);
|
|
12602
|
+
addPoint(current, normalPrev, -1, currentWidth);
|
|
12603
|
+
addPoint(current, normalNext, -1, currentWidth);
|
|
12604
|
+
} else {
|
|
12605
|
+
var scale2 = 1 / miterLength;
|
|
12606
|
+
addPoint(current, {
|
|
12607
|
+
x: miterX * scale2,
|
|
12608
|
+
y: miterY * scale2
|
|
12609
|
+
}, 1, currentWidth);
|
|
12610
|
+
addPoint(current, {
|
|
12611
|
+
x: miterX * scale2,
|
|
12612
|
+
y: miterY * scale2
|
|
12613
|
+
}, -1, currentWidth);
|
|
12614
|
+
}
|
|
12615
|
+
}
|
|
12616
|
+
var lastNormal = getNormal(stroke[stroke.length - 2], stroke[stroke.length - 1]);
|
|
12617
|
+
var _stroke__trace_width1;
|
|
12618
|
+
var lastWidth = (_stroke__trace_width1 = stroke[stroke.length - 1].trace_width) !== null && _stroke__trace_width1 !== void 0 ? _stroke__trace_width1 : defaultWidth;
|
|
12619
|
+
addPoint(stroke[stroke.length - 1], lastNormal, 1, lastWidth);
|
|
12620
|
+
addPoint(stroke[stroke.length - 1], lastNormal, -1, lastWidth);
|
|
12621
|
+
return _to_consumable_array(leftSide).concat(_to_consumable_array(rightSide));
|
|
12622
|
+
}
|
|
12623
|
+
// src/lib/convert-element-to-primitive.ts
|
|
12491
12624
|
var convertElementToPrimitives = function(element, allElements) {
|
|
12492
12625
|
var _pcb_port_get;
|
|
12493
12626
|
var _parent_pcb_component = "pcb_component_id" in element ? allElements.find(function(elm) {
|
|
@@ -12503,7 +12636,23 @@ var convertElementToPrimitives = function(element, allElements) {
|
|
|
12503
12636
|
switch(element.type){
|
|
12504
12637
|
case "pcb_board":
|
|
12505
12638
|
{
|
|
12506
|
-
var width = element.width, height = element.height, center = element.center;
|
|
12639
|
+
var width = element.width, height = element.height, center = element.center, outline = element.outline;
|
|
12640
|
+
if (outline && outline.length > 2) {
|
|
12641
|
+
return outline.map(function(point, index, array) {
|
|
12642
|
+
return {
|
|
12643
|
+
pcb_drawing_type: "line",
|
|
12644
|
+
x1: point.x,
|
|
12645
|
+
y1: point.y,
|
|
12646
|
+
x2: index === array.length - 1 ? array[0].x : array[index + 1].x,
|
|
12647
|
+
y2: index === array.length - 1 ? array[0].y : array[index + 1].y,
|
|
12648
|
+
width: 1,
|
|
12649
|
+
// Add the required width property
|
|
12650
|
+
zoomIndependent: true,
|
|
12651
|
+
layer: "board",
|
|
12652
|
+
_element: element
|
|
12653
|
+
};
|
|
12654
|
+
});
|
|
12655
|
+
}
|
|
12507
12656
|
return [
|
|
12508
12657
|
{
|
|
12509
12658
|
pcb_drawing_type: "line",
|
|
@@ -12693,42 +12842,70 @@ var convertElementToPrimitives = function(element, allElements) {
|
|
|
12693
12842
|
case "pcb_trace":
|
|
12694
12843
|
{
|
|
12695
12844
|
var primitives = [];
|
|
12696
|
-
|
|
12697
|
-
|
|
12698
|
-
|
|
12699
|
-
|
|
12700
|
-
for(var _iterator = element.route[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
12701
|
-
var route = _step.value;
|
|
12702
|
-
if (route.route_type === "wire") {
|
|
12703
|
-
if (prevX !== null && prevY !== null) {
|
|
12704
|
-
primitives.push({
|
|
12705
|
-
pcb_drawing_type: "line",
|
|
12706
|
-
x1: prevX,
|
|
12707
|
-
y1: prevY,
|
|
12708
|
-
x2: route.x,
|
|
12709
|
-
y2: route.y,
|
|
12710
|
-
width: route.width,
|
|
12711
|
-
squareCap: false,
|
|
12712
|
-
layer: route.layer
|
|
12713
|
-
});
|
|
12714
|
-
}
|
|
12715
|
-
prevX = route.x;
|
|
12716
|
-
prevY = route.y;
|
|
12717
|
-
}
|
|
12718
|
-
}
|
|
12719
|
-
} catch (err) {
|
|
12720
|
-
_didIteratorError = true;
|
|
12721
|
-
_iteratorError = err;
|
|
12722
|
-
} finally{
|
|
12845
|
+
if (element.route_thickness_mode === "constant") {
|
|
12846
|
+
var prevX = null;
|
|
12847
|
+
var prevY = null;
|
|
12848
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
12723
12849
|
try {
|
|
12724
|
-
|
|
12725
|
-
|
|
12850
|
+
for(var _iterator = element.route[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
12851
|
+
var route = _step.value;
|
|
12852
|
+
if (route.route_type === "wire") {
|
|
12853
|
+
if (prevX !== null && prevY !== null) {
|
|
12854
|
+
primitives.push({
|
|
12855
|
+
pcb_drawing_type: "line",
|
|
12856
|
+
x1: prevX,
|
|
12857
|
+
y1: prevY,
|
|
12858
|
+
x2: route.x,
|
|
12859
|
+
y2: route.y,
|
|
12860
|
+
width: route.width,
|
|
12861
|
+
squareCap: false,
|
|
12862
|
+
layer: route.layer
|
|
12863
|
+
});
|
|
12864
|
+
}
|
|
12865
|
+
prevX = route.x;
|
|
12866
|
+
prevY = route.y;
|
|
12867
|
+
}
|
|
12726
12868
|
}
|
|
12869
|
+
} catch (err) {
|
|
12870
|
+
_didIteratorError = true;
|
|
12871
|
+
_iteratorError = err;
|
|
12727
12872
|
} finally{
|
|
12728
|
-
|
|
12729
|
-
|
|
12873
|
+
try {
|
|
12874
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
12875
|
+
_iterator.return();
|
|
12876
|
+
}
|
|
12877
|
+
} finally{
|
|
12878
|
+
if (_didIteratorError) {
|
|
12879
|
+
throw _iteratorError;
|
|
12880
|
+
}
|
|
12730
12881
|
}
|
|
12731
12882
|
}
|
|
12883
|
+
} else if (element.route_thickness_mode === "interpolated") {
|
|
12884
|
+
var strokeInput = element.route.map(function(r) {
|
|
12885
|
+
return {
|
|
12886
|
+
x: r.x,
|
|
12887
|
+
y: r.y,
|
|
12888
|
+
trace_width: r.route_type === "wire" ? r.width : 0.5
|
|
12889
|
+
};
|
|
12890
|
+
});
|
|
12891
|
+
var expandedStroke = getExpandedStroke(strokeInput, 0.5);
|
|
12892
|
+
primitives.push({
|
|
12893
|
+
pcb_drawing_type: "polygon",
|
|
12894
|
+
points: expandedStroke,
|
|
12895
|
+
layer: element.route[0].layer
|
|
12896
|
+
});
|
|
12897
|
+
element.route.forEach(function(r) {
|
|
12898
|
+
if (r.route_type === "via") {
|
|
12899
|
+
primitives.push({
|
|
12900
|
+
pcb_drawing_type: "circle",
|
|
12901
|
+
x: r.x,
|
|
12902
|
+
y: r.y,
|
|
12903
|
+
radius: r.outer_diameter / 2,
|
|
12904
|
+
fill: true,
|
|
12905
|
+
layer: element.route.layer
|
|
12906
|
+
});
|
|
12907
|
+
}
|
|
12908
|
+
});
|
|
12732
12909
|
}
|
|
12733
12910
|
return primitives;
|
|
12734
12911
|
}
|
|
@@ -13390,7 +13567,7 @@ var import_soup2 = __toESM(require_dist());
|
|
|
13390
13567
|
// package.json
|
|
13391
13568
|
var package_default = {
|
|
13392
13569
|
name: "@tscircuit/pcb-viewer",
|
|
13393
|
-
version: "1.
|
|
13570
|
+
version: "1.8.0",
|
|
13394
13571
|
main: "dist/index.js",
|
|
13395
13572
|
repository: "tscircuit/pcb-viewer",
|
|
13396
13573
|
license: "MIT",
|
|
@@ -13413,11 +13590,11 @@ var package_default = {
|
|
|
13413
13590
|
"@storybook/nextjs": "^8.0.6",
|
|
13414
13591
|
"@storybook/react": "^8.0.6",
|
|
13415
13592
|
"@swc/core": "^1.4.12",
|
|
13416
|
-
"@tscircuit/builder": "^1.11.
|
|
13593
|
+
"@tscircuit/builder": "^1.11.4",
|
|
13417
13594
|
"@tscircuit/eagle-xml-converter": "^0.0.6",
|
|
13418
|
-
"@tscircuit/props": "^0.0.
|
|
13595
|
+
"@tscircuit/props": "^0.0.46",
|
|
13419
13596
|
"@tscircuit/react-fiber": "^1.1.25",
|
|
13420
|
-
"@tscircuit/soup": "^0.0.
|
|
13597
|
+
"@tscircuit/soup": "^0.0.58",
|
|
13421
13598
|
"@tscircuit/soup-util": "^0.0.13",
|
|
13422
13599
|
"@types/node": "18.7.23",
|
|
13423
13600
|
"@types/react": "^18.3.3",
|
|
@@ -14258,57 +14435,40 @@ var EditTraceHintOverlay = function(param) {
|
|
|
14258
14435
|
var route = e.route;
|
|
14259
14436
|
var pcb_port = (0, import_soup_util2.su)(soup).pcb_port.get(e.pcb_port_id);
|
|
14260
14437
|
var pcb_port_screen = (0, import_transformation_matrix6.applyToPoint)(transform, pcb_port);
|
|
14261
|
-
|
|
14262
|
-
{
|
|
14263
|
-
x: pcb_port_screen.x,
|
|
14264
|
-
y: pcb_port_screen.y,
|
|
14265
|
-
trace_width: 0.5
|
|
14266
|
-
}
|
|
14267
|
-
].concat(// Start with a small width
|
|
14268
|
-
_to_consumable_array(route.map(function(r) {
|
|
14269
|
-
if (r === void 0) {
|
|
14270
|
-
throw new Error("route contains undefined point");
|
|
14271
|
-
}
|
|
14272
|
-
return {
|
|
14273
|
-
x: (0, import_transformation_matrix6.applyToPoint)(transform, r).x,
|
|
14274
|
-
y: (0, import_transformation_matrix6.applyToPoint)(transform, r).y,
|
|
14275
|
-
trace_width: r.trace_width
|
|
14276
|
-
};
|
|
14277
|
-
})));
|
|
14278
|
-
var expandedStroke = getExpandedStroke(strokeInput, 0.5);
|
|
14279
|
-
var expandedPath = expandedStroke.map(function(point, index) {
|
|
14280
|
-
return "".concat(index === 0 ? "M" : "L", " ").concat(point.x, ",").concat(point.y);
|
|
14281
|
-
}).join(" ") + " Z";
|
|
14282
|
-
var originalPath = strokeInput.map(function(point, index) {
|
|
14283
|
-
return "".concat(index === 0 ? "M" : "L", " ").concat(point.x, ",").concat(point.y);
|
|
14284
|
-
}).join(" ");
|
|
14285
|
-
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("g", {
|
|
14438
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_react13.Fragment, {
|
|
14286
14439
|
children: [
|
|
14287
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("
|
|
14288
|
-
|
|
14289
|
-
|
|
14290
|
-
|
|
14291
|
-
|
|
14292
|
-
d: originalPath,
|
|
14293
|
-
style: {
|
|
14294
|
-
mixBlendMode: "difference"
|
|
14295
|
-
},
|
|
14440
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("rect", {
|
|
14441
|
+
x: pcb_port_screen.x - 10,
|
|
14442
|
+
y: pcb_port_screen.y - 10,
|
|
14443
|
+
width: 20,
|
|
14444
|
+
height: 20,
|
|
14296
14445
|
stroke: "red"
|
|
14297
|
-
}, "
|
|
14298
|
-
|
|
14299
|
-
|
|
14446
|
+
}, "rect-".concat(e.pcb_port_id)),
|
|
14447
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", {
|
|
14448
|
+
stroke: "red",
|
|
14449
|
+
d: "M ".concat(pcb_port_screen.x, " ").concat(pcb_port_screen.y, " ").concat(route.map(function(r) {
|
|
14450
|
+
return (0, import_transformation_matrix6.applyToPoint)(transform, r);
|
|
14451
|
+
}).map(function(r) {
|
|
14452
|
+
return "L ".concat(r.x, " ").concat(r.y);
|
|
14453
|
+
}).join(" "))
|
|
14454
|
+
}, "path-".concat(e.pcb_port_id)),
|
|
14455
|
+
route.map(function(r) {
|
|
14456
|
+
return _object_spread({}, r, (0, import_transformation_matrix6.applyToPoint)(transform, r));
|
|
14457
|
+
}).map(function(r, i) {
|
|
14458
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_react13.Fragment, {
|
|
14300
14459
|
children: [
|
|
14301
14460
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("circle", {
|
|
14302
14461
|
cx: r.x,
|
|
14303
14462
|
cy: r.y,
|
|
14304
|
-
r:
|
|
14463
|
+
r: 8,
|
|
14305
14464
|
stroke: "red"
|
|
14306
14465
|
}),
|
|
14307
14466
|
r.via && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("circle", {
|
|
14308
14467
|
cx: r.x,
|
|
14309
14468
|
cy: r.y,
|
|
14310
|
-
r:
|
|
14311
|
-
stroke: "red"
|
|
14469
|
+
r: 16,
|
|
14470
|
+
stroke: "red",
|
|
14471
|
+
fill: "transparent"
|
|
14312
14472
|
})
|
|
14313
14473
|
]
|
|
14314
14474
|
}, i);
|
|
@@ -14338,83 +14498,6 @@ var EditTraceHintOverlay = function(param) {
|
|
|
14338
14498
|
]
|
|
14339
14499
|
});
|
|
14340
14500
|
};
|
|
14341
|
-
function getExpandedStroke(strokeInput, defaultWidth) {
|
|
14342
|
-
if (strokeInput.length < 2) {
|
|
14343
|
-
throw new Error("Stroke must have at least two points");
|
|
14344
|
-
}
|
|
14345
|
-
var stroke = strokeInput.map(function(point) {
|
|
14346
|
-
if (Array.isArray(point)) {
|
|
14347
|
-
return {
|
|
14348
|
-
x: point[0],
|
|
14349
|
-
y: point[1]
|
|
14350
|
-
};
|
|
14351
|
-
}
|
|
14352
|
-
return point;
|
|
14353
|
-
});
|
|
14354
|
-
var leftSide = [];
|
|
14355
|
-
var rightSide = [];
|
|
14356
|
-
function getNormal(p1, p2) {
|
|
14357
|
-
var dx = p2.x - p1.x;
|
|
14358
|
-
var dy = p2.y - p1.y;
|
|
14359
|
-
var length = Math.sqrt(dx * dx + dy * dy);
|
|
14360
|
-
return {
|
|
14361
|
-
x: -dy / length,
|
|
14362
|
-
y: dx / length
|
|
14363
|
-
};
|
|
14364
|
-
}
|
|
14365
|
-
function addPoint(point, normal, factor, width) {
|
|
14366
|
-
var halfWidth = width / 2;
|
|
14367
|
-
var newPoint = {
|
|
14368
|
-
x: point.x + normal.x * halfWidth * factor,
|
|
14369
|
-
y: point.y + normal.y * halfWidth * factor
|
|
14370
|
-
};
|
|
14371
|
-
if (factor > 0) {
|
|
14372
|
-
leftSide.push(newPoint);
|
|
14373
|
-
} else {
|
|
14374
|
-
rightSide.unshift(newPoint);
|
|
14375
|
-
}
|
|
14376
|
-
}
|
|
14377
|
-
var firstNormal = getNormal(stroke[0], stroke[1]);
|
|
14378
|
-
var _stroke__trace_width;
|
|
14379
|
-
var firstWidth = (_stroke__trace_width = stroke[0].trace_width) !== null && _stroke__trace_width !== void 0 ? _stroke__trace_width : defaultWidth;
|
|
14380
|
-
addPoint(stroke[0], firstNormal, 1, firstWidth);
|
|
14381
|
-
addPoint(stroke[0], firstNormal, -1, firstWidth);
|
|
14382
|
-
for(var i = 1; i < stroke.length - 1; i++){
|
|
14383
|
-
var prev = stroke[i - 1];
|
|
14384
|
-
var current = stroke[i];
|
|
14385
|
-
var next = stroke[i + 1];
|
|
14386
|
-
var normalPrev = getNormal(prev, current);
|
|
14387
|
-
var normalNext = getNormal(current, next);
|
|
14388
|
-
var miterX = normalPrev.x + normalNext.x;
|
|
14389
|
-
var miterY = normalPrev.y + normalNext.y;
|
|
14390
|
-
var miterLength = Math.sqrt(miterX * miterX + miterY * miterY);
|
|
14391
|
-
var _current_trace_width;
|
|
14392
|
-
var currentWidth = (_current_trace_width = current.trace_width) !== null && _current_trace_width !== void 0 ? _current_trace_width : defaultWidth;
|
|
14393
|
-
var miterLimit = 2;
|
|
14394
|
-
if (miterLength / 2 > miterLimit * (currentWidth / 2)) {
|
|
14395
|
-
addPoint(current, normalPrev, 1, currentWidth);
|
|
14396
|
-
addPoint(current, normalNext, 1, currentWidth);
|
|
14397
|
-
addPoint(current, normalPrev, -1, currentWidth);
|
|
14398
|
-
addPoint(current, normalNext, -1, currentWidth);
|
|
14399
|
-
} else {
|
|
14400
|
-
var scale2 = 1 / miterLength;
|
|
14401
|
-
addPoint(current, {
|
|
14402
|
-
x: miterX * scale2,
|
|
14403
|
-
y: miterY * scale2
|
|
14404
|
-
}, 1, currentWidth);
|
|
14405
|
-
addPoint(current, {
|
|
14406
|
-
x: miterX * scale2,
|
|
14407
|
-
y: miterY * scale2
|
|
14408
|
-
}, -1, currentWidth);
|
|
14409
|
-
}
|
|
14410
|
-
}
|
|
14411
|
-
var lastNormal = getNormal(stroke[stroke.length - 2], stroke[stroke.length - 1]);
|
|
14412
|
-
var _stroke__trace_width1;
|
|
14413
|
-
var lastWidth = (_stroke__trace_width1 = stroke[stroke.length - 1].trace_width) !== null && _stroke__trace_width1 !== void 0 ? _stroke__trace_width1 : defaultWidth;
|
|
14414
|
-
addPoint(stroke[stroke.length - 1], lastNormal, 1, lastWidth);
|
|
14415
|
-
addPoint(stroke[stroke.length - 1], lastNormal, -1, lastWidth);
|
|
14416
|
-
return _to_consumable_array(leftSide).concat(_to_consumable_array(rightSide));
|
|
14417
|
-
}
|
|
14418
14501
|
// src/components/RatsNestOverlay.tsx
|
|
14419
14502
|
var import_transformation_matrix7 = require("transformation-matrix");
|
|
14420
14503
|
var import_soup_util3 = __toESM(require_dist2());
|