@tscircuit/3d-viewer 0.0.586 → 0.0.588

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.
Files changed (2) hide show
  1. package/dist/index.js +49 -27
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -32710,7 +32710,7 @@ import * as THREE23 from "three";
32710
32710
  // package.json
32711
32711
  var package_default = {
32712
32712
  name: "@tscircuit/3d-viewer",
32713
- version: "0.0.585",
32713
+ version: "0.0.587",
32714
32714
  main: "./dist/index.js",
32715
32715
  module: "./dist/index.js",
32716
32716
  type: "module",
@@ -32740,7 +32740,7 @@ var package_default = {
32740
32740
  "@jscad/regl-renderer": "^2.6.12",
32741
32741
  "@jscad/stl-serializer": "^2.1.20",
32742
32742
  "circuit-json": "^0.0.465",
32743
- "circuit-to-canvas": "^0.0.118",
32743
+ "circuit-to-canvas": "^0.0.119",
32744
32744
  "react-hot-toast": "^2.6.0",
32745
32745
  three: "^0.165.0",
32746
32746
  "three-stdlib": "^2.36.0",
@@ -33725,6 +33725,7 @@ var REFERENCE_OBJECT_SPECS = {
33725
33725
  }
33726
33726
  };
33727
33727
  var REFERENCE_OBJECT_OPTIONS = Object.values(REFERENCE_OBJECT_SPECS);
33728
+ var REFERENCE_OBJECT_MENU_OPTIONS = [{ type: null, label: "None" }, ...REFERENCE_OBJECT_OPTIONS];
33728
33729
  var toggleReferenceObject = (current, selected) => current === selected ? null : selected;
33729
33730
  var safeDimension = (dimension) => Number.isFinite(dimension) ? Math.max(dimension ?? 0, 0) : 0;
33730
33731
  var safeCoordinate = (coordinate) => Number.isFinite(coordinate) ? coordinate ?? 0 : 0;
@@ -37223,6 +37224,7 @@ var drawSilkscreenLayer = ({
37223
37224
  layer,
37224
37225
  bounds,
37225
37226
  elements,
37227
+ apertureElements,
37226
37228
  silkscreenColor
37227
37229
  }) => {
37228
37230
  const renderLayer = layer === "top" ? "top_silkscreen" : "bottom_silkscreen";
@@ -37273,8 +37275,9 @@ var drawSilkscreenLayer = ({
37273
37275
  }
37274
37276
  });
37275
37277
  setDrawerBounds5(drawer, bounds);
37276
- drawer.drawElements(elements, {
37277
- layers: [renderLayer]
37278
+ drawer.drawElements([...elements, ...apertureElements], {
37279
+ layers: [renderLayer],
37280
+ clearDrillHoles: true
37278
37281
  });
37279
37282
  };
37280
37283
 
@@ -37284,17 +37287,31 @@ var isSilkscreenElement = (element, layer) => {
37284
37287
  const elementType = element.type;
37285
37288
  return elementType.startsWith("pcb_silkscreen_");
37286
37289
  };
37290
+ var isOpenSurfaceAperture = (element, soldermaskVisible) => {
37291
+ if (element.type === "pcb_cutout") return true;
37292
+ if (element.type === "pcb_via") {
37293
+ return !soldermaskVisible || element.is_tented !== true;
37294
+ }
37295
+ if (element.type === "pcb_hole" || element.type === "pcb_plated_hole") {
37296
+ return !soldermaskVisible || element.is_covered_with_solder_mask !== true;
37297
+ }
37298
+ return false;
37299
+ };
37287
37300
  function createSilkscreenTextureForLayer({
37288
37301
  layer,
37289
37302
  circuitJson,
37290
37303
  boardData,
37291
37304
  traceTextureResolution = TRACE_TEXTURE_RESOLUTION,
37292
- silkscreenColor = "rgb(255,255,255)"
37305
+ silkscreenColor = "rgb(255,255,255)",
37306
+ soldermaskVisible = true
37293
37307
  }) {
37294
37308
  const elements = circuitJson.filter(
37295
37309
  (element) => isSilkscreenElement(element, layer)
37296
37310
  );
37297
37311
  if (elements.length === 0) return null;
37312
+ const apertureElements = circuitJson.filter(
37313
+ (element) => isOpenSurfaceAperture(element, soldermaskVisible)
37314
+ );
37298
37315
  const bounds = getSoldermaskRenderBounds(circuitJson, boardData);
37299
37316
  const canvasWidth = Math.floor(bounds.width * traceTextureResolution);
37300
37317
  const canvasHeight = Math.floor(bounds.height * traceTextureResolution);
@@ -37313,6 +37330,7 @@ function createSilkscreenTextureForLayer({
37313
37330
  layer,
37314
37331
  bounds,
37315
37332
  elements,
37333
+ apertureElements,
37316
37334
  silkscreenColor
37317
37335
  });
37318
37336
  const texture = new THREE33.CanvasTexture(canvas);
@@ -37766,7 +37784,8 @@ function createCombinedBoardTextures({
37766
37784
  circuitJson,
37767
37785
  boardData,
37768
37786
  silkscreenColor,
37769
- traceTextureResolution
37787
+ traceTextureResolution,
37788
+ soldermaskVisible: showMask
37770
37789
  }) : null;
37771
37790
  const fabricationNoteTexture = showSilkscreen ? createFabricationNoteTextureForLayer({
37772
37791
  layer,
@@ -47321,28 +47340,31 @@ var ContextMenu = ({
47321
47340
  style: { ...contentStyles2, marginLeft: -2 },
47322
47341
  collisionPadding: 10,
47323
47342
  avoidCollisions: true,
47324
- children: REFERENCE_OBJECT_OPTIONS.map((option) => /* @__PURE__ */ jsxs8(
47325
- Item22,
47326
- {
47327
- style: {
47328
- ...itemStyles2,
47329
- backgroundColor: hoveredItem === option.type ? "#404040" : "transparent"
47330
- },
47331
- onSelect: (event) => event.preventDefault(),
47332
- onPointerDown: (event) => {
47333
- event.preventDefault();
47334
- onReferenceObjectSelect(option.type);
47343
+ children: REFERENCE_OBJECT_MENU_OPTIONS.map((option) => {
47344
+ const optionKey = option.type ?? "none";
47345
+ return /* @__PURE__ */ jsxs8(
47346
+ Item22,
47347
+ {
47348
+ style: {
47349
+ ...itemStyles2,
47350
+ backgroundColor: hoveredItem === optionKey ? "#404040" : "transparent"
47351
+ },
47352
+ onSelect: (event) => event.preventDefault(),
47353
+ onPointerDown: (event) => {
47354
+ event.preventDefault();
47355
+ onReferenceObjectSelect(option.type);
47356
+ },
47357
+ onMouseEnter: () => setHoveredItem(optionKey),
47358
+ onMouseLeave: () => setHoveredItem(null),
47359
+ onTouchStart: () => setHoveredItem(optionKey),
47360
+ children: [
47361
+ /* @__PURE__ */ jsx34("span", { style: iconContainerStyles2, children: referenceObject === option.type && /* @__PURE__ */ jsx34(DotIcon, {}) }),
47362
+ /* @__PURE__ */ jsx34("span", { style: { display: "flex", alignItems: "center" }, children: option.label })
47363
+ ]
47335
47364
  },
47336
- onMouseEnter: () => setHoveredItem(option.type),
47337
- onMouseLeave: () => setHoveredItem(null),
47338
- onTouchStart: () => setHoveredItem(option.type),
47339
- children: [
47340
- /* @__PURE__ */ jsx34("span", { style: iconContainerStyles2, children: referenceObject === option.type && /* @__PURE__ */ jsx34(DotIcon, {}) }),
47341
- /* @__PURE__ */ jsx34("span", { style: { display: "flex", alignItems: "center" }, children: option.label })
47342
- ]
47343
- },
47344
- option.type
47345
- ))
47365
+ optionKey
47366
+ );
47367
+ })
47346
47368
  }
47347
47369
  ) })
47348
47370
  ] }),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tscircuit/3d-viewer",
3
- "version": "0.0.586",
3
+ "version": "0.0.588",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.js",
6
6
  "type": "module",
@@ -30,7 +30,7 @@
30
30
  "@jscad/regl-renderer": "^2.6.12",
31
31
  "@jscad/stl-serializer": "^2.1.20",
32
32
  "circuit-json": "^0.0.465",
33
- "circuit-to-canvas": "^0.0.118",
33
+ "circuit-to-canvas": "^0.0.119",
34
34
  "react-hot-toast": "^2.6.0",
35
35
  "three": "^0.165.0",
36
36
  "three-stdlib": "^2.36.0",