brepjs 12.11.2 → 12.12.0

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/brepjs.cjs CHANGED
@@ -21,7 +21,7 @@ const require_measureFns = require("./measureFns-Gmok6h3t.cjs");
21
21
  const require_cornerFinder = require("./cornerFinder-D1iNCBMe.cjs");
22
22
  const require_extrudeFns = require("./extrudeFns-C2Pmhe-R.cjs");
23
23
  const require_blueprintFns = require("./blueprintFns-CxfjtauU.cjs");
24
- const require_importFns = require("./importFns-DGRxcYhI.cjs");
24
+ const require_importFns = require("./importFns-CyPkUA_N.cjs");
25
25
  const require_workerHandler = require("./workerHandler-D9sQ2f5u.cjs");
26
26
  //#region src/core/kernelCall.ts
27
27
  var errorFactories = {
@@ -1825,9 +1825,86 @@ function findTags(xml, tagName) {
1825
1825
  }
1826
1826
  return tags;
1827
1827
  }
1828
+ /**
1829
+ * Extract a block `<tagName ...>...</tagName>` from xml.
1830
+ * Returns the full block string including open/close tags, or null if not found.
1831
+ */
1832
+ function findTagBlock(xml, tagName) {
1833
+ const open = xml.indexOf(`<${tagName}`);
1834
+ if (open < 0) return null;
1835
+ const close = xml.indexOf(`</${tagName}>`, open);
1836
+ if (close < 0) return null;
1837
+ return xml.slice(open, close + tagName.length + 3);
1838
+ }
1839
+ /** Parse a hex color string like #RRGGBB or #RRGGBBAA into [r,g,b,a] floats. */
1840
+ function parseHexColor(hex) {
1841
+ const h = hex.startsWith("#") ? hex.slice(1) : hex;
1842
+ return [
1843
+ parseInt(h.slice(0, 2), 16) / 255,
1844
+ parseInt(h.slice(2, 4), 16) / 255,
1845
+ parseInt(h.slice(4, 6), 16) / 255,
1846
+ h.length >= 8 ? parseInt(h.slice(6, 8), 16) / 255 : 1
1847
+ ];
1848
+ }
1849
+ /**
1850
+ * Build a combined resource map from colorgroup and basematerials blocks.
1851
+ * Returns: Map<resourceId, Array<[r,g,b,a]>>
1852
+ */
1853
+ function parseResourceColors(xml) {
1854
+ const resources = /* @__PURE__ */ new Map();
1855
+ let searchPos = 0;
1856
+ while (searchPos < xml.length) {
1857
+ const cgStart = xml.indexOf("<colorgroup", searchPos);
1858
+ if (cgStart < 0) break;
1859
+ const cgClose = xml.indexOf("</colorgroup>", cgStart);
1860
+ if (cgClose < 0) break;
1861
+ const cgBlock = xml.slice(cgStart, cgClose + 13);
1862
+ searchPos = cgClose + 13;
1863
+ const cgTagEnd = xml.indexOf(">", cgStart);
1864
+ if (cgTagEnd < 0) continue;
1865
+ const idStr = parseTagAttrs(xml.slice(cgStart, cgTagEnd + 1))["id"];
1866
+ if (idStr === void 0) continue;
1867
+ const resourceId = parseInt(idStr, 10);
1868
+ const colorArr = [];
1869
+ for (const colorTag of findTags(cgBlock, "color")) {
1870
+ const colorVal = parseTagAttrs(colorTag)["color"];
1871
+ if (colorVal !== void 0) colorArr.push(parseHexColor(colorVal));
1872
+ }
1873
+ resources.set(resourceId, colorArr);
1874
+ }
1875
+ let bmSearchPos = 0;
1876
+ while (bmSearchPos < xml.length) {
1877
+ const bmStart = xml.indexOf("<basematerials", bmSearchPos);
1878
+ if (bmStart < 0) break;
1879
+ const bmClose = xml.indexOf("</basematerials>", bmStart);
1880
+ if (bmClose < 0) break;
1881
+ const bmBlock = xml.slice(bmStart, bmClose + 16);
1882
+ bmSearchPos = bmClose + 16;
1883
+ const bmTagEnd = xml.indexOf(">", bmStart);
1884
+ if (bmTagEnd < 0) continue;
1885
+ const idStr = parseTagAttrs(xml.slice(bmStart, bmTagEnd + 1))["id"];
1886
+ if (idStr === void 0) continue;
1887
+ const resourceId = parseInt(idStr, 10);
1888
+ const colorArr = [];
1889
+ for (const baseTag of findTags(bmBlock, "base")) {
1890
+ const displayColor = parseTagAttrs(baseTag)["displaycolor"];
1891
+ if (displayColor !== void 0) colorArr.push(parseHexColor(displayColor));
1892
+ else colorArr.push([
1893
+ 0,
1894
+ 0,
1895
+ 0,
1896
+ 1
1897
+ ]);
1898
+ }
1899
+ resources.set(resourceId, colorArr);
1900
+ }
1901
+ return resources;
1902
+ }
1828
1903
  function parseModelXml(xml) {
1829
1904
  const vertices = [];
1830
1905
  const triangles = [];
1906
+ const triangleColors = [];
1907
+ const resourceColors = parseResourceColors(xml);
1831
1908
  for (const tag of findTags(xml, "vertex")) {
1832
1909
  const a = parseTagAttrs(tag);
1833
1910
  if (a["x"] !== void 0 && a["y"] !== void 0 && a["z"] !== void 0) vertices.push([
@@ -1836,19 +1913,60 @@ function parseModelXml(xml) {
1836
1913
  parseFloat(a["z"])
1837
1914
  ]);
1838
1915
  }
1916
+ let objectDefaultPid = null;
1917
+ let objectDefaultPindex = null;
1918
+ const objectBlock = findTagBlock(xml, "object");
1919
+ if (objectBlock !== null) {
1920
+ const objTagEnd = objectBlock.indexOf(">");
1921
+ if (objTagEnd >= 0) {
1922
+ const objAttrs = parseTagAttrs(objectBlock.slice(0, objTagEnd + 1));
1923
+ if (objAttrs["pid"] !== void 0) objectDefaultPid = parseInt(objAttrs["pid"], 10);
1924
+ if (objAttrs["pindex"] !== void 0) objectDefaultPindex = parseInt(objAttrs["pindex"], 10);
1925
+ }
1926
+ }
1839
1927
  for (const tag of findTags(xml, "triangle")) {
1840
1928
  const a = parseTagAttrs(tag);
1841
- if (a["v1"] !== void 0 && a["v2"] !== void 0 && a["v3"] !== void 0) triangles.push([
1842
- parseInt(a["v1"], 10),
1843
- parseInt(a["v2"], 10),
1844
- parseInt(a["v3"], 10)
1845
- ]);
1929
+ if (a["v1"] !== void 0 && a["v2"] !== void 0 && a["v3"] !== void 0) {
1930
+ triangles.push([
1931
+ parseInt(a["v1"], 10),
1932
+ parseInt(a["v2"], 10),
1933
+ parseInt(a["v3"], 10)
1934
+ ]);
1935
+ let color = null;
1936
+ const pidStr = a["pid"] ?? (objectDefaultPid !== null ? String(objectDefaultPid) : void 0);
1937
+ const p1Str = a["p1"] ?? (objectDefaultPindex !== null ? String(objectDefaultPindex) : void 0);
1938
+ if (pidStr !== void 0 && p1Str !== void 0) {
1939
+ const pid = parseInt(pidStr, 10);
1940
+ const p1 = parseInt(p1Str, 10);
1941
+ const palette = resourceColors.get(pid);
1942
+ if (palette !== void 0 && p1 < palette.length) color = palette[p1] ?? null;
1943
+ }
1944
+ triangleColors.push(color);
1945
+ }
1846
1946
  }
1847
1947
  return {
1848
1948
  vertices,
1849
- triangles
1949
+ triangles,
1950
+ triangleColors
1850
1951
  };
1851
1952
  }
1953
+ /** Find the most common non-null color across all triangle colors. */
1954
+ function findDominantColor(triangleColors) {
1955
+ const counts = /* @__PURE__ */ new Map();
1956
+ for (const c of triangleColors) {
1957
+ if (c === null) continue;
1958
+ const key = c.join(",");
1959
+ const entry = counts.get(key);
1960
+ if (entry !== void 0) entry.count++;
1961
+ else counts.set(key, {
1962
+ count: 1,
1963
+ color: c
1964
+ });
1965
+ }
1966
+ let best = null;
1967
+ for (const entry of counts.values()) if (best === null || entry.count > best.count) best = entry;
1968
+ return best !== null ? best.color : null;
1969
+ }
1852
1970
  function buildSolidFromMesh(mesh) {
1853
1971
  const kernel = require_shapeTypes.getKernel();
1854
1972
  const points = mesh.vertices.map(([x, y, z]) => ({
@@ -1897,7 +2015,12 @@ async function importThreeMF(blob) {
1897
2015
  if (!modelData) return require_errors.err(require_errors.ioError(require_errors.BrepErrorCode.THREEMF_IMPORT_FAILED, "3MF archive does not contain 3D/3dmodel.model (or uses unsupported compression)"));
1898
2016
  const parsed = parseModelXml(new TextDecoder().decode(modelData));
1899
2017
  if (parsed.vertices.length === 0 || parsed.triangles.length === 0) return require_errors.err(require_errors.ioError(require_errors.BrepErrorCode.THREEMF_IMPORT_FAILED, "3MF model contains no valid geometry"));
1900
- return buildSolidFromMesh(parsed);
2018
+ const solid = buildSolidFromMesh(parsed);
2019
+ if (solid.ok) {
2020
+ const dominantColor = findDominantColor(parsed.triangleColors);
2021
+ if (dominantColor !== null) require_shapeFns.colorShape(solid.value, dominantColor);
2022
+ }
2023
+ return solid;
1901
2024
  } catch (e) {
1902
2025
  const msg = e instanceof Error ? e.message : String(e);
1903
2026
  return require_errors.err(require_errors.ioError(require_errors.BrepErrorCode.THREEMF_IMPORT_FAILED, `3MF import failed: ${msg}`, e));
package/dist/brepjs.js CHANGED
@@ -20,7 +20,7 @@ import { a as measureDistance, c as measureLinearProps, d as measureVolumeProps,
20
20
  import { t as cornerFinder } from "./cornerFinder-Bhpxe2GK.js";
21
21
  import { a as multiSectionSweep, c as twistExtrude, i as guidedSweep, n as revolve$1, o as supportExtrude, r as complexExtrude, s as sweep, t as extrude$1 } from "./extrudeFns-GVLc2cLp.js";
22
22
  import { S as reverseCurve, _ as curve2dIsOnCurve, a as isInside2D, b as curve2dSplitAt, c as scale2D, d as stretch2D, f as toSVGPathD, g as curve2dFirstPoint, h as curve2dDistanceFrom, i as getOrientation2D, l as sketchOnFace2D, m as curve2dBoundingBox, n as createCompoundBlueprint, o as mirror2D, p as translate2D, r as getBounds2D, s as rotate2D, t as createBlueprint, u as sketchOnPlane2D, v as curve2dLastPoint, x as curve2dTangentAt, y as curve2dParameter } from "./blueprintFns-bpyUa_XY.js";
23
- import { a as importSVGPathD, c as exportDXF, d as exportOBJ, i as importSVG, l as exportGlb, n as importSTEP, o as exportThreeMF, r as importSTL, s as blueprintToDXF, t as importIGES, u as exportGltf } from "./importFns-DftUsaqx.js";
23
+ import { a as importSVGPathD, c as exportDXF, d as exportOBJ, i as importSVG, l as exportGlb, n as importSTEP, o as exportThreeMF, r as importSTL, s as blueprintToDXF, t as importIGES, u as exportGltf } from "./importFns-beNdL_tU.js";
24
24
  import { a as createTaskQueue, c as isEmpty$1, d as isDisposeRequest, f as isErrorResponse, h as isSuccessResponse, i as createWorkerClient, l as pendingCount, m as isOperationRequest, n as createWorkerHandler, o as dequeueTask, p as isInitRequest, r as registerHandler, s as enqueueTask, t as createOperationRegistry, u as rejectAll } from "./workerHandler-Cv_6jKDO.js";
25
25
  //#region src/core/kernelCall.ts
26
26
  var errorFactories = {
@@ -1824,9 +1824,86 @@ function findTags(xml, tagName) {
1824
1824
  }
1825
1825
  return tags;
1826
1826
  }
1827
+ /**
1828
+ * Extract a block `<tagName ...>...</tagName>` from xml.
1829
+ * Returns the full block string including open/close tags, or null if not found.
1830
+ */
1831
+ function findTagBlock(xml, tagName) {
1832
+ const open = xml.indexOf(`<${tagName}`);
1833
+ if (open < 0) return null;
1834
+ const close = xml.indexOf(`</${tagName}>`, open);
1835
+ if (close < 0) return null;
1836
+ return xml.slice(open, close + tagName.length + 3);
1837
+ }
1838
+ /** Parse a hex color string like #RRGGBB or #RRGGBBAA into [r,g,b,a] floats. */
1839
+ function parseHexColor(hex) {
1840
+ const h = hex.startsWith("#") ? hex.slice(1) : hex;
1841
+ return [
1842
+ parseInt(h.slice(0, 2), 16) / 255,
1843
+ parseInt(h.slice(2, 4), 16) / 255,
1844
+ parseInt(h.slice(4, 6), 16) / 255,
1845
+ h.length >= 8 ? parseInt(h.slice(6, 8), 16) / 255 : 1
1846
+ ];
1847
+ }
1848
+ /**
1849
+ * Build a combined resource map from colorgroup and basematerials blocks.
1850
+ * Returns: Map<resourceId, Array<[r,g,b,a]>>
1851
+ */
1852
+ function parseResourceColors(xml) {
1853
+ const resources = /* @__PURE__ */ new Map();
1854
+ let searchPos = 0;
1855
+ while (searchPos < xml.length) {
1856
+ const cgStart = xml.indexOf("<colorgroup", searchPos);
1857
+ if (cgStart < 0) break;
1858
+ const cgClose = xml.indexOf("</colorgroup>", cgStart);
1859
+ if (cgClose < 0) break;
1860
+ const cgBlock = xml.slice(cgStart, cgClose + 13);
1861
+ searchPos = cgClose + 13;
1862
+ const cgTagEnd = xml.indexOf(">", cgStart);
1863
+ if (cgTagEnd < 0) continue;
1864
+ const idStr = parseTagAttrs(xml.slice(cgStart, cgTagEnd + 1))["id"];
1865
+ if (idStr === void 0) continue;
1866
+ const resourceId = parseInt(idStr, 10);
1867
+ const colorArr = [];
1868
+ for (const colorTag of findTags(cgBlock, "color")) {
1869
+ const colorVal = parseTagAttrs(colorTag)["color"];
1870
+ if (colorVal !== void 0) colorArr.push(parseHexColor(colorVal));
1871
+ }
1872
+ resources.set(resourceId, colorArr);
1873
+ }
1874
+ let bmSearchPos = 0;
1875
+ while (bmSearchPos < xml.length) {
1876
+ const bmStart = xml.indexOf("<basematerials", bmSearchPos);
1877
+ if (bmStart < 0) break;
1878
+ const bmClose = xml.indexOf("</basematerials>", bmStart);
1879
+ if (bmClose < 0) break;
1880
+ const bmBlock = xml.slice(bmStart, bmClose + 16);
1881
+ bmSearchPos = bmClose + 16;
1882
+ const bmTagEnd = xml.indexOf(">", bmStart);
1883
+ if (bmTagEnd < 0) continue;
1884
+ const idStr = parseTagAttrs(xml.slice(bmStart, bmTagEnd + 1))["id"];
1885
+ if (idStr === void 0) continue;
1886
+ const resourceId = parseInt(idStr, 10);
1887
+ const colorArr = [];
1888
+ for (const baseTag of findTags(bmBlock, "base")) {
1889
+ const displayColor = parseTagAttrs(baseTag)["displaycolor"];
1890
+ if (displayColor !== void 0) colorArr.push(parseHexColor(displayColor));
1891
+ else colorArr.push([
1892
+ 0,
1893
+ 0,
1894
+ 0,
1895
+ 1
1896
+ ]);
1897
+ }
1898
+ resources.set(resourceId, colorArr);
1899
+ }
1900
+ return resources;
1901
+ }
1827
1902
  function parseModelXml(xml) {
1828
1903
  const vertices = [];
1829
1904
  const triangles = [];
1905
+ const triangleColors = [];
1906
+ const resourceColors = parseResourceColors(xml);
1830
1907
  for (const tag of findTags(xml, "vertex")) {
1831
1908
  const a = parseTagAttrs(tag);
1832
1909
  if (a["x"] !== void 0 && a["y"] !== void 0 && a["z"] !== void 0) vertices.push([
@@ -1835,19 +1912,60 @@ function parseModelXml(xml) {
1835
1912
  parseFloat(a["z"])
1836
1913
  ]);
1837
1914
  }
1915
+ let objectDefaultPid = null;
1916
+ let objectDefaultPindex = null;
1917
+ const objectBlock = findTagBlock(xml, "object");
1918
+ if (objectBlock !== null) {
1919
+ const objTagEnd = objectBlock.indexOf(">");
1920
+ if (objTagEnd >= 0) {
1921
+ const objAttrs = parseTagAttrs(objectBlock.slice(0, objTagEnd + 1));
1922
+ if (objAttrs["pid"] !== void 0) objectDefaultPid = parseInt(objAttrs["pid"], 10);
1923
+ if (objAttrs["pindex"] !== void 0) objectDefaultPindex = parseInt(objAttrs["pindex"], 10);
1924
+ }
1925
+ }
1838
1926
  for (const tag of findTags(xml, "triangle")) {
1839
1927
  const a = parseTagAttrs(tag);
1840
- if (a["v1"] !== void 0 && a["v2"] !== void 0 && a["v3"] !== void 0) triangles.push([
1841
- parseInt(a["v1"], 10),
1842
- parseInt(a["v2"], 10),
1843
- parseInt(a["v3"], 10)
1844
- ]);
1928
+ if (a["v1"] !== void 0 && a["v2"] !== void 0 && a["v3"] !== void 0) {
1929
+ triangles.push([
1930
+ parseInt(a["v1"], 10),
1931
+ parseInt(a["v2"], 10),
1932
+ parseInt(a["v3"], 10)
1933
+ ]);
1934
+ let color = null;
1935
+ const pidStr = a["pid"] ?? (objectDefaultPid !== null ? String(objectDefaultPid) : void 0);
1936
+ const p1Str = a["p1"] ?? (objectDefaultPindex !== null ? String(objectDefaultPindex) : void 0);
1937
+ if (pidStr !== void 0 && p1Str !== void 0) {
1938
+ const pid = parseInt(pidStr, 10);
1939
+ const p1 = parseInt(p1Str, 10);
1940
+ const palette = resourceColors.get(pid);
1941
+ if (palette !== void 0 && p1 < palette.length) color = palette[p1] ?? null;
1942
+ }
1943
+ triangleColors.push(color);
1944
+ }
1845
1945
  }
1846
1946
  return {
1847
1947
  vertices,
1848
- triangles
1948
+ triangles,
1949
+ triangleColors
1849
1950
  };
1850
1951
  }
1952
+ /** Find the most common non-null color across all triangle colors. */
1953
+ function findDominantColor(triangleColors) {
1954
+ const counts = /* @__PURE__ */ new Map();
1955
+ for (const c of triangleColors) {
1956
+ if (c === null) continue;
1957
+ const key = c.join(",");
1958
+ const entry = counts.get(key);
1959
+ if (entry !== void 0) entry.count++;
1960
+ else counts.set(key, {
1961
+ count: 1,
1962
+ color: c
1963
+ });
1964
+ }
1965
+ let best = null;
1966
+ for (const entry of counts.values()) if (best === null || entry.count > best.count) best = entry;
1967
+ return best !== null ? best.color : null;
1968
+ }
1851
1969
  function buildSolidFromMesh(mesh) {
1852
1970
  const kernel = getKernel();
1853
1971
  const points = mesh.vertices.map(([x, y, z]) => ({
@@ -1896,7 +2014,12 @@ async function importThreeMF(blob) {
1896
2014
  if (!modelData) return err(ioError(BrepErrorCode.THREEMF_IMPORT_FAILED, "3MF archive does not contain 3D/3dmodel.model (or uses unsupported compression)"));
1897
2015
  const parsed = parseModelXml(new TextDecoder().decode(modelData));
1898
2016
  if (parsed.vertices.length === 0 || parsed.triangles.length === 0) return err(ioError(BrepErrorCode.THREEMF_IMPORT_FAILED, "3MF model contains no valid geometry"));
1899
- return buildSolidFromMesh(parsed);
2017
+ const solid = buildSolidFromMesh(parsed);
2018
+ if (solid.ok) {
2019
+ const dominantColor = findDominantColor(parsed.triangleColors);
2020
+ if (dominantColor !== null) colorShape(solid.value, dominantColor);
2021
+ }
2022
+ return solid;
1900
2023
  } catch (e) {
1901
2024
  const msg = e instanceof Error ? e.message : String(e);
1902
2025
  return err(ioError(BrepErrorCode.THREEMF_IMPORT_FAILED, `3MF import failed: ${msg}`, e));
@@ -695,7 +695,15 @@ function buildZip(entries) {
695
695
  view.setUint16(pos, 0, true);
696
696
  return buf;
697
697
  }
698
- function build3MFModel(mesh, name, unit) {
698
+ /** Escape XML special characters in attribute values. */
699
+ function escapeXmlAttr(s) {
700
+ return s.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("\"", "&quot;");
701
+ }
702
+ function colorToHex(rgba) {
703
+ const to8 = (v) => Math.round(Math.max(0, Math.min(1, v)) * 255).toString(16).padStart(2, "0").toUpperCase();
704
+ return `#${to8(rgba[0])}${to8(rgba[1])}${to8(rgba[2])}${to8(rgba[3])}`;
705
+ }
706
+ function build3MFModel(mesh, name, unit, colors, materials) {
699
707
  const vertices = [];
700
708
  for (let i = 0; i < mesh.vertices.length; i += 3) {
701
709
  const x = mesh.vertices[i] ?? 0;
@@ -703,17 +711,78 @@ function build3MFModel(mesh, name, unit) {
703
711
  const z = mesh.vertices[i + 2] ?? 0;
704
712
  vertices.push(` <vertex x="${x}" y="${y}" z="${z}" />`);
705
713
  }
714
+ const colorIndexByHex = /* @__PURE__ */ new Map();
715
+ const colorHexList = [];
716
+ if (colors !== void 0 && colors.size > 0) for (const rgba of colors.values()) {
717
+ const hex = colorToHex(rgba);
718
+ if (!colorIndexByHex.has(hex)) {
719
+ colorIndexByHex.set(hex, colorHexList.length);
720
+ colorHexList.push(hex);
721
+ }
722
+ }
723
+ const materialIndexByName = /* @__PURE__ */ new Map();
724
+ const materialList = [];
725
+ if (materials !== void 0 && materials.size > 0) {
726
+ for (const mat of materials.values()) if (!materialIndexByName.has(mat.name)) {
727
+ materialIndexByName.set(mat.name, materialList.length);
728
+ materialList.push(mat);
729
+ }
730
+ }
731
+ const triangleAttrs = /* @__PURE__ */ new Map();
732
+ for (const group of mesh.faceGroups) {
733
+ const triStart = group.start / 3;
734
+ const triCount = group.count / 3;
735
+ const faceId = group.faceId;
736
+ let attrs;
737
+ if (materials !== void 0) {
738
+ const mat = materials.get(faceId);
739
+ if (mat !== void 0) {
740
+ const matIdx = materialIndexByName.get(mat.name);
741
+ if (matIdx !== void 0) attrs = {
742
+ pid: 3,
743
+ p1: matIdx
744
+ };
745
+ }
746
+ }
747
+ if (attrs === void 0 && colors !== void 0) {
748
+ const rgba = colors.get(faceId);
749
+ if (rgba !== void 0) {
750
+ const hex = colorToHex(rgba);
751
+ const colorIdx = colorIndexByHex.get(hex);
752
+ if (colorIdx !== void 0) attrs = {
753
+ pid: 2,
754
+ p1: colorIdx
755
+ };
756
+ }
757
+ }
758
+ if (attrs !== void 0) for (let t = triStart; t < triStart + triCount; t++) triangleAttrs.set(t, attrs);
759
+ }
706
760
  const triangles = [];
707
761
  for (let i = 0; i < mesh.triangles.length; i += 3) {
762
+ const triIdx = i / 3;
708
763
  const v1 = mesh.triangles[i] ?? 0;
709
764
  const v2 = mesh.triangles[i + 1] ?? 0;
710
765
  const v3 = mesh.triangles[i + 2] ?? 0;
711
- triangles.push(` <triangle v1="${v1}" v2="${v2}" v3="${v3}" />`);
766
+ const attrs = triangleAttrs.get(triIdx);
767
+ if (attrs !== void 0) triangles.push(` <triangle v1="${v1}" v2="${v2}" v3="${v3}" pid="${attrs.pid}" p1="${attrs.p1}" />`);
768
+ else triangles.push(` <triangle v1="${v1}" v2="${v2}" v3="${v3}" />`);
769
+ }
770
+ const resourceBlocks = [];
771
+ if (colorHexList.length > 0) {
772
+ const colorItems = colorHexList.map((hex) => ` <color color="${hex}" />`).join("\n");
773
+ resourceBlocks.push(` <colorgroup id="2">\n${colorItems}\n </colorgroup>`);
774
+ }
775
+ if (materialList.length > 0) {
776
+ const matItems = materialList.map((mat) => {
777
+ const hexColor = mat.displayColor !== void 0 ? colorToHex(mat.displayColor) : "#FFFFFFFF";
778
+ return ` <base name="${escapeXmlAttr(mat.name)}" displaycolor="${hexColor}" />`;
779
+ }).join("\n");
780
+ resourceBlocks.push(` <basematerials id="3">\n${matItems}\n </basematerials>`);
712
781
  }
713
782
  return `<?xml version="1.0" encoding="UTF-8"?>
714
- <model unit="${unit}" xmlns="http://schemas.microsoft.com/3dmanufacturing/core/2015/02">
715
- <resources>
716
- <object id="1" name="${name}" type="model">
783
+ <model unit="${unit}" xmlns="http://schemas.microsoft.com/3dmanufacturing/core/2015/02"${materialList.length > 0 ? "\n xmlns:m=\"http://schemas.microsoft.com/3dmanufacturing/material/2015/02\"" : ""}>
784
+ <resources>${resourceBlocks.length > 0 ? "\n" + resourceBlocks.join("\n") : ""}
785
+ <object id="1" name="${escapeXmlAttr(name)}" type="model">
717
786
  <mesh>
718
787
  <vertices>
719
788
  ${vertices.join("\n")}
@@ -751,7 +820,7 @@ ${triangles.join("\n")}
751
820
  * ```
752
821
  */
753
822
  function exportThreeMF(mesh, options = {}) {
754
- const { name = "model", unit = "millimeter" } = options;
823
+ const { name = "model", unit = "millimeter", colors, materials } = options;
755
824
  const encoder = new TextEncoder();
756
825
  const contentTypes = `<?xml version="1.0" encoding="UTF-8"?>
757
826
  <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
@@ -762,7 +831,7 @@ function exportThreeMF(mesh, options = {}) {
762
831
  <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
763
832
  <Relationship Target="/3D/3dmodel.model" Id="rel0" Type="http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel" />
764
833
  </Relationships>`;
765
- const model = build3MFModel(mesh, name, unit);
834
+ const model = build3MFModel(mesh, name, unit, colors, materials);
766
835
  function entry(path, content) {
767
836
  const nameBytes = encoder.encode(path);
768
837
  const dataBytes = encoder.encode(content);
@@ -695,7 +695,15 @@ function buildZip(entries) {
695
695
  view.setUint16(pos, 0, true);
696
696
  return buf;
697
697
  }
698
- function build3MFModel(mesh, name, unit) {
698
+ /** Escape XML special characters in attribute values. */
699
+ function escapeXmlAttr(s) {
700
+ return s.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("\"", "&quot;");
701
+ }
702
+ function colorToHex(rgba) {
703
+ const to8 = (v) => Math.round(Math.max(0, Math.min(1, v)) * 255).toString(16).padStart(2, "0").toUpperCase();
704
+ return `#${to8(rgba[0])}${to8(rgba[1])}${to8(rgba[2])}${to8(rgba[3])}`;
705
+ }
706
+ function build3MFModel(mesh, name, unit, colors, materials) {
699
707
  const vertices = [];
700
708
  for (let i = 0; i < mesh.vertices.length; i += 3) {
701
709
  const x = mesh.vertices[i] ?? 0;
@@ -703,17 +711,78 @@ function build3MFModel(mesh, name, unit) {
703
711
  const z = mesh.vertices[i + 2] ?? 0;
704
712
  vertices.push(` <vertex x="${x}" y="${y}" z="${z}" />`);
705
713
  }
714
+ const colorIndexByHex = /* @__PURE__ */ new Map();
715
+ const colorHexList = [];
716
+ if (colors !== void 0 && colors.size > 0) for (const rgba of colors.values()) {
717
+ const hex = colorToHex(rgba);
718
+ if (!colorIndexByHex.has(hex)) {
719
+ colorIndexByHex.set(hex, colorHexList.length);
720
+ colorHexList.push(hex);
721
+ }
722
+ }
723
+ const materialIndexByName = /* @__PURE__ */ new Map();
724
+ const materialList = [];
725
+ if (materials !== void 0 && materials.size > 0) {
726
+ for (const mat of materials.values()) if (!materialIndexByName.has(mat.name)) {
727
+ materialIndexByName.set(mat.name, materialList.length);
728
+ materialList.push(mat);
729
+ }
730
+ }
731
+ const triangleAttrs = /* @__PURE__ */ new Map();
732
+ for (const group of mesh.faceGroups) {
733
+ const triStart = group.start / 3;
734
+ const triCount = group.count / 3;
735
+ const faceId = group.faceId;
736
+ let attrs;
737
+ if (materials !== void 0) {
738
+ const mat = materials.get(faceId);
739
+ if (mat !== void 0) {
740
+ const matIdx = materialIndexByName.get(mat.name);
741
+ if (matIdx !== void 0) attrs = {
742
+ pid: 3,
743
+ p1: matIdx
744
+ };
745
+ }
746
+ }
747
+ if (attrs === void 0 && colors !== void 0) {
748
+ const rgba = colors.get(faceId);
749
+ if (rgba !== void 0) {
750
+ const hex = colorToHex(rgba);
751
+ const colorIdx = colorIndexByHex.get(hex);
752
+ if (colorIdx !== void 0) attrs = {
753
+ pid: 2,
754
+ p1: colorIdx
755
+ };
756
+ }
757
+ }
758
+ if (attrs !== void 0) for (let t = triStart; t < triStart + triCount; t++) triangleAttrs.set(t, attrs);
759
+ }
706
760
  const triangles = [];
707
761
  for (let i = 0; i < mesh.triangles.length; i += 3) {
762
+ const triIdx = i / 3;
708
763
  const v1 = mesh.triangles[i] ?? 0;
709
764
  const v2 = mesh.triangles[i + 1] ?? 0;
710
765
  const v3 = mesh.triangles[i + 2] ?? 0;
711
- triangles.push(` <triangle v1="${v1}" v2="${v2}" v3="${v3}" />`);
766
+ const attrs = triangleAttrs.get(triIdx);
767
+ if (attrs !== void 0) triangles.push(` <triangle v1="${v1}" v2="${v2}" v3="${v3}" pid="${attrs.pid}" p1="${attrs.p1}" />`);
768
+ else triangles.push(` <triangle v1="${v1}" v2="${v2}" v3="${v3}" />`);
769
+ }
770
+ const resourceBlocks = [];
771
+ if (colorHexList.length > 0) {
772
+ const colorItems = colorHexList.map((hex) => ` <color color="${hex}" />`).join("\n");
773
+ resourceBlocks.push(` <colorgroup id="2">\n${colorItems}\n </colorgroup>`);
774
+ }
775
+ if (materialList.length > 0) {
776
+ const matItems = materialList.map((mat) => {
777
+ const hexColor = mat.displayColor !== void 0 ? colorToHex(mat.displayColor) : "#FFFFFFFF";
778
+ return ` <base name="${escapeXmlAttr(mat.name)}" displaycolor="${hexColor}" />`;
779
+ }).join("\n");
780
+ resourceBlocks.push(` <basematerials id="3">\n${matItems}\n </basematerials>`);
712
781
  }
713
782
  return `<?xml version="1.0" encoding="UTF-8"?>
714
- <model unit="${unit}" xmlns="http://schemas.microsoft.com/3dmanufacturing/core/2015/02">
715
- <resources>
716
- <object id="1" name="${name}" type="model">
783
+ <model unit="${unit}" xmlns="http://schemas.microsoft.com/3dmanufacturing/core/2015/02"${materialList.length > 0 ? "\n xmlns:m=\"http://schemas.microsoft.com/3dmanufacturing/material/2015/02\"" : ""}>
784
+ <resources>${resourceBlocks.length > 0 ? "\n" + resourceBlocks.join("\n") : ""}
785
+ <object id="1" name="${escapeXmlAttr(name)}" type="model">
717
786
  <mesh>
718
787
  <vertices>
719
788
  ${vertices.join("\n")}
@@ -751,7 +820,7 @@ ${triangles.join("\n")}
751
820
  * ```
752
821
  */
753
822
  function exportThreeMF(mesh, options = {}) {
754
- const { name = "model", unit = "millimeter" } = options;
823
+ const { name = "model", unit = "millimeter", colors, materials } = options;
755
824
  const encoder = new TextEncoder();
756
825
  const contentTypes = `<?xml version="1.0" encoding="UTF-8"?>
757
826
  <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
@@ -762,7 +831,7 @@ function exportThreeMF(mesh, options = {}) {
762
831
  <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
763
832
  <Relationship Target="/3D/3dmodel.model" Id="rel0" Type="http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel" />
764
833
  </Relationships>`;
765
- const model = build3MFModel(mesh, name, unit);
834
+ const model = build3MFModel(mesh, name, unit, colors, materials);
766
835
  function entry(path, content) {
767
836
  const nameBytes = encoder.encode(path);
768
837
  const dataBytes = encoder.encode(content);
package/dist/index.d.ts CHANGED
@@ -32,7 +32,7 @@ export { getSingleFace, type SingleFace } from './query/helpers.js';
32
32
  export { exportOBJ } from './io/objExportFns.js';
33
33
  export { exportGltf, exportGlb, type GltfMaterial, type GltfExportOptions, } from './io/gltfExportFns.js';
34
34
  export { exportDXF, blueprintToDXF, type DXFEntity, type DXFExportOptions, } from './io/dxfExportFns.js';
35
- export { exportThreeMF, type ThreeMFExportOptions } from './io/threemfExportFns.js';
35
+ export { exportThreeMF, type ThreeMFExportOptions, type ThreeMFMaterial, } from './io/threemfExportFns.js';
36
36
  export { importSVGPathD, importSVG, type SVGImportOptions } from './io/svgImportFns.js';
37
37
  export { Sketcher, FaceSketcher, BaseSketcher2d, BlueprintSketcher };
38
38
  export type { GenericSketcher, SplineOptions };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,21 @@
1
1
  import { ShapeMesh } from '../topology/meshFns.js';
2
+ /** Named material for 3MF basematerials resource. */
3
+ export interface ThreeMFMaterial {
4
+ /** Display name (e.g. 'PLA-Red'). */
5
+ name: string;
6
+ /** Display color as RGBA 0-1. Falls back to white if omitted. */
7
+ displayColor?: [number, number, number, number];
8
+ }
2
9
  /** Options controlling 3MF archive export. */
3
10
  export interface ThreeMFExportOptions {
4
11
  /** Name of the model object inside the 3MF archive. Default: `"model"`. */
5
12
  name?: string;
6
13
  /** Unit of measurement for vertex coordinates. Default: `"millimeter"`. */
7
14
  unit?: 'micron' | 'millimeter' | 'centimeter' | 'meter' | 'inch' | 'foot';
15
+ /** Per-face colors keyed by faceId from ShapeMesh.faceGroups. RGBA 0-1 floats. */
16
+ colors?: Map<number, [number, number, number, number]>;
17
+ /** Per-face named materials keyed by faceId from ShapeMesh.faceGroups. */
18
+ materials?: Map<number, ThreeMFMaterial>;
8
19
  }
9
20
  /**
10
21
  * Export a ShapeMesh to 3MF format (ArrayBuffer).
@@ -1 +1 @@
1
- {"version":3,"file":"threemfExportFns.d.ts","sourceRoot":"","sources":["../../src/io/threemfExportFns.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAMxD,8CAA8C;AAC9C,MAAM,WAAW,oBAAoB;IACnC,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,IAAI,CAAC,EAAE,QAAQ,GAAG,YAAY,GAAG,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;CAC3E;AA+LD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,GAAE,oBAAyB,GAAG,WAAW,CA4B9F"}
1
+ {"version":3,"file":"threemfExportFns.d.ts","sourceRoot":"","sources":["../../src/io/threemfExportFns.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAMxD,qDAAqD;AACrD,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACjD;AAED,8CAA8C;AAC9C,MAAM,WAAW,oBAAoB;IACnC,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,IAAI,CAAC,EAAE,QAAQ,GAAG,YAAY,GAAG,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAC1E,kFAAkF;IAClF,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,0EAA0E;IAC1E,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC1C;AAgUD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,GAAE,oBAAyB,GAAG,WAAW,CA4B9F"}
@@ -1 +1 @@
1
- {"version":3,"file":"threemfImportFns.d.ts","sourceRoot":"","sources":["../../src/io/threemfImportFns.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EAAE,KAAK,MAAM,EAAW,MAAM,mBAAmB,CAAC;AAmLzD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CA6BhF"}
1
+ {"version":3,"file":"threemfImportFns.d.ts","sourceRoot":"","sources":["../../src/io/threemfImportFns.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EAAE,KAAK,MAAM,EAAW,MAAM,mBAAmB,CAAC;AAiVzD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAqChF"}
package/dist/io.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_meshFns = require("./meshFns-CW1EUdGe.cjs");
3
- const require_importFns = require("./importFns-DGRxcYhI.cjs");
3
+ const require_importFns = require("./importFns-CyPkUA_N.cjs");
4
4
  exports.blueprintToDXF = require_importFns.blueprintToDXF;
5
5
  exports.exportDXF = require_importFns.exportDXF;
6
6
  exports.exportGlb = require_importFns.exportGlb;
package/dist/io.d.ts CHANGED
@@ -11,6 +11,6 @@ export { exportSTEP, exportSTL, exportIGES } from './topology/meshFns.js';
11
11
  export { exportOBJ } from './io/objExportFns.js';
12
12
  export { exportGltf, exportGlb, type GltfMaterial, type GltfExportOptions, } from './io/gltfExportFns.js';
13
13
  export { exportDXF, blueprintToDXF, type DXFEntity, type DXFExportOptions, } from './io/dxfExportFns.js';
14
- export { exportThreeMF, type ThreeMFExportOptions } from './io/threemfExportFns.js';
14
+ export { exportThreeMF, type ThreeMFExportOptions, type ThreeMFMaterial, } from './io/threemfExportFns.js';
15
15
  export { importSVGPathD, importSVG, type SVGImportOptions } from './io/svgImportFns.js';
16
16
  //# sourceMappingURL=io.d.ts.map
package/dist/io.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAItE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAI1E,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EACL,UAAU,EACV,SAAS,EACT,KAAK,YAAY,EACjB,KAAK,iBAAiB,GACvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,SAAS,EACT,cAAc,EACd,KAAK,SAAS,EACd,KAAK,gBAAgB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEpF,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAItE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAI1E,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EACL,UAAU,EACV,SAAS,EACT,KAAK,YAAY,EACjB,KAAK,iBAAiB,GACvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,SAAS,EACT,cAAc,EACd,KAAK,SAAS,EACd,KAAK,gBAAgB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,eAAe,GACrB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/io.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import { n as exportSTEP, r as exportSTL, t as exportIGES } from "./meshFns-D5CPzlWP.js";
2
- import { a as importSVGPathD, c as exportDXF, d as exportOBJ, i as importSVG, l as exportGlb, n as importSTEP, o as exportThreeMF, r as importSTL, s as blueprintToDXF, t as importIGES, u as exportGltf } from "./importFns-DftUsaqx.js";
2
+ import { a as importSVGPathD, c as exportDXF, d as exportOBJ, i as importSVG, l as exportGlb, n as importSTEP, o as exportThreeMF, r as importSTL, s as blueprintToDXF, t as importIGES, u as exportGltf } from "./importFns-beNdL_tU.js";
3
3
  export { blueprintToDXF, exportDXF, exportGlb, exportGltf, exportIGES, exportOBJ, exportSTEP, exportSTL, exportThreeMF, importIGES, importSTEP, importSTL, importSVG, importSVGPathD };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brepjs",
3
- "version": "12.11.2",
3
+ "version": "12.12.0",
4
4
  "description": "Web CAD library with pluggable geometry kernel",
5
5
  "keywords": [
6
6
  "cad",
@@ -173,6 +173,7 @@
173
173
  "test:full": "vitest run --project occt --coverage",
174
174
  "test:watch": "vitest --project occt",
175
175
  "test:brepkit": "vitest run --project brepkit",
176
+ "test:stress": "vitest run --config vitest.stress.config.ts",
176
177
  "check:boundaries": "bash scripts/check-layer-boundaries.sh",
177
178
  "bench": "vitest run --config vitest.bench.config.ts",
178
179
  "bench:compare": "BENCH_KERNELS=both vitest run --config vitest.bench.config.ts",