[{"data":1,"prerenderedAt":1750},["ShallowReactive",2],{"navigation-docsCpp":3,"lib-picker-navigation":192,"docsCpp-\u002Fcpp\u002Fmodules\u002Ffill":464,"docsCpp-\u002Fcpp\u002Fmodules\u002Ffill-surround":1745},[4],{"title":5,"path":6,"stem":7,"children":8,"page":32},"Cpp","\u002Fcpp","cpp",[9,33,115,120,144,173],{"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,100,105,110],{"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},"Volume","\u002Fcpp\u002Fmodules\u002Fvolume","cpp\u002F2.modules\u002F13.volume","i-lucide-box",{"title":106,"path":107,"stem":108,"icon":109},"Fill","\u002Fcpp\u002Fmodules\u002Ffill","cpp\u002F2.modules\u002F14.fill","i-lucide-paint-bucket",{"title":111,"path":112,"stem":113,"icon":114},"Linalg","\u002Fcpp\u002Fmodules\u002Flinalg","cpp\u002F2.modules\u002F15.linalg","i-lucide-sigma",{"title":116,"path":117,"stem":118,"icon":119},"Benchmarks","\u002Fcpp\u002Fbenchmarks","cpp\u002F3.benchmarks","i-lucide-chart-bar-stacked",{"title":121,"path":122,"stem":123,"children":124,"icon":32},"VTK","\u002Fcpp\u002Fvtk","cpp\u002F4.vtk\u002F1.index",[125,127,130,135,140],{"title":39,"path":122,"stem":123,"icon":126},"i-lucide-layers",{"title":42,"path":128,"stem":129,"icon":45},"\u002Fcpp\u002Fvtk\u002Fcore","cpp\u002F4.vtk\u002F2.core",{"title":131,"path":132,"stem":133,"icon":134},"Functions","\u002Fcpp\u002Fvtk\u002Ffunctions","cpp\u002F4.vtk\u002F3.functions","i-lucide-function-square",{"title":136,"path":137,"stem":138,"icon":139},"Filters","\u002Fcpp\u002Fvtk\u002Ffilters","cpp\u002F4.vtk\u002F4.filters","i-lucide-filter",{"title":141,"path":142,"stem":143,"icon":26},"Examples","\u002Fcpp\u002Fvtk\u002Fexamples","cpp\u002F4.vtk\u002F5.examples",{"title":141,"path":145,"stem":146,"children":147,"icon":32},"\u002Fcpp\u002Fexamples","cpp\u002F5.examples\u002F0.index",[148,150,154,159,164,168],{"title":39,"path":145,"stem":146,"icon":149},"i-lucide-book-open",{"title":151,"path":152,"stem":153,"icon":104},"Geometry Walkthrough","\u002Fcpp\u002Fexamples\u002Fmesh-assembly","cpp\u002F5.examples\u002F1.mesh-assembly",{"title":155,"path":156,"stem":157,"icon":158},"Point Cloud Alignment","\u002Fcpp\u002Fexamples\u002Falignment","cpp\u002F5.examples\u002F2.alignment","i-lucide-move",{"title":160,"path":161,"stem":162,"icon":163},"Booleans and Domains from One Build","\u002Fcpp\u002Fexamples\u002Farrangements","cpp\u002F5.examples\u002F3.arrangements","i-lucide-layers-3",{"title":165,"path":166,"stem":167,"icon":126},"VTK Integration","\u002Fcpp\u002Fexamples\u002Fvtk","cpp\u002F5.examples\u002F4.vtk",{"title":169,"path":170,"stem":171,"icon":172},"Coming from Other Libraries","\u002Fcpp\u002Fexamples\u002Flibrary-comparisons","cpp\u002F5.examples\u002F5.library-comparisons","i-lucide-git-compare",{"title":174,"path":175,"stem":176,"children":177,"page":32},"About","\u002Fcpp\u002Fabout","cpp\u002F6.about",[178,182,187],{"title":179,"path":180,"stem":181,"icon":149},"Research","\u002Fcpp\u002Fabout\u002Fresearch","cpp\u002F6.about\u002F1.research",{"title":183,"path":184,"stem":185,"icon":186},"Contributing","\u002Fcpp\u002Fabout\u002Fcontributing","cpp\u002F6.about\u002F2.contributing","i-lucide-heart-handshake",{"title":188,"path":189,"stem":190,"icon":191},"License","\u002Fcpp\u002Fabout\u002Flicense","cpp\u002F6.about\u002F3.license","i-lucide-file-text",{"cpp":193,"py":241,"ts":367},[194],{"title":5,"path":6,"stem":7,"children":195,"page":32},[196,202,220,221,228,236],{"title":10,"path":11,"stem":12,"children":197,"icon":32},[198,199,200,201],{"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":203,"icon":32},[204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219],{"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,"icon":109},{"title":111,"path":112,"stem":113,"icon":114},{"title":116,"path":117,"stem":118,"icon":119},{"title":121,"path":122,"stem":123,"children":222,"icon":32},[223,224,225,226,227],{"title":39,"path":122,"stem":123,"icon":126},{"title":42,"path":128,"stem":129,"icon":45},{"title":131,"path":132,"stem":133,"icon":134},{"title":136,"path":137,"stem":138,"icon":139},{"title":141,"path":142,"stem":143,"icon":26},{"title":141,"path":145,"stem":146,"children":229,"icon":32},[230,231,232,233,234,235],{"title":39,"path":145,"stem":146,"icon":149},{"title":151,"path":152,"stem":153,"icon":104},{"title":155,"path":156,"stem":157,"icon":158},{"title":160,"path":161,"stem":162,"icon":163},{"title":165,"path":166,"stem":167,"icon":126},{"title":169,"path":170,"stem":171,"icon":172},{"title":174,"path":175,"stem":176,"children":237,"page":32},[238,239,240],{"title":179,"path":180,"stem":181,"icon":149},{"title":183,"path":184,"stem":185,"icon":186},{"title":188,"path":189,"stem":190,"icon":191},[242],{"title":243,"path":244,"stem":245,"children":246,"page":32},"Py","\u002Fpy","py",[247,261,308,311,332,354],{"title":10,"path":248,"stem":249,"children":250,"icon":32},"\u002Fpy\u002Fgetting-started","py\u002F1.getting-started\u002F1.index",[251,252,255,258],{"title":15,"path":248,"stem":249,"icon":16},{"title":18,"path":253,"stem":254,"icon":21},"\u002Fpy\u002Fgetting-started\u002Finstallation","py\u002F1.getting-started\u002F2.installation",{"title":23,"path":256,"stem":257,"icon":26},"\u002Fpy\u002Fgetting-started\u002Flive-examples","py\u002F1.getting-started\u002F3.live-examples",{"title":28,"path":259,"stem":260,"icon":31},"\u002Fpy\u002Fgetting-started\u002Frelease-notes","py\u002F1.getting-started\u002F4.release-notes",{"title":34,"path":262,"stem":263,"children":264,"icon":32},"\u002Fpy\u002Fmodules","py\u002F2.modules\u002F00.index",[265,266,269,272,275,278,281,284,287,290,293,296,299,302,305],{"title":39,"path":262,"stem":263,"icon":40},{"title":42,"path":267,"stem":268,"icon":45},"\u002Fpy\u002Fmodules\u002Fcore","py\u002F2.modules\u002F01.core",{"title":47,"path":270,"stem":271,"icon":50},"\u002Fpy\u002Fmodules\u002Fspatial","py\u002F2.modules\u002F02.spatial",{"title":52,"path":273,"stem":274,"icon":55},"\u002Fpy\u002Fmodules\u002Ftopology","py\u002F2.modules\u002F03.topology",{"title":57,"path":276,"stem":277,"icon":60},"\u002Fpy\u002Fmodules\u002Fgeometry","py\u002F2.modules\u002F04.geometry",{"title":62,"path":279,"stem":280,"icon":65},"\u002Fpy\u002Fmodules\u002Fremesh","py\u002F2.modules\u002F05.remesh",{"title":67,"path":282,"stem":283,"icon":70},"\u002Fpy\u002Fmodules\u002Fintersect","py\u002F2.modules\u002F06.intersect",{"title":72,"path":285,"stem":286,"icon":75},"\u002Fpy\u002Fmodules\u002Farrangement","py\u002F2.modules\u002F07.arrangement",{"title":77,"path":288,"stem":289,"icon":80},"\u002Fpy\u002Fmodules\u002Fiso","py\u002F2.modules\u002F08.iso",{"title":82,"path":291,"stem":292,"icon":85},"\u002Fpy\u002Fmodules\u002Fcsg","py\u002F2.modules\u002F09.csg",{"title":87,"path":294,"stem":295,"icon":31},"\u002Fpy\u002Fmodules\u002Fclean","py\u002F2.modules\u002F10.clean",{"title":91,"path":297,"stem":298,"icon":94},"\u002Fpy\u002Fmodules\u002Freindex","py\u002F2.modules\u002F11.reidx",{"title":96,"path":300,"stem":301,"icon":99},"\u002Fpy\u002Fmodules\u002Fio","py\u002F2.modules\u002F12.io",{"title":101,"path":303,"stem":304,"icon":104},"\u002Fpy\u002Fmodules\u002Fvolume","py\u002F2.modules\u002F13.volume",{"title":106,"path":306,"stem":307,"icon":109},"\u002Fpy\u002Fmodules\u002Ffill","py\u002F2.modules\u002F14.fill",{"title":116,"path":309,"stem":310,"icon":119},"\u002Fpy\u002Fbenchmarks","py\u002F3.benchmarks",{"title":312,"path":313,"stem":314,"children":315,"icon":32},"Blender","\u002Fpy\u002Fblender","py\u002F4.blender\u002F1.index",[316,318,323,327],{"title":39,"path":313,"stem":314,"icon":317},"i-vscode-icons:file-type-blender",{"title":319,"path":320,"stem":321,"icon":322},"Convert","\u002Fpy\u002Fblender\u002Fconvert","py\u002F4.blender\u002F2.convert","i-lucide-repeat",{"title":324,"path":325,"stem":326,"icon":126},"Scene","\u002Fpy\u002Fblender\u002Fscene","py\u002F4.blender\u002F3.scene",{"title":328,"path":329,"stem":330,"icon":331},"Plugin Architecture","\u002Fpy\u002Fblender\u002Fplugin","py\u002F4.blender\u002F4.plugin","i-lucide-puzzle",{"title":141,"path":333,"stem":334,"children":335,"icon":32},"\u002Fpy\u002Fexamples","py\u002F5.examples\u002F0.index",[336,337,342,345,349],{"title":39,"path":333,"stem":334,"icon":149},{"title":338,"path":339,"stem":340,"icon":341},"Core Functionality","\u002Fpy\u002Fexamples\u002Fcore-functionality","py\u002F5.examples\u002F2.core-functionality","i-lucide-code",{"title":160,"path":343,"stem":344,"icon":163},"\u002Fpy\u002Fexamples\u002Farrangements","py\u002F5.examples\u002F3.arrangements",{"title":165,"path":346,"stem":347,"icon":348},"\u002Fpy\u002Fexamples\u002Fvtk-integration","py\u002F5.examples\u002F4.vtk-integration","i-lucide-grid-2x2",{"title":350,"path":351,"stem":352,"icon":353},"Raycast Rendering","\u002Fpy\u002Fexamples\u002Fraycast-rendering","py\u002F5.examples\u002F5.raycast-rendering","i-lucide-scan-line",{"title":174,"path":355,"stem":356,"children":357,"page":32},"\u002Fpy\u002Fabout","py\u002F6.about",[358,361,364],{"title":179,"path":359,"stem":360,"icon":149},"\u002Fpy\u002Fabout\u002Fresearch","py\u002F6.about\u002F1.research",{"title":183,"path":362,"stem":363,"icon":186},"\u002Fpy\u002Fabout\u002Fcontributing","py\u002F6.about\u002F2.contributing",{"title":188,"path":365,"stem":366,"icon":191},"\u002Fpy\u002Fabout\u002Flicense","py\u002F6.about\u002F3.license",[368],{"title":369,"path":370,"stem":371,"children":372,"page":32},"Ts","\u002Fts","ts",[373,387,431,434,451],{"title":10,"path":374,"stem":375,"children":376,"icon":32},"\u002Fts\u002Fgetting-started","ts\u002F1.getting-started\u002F1.index",[377,378,381,384],{"title":15,"path":374,"stem":375,"icon":16},{"title":18,"path":379,"stem":380,"icon":21},"\u002Fts\u002Fgetting-started\u002Finstallation","ts\u002F1.getting-started\u002F2.installation",{"title":23,"path":382,"stem":383,"icon":26},"\u002Fts\u002Fgetting-started\u002Flive-examples","ts\u002F1.getting-started\u002F3.live-examples",{"title":28,"path":385,"stem":386,"icon":31},"\u002Fts\u002Fgetting-started\u002Frelease-notes","ts\u002F1.getting-started\u002F4.release-notes",{"title":34,"path":388,"stem":389,"children":390,"icon":32},"\u002Fts\u002Fmodules","ts\u002F2.modules\u002F00.index",[391,392,395,398,401,404,407,410,413,416,419,422,425,428],{"title":39,"path":388,"stem":389,"icon":40},{"title":42,"path":393,"stem":394,"icon":45},"\u002Fts\u002Fmodules\u002Fcore","ts\u002F2.modules\u002F01.core",{"title":47,"path":396,"stem":397,"icon":50},"\u002Fts\u002Fmodules\u002Fspatial","ts\u002F2.modules\u002F02.spatial",{"title":52,"path":399,"stem":400,"icon":55},"\u002Fts\u002Fmodules\u002Ftopology","ts\u002F2.modules\u002F03.topology",{"title":57,"path":402,"stem":403,"icon":60},"\u002Fts\u002Fmodules\u002Fgeometry","ts\u002F2.modules\u002F04.geometry",{"title":62,"path":405,"stem":406,"icon":65},"\u002Fts\u002Fmodules\u002Fremesh","ts\u002F2.modules\u002F05.remesh",{"title":67,"path":408,"stem":409,"icon":70},"\u002Fts\u002Fmodules\u002Fintersect","ts\u002F2.modules\u002F06.intersect",{"title":72,"path":411,"stem":412,"icon":75},"\u002Fts\u002Fmodules\u002Farrangement","ts\u002F2.modules\u002F07.arrangement",{"title":77,"path":414,"stem":415,"icon":80},"\u002Fts\u002Fmodules\u002Fiso","ts\u002F2.modules\u002F08.iso",{"title":82,"path":417,"stem":418,"icon":85},"\u002Fts\u002Fmodules\u002Fcsg","ts\u002F2.modules\u002F09.csg",{"title":87,"path":420,"stem":421,"icon":31},"\u002Fts\u002Fmodules\u002Fclean","ts\u002F2.modules\u002F10.clean",{"title":91,"path":423,"stem":424,"icon":94},"\u002Fts\u002Fmodules\u002Freindex","ts\u002F2.modules\u002F11.reidx",{"title":96,"path":426,"stem":427,"icon":99},"\u002Fts\u002Fmodules\u002Fio","ts\u002F2.modules\u002F12.io",{"title":106,"path":429,"stem":430,"icon":109},"\u002Fts\u002Fmodules\u002Ffill","ts\u002F2.modules\u002F13.fill",{"title":116,"path":432,"stem":433,"icon":119},"\u002Fts\u002Fbenchmarks","ts\u002F3.benchmarks",{"title":141,"path":435,"stem":436,"children":437,"icon":32},"\u002Fts\u002Fexamples","ts\u002F4.examples\u002F0.index",[438,439,442,447],{"title":39,"path":435,"stem":436,"icon":149},{"title":338,"path":440,"stem":441,"icon":341},"\u002Fts\u002Fexamples\u002Fcore-functionality","ts\u002F4.examples\u002F2.core-functionality",{"title":443,"path":444,"stem":445,"icon":446},"Alignment","\u002Fts\u002Fexamples\u002Falignment","ts\u002F4.examples\u002F3.alignment","i-lucide-move-3d",{"title":350,"path":448,"stem":449,"icon":450},"\u002Fts\u002Fexamples\u002Fraycast-render","ts\u002F4.examples\u002F4.raycast-render","i-lucide-image",{"title":174,"icon":32,"path":452,"stem":453,"children":454,"page":32},"\u002Fts\u002Fabout","ts\u002F5.about",[455,458,461],{"title":179,"path":456,"stem":457,"icon":149},"\u002Fts\u002Fabout\u002Fresearch","ts\u002F5.about\u002F1.research",{"title":183,"path":459,"stem":460,"icon":186},"\u002Fts\u002Fabout\u002Fcontributing","ts\u002F5.about\u002F2.contributing",{"title":188,"path":462,"stem":463,"icon":191},"\u002Fts\u002Fabout\u002Flicense","ts\u002F5.about\u002F3.license",{"id":465,"title":106,"body":466,"description":1737,"extension":1738,"links":1739,"meta":1740,"navigation":1741,"path":107,"seo":1742,"sitemap":1743,"stem":108,"__hash__":1744},"docsCpp\u002Fcpp\u002F2.modules\u002F14.fill.md",{"type":467,"value":468,"toc":1727},"minimark",[469,473,476,505,558,758,763,766,797,800,805,808,812,920,984,1000,1004,1019,1233,1242,1246,1343,1446,1479,1641,1645,1713,1716,1723],[470,471,472],"p",{},"The Fill module closes holes. It takes a mesh and the rims its boundary walks, states one patch per rim, and replays those patches into the filled mesh. The patch continues the surface around the hole where the surface allows it, and falls back to a flat lid or an exact minimal triangulation where it does not.",[470,474,475],{},"Include the module with:",[477,478,482],"pre",{"className":479,"code":480,"language":7,"meta":481,"style":481},"language-cpp shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","#include \u003Ctrueform\u002Ffill.hpp>\n","",[483,484,485],"code",{"__ignoreMap":481},[486,487,490,494,498,502],"span",{"class":488,"line":489},"line",1,[486,491,493],{"class":492},"s7zQu","#include",[486,495,497],{"class":496},"sMK4o"," \u003C",[486,499,501],{"class":500},"sfazB","trueform\u002Ffill.hpp",[486,503,504],{"class":496},">\n",[506,507,508,524],"table",{},[509,510,511],"thead",{},[512,513,514,518,521],"tr",{},[515,516,517],"th",{},"Entry",[515,519,520],{},"Returns",[515,522,523],{},"Does",[525,526,527,543],"tbody",{},[512,528,529,535,540],{},[530,531,532],"td",{},[483,533,534],{},"tf::fill_holes",[530,536,537],{},[483,538,539],{},"tf::hole_fill_result",[530,541,542],{},"One patch per rim, with a status per rim",[512,544,545,550,555],{},[530,546,547],{},[483,548,549],{},"tf::make_filled_mesh",[530,551,552],{},[483,553,554],{},"tf::polygons_buffer",[530,556,557],{},"The input with the patches stitched in",[477,559,562],{"className":479,"code":560,"filename":561,"language":7,"meta":481,"style":481},"auto mesh = tf::read_stl(\"scan.stl\");\nauto fm = tf::make_face_membership(mesh.polygons());\nauto form = mesh.polygons() | tf::tag(fm);\n\nauto rims = tf::make_boundary_rims(form);\nauto fill = tf::fill_holes(form, rims);\nauto filled = tf::make_filled_mesh(form, fill);\n","fill_basic.cpp",[483,563,564,602,633,670,677,701,730],{"__ignoreMap":481},[486,565,566,570,574,577,581,584,588,591,594,597,599],{"class":488,"line":489},[486,567,569],{"class":568},"spNyl","auto",[486,571,573],{"class":572},"sTEyZ"," mesh ",[486,575,576],{"class":496},"=",[486,578,580],{"class":579},"sBMFI"," tf",[486,582,583],{"class":496},"::",[486,585,587],{"class":586},"s2Zo4","read_stl",[486,589,590],{"class":496},"(",[486,592,593],{"class":496},"\"",[486,595,596],{"class":500},"scan.stl",[486,598,593],{"class":496},[486,600,601],{"class":496},");\n",[486,603,605,607,610,612,614,616,619,621,624,627,630],{"class":488,"line":604},2,[486,606,569],{"class":568},[486,608,609],{"class":572}," fm ",[486,611,576],{"class":496},[486,613,580],{"class":579},[486,615,583],{"class":496},[486,617,618],{"class":586},"make_face_membership",[486,620,590],{"class":496},[486,622,623],{"class":572},"mesh",[486,625,626],{"class":496},".",[486,628,629],{"class":586},"polygons",[486,631,632],{"class":496},"());\n",[486,634,636,638,641,643,646,648,650,653,656,658,660,663,665,668],{"class":488,"line":635},3,[486,637,569],{"class":568},[486,639,640],{"class":572}," form ",[486,642,576],{"class":496},[486,644,645],{"class":572}," mesh",[486,647,626],{"class":496},[486,649,629],{"class":586},[486,651,652],{"class":496},"()",[486,654,655],{"class":496}," |",[486,657,580],{"class":579},[486,659,583],{"class":496},[486,661,662],{"class":586},"tag",[486,664,590],{"class":496},[486,666,667],{"class":572},"fm",[486,669,601],{"class":496},[486,671,673],{"class":488,"line":672},4,[486,674,676],{"emptyLinePlaceholder":675},true,"\n",[486,678,680,682,685,687,689,691,694,696,699],{"class":488,"line":679},5,[486,681,569],{"class":568},[486,683,684],{"class":572}," rims ",[486,686,576],{"class":496},[486,688,580],{"class":579},[486,690,583],{"class":496},[486,692,693],{"class":586},"make_boundary_rims",[486,695,590],{"class":496},[486,697,698],{"class":572},"form",[486,700,601],{"class":496},[486,702,704,706,709,711,713,715,718,720,722,725,728],{"class":488,"line":703},6,[486,705,569],{"class":568},[486,707,708],{"class":572}," fill ",[486,710,576],{"class":496},[486,712,580],{"class":579},[486,714,583],{"class":496},[486,716,717],{"class":586},"fill_holes",[486,719,590],{"class":496},[486,721,698],{"class":572},[486,723,724],{"class":496},",",[486,726,727],{"class":572}," rims",[486,729,601],{"class":496},[486,731,733,735,738,740,742,744,747,749,751,753,756],{"class":488,"line":732},7,[486,734,569],{"class":568},[486,736,737],{"class":572}," filled ",[486,739,576],{"class":496},[486,741,580],{"class":579},[486,743,583],{"class":496},[486,745,746],{"class":586},"make_filled_mesh",[486,748,590],{"class":496},[486,750,698],{"class":572},[486,752,724],{"class":496},[486,754,755],{"class":572}," fill",[486,757,601],{"class":496},[759,760,762],"h2",{"id":761},"the-ladder","The Ladder",[470,764,765],{},"One rim is one group, and a group is filled on its own. Its rim is validated — a rim must close, and every rim edge must be carried by a triangle — and then handed down three tiers:",[767,768,769,777,787],"ol",{},[770,771,772,776],"li",{},[773,774,775],"strong",{},"Small rims."," A rim of at most five vertices is triangulated by exhaustive enumeration.",[770,778,779,782,783,786],{},[773,780,781],{},"The chart."," The hole is read as a height field over the plane its rim spans. A smooth trend fitted to the surrounding surface carries the shape; a residual solve makes the rim exact and the first ring of host faces continuous. The patch is sampled at its own quality floor and grades away from the rim. Where the chart refuses but the rim lies exactly in one plane, the patch is the flat ",[773,784,785],{},"lid"," in that plane.",[770,788,789,792,793,796],{},[773,790,791],{},"The table."," Otherwise, the rim's sites are tetrahedralized and a two-stage table states the patch with the best smallest angle and, under that, the least area. That patch is then refined toward ",[483,794,795],{},"min_quality"," and faired against its host.",[470,798,799],{},"Every group reports how it left each tier, whichever tier held it.",[801,802,804],"h3",{"id":803},"the-lattice","The Lattice",[470,806,807],{},"The chart decides on the mesh's own exact lattice — the one every arrangement of that mesh would use — so a hole holds no more geometry than the lattice states of it. A rim whose edges span about thirty lattice units or more charts at full quality; a rim of a few units per edge stands at the input's own resolution, and there the lid or a refusal is the honest answer. A float mesh's lattice spans its coordinate range in 32-bit steps, so this matters only for holes millions of times smaller than the mesh.",[759,809,811],{"id":810},"configuration","Configuration",[477,813,816],{"className":479,"code":814,"filename":815,"language":7,"meta":481,"style":481},"tf::hole_fill_config config;\nconfig.min_quality = 0.3;   \u002F\u002F the floor a table patch is refined toward; 0 = none\nconfig.fairing = true;      \u002F\u002F fair a refined table patch against its host\nconfig.split_rim = true;    \u002F\u002F may a tier split the host's own rim edges\n\nauto fill = tf::fill_holes(form, rims, config);\n","fill_config.cpp",[483,817,818,831,854,871,887,891],{"__ignoreMap":481},[486,819,820,823,825,828],{"class":488,"line":489},[486,821,822],{"class":579},"tf",[486,824,583],{"class":496},[486,826,827],{"class":572},"hole_fill_config config",[486,829,830],{"class":496},";\n",[486,832,833,836,838,841,843,847,850],{"class":488,"line":604},[486,834,835],{"class":572},"config",[486,837,626],{"class":496},[486,839,840],{"class":572},"min_quality ",[486,842,576],{"class":496},[486,844,846],{"class":845},"sbssI"," 0.3",[486,848,849],{"class":496},";",[486,851,853],{"class":852},"sHwdD","   \u002F\u002F the floor a table patch is refined toward; 0 = none\n",[486,855,856,858,860,863,865,868],{"class":488,"line":635},[486,857,835],{"class":572},[486,859,626],{"class":496},[486,861,862],{"class":572},"fairing ",[486,864,576],{"class":496},[486,866,867],{"class":496}," true;",[486,869,870],{"class":852},"      \u002F\u002F fair a refined table patch against its host\n",[486,872,873,875,877,880,882,884],{"class":488,"line":672},[486,874,835],{"class":572},[486,876,626],{"class":496},[486,878,879],{"class":572},"split_rim ",[486,881,576],{"class":496},[486,883,867],{"class":496},[486,885,886],{"class":852},"    \u002F\u002F may a tier split the host's own rim edges\n",[486,888,889],{"class":488,"line":679},[486,890,676],{"emptyLinePlaceholder":675},[486,892,893,895,897,899,901,903,905,907,909,911,913,915,918],{"class":488,"line":703},[486,894,569],{"class":568},[486,896,708],{"class":572},[486,898,576],{"class":496},[486,900,580],{"class":579},[486,902,583],{"class":496},[486,904,717],{"class":586},[486,906,590],{"class":496},[486,908,698],{"class":572},[486,910,724],{"class":496},[486,912,727],{"class":572},[486,914,724],{"class":496},[486,916,917],{"class":572}," config",[486,919,601],{"class":496},[506,921,922,935],{},[509,923,924],{},[512,925,926,929,932],{},[515,927,928],{},"Field",[515,930,931],{},"Default",[515,933,934],{},"Meaning",[525,936,937,955,970],{},[512,938,939,943,948],{},[530,940,941],{},[483,942,795],{},[530,944,945],{},[483,946,947],{},"0.3",[530,949,950,951,954],{},"The quality floor a table patch is refined toward, in ",[483,952,953],{},"tf::triangle_quality"," units. A chart patch samples at its own floor",[512,956,957,962,967],{},[530,958,959],{},[483,960,961],{},"fairing",[530,963,964],{},[483,965,966],{},"true",[530,968,969],{},"Whether a refined table patch is faired. Only points the patch minted inside itself move",[512,971,972,977,981],{},[530,973,974],{},[483,975,976],{},"split_rim",[530,978,979],{},[483,980,966],{},[530,982,983],{},"Whether a tier may split an original rim edge",[470,985,986,987,989,990,993,994,996,997,626],{},"With ",[483,988,976],{},", a tier splits a rim edge where its patch needs it, and every split is published in the result's split table beside a ",[773,991,992],{},"plan"," for each carrying face it reaches; ",[483,995,549],{}," replays both, so the filled mesh stays watertight. Without it no original edge is touched, and a rim the table could only fill by a split refuses as ",[483,998,999],{},"refused_rim_split",[759,1001,1003],{"id":1002},"the-result","The Result",[470,1005,1006,1009,1010,1013,1014,1016,1017,626],{},[483,1007,1008],{},"tf::hole_fill_result\u003CIndex, RealT>"," is laid out per group: entry ",[483,1011,1012],{},"g"," of every flat lane and block ",[483,1015,1012],{}," of every jagged lane belong to group ",[483,1018,1012],{},[506,1020,1021,1033],{},[509,1022,1023],{},[512,1024,1025,1028,1031],{},[515,1026,1027],{},"Lane",[515,1029,1030],{},"Type",[515,1032,934],{},[525,1034,1035,1050,1065,1080,1095,1110,1125,1140,1159,1182,1215],{},[512,1036,1037,1042,1047],{},[530,1038,1039],{},[483,1040,1041],{},"group_offsets",[530,1043,1044],{},[483,1045,1046],{},"buffer\u003CIndex>",[530,1048,1049],{},"The run of rims each group fills",[512,1051,1052,1057,1062],{},[530,1053,1054],{},[483,1055,1056],{},"triangles",[530,1058,1059],{},[483,1060,1061],{},"offset_block_buffer\u003CIndex, std::array\u003CIndex, 3>>",[530,1063,1064],{},"The patch triangles",[512,1066,1067,1072,1077],{},[530,1068,1069],{},[483,1070,1071],{},"minted_points",[530,1073,1074],{},[483,1075,1076],{},"offset_block_buffer\u003CIndex, point\u003CRealT, 3>>",[530,1078,1079],{},"The points the patch minted",[512,1081,1082,1087,1092],{},[530,1083,1084],{},[483,1085,1086],{},"status",[530,1088,1089],{},[483,1090,1091],{},"buffer\u003Chole_fill_status>",[530,1093,1094],{},"What the fill produced",[512,1096,1097,1102,1107],{},[530,1098,1099],{},[483,1100,1101],{},"charted",[530,1103,1104],{},[483,1105,1106],{},"buffer\u003Chole_chart_status>",[530,1108,1109],{},"How the chart read the hole",[512,1111,1112,1117,1122],{},[530,1113,1114],{},[483,1115,1116],{},"refined",[530,1118,1119],{},[483,1120,1121],{},"buffer\u003Chole_refine_status>",[530,1123,1124],{},"How the patch left refinement",[512,1126,1127,1132,1137],{},[530,1128,1129],{},[483,1130,1131],{},"faired",[530,1133,1134],{},[483,1135,1136],{},"buffer\u003Chole_fair_status>",[530,1138,1139],{},"How the patch left fairing",[512,1141,1142,1147,1152],{},[530,1143,1144],{},[483,1145,1146],{},"seam_max_angle",[530,1148,1149],{},[483,1150,1151],{},"buffer\u003CRealT>",[530,1153,1154,1155,1158],{},"The largest angle across the seam, ",[483,1156,1157],{},"-1"," where not computed",[512,1160,1161,1166,1171],{},[530,1162,1163],{},[483,1164,1165],{},"offending",[530,1167,1168],{},[483,1169,1170],{},"blocked_buffer\u003CIndex, 2>",[530,1172,1173,1174,1177,1178,1181],{},"The ",[483,1175,1176],{},"(rim, edge)"," a refusal names, ",[483,1179,1180],{},"(-1, -1)"," where none",[512,1183,1184,1189,1194],{},[530,1185,1186],{},[483,1187,1188],{},"splits",[530,1190,1191],{},[483,1192,1193],{},"buffer\u003Chole_split\u003CIndex>>",[530,1195,1196,1197,1200,1201,1200,1204,1200,1207,1210,1211,1214],{},"The original edges split: ",[483,1198,1199],{},"face",", ",[483,1202,1203],{},"v0 \u003C v1",[483,1205,1206],{},"point",[483,1208,1209],{},"parameter"," (over 64, from ",[483,1212,1213],{},"v0",")",[512,1216,1217,1225,1230],{},[530,1218,1219,1200,1222],{},[483,1220,1221],{},"plan_faces",[483,1223,1224],{},"plan_triangles",[530,1226,1227,1229],{},[483,1228,1046],{},", offset block",[530,1231,1232],{},"The carrying faces those splits reached, and the triangles each becomes",[470,1234,1235,1236,1238,1239,1241],{},"A corner below the input's point count is one of its vertices; at or above it, it names ",[483,1237,1071],{}," read flat in group order — the point order ",[483,1240,549],{}," emits. A refused group publishes nothing and names the rim edge it refused on.",[801,1243,1245],{"id":1244},"statuses","Statuses",[506,1247,1248,1259],{},[509,1249,1250],{},[512,1251,1252,1257],{},[515,1253,1254],{},[483,1255,1256],{},"hole_fill_status",[515,1258,934],{},[525,1260,1261,1271,1281,1291,1301,1311,1321,1331],{},[512,1262,1263,1268],{},[530,1264,1265],{},[483,1266,1267],{},"filled",[530,1269,1270],{},"The group holds a patch",[512,1272,1273,1278],{},[530,1274,1275],{},[483,1276,1277],{},"refused_open",[530,1279,1280],{},"A rim does not close",[512,1282,1283,1288],{},[530,1284,1285],{},[483,1286,1287],{},"refused_invalid_rim",[530,1289,1290],{},"The rim is not a simple cycle of triangle-carried edges",[512,1292,1293,1298],{},[530,1294,1295],{},[483,1296,1297],{},"refused_host_face",[530,1299,1300],{},"A carrying triangle states no usable plane",[512,1302,1303,1308],{},[530,1304,1305],{},[483,1306,1307],{},"refused_protection_depth",[530,1309,1310],{},"A rim edge could not be recovered in the table's complex",[512,1312,1313,1318],{},[530,1314,1315],{},[483,1316,1317],{},"refused_table",[530,1319,1320],{},"No admissible triangulation of the rim",[512,1322,1323,1328],{},[530,1324,1325],{},[483,1326,1327],{},"refused_resource",[530,1329,1330],{},"The index type cannot name the work",[512,1332,1333,1337],{},[530,1334,1335],{},[483,1336,999],{},[530,1338,1339,1340,1342],{},"The rim fills only by splitting an original edge, and ",[483,1341,976],{}," is off",[506,1344,1345,1356],{},[509,1346,1347],{},[512,1348,1349,1354],{},[515,1350,1351],{},[483,1352,1353],{},"hole_chart_status",[515,1355,934],{},[525,1357,1358,1368,1378,1388,1407,1426,1436],{},[512,1359,1360,1365],{},[530,1361,1362],{},[483,1363,1364],{},"not_attempted",[530,1366,1367],{},"No chart was read (a small rim, or a group refused before it)",[512,1369,1370,1375],{},[530,1371,1372],{},[483,1373,1374],{},"admitted",[530,1376,1377],{},"The chart holds the patch, continuing the host",[512,1379,1380,1385],{},[530,1381,1382],{},[483,1383,1384],{},"rim_plane",[530,1386,1387],{},"The chart refused the host, and the patch is the lid in the rim's exact plane",[512,1389,1390,1404],{},[530,1391,1392,1200,1395,1200,1398,1200,1401],{},[483,1393,1394],{},"no_area",[483,1396,1397],{},"steep",[483,1399,1400],{},"folded",[483,1402,1403],{},"collar_arity",[530,1405,1406],{},"The rim or its collar cannot be read over one plane",[512,1408,1409,1423],{},[530,1410,1411,1200,1414,1200,1417,1200,1420],{},[483,1412,1413],{},"uncovered",[483,1415,1416],{},"unsampled",[483,1418,1419],{},"unsolved",[483,1421,1422],{},"forbidden_chord",[530,1424,1425],{},"The trend, sampling, solve or triangulation refused",[512,1427,1428,1433],{},[530,1429,1430],{},[483,1431,1432],{},"resource",[530,1434,1435],{},"The index type cannot name the chart's samples",[512,1437,1438,1443],{},[530,1439,1440],{},[483,1441,1442],{},"out_of_lattice",[530,1444,1445],{},"The collar reaches farther than the mesh's lattice states",[470,1447,1448,1449,1452,1453,1200,1455,1200,1458,1461,1462,1465,1466,1452,1469,1200,1471,1200,1473,1461,1476,626],{},"Every chart refusal hands the rim to the table and stays stated here, whatever the table then makes of it. ",[483,1450,1451],{},"hole_refine_status"," is ",[483,1454,1364],{},[483,1456,1457],{},"floor_met",[483,1459,1460],{},"stalled"," or ",[483,1463,1464],{},"budget_exhausted","; ",[483,1467,1468],{},"hole_fair_status",[483,1470,1364],{},[483,1472,1131],{},[483,1474,1475],{},"fairing_off",[483,1477,1478],{},"fairing_refused",[477,1480,1483],{"className":479,"code":1481,"filename":1482,"language":7,"meta":481,"style":481},"for (std::size_t g = 0; g \u003C fill.size(); ++g)\n  if (fill.status[g] != tf::hole_fill_status::filled) {\n    auto rim = fill.offending[g][0];    \u002F\u002F the rim that refused\n    auto edge = fill.offending[g][1];   \u002F\u002F at this edge of it\n  }\n","fill_statuses.cpp",[483,1484,1485,1534,1574,1607,1636],{"__ignoreMap":481},[486,1486,1487,1490,1493,1496,1498,1501,1504,1506,1509,1511,1513,1516,1518,1520,1523,1526,1529,1531],{"class":488,"line":489},[486,1488,1489],{"class":492},"for",[486,1491,1492],{"class":496}," (",[486,1494,1495],{"class":579},"std",[486,1497,583],{"class":496},[486,1499,1500],{"class":568},"size_t",[486,1502,1503],{"class":572}," g ",[486,1505,576],{"class":496},[486,1507,1508],{"class":845}," 0",[486,1510,849],{"class":496},[486,1512,1503],{"class":572},[486,1514,1515],{"class":496},"\u003C",[486,1517,755],{"class":572},[486,1519,626],{"class":496},[486,1521,1522],{"class":586},"size",[486,1524,1525],{"class":496},"();",[486,1527,1528],{"class":496}," ++",[486,1530,1012],{"class":572},[486,1532,1533],{"class":496},")\n",[486,1535,1536,1539,1541,1544,1546,1548,1551,1553,1556,1559,1561,1563,1565,1567,1569,1571],{"class":488,"line":604},[486,1537,1538],{"class":492},"  if",[486,1540,1492],{"class":496},[486,1542,1543],{"class":572},"fill",[486,1545,626],{"class":496},[486,1547,1086],{"class":572},[486,1549,1550],{"class":496},"[",[486,1552,1012],{"class":572},[486,1554,1555],{"class":496},"]",[486,1557,1558],{"class":496}," !=",[486,1560,580],{"class":579},[486,1562,583],{"class":496},[486,1564,1256],{"class":579},[486,1566,583],{"class":496},[486,1568,1267],{"class":572},[486,1570,1214],{"class":496},[486,1572,1573],{"class":496}," {\n",[486,1575,1576,1579,1582,1585,1587,1589,1591,1593,1595,1598,1601,1604],{"class":488,"line":635},[486,1577,1578],{"class":568},"    auto",[486,1580,1581],{"class":572}," rim",[486,1583,1584],{"class":496}," =",[486,1586,755],{"class":572},[486,1588,626],{"class":496},[486,1590,1165],{"class":572},[486,1592,1550],{"class":496},[486,1594,1012],{"class":572},[486,1596,1597],{"class":496},"][",[486,1599,1600],{"class":845},"0",[486,1602,1603],{"class":496},"];",[486,1605,1606],{"class":852},"    \u002F\u002F the rim that refused\n",[486,1608,1609,1611,1614,1616,1618,1620,1622,1624,1626,1628,1631,1633],{"class":488,"line":672},[486,1610,1578],{"class":568},[486,1612,1613],{"class":572}," edge",[486,1615,1584],{"class":496},[486,1617,755],{"class":572},[486,1619,626],{"class":496},[486,1621,1165],{"class":572},[486,1623,1550],{"class":496},[486,1625,1012],{"class":572},[486,1627,1597],{"class":496},[486,1629,1630],{"class":845},"1",[486,1632,1603],{"class":496},[486,1634,1635],{"class":852},"   \u002F\u002F at this edge of it\n",[486,1637,1638],{"class":488,"line":679},[486,1639,1640],{"class":496},"  }\n",[759,1642,1644],{"id":1643},"the-filled-mesh","The Filled Mesh",[477,1646,1649],{"className":479,"code":1647,"filename":1648,"language":7,"meta":481,"style":481},"auto filled = tf::make_filled_mesh(form, fill);         \u002F\u002F input's index type\nauto narrow = tf::make_filled_mesh\u003Cint>(form, fill);    \u002F\u002F faces written as int\n","filled_mesh.cpp",[483,1650,1651,1679],{"__ignoreMap":481},[486,1652,1653,1655,1657,1659,1661,1663,1665,1667,1669,1671,1673,1676],{"class":488,"line":489},[486,1654,569],{"class":568},[486,1656,737],{"class":572},[486,1658,576],{"class":496},[486,1660,580],{"class":579},[486,1662,583],{"class":496},[486,1664,746],{"class":586},[486,1666,590],{"class":496},[486,1668,698],{"class":572},[486,1670,724],{"class":496},[486,1672,755],{"class":572},[486,1674,1675],{"class":496},");",[486,1677,1678],{"class":852},"         \u002F\u002F input's index type\n",[486,1680,1681,1683,1686,1688,1690,1692,1694,1696,1699,1702,1704,1706,1708,1710],{"class":488,"line":604},[486,1682,569],{"class":568},[486,1684,1685],{"class":572}," narrow ",[486,1687,576],{"class":496},[486,1689,580],{"class":579},[486,1691,583],{"class":496},[486,1693,746],{"class":586},[486,1695,1515],{"class":496},[486,1697,1698],{"class":568},"int",[486,1700,1701],{"class":496},">(",[486,1703,698],{"class":572},[486,1705,724],{"class":496},[486,1707,755],{"class":572},[486,1709,1675],{"class":496},[486,1711,1712],{"class":852},"    \u002F\u002F faces written as int\n",[470,1714,1715],{},"A face no split reached is copied at its own arity, a carrying face a split reached is replaced by its plan, and the patches follow. The points are the input's own, then the minted points. A triangle mesh comes back as triangles; any other mesh comes back with dynamic faces.",[1717,1718,1720],"tip",{"icon":1719},"i-lucide-info",[470,1721,1722],{},"The fill works in the form's own coordinates. A tagged frame does not enter it, so minted points stand in the same space as the input's.",[1724,1725,1726],"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 .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}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}",{"title":481,"searchDepth":489,"depth":604,"links":1728},[1729,1732,1733,1736],{"id":761,"depth":604,"text":762,"children":1730},[1731],{"id":803,"depth":635,"text":804},{"id":810,"depth":604,"text":811},{"id":1002,"depth":604,"text":1003,"children":1734},[1735],{"id":1244,"depth":635,"text":1245},{"id":1643,"depth":604,"text":1644},"Hole filling — patches for a mesh's boundary rims that continue the surface around them.","md",null,{},{"icon":109},{"title":106,"description":1737},{"loc":107},"lK21tpkKQoQT33GKoF-eyoNVluzonD-pWQCq72pnPFc",[1746,1748],{"title":101,"path":102,"stem":103,"description":1747,"icon":104,"children":-1},"Dense scalar grids — signed distance fields, boolean CSG, slicing, and isosurface extraction.",{"title":111,"path":112,"stem":113,"description":1749,"icon":114,"children":-1},"Sparse symmetric positive definite solves — one pattern, many value sets, many right-hand sides.",1793443603528]