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