trimesh-boolean
Advanced tools
+1
-1
| { | ||
| "name": "trimesh-boolean", | ||
| "version": "0.5.2", | ||
| "version": "0.5.3", | ||
| "description": "Triangle mesh boolean operations — supports open surfaces, terrain intersection, and mesh repair", | ||
@@ -5,0 +5,0 @@ "type": "module", |
@@ -130,2 +130,34 @@ /** | ||
| // Translate meshEdgePolys and componentWalks verts back to original coordinates | ||
| function translatePolyVerts(meshEps) { | ||
| if (!meshEps) return; | ||
| var keys = ["A", "B"]; | ||
| for (var ki = 0; ki < keys.length; ki++) { | ||
| var ep = meshEps[keys[ki]]; | ||
| if (!ep || !ep.segments) continue; | ||
| for (var si2 = 0; si2 < ep.segments.length; si2++) { | ||
| var vs = ep.segments[si2].verts; | ||
| if (!vs) continue; | ||
| for (var vi = 0; vi < vs.length; vi++) { | ||
| vs[vi] = { x: vs[vi].x + cx, y: vs[vi].y + cy, z: vs[vi].z + cz }; | ||
| } | ||
| } | ||
| } | ||
| } | ||
| translatePolyVerts(meshEdgePolys); | ||
| // Translate componentWalk verts back | ||
| if (classifyResult.componentWalks) { | ||
| for (var cwi = 0; cwi < classifyResult.componentWalks.length; cwi++) { | ||
| var segs = classifyResult.componentWalks[cwi].segments; | ||
| for (var csi = 0; csi < segs.length; csi++) { | ||
| var cvs = segs[csi].verts; | ||
| if (!cvs) continue; | ||
| for (var cvi = 0; cvi < cvs.length; cvi++) { | ||
| cvs[cvi] = { x: cvs[cvi].x + cx, y: cvs[cvi].y + cy, z: cvs[cvi].z + cz }; | ||
| } | ||
| } | ||
| } | ||
| } | ||
| var result = { | ||
@@ -132,0 +164,0 @@ groups: groups, |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
4805395
0.23%35855
0.26%