[{"data":1,"prerenderedAt":4969},["ShallowReactive",2],{"navigation-docsCpp":3,"lib-picker-navigation":178,"docsCpp-\u002Fcpp\u002Fmodules\u002Farrangement":438,"docsCpp-\u002Fcpp\u002Fmodules\u002Farrangement-surround":4964},[4],{"title":5,"path":6,"stem":7,"children":8,"page":32},"Cpp","\u002Fcpp","cpp",[9,33,100,105,129,159],{"title":10,"path":11,"stem":12,"children":13,"icon":32},"Getting Started","\u002Fcpp\u002Fgetting-started","cpp\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","\u002Fcpp\u002Fgetting-started\u002Finstallation","cpp\u002F1.getting-started\u002F2.installation","i-lucide-download",{"title":23,"path":24,"stem":25,"icon":26},"Live Examples","\u002Fcpp\u002Fgetting-started\u002Flive-examples","cpp\u002F1.getting-started\u002F3.live-examples","i-lucide-play",{"title":28,"path":29,"stem":30,"icon":31},"Release Notes","\u002Fcpp\u002Fgetting-started\u002Frelease-notes","cpp\u002F1.getting-started\u002F4.release-notes","i-lucide-sparkles",false,{"title":34,"path":35,"stem":36,"children":37,"icon":32},"Modules","\u002Fcpp\u002Fmodules","cpp\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","\u002Fcpp\u002Fmodules\u002Fcore","cpp\u002F2.modules\u002F01.core","i-lucide-atom",{"title":47,"path":48,"stem":49,"icon":50},"Spatial","\u002Fcpp\u002Fmodules\u002Fspatial","cpp\u002F2.modules\u002F02.spatial","i-lucide-scale-3d",{"title":52,"path":53,"stem":54,"icon":55},"Topology","\u002Fcpp\u002Fmodules\u002Ftopology","cpp\u002F2.modules\u002F03.topology","i-lucide-git-graph",{"title":57,"path":58,"stem":59,"icon":60},"Geometry","\u002Fcpp\u002Fmodules\u002Fgeometry","cpp\u002F2.modules\u002F04.geometry","i-lucide-ruler",{"title":62,"path":63,"stem":64,"icon":65},"Remesh","\u002Fcpp\u002Fmodules\u002Fremesh","cpp\u002F2.modules\u002F05.remesh","i-lucide-triangle",{"title":67,"path":68,"stem":69,"icon":70},"Intersect","\u002Fcpp\u002Fmodules\u002Fintersect","cpp\u002F2.modules\u002F06.intersect","i-lucide-squares-intersect",{"title":72,"path":73,"stem":74,"icon":75},"Arrangement","\u002Fcpp\u002Fmodules\u002Farrangement","cpp\u002F2.modules\u002F07.arrangement","i-lucide-scissors",{"title":77,"path":78,"stem":79,"icon":80},"Iso","\u002Fcpp\u002Fmodules\u002Fiso","cpp\u002F2.modules\u002F08.iso","i-lucide-waves",{"title":82,"path":83,"stem":84,"icon":85},"CSG","\u002Fcpp\u002Fmodules\u002Fcsg","cpp\u002F2.modules\u002F09.csg","i-lucide-shapes",{"title":87,"path":88,"stem":89,"icon":31},"Clean","\u002Fcpp\u002Fmodules\u002Fclean","cpp\u002F2.modules\u002F10.clean",{"title":91,"path":92,"stem":93,"icon":94},"Reindex","\u002Fcpp\u002Fmodules\u002Freindex","cpp\u002F2.modules\u002F11.reidx","i-lucide-shuffle",{"title":96,"path":97,"stem":98,"icon":99},"I\u002FO","\u002Fcpp\u002Fmodules\u002Fio","cpp\u002F2.modules\u002F12.io","i-lucide-file-input",{"title":101,"path":102,"stem":103,"icon":104},"Benchmarks","\u002Fcpp\u002Fbenchmarks","cpp\u002F3.benchmarks","i-lucide-chart-bar-stacked",{"title":106,"path":107,"stem":108,"children":109,"icon":32},"VTK","\u002Fcpp\u002Fvtk","cpp\u002F4.vtk\u002F1.index",[110,112,115,120,125],{"title":39,"path":107,"stem":108,"icon":111},"i-lucide-layers",{"title":42,"path":113,"stem":114,"icon":45},"\u002Fcpp\u002Fvtk\u002Fcore","cpp\u002F4.vtk\u002F2.core",{"title":116,"path":117,"stem":118,"icon":119},"Functions","\u002Fcpp\u002Fvtk\u002Ffunctions","cpp\u002F4.vtk\u002F3.functions","i-lucide-function-square",{"title":121,"path":122,"stem":123,"icon":124},"Filters","\u002Fcpp\u002Fvtk\u002Ffilters","cpp\u002F4.vtk\u002F4.filters","i-lucide-filter",{"title":126,"path":127,"stem":128,"icon":26},"Examples","\u002Fcpp\u002Fvtk\u002Fexamples","cpp\u002F4.vtk\u002F5.examples",{"title":126,"path":130,"stem":131,"children":132,"icon":32},"\u002Fcpp\u002Fexamples","cpp\u002F5.examples\u002F0.index",[133,135,140,145,150,154],{"title":39,"path":130,"stem":131,"icon":134},"i-lucide-book-open",{"title":136,"path":137,"stem":138,"icon":139},"Geometry Walkthrough","\u002Fcpp\u002Fexamples\u002Fmesh-assembly","cpp\u002F5.examples\u002F1.mesh-assembly","i-lucide-box",{"title":141,"path":142,"stem":143,"icon":144},"Point Cloud Alignment","\u002Fcpp\u002Fexamples\u002Falignment","cpp\u002F5.examples\u002F2.alignment","i-lucide-move",{"title":146,"path":147,"stem":148,"icon":149},"Booleans and Domains from One Build","\u002Fcpp\u002Fexamples\u002Farrangements","cpp\u002F5.examples\u002F3.arrangements","i-lucide-layers-3",{"title":151,"path":152,"stem":153,"icon":111},"VTK Integration","\u002Fcpp\u002Fexamples\u002Fvtk","cpp\u002F5.examples\u002F4.vtk",{"title":155,"path":156,"stem":157,"icon":158},"Coming from Other Libraries","\u002Fcpp\u002Fexamples\u002Flibrary-comparisons","cpp\u002F5.examples\u002F5.library-comparisons","i-lucide-git-compare",{"title":160,"path":161,"stem":162,"children":163,"page":32},"About","\u002Fcpp\u002Fabout","cpp\u002F6.about",[164,168,173],{"title":165,"path":166,"stem":167,"icon":134},"Research","\u002Fcpp\u002Fabout\u002Fresearch","cpp\u002F6.about\u002F1.research",{"title":169,"path":170,"stem":171,"icon":172},"Contributing","\u002Fcpp\u002Fabout\u002Fcontributing","cpp\u002F6.about\u002F2.contributing","i-lucide-heart-handshake",{"title":174,"path":175,"stem":176,"icon":177},"License","\u002Fcpp\u002Fabout\u002Flicense","cpp\u002F6.about\u002F3.license","i-lucide-file-text",{"cpp":179,"py":224,"ts":344},[180],{"title":5,"path":6,"stem":7,"children":181,"page":32},[182,188,203,204,211,219],{"title":10,"path":11,"stem":12,"children":183,"icon":32},[184,185,186,187],{"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":189,"icon":32},[190,191,192,193,194,195,196,197,198,199,200,201,202],{"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":205,"icon":32},[206,207,208,209,210],{"title":39,"path":107,"stem":108,"icon":111},{"title":42,"path":113,"stem":114,"icon":45},{"title":116,"path":117,"stem":118,"icon":119},{"title":121,"path":122,"stem":123,"icon":124},{"title":126,"path":127,"stem":128,"icon":26},{"title":126,"path":130,"stem":131,"children":212,"icon":32},[213,214,215,216,217,218],{"title":39,"path":130,"stem":131,"icon":134},{"title":136,"path":137,"stem":138,"icon":139},{"title":141,"path":142,"stem":143,"icon":144},{"title":146,"path":147,"stem":148,"icon":149},{"title":151,"path":152,"stem":153,"icon":111},{"title":155,"path":156,"stem":157,"icon":158},{"title":160,"path":161,"stem":162,"children":220,"page":32},[221,222,223],{"title":165,"path":166,"stem":167,"icon":134},{"title":169,"path":170,"stem":171,"icon":172},{"title":174,"path":175,"stem":176,"icon":177},[225],{"title":226,"path":227,"stem":228,"children":229,"page":32},"Py","\u002Fpy","py",[230,244,285,288,309,331],{"title":10,"path":231,"stem":232,"children":233,"icon":32},"\u002Fpy\u002Fgetting-started","py\u002F1.getting-started\u002F1.index",[234,235,238,241],{"title":15,"path":231,"stem":232,"icon":16},{"title":18,"path":236,"stem":237,"icon":21},"\u002Fpy\u002Fgetting-started\u002Finstallation","py\u002F1.getting-started\u002F2.installation",{"title":23,"path":239,"stem":240,"icon":26},"\u002Fpy\u002Fgetting-started\u002Flive-examples","py\u002F1.getting-started\u002F3.live-examples",{"title":28,"path":242,"stem":243,"icon":31},"\u002Fpy\u002Fgetting-started\u002Frelease-notes","py\u002F1.getting-started\u002F4.release-notes",{"title":34,"path":245,"stem":246,"children":247,"icon":32},"\u002Fpy\u002Fmodules","py\u002F2.modules\u002F00.index",[248,249,252,255,258,261,264,267,270,273,276,279,282],{"title":39,"path":245,"stem":246,"icon":40},{"title":42,"path":250,"stem":251,"icon":45},"\u002Fpy\u002Fmodules\u002Fcore","py\u002F2.modules\u002F01.core",{"title":47,"path":253,"stem":254,"icon":50},"\u002Fpy\u002Fmodules\u002Fspatial","py\u002F2.modules\u002F02.spatial",{"title":52,"path":256,"stem":257,"icon":55},"\u002Fpy\u002Fmodules\u002Ftopology","py\u002F2.modules\u002F03.topology",{"title":57,"path":259,"stem":260,"icon":60},"\u002Fpy\u002Fmodules\u002Fgeometry","py\u002F2.modules\u002F04.geometry",{"title":62,"path":262,"stem":263,"icon":65},"\u002Fpy\u002Fmodules\u002Fremesh","py\u002F2.modules\u002F05.remesh",{"title":67,"path":265,"stem":266,"icon":70},"\u002Fpy\u002Fmodules\u002Fintersect","py\u002F2.modules\u002F06.intersect",{"title":72,"path":268,"stem":269,"icon":75},"\u002Fpy\u002Fmodules\u002Farrangement","py\u002F2.modules\u002F07.arrangement",{"title":77,"path":271,"stem":272,"icon":80},"\u002Fpy\u002Fmodules\u002Fiso","py\u002F2.modules\u002F08.iso",{"title":82,"path":274,"stem":275,"icon":85},"\u002Fpy\u002Fmodules\u002Fcsg","py\u002F2.modules\u002F09.csg",{"title":87,"path":277,"stem":278,"icon":31},"\u002Fpy\u002Fmodules\u002Fclean","py\u002F2.modules\u002F10.clean",{"title":91,"path":280,"stem":281,"icon":94},"\u002Fpy\u002Fmodules\u002Freindex","py\u002F2.modules\u002F11.reidx",{"title":96,"path":283,"stem":284,"icon":99},"\u002Fpy\u002Fmodules\u002Fio","py\u002F2.modules\u002F12.io",{"title":101,"path":286,"stem":287,"icon":104},"\u002Fpy\u002Fbenchmarks","py\u002F3.benchmarks",{"title":289,"path":290,"stem":291,"children":292,"icon":32},"Blender","\u002Fpy\u002Fblender","py\u002F4.blender\u002F1.index",[293,295,300,304],{"title":39,"path":290,"stem":291,"icon":294},"i-vscode-icons:file-type-blender",{"title":296,"path":297,"stem":298,"icon":299},"Convert","\u002Fpy\u002Fblender\u002Fconvert","py\u002F4.blender\u002F2.convert","i-lucide-repeat",{"title":301,"path":302,"stem":303,"icon":111},"Scene","\u002Fpy\u002Fblender\u002Fscene","py\u002F4.blender\u002F3.scene",{"title":305,"path":306,"stem":307,"icon":308},"Plugin Architecture","\u002Fpy\u002Fblender\u002Fplugin","py\u002F4.blender\u002F4.plugin","i-lucide-puzzle",{"title":126,"path":310,"stem":311,"children":312,"icon":32},"\u002Fpy\u002Fexamples","py\u002F5.examples\u002F0.index",[313,314,319,322,326],{"title":39,"path":310,"stem":311,"icon":134},{"title":315,"path":316,"stem":317,"icon":318},"Core Functionality","\u002Fpy\u002Fexamples\u002Fcore-functionality","py\u002F5.examples\u002F2.core-functionality","i-lucide-code",{"title":146,"path":320,"stem":321,"icon":149},"\u002Fpy\u002Fexamples\u002Farrangements","py\u002F5.examples\u002F3.arrangements",{"title":151,"path":323,"stem":324,"icon":325},"\u002Fpy\u002Fexamples\u002Fvtk-integration","py\u002F5.examples\u002F4.vtk-integration","i-lucide-grid-2x2",{"title":327,"path":328,"stem":329,"icon":330},"Raycast Rendering","\u002Fpy\u002Fexamples\u002Fraycast-rendering","py\u002F5.examples\u002F5.raycast-rendering","i-lucide-scan-line",{"title":160,"path":332,"stem":333,"children":334,"page":32},"\u002Fpy\u002Fabout","py\u002F6.about",[335,338,341],{"title":165,"path":336,"stem":337,"icon":134},"\u002Fpy\u002Fabout\u002Fresearch","py\u002F6.about\u002F1.research",{"title":169,"path":339,"stem":340,"icon":172},"\u002Fpy\u002Fabout\u002Fcontributing","py\u002F6.about\u002F2.contributing",{"title":174,"path":342,"stem":343,"icon":177},"\u002Fpy\u002Fabout\u002Flicense","py\u002F6.about\u002F3.license",[345],{"title":346,"path":347,"stem":348,"children":349,"page":32},"Ts","\u002Fts","ts",[350,364,405,408,425],{"title":10,"path":351,"stem":352,"children":353,"icon":32},"\u002Fts\u002Fgetting-started","ts\u002F1.getting-started\u002F1.index",[354,355,358,361],{"title":15,"path":351,"stem":352,"icon":16},{"title":18,"path":356,"stem":357,"icon":21},"\u002Fts\u002Fgetting-started\u002Finstallation","ts\u002F1.getting-started\u002F2.installation",{"title":23,"path":359,"stem":360,"icon":26},"\u002Fts\u002Fgetting-started\u002Flive-examples","ts\u002F1.getting-started\u002F3.live-examples",{"title":28,"path":362,"stem":363,"icon":31},"\u002Fts\u002Fgetting-started\u002Frelease-notes","ts\u002F1.getting-started\u002F4.release-notes",{"title":34,"path":365,"stem":366,"children":367,"icon":32},"\u002Fts\u002Fmodules","ts\u002F2.modules\u002F00.index",[368,369,372,375,378,381,384,387,390,393,396,399,402],{"title":39,"path":365,"stem":366,"icon":40},{"title":42,"path":370,"stem":371,"icon":45},"\u002Fts\u002Fmodules\u002Fcore","ts\u002F2.modules\u002F01.core",{"title":47,"path":373,"stem":374,"icon":50},"\u002Fts\u002Fmodules\u002Fspatial","ts\u002F2.modules\u002F02.spatial",{"title":52,"path":376,"stem":377,"icon":55},"\u002Fts\u002Fmodules\u002Ftopology","ts\u002F2.modules\u002F03.topology",{"title":57,"path":379,"stem":380,"icon":60},"\u002Fts\u002Fmodules\u002Fgeometry","ts\u002F2.modules\u002F04.geometry",{"title":62,"path":382,"stem":383,"icon":65},"\u002Fts\u002Fmodules\u002Fremesh","ts\u002F2.modules\u002F05.remesh",{"title":67,"path":385,"stem":386,"icon":70},"\u002Fts\u002Fmodules\u002Fintersect","ts\u002F2.modules\u002F06.intersect",{"title":72,"path":388,"stem":389,"icon":75},"\u002Fts\u002Fmodules\u002Farrangement","ts\u002F2.modules\u002F07.arrangement",{"title":77,"path":391,"stem":392,"icon":80},"\u002Fts\u002Fmodules\u002Fiso","ts\u002F2.modules\u002F08.iso",{"title":82,"path":394,"stem":395,"icon":85},"\u002Fts\u002Fmodules\u002Fcsg","ts\u002F2.modules\u002F09.csg",{"title":87,"path":397,"stem":398,"icon":31},"\u002Fts\u002Fmodules\u002Fclean","ts\u002F2.modules\u002F10.clean",{"title":91,"path":400,"stem":401,"icon":94},"\u002Fts\u002Fmodules\u002Freindex","ts\u002F2.modules\u002F11.reidx",{"title":96,"path":403,"stem":404,"icon":99},"\u002Fts\u002Fmodules\u002Fio","ts\u002F2.modules\u002F12.io",{"title":101,"path":406,"stem":407,"icon":104},"\u002Fts\u002Fbenchmarks","ts\u002F3.benchmarks",{"title":126,"path":409,"stem":410,"children":411,"icon":32},"\u002Fts\u002Fexamples","ts\u002F4.examples\u002F0.index",[412,413,416,421],{"title":39,"path":409,"stem":410,"icon":134},{"title":315,"path":414,"stem":415,"icon":318},"\u002Fts\u002Fexamples\u002Fcore-functionality","ts\u002F4.examples\u002F2.core-functionality",{"title":417,"path":418,"stem":419,"icon":420},"Alignment","\u002Fts\u002Fexamples\u002Falignment","ts\u002F4.examples\u002F3.alignment","i-lucide-move-3d",{"title":327,"path":422,"stem":423,"icon":424},"\u002Fts\u002Fexamples\u002Fraycast-render","ts\u002F4.examples\u002F4.raycast-render","i-lucide-image",{"title":160,"icon":32,"path":426,"stem":427,"children":428,"page":32},"\u002Fts\u002Fabout","ts\u002F5.about",[429,432,435],{"title":165,"path":430,"stem":431,"icon":134},"\u002Fts\u002Fabout\u002Fresearch","ts\u002F5.about\u002F1.research",{"title":169,"path":433,"stem":434,"icon":172},"\u002Fts\u002Fabout\u002Fcontributing","ts\u002F5.about\u002F2.contributing",{"title":174,"path":436,"stem":437,"icon":177},"\u002Fts\u002Fabout\u002Flicense","ts\u002F5.about\u002F3.license",{"id":439,"title":72,"body":440,"description":4956,"extension":4957,"links":4958,"meta":4959,"navigation":4960,"path":73,"seo":4961,"sitemap":4962,"stem":74,"__hash__":4963},"docsCpp\u002Fcpp\u002F2.modules\u002F07.arrangement.md",{"type":441,"value":442,"toc":4933},"minimark",[443,456,459,488,492,495,511,526,548,582,597,602,609,648,654,670,674,681,737,895,907,915,919,926,929,1214,1246,1252,1256,1259,1263,1315,1318,1342,1347,1414,1435,1499,1512,1601,1605,1611,1659,1672,1902,1911,1915,1918,2192,2205,2211,2296,2300,2303,2356,2359,2368,2434,2437,2460,2467,2590,2746,2764,2812,2847,2882,2891,2897,3133,3145,3270,3274,3277,3297,3300,3304,3317,3321,3332,3429,3438,3482,3576,3588,3647,3673,3701,3713,3717,3731,3791,3798,3801,3907,3924,3928,3931,3968,3975,4067,4071,4081,4338,4341,4344,4627,4630,4633,4929],[444,445,446,447,450,451,455],"p",{},"The Arrangement module splits meshes and segments along intersection curves and classifies regions. It builds on the ",[448,449,67],"a",{"href":68}," module for computing intersections, then embeds these curves into mesh topology by splitting faces and creating new connectivity. All operations are ",[452,453,454],"strong",{},"geometrically and topologically exact",".",[444,457,458],{},"Include the module with:",[460,461,465],"pre",{"className":462,"code":463,"language":7,"meta":464,"style":464},"language-cpp shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","#include \u003Ctrueform\u002Farrangement.hpp>\n","",[466,467,468],"code",{"__ignoreMap":464},[469,470,473,477,481,485],"span",{"class":471,"line":472},"line",1,[469,474,476],{"class":475},"s7zQu","#include",[469,478,480],{"class":479},"sMK4o"," \u003C",[469,482,484],{"class":483},"sfazB","trueform\u002Farrangement.hpp",[469,486,487],{"class":479},">\n",[489,490,39],"h2",{"id":491},"overview",[444,493,494],{},"The Arrangement module provides operations at several levels:",[496,497,498,505],"ul",{},[499,500,501,504],"li",{},[452,502,503],{},"Mesh arrangements",": Decompose two or more meshes into classified regions — the complete intersection problem",[499,506,507,510],{},[452,508,509],{},"Segment arrangements",": Split 2D or 3D segments at all intersection points",[444,512,513,514,519,520,525],{},"All arrangement operations return a ",[452,515,516],{},[466,517,518],{},"face_labels"," buffer that maps 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 ",[452,521,522],{},[466,523,524],{},"tag_labels"," — which input mesh each face belongs to.",[444,527,528,529,532,533,536,537,540,541,547],{},"The mesh arrangements (",[466,530,531],{},"tf::make_mesh_arrangements",", ",[466,534,535],{},"tf::make_polygon_arrangements",") support an optional ",[466,538,539],{},"tf::return_curves"," parameter that additionally returns the explicit curve geometry as a ",[448,542,544],{"href":543},"\u002Fcpp\u002Fmodules\u002Fcore#curves-buffer",[466,545,546],{},"tf::curves_buffer",". Segment arrangements do not take it.",[444,549,550,551,532,553,555,556,559,560,562,563,565,566,569,570,573,574,577,578,455],{},"The arrangement operations (",[466,552,531],{},[466,554,535],{},") additionally support an optional ",[466,557,558],{},"tf::return_index_map"," parameter. In place of the loose ",[466,561,524],{}," \u002F ",[466,564,518],{}," buffers it returns a single index-map struct that relates both the ",[452,567,568],{},"points"," and ",[452,571,572],{},"faces"," of the output back to the input, plus a ",[452,575,576],{},"forward map"," from each input point to its output index. See ",[448,579,581],{"href":580},"#index-maps","Index Maps",[583,584,586],"tip",{"icon":585},"i-lucide-zap",[444,587,588,589,569,593,455],{},"For repeated computation on the same or moving geometry, build structures once and tag them, or use tagged transformations. See ",[448,590,592],{"href":591},"#with-precomputed-structures","With Precomputed Structures",[448,594,596],{"href":595},"#with-transformations","With Transformations",[598,599,601],"h3",{"id":600},"supported-input","Supported Input",[444,603,604,605,608],{},"Embedding and arrangement operations inherit the same robustness as the ",[448,606,67],{"href":607},"\u002Fcpp\u002Fmodules\u002Fintersect#supported-input"," module:",[496,610,611,617,623,629,635],{},[499,612,613,616],{},[452,614,615],{},"Open and closed meshes"," — boundaries are handled correctly",[499,618,619,622],{},[452,620,621],{},"Non-manifold edges"," — edges shared by 3 or more faces",[499,624,625,628],{},[452,626,627],{},"Coplanar faces"," — overlapping faces are classified (aligned\u002Fopposing boundary)",[499,630,631,634],{},[452,632,633],{},"Self-intersecting geometry"," — detected and resolved",[499,636,637,640,641,647],{},[452,638,639],{},"Crossing intersection curves"," — where curves from different mesh pairs meet on a face, crossings can be resolved by splitting curves at the crossing point. Configured via ",[448,642,644],{"href":643},"\u002Fcpp\u002Fmodules\u002Fintersect#intersection-configuration",[466,645,646],{},"tf::intersect_config","; each function sets appropriate defaults.",[444,649,650,653],{},[452,651,652],{},"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.",[655,656,658],"note",{"icon":657},"i-lucide-info",[444,659,660,661,664,665,455],{},"To detect where a ",[452,662,663],{},"single mesh's own polygons intersect each other",", use ",[448,666,668],{"href":667},"#self-intersection-arrangements",[466,669,535],{},[598,671,673],{"id":672},"coordinate-precision","Coordinate Precision",[444,675,676,677,680],{},"All arrangement operations use exact integer arithmetic internally. The lattice resolution is selected by the ",[466,678,679],{},"Int"," template parameter and resolves automatically from the input coordinate type:",[682,683,684,699],"table",{},[685,686,687],"thead",{},[688,689,690,694],"tr",{},[691,692,693],"th",{},"Input scalar",[691,695,696,697],{},"Resolved ",[466,698,679],{},[700,701,702,715,727],"tbody",{},[688,703,704,710],{},[705,706,707],"td",{},[466,708,709],{},"float",[705,711,712],{},[466,713,714],{},"tf::exact::int32",[688,716,717,722],{},[705,718,719],{},[466,720,721],{},"double",[705,723,724],{},[466,725,726],{},"tf::exact::int64",[688,728,729,732],{},[705,730,731],{},"any other",[705,733,734,736],{},[466,735,714],{}," (fallback)",[460,738,740],{"className":462,"code":739,"language":7,"meta":464,"style":464},"\u002F\u002F Auto-resolved\nauto [mesh, tag_labels, face_labels] = tf::make_mesh_arrangements(\n    mesh1.polygons(), mesh2.polygons());\n\n\u002F\u002F Explicit override\nauto [mesh, tag_labels, face_labels] = tf::make_mesh_arrangements\u003Ctf::exact::int64>(\n    mesh1.polygons(), mesh2.polygons());\n",[466,741,742,748,793,817,824,830,876],{"__ignoreMap":464},[469,743,744],{"class":471,"line":472},[469,745,747],{"class":746},"sHwdD","\u002F\u002F Auto-resolved\n",[469,749,751,755,758,762,765,768,770,773,776,779,783,786,790],{"class":471,"line":750},2,[469,752,754],{"class":753},"spNyl","auto",[469,756,757],{"class":479}," [",[469,759,761],{"class":760},"sTEyZ","mesh",[469,763,764],{"class":479},",",[469,766,767],{"class":760}," tag_labels",[469,769,764],{"class":479},[469,771,772],{"class":760}," face_labels",[469,774,775],{"class":479},"]",[469,777,778],{"class":479}," =",[469,780,782],{"class":781},"sBMFI"," tf",[469,784,785],{"class":479},"::",[469,787,789],{"class":788},"s2Zo4","make_mesh_arrangements",[469,791,792],{"class":479},"(\n",[469,794,796,799,801,804,807,810,812,814],{"class":471,"line":795},3,[469,797,798],{"class":760},"    mesh1",[469,800,455],{"class":479},[469,802,803],{"class":788},"polygons",[469,805,806],{"class":479},"(),",[469,808,809],{"class":760}," mesh2",[469,811,455],{"class":479},[469,813,803],{"class":788},[469,815,816],{"class":479},"());\n",[469,818,820],{"class":471,"line":819},4,[469,821,823],{"emptyLinePlaceholder":822},true,"\n",[469,825,827],{"class":471,"line":826},5,[469,828,829],{"class":746},"\u002F\u002F Explicit override\n",[469,831,833,835,837,839,841,843,845,847,849,851,853,855,857,860,863,865,868,870,873],{"class":471,"line":832},6,[469,834,754],{"class":753},[469,836,757],{"class":479},[469,838,761],{"class":760},[469,840,764],{"class":479},[469,842,767],{"class":760},[469,844,764],{"class":479},[469,846,772],{"class":760},[469,848,775],{"class":479},[469,850,778],{"class":479},[469,852,782],{"class":781},[469,854,785],{"class":479},[469,856,789],{"class":788},[469,858,859],{"class":479},"\u003C",[469,861,862],{"class":781},"tf",[469,864,785],{"class":479},[469,866,867],{"class":781},"exact",[469,869,785],{"class":479},[469,871,872],{"class":781},"int64",[469,874,875],{"class":479},">(\n",[469,877,879,881,883,885,887,889,891,893],{"class":471,"line":878},7,[469,880,798],{"class":760},[469,882,455],{"class":479},[469,884,803],{"class":788},[469,886,806],{"class":479},[469,888,809],{"class":760},[469,890,455],{"class":479},[469,892,803],{"class":788},[469,894,816],{"class":479},[444,896,897,898,532,900,903,904,455],{},"This applies to all arrangement operations: ",[466,899,789],{},[466,901,902],{},"make_polygon_arrangements",", and ",[466,905,906],{},"make_segment_arrangements",[444,908,909,910,914],{},"See ",[448,911,913],{"href":912},"\u002Fcpp\u002Fmodules\u002Fintersect#exact-arithmetic","Intersect: Exact Arithmetic"," for the full precision chain.",[598,916,918],{"id":917},"output-coordinate-type","Output Coordinate Type",[444,920,921,922,925],{},"The output mesh's scalar type is controlled by an optional second template parameter, ",[466,923,924],{},"OutputCoordinateType",". It defaults to the input mesh's real type. Any floating-point type may be supplied.",[444,927,928],{},"The two template parameters can be set independently:",[460,930,932],{"className":462,"code":931,"language":7,"meta":464,"style":464},"\u002F\u002F Both auto: Int from input scalar, output matches input\nauto [mesh, tag_labels, face_labels] = tf::make_mesh_arrangements(\n    float_mesh1.polygons(), float_mesh2.polygons());\n\n\u002F\u002F Explicit Int, output auto (matches input)\nauto [mesh, tag_labels, face_labels] =\n    tf::make_mesh_arrangements\u003Ctf::exact::int64>(\n        float_mesh1.polygons(), float_mesh2.polygons());\n\n\u002F\u002F Auto Int, explicit output type\nauto [mesh, tag_labels, face_labels] =\n    tf::make_mesh_arrangements\u003Ctf::none_t, double>(\n        float_mesh1.polygons(), float_mesh2.polygons());\n\n\u002F\u002F Both explicit\nauto [mesh, tag_labels, face_labels] =\n    tf::make_mesh_arrangements\u003Ctf::exact::int64, double>(\n        float_mesh1.polygons(), float_mesh2.polygons());\n",[466,933,934,939,967,987,991,996,1017,1040,1060,1065,1071,1092,1117,1136,1141,1147,1168,1195],{"__ignoreMap":464},[469,935,936],{"class":471,"line":472},[469,937,938],{"class":746},"\u002F\u002F Both auto: Int from input scalar, output matches input\n",[469,940,941,943,945,947,949,951,953,955,957,959,961,963,965],{"class":471,"line":750},[469,942,754],{"class":753},[469,944,757],{"class":479},[469,946,761],{"class":760},[469,948,764],{"class":479},[469,950,767],{"class":760},[469,952,764],{"class":479},[469,954,772],{"class":760},[469,956,775],{"class":479},[469,958,778],{"class":479},[469,960,782],{"class":781},[469,962,785],{"class":479},[469,964,789],{"class":788},[469,966,792],{"class":479},[469,968,969,972,974,976,978,981,983,985],{"class":471,"line":795},[469,970,971],{"class":760},"    float_mesh1",[469,973,455],{"class":479},[469,975,803],{"class":788},[469,977,806],{"class":479},[469,979,980],{"class":760}," float_mesh2",[469,982,455],{"class":479},[469,984,803],{"class":788},[469,986,816],{"class":479},[469,988,989],{"class":471,"line":819},[469,990,823],{"emptyLinePlaceholder":822},[469,992,993],{"class":471,"line":826},[469,994,995],{"class":746},"\u002F\u002F Explicit Int, output auto (matches input)\n",[469,997,998,1000,1002,1004,1006,1008,1010,1012,1014],{"class":471,"line":832},[469,999,754],{"class":753},[469,1001,757],{"class":479},[469,1003,761],{"class":760},[469,1005,764],{"class":479},[469,1007,767],{"class":760},[469,1009,764],{"class":479},[469,1011,772],{"class":760},[469,1013,775],{"class":479},[469,1015,1016],{"class":479}," =\n",[469,1018,1019,1022,1024,1026,1028,1030,1032,1034,1036,1038],{"class":471,"line":878},[469,1020,1021],{"class":781},"    tf",[469,1023,785],{"class":479},[469,1025,789],{"class":788},[469,1027,859],{"class":479},[469,1029,862],{"class":781},[469,1031,785],{"class":479},[469,1033,867],{"class":781},[469,1035,785],{"class":479},[469,1037,872],{"class":781},[469,1039,875],{"class":479},[469,1041,1043,1046,1048,1050,1052,1054,1056,1058],{"class":471,"line":1042},8,[469,1044,1045],{"class":760},"        float_mesh1",[469,1047,455],{"class":479},[469,1049,803],{"class":788},[469,1051,806],{"class":479},[469,1053,980],{"class":760},[469,1055,455],{"class":479},[469,1057,803],{"class":788},[469,1059,816],{"class":479},[469,1061,1063],{"class":471,"line":1062},9,[469,1064,823],{"emptyLinePlaceholder":822},[469,1066,1068],{"class":471,"line":1067},10,[469,1069,1070],{"class":746},"\u002F\u002F Auto Int, explicit output type\n",[469,1072,1074,1076,1078,1080,1082,1084,1086,1088,1090],{"class":471,"line":1073},11,[469,1075,754],{"class":753},[469,1077,757],{"class":479},[469,1079,761],{"class":760},[469,1081,764],{"class":479},[469,1083,767],{"class":760},[469,1085,764],{"class":479},[469,1087,772],{"class":760},[469,1089,775],{"class":479},[469,1091,1016],{"class":479},[469,1093,1095,1097,1099,1101,1103,1105,1107,1110,1112,1115],{"class":471,"line":1094},12,[469,1096,1021],{"class":781},[469,1098,785],{"class":479},[469,1100,789],{"class":788},[469,1102,859],{"class":479},[469,1104,862],{"class":781},[469,1106,785],{"class":479},[469,1108,1109],{"class":781},"none_t",[469,1111,764],{"class":479},[469,1113,1114],{"class":753}," double",[469,1116,875],{"class":479},[469,1118,1120,1122,1124,1126,1128,1130,1132,1134],{"class":471,"line":1119},13,[469,1121,1045],{"class":760},[469,1123,455],{"class":479},[469,1125,803],{"class":788},[469,1127,806],{"class":479},[469,1129,980],{"class":760},[469,1131,455],{"class":479},[469,1133,803],{"class":788},[469,1135,816],{"class":479},[469,1137,1139],{"class":471,"line":1138},14,[469,1140,823],{"emptyLinePlaceholder":822},[469,1142,1144],{"class":471,"line":1143},15,[469,1145,1146],{"class":746},"\u002F\u002F Both explicit\n",[469,1148,1150,1152,1154,1156,1158,1160,1162,1164,1166],{"class":471,"line":1149},16,[469,1151,754],{"class":753},[469,1153,757],{"class":479},[469,1155,761],{"class":760},[469,1157,764],{"class":479},[469,1159,767],{"class":760},[469,1161,764],{"class":479},[469,1163,772],{"class":760},[469,1165,775],{"class":479},[469,1167,1016],{"class":479},[469,1169,1171,1173,1175,1177,1179,1181,1183,1185,1187,1189,1191,1193],{"class":471,"line":1170},17,[469,1172,1021],{"class":781},[469,1174,785],{"class":479},[469,1176,789],{"class":788},[469,1178,859],{"class":479},[469,1180,862],{"class":781},[469,1182,785],{"class":479},[469,1184,867],{"class":781},[469,1186,785],{"class":479},[469,1188,872],{"class":781},[469,1190,764],{"class":479},[469,1192,1114],{"class":753},[469,1194,875],{"class":479},[469,1196,1198,1200,1202,1204,1206,1208,1210,1212],{"class":471,"line":1197},18,[469,1199,1045],{"class":760},[469,1201,455],{"class":479},[469,1203,803],{"class":788},[469,1205,806],{"class":479},[469,1207,980],{"class":760},[469,1209,455],{"class":479},[469,1211,803],{"class":788},[469,1213,816],{"class":479},[444,1215,1216,1217,1220,1221,1223,1224,1226,1227,1230,1231,1233,1234,1236,1237,1240,1241,1245],{},"The template slots follow one law, on one axis: an entry that ",[452,1218,1219],{},"constructs"," an arrangement takes the lattice ",[466,1222,679],{}," first and ",[466,1225,924],{}," second; an entry that ",[452,1228,1229],{},"reads"," an already-built graph takes only ",[466,1232,924],{},", because the graph's type has already fixed its ",[466,1235,679],{}," and the graph holds the converter. Every arrangement function that takes forms constructs, so both slots apply — pass ",[466,1238,1239],{},"tf::none_t"," in either to keep its default. The reads on a built ",[448,1242,1244],{"href":1243},"#the-arrangement-graph","arrangement graph"," take the output slot alone.",[444,1247,1248,1249,1251],{},"Internally the pipeline carries intersection points at full precision regardless of ",[466,1250,924],{},"; the parameter only governs the coordinate type at output emission.",[489,1253,1255],{"id":1254},"mesh-arrangements","Mesh Arrangements",[444,1257,1258],{},"Mesh arrangements decompose intersecting meshes into classified regions. This is the complete solution to the intersection problem — every region is returned with labels indicating origin and spatial classification.",[598,1260,1262],{"id":1261},"two-mesh-arrangements","Two-Mesh Arrangements",[460,1264,1267],{"className":462,"code":1265,"filename":1266,"language":7,"meta":464,"style":464},"auto [mesh, tag_labels, face_labels] = tf::make_mesh_arrangements(\n    mesh1.polygons(), mesh2.polygons());\n","mesh_arrangements.cpp",[466,1268,1269,1297],{"__ignoreMap":464},[469,1270,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295],{"class":471,"line":472},[469,1272,754],{"class":753},[469,1274,757],{"class":479},[469,1276,761],{"class":760},[469,1278,764],{"class":479},[469,1280,767],{"class":760},[469,1282,764],{"class":479},[469,1284,772],{"class":760},[469,1286,775],{"class":479},[469,1288,778],{"class":479},[469,1290,782],{"class":781},[469,1292,785],{"class":479},[469,1294,789],{"class":788},[469,1296,792],{"class":479},[469,1298,1299,1301,1303,1305,1307,1309,1311,1313],{"class":471,"line":750},[469,1300,798],{"class":760},[469,1302,455],{"class":479},[469,1304,803],{"class":788},[469,1306,806],{"class":479},[469,1308,809],{"class":760},[469,1310,455],{"class":479},[469,1312,803],{"class":788},[469,1314,816],{"class":479},[444,1316,1317],{},"Returns a single merged mesh with per-face labels:",[496,1319,1320,1335],{},[499,1321,1322,1326,1327,1330,1331,1334],{},[452,1323,1324],{},[466,1325,524],{},": Which input mesh each face came from (",[466,1328,1329],{},"0"," or ",[466,1332,1333],{},"1",")",[499,1336,1337,1341],{},[452,1338,1339],{},[466,1340,518],{},": Index of the original face in its source mesh that each output face came from",[444,1343,1344],{},[452,1345,1346],{},"With curves:",[460,1348,1351],{"className":462,"code":1349,"filename":1350,"language":7,"meta":464,"style":464},"auto [mesh, tag_labels, face_labels, curves] = tf::make_mesh_arrangements(\n    mesh1.polygons(), mesh2.polygons(), tf::return_curves);\n","mesh_arrangements_curves.cpp",[466,1352,1353,1386],{"__ignoreMap":464},[469,1354,1355,1357,1359,1361,1363,1365,1367,1369,1371,1374,1376,1378,1380,1382,1384],{"class":471,"line":472},[469,1356,754],{"class":753},[469,1358,757],{"class":479},[469,1360,761],{"class":760},[469,1362,764],{"class":479},[469,1364,767],{"class":760},[469,1366,764],{"class":479},[469,1368,772],{"class":760},[469,1370,764],{"class":479},[469,1372,1373],{"class":760}," curves",[469,1375,775],{"class":479},[469,1377,778],{"class":479},[469,1379,782],{"class":781},[469,1381,785],{"class":479},[469,1383,789],{"class":788},[469,1385,792],{"class":479},[469,1387,1388,1390,1392,1394,1396,1398,1400,1402,1404,1406,1408,1411],{"class":471,"line":750},[469,1389,798],{"class":760},[469,1391,455],{"class":479},[469,1393,803],{"class":788},[469,1395,806],{"class":479},[469,1397,809],{"class":760},[469,1399,455],{"class":479},[469,1401,803],{"class":788},[469,1403,806],{"class":479},[469,1405,782],{"class":781},[469,1407,785],{"class":479},[469,1409,1410],{"class":760},"return_curves",[469,1412,1413],{"class":479},");\n",[444,1415,1416,1417,1420,1421,1424,1425,1428,1429,1330,1432,455],{},"Default mode: the bare ",[466,1418,1419],{},"primitives"," — not ",[466,1422,1423],{},"tf::arrangement_config","'s own ",[466,1426,1427],{},"primitives | resolve_crossing_contours"," default, because the crossing-resolution flag is arity-derived and at two operands it is off. Every contour is then of the one class (A,B); crossings among them — e.g. from disjoint components of one mesh — are resolved by ",[466,1430,1431],{},"resolve_self_crossing_contours",[466,1433,1434],{},"within",[460,1436,1438],{"className":462,"code":1437,"language":7,"meta":464,"style":464},"auto [mesh, tag_labels, face_labels] = tf::make_mesh_arrangements(\n    mesh1.polygons(), mesh2.polygons(), tf::intersect_mode::primitives);\n",[466,1439,1440,1468],{"__ignoreMap":464},[469,1441,1442,1444,1446,1448,1450,1452,1454,1456,1458,1460,1462,1464,1466],{"class":471,"line":472},[469,1443,754],{"class":753},[469,1445,757],{"class":479},[469,1447,761],{"class":760},[469,1449,764],{"class":479},[469,1451,767],{"class":760},[469,1453,764],{"class":479},[469,1455,772],{"class":760},[469,1457,775],{"class":479},[469,1459,778],{"class":479},[469,1461,782],{"class":781},[469,1463,785],{"class":479},[469,1465,789],{"class":788},[469,1467,792],{"class":479},[469,1469,1470,1472,1474,1476,1478,1480,1482,1484,1486,1488,1490,1493,1495,1497],{"class":471,"line":750},[469,1471,798],{"class":760},[469,1473,455],{"class":479},[469,1475,803],{"class":788},[469,1477,806],{"class":479},[469,1479,809],{"class":760},[469,1481,455],{"class":479},[469,1483,803],{"class":788},[469,1485,806],{"class":479},[469,1487,782],{"class":781},[469,1489,785],{"class":479},[469,1491,1492],{"class":781},"intersect_mode",[469,1494,785],{"class":479},[469,1496,1419],{"class":760},[469,1498,1413],{"class":479},[444,1500,1501,1504,1505,1508,1509,455],{},[452,1502,1503],{},"With tolerance:"," to recover the intended topology on inputs that carry float-precision drift, pass an ",[466,1506,1507],{},"intersect_config"," with a non-zero tolerance. See ",[448,1510,1511],{"href":643},"Intersection Configuration",[460,1513,1516],{"className":462,"code":1514,"filename":1515,"language":7,"meta":464,"style":464},"auto [mesh, tag_labels, face_labels] = tf::make_mesh_arrangements(\n    mesh1.polygons(), mesh2.polygons(),\n    tf::intersect_config{tf::intersect_mode::primitives, 1e-6});\n","mesh_arrangements_tolerance.cpp",[466,1517,1518,1546,1565],{"__ignoreMap":464},[469,1519,1520,1522,1524,1526,1528,1530,1532,1534,1536,1538,1540,1542,1544],{"class":471,"line":472},[469,1521,754],{"class":753},[469,1523,757],{"class":479},[469,1525,761],{"class":760},[469,1527,764],{"class":479},[469,1529,767],{"class":760},[469,1531,764],{"class":479},[469,1533,772],{"class":760},[469,1535,775],{"class":479},[469,1537,778],{"class":479},[469,1539,782],{"class":781},[469,1541,785],{"class":479},[469,1543,789],{"class":788},[469,1545,792],{"class":479},[469,1547,1548,1550,1552,1554,1556,1558,1560,1562],{"class":471,"line":750},[469,1549,798],{"class":760},[469,1551,455],{"class":479},[469,1553,803],{"class":788},[469,1555,806],{"class":479},[469,1557,809],{"class":760},[469,1559,455],{"class":479},[469,1561,803],{"class":788},[469,1563,1564],{"class":479},"(),\n",[469,1566,1567,1569,1571,1574,1576,1578,1580,1582,1584,1586,1590,1593,1596,1599],{"class":471,"line":795},[469,1568,1021],{"class":781},[469,1570,785],{"class":479},[469,1572,1573],{"class":760},"intersect_config{",[469,1575,862],{"class":781},[469,1577,785],{"class":479},[469,1579,1492],{"class":781},[469,1581,785],{"class":479},[469,1583,1419],{"class":760},[469,1585,764],{"class":479},[469,1587,1589],{"class":1588},"sbssI"," 1e",[469,1591,1592],{"class":479},"-",[469,1594,1595],{"class":1588},"6",[469,1597,1598],{"class":760},"}",[469,1600,1413],{"class":479},[598,1602,1604],{"id":1603},"arrangement-configuration","Arrangement Configuration",[444,1606,1607,1608,1610],{},"Every arrangement entry point takes a ",[466,1609,1423],{}," — the intersection run plus the triangulation built over the cut surfaces:",[460,1612,1614],{"className":462,"code":1613,"language":7,"meta":464,"style":464},"struct arrangement_config {\n  intersect_config intersect;        \u002F\u002F mode + tolerance\n  triangulation_type triangulation;  \u002F\u002F cdt (default) or refined_cdt\n};\n",[466,1615,1616,1627,1641,1654],{"__ignoreMap":464},[469,1617,1618,1621,1624],{"class":471,"line":472},[469,1619,1620],{"class":753},"struct",[469,1622,1623],{"class":781}," arrangement_config",[469,1625,1626],{"class":479}," {\n",[469,1628,1629,1632,1635,1638],{"class":471,"line":750},[469,1630,1631],{"class":781},"  intersect_config",[469,1633,1634],{"class":760}," intersect",[469,1636,1637],{"class":479},";",[469,1639,1640],{"class":746},"        \u002F\u002F mode + tolerance\n",[469,1642,1643,1646,1649,1651],{"class":471,"line":795},[469,1644,1645],{"class":781},"  triangulation_type",[469,1647,1648],{"class":760}," triangulation",[469,1650,1637],{"class":479},[469,1652,1653],{"class":746},"  \u002F\u002F cdt (default) or refined_cdt\n",[469,1655,1656],{"class":471,"line":819},[469,1657,1658],{"class":479},"};\n",[444,1660,1661,1662,1664,1665,1667,1668,1671],{},"It is implicitly constructible from an ",[466,1663,1507],{},", an ",[466,1666,1492],{},", or a ",[466,1669,1670],{},"triangulation_type"," alone, so a call site spells only the part it cares about:",[460,1673,1676],{"className":462,"code":1674,"filename":1675,"language":7,"meta":464,"style":464},"\u002F\u002F intersect settings only — default cdt triangulation\nauto r0 = tf::make_mesh_arrangements(\n    a.polygons(), b.polygons(),\n    tf::intersect_config{tf::intersect_mode::primitives, 1e-6});\n\n\u002F\u002F quality-refined triangulation, default intersect settings\nauto r1 = tf::make_mesh_arrangements(\n    a.polygons(), b.polygons(), tf::triangulation_type::refined_cdt);\n\n\u002F\u002F both\nauto r2 = tf::make_mesh_arrangements(\n    a.polygons(), b.polygons(),\n    {tf::intersect_config{tf::intersect_mode::primitives, 1e-6},\n     tf::triangulation_type::refined_cdt});\n","arrangement_config.cpp",[466,1677,1678,1683,1701,1721,1751,1755,1760,1777,1808,1812,1817,1834,1852,1886],{"__ignoreMap":464},[469,1679,1680],{"class":471,"line":472},[469,1681,1682],{"class":746},"\u002F\u002F intersect settings only — default cdt triangulation\n",[469,1684,1685,1687,1690,1693,1695,1697,1699],{"class":471,"line":750},[469,1686,754],{"class":753},[469,1688,1689],{"class":760}," r0 ",[469,1691,1692],{"class":479},"=",[469,1694,782],{"class":781},[469,1696,785],{"class":479},[469,1698,789],{"class":788},[469,1700,792],{"class":479},[469,1702,1703,1706,1708,1710,1712,1715,1717,1719],{"class":471,"line":795},[469,1704,1705],{"class":760},"    a",[469,1707,455],{"class":479},[469,1709,803],{"class":788},[469,1711,806],{"class":479},[469,1713,1714],{"class":760}," b",[469,1716,455],{"class":479},[469,1718,803],{"class":788},[469,1720,1564],{"class":479},[469,1722,1723,1725,1727,1729,1731,1733,1735,1737,1739,1741,1743,1745,1747,1749],{"class":471,"line":819},[469,1724,1021],{"class":781},[469,1726,785],{"class":479},[469,1728,1573],{"class":760},[469,1730,862],{"class":781},[469,1732,785],{"class":479},[469,1734,1492],{"class":781},[469,1736,785],{"class":479},[469,1738,1419],{"class":760},[469,1740,764],{"class":479},[469,1742,1589],{"class":1588},[469,1744,1592],{"class":479},[469,1746,1595],{"class":1588},[469,1748,1598],{"class":760},[469,1750,1413],{"class":479},[469,1752,1753],{"class":471,"line":826},[469,1754,823],{"emptyLinePlaceholder":822},[469,1756,1757],{"class":471,"line":832},[469,1758,1759],{"class":746},"\u002F\u002F quality-refined triangulation, default intersect settings\n",[469,1761,1762,1764,1767,1769,1771,1773,1775],{"class":471,"line":878},[469,1763,754],{"class":753},[469,1765,1766],{"class":760}," r1 ",[469,1768,1692],{"class":479},[469,1770,782],{"class":781},[469,1772,785],{"class":479},[469,1774,789],{"class":788},[469,1776,792],{"class":479},[469,1778,1779,1781,1783,1785,1787,1789,1791,1793,1795,1797,1799,1801,1803,1806],{"class":471,"line":1042},[469,1780,1705],{"class":760},[469,1782,455],{"class":479},[469,1784,803],{"class":788},[469,1786,806],{"class":479},[469,1788,1714],{"class":760},[469,1790,455],{"class":479},[469,1792,803],{"class":788},[469,1794,806],{"class":479},[469,1796,782],{"class":781},[469,1798,785],{"class":479},[469,1800,1670],{"class":781},[469,1802,785],{"class":479},[469,1804,1805],{"class":760},"refined_cdt",[469,1807,1413],{"class":479},[469,1809,1810],{"class":471,"line":1062},[469,1811,823],{"emptyLinePlaceholder":822},[469,1813,1814],{"class":471,"line":1067},[469,1815,1816],{"class":746},"\u002F\u002F both\n",[469,1818,1819,1821,1824,1826,1828,1830,1832],{"class":471,"line":1073},[469,1820,754],{"class":753},[469,1822,1823],{"class":760}," r2 ",[469,1825,1692],{"class":479},[469,1827,782],{"class":781},[469,1829,785],{"class":479},[469,1831,789],{"class":788},[469,1833,792],{"class":479},[469,1835,1836,1838,1840,1842,1844,1846,1848,1850],{"class":471,"line":1094},[469,1837,1705],{"class":760},[469,1839,455],{"class":479},[469,1841,803],{"class":788},[469,1843,806],{"class":479},[469,1845,1714],{"class":760},[469,1847,455],{"class":479},[469,1849,803],{"class":788},[469,1851,1564],{"class":479},[469,1853,1854,1857,1859,1861,1863,1865,1867,1869,1871,1873,1875,1877,1879,1881,1883],{"class":471,"line":1119},[469,1855,1856],{"class":760},"    {",[469,1858,862],{"class":781},[469,1860,785],{"class":479},[469,1862,1573],{"class":760},[469,1864,862],{"class":781},[469,1866,785],{"class":479},[469,1868,1492],{"class":781},[469,1870,785],{"class":479},[469,1872,1419],{"class":760},[469,1874,764],{"class":479},[469,1876,1589],{"class":1588},[469,1878,1592],{"class":479},[469,1880,1595],{"class":1588},[469,1882,1598],{"class":760},[469,1884,1885],{"class":479},",\n",[469,1887,1888,1891,1893,1895,1897,1900],{"class":471,"line":1138},[469,1889,1890],{"class":781},"     tf",[469,1892,785],{"class":479},[469,1894,1670],{"class":781},[469,1896,785],{"class":479},[469,1898,1899],{"class":760},"refined_cdt}",[469,1901,1413],{"class":479},[444,1903,1904,1907,1908,455],{},[466,1905,1906],{},"triangulation_type::refined_cdt"," quality-refines the cut surfaces (Ruppert circumcenter insertion with negotiated boundary splits), so shared boundaries stay watertight by construction. Refinement adds Steiner points, so the output carries more vertices and triangles than the plain ",[466,1909,1910],{},"cdt",[598,1912,1914],{"id":1913},"n-mesh-arrangements","N-Mesh Arrangements",[444,1916,1917],{},"Decompose a range of meshes into classified regions:",[460,1919,1922],{"className":462,"code":1920,"filename":1921,"language":7,"meta":464,"style":464},"auto form0 = mesh0.polygons() | tf::tag(f0);\nauto form1 = mesh1.polygons() | tf::tag(f1);\nauto form2 = mesh2.polygons() | tf::tag(f2);\ndecltype(form0) forms[] = {form0, form1, form2};\n\nauto [mesh, tag_labels, face_labels] = tf::make_mesh_arrangements(\n    tf::make_range(forms, forms + 3));\n\n\u002F\u002F With curves\nauto [mesh, tag_labels, face_labels, curves] = tf::make_mesh_arrangements(\n    tf::make_range(forms, forms + 3), tf::return_curves);\n","n_mesh_arrangements.cpp",[466,1923,1924,1961,1994,2026,2060,2064,2092,2120,2124,2129,2161],{"__ignoreMap":464},[469,1925,1926,1928,1931,1933,1936,1938,1940,1943,1946,1948,1950,1953,1956,1959],{"class":471,"line":472},[469,1927,754],{"class":753},[469,1929,1930],{"class":760}," form0 ",[469,1932,1692],{"class":479},[469,1934,1935],{"class":760}," mesh0",[469,1937,455],{"class":479},[469,1939,803],{"class":788},[469,1941,1942],{"class":479},"()",[469,1944,1945],{"class":479}," |",[469,1947,782],{"class":781},[469,1949,785],{"class":479},[469,1951,1952],{"class":788},"tag",[469,1954,1955],{"class":479},"(",[469,1957,1958],{"class":760},"f0",[469,1960,1413],{"class":479},[469,1962,1963,1965,1968,1970,1973,1975,1977,1979,1981,1983,1985,1987,1989,1992],{"class":471,"line":750},[469,1964,754],{"class":753},[469,1966,1967],{"class":760}," form1 ",[469,1969,1692],{"class":479},[469,1971,1972],{"class":760}," mesh1",[469,1974,455],{"class":479},[469,1976,803],{"class":788},[469,1978,1942],{"class":479},[469,1980,1945],{"class":479},[469,1982,782],{"class":781},[469,1984,785],{"class":479},[469,1986,1952],{"class":788},[469,1988,1955],{"class":479},[469,1990,1991],{"class":760},"f1",[469,1993,1413],{"class":479},[469,1995,1996,1998,2001,2003,2005,2007,2009,2011,2013,2015,2017,2019,2021,2024],{"class":471,"line":795},[469,1997,754],{"class":753},[469,1999,2000],{"class":760}," form2 ",[469,2002,1692],{"class":479},[469,2004,809],{"class":760},[469,2006,455],{"class":479},[469,2008,803],{"class":788},[469,2010,1942],{"class":479},[469,2012,1945],{"class":479},[469,2014,782],{"class":781},[469,2016,785],{"class":479},[469,2018,1952],{"class":788},[469,2020,1955],{"class":479},[469,2022,2023],{"class":760},"f2",[469,2025,1413],{"class":479},[469,2027,2028,2031,2033,2036,2038,2041,2043,2046,2048,2050,2053,2055,2058],{"class":471,"line":819},[469,2029,2030],{"class":753},"decltype",[469,2032,1955],{"class":479},[469,2034,2035],{"class":760},"form0",[469,2037,1334],{"class":479},[469,2039,2040],{"class":760}," forms[] ",[469,2042,1692],{"class":479},[469,2044,2045],{"class":479}," {",[469,2047,2035],{"class":760},[469,2049,764],{"class":479},[469,2051,2052],{"class":760}," form1",[469,2054,764],{"class":479},[469,2056,2057],{"class":760}," form2",[469,2059,1658],{"class":479},[469,2061,2062],{"class":471,"line":826},[469,2063,823],{"emptyLinePlaceholder":822},[469,2065,2066,2068,2070,2072,2074,2076,2078,2080,2082,2084,2086,2088,2090],{"class":471,"line":832},[469,2067,754],{"class":753},[469,2069,757],{"class":479},[469,2071,761],{"class":760},[469,2073,764],{"class":479},[469,2075,767],{"class":760},[469,2077,764],{"class":479},[469,2079,772],{"class":760},[469,2081,775],{"class":479},[469,2083,778],{"class":479},[469,2085,782],{"class":781},[469,2087,785],{"class":479},[469,2089,789],{"class":788},[469,2091,792],{"class":479},[469,2093,2094,2096,2098,2101,2103,2106,2108,2111,2114,2117],{"class":471,"line":878},[469,2095,1021],{"class":781},[469,2097,785],{"class":479},[469,2099,2100],{"class":788},"make_range",[469,2102,1955],{"class":479},[469,2104,2105],{"class":760},"forms",[469,2107,764],{"class":479},[469,2109,2110],{"class":760}," forms ",[469,2112,2113],{"class":479},"+",[469,2115,2116],{"class":1588}," 3",[469,2118,2119],{"class":479},"));\n",[469,2121,2122],{"class":471,"line":1042},[469,2123,823],{"emptyLinePlaceholder":822},[469,2125,2126],{"class":471,"line":1062},[469,2127,2128],{"class":746},"\u002F\u002F With curves\n",[469,2130,2131,2133,2135,2137,2139,2141,2143,2145,2147,2149,2151,2153,2155,2157,2159],{"class":471,"line":1067},[469,2132,754],{"class":753},[469,2134,757],{"class":479},[469,2136,761],{"class":760},[469,2138,764],{"class":479},[469,2140,767],{"class":760},[469,2142,764],{"class":479},[469,2144,772],{"class":760},[469,2146,764],{"class":479},[469,2148,1373],{"class":760},[469,2150,775],{"class":479},[469,2152,778],{"class":479},[469,2154,782],{"class":781},[469,2156,785],{"class":479},[469,2158,789],{"class":788},[469,2160,792],{"class":479},[469,2162,2163,2165,2167,2169,2171,2173,2175,2177,2179,2181,2184,2186,2188,2190],{"class":471,"line":1073},[469,2164,1021],{"class":781},[469,2166,785],{"class":479},[469,2168,2100],{"class":788},[469,2170,1955],{"class":479},[469,2172,2105],{"class":760},[469,2174,764],{"class":479},[469,2176,2110],{"class":760},[469,2178,2113],{"class":479},[469,2180,2116],{"class":1588},[469,2182,2183],{"class":479},"),",[469,2185,782],{"class":781},[469,2187,785],{"class":479},[469,2189,1410],{"class":760},[469,2191,1413],{"class":479},[444,2193,2194,2195,2197,2198,2200,2201,2204],{},"The ",[466,2196,524],{}," values range from ",[466,2199,1329],{}," to ",[466,2202,2203],{},"N-1",", indicating which input mesh each face originated from.",[444,2206,2207,2208,2210],{},"Default mode: ",[466,2209,1427],{},". With 3+ meshes, contours from different mesh pairs can cross on a shared face — crossings are resolved by default.",[460,2212,2214],{"className":462,"code":2213,"language":7,"meta":464,"style":464},"auto [mesh, tag_labels, face_labels] = tf::make_mesh_arrangements(\n    tf::make_range(forms, forms + 3),\n    tf::intersect_mode::primitives | tf::intersect_mode::resolve_contours);\n",[466,2215,2216,2244,2267],{"__ignoreMap":464},[469,2217,2218,2220,2222,2224,2226,2228,2230,2232,2234,2236,2238,2240,2242],{"class":471,"line":472},[469,2219,754],{"class":753},[469,2221,757],{"class":479},[469,2223,761],{"class":760},[469,2225,764],{"class":479},[469,2227,767],{"class":760},[469,2229,764],{"class":479},[469,2231,772],{"class":760},[469,2233,775],{"class":479},[469,2235,778],{"class":479},[469,2237,782],{"class":781},[469,2239,785],{"class":479},[469,2241,789],{"class":788},[469,2243,792],{"class":479},[469,2245,2246,2248,2250,2252,2254,2256,2258,2260,2262,2264],{"class":471,"line":750},[469,2247,1021],{"class":781},[469,2249,785],{"class":479},[469,2251,2100],{"class":788},[469,2253,1955],{"class":479},[469,2255,2105],{"class":760},[469,2257,764],{"class":479},[469,2259,2110],{"class":760},[469,2261,2113],{"class":479},[469,2263,2116],{"class":1588},[469,2265,2266],{"class":479},"),\n",[469,2268,2269,2271,2273,2275,2277,2280,2283,2285,2287,2289,2291,2294],{"class":471,"line":795},[469,2270,1021],{"class":781},[469,2272,785],{"class":479},[469,2274,1492],{"class":781},[469,2276,785],{"class":479},[469,2278,2279],{"class":760},"primitives ",[469,2281,2282],{"class":479},"|",[469,2284,782],{"class":781},[469,2286,785],{"class":479},[469,2288,1492],{"class":781},[469,2290,785],{"class":479},[469,2292,2293],{"class":760},"resolve_contours",[469,2295,1413],{"class":479},[598,2297,2299],{"id":2298},"self-intersection-arrangements","Self-Intersection Arrangements",[444,2301,2302],{},"Decompose a single mesh at its self-intersection curves:",[460,2304,2307],{"className":462,"code":2305,"filename":2306,"language":7,"meta":464,"style":464},"auto [mesh, face_labels, curves] = tf::make_polygon_arrangements(\n    merged.polygons(), tf::return_curves);\n","self_arrangements.cpp",[466,2308,2309,2337],{"__ignoreMap":464},[469,2310,2311,2313,2315,2317,2319,2321,2323,2325,2327,2329,2331,2333,2335],{"class":471,"line":472},[469,2312,754],{"class":753},[469,2314,757],{"class":479},[469,2316,761],{"class":760},[469,2318,764],{"class":479},[469,2320,772],{"class":760},[469,2322,764],{"class":479},[469,2324,1373],{"class":760},[469,2326,775],{"class":479},[469,2328,778],{"class":479},[469,2330,782],{"class":781},[469,2332,785],{"class":479},[469,2334,902],{"class":788},[469,2336,792],{"class":479},[469,2338,2339,2342,2344,2346,2348,2350,2352,2354],{"class":471,"line":750},[469,2340,2341],{"class":760},"    merged",[469,2343,455],{"class":479},[469,2345,803],{"class":788},[469,2347,806],{"class":479},[469,2349,782],{"class":781},[469,2351,785],{"class":479},[469,2353,1410],{"class":760},[469,2355,1413],{"class":479},[444,2357,2358],{},"Returns the split mesh with per-face labels identifying connected regions.",[444,2360,2207,2361,2364,2365,2367],{},[466,2362,2363],{},"primitives | resolve_contours | within"," — the self path always\nruns ",[466,2366,1434],{},", and the default spells it so the boundary is visible.",[460,2369,2371],{"className":462,"code":2370,"language":7,"meta":464,"style":464},"auto [mesh, face_labels] = tf::make_polygon_arrangements(\n    merged.polygons(),\n    tf::intersect_mode::primitives | tf::intersect_mode::resolve_crossing_contours);\n",[466,2372,2373,2397,2407],{"__ignoreMap":464},[469,2374,2375,2377,2379,2381,2383,2385,2387,2389,2391,2393,2395],{"class":471,"line":472},[469,2376,754],{"class":753},[469,2378,757],{"class":479},[469,2380,761],{"class":760},[469,2382,764],{"class":479},[469,2384,772],{"class":760},[469,2386,775],{"class":479},[469,2388,778],{"class":479},[469,2390,782],{"class":781},[469,2392,785],{"class":479},[469,2394,902],{"class":788},[469,2396,792],{"class":479},[469,2398,2399,2401,2403,2405],{"class":471,"line":750},[469,2400,2341],{"class":760},[469,2402,455],{"class":479},[469,2404,803],{"class":788},[469,2406,1564],{"class":479},[469,2408,2409,2411,2413,2415,2417,2419,2421,2423,2425,2427,2429,2432],{"class":471,"line":795},[469,2410,1021],{"class":781},[469,2412,785],{"class":479},[469,2414,1492],{"class":781},[469,2416,785],{"class":479},[469,2418,2279],{"class":760},[469,2420,2282],{"class":479},[469,2422,782],{"class":781},[469,2424,785],{"class":479},[469,2426,1492],{"class":781},[469,2428,785],{"class":479},[469,2430,2431],{"class":760},"resolve_crossing_contours",[469,2433,1413],{"class":479},[598,2435,581],{"id":2436},"index-maps",[444,2438,2439,2440,2442,2443,2446,2447,562,2449,2451,2452,569,2454,2456,2457,2459],{},"Passing ",[466,2441,558],{}," to an arrangement returns a single ",[452,2444,2445],{},"index-map struct"," in place of the loose ",[466,2448,524],{},[466,2450,518],{}," buffers. It relates both the ",[452,2453,568],{},[452,2455,572],{}," of the output back to the input, and adds a ",[452,2458,576],{}," from each input point to its output index — everything the operation already computes internally, surfaced instead of discarded.",[444,2461,2462,2463,2466],{},"Two-mesh and N-mesh arrangements return a ",[466,2464,2465],{},"tf::mesh_arrangement_index_map",":",[460,2468,2471],{"className":462,"code":2469,"filename":2470,"language":7,"meta":464,"style":464},"auto [mesh, imap] = tf::make_mesh_arrangements(\n    mesh1.polygons(), mesh2.polygons(), tf::return_index_map);\n\n\u002F\u002F N-mesh: identical struct, tags range 0..N-1\nauto [nmesh, nimap] = tf::make_mesh_arrangements(\n    tf::make_range(forms, forms + 3), tf::return_index_map);\n","index_map.cpp",[466,2472,2473,2498,2525,2529,2534,2560],{"__ignoreMap":464},[469,2474,2475,2477,2479,2481,2483,2486,2488,2490,2492,2494,2496],{"class":471,"line":472},[469,2476,754],{"class":753},[469,2478,757],{"class":479},[469,2480,761],{"class":760},[469,2482,764],{"class":479},[469,2484,2485],{"class":760}," imap",[469,2487,775],{"class":479},[469,2489,778],{"class":479},[469,2491,782],{"class":781},[469,2493,785],{"class":479},[469,2495,789],{"class":788},[469,2497,792],{"class":479},[469,2499,2500,2502,2504,2506,2508,2510,2512,2514,2516,2518,2520,2523],{"class":471,"line":750},[469,2501,798],{"class":760},[469,2503,455],{"class":479},[469,2505,803],{"class":788},[469,2507,806],{"class":479},[469,2509,809],{"class":760},[469,2511,455],{"class":479},[469,2513,803],{"class":788},[469,2515,806],{"class":479},[469,2517,782],{"class":781},[469,2519,785],{"class":479},[469,2521,2522],{"class":760},"return_index_map",[469,2524,1413],{"class":479},[469,2526,2527],{"class":471,"line":795},[469,2528,823],{"emptyLinePlaceholder":822},[469,2530,2531],{"class":471,"line":819},[469,2532,2533],{"class":746},"\u002F\u002F N-mesh: identical struct, tags range 0..N-1\n",[469,2535,2536,2538,2540,2543,2545,2548,2550,2552,2554,2556,2558],{"class":471,"line":826},[469,2537,754],{"class":753},[469,2539,757],{"class":479},[469,2541,2542],{"class":760},"nmesh",[469,2544,764],{"class":479},[469,2546,2547],{"class":760}," nimap",[469,2549,775],{"class":479},[469,2551,778],{"class":479},[469,2553,782],{"class":781},[469,2555,785],{"class":479},[469,2557,789],{"class":788},[469,2559,792],{"class":479},[469,2561,2562,2564,2566,2568,2570,2572,2574,2576,2578,2580,2582,2584,2586,2588],{"class":471,"line":832},[469,2563,1021],{"class":781},[469,2565,785],{"class":479},[469,2567,2100],{"class":788},[469,2569,1955],{"class":479},[469,2571,2105],{"class":760},[469,2573,764],{"class":479},[469,2575,2110],{"class":760},[469,2577,2113],{"class":479},[469,2579,2116],{"class":1588},[469,2581,2183],{"class":479},[469,2583,782],{"class":781},[469,2585,785],{"class":479},[469,2587,2522],{"class":760},[469,2589,1413],{"class":479},[682,2591,2592,2605],{},[685,2593,2594],{},[688,2595,2596,2599,2602],{},[691,2597,2598],{},"Member",[691,2600,2601],{},"Indexed by",[691,2603,2604],{},"Maps to",[700,2606,2607,2627,2642,2655,2666,2683,2701,2718,2733],{},[688,2608,2609,2614,2617],{},[705,2610,2611],{},[466,2612,2613],{},"point_tag_labels",[705,2615,2616],{},"output point",[705,2618,2619,2620,2623,2624],{},"input mesh tag (",[466,2621,2622],{},"0..N-1","); created → ",[466,2625,2626],{},"n_tags",[688,2628,2629,2634,2636],{},[705,2630,2631],{},[466,2632,2633],{},"point_labels",[705,2635,2616],{},[705,2637,2638,2639],{},"input point id within its mesh; created → ",[466,2640,2641],{},"n_output_points",[688,2643,2644,2649,2652],{},[705,2645,2646],{},[466,2647,2648],{},"face_tag_labels",[705,2650,2651],{},"output face",[705,2653,2654],{},"input mesh tag",[688,2656,2657,2661,2663],{},[705,2658,2659],{},[466,2660,518],{},[705,2662,2651],{},[705,2664,2665],{},"input face id within its mesh",[688,2667,2668,2673,2678],{},[705,2669,2670],{},[466,2671,2672],{},"point_f",[705,2674,2675],{},[466,2676,2677],{},"[tag][input point id]",[705,2679,2680,2681],{},"output point index (forward); unmapped → ",[466,2682,2641],{},[688,2684,2685,2690,2695],{},[705,2686,2687],{},[466,2688,2689],{},"uncut_faces",[705,2691,2692],{},[466,2693,2694],{},"[tag]",[705,2696,2697,2700],{},[466,2698,2699],{},"{begin, end}"," output faces of that mesh that stayed uncut — outside them, every face is a piece of a cut face",[688,2702,2703,2708,2711],{},[705,2704,2705],{},[466,2706,2707],{},"n_original_points",[705,2709,2710],{},"—",[705,2712,2713,2714,2717],{},"outputs ",[466,2715,2716],{},"≥"," this are created points",[688,2719,2720,2724,2726],{},[705,2721,2722],{},[466,2723,2626],{},[705,2725,2710],{},[705,2727,2728,2729,2732],{},"number of input meshes; the tag axis ",[466,2730,2731],{},"end"," sentinel",[688,2734,2735,2739,2741],{},[705,2736,2737],{},[466,2738,2641],{},[705,2740,2710],{},[705,2742,2743,2744,2732],{},"total output points; the point-id ",[466,2745,2731],{},[444,2747,2748,2749,2752,2753,532,2755,532,2757,2759,2760,2763],{},"Single-mesh arrangements return a ",[466,2750,2751],{},"tf::polygon_arrangement_index_map"," — the same, minus the tag axis (one mesh): members ",[466,2754,2633],{},[466,2756,518],{},[466,2758,2672],{}," (indexed ",[466,2761,2762],{},"point_f[input point id]","), and the same three boundary fields.",[460,2765,2768],{"className":462,"code":2766,"filename":2767,"language":7,"meta":464,"style":464},"auto [mesh, imap] = tf::make_polygon_arrangements(\n    merged.polygons(), tf::return_index_map);\n","index_map_self.cpp",[466,2769,2770,2794],{"__ignoreMap":464},[469,2771,2772,2774,2776,2778,2780,2782,2784,2786,2788,2790,2792],{"class":471,"line":472},[469,2773,754],{"class":753},[469,2775,757],{"class":479},[469,2777,761],{"class":760},[469,2779,764],{"class":479},[469,2781,2485],{"class":760},[469,2783,775],{"class":479},[469,2785,778],{"class":479},[469,2787,782],{"class":781},[469,2789,785],{"class":479},[469,2791,902],{"class":788},[469,2793,792],{"class":479},[469,2795,2796,2798,2800,2802,2804,2806,2808,2810],{"class":471,"line":750},[469,2797,2341],{"class":760},[469,2799,455],{"class":479},[469,2801,803],{"class":788},[469,2803,806],{"class":479},[469,2805,782],{"class":781},[469,2807,785],{"class":479},[469,2809,2522],{"class":760},[469,2811,1413],{"class":479},[444,2813,2814,2820,2821,2824,2825,2828,2829,2831,2832,2834,2835,2837,2838,2843,2844,2846],{},[452,2815,2816,2817,2819],{},"Created points and the ",[466,2818,2731],{}," sentinel."," Output points split into kept originals ",[466,2822,2823],{},"[0, n_original_points)"," and created intersection points ",[466,2826,2827],{},"[n_original_points, n_output_points)",". A created point has no input origin, so each inverse axis carries an ",[466,2830,2731],{}," sentinel — the tag ends at ",[466,2833,2626],{},", the point id at ",[466,2836,2641],{}," — the same idiom ",[448,2839,2840],{"href":43},[466,2841,2842],{},"tf::index_map"," uses for unmapped entries. Test for one by position or by tag; the point-id sentinel is not reliable, because ",[466,2845,2633],{}," holds an id in its own form's space, which may reach that value:",[460,2848,2850],{"className":462,"code":2849,"language":7,"meta":464,"style":464},"bool is_created = o >= imap.n_original_points;\n\u002F\u002F equivalently (N-mesh):  imap.point_tag_labels[o] == imap.n_tags\n",[466,2851,2852,2877],{"__ignoreMap":464},[469,2853,2854,2857,2860,2862,2865,2868,2870,2872,2874],{"class":471,"line":472},[469,2855,2856],{"class":753},"bool",[469,2858,2859],{"class":760}," is_created ",[469,2861,1692],{"class":479},[469,2863,2864],{"class":760}," o ",[469,2866,2867],{"class":479},">=",[469,2869,2485],{"class":760},[469,2871,455],{"class":479},[469,2873,2707],{"class":760},[469,2875,2876],{"class":479},";\n",[469,2878,2879],{"class":471,"line":750},[469,2880,2881],{"class":746},"\u002F\u002F equivalently (N-mesh):  imap.point_tag_labels[o] == imap.n_tags\n",[444,2883,2884,2885,2887,2888,2890],{},"The forward ",[466,2886,2672],{}," emits ",[466,2889,2641],{}," for any input point with no output. Faces never carry a sentinel — a cut face is a piece of an input face, so it always keeps a real origin.",[444,2892,2893,2896],{},[452,2894,2895],{},"Carrying attributes across an arrangement."," Because the inverse labels are output-indexed and the forward map is input-indexed, per-vertex attributes transfer in a single pass:",[460,2898,2901],{"className":462,"code":2899,"filename":2900,"language":7,"meta":464,"style":464},"auto [mesh, imap] = tf::make_mesh_arrangements(\n    mesh1.polygons(), mesh2.polygons(), tf::return_index_map);\n\nfor (std::size_t o = 0; o \u003C mesh.polygons().points().size(); ++o) {\n    if (int(o) >= imap.n_original_points)\n        continue; \u002F\u002F created point — interpolate from neighbours instead\n    int tag = imap.point_tag_labels[o];\n    int in  = imap.point_labels[o];\n    out_attr[o] = input_attr[tag][in];\n}\n","index_map_attributes.cpp",[466,2902,2903,2927,2953,2957,3016,3044,3054,3078,3100,3128],{"__ignoreMap":464},[469,2904,2905,2907,2909,2911,2913,2915,2917,2919,2921,2923,2925],{"class":471,"line":472},[469,2906,754],{"class":753},[469,2908,757],{"class":479},[469,2910,761],{"class":760},[469,2912,764],{"class":479},[469,2914,2485],{"class":760},[469,2916,775],{"class":479},[469,2918,778],{"class":479},[469,2920,782],{"class":781},[469,2922,785],{"class":479},[469,2924,789],{"class":788},[469,2926,792],{"class":479},[469,2928,2929,2931,2933,2935,2937,2939,2941,2943,2945,2947,2949,2951],{"class":471,"line":750},[469,2930,798],{"class":760},[469,2932,455],{"class":479},[469,2934,803],{"class":788},[469,2936,806],{"class":479},[469,2938,809],{"class":760},[469,2940,455],{"class":479},[469,2942,803],{"class":788},[469,2944,806],{"class":479},[469,2946,782],{"class":781},[469,2948,785],{"class":479},[469,2950,2522],{"class":760},[469,2952,1413],{"class":479},[469,2954,2955],{"class":471,"line":795},[469,2956,823],{"emptyLinePlaceholder":822},[469,2958,2959,2962,2965,2968,2970,2973,2975,2977,2980,2982,2984,2986,2989,2991,2993,2996,2998,3000,3003,3006,3009,3012,3014],{"class":471,"line":819},[469,2960,2961],{"class":475},"for",[469,2963,2964],{"class":479}," (",[469,2966,2967],{"class":781},"std",[469,2969,785],{"class":479},[469,2971,2972],{"class":753},"size_t",[469,2974,2864],{"class":760},[469,2976,1692],{"class":479},[469,2978,2979],{"class":1588}," 0",[469,2981,1637],{"class":479},[469,2983,2864],{"class":760},[469,2985,859],{"class":479},[469,2987,2988],{"class":760}," mesh",[469,2990,455],{"class":479},[469,2992,803],{"class":788},[469,2994,2995],{"class":479},"().",[469,2997,568],{"class":788},[469,2999,2995],{"class":479},[469,3001,3002],{"class":788},"size",[469,3004,3005],{"class":479},"();",[469,3007,3008],{"class":479}," ++",[469,3010,3011],{"class":760},"o",[469,3013,1334],{"class":479},[469,3015,1626],{"class":479},[469,3017,3018,3021,3023,3026,3028,3030,3032,3035,3037,3039,3041],{"class":471,"line":826},[469,3019,3020],{"class":475},"    if",[469,3022,2964],{"class":479},[469,3024,3025],{"class":753},"int",[469,3027,1955],{"class":479},[469,3029,3011],{"class":760},[469,3031,1334],{"class":479},[469,3033,3034],{"class":479}," >=",[469,3036,2485],{"class":760},[469,3038,455],{"class":479},[469,3040,2707],{"class":760},[469,3042,3043],{"class":479},")\n",[469,3045,3046,3049,3051],{"class":471,"line":832},[469,3047,3048],{"class":475},"        continue",[469,3050,1637],{"class":479},[469,3052,3053],{"class":746}," \u002F\u002F created point — interpolate from neighbours instead\n",[469,3055,3056,3059,3062,3064,3066,3068,3070,3073,3075],{"class":471,"line":878},[469,3057,3058],{"class":753},"    int",[469,3060,3061],{"class":760}," tag",[469,3063,778],{"class":479},[469,3065,2485],{"class":760},[469,3067,455],{"class":479},[469,3069,2613],{"class":760},[469,3071,3072],{"class":479},"[",[469,3074,3011],{"class":760},[469,3076,3077],{"class":479},"];\n",[469,3079,3080,3082,3085,3088,3090,3092,3094,3096,3098],{"class":471,"line":1042},[469,3081,3058],{"class":753},[469,3083,3084],{"class":760}," in",[469,3086,3087],{"class":479},"  =",[469,3089,2485],{"class":760},[469,3091,455],{"class":479},[469,3093,2633],{"class":760},[469,3095,3072],{"class":479},[469,3097,3011],{"class":760},[469,3099,3077],{"class":479},[469,3101,3102,3105,3107,3109,3111,3113,3116,3118,3120,3123,3126],{"class":471,"line":1062},[469,3103,3104],{"class":760},"    out_attr",[469,3106,3072],{"class":479},[469,3108,3011],{"class":760},[469,3110,775],{"class":479},[469,3112,778],{"class":479},[469,3114,3115],{"class":760}," input_attr",[469,3117,3072],{"class":479},[469,3119,1952],{"class":760},[469,3121,3122],{"class":479},"][",[469,3124,3125],{"class":760},"in",[469,3127,3077],{"class":479},[469,3129,3130],{"class":471,"line":1067},[469,3131,3132],{"class":479},"}\n",[444,3134,3135,3138,3139,3141,3142,3144],{},[452,3136,3137],{},"Float input, integer output."," As with ",[466,3140,539],{},", when the input is floating-point and ",[466,3143,924],{}," is integral, the converter is appended as a trailing tuple element:",[460,3146,3149],{"className":462,"code":3147,"filename":3148,"language":7,"meta":464,"style":464},"auto [mesh, imap, converter] =\n    tf::make_mesh_arrangements\u003Ctf::none_t, std::int32_t>(\n        mesh1.polygons(), mesh2.polygons(), tf::return_index_map);\n\nauto p = converter.deconvert(mesh.polygons().points()[0]); \u002F\u002F integer point back to float\n","index_map_int.cpp",[466,3150,3151,3172,3200,3227,3231],{"__ignoreMap":464},[469,3152,3153,3155,3157,3159,3161,3163,3165,3168,3170],{"class":471,"line":472},[469,3154,754],{"class":753},[469,3156,757],{"class":479},[469,3158,761],{"class":760},[469,3160,764],{"class":479},[469,3162,2485],{"class":760},[469,3164,764],{"class":479},[469,3166,3167],{"class":760}," converter",[469,3169,775],{"class":479},[469,3171,1016],{"class":479},[469,3173,3174,3176,3178,3180,3182,3184,3186,3188,3190,3193,3195,3198],{"class":471,"line":750},[469,3175,1021],{"class":781},[469,3177,785],{"class":479},[469,3179,789],{"class":788},[469,3181,859],{"class":479},[469,3183,862],{"class":781},[469,3185,785],{"class":479},[469,3187,1109],{"class":781},[469,3189,764],{"class":479},[469,3191,3192],{"class":781}," std",[469,3194,785],{"class":479},[469,3196,3197],{"class":753},"int32_t",[469,3199,875],{"class":479},[469,3201,3202,3205,3207,3209,3211,3213,3215,3217,3219,3221,3223,3225],{"class":471,"line":795},[469,3203,3204],{"class":760},"        mesh1",[469,3206,455],{"class":479},[469,3208,803],{"class":788},[469,3210,806],{"class":479},[469,3212,809],{"class":760},[469,3214,455],{"class":479},[469,3216,803],{"class":788},[469,3218,806],{"class":479},[469,3220,782],{"class":781},[469,3222,785],{"class":479},[469,3224,2522],{"class":760},[469,3226,1413],{"class":479},[469,3228,3229],{"class":471,"line":819},[469,3230,823],{"emptyLinePlaceholder":822},[469,3232,3233,3235,3238,3240,3242,3244,3247,3249,3251,3253,3255,3257,3259,3262,3264,3267],{"class":471,"line":826},[469,3234,754],{"class":753},[469,3236,3237],{"class":760}," p ",[469,3239,1692],{"class":479},[469,3241,3167],{"class":760},[469,3243,455],{"class":479},[469,3245,3246],{"class":788},"deconvert",[469,3248,1955],{"class":479},[469,3250,761],{"class":760},[469,3252,455],{"class":479},[469,3254,803],{"class":788},[469,3256,2995],{"class":479},[469,3258,568],{"class":788},[469,3260,3261],{"class":479},"()[",[469,3263,1329],{"class":1588},[469,3265,3266],{"class":479},"]);",[469,3268,3269],{"class":746}," \u002F\u002F integer point back to float\n",[598,3271,3273],{"id":3272},"relationship-to-boolean-operations","Relationship to Boolean Operations",[444,3275,3276],{},"Mesh arrangements provide the complete decomposition from which any boolean operation can be reconstructed:",[496,3278,3279,3285,3291],{},[499,3280,3281,3284],{},[452,3282,3283],{},"Union (A ∪ B)",": Outside regions from both meshes + aligned boundary",[499,3286,3287,3290],{},[452,3288,3289],{},"Intersection (A ∩ B)",": Inside regions from both meshes + aligned boundary",[499,3292,3293,3296],{},[452,3294,3295],{},"Difference (A \\ B)",": Outside regions from A + inside regions from B with opposing boundary",[444,3298,3299],{},"Use arrangements when you need complete control over region selection, multiple boolean results from the same intersection, or per-region analysis.",[489,3301,3303],{"id":3302},"boolean-operations","Boolean Operations",[444,3305,3306,3309,3310,3313,3314,455],{},[466,3307,3308],{},"tf::make_boolean"," is the two-operand case of the CSG arrangement and lives in the ",[448,3311,82],{"href":3312},"\u002Fcpp\u002Fmodules\u002Fcsg#boolean-operations"," module, exported by ",[466,3315,3316],{},"\u003Ctrueform\u002Fcsg.hpp>",[489,3318,3320],{"id":3319},"the-arrangement-graph","The Arrangement Graph",[444,3322,3323,3324,3327,3328,3331],{},"Every entry point above materialises a mesh. ",[466,3325,3326],{},"tf::make_arrangement_graph"," stops one level short and returns a ",[466,3329,3330],{},"tf::arrangement_graph"," — the arrangement of a set of forms, everything below classification: the intersection identity, the per-plane triangulation, the coplanar stacks, and the unified created-points table. Build it once, then read off it as often as you like — the reads cost no new geometric work.",[460,3333,3336],{"className":462,"code":3334,"filename":3335,"language":7,"meta":464,"style":464},"auto graph = tf::make_arrangement_graph(mesh1.polygons(), mesh2.polygons());\n\nauto surface = tf::make_arrangement_mesh(graph);      \u002F\u002F the full arrangement mesh\nauto curves  = tf::make_intersection_curves(graph);   \u002F\u002F the seam network\n","arrangement_graph.cpp",[466,3337,3338,3373,3377,3404],{"__ignoreMap":464},[469,3339,3340,3342,3345,3347,3349,3351,3354,3356,3359,3361,3363,3365,3367,3369,3371],{"class":471,"line":472},[469,3341,754],{"class":753},[469,3343,3344],{"class":760}," graph ",[469,3346,1692],{"class":479},[469,3348,782],{"class":781},[469,3350,785],{"class":479},[469,3352,3353],{"class":788},"make_arrangement_graph",[469,3355,1955],{"class":479},[469,3357,3358],{"class":760},"mesh1",[469,3360,455],{"class":479},[469,3362,803],{"class":788},[469,3364,806],{"class":479},[469,3366,809],{"class":760},[469,3368,455],{"class":479},[469,3370,803],{"class":788},[469,3372,816],{"class":479},[469,3374,3375],{"class":471,"line":750},[469,3376,823],{"emptyLinePlaceholder":822},[469,3378,3379,3381,3384,3386,3388,3390,3393,3395,3398,3401],{"class":471,"line":795},[469,3380,754],{"class":753},[469,3382,3383],{"class":760}," surface ",[469,3385,1692],{"class":479},[469,3387,782],{"class":781},[469,3389,785],{"class":479},[469,3391,3392],{"class":788},"make_arrangement_mesh",[469,3394,1955],{"class":479},[469,3396,3397],{"class":760},"graph",[469,3399,3400],{"class":479},");",[469,3402,3403],{"class":746},"      \u002F\u002F the full arrangement mesh\n",[469,3405,3406,3408,3411,3413,3415,3417,3420,3422,3424,3426],{"class":471,"line":819},[469,3407,754],{"class":753},[469,3409,3410],{"class":760}," curves  ",[469,3412,1692],{"class":479},[469,3414,782],{"class":781},[469,3416,785],{"class":479},[469,3418,3419],{"class":788},"make_intersection_curves",[469,3421,1955],{"class":479},[469,3423,3397],{"class":760},[469,3425,3400],{"class":479},[469,3427,3428],{"class":746},"   \u002F\u002F the seam network\n",[444,3430,3431,3432,2466],{},"It takes the same operand shapes as ",[448,3433,3435],{"href":3434},"\u002Fcpp\u002Fmodules\u002Fcsg#overview",[466,3436,3437],{},"tf::make_csg_graph",[682,3439,3440,3450],{},[685,3441,3442],{},[688,3443,3444,3447],{},[691,3445,3446],{},"Operands",[691,3448,3449],{},"Meaning",[700,3451,3452,3464,3472],{},[688,3453,3454,3457],{},[705,3455,3456],{},"one form",[705,3458,3459,3460,3463],{},"that form's self arrangement (",[466,3461,3462],{},"tf::intersect_mode::within"," is implied)",[688,3465,3466,3469],{},[705,3467,3468],{},"two forms",[705,3470,3471],{},"a pair, which may be of different form types",[688,3473,3474,3477],{},[705,3475,3476],{},"a range of forms",[705,3478,3479,3480],{},"N operands, tagged ",[466,3481,2622],{},[460,3483,3486],{"className":462,"code":3484,"filename":3485,"language":7,"meta":464,"style":464},"auto self  = tf::make_arrangement_graph(soup.polygons());\nauto pair  = tf::make_arrangement_graph(a.polygons(), b.polygons());\nauto n_ary = tf::make_arrangement_graph(tf::make_range(forms));\n","arrangement_graph_operands.cpp",[466,3487,3488,3514,3547],{"__ignoreMap":464},[469,3489,3490,3492,3495,3497,3499,3501,3503,3505,3508,3510,3512],{"class":471,"line":472},[469,3491,754],{"class":753},[469,3493,3494],{"class":760}," self  ",[469,3496,1692],{"class":479},[469,3498,782],{"class":781},[469,3500,785],{"class":479},[469,3502,3353],{"class":788},[469,3504,1955],{"class":479},[469,3506,3507],{"class":760},"soup",[469,3509,455],{"class":479},[469,3511,803],{"class":788},[469,3513,816],{"class":479},[469,3515,3516,3518,3521,3523,3525,3527,3529,3531,3533,3535,3537,3539,3541,3543,3545],{"class":471,"line":750},[469,3517,754],{"class":753},[469,3519,3520],{"class":760}," pair  ",[469,3522,1692],{"class":479},[469,3524,782],{"class":781},[469,3526,785],{"class":479},[469,3528,3353],{"class":788},[469,3530,1955],{"class":479},[469,3532,448],{"class":760},[469,3534,455],{"class":479},[469,3536,803],{"class":788},[469,3538,806],{"class":479},[469,3540,1714],{"class":760},[469,3542,455],{"class":479},[469,3544,803],{"class":788},[469,3546,816],{"class":479},[469,3548,3549,3551,3554,3556,3558,3560,3562,3564,3566,3568,3570,3572,3574],{"class":471,"line":795},[469,3550,754],{"class":753},[469,3552,3553],{"class":760}," n_ary ",[469,3555,1692],{"class":479},[469,3557,782],{"class":781},[469,3559,785],{"class":479},[469,3561,3353],{"class":788},[469,3563,1955],{"class":479},[469,3565,862],{"class":781},[469,3567,785],{"class":479},[469,3569,2100],{"class":788},[469,3571,1955],{"class":479},[469,3573,2105],{"class":760},[469,3575,2119],{"class":479},[444,3577,3578,3579,3584,3585,3587],{},"Every overload takes an optional ",[448,3580,3582],{"href":3581},"#arrangement-configuration",[466,3583,1423],{}," and the same ",[466,3586,679],{}," template parameter as the arrangement functions:",[460,3589,3591],{"className":462,"code":3590,"language":7,"meta":464,"style":464},"auto graph = tf::make_arrangement_graph\u003Ctf::exact::int64>(\n    tf::make_range(forms), tf::triangulation_type::refined_cdt);\n",[466,3592,3593,3621],{"__ignoreMap":464},[469,3594,3595,3597,3599,3601,3603,3605,3607,3609,3611,3613,3615,3617,3619],{"class":471,"line":472},[469,3596,754],{"class":753},[469,3598,3344],{"class":760},[469,3600,1692],{"class":479},[469,3602,782],{"class":781},[469,3604,785],{"class":479},[469,3606,3353],{"class":788},[469,3608,859],{"class":479},[469,3610,862],{"class":781},[469,3612,785],{"class":479},[469,3614,867],{"class":781},[469,3616,785],{"class":479},[469,3618,872],{"class":781},[469,3620,875],{"class":479},[469,3622,3623,3625,3627,3629,3631,3633,3635,3637,3639,3641,3643,3645],{"class":471,"line":750},[469,3624,1021],{"class":781},[469,3626,785],{"class":479},[469,3628,2100],{"class":788},[469,3630,1955],{"class":479},[469,3632,2105],{"class":760},[469,3634,2183],{"class":479},[469,3636,782],{"class":781},[469,3638,785],{"class":479},[469,3640,1670],{"class":781},[469,3642,785],{"class":479},[469,3644,1805],{"class":760},[469,3646,1413],{"class":479},[444,3648,3649,3650,532,3656,903,3662,3668,3669,3672],{},"Missing ",[448,3651,3653],{"href":3652},"\u002Fcpp\u002Fmodules\u002Ftopology#face-membership",[466,3654,3655],{},"tf::face_membership",[448,3657,3659],{"href":3658},"\u002Fcpp\u002Fmodules\u002Ftopology#manifold-edge-link",[466,3660,3661],{},"tf::manifold_edge_link",[448,3663,3665],{"href":3664},"\u002Fcpp\u002Fmodules\u002Fspatial#tftree",[466,3666,3667],{},"tf::tree"," structures are built in parallel and owned by the graph; a frame is never built, since it states a transformation only the caller knows. A single form or a pair is copied in, but a ",[452,3670,3671],{},"range"," of forms is stored as the view it is — the graph must not outlive the container behind it.",[444,3674,3675,3678,3679,3682,3683,3686,3687,3682,3689,3692,3693,3695,3696,3698,3699,455],{},[466,3676,3677],{},"tf::make_arrangement_mesh(graph)"," materialises the full arrangement mesh, and takes ",[466,3680,3681],{},"tf::return_source_ids"," for the ",[466,3684,3685],{},"(tag_labels, face_labels)"," provenance pair or ",[466,3688,558],{},[448,3690,3691],{"href":580},"index map"," — the same shapes ",[466,3694,531],{}," returns, without re-running the pipeline. A one-form graph has no tag axis: ",[466,3697,3681],{}," gives the face ids alone, and the map is a ",[466,3700,2751],{},[444,3702,3703,3704,3706,3707,3712],{},"The graph is classification-free. Boolean expressions, domain decomposition, and the outer shell are the ",[448,3705,82],{"href":83}," module's tier — build a ",[448,3708,3709],{"href":3434},[466,3710,3711],{},"tf::csg_graph"," for those.",[489,3714,3716],{"id":3715},"intersection-curves","Intersection Curves",[444,3718,3719,3722,3723,3726,3727,2466],{},[466,3720,3721],{},"tf::make_intersection_curves(graph)"," reads the ",[452,3724,3725],{},"seam network"," off an arrangement — the polylines where surfaces cross — as a ",[448,3728,3729],{"href":543},[466,3730,546],{},[460,3732,3735],{"className":462,"code":3733,"filename":3734,"language":7,"meta":464,"style":464},"auto graph  = tf::make_arrangement_graph(mesh1.polygons(), mesh2.polygons());\nauto curves = tf::make_intersection_curves(graph);\n","arrangement_curves.cpp",[466,3736,3737,3770],{"__ignoreMap":464},[469,3738,3739,3741,3744,3746,3748,3750,3752,3754,3756,3758,3760,3762,3764,3766,3768],{"class":471,"line":472},[469,3740,754],{"class":753},[469,3742,3743],{"class":760}," graph  ",[469,3745,1692],{"class":479},[469,3747,782],{"class":781},[469,3749,785],{"class":479},[469,3751,3353],{"class":788},[469,3753,1955],{"class":479},[469,3755,3358],{"class":760},[469,3757,455],{"class":479},[469,3759,803],{"class":788},[469,3761,806],{"class":479},[469,3763,809],{"class":760},[469,3765,455],{"class":479},[469,3767,803],{"class":788},[469,3769,816],{"class":479},[469,3771,3772,3774,3777,3779,3781,3783,3785,3787,3789],{"class":471,"line":750},[469,3773,754],{"class":753},[469,3775,3776],{"class":760}," curves ",[469,3778,1692],{"class":479},[469,3780,782],{"class":781},[469,3782,785],{"class":479},[469,3784,3419],{"class":788},[469,3786,1955],{"class":479},[469,3788,3397],{"class":760},[469,3790,1413],{"class":479},[444,3792,3793,3794,3797],{},"Edges are connected into maximal polylines. A coincident (coplanar) overlap contributes its ",[452,3795,3796],{},"contact border"," — the polyline where the coincidence ends — while the overlap's interior stays silent. Within a single tag (a self arrangement) a seam is a non-manifold edge.",[444,3799,3800],{},"The output coordinate type is the leading template parameter, defaulting to the input forms' real type. An integral type emits the curves on the exact lattice, and the graph carries the converter that produced it:",[460,3802,3804],{"className":462,"code":3803,"language":7,"meta":464,"style":464},"auto curves = tf::make_intersection_curves\u003Cdouble>(graph);\n\nauto lattice = tf::make_intersection_curves\u003Ctf::exact::int32>(graph);\nauto p = graph.converter().deconvert(lattice.points()[0]); \u002F\u002F lattice point back to float\n",[466,3805,3806,3831,3835,3869],{"__ignoreMap":464},[469,3807,3808,3810,3812,3814,3816,3818,3820,3822,3824,3827,3829],{"class":471,"line":472},[469,3809,754],{"class":753},[469,3811,3776],{"class":760},[469,3813,1692],{"class":479},[469,3815,782],{"class":781},[469,3817,785],{"class":479},[469,3819,3419],{"class":788},[469,3821,859],{"class":479},[469,3823,721],{"class":753},[469,3825,3826],{"class":479},">(",[469,3828,3397],{"class":760},[469,3830,1413],{"class":479},[469,3832,3833],{"class":471,"line":750},[469,3834,823],{"emptyLinePlaceholder":822},[469,3836,3837,3839,3842,3844,3846,3848,3850,3852,3854,3856,3858,3860,3863,3865,3867],{"class":471,"line":795},[469,3838,754],{"class":753},[469,3840,3841],{"class":760}," lattice ",[469,3843,1692],{"class":479},[469,3845,782],{"class":781},[469,3847,785],{"class":479},[469,3849,3419],{"class":788},[469,3851,859],{"class":479},[469,3853,862],{"class":781},[469,3855,785],{"class":479},[469,3857,867],{"class":781},[469,3859,785],{"class":479},[469,3861,3862],{"class":781},"int32",[469,3864,3826],{"class":479},[469,3866,3397],{"class":760},[469,3868,1413],{"class":479},[469,3870,3871,3873,3875,3877,3880,3882,3885,3887,3889,3891,3894,3896,3898,3900,3902,3904],{"class":471,"line":819},[469,3872,754],{"class":753},[469,3874,3237],{"class":760},[469,3876,1692],{"class":479},[469,3878,3879],{"class":760}," graph",[469,3881,455],{"class":479},[469,3883,3884],{"class":788},"converter",[469,3886,2995],{"class":479},[469,3888,3246],{"class":788},[469,3890,1955],{"class":479},[469,3892,3893],{"class":760},"lattice",[469,3895,455],{"class":479},[469,3897,568],{"class":788},[469,3899,3261],{"class":479},[469,3901,1329],{"class":1588},[469,3903,3266],{"class":479},[469,3905,3906],{"class":746}," \u002F\u002F lattice point back to float\n",[444,3908,3909,3910,3916,3917,3923],{},"The standalone ",[448,3911,3913],{"href":3912},"\u002Fcpp\u002Fmodules\u002Fintersect#intersection-curves",[466,3914,3915],{},"tf::make_intersection_curves(a, b)"," builds its own arrangement per call and appends that converter to the return for integer output; the graph overload returns the curves buffer alone, because you already hold the graph. The CSG module's ",[448,3918,3920],{"href":3919},"\u002Fcpp\u002Fmodules\u002Fcsg#intersection-curves",[466,3921,3922],{},"tf::make_intersection_curves(csg_graph)"," is the same read on a classified graph.",[489,3925,3927],{"id":3926},"segment-arrangements","Segment Arrangements",[444,3929,3930],{},"Split 2D or 3D segments at all intersection points. Returns the subdivided segments with labels mapping each sub-edge to its original edge:",[460,3932,3935],{"className":462,"code":3933,"filename":3934,"language":7,"meta":464,"style":464},"auto [result, edge_labels] = tf::make_segment_arrangements(segments);\n","segment_arrangements.cpp",[466,3936,3937],{"__ignoreMap":464},[469,3938,3939,3941,3943,3946,3948,3951,3953,3955,3957,3959,3961,3963,3966],{"class":471,"line":472},[469,3940,754],{"class":753},[469,3942,757],{"class":479},[469,3944,3945],{"class":760},"result",[469,3947,764],{"class":479},[469,3949,3950],{"class":760}," edge_labels",[469,3952,775],{"class":479},[469,3954,778],{"class":479},[469,3956,782],{"class":781},[469,3958,785],{"class":479},[469,3960,906],{"class":788},[469,3962,1955],{"class":479},[469,3964,3965],{"class":760},"segments",[469,3967,1413],{"class":479},[444,3969,3970,3971,3974],{},"The input segments can be plain or pre-tagged with tree and edge_membership structures. The output is a ",[466,3972,3973],{},"tf::segments_buffer"," with all intersections resolved and edges split.",[460,3976,3979],{"className":462,"code":3977,"filename":3978,"language":7,"meta":464,"style":464},"\u002F\u002F Also works for 3D segments\ntf::segments_buffer\u003Cint, float, 3> segments_3d;\n\u002F\u002F ... fill with data ...\n\nauto [result, edge_labels] = tf::make_segment_arrangements(segments_3d.segments());\n\n\u002F\u002F edge_labels[i] = index of the original edge that output edge i came from\n","segment_arrangements_3d.cpp",[466,3980,3981,3986,4016,4021,4025,4058,4062],{"__ignoreMap":464},[469,3982,3983],{"class":471,"line":472},[469,3984,3985],{"class":746},"\u002F\u002F Also works for 3D segments\n",[469,3987,3988,3990,3992,3995,3997,3999,4001,4004,4006,4008,4011,4014],{"class":471,"line":750},[469,3989,862],{"class":781},[469,3991,785],{"class":479},[469,3993,3994],{"class":760},"segments_buffer",[469,3996,859],{"class":479},[469,3998,3025],{"class":753},[469,4000,764],{"class":479},[469,4002,4003],{"class":753}," float",[469,4005,764],{"class":479},[469,4007,2116],{"class":1588},[469,4009,4010],{"class":479},">",[469,4012,4013],{"class":760}," segments_3d",[469,4015,2876],{"class":479},[469,4017,4018],{"class":471,"line":795},[469,4019,4020],{"class":746},"\u002F\u002F ... fill with data ...\n",[469,4022,4023],{"class":471,"line":819},[469,4024,823],{"emptyLinePlaceholder":822},[469,4026,4027,4029,4031,4033,4035,4037,4039,4041,4043,4045,4047,4049,4052,4054,4056],{"class":471,"line":826},[469,4028,754],{"class":753},[469,4030,757],{"class":479},[469,4032,3945],{"class":760},[469,4034,764],{"class":479},[469,4036,3950],{"class":760},[469,4038,775],{"class":479},[469,4040,778],{"class":479},[469,4042,782],{"class":781},[469,4044,785],{"class":479},[469,4046,906],{"class":788},[469,4048,1955],{"class":479},[469,4050,4051],{"class":760},"segments_3d",[469,4053,455],{"class":479},[469,4055,3965],{"class":788},[469,4057,816],{"class":479},[469,4059,4060],{"class":471,"line":832},[469,4061,823],{"emptyLinePlaceholder":822},[469,4063,4064],{"class":471,"line":878},[469,4065,4066],{"class":746},"\u002F\u002F edge_labels[i] = index of the original edge that output edge i came from\n",[598,4068,4070],{"id":4069},"planar-embedding","Planar Embedding",[444,4072,4073,4074,4080],{},"To compute the faces (regions) induced by the split segments, use ",[448,4075,4077],{"href":4076},"\u002Fcpp\u002Fmodules\u002Ftopology#planar-embedding",[466,4078,4079],{},"tf::planar_embedding"," from the Topology module:",[460,4082,4085],{"className":462,"code":4083,"filename":4084,"language":7,"meta":464,"style":464},"auto [result, edge_labels] = tf::make_segment_arrangements(segments);\n\ntf::planar_embedding\u003Cint, tf::exact::int32> pe;\npe.build(result.segments());\n\nfor (auto [face, hole_ids] : tf::zip(pe.faces(), pe.holes_for_faces())) {\n    auto polygon = tf::make_polygon(face, result.points());\n    for (auto hole : tf::make_indirect_range(hole_ids, pe.holes())) {\n        auto hole_polygon = tf::make_polygon(hole, result.points());\n    }\n}\n","segment_planar_embedding.cpp",[466,4086,4087,4115,4119,4151,4171,4175,4227,4259,4298,4329,4334],{"__ignoreMap":464},[469,4088,4089,4091,4093,4095,4097,4099,4101,4103,4105,4107,4109,4111,4113],{"class":471,"line":472},[469,4090,754],{"class":753},[469,4092,757],{"class":479},[469,4094,3945],{"class":760},[469,4096,764],{"class":479},[469,4098,3950],{"class":760},[469,4100,775],{"class":479},[469,4102,778],{"class":479},[469,4104,782],{"class":781},[469,4106,785],{"class":479},[469,4108,906],{"class":788},[469,4110,1955],{"class":479},[469,4112,3965],{"class":760},[469,4114,1413],{"class":479},[469,4116,4117],{"class":471,"line":750},[469,4118,823],{"emptyLinePlaceholder":822},[469,4120,4121,4123,4125,4128,4130,4132,4134,4136,4138,4140,4142,4144,4146,4149],{"class":471,"line":795},[469,4122,862],{"class":781},[469,4124,785],{"class":479},[469,4126,4127],{"class":760},"planar_embedding",[469,4129,859],{"class":479},[469,4131,3025],{"class":753},[469,4133,764],{"class":479},[469,4135,782],{"class":781},[469,4137,785],{"class":479},[469,4139,867],{"class":781},[469,4141,785],{"class":479},[469,4143,3862],{"class":760},[469,4145,4010],{"class":479},[469,4147,4148],{"class":760}," pe",[469,4150,2876],{"class":479},[469,4152,4153,4156,4158,4161,4163,4165,4167,4169],{"class":471,"line":819},[469,4154,4155],{"class":760},"pe",[469,4157,455],{"class":479},[469,4159,4160],{"class":788},"build",[469,4162,1955],{"class":479},[469,4164,3945],{"class":760},[469,4166,455],{"class":479},[469,4168,3965],{"class":788},[469,4170,816],{"class":479},[469,4172,4173],{"class":471,"line":826},[469,4174,823],{"emptyLinePlaceholder":822},[469,4176,4177,4179,4181,4183,4185,4188,4190,4193,4195,4198,4200,4202,4205,4207,4209,4211,4213,4215,4217,4219,4222,4225],{"class":471,"line":832},[469,4178,2961],{"class":475},[469,4180,2964],{"class":479},[469,4182,754],{"class":753},[469,4184,757],{"class":479},[469,4186,4187],{"class":760},"face",[469,4189,764],{"class":479},[469,4191,4192],{"class":760}," hole_ids",[469,4194,775],{"class":479},[469,4196,4197],{"class":479}," :",[469,4199,782],{"class":781},[469,4201,785],{"class":479},[469,4203,4204],{"class":788},"zip",[469,4206,1955],{"class":479},[469,4208,4155],{"class":760},[469,4210,455],{"class":479},[469,4212,572],{"class":788},[469,4214,806],{"class":479},[469,4216,4148],{"class":760},[469,4218,455],{"class":479},[469,4220,4221],{"class":788},"holes_for_faces",[469,4223,4224],{"class":479},"()))",[469,4226,1626],{"class":479},[469,4228,4229,4232,4235,4237,4239,4241,4244,4246,4248,4250,4253,4255,4257],{"class":471,"line":878},[469,4230,4231],{"class":753},"    auto",[469,4233,4234],{"class":760}," polygon",[469,4236,778],{"class":479},[469,4238,782],{"class":781},[469,4240,785],{"class":479},[469,4242,4243],{"class":788},"make_polygon",[469,4245,1955],{"class":479},[469,4247,4187],{"class":760},[469,4249,764],{"class":479},[469,4251,4252],{"class":760}," result",[469,4254,455],{"class":479},[469,4256,568],{"class":788},[469,4258,816],{"class":479},[469,4260,4261,4264,4266,4268,4271,4273,4275,4277,4280,4282,4285,4287,4289,4291,4294,4296],{"class":471,"line":1042},[469,4262,4263],{"class":475},"    for",[469,4265,2964],{"class":479},[469,4267,754],{"class":753},[469,4269,4270],{"class":760}," hole",[469,4272,4197],{"class":479},[469,4274,782],{"class":781},[469,4276,785],{"class":479},[469,4278,4279],{"class":788},"make_indirect_range",[469,4281,1955],{"class":479},[469,4283,4284],{"class":760},"hole_ids",[469,4286,764],{"class":479},[469,4288,4148],{"class":760},[469,4290,455],{"class":479},[469,4292,4293],{"class":788},"holes",[469,4295,4224],{"class":479},[469,4297,1626],{"class":479},[469,4299,4300,4303,4306,4308,4310,4312,4314,4316,4319,4321,4323,4325,4327],{"class":471,"line":1062},[469,4301,4302],{"class":753},"        auto",[469,4304,4305],{"class":760}," hole_polygon",[469,4307,778],{"class":479},[469,4309,782],{"class":781},[469,4311,785],{"class":479},[469,4313,4243],{"class":788},[469,4315,1955],{"class":479},[469,4317,4318],{"class":760},"hole",[469,4320,764],{"class":479},[469,4322,4252],{"class":760},[469,4324,455],{"class":479},[469,4326,568],{"class":788},[469,4328,816],{"class":479},[469,4330,4331],{"class":471,"line":1067},[469,4332,4333],{"class":479},"    }\n",[469,4335,4336],{"class":471,"line":1073},[469,4337,3132],{"class":479},[489,4339,592],{"id":4340},"with-precomputed-structures",[444,4342,4343],{},"All arrangement functions accept plain polygons or forms with precomputed spatial and topological structures. When structures are pre-tagged, the function skips building them — useful for repeated operations on the same mesh:",[460,4345,4348],{"className":462,"code":4346,"filename":4347,"language":7,"meta":464,"style":464},"tf::aabb_tree\u003Cint, float, 3> tree;\ntree.build(mesh.polygons(), tf::config_tree(4, 4));\n\ntf::face_membership\u003Cint> fm;\nfm.build(mesh.polygons());\n\ntf::manifold_edge_link\u003Cint, 3> mel;\nmel.build(mesh.polygons().faces(), fm);\n\nauto tagged = mesh.polygons() | tf::tag(tree) | tf::tag(fm) | tf::tag(mel);\n\n\u002F\u002F Use tagged form in any arrangement operation\nauto [arranged, tag_labels, face_labels] =\n    tf::make_mesh_arrangements(tagged, other_tagged);\n","arrangement_precomputed.cpp",[466,4349,4350,4378,4416,4420,4440,4459,4463,4487,4514,4518,4577,4581,4586,4607],{"__ignoreMap":464},[469,4351,4352,4354,4356,4359,4361,4363,4365,4367,4369,4371,4373,4376],{"class":471,"line":472},[469,4353,862],{"class":781},[469,4355,785],{"class":479},[469,4357,4358],{"class":760},"aabb_tree",[469,4360,859],{"class":479},[469,4362,3025],{"class":753},[469,4364,764],{"class":479},[469,4366,4003],{"class":753},[469,4368,764],{"class":479},[469,4370,2116],{"class":1588},[469,4372,4010],{"class":479},[469,4374,4375],{"class":760}," tree",[469,4377,2876],{"class":479},[469,4379,4380,4383,4385,4387,4389,4391,4393,4395,4397,4399,4401,4404,4406,4409,4411,4414],{"class":471,"line":750},[469,4381,4382],{"class":760},"tree",[469,4384,455],{"class":479},[469,4386,4160],{"class":788},[469,4388,1955],{"class":479},[469,4390,761],{"class":760},[469,4392,455],{"class":479},[469,4394,803],{"class":788},[469,4396,806],{"class":479},[469,4398,782],{"class":781},[469,4400,785],{"class":479},[469,4402,4403],{"class":788},"config_tree",[469,4405,1955],{"class":479},[469,4407,4408],{"class":1588},"4",[469,4410,764],{"class":479},[469,4412,4413],{"class":1588}," 4",[469,4415,2119],{"class":479},[469,4417,4418],{"class":471,"line":795},[469,4419,823],{"emptyLinePlaceholder":822},[469,4421,4422,4424,4426,4429,4431,4433,4435,4438],{"class":471,"line":819},[469,4423,862],{"class":781},[469,4425,785],{"class":479},[469,4427,4428],{"class":760},"face_membership",[469,4430,859],{"class":479},[469,4432,3025],{"class":753},[469,4434,4010],{"class":479},[469,4436,4437],{"class":760}," fm",[469,4439,2876],{"class":479},[469,4441,4442,4445,4447,4449,4451,4453,4455,4457],{"class":471,"line":826},[469,4443,4444],{"class":760},"fm",[469,4446,455],{"class":479},[469,4448,4160],{"class":788},[469,4450,1955],{"class":479},[469,4452,761],{"class":760},[469,4454,455],{"class":479},[469,4456,803],{"class":788},[469,4458,816],{"class":479},[469,4460,4461],{"class":471,"line":832},[469,4462,823],{"emptyLinePlaceholder":822},[469,4464,4465,4467,4469,4472,4474,4476,4478,4480,4482,4485],{"class":471,"line":878},[469,4466,862],{"class":781},[469,4468,785],{"class":479},[469,4470,4471],{"class":760},"manifold_edge_link",[469,4473,859],{"class":479},[469,4475,3025],{"class":753},[469,4477,764],{"class":479},[469,4479,2116],{"class":1588},[469,4481,4010],{"class":479},[469,4483,4484],{"class":760}," mel",[469,4486,2876],{"class":479},[469,4488,4489,4492,4494,4496,4498,4500,4502,4504,4506,4508,4510,4512],{"class":471,"line":1042},[469,4490,4491],{"class":760},"mel",[469,4493,455],{"class":479},[469,4495,4160],{"class":788},[469,4497,1955],{"class":479},[469,4499,761],{"class":760},[469,4501,455],{"class":479},[469,4503,803],{"class":788},[469,4505,2995],{"class":479},[469,4507,572],{"class":788},[469,4509,806],{"class":479},[469,4511,4437],{"class":760},[469,4513,1413],{"class":479},[469,4515,4516],{"class":471,"line":1062},[469,4517,823],{"emptyLinePlaceholder":822},[469,4519,4520,4522,4525,4527,4529,4531,4533,4535,4537,4539,4541,4543,4545,4547,4549,4551,4553,4555,4557,4559,4561,4563,4565,4567,4569,4571,4573,4575],{"class":471,"line":1067},[469,4521,754],{"class":753},[469,4523,4524],{"class":760}," tagged ",[469,4526,1692],{"class":479},[469,4528,2988],{"class":760},[469,4530,455],{"class":479},[469,4532,803],{"class":788},[469,4534,1942],{"class":479},[469,4536,1945],{"class":479},[469,4538,782],{"class":781},[469,4540,785],{"class":479},[469,4542,1952],{"class":788},[469,4544,1955],{"class":479},[469,4546,4382],{"class":760},[469,4548,1334],{"class":479},[469,4550,1945],{"class":479},[469,4552,782],{"class":781},[469,4554,785],{"class":479},[469,4556,1952],{"class":788},[469,4558,1955],{"class":479},[469,4560,4444],{"class":760},[469,4562,1334],{"class":479},[469,4564,1945],{"class":479},[469,4566,782],{"class":781},[469,4568,785],{"class":479},[469,4570,1952],{"class":788},[469,4572,1955],{"class":479},[469,4574,4491],{"class":760},[469,4576,1413],{"class":479},[469,4578,4579],{"class":471,"line":1073},[469,4580,823],{"emptyLinePlaceholder":822},[469,4582,4583],{"class":471,"line":1094},[469,4584,4585],{"class":746},"\u002F\u002F Use tagged form in any arrangement operation\n",[469,4587,4588,4590,4592,4595,4597,4599,4601,4603,4605],{"class":471,"line":1119},[469,4589,754],{"class":753},[469,4591,757],{"class":479},[469,4593,4594],{"class":760},"arranged",[469,4596,764],{"class":479},[469,4598,767],{"class":760},[469,4600,764],{"class":479},[469,4602,772],{"class":760},[469,4604,775],{"class":479},[469,4606,1016],{"class":479},[469,4608,4609,4611,4613,4615,4617,4620,4622,4625],{"class":471,"line":1138},[469,4610,1021],{"class":781},[469,4612,785],{"class":479},[469,4614,789],{"class":788},[469,4616,1955],{"class":479},[469,4618,4619],{"class":760},"tagged",[469,4621,764],{"class":479},[469,4623,4624],{"class":760}," other_tagged",[469,4626,1413],{"class":479},[489,4628,596],{"id":4629},"with-transformations",[444,4631,4632],{},"Tagged transformations enable operations in transformed space without copying geometry. Build structures once, then apply different transformations per operation:",[460,4634,4637],{"className":462,"code":4635,"filename":4636,"language":7,"meta":464,"style":464},"auto T = tf::make_transformation_from_translation(\n    tf::make_vector(5.0f, 0.0f, 0.0f));\n\n\u002F\u002F Arrangement between original and translated mesh\nauto [arranged, tags, faces] = tf::make_mesh_arrangements(\n    mesh.polygons(),\n    mesh.polygons() | tf::tag(T));\n\n\u002F\u002F Arrangements with per-mesh transforms\nauto T0 = tf::make_transformation_from_translation(\n    tf::make_vector(0.5f, 0.0f, 0.0f));\nauto T1 = tf::make_transformation_from_translation(\n    tf::make_vector(-0.5f, 0.0f, 0.0f));\n\nauto [mesh, tag_labels, face_labels] = tf::make_mesh_arrangements(\n    mesh1.polygons() | tf::tag(T0),\n    mesh2.polygons() | tf::tag(T1));\n","arrangement_transformed.cpp",[466,4638,4639,4657,4682,4686,4691,4721,4732,4757,4761,4766,4783,4806,4823,4846,4850,4878,4903],{"__ignoreMap":464},[469,4640,4641,4643,4646,4648,4650,4652,4655],{"class":471,"line":472},[469,4642,754],{"class":753},[469,4644,4645],{"class":760}," T ",[469,4647,1692],{"class":479},[469,4649,782],{"class":781},[469,4651,785],{"class":479},[469,4653,4654],{"class":788},"make_transformation_from_translation",[469,4656,792],{"class":479},[469,4658,4659,4661,4663,4666,4668,4671,4673,4676,4678,4680],{"class":471,"line":750},[469,4660,1021],{"class":781},[469,4662,785],{"class":479},[469,4664,4665],{"class":788},"make_vector",[469,4667,1955],{"class":479},[469,4669,4670],{"class":1588},"5.0f",[469,4672,764],{"class":479},[469,4674,4675],{"class":1588}," 0.0f",[469,4677,764],{"class":479},[469,4679,4675],{"class":1588},[469,4681,2119],{"class":479},[469,4683,4684],{"class":471,"line":795},[469,4685,823],{"emptyLinePlaceholder":822},[469,4687,4688],{"class":471,"line":819},[469,4689,4690],{"class":746},"\u002F\u002F Arrangement between original and translated mesh\n",[469,4692,4693,4695,4697,4699,4701,4704,4706,4709,4711,4713,4715,4717,4719],{"class":471,"line":826},[469,4694,754],{"class":753},[469,4696,757],{"class":479},[469,4698,4594],{"class":760},[469,4700,764],{"class":479},[469,4702,4703],{"class":760}," tags",[469,4705,764],{"class":479},[469,4707,4708],{"class":760}," faces",[469,4710,775],{"class":479},[469,4712,778],{"class":479},[469,4714,782],{"class":781},[469,4716,785],{"class":479},[469,4718,789],{"class":788},[469,4720,792],{"class":479},[469,4722,4723,4726,4728,4730],{"class":471,"line":832},[469,4724,4725],{"class":760},"    mesh",[469,4727,455],{"class":479},[469,4729,803],{"class":788},[469,4731,1564],{"class":479},[469,4733,4734,4736,4738,4740,4742,4744,4746,4748,4750,4752,4755],{"class":471,"line":878},[469,4735,4725],{"class":760},[469,4737,455],{"class":479},[469,4739,803],{"class":788},[469,4741,1942],{"class":479},[469,4743,1945],{"class":479},[469,4745,782],{"class":781},[469,4747,785],{"class":479},[469,4749,1952],{"class":788},[469,4751,1955],{"class":479},[469,4753,4754],{"class":760},"T",[469,4756,2119],{"class":479},[469,4758,4759],{"class":471,"line":1042},[469,4760,823],{"emptyLinePlaceholder":822},[469,4762,4763],{"class":471,"line":1062},[469,4764,4765],{"class":746},"\u002F\u002F Arrangements with per-mesh transforms\n",[469,4767,4768,4770,4773,4775,4777,4779,4781],{"class":471,"line":1067},[469,4769,754],{"class":753},[469,4771,4772],{"class":760}," T0 ",[469,4774,1692],{"class":479},[469,4776,782],{"class":781},[469,4778,785],{"class":479},[469,4780,4654],{"class":788},[469,4782,792],{"class":479},[469,4784,4785,4787,4789,4791,4793,4796,4798,4800,4802,4804],{"class":471,"line":1073},[469,4786,1021],{"class":781},[469,4788,785],{"class":479},[469,4790,4665],{"class":788},[469,4792,1955],{"class":479},[469,4794,4795],{"class":1588},"0.5f",[469,4797,764],{"class":479},[469,4799,4675],{"class":1588},[469,4801,764],{"class":479},[469,4803,4675],{"class":1588},[469,4805,2119],{"class":479},[469,4807,4808,4810,4813,4815,4817,4819,4821],{"class":471,"line":1094},[469,4809,754],{"class":753},[469,4811,4812],{"class":760}," T1 ",[469,4814,1692],{"class":479},[469,4816,782],{"class":781},[469,4818,785],{"class":479},[469,4820,4654],{"class":788},[469,4822,792],{"class":479},[469,4824,4825,4827,4829,4831,4834,4836,4838,4840,4842,4844],{"class":471,"line":1119},[469,4826,1021],{"class":781},[469,4828,785],{"class":479},[469,4830,4665],{"class":788},[469,4832,4833],{"class":479},"(-",[469,4835,4795],{"class":1588},[469,4837,764],{"class":479},[469,4839,4675],{"class":1588},[469,4841,764],{"class":479},[469,4843,4675],{"class":1588},[469,4845,2119],{"class":479},[469,4847,4848],{"class":471,"line":1138},[469,4849,823],{"emptyLinePlaceholder":822},[469,4851,4852,4854,4856,4858,4860,4862,4864,4866,4868,4870,4872,4874,4876],{"class":471,"line":1143},[469,4853,754],{"class":753},[469,4855,757],{"class":479},[469,4857,761],{"class":760},[469,4859,764],{"class":479},[469,4861,767],{"class":760},[469,4863,764],{"class":479},[469,4865,772],{"class":760},[469,4867,775],{"class":479},[469,4869,778],{"class":479},[469,4871,782],{"class":781},[469,4873,785],{"class":479},[469,4875,789],{"class":788},[469,4877,792],{"class":479},[469,4879,4880,4882,4884,4886,4888,4890,4892,4894,4896,4898,4901],{"class":471,"line":1149},[469,4881,798],{"class":760},[469,4883,455],{"class":479},[469,4885,803],{"class":788},[469,4887,1942],{"class":479},[469,4889,1945],{"class":479},[469,4891,782],{"class":781},[469,4893,785],{"class":479},[469,4895,1952],{"class":788},[469,4897,1955],{"class":479},[469,4899,4900],{"class":760},"T0",[469,4902,2266],{"class":479},[469,4904,4905,4908,4910,4912,4914,4916,4918,4920,4922,4924,4927],{"class":471,"line":1170},[469,4906,4907],{"class":760},"    mesh2",[469,4909,455],{"class":479},[469,4911,803],{"class":788},[469,4913,1942],{"class":479},[469,4915,1945],{"class":479},[469,4917,782],{"class":781},[469,4919,785],{"class":479},[469,4921,1952],{"class":788},[469,4923,1955],{"class":479},[469,4925,4926],{"class":760},"T1",[469,4928,2119],{"class":479},[4930,4931,4932],"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 .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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":464,"searchDepth":472,"depth":750,"links":4934},[4935,4940,4948,4949,4950,4951,4954,4955],{"id":491,"depth":750,"text":39,"children":4936},[4937,4938,4939],{"id":600,"depth":795,"text":601},{"id":672,"depth":795,"text":673},{"id":917,"depth":795,"text":918},{"id":1254,"depth":750,"text":1255,"children":4941},[4942,4943,4944,4945,4946,4947],{"id":1261,"depth":795,"text":1262},{"id":1603,"depth":795,"text":1604},{"id":1913,"depth":795,"text":1914},{"id":2298,"depth":795,"text":2299},{"id":2436,"depth":795,"text":581},{"id":3272,"depth":795,"text":3273},{"id":3302,"depth":750,"text":3303},{"id":3319,"depth":750,"text":3320},{"id":3715,"depth":750,"text":3716},{"id":3926,"depth":750,"text":3927,"children":4952},[4953],{"id":4069,"depth":795,"text":4070},{"id":4340,"depth":750,"text":592},{"id":4629,"depth":750,"text":596},"Exact mesh arrangements, region classification, and segment overlays.","md",null,{},{"icon":75},{"title":72,"description":4956},{"loc":73},"wN5lJZgWN_sHf9PAUI597uPWPapw7BbOK81UQaupbhA",[4965,4967],{"title":67,"path":68,"stem":69,"description":4966,"icon":70,"children":-1},"Exact mesh intersections and self-intersections.",{"title":77,"path":78,"stem":79,"description":4968,"icon":80,"children":-1},"Scalar field crossings, isocontours, isocurve embedding, and isobands.",1788524227195]