@faicad/faijs 0.32.2 → 0.33.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/api/api-namespace.js +3 -3
- package/dist/api/api-namespace.js.map +1 -1
- package/dist/api/assembly/index.d.ts +1 -0
- package/dist/api/assembly/index.d.ts.map +1 -1
- package/dist/api/assembly/index.js +1 -0
- package/dist/api/assembly/index.js.map +1 -1
- package/dist/api/assembly/lower.d.ts.map +1 -1
- package/dist/api/assembly/lower.js +7 -0
- package/dist/api/assembly/lower.js.map +1 -1
- package/dist/api/assembly/normalize.d.ts.map +1 -1
- package/dist/api/assembly/normalize.js +2 -1
- package/dist/api/assembly/normalize.js.map +1 -1
- package/dist/api/assembly/solve-tree.d.ts +46 -0
- package/dist/api/assembly/solve-tree.d.ts.map +1 -0
- package/dist/api/assembly/solve-tree.js +135 -0
- package/dist/api/assembly/solve-tree.js.map +1 -0
- package/dist/api/assembly/solve.d.ts +7 -0
- package/dist/api/assembly/solve.d.ts.map +1 -1
- package/dist/api/assembly/solve.js.map +1 -1
- package/dist/api/assembly/solvers/assembly-tree.d.ts +4 -0
- package/dist/api/assembly/solvers/assembly-tree.d.ts.map +1 -1
- package/dist/api/assembly/solvers/assembly-tree.js +1 -0
- package/dist/api/assembly/solvers/assembly-tree.js.map +1 -1
- package/dist/api/assembly/solvers/global-solver.d.ts.map +1 -1
- package/dist/api/assembly/solvers/global-solver.js +210 -3
- package/dist/api/assembly/solvers/global-solver.js.map +1 -1
- package/dist/api/assembly/solvers/types.d.ts +8 -0
- package/dist/api/assembly/solvers/types.d.ts.map +1 -1
- package/dist/api/assembly/solvers/types.js.map +1 -1
- package/dist/api/assembly/types.d.ts +32 -1
- package/dist/api/assembly/types.d.ts.map +1 -1
- package/dist/api/assembly/types.js.map +1 -1
- package/dist/api/assembly/validate.d.ts +2 -2
- package/dist/api/assembly/validate.d.ts.map +1 -1
- package/dist/api/assembly/validate.js +24 -2
- package/dist/api/assembly/validate.js.map +1 -1
- package/dist/api/cadquery-selectors/edge.js +1 -1
- package/dist/api/cadquery-selectors/edge.js.map +1 -1
- package/dist/api/cadquery-selectors/entity.d.ts +29 -20
- package/dist/api/cadquery-selectors/entity.d.ts.map +1 -1
- package/dist/api/cadquery-selectors/entity.js +26 -20
- package/dist/api/cadquery-selectors/entity.js.map +1 -1
- package/dist/api/cadquery-selectors/face.d.ts +4 -2
- package/dist/api/cadquery-selectors/face.d.ts.map +1 -1
- package/dist/api/cadquery-selectors/face.js +8 -7
- package/dist/api/cadquery-selectors/face.js.map +1 -1
- package/dist/api/cadquery-selectors/resolve.d.ts +7 -6
- package/dist/api/cadquery-selectors/resolve.d.ts.map +1 -1
- package/dist/api/cadquery-selectors/resolve.js +13 -11
- package/dist/api/cadquery-selectors/resolve.js.map +1 -1
- package/dist/api/chamfer.js +1 -1
- package/dist/api/chamfer.js.map +1 -1
- package/dist/api/draft.js +1 -1
- package/dist/api/draft.js.map +1 -1
- package/dist/api/edge-ref.js +2 -2
- package/dist/api/edge-ref.js.map +1 -1
- package/dist/api/engrave.js +1 -1
- package/dist/api/engrave.js.map +1 -1
- package/dist/api/export-3mf.js +1 -1
- package/dist/api/export-3mf.js.map +1 -1
- package/dist/api/export-brep.js +1 -1
- package/dist/api/export-brep.js.map +1 -1
- package/dist/api/export-step.d.ts +12 -13
- package/dist/api/export-step.d.ts.map +1 -1
- package/dist/api/export-step.js +19 -17
- package/dist/api/export-step.js.map +1 -1
- package/dist/api/extrude.js +3 -3
- package/dist/api/extrude.js.map +1 -1
- package/dist/api/face-ref.js +2 -2
- package/dist/api/face-ref.js.map +1 -1
- package/dist/api/feature-repair.js +2 -2
- package/dist/api/feature-repair.js.map +1 -1
- package/dist/api/fillet-variable.js +1 -1
- package/dist/api/fillet-variable.js.map +1 -1
- package/dist/api/fillet.js +1 -1
- package/dist/api/fillet.js.map +1 -1
- package/dist/api/geom.js +1 -1
- package/dist/api/geom.js.map +1 -1
- package/dist/api/import-step.d.ts.map +1 -1
- package/dist/api/import-step.js +4 -2
- package/dist/api/import-step.js.map +1 -1
- package/dist/api/pattern.js +1 -1
- package/dist/api/pattern.js.map +1 -1
- package/dist/api/place.js +1 -1
- package/dist/api/place.js.map +1 -1
- package/dist/api/punch-hole.js +1 -1
- package/dist/api/punch-hole.js.map +1 -1
- package/dist/api/replicate.js +1 -1
- package/dist/api/replicate.js.map +1 -1
- package/dist/api/revolve.js +1 -1
- package/dist/api/revolve.js.map +1 -1
- package/dist/api/section-by-plane.js +1 -1
- package/dist/api/section-by-plane.js.map +1 -1
- package/dist/api/shell.js +1 -1
- package/dist/api/shell.js.map +1 -1
- package/dist/api/sketch-on-face.js +1 -1
- package/dist/api/sketch-on-face.js.map +1 -1
- package/dist/api/split-by-plane.js +1 -1
- package/dist/api/split-by-plane.js.map +1 -1
- package/dist/api/split.js +1 -1
- package/dist/api/split.js.map +1 -1
- package/dist/api/thicken.js +1 -1
- package/dist/api/thicken.js.map +1 -1
- package/dist/api/topo-resolve.js +4 -4
- package/dist/api/topo-resolve.js.map +1 -1
- package/dist/api/transform.js +1 -1
- package/dist/api/transform.js.map +1 -1
- package/dist/api/view/view-projection.d.ts +8 -0
- package/dist/api/view/view-projection.d.ts.map +1 -1
- package/dist/api/view/view-projection.js +73 -2
- package/dist/api/view/view-projection.js.map +1 -1
- package/dist/boolean/cross-section.d.ts.map +1 -1
- package/dist/boolean/cross-section.js +3 -1
- package/dist/boolean/cross-section.js.map +1 -1
- package/dist/brep/brep-ops.d.ts +26 -0
- package/dist/brep/brep-ops.d.ts.map +1 -1
- package/dist/brep/brep-ops.js +45 -0
- package/dist/brep/brep-ops.js.map +1 -1
- package/dist/brep/brep-topology.js +1 -1
- package/dist/brep/brep-topology.js.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.js +2 -0
- package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
- package/dist/brep/engine/primitives.d.ts +17 -0
- package/dist/brep/engine/primitives.d.ts.map +1 -1
- package/dist/brep/engine/primitives.js.map +1 -1
- package/dist/brep/export/export-model.d.ts.map +1 -1
- package/dist/brep/export/export-model.js +36 -11
- package/dist/brep/export/export-model.js.map +1 -1
- package/dist/brep/export/step-flat.d.ts +35 -0
- package/dist/brep/export/step-flat.d.ts.map +1 -0
- package/dist/brep/export/step-flat.js +94 -0
- package/dist/brep/export/step-flat.js.map +1 -0
- package/dist/brep/export/step.d.ts.map +1 -1
- package/dist/brep/export/step.js +42 -21
- package/dist/brep/export/step.js.map +1 -1
- package/dist/brep/handle-bridge.d.ts +4 -4
- package/dist/brep/handle-bridge.js +4 -4
- package/dist/brep/handle-bridge.js.map +1 -1
- package/dist/brep/svg/svg-to-solid.d.ts +3 -17
- package/dist/brep/svg/svg-to-solid.d.ts.map +1 -1
- package/dist/brep/svg/svg-to-solid.js +16 -317
- package/dist/brep/svg/svg-to-solid.js.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.js +10 -0
- package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
- package/dist/brepkit-kernel/brepkitWasm.d.ts +1 -1
- package/dist/brepkit-kernel/brepkitWasm.d.ts.map +1 -1
- package/dist/brepkit-kernel/brepkitWasm.js +7 -6
- package/dist/brepkit-kernel/brepkitWasm.js.map +1 -1
- package/dist/brepkit-kernel/multi-version-test.d.ts +7 -7
- package/dist/brepkit-kernel/multi-version-test.d.ts.map +1 -1
- package/dist/brepkit-kernel/multi-version-test.js +10 -10
- package/dist/brepkit-kernel/multi-version-test.js.map +1 -1
- package/dist/cad-runtime/direct-executor.js +2 -2
- package/dist/cad-runtime/direct-executor.js.map +1 -1
- package/dist/cad-runtime/runtime.js +5 -5
- package/dist/cad-runtime/runtime.js.map +1 -1
- package/dist/geometry2d/curve2d.js +42 -1
- package/dist/geometry2d/curve2d.js.map +1 -1
- package/dist/math3d/Box3.js.map +1 -1
- package/dist/math3d/Euler.js.map +1 -1
- package/dist/math3d/Mat4.js.map +1 -1
- package/dist/math3d/Plane.js.map +1 -1
- package/dist/math3d/Quat.js.map +1 -1
- package/dist/math3d/Vec2.js.map +1 -1
- package/dist/math3d/Vec3.js.map +1 -1
- package/dist/math3d/index.js.map +1 -1
- package/dist/mesh/meshdata/contour.d.ts +34 -0
- package/dist/mesh/meshdata/contour.d.ts.map +1 -0
- package/dist/mesh/meshdata/contour.js +39 -0
- package/dist/mesh/meshdata/contour.js.map +1 -0
- package/dist/mesh/meshdata/extrude.d.ts +25 -0
- package/dist/mesh/meshdata/extrude.d.ts.map +1 -0
- package/dist/mesh/meshdata/extrude.js +198 -0
- package/dist/mesh/meshdata/extrude.js.map +1 -0
- package/dist/mesh/meshdata/index.js.map +1 -1
- package/dist/mesh/meshdata/ops.js.map +1 -1
- package/dist/mesh/meshdata/parametric.js.map +1 -1
- package/dist/mesh/meshdata/weld.js.map +1 -1
- package/dist/node-host/cli.d.ts.map +1 -1
- package/dist/node-host/cli.js +3 -2
- package/dist/node-host/cli.js.map +1 -1
- package/dist/occt-kernel/occt-primitives.d.ts.map +1 -1
- package/dist/occt-kernel/occt-primitives.js +2 -0
- package/dist/occt-kernel/occt-primitives.js.map +1 -1
- package/dist/primitives/svg/svg-path.d.ts +192 -0
- package/dist/primitives/svg/svg-path.d.ts.map +1 -0
- package/dist/primitives/svg/svg-path.js +776 -0
- package/dist/primitives/svg/svg-path.js.map +1 -0
- package/dist/third-party/earcut.d.ts +19 -0
- package/dist/third-party/earcut.d.ts.map +1 -0
- package/dist/third-party/earcut.js +575 -0
- package/dist/third-party/earcut.js.map +1 -0
- package/package.json +22 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svg-path.js","sourceRoot":"","sources":["../../../src/primitives/svg/svg-path.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * primitives/svg/svg-path — 共享 SVG 语法层与折线化(与 OCCT 无关)。\n *\n * 来源:从 `brep/svg/svg-to-solid.ts` 泛化抽出(一个事实一个家)。\n * brep 链保留自己的 OCCT 曲线装配(makeBezierEdge/makeArcEdge),仅复用本模块的\n * 语法层(元素提取 / d 分词 / transform 解析);mesh 链消费本模块的折线化\n * `svgPathToContours`(曲线按 curveSegments 采样成折线点)。\n *\n * 坐标约定:\n * - 语法层(extract / tokenize / parsePathToSubpaths)输出 **SVG 原始坐标(Y-down)**\n * - `svgPathToContours` 在返回前统一翻转为 **Y-up**(与 core 世界坐标一致)\n *\n * 与 three `SVGLoader` 的已知差异(登记为设计分歧,见方案 R2/R3):\n * - arc(A 命令):本项目沿用 brep 链的 sagitta 三点圆弧近似(与 brepjs\n * `createStandardArc` 同源);SVGLoader 是精确椭圆弧 → 三次贝塞尔。\n * - fill-rule:仅按 evenodd 做孔洞判定;SVG 缺省(nonzero)素材若存在嵌套\n * 反向轮廓,以 evenodd 语义解释(与 SVGLoader.createShapes 行为一致)。\n */\nimport type { Contour, P2 } from '../../mesh/meshdata/contour'\n\n/** SVG 2D 点(原始坐标系,Y-down)。 */\nexport interface SvgPoint2 {\n x: number\n y: number\n}\n\n/** SVG path 分词单元。 */\nexport interface PathToken {\n command: string\n args: number[]\n}\n\n/** 闭合子路径(折线化后):顶点 + bbox + 有符号面积(SVG 坐标系,Y-down)。 */\nexport interface SvgSubpath {\n points: SvgPoint2[]\n bbox: { minX: number; minY: number; maxX: number; maxY: number }\n signedArea: number\n closed: boolean\n}\n\n/** SVG 2D 仿射变换矩阵 [a, b, c, d, e, f](matrix(a,b,c,d,e,f))。 */\nexport type SvgTransform = [number, number, number, number, number, number]\n\n// ─── SVG 元素提取(将 <rect>/<circle>/… 转为 <path d>) ───\n\n/**\n * 从 SVG 字符串中提取所有图形元素的 path `d` 属性。\n *\n * 支持:<path>, <rect>, <circle>, <ellipse>, <line>, <polyline>, <polygon>。\n * 使用正则提取,无 DOMParser 依赖(可在 Web Worker / Node 中运行)。\n *\n * @param svgString - the raw SVG markup to extract paths from.\n * @returns an array of path `d` strings.\n */\nexport function extractSvgPaths(svgString: string): string[] {\n const paths: string[] = []\n\n extractPathDAttributes(svgString, paths)\n extractRectPaths(svgString, paths)\n extractCirclePaths(svgString, paths)\n extractEllipsePaths(svgString, paths)\n extractLinePaths(svgString, paths)\n extractPolylinePaths(svgString, paths, false)\n extractPolylinePaths(svgString, paths, true)\n\n return paths\n}\n\nfunction extractPathDAttributes(svg: string, out: string[]): void {\n const re = /<path\\b[^>]*\\bd\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')[^>]*>/gi\n let m: RegExpExecArray | null\n while ((m = re.exec(svg)) !== null) {\n const d = m[1] ?? m[2]\n if (d) out.push(d)\n }\n}\n\nfunction extractRectPaths(svg: string, out: string[]): void {\n const re = /<rect\\b([^>]*)\\/?>/gi\n let m: RegExpExecArray | null\n while ((m = re.exec(svg)) !== null) {\n const attrs = parseAttrs(m[1] ?? '')\n const x = parseFloat(attrs.x ?? '0')\n const y = parseFloat(attrs.y ?? '0')\n const w = parseFloat(attrs.width ?? '0')\n const h = parseFloat(attrs.height ?? '0')\n const rx = parseFloat(attrs.rx ?? '0')\n const ry = parseFloat(attrs.ry ?? '0')\n if (w <= 0 || h <= 0) continue\n\n const rectTransform = attrs.transform ? parseSvgTransform(attrs.transform) : undefined\n if (rectTransform) {\n const corners: [number, number][] = [\n [x, y], [x + w, y], [x + w, y + h], [x, y + h],\n ]\n const tc = corners.map(([cx, cy]) => [\n rectTransform[0] * cx + rectTransform[2] * cy + rectTransform[4],\n rectTransform[1] * cx + rectTransform[3] * cy + rectTransform[5],\n ])\n let d = `M ${tc[0][0]},${tc[0][1]}`\n for (let i = 1; i < tc.length; i++) d += ` L ${tc[i][0]},${tc[i][1]}`\n out.push(d + ' Z')\n } else if (rx > 0 || ry > 0) {\n const r = Math.min(rx || ry, w / 2, h / 2)\n out.push(rectToPathRounded(x, y, w, h, r))\n } else {\n out.push(`M ${x},${y} h ${w} v ${h} h ${-w} Z`)\n }\n }\n}\n\nfunction rectToPathRounded(x: number, y: number, w: number, h: number, r: number): string {\n return [\n `M ${x + r},${y}`,\n `h ${w - 2 * r}`,\n `A ${r},${r} 0 0 1 ${x + w},${y + r}`,\n `v ${h - 2 * r}`,\n `A ${r},${r} 0 0 1 ${x + w - r},${y + h}`,\n `h ${-(w - 2 * r)}`,\n `A ${r},${r} 0 0 1 ${x},${y + h - r}`,\n `v ${-(h - 2 * r)}`,\n `A ${r},${r} 0 0 1 ${x + r},${y}`,\n 'Z',\n ].join(' ')\n}\n\nfunction extractCirclePaths(svg: string, out: string[]): void {\n const re = /<circle\\b([^>]*)\\/?>/gi\n let m: RegExpExecArray | null\n while ((m = re.exec(svg)) !== null) {\n const attrs = parseAttrs(m[1] ?? '')\n const cx = parseFloat(attrs.cx ?? '0')\n const cy = parseFloat(attrs.cy ?? '0')\n const r = parseFloat(attrs.r ?? '0')\n if (r <= 0) continue\n out.push(`M ${cx - r},${cy} A ${r},${r} 0 1 0 ${cx + r},${cy} A ${r},${r} 0 1 0 ${cx - r},${cy} Z`)\n }\n}\n\nfunction extractEllipsePaths(svg: string, out: string[]): void {\n const re = /<ellipse\\b([^>]*)\\/?>/gi\n let m: RegExpExecArray | null\n while ((m = re.exec(svg)) !== null) {\n const attrs = parseAttrs(m[1] ?? '')\n const cx = parseFloat(attrs.cx ?? '0')\n const cy = parseFloat(attrs.cy ?? '0')\n const rx = parseFloat(attrs.rx ?? '0')\n const ry = parseFloat(attrs.ry ?? '0')\n if (rx <= 0 || ry <= 0) continue\n out.push(`M ${cx - rx},${cy} A ${rx},${ry} 0 1 0 ${cx + rx},${cy} A ${rx},${ry} 0 1 0 ${cx - rx},${cy} Z`)\n }\n}\n\nfunction extractLinePaths(svg: string, out: string[]): void {\n const re = /<line\\b([^>]*)\\/?>/gi\n let m: RegExpExecArray | null\n while ((m = re.exec(svg)) !== null) {\n const attrs = parseAttrs(m[1] ?? '')\n const x1 = parseFloat(attrs.x1 ?? '0')\n const y1 = parseFloat(attrs.y1 ?? '0')\n const x2 = parseFloat(attrs.x2 ?? '0')\n const y2 = parseFloat(attrs.y2 ?? '0')\n out.push(`M ${x1},${y1} L ${x2},${y2}`)\n }\n}\n\nfunction extractPolylinePaths(svg: string, out: string[], closed: boolean): void {\n const tag = closed ? 'polygon' : 'polyline'\n const re = new RegExp(`<${tag}\\\\b([^>]*)\\\\/??>`, 'gi')\n let m: RegExpExecArray | null\n while ((m = re.exec(svg)) !== null) {\n const attrs = parseAttrs(m[1] ?? '')\n const pointsStr = attrs.points ?? ''\n const nums = pointsStr.split(/[\\s,]+/).filter((s) => s.length > 0).map(Number)\n if (nums.length < 4) continue\n let d = `M ${nums[0]},${nums[1]}`\n for (let i = 2; i + 1 < nums.length; i += 2) {\n d += ` L ${nums[i]},${nums[i + 1]}`\n }\n if (closed) d += ' Z'\n out.push(d)\n }\n}\n\nfunction parseAttrs(attrStr: string): Record<string, string> {\n const attrs: Record<string, string> = {}\n const re = /(\\w[\\w-]*)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/g\n let m: RegExpExecArray | null\n while ((m = re.exec(attrStr)) !== null) {\n attrs[m[1].toLowerCase()] = m[2] ?? m[3] ?? ''\n }\n return attrs\n}\n\n// ─── SVG path 分词(d 属性 → 命令序列) ───\n\n/**\n * 将 SVG path `d` 属性拆分为命令序列。\n *\n * 支持完整命令集:M/L/H/V/C/S/Q/T/A/Z(含相对形式小写)。\n * 每个 token 保留命令字与已解析的数值参数(多参数组由消费方按命令语义切分)。\n *\n * @param d - the SVG path `d` attribute value.\n * @returns the token list.\n */\nexport function tokenizeSvgPath(d: string): PathToken[] {\n const tokens: PathToken[] = []\n const re = /([MmLlHhVvCcSsQqTtAaZz])([^MmLlHhVvCcSsQqTtAaZz]*)/g\n let match: RegExpExecArray | null\n while ((match = re.exec(d)) !== null) {\n const command = match[1] ?? ''\n const argStr = (match[2] ?? '').trim()\n const args: number[] = []\n if (argStr) {\n const numRe = /[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][+-]?\\d+)?/g\n let numMatch: RegExpExecArray | null\n while ((numMatch = numRe.exec(argStr)) !== null) {\n args.push(parseFloat(numMatch[0]))\n }\n }\n tokens.push({ command, args })\n }\n return tokens\n}\n\n// ─── SVG transform 处理 ───\n\n/**\n * 解析 SVG transform 字符串(仅支持 matrix 形式)。\n * @param transformStr - 形如 `matrix(a,b,c,d,e,f)` 的变换字符串。\n * @returns 六元仿射矩阵 [a,b,c,d,e,f],非 matrix 形式返回 undefined。\n */\nexport function parseSvgTransform(transformStr: string): SvgTransform | undefined {\n const m = transformStr.match(\n /matrix\\s*\\(\\s*([-\\d.eE+]+)\\s*,\\s*([-\\d.eE+]+)\\s*,\\s*([-\\d.eE+]+)\\s*,\\s*([-\\d.eE+]+)\\s*,\\s*([-\\d.eE+]+)\\s*,\\s*([-\\d.eE+]+)\\s*\\)/,\n )\n if (m) {\n return [parseFloat(m[1]), parseFloat(m[2]), parseFloat(m[3]), parseFloat(m[4]), parseFloat(m[5]), parseFloat(m[6])]\n }\n return undefined\n}\n\n/**\n * 从 SVG 字符串中提取 `<g transform=\"matrix(...)\">` 的变换矩阵。\n * @param svgString - SVG 文档字符串。\n * @returns 首个 `<g>` 的 matrix 变换(六元数组),无匹配返回 undefined。\n */\nexport function extractGroupTransform(svgString: string): SvgTransform | undefined {\n const m = svgString.match(/<g\\b[^>]*\\btransform\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')[^>]*>/i)\n if (m) {\n return parseSvgTransform(m[1] ?? m[2] ?? '')\n }\n return undefined\n}\n\n/** 对 SVG 坐标点(Y-down)应用 2D 仿射矩阵。 */\nfunction applySvgTransform(p: SvgPoint2, gt: SvgTransform): SvgPoint2 {\n return {\n x: gt[0] * p.x + gt[2] * p.y + gt[4],\n y: gt[1] * p.x + gt[3] * p.y + gt[5],\n }\n}\n\n// ─── 曲线几何(折线化用) ───\n\n/** 三次贝塞尔采样(与 three `CubicBezierCurve.getPoint` 同公式)。 */\nfunction cubicAt(p0: SvgPoint2, p1: SvgPoint2, p2: SvgPoint2, p3: SvgPoint2, t: number): SvgPoint2 {\n const mt = 1 - t\n const a = mt * mt * mt\n const b = 3 * mt * mt * t\n const c = 3 * mt * t * t\n const d = t * t * t\n return {\n x: a * p0.x + b * p1.x + c * p2.x + d * p3.x,\n y: a * p0.y + b * p1.y + c * p2.y + d * p3.y,\n }\n}\n\n/** 二次贝塞尔采样。 */\nfunction quadAt(p0: SvgPoint2, p1: SvgPoint2, p2: SvgPoint2, t: number): SvgPoint2 {\n const mt = 1 - t\n return {\n x: mt * mt * p0.x + 2 * mt * t * p1.x + t * t * p2.x,\n y: mt * mt * p0.y + 2 * mt * t * p1.y + t * t * p2.y,\n }\n}\n\n/** 三点外接圆(p0/p1/p2 共线时返回 null)。 */\nfunction circumcircle(\n p0: SvgPoint2, p1: SvgPoint2, p2: SvgPoint2,\n): { cx: number; cy: number; r: number } | null {\n const d = 2 * (\n p0.x * (p1.y - p2.y) + p1.x * (p2.y - p0.y) + p2.x * (p0.y - p1.y)\n )\n if (Math.abs(d) < 1e-12) return null\n const p0sq = p0.x * p0.x + p0.y * p0.y\n const p1sq = p1.x * p1.x + p1.y * p1.y\n const p2sq = p2.x * p2.x + p2.y * p2.y\n const cx = (p0sq * (p1.y - p2.y) + p1sq * (p2.y - p0.y) + p2sq * (p0.y - p1.y)) / d\n // 注意 cy 取 x 差分(与 cx 取 y 差分对称)。标准外接圆圆心公式的 y 分量为\n // (p0sq·(p2.x−p1.x) + p1sq·(p0.x−p2.x) + p2sq·(p1.x−p0.x)) / D;\n // 旧写法把三项整体取了相反数(得 −uy),导致圆心纵坐标翻转、采样弧绕错心、\n // 闭合多边形有向面积自相抵消≈0,进而 svgPathToContours 把所有圆弧 SVG(圆/环/\n // 圆角矩形)误判为“无闭合轮廓”而丢弃。\n const cy = (p0sq * (p2.x - p1.x) + p1sq * (p0.x - p2.x) + p2sq * (p1.x - p0.x)) / d\n return { cx, cy, r: Math.hypot(p0.x - cx, p0.y - cy) }\n}\n\n/** 角度归一化到 (-π, π]。 */\nfunction normAngle(a: number): number {\n let x = a\n while (x > Math.PI) x -= Math.PI * 2\n while (x <= -Math.PI) x += Math.PI * 2\n return x\n}\n\n/**\n * SVG arc 参数 → sagitta 中点 → 三点圆弧(与 brep 链 `arcMidPoint` 同算法)。\n * @returns 三点圆弧的中间点(SVG 坐标,Y-down)。\n */\nfunction arcMidPoint(\n fromX: number, fromY: number,\n toX: number, toY: number,\n rx: number, ry: number,\n largeArc: boolean, sweepFlag: boolean,\n): SvgPoint2 {\n const r = Math.max(rx, ry)\n const dx = toX - fromX\n const dy = toY - fromY\n const dist = Math.sqrt(dx * dx + dy * dy)\n const halfChord = dist / 2\n const sagitta = halfChord < r ? r - Math.sqrt(r * r - halfChord * halfChord) : r\n\n const sign = (largeArc !== sweepFlag ? 1 : -1) * (sweepFlag ? 1 : -1)\n const nx = -dy / dist\n const ny = dx / dist\n const midX = (fromX + toX) / 2 + sign * sagitta * nx\n const midY = (fromY + toY) / 2 + sign * sagitta * ny\n\n return { x: midX, y: midY }\n}\n\n/** 三点圆弧按圆心角线性采样(从 start 经 mid 到 end,方向自动判定)。 */\nfunction sampleArcThrough(\n start: SvgPoint2, mid: SvgPoint2, end: SvgPoint2, segments: number,\n): SvgPoint2[] {\n const c = circumcircle(start, mid, end)\n if (!c) {\n // 退化(共线):直接取终点\n return [end]\n }\n const a0 = Math.atan2(start.y - c.cy, start.x - c.cx)\n const a1 = Math.atan2(mid.y - c.cy, mid.x - c.cx)\n const a2 = Math.atan2(end.y - c.cy, end.x - c.cx)\n const d1 = normAngle(a1 - a0)\n const d2 = normAngle(a2 - a1)\n let span: number\n if (d1 * d2 >= 0) {\n span = d1 + d2\n } else {\n // 跨 ±π 边界:把中点的角度展开到与起点同侧后再算\n span = d1 + d2 + (d1 > 0 ? Math.PI * 2 : -Math.PI * 2)\n }\n const out: SvgPoint2[] = []\n for (let i = 1; i <= segments; i++) {\n const t = i / segments\n const a = a0 + span * t\n out.push({ x: c.cx + c.r * Math.cos(a), y: c.cy + c.r * Math.sin(a) })\n }\n return out\n}\n\n// ─── 子路径折线化(d → 采样点集) ───\n\n/**\n * 将 SVG path `d` 折线化为闭合/开放子路径的点集。\n *\n * - 直线(M/L/H/V)直接取点;\n * - 三次(C/S)与二次(Q/T)贝塞尔按 `curveSegments` 段采样(与 three\n * `Shape.getPoints(curveSegments)` 的段数语义一致);\n * - 弧(A)用 sagitta 三点圆弧近似后按 `curveSegments` 段采样;\n * - `M` 前隐式闭合(opentype/常见导出器不写 `Z` 的情形)、`Z` 显式闭合。\n *\n * 输出为 **SVG 原始坐标(Y-down)**;不翻转。未闭合子路径 `closed=false`。\n *\n * @param d - the SVG path `d` attribute.\n * @param curveSegments - per-curve sampling segments (default 6, aligned with the editor text path).\n * @returns the flattened subpaths.\n */\nexport function parsePathToSubpaths(d: string, curveSegments = 6): SvgSubpath[] {\n const tokens = tokenizeSvgPath(d)\n const subpaths: SvgSubpath[] = []\n\n let cx = 0\n let cy = 0\n let sx = 0\n let sy = 0\n let prevControlX = 0\n let prevControlY = 0\n let lastCmd = ''\n let lastPt: SvgPoint2 | null = null\n let subpathStart: SvgPoint2 | null = null\n let current: SvgPoint2[] = []\n\n function flush(closed: boolean): void {\n if (current.length === 0) return\n subpaths.push({\n points: current,\n bbox: computeBBox(current),\n signedArea: computeSignedArea(current),\n closed,\n })\n current = []\n }\n\n for (const { command, args } of tokens) {\n const isRelative = command === command.toLowerCase()\n const cmd = command.toUpperCase()\n\n switch (cmd) {\n case 'M': {\n if (current.length > 0) flush(false)\n let i = 0\n while (i + 1 < args.length) {\n const x = (isRelative ? cx : 0) + (args[i] ?? 0)\n const y = (isRelative ? cy : 0) + (args[i + 1] ?? 0)\n if (i === 0) {\n sx = x\n sy = y\n subpathStart = { x, y }\n current.push({ x, y })\n } else {\n const curr = { x, y }\n current.push(curr)\n }\n lastPt = { x, y }\n cx = x\n cy = y\n i += 2\n }\n break\n }\n case 'L': {\n let i = 0\n while (i + 1 < args.length) {\n const x = (isRelative ? cx : 0) + (args[i] ?? 0)\n const y = (isRelative ? cy : 0) + (args[i + 1] ?? 0)\n current.push({ x, y })\n lastPt = { x, y }\n cx = x\n cy = y\n i += 2\n }\n break\n }\n case 'H': {\n for (const arg of args) {\n const x = isRelative ? cx + arg : arg\n current.push({ x, y: cy })\n lastPt = { x, y: cy }\n cx = x\n }\n break\n }\n case 'V': {\n for (const arg of args) {\n const y = isRelative ? cy + arg : arg\n current.push({ x: cx, y })\n lastPt = { x: cx, y }\n cy = y\n }\n break\n }\n case 'C': {\n let i = 0\n while (i + 5 < args.length) {\n const ox = isRelative ? cx : 0\n const oy = isRelative ? cy : 0\n const p0 = lastPt ?? { x: ox, y: oy }\n const cp1 = { x: ox + (args[i] ?? 0), y: oy + (args[i + 1] ?? 0) }\n const cp2 = { x: ox + (args[i + 2] ?? 0), y: oy + (args[i + 3] ?? 0) }\n const endPt = { x: ox + (args[i + 4] ?? 0), y: oy + (args[i + 5] ?? 0) }\n for (let s = 1; s <= curveSegments; s++) {\n current.push(cubicAt(p0, cp1, cp2, endPt, s / curveSegments))\n }\n prevControlX = cp2.x\n prevControlY = cp2.y\n lastPt = endPt\n cx = endPt.x\n cy = endPt.y\n i += 6\n }\n break\n }\n case 'S': {\n let i = 0\n while (i + 3 < args.length) {\n const ox = isRelative ? cx : 0\n const oy = isRelative ? cy : 0\n const p0 = lastPt ?? { x: ox, y: oy }\n const cp1x = lastCmd === 'C' || lastCmd === 'S' ? 2 * cx - prevControlX : cx\n const cp1y = lastCmd === 'C' || lastCmd === 'S' ? 2 * cy - prevControlY : cy\n const cp2 = { x: ox + (args[i] ?? 0), y: oy + (args[i + 1] ?? 0) }\n const endPt = { x: ox + (args[i + 2] ?? 0), y: oy + (args[i + 3] ?? 0) }\n for (let s = 1; s <= curveSegments; s++) {\n current.push(cubicAt(p0, { x: cp1x, y: cp1y }, cp2, endPt, s / curveSegments))\n }\n prevControlX = cp2.x\n prevControlY = cp2.y\n lastPt = endPt\n cx = endPt.x\n cy = endPt.y\n lastCmd = 'S'\n i += 4\n }\n break\n }\n case 'Q': {\n let i = 0\n while (i + 3 < args.length) {\n const ox = isRelative ? cx : 0\n const oy = isRelative ? cy : 0\n const p0 = lastPt ?? { x: ox, y: oy }\n const cp = { x: ox + (args[i] ?? 0), y: oy + (args[i + 1] ?? 0) }\n const endPt = { x: ox + (args[i + 2] ?? 0), y: oy + (args[i + 3] ?? 0) }\n for (let s = 1; s <= curveSegments; s++) {\n current.push(quadAt(p0, cp, endPt, s / curveSegments))\n }\n prevControlX = cp.x\n prevControlY = cp.y\n lastPt = endPt\n cx = endPt.x\n cy = endPt.y\n i += 4\n }\n break\n }\n case 'T': {\n let i = 0\n while (i + 1 < args.length) {\n const ox = isRelative ? cx : 0\n const oy = isRelative ? cy : 0\n const p0 = lastPt ?? { x: ox, y: oy }\n const cpx = lastCmd === 'Q' || lastCmd === 'T' ? 2 * cx - prevControlX : cx\n const cpy = lastCmd === 'Q' || lastCmd === 'T' ? 2 * cy - prevControlY : cy\n const endPt = { x: ox + (args[i] ?? 0), y: oy + (args[i + 1] ?? 0) }\n for (let s = 1; s <= curveSegments; s++) {\n current.push(quadAt(p0, { x: cpx, y: cpy }, endPt, s / curveSegments))\n }\n prevControlX = cpx\n prevControlY = cpy\n lastPt = endPt\n cx = endPt.x\n cy = endPt.y\n lastCmd = 'T'\n i += 2\n }\n break\n }\n case 'A': {\n let i = 0\n while (i + 6 < args.length) {\n const rx = Math.abs(args[i] ?? 0)\n const ry = Math.abs(args[i + 1] ?? 0)\n const largeArc = (args[i + 3] ?? 0) !== 0\n const sweepFlag = (args[i + 4] ?? 0) !== 0\n const x = (isRelative ? cx : 0) + (args[i + 5] ?? 0)\n const y = (isRelative ? cy : 0) + (args[i + 6] ?? 0)\n const from = lastPt ?? { x: cx, y: cy }\n\n if (rx === 0 || ry === 0) {\n // 退化为直线\n const endPt = { x, y }\n current.push(endPt)\n lastPt = endPt\n } else {\n const dx = x - cx\n const dy = y - cy\n const dist = Math.sqrt(dx * dx + dy * dy)\n const endPt = { x, y }\n if (dist < 1e-10) {\n // 完整圆 → 两段半圆(与 brep 链一致)\n const r = Math.max(rx, ry)\n const sweep = sweepFlag ? 1 : -1\n const mid1 = { x: cx - sweep * r, y: cy + sweep * r }\n const opposite = { x: cx, y: cy + 2 * sweep * r }\n const mid2 = { x: cx + sweep * r, y: cy + sweep * r }\n current.push(...sampleArcThrough(from, mid1, opposite, curveSegments))\n current.push(...sampleArcThrough(opposite, mid2, from, curveSegments))\n } else {\n const mid = arcMidPoint(cx, cy, x, y, rx, ry, largeArc, sweepFlag)\n current.push(...sampleArcThrough(from, mid, endPt, curveSegments))\n }\n lastPt = endPt\n }\n cx = x\n cy = y\n i += 7\n }\n break\n }\n case 'Z': {\n // 闭合:若终点 ≠ 起点则补闭合点\n if (subpathStart && lastPt &&\n (Math.abs(subpathStart.x - lastPt.x) > 1e-9 ||\n Math.abs(subpathStart.y - lastPt.y) > 1e-9)) {\n current.push({ x: subpathStart.x, y: subpathStart.y })\n }\n flush(true)\n lastPt = subpathStart\n cx = sx\n cy = sy\n break\n }\n }\n\n if (cmd !== 'S' && cmd !== 'T') {\n lastCmd = cmd\n }\n }\n\n if (current.length > 0) flush(false)\n\n return subpaths\n}\n\n// ─── 几何工具(折线化输出消费;brep 链 svg-to-solid 复用同一实现) ───\n\n/** 可参与嵌套分类的闭合子路径抽象(points 只要 x/y 结构兼容即可)。 */\nexport interface ClassifiableSubpath {\n points: SvgPoint2[]\n bbox: { minX: number; minY: number; maxX: number; maxY: number }\n signedArea: number\n}\n\n/**\n * 计算点集的轴对齐包围盒。\n * @param points - 二维点集(SvgPoint2 结构)。\n * @returns { minX, minY, maxX, maxY } 包围盒。\n */\nexport function computeBBox(points: SvgPoint2[]): { minX: number; minY: number; maxX: number; maxY: number } {\n let minX = Infinity\n let minY = Infinity\n let maxX = -Infinity\n let maxY = -Infinity\n for (const p of points) {\n if (p.x < minX) minX = p.x\n if (p.y < minY) minY = p.y\n if (p.x > maxX) maxX = p.x\n if (p.y > maxY) maxY = p.y\n }\n return { minX, minY, maxX, maxY }\n}\n\n/**\n * Shoelace 有符号面积(SVG 坐标系,Y-down;正/负语义与翻转无关紧要,仅比较绝对值)。\n * @param points - 闭合子路径的顶点序列(首尾不重复亦可,按环序求和)。\n * @returns 有符号面积(×0.5),点数 < 3 返回 0。\n */\nexport function computeSignedArea(points: SvgPoint2[]): number {\n const n = points.length\n if (n < 3) return 0\n let area = 0\n for (let i = 0; i < n; i++) {\n const j = (i + 1) % n\n area += points[i].x * points[j].y - points[j].x * points[i].y\n }\n return area / 2\n}\n\n/**\n * 射线法判断点是否在多边形内部(含边界视为内部由交点奇偶决定)。\n * @param pt - 待测点。\n * @param polygon - 多边形顶点序列(环序)。\n * @returns true 当且仅当点在多边形内部。\n */\nexport function pointInPolygon(pt: SvgPoint2, polygon: SvgPoint2[]): boolean {\n const n = polygon.length\n if (n < 3) return false\n let inside = false\n for (let i = 0, j = n - 1; i < n; j = i++) {\n const xi = polygon[i].x\n const yi = polygon[i].y\n const xj = polygon[j].x\n const yj = polygon[j].y\n const intersect = ((yi > pt.y) !== (yj > pt.y)) &&\n (pt.x < (xj - xi) * (pt.y - yi) / (yj - yi + 1e-12) + xi)\n if (intersect) inside = !inside\n }\n return inside\n}\n\n/**\n * 计算点集的算术平均中心(质心近似,仅用于嵌套分类的层级判断)。\n * @param points - 二维点集。\n * @returns 平均中心点。\n */\nexport function polygonCentroid(points: SvgPoint2[]): SvgPoint2 {\n let cx = 0\n let cy = 0\n for (const p of points) {\n cx += p.x\n cy += p.y\n }\n return { x: cx / points.length, y: cy / points.length }\n}\n\n/**\n * 判断 inner 包围盒是否被 outer 包围盒完全包含(用于子路径嵌套层级预筛)。\n * @param outer - 外层包围盒。\n * @param inner - 内层包围盒。\n * @returns true 当且仅当 inner 落在 outer 内部。\n */\nexport function bboxContains(\n outer: { minX: number; minY: number; maxX: number; maxY: number },\n inner: { minX: number; minY: number; maxX: number; maxY: number },\n): boolean {\n return inner.minX >= outer.minX && inner.maxX <= outer.maxX &&\n inner.minY >= outer.minY && inner.maxY <= outer.maxY\n}\n\n// ─── 孔洞分类(共享核心:点集版与 brep 链 wire 版同源) ───\n\n/**\n * 嵌套分类核心:将闭合子路径分组为外轮廓 + 孔洞(evenodd 语义)。\n *\n * 算法:\n * 1. 按有符号面积绝对值降序排(大轮廓优先)\n * 2. 对每条子路径 A,找到直接包含它的最小外轮廓 B(bbox 包含 + 质心射线法)\n * 3. 按嵌套深度奇偶分组:深度 0 为外轮廓、深度 1 为孔、深度 2 为「孔中岛」\n * (岛是独立的第二层外轮廓,potrace 等导出器会把落在孔洞区域内的装饰子路径\n * 输出为独立闭合子路径,单层模型会将其丢弃导致该区域被错误镂空)、\n * 深度 3 为岛的孔,依此类推。\n *\n * 返回索引分组(sorted 序),由调用方组装为自己的数据结构。\n *\n * @param subpaths - the closed subpaths to classify (any type with points/bbox/signedArea).\n * @returns the nested groups referencing indices into the sorted array.\n */\nexport function classifyNested(subpaths: ClassifiableSubpath[]): { outerIdx: number; holes: number[] }[] {\n const sorted = [...subpaths].sort((a, b) => Math.abs(b.signedArea) - Math.abs(a.signedArea))\n // 排序后各元素在原数组中的索引(恒等 map 会导致面积序 ≠ 原序时索引错位:\n // 文本多字符轮廓按字符顺序进入、按面积排序后 outer/holes 全部张冠李戴)。\n const sortedIndex = subpaths.map((_, i) => i).sort(\n (a, b) => Math.abs(subpaths[b].signedArea) - Math.abs(subpaths[a].signedArea),\n )\n\n const parentOf = new Array(sorted.length).fill(-1)\n for (let i = 0; i < sorted.length; i++) {\n let bestParent = -1\n let bestParentArea = Infinity\n const centroid = polygonCentroid(sorted[i].points)\n for (let j = 0; j < sorted.length; j++) {\n if (i === j) continue\n if (Math.abs(sorted[j].signedArea) <= Math.abs(sorted[i].signedArea)) continue\n if (!bboxContains(sorted[j].bbox, sorted[i].bbox)) continue\n if (!pointInPolygon(centroid, sorted[j].points)) continue\n if (Math.abs(sorted[j].signedArea) < bestParentArea) {\n bestParentArea = Math.abs(sorted[j].signedArea)\n bestParent = j\n }\n }\n parentOf[i] = bestParent\n }\n\n const depthOf = new Array<number>(sorted.length).fill(0)\n for (let i = 0; i < sorted.length; i++) {\n let d = 0\n let p = parentOf[i]\n const seen = new Set<number>()\n while (p !== -1 && !seen.has(p)) {\n seen.add(p)\n d++\n p = parentOf[p]\n }\n depthOf[i] = d\n }\n\n const groups: { outerIdx: number; holes: number[] }[] = []\n const groupIdxOfOuter = new Map<number, number>()\n for (let i = 0; i < sorted.length; i++) {\n if (depthOf[i] % 2 === 0) {\n groupIdxOfOuter.set(i, groups.length)\n groups.push({ outerIdx: sortedIndex[i], holes: [] })\n }\n }\n for (let i = 0; i < sorted.length; i++) {\n if (depthOf[i] % 2 === 1) {\n // 深度 1(或 3/5…):孔,挂到最近的偶数深度祖先所在的 group\n let p = parentOf[i]\n const seen = new Set<number>()\n while (p !== -1 && !seen.has(p)) {\n seen.add(p)\n if (depthOf[p] % 2 === 0) break\n p = parentOf[p]\n }\n const groupIdx = p === -1 ? -1 : (groupIdxOfOuter.get(p) ?? -1)\n if (groupIdx >= 0 && groupIdx < groups.length) {\n groups[groupIdx].holes.push(sortedIndex[i])\n }\n }\n }\n\n return groups\n}\n\n/**\n * 将闭合子路径分类为外轮廓 + 孔洞的分组(点集版,供 mesh 链 `svgPathToContours` 使用)。\n *\n * @param subpaths - the closed subpaths to classify.\n * @returns the outer/hole contour groups.\n */\nexport function classifyContours(subpaths: SvgSubpath[]): { outer: SvgPoint2[]; holes: SvgPoint2[][] }[] {\n const groups = classifyNested(subpaths)\n return groups.map((g) => ({\n outer: subpaths[g.outerIdx].points,\n holes: g.holes.map((h) => subpaths[h].points),\n }))\n}\n\n// ─── 高层:SVG 字符串 → Y-up 轮廓 ───\n\n/**\n * 将 SVG 字符串解析为 Y-up 平面轮廓(供 `extrudeShape` 消费)。\n *\n * 流程:提取元素 → 逐 path 折线化 → 应用 `<g transform>` → Y-down 翻转为 Y-up →\n * evenodd 孔洞分类。退化子路径(开放/面积≈0)被过滤。\n *\n * @param svgText - the raw SVG source text.\n * @param curveSegments - per-curve sampling segments (default 6).\n * @returns the classified contours (Y-up), ready for `extrudeShape`.\n * @throws when the SVG contains no usable closed contour.\n */\nexport function svgPathToContours(svgText: string, curveSegments = 6): Contour[] {\n const pathDs = extractSvgPaths(svgText)\n if (pathDs.length === 0) {\n throw new Error('[svg-path] No path elements found in SVG')\n }\n\n const groupTransform = extractGroupTransform(svgText)\n const allSubpaths: SvgSubpath[] = []\n for (const d of pathDs) {\n for (const sp of parsePathToSubpaths(d, curveSegments)) {\n if (!sp.closed || Math.abs(sp.signedArea) < 1e-9 || sp.points.length < 3) continue\n const pts = groupTransform ? sp.points.map((p) => applySvgTransform(p, groupTransform)) : sp.points\n // 翻转为 Y-up(与 core 世界坐标一致)\n const flipped: SvgPoint2[] = pts.map((p) => ({ x: p.x, y: -p.y }))\n allSubpaths.push({\n points: flipped,\n bbox: computeBBox(flipped),\n signedArea: computeSignedArea(flipped),\n closed: true,\n })\n }\n }\n\n if (allSubpaths.length === 0) {\n throw new Error('[svg-path] No closed contours generated from SVG paths')\n }\n\n const groups = classifyContours(allSubpaths)\n const contours: Contour[] = groups.map((g) => ({\n outer: g.outer as unknown as P2[],\n holes: g.holes.map((h) => h as unknown as P2[]),\n }))\n return contours\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Triangulates a polygon (with optional holes) into triangle vertex indices.
|
|
3
|
+
* Vendored byte-faithful from npm earcut@2.2.4 (ISC license); do not edit the body.
|
|
4
|
+
* @param data - flat coordinate array (dim coordinates per vertex)
|
|
5
|
+
* @param holeIndices - start vertex index of each hole ring, if any
|
|
6
|
+
* @param dim - number of coordinates per vertex (default 2)
|
|
7
|
+
* @returns {number[]} flat triangle index array (3 indices per triangle)
|
|
8
|
+
*/
|
|
9
|
+
declare function earcut(data: any, holeIndices: any, dim: any): number[];
|
|
10
|
+
declare namespace earcut {
|
|
11
|
+
var deviation: (data: any, holeIndices: any, dim: any, triangles: any) => number;
|
|
12
|
+
var flatten: (data: any) => {
|
|
13
|
+
vertices: never[];
|
|
14
|
+
holes: never[];
|
|
15
|
+
dimensions: any;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export default earcut;
|
|
19
|
+
//# sourceMappingURL=earcut.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"earcut.d.ts","sourceRoot":"","sources":["../../src/third-party/earcut.ts"],"names":[],"mappings":"AAuBA;;;;;;;GAOG;AACH,iBAAS,MAAM,CAAC,IAAI,KAAA,EAAE,WAAW,KAAA,EAAE,GAAG,KAAA,GAAG,MAAM,EAAE,CAqChD;kBArCQ,MAAM;;;;;;;;AAqqBf,eAAe,MAAM,CAAC"}
|