@tscircuit/3d-viewer 0.0.479 → 0.0.481
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 +47 -124
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -29492,7 +29492,7 @@ import * as THREE16 from "three";
|
|
|
29492
29492
|
// package.json
|
|
29493
29493
|
var package_default = {
|
|
29494
29494
|
name: "@tscircuit/3d-viewer",
|
|
29495
|
-
version: "0.0.
|
|
29495
|
+
version: "0.0.480",
|
|
29496
29496
|
main: "./dist/index.js",
|
|
29497
29497
|
module: "./dist/index.js",
|
|
29498
29498
|
type: "module",
|
|
@@ -30712,6 +30712,7 @@ var MANIFOLD_Z_OFFSET = 1e-3;
|
|
|
30712
30712
|
var SMOOTH_CIRCLE_SEGMENTS = 32;
|
|
30713
30713
|
var DEFAULT_SMT_PAD_THICKNESS = 0.035;
|
|
30714
30714
|
var TRACE_TEXTURE_RESOLUTION = 150;
|
|
30715
|
+
var FAUX_BOARD_OPACITY = 0.6;
|
|
30715
30716
|
var boardMaterialColors = {
|
|
30716
30717
|
fr1: colors.fr1Tan,
|
|
30717
30718
|
fr4: colors.fr4Tan
|
|
@@ -31551,7 +31552,6 @@ var buildStateOrder = [
|
|
|
31551
31552
|
"processing_plated_holes",
|
|
31552
31553
|
"processing_holes",
|
|
31553
31554
|
"processing_cutouts",
|
|
31554
|
-
"processing_traces",
|
|
31555
31555
|
"processing_vias",
|
|
31556
31556
|
"finalizing",
|
|
31557
31557
|
"done"
|
|
@@ -31569,7 +31569,6 @@ var BoardGeomBuilder = class {
|
|
|
31569
31569
|
boardGeom = null;
|
|
31570
31570
|
platedHoleGeoms = [];
|
|
31571
31571
|
padGeoms = [];
|
|
31572
|
-
traceGeoms = [];
|
|
31573
31572
|
viaGeoms = [];
|
|
31574
31573
|
// Combined with platedHoleGeoms
|
|
31575
31574
|
copperPourGeoms = [];
|
|
@@ -31701,14 +31700,6 @@ var BoardGeomBuilder = class {
|
|
|
31701
31700
|
this.goToNextState();
|
|
31702
31701
|
}
|
|
31703
31702
|
break;
|
|
31704
|
-
case "processing_traces":
|
|
31705
|
-
if (this.currentIndex < this.traces.length) {
|
|
31706
|
-
this.processTrace(this.traces[this.currentIndex]);
|
|
31707
|
-
this.currentIndex++;
|
|
31708
|
-
} else {
|
|
31709
|
-
this.goToNextState();
|
|
31710
|
-
}
|
|
31711
|
-
break;
|
|
31712
31703
|
case "processing_vias":
|
|
31713
31704
|
if (this.currentIndex < this.pcb_vias.length) {
|
|
31714
31705
|
this.processVia(this.pcb_vias[this.currentIndex]);
|
|
@@ -32132,93 +32123,6 @@ var BoardGeomBuilder = class {
|
|
|
32132
32123
|
this.padGeoms.push(padGeom);
|
|
32133
32124
|
}
|
|
32134
32125
|
}
|
|
32135
|
-
processTrace(trace) {
|
|
32136
|
-
const { route: mixedRoute } = trace;
|
|
32137
|
-
if (mixedRoute.length < 2) return;
|
|
32138
|
-
let currentSegmentPoints = [];
|
|
32139
|
-
let currentLayer = null;
|
|
32140
|
-
let currentWidth = 0.1;
|
|
32141
|
-
const finishSegment = () => {
|
|
32142
|
-
if (currentSegmentPoints.length >= 2 && currentLayer) {
|
|
32143
|
-
const layerSign = currentLayer === "bottom" ? -1 : 1;
|
|
32144
|
-
const traceOffset = BOARD_SURFACE_OFFSET.traces - 2e-3;
|
|
32145
|
-
const zCenter = layerSign * this.ctx.pcbThickness / 2 + layerSign * traceOffset;
|
|
32146
|
-
const linePath = (0, import_primitives7.line)(currentSegmentPoints);
|
|
32147
|
-
const expandedPath = (0, import_expansions2.expand)(
|
|
32148
|
-
{ delta: currentWidth / 2, corners: "round" },
|
|
32149
|
-
linePath
|
|
32150
|
-
);
|
|
32151
|
-
let traceGeom = (0, import_transforms6.translate)(
|
|
32152
|
-
[0, 0, zCenter - M / 2],
|
|
32153
|
-
(0, import_extrusions4.extrudeLinear)({ height: M }, expandedPath)
|
|
32154
|
-
);
|
|
32155
|
-
const startPointCoords = currentSegmentPoints[0];
|
|
32156
|
-
const endPointCoords = currentSegmentPoints[currentSegmentPoints.length - 1];
|
|
32157
|
-
const startHole = this.getHoleToCut(
|
|
32158
|
-
startPointCoords[0],
|
|
32159
|
-
startPointCoords[1]
|
|
32160
|
-
);
|
|
32161
|
-
if (startHole) {
|
|
32162
|
-
const cuttingCylinder = (0, import_primitives7.cylinder)({
|
|
32163
|
-
center: [startPointCoords[0], startPointCoords[1], zCenter],
|
|
32164
|
-
radius: startHole.diameter / 2 + M,
|
|
32165
|
-
height: M
|
|
32166
|
-
});
|
|
32167
|
-
traceGeom = (0, import_booleans5.subtract)(traceGeom, cuttingCylinder);
|
|
32168
|
-
}
|
|
32169
|
-
const endHole = this.getHoleToCut(endPointCoords[0], endPointCoords[1]);
|
|
32170
|
-
if (endHole) {
|
|
32171
|
-
const cuttingCylinder = (0, import_primitives7.cylinder)({
|
|
32172
|
-
center: [endPointCoords[0], endPointCoords[1], zCenter],
|
|
32173
|
-
radius: endHole.diameter / 2 + M,
|
|
32174
|
-
height: M
|
|
32175
|
-
});
|
|
32176
|
-
traceGeom = (0, import_booleans5.subtract)(traceGeom, cuttingCylinder);
|
|
32177
|
-
}
|
|
32178
|
-
const tracesMaterialColor = tracesMaterialColors[this.board.material] ?? colors.fr4TracesWithoutMaskTan;
|
|
32179
|
-
if (this.boardClipGeom) {
|
|
32180
|
-
traceGeom = (0, import_booleans5.intersect)(this.boardClipGeom, traceGeom);
|
|
32181
|
-
}
|
|
32182
|
-
traceGeom = (0, import_colors3.colorize)(tracesMaterialColor, traceGeom);
|
|
32183
|
-
this.traceGeoms.push(traceGeom);
|
|
32184
|
-
}
|
|
32185
|
-
currentSegmentPoints = [];
|
|
32186
|
-
currentLayer = null;
|
|
32187
|
-
};
|
|
32188
|
-
for (let i = 0; i < mixedRoute.length; i++) {
|
|
32189
|
-
const point2 = mixedRoute[i];
|
|
32190
|
-
if (point2.route_type === "wire") {
|
|
32191
|
-
if (currentLayer === null) {
|
|
32192
|
-
currentLayer = point2.layer;
|
|
32193
|
-
currentWidth = point2.width;
|
|
32194
|
-
currentSegmentPoints.push([point2.x, point2.y]);
|
|
32195
|
-
} else if (point2.layer === currentLayer) {
|
|
32196
|
-
currentSegmentPoints.push([point2.x, point2.y]);
|
|
32197
|
-
} else {
|
|
32198
|
-
currentSegmentPoints.push([point2.x, point2.y]);
|
|
32199
|
-
finishSegment();
|
|
32200
|
-
currentLayer = point2.layer;
|
|
32201
|
-
currentWidth = point2.width;
|
|
32202
|
-
const prevPoint = mixedRoute[i - 1];
|
|
32203
|
-
if (prevPoint) {
|
|
32204
|
-
currentSegmentPoints.push([point2.x, point2.y]);
|
|
32205
|
-
} else {
|
|
32206
|
-
currentSegmentPoints.push([point2.x, point2.y]);
|
|
32207
|
-
}
|
|
32208
|
-
}
|
|
32209
|
-
} else if (point2.route_type === "via") {
|
|
32210
|
-
currentSegmentPoints.push([point2.x, point2.y]);
|
|
32211
|
-
finishSegment();
|
|
32212
|
-
const nextPoint = mixedRoute[i + 1];
|
|
32213
|
-
if (nextPoint && nextPoint.route_type === "wire") {
|
|
32214
|
-
currentLayer = nextPoint.layer;
|
|
32215
|
-
currentWidth = nextPoint.width;
|
|
32216
|
-
currentSegmentPoints.push([point2.x, point2.y]);
|
|
32217
|
-
}
|
|
32218
|
-
}
|
|
32219
|
-
}
|
|
32220
|
-
finishSegment();
|
|
32221
|
-
}
|
|
32222
32126
|
processVia(via) {
|
|
32223
32127
|
if (!this.boardGeom) return;
|
|
32224
32128
|
if (typeof via.outer_diameter === "number" && typeof via.hole_diameter === "number") {
|
|
@@ -32257,7 +32161,6 @@ var BoardGeomBuilder = class {
|
|
|
32257
32161
|
this.boardGeom,
|
|
32258
32162
|
...this.platedHoleGeoms,
|
|
32259
32163
|
...this.padGeoms,
|
|
32260
|
-
...this.traceGeoms,
|
|
32261
32164
|
...this.viaGeoms,
|
|
32262
32165
|
...this.copperPourGeoms
|
|
32263
32166
|
];
|
|
@@ -34256,7 +34159,8 @@ function createPanelOutlineTextureForLayer({
|
|
|
34256
34159
|
// src/three-components/JscadBoardTextures.tsx
|
|
34257
34160
|
function JscadBoardTextures({
|
|
34258
34161
|
circuitJson,
|
|
34259
|
-
pcbThickness
|
|
34162
|
+
pcbThickness,
|
|
34163
|
+
isFaux = false
|
|
34260
34164
|
}) {
|
|
34261
34165
|
const { rootObject } = useThree();
|
|
34262
34166
|
const { visibility } = useLayerVisibility();
|
|
@@ -34381,7 +34285,8 @@ function JscadBoardTextures({
|
|
|
34381
34285
|
depthWrite,
|
|
34382
34286
|
polygonOffset: usePolygonOffset,
|
|
34383
34287
|
polygonOffsetFactor: usePolygonOffset ? -1 : 0,
|
|
34384
|
-
polygonOffsetUnits: usePolygonOffset ? -1 : 0
|
|
34288
|
+
polygonOffsetUnits: usePolygonOffset ? -1 : 0,
|
|
34289
|
+
opacity: isFaux ? FAUX_BOARD_OPACITY : 1
|
|
34385
34290
|
});
|
|
34386
34291
|
const mesh = new THREE24.Mesh(planeGeom, material);
|
|
34387
34292
|
mesh.position.set(
|
|
@@ -34729,7 +34634,8 @@ var CadViewerJscad = forwardRef3(
|
|
|
34729
34634
|
JscadBoardTextures,
|
|
34730
34635
|
{
|
|
34731
34636
|
circuitJson: internalCircuitJson,
|
|
34732
|
-
pcbThickness
|
|
34637
|
+
pcbThickness,
|
|
34638
|
+
isFaux: isFauxBoard
|
|
34733
34639
|
}
|
|
34734
34640
|
),
|
|
34735
34641
|
cad_components.map((cad_component2) => /* @__PURE__ */ jsx16(
|
|
@@ -36037,7 +35943,8 @@ function createTexturePlane(config, boardData) {
|
|
|
36037
35943
|
isBottomLayer,
|
|
36038
35944
|
textureType,
|
|
36039
35945
|
usePolygonOffset = false,
|
|
36040
|
-
renderOrder = 0
|
|
35946
|
+
renderOrder = 0,
|
|
35947
|
+
isFaux = false
|
|
36041
35948
|
} = config;
|
|
36042
35949
|
if (!texture) return null;
|
|
36043
35950
|
const boardOutlineBounds = calculateOutlineBounds(boardData);
|
|
@@ -36053,7 +35960,8 @@ function createTexturePlane(config, boardData) {
|
|
|
36053
35960
|
polygonOffset: usePolygonOffset,
|
|
36054
35961
|
polygonOffsetFactor: usePolygonOffset ? -4 : 0,
|
|
36055
35962
|
// Increased for better z-fighting prevention
|
|
36056
|
-
polygonOffsetUnits: usePolygonOffset ? -4 : 0
|
|
35963
|
+
polygonOffsetUnits: usePolygonOffset ? -4 : 0,
|
|
35964
|
+
opacity: isFaux ? FAUX_BOARD_OPACITY : 1
|
|
36057
35965
|
});
|
|
36058
35966
|
const mesh = new THREE30.Mesh(planeGeom, material);
|
|
36059
35967
|
mesh.position.set(
|
|
@@ -36068,7 +35976,7 @@ function createTexturePlane(config, boardData) {
|
|
|
36068
35976
|
mesh.renderOrder = renderOrder;
|
|
36069
35977
|
return mesh;
|
|
36070
35978
|
}
|
|
36071
|
-
function createTextureMeshes(textures, boardData, pcbThickness) {
|
|
35979
|
+
function createTextureMeshes(textures, boardData, pcbThickness, isFaux = false) {
|
|
36072
35980
|
const meshes = [];
|
|
36073
35981
|
if (!textures || !boardData || pcbThickness === null) return meshes;
|
|
36074
35982
|
const topTraceMesh = createTexturePlane(
|
|
@@ -36079,8 +35987,9 @@ function createTextureMeshes(textures, boardData, pcbThickness) {
|
|
|
36079
35987
|
isBottomLayer: false,
|
|
36080
35988
|
textureType: "trace",
|
|
36081
35989
|
usePolygonOffset: false,
|
|
36082
|
-
renderOrder: 2
|
|
35990
|
+
renderOrder: 2,
|
|
36083
35991
|
// Render after soldermask
|
|
35992
|
+
isFaux
|
|
36084
35993
|
},
|
|
36085
35994
|
boardData
|
|
36086
35995
|
);
|
|
@@ -36092,8 +36001,9 @@ function createTextureMeshes(textures, boardData, pcbThickness) {
|
|
|
36092
36001
|
isBottomLayer: false,
|
|
36093
36002
|
textureType: "trace-with-mask",
|
|
36094
36003
|
usePolygonOffset: false,
|
|
36095
|
-
renderOrder: 2
|
|
36004
|
+
renderOrder: 2,
|
|
36096
36005
|
// Render after soldermask
|
|
36006
|
+
isFaux
|
|
36097
36007
|
},
|
|
36098
36008
|
boardData
|
|
36099
36009
|
);
|
|
@@ -36106,8 +36016,9 @@ function createTextureMeshes(textures, boardData, pcbThickness) {
|
|
|
36106
36016
|
isBottomLayer: false,
|
|
36107
36017
|
textureType: "silkscreen",
|
|
36108
36018
|
usePolygonOffset: false,
|
|
36109
|
-
renderOrder: 3
|
|
36019
|
+
renderOrder: 3,
|
|
36110
36020
|
// Render after traces
|
|
36021
|
+
isFaux
|
|
36111
36022
|
},
|
|
36112
36023
|
boardData
|
|
36113
36024
|
);
|
|
@@ -36120,8 +36031,9 @@ function createTextureMeshes(textures, boardData, pcbThickness) {
|
|
|
36120
36031
|
isBottomLayer: true,
|
|
36121
36032
|
textureType: "trace",
|
|
36122
36033
|
usePolygonOffset: false,
|
|
36123
|
-
renderOrder: 2
|
|
36034
|
+
renderOrder: 2,
|
|
36124
36035
|
// Render after soldermask
|
|
36036
|
+
isFaux
|
|
36125
36037
|
},
|
|
36126
36038
|
boardData
|
|
36127
36039
|
);
|
|
@@ -36133,8 +36045,9 @@ function createTextureMeshes(textures, boardData, pcbThickness) {
|
|
|
36133
36045
|
isBottomLayer: true,
|
|
36134
36046
|
textureType: "trace-with-mask",
|
|
36135
36047
|
usePolygonOffset: false,
|
|
36136
|
-
renderOrder: 2
|
|
36048
|
+
renderOrder: 2,
|
|
36137
36049
|
// Render after soldermask
|
|
36050
|
+
isFaux
|
|
36138
36051
|
},
|
|
36139
36052
|
boardData
|
|
36140
36053
|
);
|
|
@@ -36146,8 +36059,9 @@ function createTextureMeshes(textures, boardData, pcbThickness) {
|
|
|
36146
36059
|
isBottomLayer: true,
|
|
36147
36060
|
textureType: "silkscreen",
|
|
36148
36061
|
usePolygonOffset: false,
|
|
36149
|
-
renderOrder: 3
|
|
36062
|
+
renderOrder: 3,
|
|
36150
36063
|
// Render after traces
|
|
36064
|
+
isFaux
|
|
36151
36065
|
},
|
|
36152
36066
|
boardData
|
|
36153
36067
|
);
|
|
@@ -36161,8 +36075,9 @@ function createTextureMeshes(textures, boardData, pcbThickness) {
|
|
|
36161
36075
|
textureType: "soldermask",
|
|
36162
36076
|
usePolygonOffset: true,
|
|
36163
36077
|
// Enable polygon offset
|
|
36164
|
-
renderOrder: 1
|
|
36078
|
+
renderOrder: 1,
|
|
36165
36079
|
// Render after board (renderOrder)
|
|
36080
|
+
isFaux
|
|
36166
36081
|
},
|
|
36167
36082
|
boardData
|
|
36168
36083
|
);
|
|
@@ -36176,8 +36091,9 @@ function createTextureMeshes(textures, boardData, pcbThickness) {
|
|
|
36176
36091
|
textureType: "soldermask",
|
|
36177
36092
|
usePolygonOffset: true,
|
|
36178
36093
|
// Enable polygon offset
|
|
36179
|
-
renderOrder: 1
|
|
36094
|
+
renderOrder: 1,
|
|
36180
36095
|
// Render after board (renderOrder)
|
|
36096
|
+
isFaux
|
|
36181
36097
|
},
|
|
36182
36098
|
boardData
|
|
36183
36099
|
);
|
|
@@ -36189,8 +36105,9 @@ function createTextureMeshes(textures, boardData, pcbThickness) {
|
|
|
36189
36105
|
isBottomLayer: false,
|
|
36190
36106
|
textureType: "copper-text",
|
|
36191
36107
|
usePolygonOffset: false,
|
|
36192
|
-
renderOrder: 2
|
|
36108
|
+
renderOrder: 2,
|
|
36193
36109
|
// Render after soldermask
|
|
36110
|
+
isFaux
|
|
36194
36111
|
},
|
|
36195
36112
|
boardData
|
|
36196
36113
|
);
|
|
@@ -36202,8 +36119,9 @@ function createTextureMeshes(textures, boardData, pcbThickness) {
|
|
|
36202
36119
|
isBottomLayer: true,
|
|
36203
36120
|
textureType: "copper-text",
|
|
36204
36121
|
usePolygonOffset: false,
|
|
36205
|
-
renderOrder: 2
|
|
36122
|
+
renderOrder: 2,
|
|
36206
36123
|
// Render after soldermask
|
|
36124
|
+
isFaux
|
|
36207
36125
|
},
|
|
36208
36126
|
boardData
|
|
36209
36127
|
);
|
|
@@ -36215,8 +36133,9 @@ function createTextureMeshes(textures, boardData, pcbThickness) {
|
|
|
36215
36133
|
isBottomLayer: false,
|
|
36216
36134
|
textureType: "copper",
|
|
36217
36135
|
usePolygonOffset: false,
|
|
36218
|
-
renderOrder: 2
|
|
36136
|
+
renderOrder: 2,
|
|
36219
36137
|
// Render after soldermask
|
|
36138
|
+
isFaux
|
|
36220
36139
|
},
|
|
36221
36140
|
boardData
|
|
36222
36141
|
);
|
|
@@ -36228,8 +36147,9 @@ function createTextureMeshes(textures, boardData, pcbThickness) {
|
|
|
36228
36147
|
isBottomLayer: true,
|
|
36229
36148
|
textureType: "copper",
|
|
36230
36149
|
usePolygonOffset: false,
|
|
36231
|
-
renderOrder: 2
|
|
36150
|
+
renderOrder: 2,
|
|
36232
36151
|
// Render after soldermask
|
|
36152
|
+
isFaux
|
|
36233
36153
|
},
|
|
36234
36154
|
boardData
|
|
36235
36155
|
);
|
|
@@ -36242,7 +36162,8 @@ function createTextureMeshes(textures, boardData, pcbThickness) {
|
|
|
36242
36162
|
isBottomLayer: false,
|
|
36243
36163
|
textureType: "panel-outlines",
|
|
36244
36164
|
usePolygonOffset: false,
|
|
36245
|
-
renderOrder: 4
|
|
36165
|
+
renderOrder: 4,
|
|
36166
|
+
isFaux
|
|
36246
36167
|
},
|
|
36247
36168
|
boardData
|
|
36248
36169
|
);
|
|
@@ -36255,7 +36176,8 @@ function createTextureMeshes(textures, boardData, pcbThickness) {
|
|
|
36255
36176
|
isBottomLayer: true,
|
|
36256
36177
|
textureType: "panel-outlines",
|
|
36257
36178
|
usePolygonOffset: false,
|
|
36258
|
-
renderOrder: 4
|
|
36179
|
+
renderOrder: 4,
|
|
36180
|
+
isFaux
|
|
36259
36181
|
},
|
|
36260
36182
|
boardData
|
|
36261
36183
|
);
|
|
@@ -36633,7 +36555,7 @@ var createBoardMaterial = ({
|
|
|
36633
36555
|
sheen: 0,
|
|
36634
36556
|
clearcoat: 0,
|
|
36635
36557
|
transparent: isFaux,
|
|
36636
|
-
opacity: isFaux ?
|
|
36558
|
+
opacity: isFaux ? FAUX_BOARD_OPACITY : 1,
|
|
36637
36559
|
flatShading: true
|
|
36638
36560
|
});
|
|
36639
36561
|
}
|
|
@@ -36644,7 +36566,7 @@ var createBoardMaterial = ({
|
|
|
36644
36566
|
metalness: 0.1,
|
|
36645
36567
|
roughness: 0.8,
|
|
36646
36568
|
transparent: true,
|
|
36647
|
-
opacity: isFaux ?
|
|
36569
|
+
opacity: isFaux ? FAUX_BOARD_OPACITY : 0.9
|
|
36648
36570
|
});
|
|
36649
36571
|
};
|
|
36650
36572
|
|
|
@@ -36852,12 +36774,13 @@ try {
|
|
|
36852
36774
|
pcbThickness,
|
|
36853
36775
|
error: builderError,
|
|
36854
36776
|
isLoading: builderIsLoading,
|
|
36855
|
-
boardData
|
|
36777
|
+
boardData,
|
|
36778
|
+
isFauxBoard
|
|
36856
36779
|
} = useManifoldBoardBuilder(manifoldJSModule, circuitJson);
|
|
36857
36780
|
const geometryMeshes = useMemo22(() => createGeometryMeshes(geoms), [geoms]);
|
|
36858
36781
|
const textureMeshes = useMemo22(
|
|
36859
|
-
() => createTextureMeshes(textures, boardData, pcbThickness),
|
|
36860
|
-
[textures, boardData, pcbThickness]
|
|
36782
|
+
() => createTextureMeshes(textures, boardData, pcbThickness, isFauxBoard),
|
|
36783
|
+
[textures, boardData, pcbThickness, isFauxBoard]
|
|
36861
36784
|
);
|
|
36862
36785
|
const cadComponents = useMemo22(
|
|
36863
36786
|
() => su19(circuitJson).cad_component.list(),
|