[{"data":1,"prerenderedAt":1459},["ShallowReactive",2],{"navigation-docsTs":3,"lib-picker-navigation":146,"docsTs-\u002Fts\u002Fmodules\u002Farrangement":429,"docsTs-\u002Fts\u002Fmodules\u002Farrangement-surround":1454},[4],{"title":5,"path":6,"stem":7,"children":8,"page":32},"Ts","\u002Fts","ts",[9,33,100,105,127],{"title":10,"path":11,"stem":12,"children":13,"icon":32},"Getting Started","\u002Fts\u002Fgetting-started","ts\u002F1.getting-started\u002F1.index",[14,17,22,27],{"title":15,"path":11,"stem":12,"icon":16},"Introduction","i-lucide-house",{"title":18,"path":19,"stem":20,"icon":21},"Installation","\u002Fts\u002Fgetting-started\u002Finstallation","ts\u002F1.getting-started\u002F2.installation","i-lucide-download",{"title":23,"path":24,"stem":25,"icon":26},"Live Examples","\u002Fts\u002Fgetting-started\u002Flive-examples","ts\u002F1.getting-started\u002F3.live-examples","i-lucide-play",{"title":28,"path":29,"stem":30,"icon":31},"Release Notes","\u002Fts\u002Fgetting-started\u002Frelease-notes","ts\u002F1.getting-started\u002F4.release-notes","i-lucide-sparkles",false,{"title":34,"path":35,"stem":36,"children":37,"icon":32},"Modules","\u002Fts\u002Fmodules","ts\u002F2.modules\u002F00.index",[38,41,46,51,56,61,66,71,76,81,86,90,95],{"title":39,"path":35,"stem":36,"icon":40},"Overview","i-lucide-library",{"title":42,"path":43,"stem":44,"icon":45},"Core","\u002Fts\u002Fmodules\u002Fcore","ts\u002F2.modules\u002F01.core","i-lucide-atom",{"title":47,"path":48,"stem":49,"icon":50},"Spatial","\u002Fts\u002Fmodules\u002Fspatial","ts\u002F2.modules\u002F02.spatial","i-lucide-scale-3d",{"title":52,"path":53,"stem":54,"icon":55},"Topology","\u002Fts\u002Fmodules\u002Ftopology","ts\u002F2.modules\u002F03.topology","i-lucide-git-graph",{"title":57,"path":58,"stem":59,"icon":60},"Geometry","\u002Fts\u002Fmodules\u002Fgeometry","ts\u002F2.modules\u002F04.geometry","i-lucide-ruler",{"title":62,"path":63,"stem":64,"icon":65},"Remesh","\u002Fts\u002Fmodules\u002Fremesh","ts\u002F2.modules\u002F05.remesh","i-lucide-triangle",{"title":67,"path":68,"stem":69,"icon":70},"Intersect","\u002Fts\u002Fmodules\u002Fintersect","ts\u002F2.modules\u002F06.intersect","i-lucide-squares-intersect",{"title":72,"path":73,"stem":74,"icon":75},"Arrangement","\u002Fts\u002Fmodules\u002Farrangement","ts\u002F2.modules\u002F07.arrangement","i-lucide-scissors",{"title":77,"path":78,"stem":79,"icon":80},"Iso","\u002Fts\u002Fmodules\u002Fiso","ts\u002F2.modules\u002F08.iso","i-lucide-waves",{"title":82,"path":83,"stem":84,"icon":85},"CSG","\u002Fts\u002Fmodules\u002Fcsg","ts\u002F2.modules\u002F09.csg","i-lucide-shapes",{"title":87,"path":88,"stem":89,"icon":31},"Clean","\u002Fts\u002Fmodules\u002Fclean","ts\u002F2.modules\u002F10.clean",{"title":91,"path":92,"stem":93,"icon":94},"Reindex","\u002Fts\u002Fmodules\u002Freindex","ts\u002F2.modules\u002F11.reidx","i-lucide-shuffle",{"title":96,"path":97,"stem":98,"icon":99},"I\u002FO","\u002Fts\u002Fmodules\u002Fio","ts\u002F2.modules\u002F12.io","i-lucide-file-input",{"title":101,"path":102,"stem":103,"icon":104},"Benchmarks","\u002Fts\u002Fbenchmarks","ts\u002F3.benchmarks","i-lucide-chart-bar-stacked",{"title":106,"path":107,"stem":108,"children":109,"icon":32},"Examples","\u002Fts\u002Fexamples","ts\u002F4.examples\u002F0.index",[110,112,117,122],{"title":39,"path":107,"stem":108,"icon":111},"i-lucide-book-open",{"title":113,"path":114,"stem":115,"icon":116},"Core Functionality","\u002Fts\u002Fexamples\u002Fcore-functionality","ts\u002F4.examples\u002F2.core-functionality","i-lucide-code",{"title":118,"path":119,"stem":120,"icon":121},"Alignment","\u002Fts\u002Fexamples\u002Falignment","ts\u002F4.examples\u002F3.alignment","i-lucide-move-3d",{"title":123,"path":124,"stem":125,"icon":126},"Raycast Rendering","\u002Fts\u002Fexamples\u002Fraycast-render","ts\u002F4.examples\u002F4.raycast-render","i-lucide-image",{"title":128,"icon":32,"path":129,"stem":130,"children":131,"page":32},"About","\u002Fts\u002Fabout","ts\u002F5.about",[132,136,141],{"title":133,"path":134,"stem":135,"icon":111},"Research","\u002Fts\u002Fabout\u002Fresearch","ts\u002F5.about\u002F1.research",{"title":137,"path":138,"stem":139,"icon":140},"Contributing","\u002Fts\u002Fabout\u002Fcontributing","ts\u002F5.about\u002F2.contributing","i-lucide-heart-handshake",{"title":142,"path":143,"stem":144,"icon":145},"License","\u002Fts\u002Fabout\u002Flicense","ts\u002F5.about\u002F3.license","i-lucide-file-text",{"cpp":147,"py":276,"ts":393},[148],{"title":149,"path":150,"stem":151,"children":152,"page":32},"Cpp","\u002Fcpp","cpp",[153,167,208,211,234,263],{"title":10,"path":154,"stem":155,"children":156,"icon":32},"\u002Fcpp\u002Fgetting-started","cpp\u002F1.getting-started\u002F1.index",[157,158,161,164],{"title":15,"path":154,"stem":155,"icon":16},{"title":18,"path":159,"stem":160,"icon":21},"\u002Fcpp\u002Fgetting-started\u002Finstallation","cpp\u002F1.getting-started\u002F2.installation",{"title":23,"path":162,"stem":163,"icon":26},"\u002Fcpp\u002Fgetting-started\u002Flive-examples","cpp\u002F1.getting-started\u002F3.live-examples",{"title":28,"path":165,"stem":166,"icon":31},"\u002Fcpp\u002Fgetting-started\u002Frelease-notes","cpp\u002F1.getting-started\u002F4.release-notes",{"title":34,"path":168,"stem":169,"children":170,"icon":32},"\u002Fcpp\u002Fmodules","cpp\u002F2.modules\u002F00.index",[171,172,175,178,181,184,187,190,193,196,199,202,205],{"title":39,"path":168,"stem":169,"icon":40},{"title":42,"path":173,"stem":174,"icon":45},"\u002Fcpp\u002Fmodules\u002Fcore","cpp\u002F2.modules\u002F01.core",{"title":47,"path":176,"stem":177,"icon":50},"\u002Fcpp\u002Fmodules\u002Fspatial","cpp\u002F2.modules\u002F02.spatial",{"title":52,"path":179,"stem":180,"icon":55},"\u002Fcpp\u002Fmodules\u002Ftopology","cpp\u002F2.modules\u002F03.topology",{"title":57,"path":182,"stem":183,"icon":60},"\u002Fcpp\u002Fmodules\u002Fgeometry","cpp\u002F2.modules\u002F04.geometry",{"title":62,"path":185,"stem":186,"icon":65},"\u002Fcpp\u002Fmodules\u002Fremesh","cpp\u002F2.modules\u002F05.remesh",{"title":67,"path":188,"stem":189,"icon":70},"\u002Fcpp\u002Fmodules\u002Fintersect","cpp\u002F2.modules\u002F06.intersect",{"title":72,"path":191,"stem":192,"icon":75},"\u002Fcpp\u002Fmodules\u002Farrangement","cpp\u002F2.modules\u002F07.arrangement",{"title":77,"path":194,"stem":195,"icon":80},"\u002Fcpp\u002Fmodules\u002Fiso","cpp\u002F2.modules\u002F08.iso",{"title":82,"path":197,"stem":198,"icon":85},"\u002Fcpp\u002Fmodules\u002Fcsg","cpp\u002F2.modules\u002F09.csg",{"title":87,"path":200,"stem":201,"icon":31},"\u002Fcpp\u002Fmodules\u002Fclean","cpp\u002F2.modules\u002F10.clean",{"title":91,"path":203,"stem":204,"icon":94},"\u002Fcpp\u002Fmodules\u002Freindex","cpp\u002F2.modules\u002F11.reidx",{"title":96,"path":206,"stem":207,"icon":99},"\u002Fcpp\u002Fmodules\u002Fio","cpp\u002F2.modules\u002F12.io",{"title":101,"path":209,"stem":210,"icon":104},"\u002Fcpp\u002Fbenchmarks","cpp\u002F3.benchmarks",{"title":212,"path":213,"stem":214,"children":215,"icon":32},"VTK","\u002Fcpp\u002Fvtk","cpp\u002F4.vtk\u002F1.index",[216,218,221,226,231],{"title":39,"path":213,"stem":214,"icon":217},"i-lucide-layers",{"title":42,"path":219,"stem":220,"icon":45},"\u002Fcpp\u002Fvtk\u002Fcore","cpp\u002F4.vtk\u002F2.core",{"title":222,"path":223,"stem":224,"icon":225},"Functions","\u002Fcpp\u002Fvtk\u002Ffunctions","cpp\u002F4.vtk\u002F3.functions","i-lucide-function-square",{"title":227,"path":228,"stem":229,"icon":230},"Filters","\u002Fcpp\u002Fvtk\u002Ffilters","cpp\u002F4.vtk\u002F4.filters","i-lucide-filter",{"title":106,"path":232,"stem":233,"icon":26},"\u002Fcpp\u002Fvtk\u002Fexamples","cpp\u002F4.vtk\u002F5.examples",{"title":106,"path":235,"stem":236,"children":237,"icon":32},"\u002Fcpp\u002Fexamples","cpp\u002F5.examples\u002F0.index",[238,239,244,249,254,258],{"title":39,"path":235,"stem":236,"icon":111},{"title":240,"path":241,"stem":242,"icon":243},"Geometry Walkthrough","\u002Fcpp\u002Fexamples\u002Fmesh-assembly","cpp\u002F5.examples\u002F1.mesh-assembly","i-lucide-box",{"title":245,"path":246,"stem":247,"icon":248},"Point Cloud Alignment","\u002Fcpp\u002Fexamples\u002Falignment","cpp\u002F5.examples\u002F2.alignment","i-lucide-move",{"title":250,"path":251,"stem":252,"icon":253},"Booleans and Domains from One Build","\u002Fcpp\u002Fexamples\u002Farrangements","cpp\u002F5.examples\u002F3.arrangements","i-lucide-layers-3",{"title":255,"path":256,"stem":257,"icon":217},"VTK Integration","\u002Fcpp\u002Fexamples\u002Fvtk","cpp\u002F5.examples\u002F4.vtk",{"title":259,"path":260,"stem":261,"icon":262},"Coming from Other Libraries","\u002Fcpp\u002Fexamples\u002Flibrary-comparisons","cpp\u002F5.examples\u002F5.library-comparisons","i-lucide-git-compare",{"title":128,"path":264,"stem":265,"children":266,"page":32},"\u002Fcpp\u002Fabout","cpp\u002F6.about",[267,270,273],{"title":133,"path":268,"stem":269,"icon":111},"\u002Fcpp\u002Fabout\u002Fresearch","cpp\u002F6.about\u002F1.research",{"title":137,"path":271,"stem":272,"icon":140},"\u002Fcpp\u002Fabout\u002Fcontributing","cpp\u002F6.about\u002F2.contributing",{"title":142,"path":274,"stem":275,"icon":145},"\u002Fcpp\u002Fabout\u002Flicense","cpp\u002F6.about\u002F3.license",[277],{"title":278,"path":279,"stem":280,"children":281,"page":32},"Py","\u002Fpy","py",[282,296,337,340,361,380],{"title":10,"path":283,"stem":284,"children":285,"icon":32},"\u002Fpy\u002Fgetting-started","py\u002F1.getting-started\u002F1.index",[286,287,290,293],{"title":15,"path":283,"stem":284,"icon":16},{"title":18,"path":288,"stem":289,"icon":21},"\u002Fpy\u002Fgetting-started\u002Finstallation","py\u002F1.getting-started\u002F2.installation",{"title":23,"path":291,"stem":292,"icon":26},"\u002Fpy\u002Fgetting-started\u002Flive-examples","py\u002F1.getting-started\u002F3.live-examples",{"title":28,"path":294,"stem":295,"icon":31},"\u002Fpy\u002Fgetting-started\u002Frelease-notes","py\u002F1.getting-started\u002F4.release-notes",{"title":34,"path":297,"stem":298,"children":299,"icon":32},"\u002Fpy\u002Fmodules","py\u002F2.modules\u002F00.index",[300,301,304,307,310,313,316,319,322,325,328,331,334],{"title":39,"path":297,"stem":298,"icon":40},{"title":42,"path":302,"stem":303,"icon":45},"\u002Fpy\u002Fmodules\u002Fcore","py\u002F2.modules\u002F01.core",{"title":47,"path":305,"stem":306,"icon":50},"\u002Fpy\u002Fmodules\u002Fspatial","py\u002F2.modules\u002F02.spatial",{"title":52,"path":308,"stem":309,"icon":55},"\u002Fpy\u002Fmodules\u002Ftopology","py\u002F2.modules\u002F03.topology",{"title":57,"path":311,"stem":312,"icon":60},"\u002Fpy\u002Fmodules\u002Fgeometry","py\u002F2.modules\u002F04.geometry",{"title":62,"path":314,"stem":315,"icon":65},"\u002Fpy\u002Fmodules\u002Fremesh","py\u002F2.modules\u002F05.remesh",{"title":67,"path":317,"stem":318,"icon":70},"\u002Fpy\u002Fmodules\u002Fintersect","py\u002F2.modules\u002F06.intersect",{"title":72,"path":320,"stem":321,"icon":75},"\u002Fpy\u002Fmodules\u002Farrangement","py\u002F2.modules\u002F07.arrangement",{"title":77,"path":323,"stem":324,"icon":80},"\u002Fpy\u002Fmodules\u002Fiso","py\u002F2.modules\u002F08.iso",{"title":82,"path":326,"stem":327,"icon":85},"\u002Fpy\u002Fmodules\u002Fcsg","py\u002F2.modules\u002F09.csg",{"title":87,"path":329,"stem":330,"icon":31},"\u002Fpy\u002Fmodules\u002Fclean","py\u002F2.modules\u002F10.clean",{"title":91,"path":332,"stem":333,"icon":94},"\u002Fpy\u002Fmodules\u002Freindex","py\u002F2.modules\u002F11.reidx",{"title":96,"path":335,"stem":336,"icon":99},"\u002Fpy\u002Fmodules\u002Fio","py\u002F2.modules\u002F12.io",{"title":101,"path":338,"stem":339,"icon":104},"\u002Fpy\u002Fbenchmarks","py\u002F3.benchmarks",{"title":341,"path":342,"stem":343,"children":344,"icon":32},"Blender","\u002Fpy\u002Fblender","py\u002F4.blender\u002F1.index",[345,347,352,356],{"title":39,"path":342,"stem":343,"icon":346},"i-vscode-icons:file-type-blender",{"title":348,"path":349,"stem":350,"icon":351},"Convert","\u002Fpy\u002Fblender\u002Fconvert","py\u002F4.blender\u002F2.convert","i-lucide-repeat",{"title":353,"path":354,"stem":355,"icon":217},"Scene","\u002Fpy\u002Fblender\u002Fscene","py\u002F4.blender\u002F3.scene",{"title":357,"path":358,"stem":359,"icon":360},"Plugin Architecture","\u002Fpy\u002Fblender\u002Fplugin","py\u002F4.blender\u002F4.plugin","i-lucide-puzzle",{"title":106,"path":362,"stem":363,"children":364,"icon":32},"\u002Fpy\u002Fexamples","py\u002F5.examples\u002F0.index",[365,366,369,372,376],{"title":39,"path":362,"stem":363,"icon":111},{"title":113,"path":367,"stem":368,"icon":116},"\u002Fpy\u002Fexamples\u002Fcore-functionality","py\u002F5.examples\u002F2.core-functionality",{"title":250,"path":370,"stem":371,"icon":253},"\u002Fpy\u002Fexamples\u002Farrangements","py\u002F5.examples\u002F3.arrangements",{"title":255,"path":373,"stem":374,"icon":375},"\u002Fpy\u002Fexamples\u002Fvtk-integration","py\u002F5.examples\u002F4.vtk-integration","i-lucide-grid-2x2",{"title":123,"path":377,"stem":378,"icon":379},"\u002Fpy\u002Fexamples\u002Fraycast-rendering","py\u002F5.examples\u002F5.raycast-rendering","i-lucide-scan-line",{"title":128,"path":381,"stem":382,"children":383,"page":32},"\u002Fpy\u002Fabout","py\u002F6.about",[384,387,390],{"title":133,"path":385,"stem":386,"icon":111},"\u002Fpy\u002Fabout\u002Fresearch","py\u002F6.about\u002F1.research",{"title":137,"path":388,"stem":389,"icon":140},"\u002Fpy\u002Fabout\u002Fcontributing","py\u002F6.about\u002F2.contributing",{"title":142,"path":391,"stem":392,"icon":145},"\u002Fpy\u002Fabout\u002Flicense","py\u002F6.about\u002F3.license",[394],{"title":5,"path":6,"stem":7,"children":395,"page":32},[396,402,417,418,424],{"title":10,"path":11,"stem":12,"children":397,"icon":32},[398,399,400,401],{"title":15,"path":11,"stem":12,"icon":16},{"title":18,"path":19,"stem":20,"icon":21},{"title":23,"path":24,"stem":25,"icon":26},{"title":28,"path":29,"stem":30,"icon":31},{"title":34,"path":35,"stem":36,"children":403,"icon":32},[404,405,406,407,408,409,410,411,412,413,414,415,416],{"title":39,"path":35,"stem":36,"icon":40},{"title":42,"path":43,"stem":44,"icon":45},{"title":47,"path":48,"stem":49,"icon":50},{"title":52,"path":53,"stem":54,"icon":55},{"title":57,"path":58,"stem":59,"icon":60},{"title":62,"path":63,"stem":64,"icon":65},{"title":67,"path":68,"stem":69,"icon":70},{"title":72,"path":73,"stem":74,"icon":75},{"title":77,"path":78,"stem":79,"icon":80},{"title":82,"path":83,"stem":84,"icon":85},{"title":87,"path":88,"stem":89,"icon":31},{"title":91,"path":92,"stem":93,"icon":94},{"title":96,"path":97,"stem":98,"icon":99},{"title":101,"path":102,"stem":103,"icon":104},{"title":106,"path":107,"stem":108,"children":419,"icon":32},[420,421,422,423],{"title":39,"path":107,"stem":108,"icon":111},{"title":113,"path":114,"stem":115,"icon":116},{"title":118,"path":119,"stem":120,"icon":121},{"title":123,"path":124,"stem":125,"icon":126},{"title":128,"icon":32,"path":129,"stem":130,"children":425,"page":32},[426,427,428],{"title":133,"path":134,"stem":135,"icon":111},{"title":137,"path":138,"stem":139,"icon":140},{"title":142,"path":143,"stem":144,"icon":145},{"id":430,"title":72,"body":431,"description":1446,"extension":1447,"links":1448,"meta":1449,"navigation":1450,"path":73,"seo":1451,"sitemap":1452,"stem":74,"__hash__":1453},"docsTs\u002Fts\u002F2.modules\u002F07.arrangement.md",{"type":432,"value":433,"toc":1437},"minimark",[434,447,492,496,499,515,530,537,546,551,558,598,615,619,622,996,999,1018,1058,1062,1065,1233,1249,1253,1269,1273,1280,1424,1433],[435,436,437,438,441,442,446],"p",{},"The Arrangement module splits meshes along intersection curves, labeling every output face with its provenance. It builds on the ",[439,440,67],"a",{"href":68}," module for computing intersections. All operations are ",[443,444,445],"strong",{},"geometrically and topologically exact",".",[448,449,453],"pre",{"className":450,"code":451,"language":7,"meta":452,"style":452},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import * as tf from \"@polydera\u002Ftrueform\";\n","",[454,455,456],"code",{"__ignoreMap":452},[457,458,461,465,469,472,476,479,482,486,489],"span",{"class":459,"line":460},"line",1,[457,462,464],{"class":463},"s7zQu","import",[457,466,468],{"class":467},"sMK4o"," *",[457,470,471],{"class":463}," as",[457,473,475],{"class":474},"sTEyZ"," tf ",[457,477,478],{"class":463},"from",[457,480,481],{"class":467}," \"",[457,483,485],{"class":484},"sfazB","@polydera\u002Ftrueform",[457,487,488],{"class":467},"\"",[457,490,491],{"class":467},";\n",[493,494,39],"h2",{"id":495},"overview",[435,497,498],{},"The Arrangement module provides operations at several levels:",[500,501,502,509],"ul",{},[503,504,505,508],"li",{},[443,506,507],{},"Mesh arrangements",": Decompose two or more meshes along their mutual intersection curves — the complete intersection problem",[503,510,511,514],{},[443,512,513],{},"Polygon arrangements",": Decompose a mesh at its self-intersection curves",[435,516,517,518,523,524,529],{},"All arrangement operations return ",[443,519,520],{},[454,521,522],{},"faceLabels"," — an array mapping each output face back to the index of the original face it came from in the source mesh. This enables attribute transfer and provenance tracking. Multi-mesh arrangements additionally return ",[443,525,526],{},[454,527,528],{},"tagLabels"," — which input mesh each face belongs to.",[435,531,532,533,536],{},"All arrangement operations support an optional ",[454,534,535],{},"{ returnCurves: true }"," option that additionally returns the intersection curves.",[538,539,540],"tip",{"icon":80},[435,541,542,543,545],{},"To split a mesh along the level sets of a scalar field, see the ",[439,544,77],{"href":78}," module.",[547,548,550],"h3",{"id":549},"supported-input","Supported Input",[435,552,553,554,557],{},"Embedding and arrangement operations inherit the same robustness as the ",[439,555,67],{"href":556},"\u002Fts\u002Fmodules\u002Fintersect#supported-input"," module:",[500,559,560,566,572,578,584],{},[503,561,562,565],{},[443,563,564],{},"Open and closed meshes"," — boundaries are handled correctly",[503,567,568,571],{},[443,569,570],{},"Non-manifold edges"," — edges shared by 3 or more faces",[503,573,574,577],{},[443,575,576],{},"Coplanar faces"," — overlapping faces are classified",[503,579,580,583],{},[443,581,582],{},"Self-intersecting geometry"," — detected and resolved",[503,585,586,589,590,593,594,446],{},[443,587,588],{},"Crossing intersection curves"," — where curves from different mesh pairs meet on a face, crossings can be resolved. Configured via ",[454,591,592],{},"IntersectOpts"," — see ",[439,595,597],{"href":596},"\u002Fts\u002Fmodules\u002Fintersect#intersection-configuration","Intersection Configuration",[599,600,602],"note",{"icon":601},"i-lucide-info",[435,603,604,605,608,609,446],{},"To detect where a ",[443,606,607],{},"single mesh's own polygons intersect each other",", use ",[439,610,612],{"href":611},"#polygon-arrangements",[454,613,614],{},"tf.polygonArrangements",[493,616,618],{"id":617},"mesh-arrangements","Mesh Arrangements",[435,620,621],{},"Decompose intersecting meshes along their intersection curves:",[448,623,625],{"className":450,"code":624,"language":7,"meta":452,"style":452},"const { mesh, tagLabels, faceLabels } = tf.meshArrangements([mesh0, mesh1]);\n\n\u002F\u002F With curves\nconst { mesh, tagLabels, faceLabels, curves } = tf.meshArrangements(\n  [mesh0, mesh1], { returnCurves: true });\n\n\u002F\u002F With explicit mode\nconst { mesh, tagLabels, faceLabels } = tf.meshArrangements(\n  [mesh0, mesh1, mesh2], { mode: \"primitives\", resolveCrossings: true });\n\n\u002F\u002F With tolerance — recover the intended topology on inputs that carry\n\u002F\u002F float-precision drift. See Intersection Configuration.\nconst { mesh, tagLabels, faceLabels } = tf.meshArrangements(\n  [mesh0, mesh1], { tolerance: 1e-6 });\n\n\u002F\u002F Quality-refine the cut surface (Ruppert refinement with negotiated\n\u002F\u002F boundary splits); shared loop boundaries stay watertight by construction.\nconst { mesh, tagLabels, faceLabels } = tf.meshArrangements(\n  [mesh0, mesh1], { triangulation: \"refinedCdt\" });\n",[454,626,627,675,682,689,725,759,764,770,799,845,850,856,862,891,919,924,930,936,965],{"__ignoreMap":452},[457,628,629,633,636,639,642,645,647,650,653,656,659,661,665,668,670,673],{"class":459,"line":460},[457,630,632],{"class":631},"spNyl","const",[457,634,635],{"class":467}," {",[457,637,638],{"class":474}," mesh",[457,640,641],{"class":467},",",[457,643,644],{"class":474}," tagLabels",[457,646,641],{"class":467},[457,648,649],{"class":474}," faceLabels ",[457,651,652],{"class":467},"}",[457,654,655],{"class":467}," =",[457,657,658],{"class":474}," tf",[457,660,446],{"class":467},[457,662,664],{"class":663},"s2Zo4","meshArrangements",[457,666,667],{"class":474},"([mesh0",[457,669,641],{"class":467},[457,671,672],{"class":474}," mesh1])",[457,674,491],{"class":467},[457,676,678],{"class":459,"line":677},2,[457,679,681],{"emptyLinePlaceholder":680},true,"\n",[457,683,685],{"class":459,"line":684},3,[457,686,688],{"class":687},"sHwdD","\u002F\u002F With curves\n",[457,690,692,694,696,698,700,702,704,707,709,712,714,716,718,720,722],{"class":459,"line":691},4,[457,693,632],{"class":631},[457,695,635],{"class":467},[457,697,638],{"class":474},[457,699,641],{"class":467},[457,701,644],{"class":474},[457,703,641],{"class":467},[457,705,706],{"class":474}," faceLabels",[457,708,641],{"class":467},[457,710,711],{"class":474}," curves ",[457,713,652],{"class":467},[457,715,655],{"class":467},[457,717,658],{"class":474},[457,719,446],{"class":467},[457,721,664],{"class":663},[457,723,724],{"class":474},"(\n",[457,726,728,731,733,736,738,740,744,747,751,754,757],{"class":459,"line":727},5,[457,729,730],{"class":474},"  [mesh0",[457,732,641],{"class":467},[457,734,735],{"class":474}," mesh1]",[457,737,641],{"class":467},[457,739,635],{"class":467},[457,741,743],{"class":742},"swJcz"," returnCurves",[457,745,746],{"class":467},":",[457,748,750],{"class":749},"sfNiH"," true",[457,752,753],{"class":467}," }",[457,755,756],{"class":474},")",[457,758,491],{"class":467},[457,760,762],{"class":459,"line":761},6,[457,763,681],{"emptyLinePlaceholder":680},[457,765,767],{"class":459,"line":766},7,[457,768,769],{"class":687},"\u002F\u002F With explicit mode\n",[457,771,773,775,777,779,781,783,785,787,789,791,793,795,797],{"class":459,"line":772},8,[457,774,632],{"class":631},[457,776,635],{"class":467},[457,778,638],{"class":474},[457,780,641],{"class":467},[457,782,644],{"class":474},[457,784,641],{"class":467},[457,786,649],{"class":474},[457,788,652],{"class":467},[457,790,655],{"class":467},[457,792,658],{"class":474},[457,794,446],{"class":467},[457,796,664],{"class":663},[457,798,724],{"class":474},[457,800,802,804,806,809,811,814,816,818,821,823,825,828,830,832,835,837,839,841,843],{"class":459,"line":801},9,[457,803,730],{"class":474},[457,805,641],{"class":467},[457,807,808],{"class":474}," mesh1",[457,810,641],{"class":467},[457,812,813],{"class":474}," mesh2]",[457,815,641],{"class":467},[457,817,635],{"class":467},[457,819,820],{"class":742}," mode",[457,822,746],{"class":467},[457,824,481],{"class":467},[457,826,827],{"class":484},"primitives",[457,829,488],{"class":467},[457,831,641],{"class":467},[457,833,834],{"class":742}," resolveCrossings",[457,836,746],{"class":467},[457,838,750],{"class":749},[457,840,753],{"class":467},[457,842,756],{"class":474},[457,844,491],{"class":467},[457,846,848],{"class":459,"line":847},10,[457,849,681],{"emptyLinePlaceholder":680},[457,851,853],{"class":459,"line":852},11,[457,854,855],{"class":687},"\u002F\u002F With tolerance — recover the intended topology on inputs that carry\n",[457,857,859],{"class":459,"line":858},12,[457,860,861],{"class":687},"\u002F\u002F float-precision drift. See Intersection Configuration.\n",[457,863,865,867,869,871,873,875,877,879,881,883,885,887,889],{"class":459,"line":864},13,[457,866,632],{"class":631},[457,868,635],{"class":467},[457,870,638],{"class":474},[457,872,641],{"class":467},[457,874,644],{"class":474},[457,876,641],{"class":467},[457,878,649],{"class":474},[457,880,652],{"class":467},[457,882,655],{"class":467},[457,884,658],{"class":474},[457,886,446],{"class":467},[457,888,664],{"class":663},[457,890,724],{"class":474},[457,892,894,896,898,900,902,904,907,909,913,915,917],{"class":459,"line":893},14,[457,895,730],{"class":474},[457,897,641],{"class":467},[457,899,735],{"class":474},[457,901,641],{"class":467},[457,903,635],{"class":467},[457,905,906],{"class":742}," tolerance",[457,908,746],{"class":467},[457,910,912],{"class":911},"sbssI"," 1e-6",[457,914,753],{"class":467},[457,916,756],{"class":474},[457,918,491],{"class":467},[457,920,922],{"class":459,"line":921},15,[457,923,681],{"emptyLinePlaceholder":680},[457,925,927],{"class":459,"line":926},16,[457,928,929],{"class":687},"\u002F\u002F Quality-refine the cut surface (Ruppert refinement with negotiated\n",[457,931,933],{"class":459,"line":932},17,[457,934,935],{"class":687},"\u002F\u002F boundary splits); shared loop boundaries stay watertight by construction.\n",[457,937,939,941,943,945,947,949,951,953,955,957,959,961,963],{"class":459,"line":938},18,[457,940,632],{"class":631},[457,942,635],{"class":467},[457,944,638],{"class":474},[457,946,641],{"class":467},[457,948,644],{"class":474},[457,950,641],{"class":467},[457,952,649],{"class":474},[457,954,652],{"class":467},[457,956,655],{"class":467},[457,958,658],{"class":474},[457,960,446],{"class":467},[457,962,664],{"class":663},[457,964,724],{"class":474},[457,966,968,970,972,974,976,978,981,983,985,988,990,992,994],{"class":459,"line":967},19,[457,969,730],{"class":474},[457,971,641],{"class":467},[457,973,735],{"class":474},[457,975,641],{"class":467},[457,977,635],{"class":467},[457,979,980],{"class":742}," triangulation",[457,982,746],{"class":467},[457,984,481],{"class":467},[457,986,987],{"class":484},"refinedCdt",[457,989,488],{"class":467},[457,991,753],{"class":467},[457,993,756],{"class":474},[457,995,491],{"class":467},[435,997,998],{},"Returns:",[500,1000,1001,1011],{},[503,1002,1003,1007,1008,756],{},[443,1004,1005],{},[454,1006,528],{},": Which input mesh each face came from — its index in the input array (",[454,1009,1010],{},"0 … N-1",[503,1012,1013,1017],{},[443,1014,1015],{},[454,1016,522],{},": Index of the original face each output face came from",[435,1019,1020,1021,1024,1025,1028,1029,1032,1033,1036,1037,1040,1041,1024,1044,1047,1048,1051,1052,1055,1056,446],{},"Default: ",[454,1022,1023],{},"mode: \"primitives\"",", ",[454,1026,1027],{},"tolerance: 0"," (exact), ",[454,1030,1031],{},"resolveCrossings"," auto (",[454,1034,1035],{},"true"," for 3+ meshes, ",[454,1038,1039],{},"false"," for 2), ",[454,1042,1043],{},"resolveSelfCrossings: false",[454,1045,1046],{},"within: false"," (set it when a mesh can self-overlap, e.g. meshes concatenated into one input), ",[454,1049,1050],{},"triangulation: \"cdt\""," (plain constrained Delaunay per cut loop; ",[454,1053,1054],{},"\"refinedCdt\""," quality-refines the cut surface). See ",[439,1057,597],{"href":596},[493,1059,1061],{"id":1060},"polygon-arrangements","Polygon Arrangements",[435,1063,1064],{},"Decompose a single mesh at its self-intersection curves:",[448,1066,1068],{"className":450,"code":1067,"language":7,"meta":452,"style":452},"const { mesh: split, faceLabels } = tf.polygonArrangements(mesh);\n\n\u002F\u002F With curves\nconst { mesh: split, faceLabels, curves } = tf.polygonArrangements(mesh, {\n  returnCurves: true,\n});\n\n\u002F\u002F Quality-refine the cut surface\nconst { mesh: split, faceLabels } = tf.polygonArrangements(mesh, {\n  triangulation: \"refinedCdt\",\n});\n",[454,1069,1070,1103,1107,1111,1149,1161,1169,1173,1178,1210,1225],{"__ignoreMap":452},[457,1071,1072,1074,1076,1078,1080,1083,1085,1087,1089,1091,1093,1095,1098,1101],{"class":459,"line":460},[457,1073,632],{"class":631},[457,1075,635],{"class":467},[457,1077,638],{"class":742},[457,1079,746],{"class":467},[457,1081,1082],{"class":474}," split",[457,1084,641],{"class":467},[457,1086,649],{"class":474},[457,1088,652],{"class":467},[457,1090,655],{"class":467},[457,1092,658],{"class":474},[457,1094,446],{"class":467},[457,1096,1097],{"class":663},"polygonArrangements",[457,1099,1100],{"class":474},"(mesh)",[457,1102,491],{"class":467},[457,1104,1105],{"class":459,"line":677},[457,1106,681],{"emptyLinePlaceholder":680},[457,1108,1109],{"class":459,"line":684},[457,1110,688],{"class":687},[457,1112,1113,1115,1117,1119,1121,1123,1125,1127,1129,1131,1133,1135,1137,1139,1141,1144,1146],{"class":459,"line":691},[457,1114,632],{"class":631},[457,1116,635],{"class":467},[457,1118,638],{"class":742},[457,1120,746],{"class":467},[457,1122,1082],{"class":474},[457,1124,641],{"class":467},[457,1126,706],{"class":474},[457,1128,641],{"class":467},[457,1130,711],{"class":474},[457,1132,652],{"class":467},[457,1134,655],{"class":467},[457,1136,658],{"class":474},[457,1138,446],{"class":467},[457,1140,1097],{"class":663},[457,1142,1143],{"class":474},"(mesh",[457,1145,641],{"class":467},[457,1147,1148],{"class":467}," {\n",[457,1150,1151,1154,1156,1158],{"class":459,"line":727},[457,1152,1153],{"class":742},"  returnCurves",[457,1155,746],{"class":467},[457,1157,750],{"class":749},[457,1159,1160],{"class":467},",\n",[457,1162,1163,1165,1167],{"class":459,"line":761},[457,1164,652],{"class":467},[457,1166,756],{"class":474},[457,1168,491],{"class":467},[457,1170,1171],{"class":459,"line":766},[457,1172,681],{"emptyLinePlaceholder":680},[457,1174,1175],{"class":459,"line":772},[457,1176,1177],{"class":687},"\u002F\u002F Quality-refine the cut surface\n",[457,1179,1180,1182,1184,1186,1188,1190,1192,1194,1196,1198,1200,1202,1204,1206,1208],{"class":459,"line":801},[457,1181,632],{"class":631},[457,1183,635],{"class":467},[457,1185,638],{"class":742},[457,1187,746],{"class":467},[457,1189,1082],{"class":474},[457,1191,641],{"class":467},[457,1193,649],{"class":474},[457,1195,652],{"class":467},[457,1197,655],{"class":467},[457,1199,658],{"class":474},[457,1201,446],{"class":467},[457,1203,1097],{"class":663},[457,1205,1143],{"class":474},[457,1207,641],{"class":467},[457,1209,1148],{"class":467},[457,1211,1212,1215,1217,1219,1221,1223],{"class":459,"line":847},[457,1213,1214],{"class":742},"  triangulation",[457,1216,746],{"class":467},[457,1218,481],{"class":467},[457,1220,987],{"class":484},[457,1222,488],{"class":467},[457,1224,1160],{"class":467},[457,1226,1227,1229,1231],{"class":459,"line":852},[457,1228,652],{"class":467},[457,1230,756],{"class":474},[457,1232,491],{"class":467},[435,1234,1020,1235,1024,1237,1024,1240,1024,1243,1245,1246,1248],{},[454,1236,1023],{},[454,1238,1239],{},"resolveCrossings: true",[454,1241,1242],{},"resolveSelfCrossings: true",[454,1244,1050],{}," (",[454,1247,1054],{}," quality-refines the cut surface).",[493,1250,1252],{"id":1251},"boolean-operations","Boolean Operations",[435,1254,1255,1024,1258,1261,1262,1265,1266,545],{},[454,1256,1257],{},"tf.booleanUnion",[454,1259,1260],{},"tf.booleanIntersection"," and ",[454,1263,1264],{},"tf.booleanDifference"," are the two-operand case of the CSG arrangement and live in the ",[439,1267,82],{"href":1268},"\u002Fts\u002Fmodules\u002Fcsg#boolean-operations",[493,1270,1272],{"id":1271},"async","Async",[435,1274,1275,1276,1279],{},"All arrangement functions are available as async variants via ",[454,1277,1278],{},"tf.async",", with the same call shapes:",[448,1281,1283],{"className":450,"code":1282,"language":7,"meta":452,"style":452},"const { mesh, tagLabels, faceLabels } = await tf.async.meshArrangements([mesh0, mesh1]);\nconst { mesh, tagLabels, faceLabels, curves } = await tf.async.meshArrangements(\n  [mesh0, mesh1], { returnCurves: true });\nconst { mesh: split, faceLabels } = await tf.async.polygonArrangements(mesh);\n",[454,1284,1285,1326,1364,1388],{"__ignoreMap":452},[457,1286,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1308,1310,1312,1314,1316,1318,1320,1322,1324],{"class":459,"line":460},[457,1288,632],{"class":631},[457,1290,635],{"class":467},[457,1292,638],{"class":474},[457,1294,641],{"class":467},[457,1296,644],{"class":474},[457,1298,641],{"class":467},[457,1300,649],{"class":474},[457,1302,652],{"class":467},[457,1304,655],{"class":467},[457,1306,1307],{"class":463}," await",[457,1309,658],{"class":474},[457,1311,446],{"class":467},[457,1313,1271],{"class":474},[457,1315,446],{"class":467},[457,1317,664],{"class":663},[457,1319,667],{"class":474},[457,1321,641],{"class":467},[457,1323,672],{"class":474},[457,1325,491],{"class":467},[457,1327,1328,1330,1332,1334,1336,1338,1340,1342,1344,1346,1348,1350,1352,1354,1356,1358,1360,1362],{"class":459,"line":677},[457,1329,632],{"class":631},[457,1331,635],{"class":467},[457,1333,638],{"class":474},[457,1335,641],{"class":467},[457,1337,644],{"class":474},[457,1339,641],{"class":467},[457,1341,706],{"class":474},[457,1343,641],{"class":467},[457,1345,711],{"class":474},[457,1347,652],{"class":467},[457,1349,655],{"class":467},[457,1351,1307],{"class":463},[457,1353,658],{"class":474},[457,1355,446],{"class":467},[457,1357,1271],{"class":474},[457,1359,446],{"class":467},[457,1361,664],{"class":663},[457,1363,724],{"class":474},[457,1365,1366,1368,1370,1372,1374,1376,1378,1380,1382,1384,1386],{"class":459,"line":684},[457,1367,730],{"class":474},[457,1369,641],{"class":467},[457,1371,735],{"class":474},[457,1373,641],{"class":467},[457,1375,635],{"class":467},[457,1377,743],{"class":742},[457,1379,746],{"class":467},[457,1381,750],{"class":749},[457,1383,753],{"class":467},[457,1385,756],{"class":474},[457,1387,491],{"class":467},[457,1389,1390,1392,1394,1396,1398,1400,1402,1404,1406,1408,1410,1412,1414,1416,1418,1420,1422],{"class":459,"line":691},[457,1391,632],{"class":631},[457,1393,635],{"class":467},[457,1395,638],{"class":742},[457,1397,746],{"class":467},[457,1399,1082],{"class":474},[457,1401,641],{"class":467},[457,1403,649],{"class":474},[457,1405,652],{"class":467},[457,1407,655],{"class":467},[457,1409,1307],{"class":463},[457,1411,658],{"class":474},[457,1413,446],{"class":467},[457,1415,1271],{"class":474},[457,1417,446],{"class":467},[457,1419,1097],{"class":663},[457,1421,1100],{"class":474},[457,1423,491],{"class":467},[538,1425,1426],{"icon":601},[435,1427,1428,1429,1432],{},"For implementation details, see the ",[439,1430,1431],{"href":191},"C++ Arrangement"," documentation.",[1434,1435,1436],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":452,"searchDepth":460,"depth":677,"links":1438},[1439,1442,1443,1444,1445],{"id":495,"depth":677,"text":39,"children":1440},[1441],{"id":549,"depth":684,"text":550},{"id":617,"depth":677,"text":618},{"id":1060,"depth":677,"text":1061},{"id":1251,"depth":677,"text":1252},{"id":1271,"depth":677,"text":1272},"Exact mesh arrangements and polygon arrangements.","md",null,{},{"icon":75},{"title":72,"description":1446},{"loc":73},"9VmxDSg7zCVLRna2mBW8Kx8Arv1W2ofEdELYPqIH5Ms",[1455,1457],{"title":67,"path":68,"stem":69,"description":1456,"icon":70,"children":-1},"Exact mesh intersections and self-intersections.",{"title":77,"path":78,"stem":79,"description":1458,"icon":80,"children":-1},"Scalar field isocontours and isobands.",1788524235960]