[{"data":1,"prerenderedAt":1433},["ShallowReactive",2],{"navigation-docsPy":3,"lib-picker-navigation":183,"docsPy-\u002Fpy\u002Fmodules\u002Ffill":461,"docsPy-\u002Fpy\u002Fmodules\u002Ffill-surround":1428},[4],{"title":5,"path":6,"stem":7,"children":8,"page":32},"Py","\u002Fpy","py",[9,33,110,115,137,164],{"title":10,"path":11,"stem":12,"children":13,"icon":32},"Getting Started","\u002Fpy\u002Fgetting-started","py\u002F1.getting-started\u002F1.index",[14,17,22,27],{"title":15,"path":11,"stem":12,"icon":16},"Introduction","i-lucide-house",{"title":18,"path":19,"stem":20,"icon":21},"Installation","\u002Fpy\u002Fgetting-started\u002Finstallation","py\u002F1.getting-started\u002F2.installation","i-lucide-download",{"title":23,"path":24,"stem":25,"icon":26},"Live Examples","\u002Fpy\u002Fgetting-started\u002Flive-examples","py\u002F1.getting-started\u002F3.live-examples","i-lucide-play",{"title":28,"path":29,"stem":30,"icon":31},"Release Notes","\u002Fpy\u002Fgetting-started\u002Frelease-notes","py\u002F1.getting-started\u002F4.release-notes","i-lucide-sparkles",false,{"title":34,"path":35,"stem":36,"children":37,"icon":32},"Modules","\u002Fpy\u002Fmodules","py\u002F2.modules\u002F00.index",[38,41,46,51,56,61,66,71,76,81,86,90,95,100,105],{"title":39,"path":35,"stem":36,"icon":40},"Overview","i-lucide-library",{"title":42,"path":43,"stem":44,"icon":45},"Core","\u002Fpy\u002Fmodules\u002Fcore","py\u002F2.modules\u002F01.core","i-lucide-atom",{"title":47,"path":48,"stem":49,"icon":50},"Spatial","\u002Fpy\u002Fmodules\u002Fspatial","py\u002F2.modules\u002F02.spatial","i-lucide-scale-3d",{"title":52,"path":53,"stem":54,"icon":55},"Topology","\u002Fpy\u002Fmodules\u002Ftopology","py\u002F2.modules\u002F03.topology","i-lucide-git-graph",{"title":57,"path":58,"stem":59,"icon":60},"Geometry","\u002Fpy\u002Fmodules\u002Fgeometry","py\u002F2.modules\u002F04.geometry","i-lucide-ruler",{"title":62,"path":63,"stem":64,"icon":65},"Remesh","\u002Fpy\u002Fmodules\u002Fremesh","py\u002F2.modules\u002F05.remesh","i-lucide-triangle",{"title":67,"path":68,"stem":69,"icon":70},"Intersect","\u002Fpy\u002Fmodules\u002Fintersect","py\u002F2.modules\u002F06.intersect","i-lucide-squares-intersect",{"title":72,"path":73,"stem":74,"icon":75},"Arrangement","\u002Fpy\u002Fmodules\u002Farrangement","py\u002F2.modules\u002F07.arrangement","i-lucide-scissors",{"title":77,"path":78,"stem":79,"icon":80},"Iso","\u002Fpy\u002Fmodules\u002Fiso","py\u002F2.modules\u002F08.iso","i-lucide-waves",{"title":82,"path":83,"stem":84,"icon":85},"CSG","\u002Fpy\u002Fmodules\u002Fcsg","py\u002F2.modules\u002F09.csg","i-lucide-shapes",{"title":87,"path":88,"stem":89,"icon":31},"Clean","\u002Fpy\u002Fmodules\u002Fclean","py\u002F2.modules\u002F10.clean",{"title":91,"path":92,"stem":93,"icon":94},"Reindex","\u002Fpy\u002Fmodules\u002Freindex","py\u002F2.modules\u002F11.reidx","i-lucide-shuffle",{"title":96,"path":97,"stem":98,"icon":99},"I\u002FO","\u002Fpy\u002Fmodules\u002Fio","py\u002F2.modules\u002F12.io","i-lucide-file-input",{"title":101,"path":102,"stem":103,"icon":104},"Volume","\u002Fpy\u002Fmodules\u002Fvolume","py\u002F2.modules\u002F13.volume","i-lucide-box",{"title":106,"path":107,"stem":108,"icon":109},"Fill","\u002Fpy\u002Fmodules\u002Ffill","py\u002F2.modules\u002F14.fill","i-lucide-paint-bucket",{"title":111,"path":112,"stem":113,"icon":114},"Benchmarks","\u002Fpy\u002Fbenchmarks","py\u002F3.benchmarks","i-lucide-chart-bar-stacked",{"title":116,"path":117,"stem":118,"children":119,"icon":32},"Blender","\u002Fpy\u002Fblender","py\u002F4.blender\u002F1.index",[120,122,127,132],{"title":39,"path":117,"stem":118,"icon":121},"i-vscode-icons:file-type-blender",{"title":123,"path":124,"stem":125,"icon":126},"Convert","\u002Fpy\u002Fblender\u002Fconvert","py\u002F4.blender\u002F2.convert","i-lucide-repeat",{"title":128,"path":129,"stem":130,"icon":131},"Scene","\u002Fpy\u002Fblender\u002Fscene","py\u002F4.blender\u002F3.scene","i-lucide-layers",{"title":133,"path":134,"stem":135,"icon":136},"Plugin Architecture","\u002Fpy\u002Fblender\u002Fplugin","py\u002F4.blender\u002F4.plugin","i-lucide-puzzle",{"title":138,"path":139,"stem":140,"children":141,"icon":32},"Examples","\u002Fpy\u002Fexamples","py\u002F5.examples\u002F0.index",[142,144,149,154,159],{"title":39,"path":139,"stem":140,"icon":143},"i-lucide-book-open",{"title":145,"path":146,"stem":147,"icon":148},"Core Functionality","\u002Fpy\u002Fexamples\u002Fcore-functionality","py\u002F5.examples\u002F2.core-functionality","i-lucide-code",{"title":150,"path":151,"stem":152,"icon":153},"Booleans and Domains from One Build","\u002Fpy\u002Fexamples\u002Farrangements","py\u002F5.examples\u002F3.arrangements","i-lucide-layers-3",{"title":155,"path":156,"stem":157,"icon":158},"VTK Integration","\u002Fpy\u002Fexamples\u002Fvtk-integration","py\u002F5.examples\u002F4.vtk-integration","i-lucide-grid-2x2",{"title":160,"path":161,"stem":162,"icon":163},"Raycast Rendering","\u002Fpy\u002Fexamples\u002Fraycast-rendering","py\u002F5.examples\u002F5.raycast-rendering","i-lucide-scan-line",{"title":165,"path":166,"stem":167,"children":168,"page":32},"About","\u002Fpy\u002Fabout","py\u002F6.about",[169,173,178],{"title":170,"path":171,"stem":172,"icon":143},"Research","\u002Fpy\u002Fabout\u002Fresearch","py\u002F6.about\u002F1.research",{"title":174,"path":175,"stem":176,"icon":177},"Contributing","\u002Fpy\u002Fabout\u002Fcontributing","py\u002F6.about\u002F2.contributing","i-lucide-heart-handshake",{"title":179,"path":180,"stem":181,"icon":182},"License","\u002Fpy\u002Fabout\u002Flicense","py\u002F6.about\u002F3.license","i-lucide-file-text",{"cpp":184,"py":319,"ts":364},[185],{"title":186,"path":187,"stem":188,"children":189,"page":32},"Cpp","\u002Fcpp","cpp",[190,204,256,259,281,306],{"title":10,"path":191,"stem":192,"children":193,"icon":32},"\u002Fcpp\u002Fgetting-started","cpp\u002F1.getting-started\u002F1.index",[194,195,198,201],{"title":15,"path":191,"stem":192,"icon":16},{"title":18,"path":196,"stem":197,"icon":21},"\u002Fcpp\u002Fgetting-started\u002Finstallation","cpp\u002F1.getting-started\u002F2.installation",{"title":23,"path":199,"stem":200,"icon":26},"\u002Fcpp\u002Fgetting-started\u002Flive-examples","cpp\u002F1.getting-started\u002F3.live-examples",{"title":28,"path":202,"stem":203,"icon":31},"\u002Fcpp\u002Fgetting-started\u002Frelease-notes","cpp\u002F1.getting-started\u002F4.release-notes",{"title":34,"path":205,"stem":206,"children":207,"icon":32},"\u002Fcpp\u002Fmodules","cpp\u002F2.modules\u002F00.index",[208,209,212,215,218,221,224,227,230,233,236,239,242,245,248,251],{"title":39,"path":205,"stem":206,"icon":40},{"title":42,"path":210,"stem":211,"icon":45},"\u002Fcpp\u002Fmodules\u002Fcore","cpp\u002F2.modules\u002F01.core",{"title":47,"path":213,"stem":214,"icon":50},"\u002Fcpp\u002Fmodules\u002Fspatial","cpp\u002F2.modules\u002F02.spatial",{"title":52,"path":216,"stem":217,"icon":55},"\u002Fcpp\u002Fmodules\u002Ftopology","cpp\u002F2.modules\u002F03.topology",{"title":57,"path":219,"stem":220,"icon":60},"\u002Fcpp\u002Fmodules\u002Fgeometry","cpp\u002F2.modules\u002F04.geometry",{"title":62,"path":222,"stem":223,"icon":65},"\u002Fcpp\u002Fmodules\u002Fremesh","cpp\u002F2.modules\u002F05.remesh",{"title":67,"path":225,"stem":226,"icon":70},"\u002Fcpp\u002Fmodules\u002Fintersect","cpp\u002F2.modules\u002F06.intersect",{"title":72,"path":228,"stem":229,"icon":75},"\u002Fcpp\u002Fmodules\u002Farrangement","cpp\u002F2.modules\u002F07.arrangement",{"title":77,"path":231,"stem":232,"icon":80},"\u002Fcpp\u002Fmodules\u002Fiso","cpp\u002F2.modules\u002F08.iso",{"title":82,"path":234,"stem":235,"icon":85},"\u002Fcpp\u002Fmodules\u002Fcsg","cpp\u002F2.modules\u002F09.csg",{"title":87,"path":237,"stem":238,"icon":31},"\u002Fcpp\u002Fmodules\u002Fclean","cpp\u002F2.modules\u002F10.clean",{"title":91,"path":240,"stem":241,"icon":94},"\u002Fcpp\u002Fmodules\u002Freindex","cpp\u002F2.modules\u002F11.reidx",{"title":96,"path":243,"stem":244,"icon":99},"\u002Fcpp\u002Fmodules\u002Fio","cpp\u002F2.modules\u002F12.io",{"title":101,"path":246,"stem":247,"icon":104},"\u002Fcpp\u002Fmodules\u002Fvolume","cpp\u002F2.modules\u002F13.volume",{"title":106,"path":249,"stem":250,"icon":109},"\u002Fcpp\u002Fmodules\u002Ffill","cpp\u002F2.modules\u002F14.fill",{"title":252,"path":253,"stem":254,"icon":255},"Linalg","\u002Fcpp\u002Fmodules\u002Flinalg","cpp\u002F2.modules\u002F15.linalg","i-lucide-sigma",{"title":111,"path":257,"stem":258,"icon":114},"\u002Fcpp\u002Fbenchmarks","cpp\u002F3.benchmarks",{"title":260,"path":261,"stem":262,"children":263,"icon":32},"VTK","\u002Fcpp\u002Fvtk","cpp\u002F4.vtk\u002F1.index",[264,265,268,273,278],{"title":39,"path":261,"stem":262,"icon":131},{"title":42,"path":266,"stem":267,"icon":45},"\u002Fcpp\u002Fvtk\u002Fcore","cpp\u002F4.vtk\u002F2.core",{"title":269,"path":270,"stem":271,"icon":272},"Functions","\u002Fcpp\u002Fvtk\u002Ffunctions","cpp\u002F4.vtk\u002F3.functions","i-lucide-function-square",{"title":274,"path":275,"stem":276,"icon":277},"Filters","\u002Fcpp\u002Fvtk\u002Ffilters","cpp\u002F4.vtk\u002F4.filters","i-lucide-filter",{"title":138,"path":279,"stem":280,"icon":26},"\u002Fcpp\u002Fvtk\u002Fexamples","cpp\u002F4.vtk\u002F5.examples",{"title":138,"path":282,"stem":283,"children":284,"icon":32},"\u002Fcpp\u002Fexamples","cpp\u002F5.examples\u002F0.index",[285,286,290,295,298,301],{"title":39,"path":282,"stem":283,"icon":143},{"title":287,"path":288,"stem":289,"icon":104},"Geometry Walkthrough","\u002Fcpp\u002Fexamples\u002Fmesh-assembly","cpp\u002F5.examples\u002F1.mesh-assembly",{"title":291,"path":292,"stem":293,"icon":294},"Point Cloud Alignment","\u002Fcpp\u002Fexamples\u002Falignment","cpp\u002F5.examples\u002F2.alignment","i-lucide-move",{"title":150,"path":296,"stem":297,"icon":153},"\u002Fcpp\u002Fexamples\u002Farrangements","cpp\u002F5.examples\u002F3.arrangements",{"title":155,"path":299,"stem":300,"icon":131},"\u002Fcpp\u002Fexamples\u002Fvtk","cpp\u002F5.examples\u002F4.vtk",{"title":302,"path":303,"stem":304,"icon":305},"Coming from Other Libraries","\u002Fcpp\u002Fexamples\u002Flibrary-comparisons","cpp\u002F5.examples\u002F5.library-comparisons","i-lucide-git-compare",{"title":165,"path":307,"stem":308,"children":309,"page":32},"\u002Fcpp\u002Fabout","cpp\u002F6.about",[310,313,316],{"title":170,"path":311,"stem":312,"icon":143},"\u002Fcpp\u002Fabout\u002Fresearch","cpp\u002F6.about\u002F1.research",{"title":174,"path":314,"stem":315,"icon":177},"\u002Fcpp\u002Fabout\u002Fcontributing","cpp\u002F6.about\u002F2.contributing",{"title":179,"path":317,"stem":318,"icon":182},"\u002Fcpp\u002Fabout\u002Flicense","cpp\u002F6.about\u002F3.license",[320],{"title":5,"path":6,"stem":7,"children":321,"page":32},[322,328,345,346,352,359],{"title":10,"path":11,"stem":12,"children":323,"icon":32},[324,325,326,327],{"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":329,"icon":32},[330,331,332,333,334,335,336,337,338,339,340,341,342,343,344],{"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,"children":347,"icon":32},[348,349,350,351],{"title":39,"path":117,"stem":118,"icon":121},{"title":123,"path":124,"stem":125,"icon":126},{"title":128,"path":129,"stem":130,"icon":131},{"title":133,"path":134,"stem":135,"icon":136},{"title":138,"path":139,"stem":140,"children":353,"icon":32},[354,355,356,357,358],{"title":39,"path":139,"stem":140,"icon":143},{"title":145,"path":146,"stem":147,"icon":148},{"title":150,"path":151,"stem":152,"icon":153},{"title":155,"path":156,"stem":157,"icon":158},{"title":160,"path":161,"stem":162,"icon":163},{"title":165,"path":166,"stem":167,"children":360,"page":32},[361,362,363],{"title":170,"path":171,"stem":172,"icon":143},{"title":174,"path":175,"stem":176,"icon":177},{"title":179,"path":180,"stem":181,"icon":182},[365],{"title":366,"path":367,"stem":368,"children":369,"page":32},"Ts","\u002Fts","ts",[370,384,428,431,448],{"title":10,"path":371,"stem":372,"children":373,"icon":32},"\u002Fts\u002Fgetting-started","ts\u002F1.getting-started\u002F1.index",[374,375,378,381],{"title":15,"path":371,"stem":372,"icon":16},{"title":18,"path":376,"stem":377,"icon":21},"\u002Fts\u002Fgetting-started\u002Finstallation","ts\u002F1.getting-started\u002F2.installation",{"title":23,"path":379,"stem":380,"icon":26},"\u002Fts\u002Fgetting-started\u002Flive-examples","ts\u002F1.getting-started\u002F3.live-examples",{"title":28,"path":382,"stem":383,"icon":31},"\u002Fts\u002Fgetting-started\u002Frelease-notes","ts\u002F1.getting-started\u002F4.release-notes",{"title":34,"path":385,"stem":386,"children":387,"icon":32},"\u002Fts\u002Fmodules","ts\u002F2.modules\u002F00.index",[388,389,392,395,398,401,404,407,410,413,416,419,422,425],{"title":39,"path":385,"stem":386,"icon":40},{"title":42,"path":390,"stem":391,"icon":45},"\u002Fts\u002Fmodules\u002Fcore","ts\u002F2.modules\u002F01.core",{"title":47,"path":393,"stem":394,"icon":50},"\u002Fts\u002Fmodules\u002Fspatial","ts\u002F2.modules\u002F02.spatial",{"title":52,"path":396,"stem":397,"icon":55},"\u002Fts\u002Fmodules\u002Ftopology","ts\u002F2.modules\u002F03.topology",{"title":57,"path":399,"stem":400,"icon":60},"\u002Fts\u002Fmodules\u002Fgeometry","ts\u002F2.modules\u002F04.geometry",{"title":62,"path":402,"stem":403,"icon":65},"\u002Fts\u002Fmodules\u002Fremesh","ts\u002F2.modules\u002F05.remesh",{"title":67,"path":405,"stem":406,"icon":70},"\u002Fts\u002Fmodules\u002Fintersect","ts\u002F2.modules\u002F06.intersect",{"title":72,"path":408,"stem":409,"icon":75},"\u002Fts\u002Fmodules\u002Farrangement","ts\u002F2.modules\u002F07.arrangement",{"title":77,"path":411,"stem":412,"icon":80},"\u002Fts\u002Fmodules\u002Fiso","ts\u002F2.modules\u002F08.iso",{"title":82,"path":414,"stem":415,"icon":85},"\u002Fts\u002Fmodules\u002Fcsg","ts\u002F2.modules\u002F09.csg",{"title":87,"path":417,"stem":418,"icon":31},"\u002Fts\u002Fmodules\u002Fclean","ts\u002F2.modules\u002F10.clean",{"title":91,"path":420,"stem":421,"icon":94},"\u002Fts\u002Fmodules\u002Freindex","ts\u002F2.modules\u002F11.reidx",{"title":96,"path":423,"stem":424,"icon":99},"\u002Fts\u002Fmodules\u002Fio","ts\u002F2.modules\u002F12.io",{"title":106,"path":426,"stem":427,"icon":109},"\u002Fts\u002Fmodules\u002Ffill","ts\u002F2.modules\u002F13.fill",{"title":111,"path":429,"stem":430,"icon":114},"\u002Fts\u002Fbenchmarks","ts\u002F3.benchmarks",{"title":138,"path":432,"stem":433,"children":434,"icon":32},"\u002Fts\u002Fexamples","ts\u002F4.examples\u002F0.index",[435,436,439,444],{"title":39,"path":432,"stem":433,"icon":143},{"title":145,"path":437,"stem":438,"icon":148},"\u002Fts\u002Fexamples\u002Fcore-functionality","ts\u002F4.examples\u002F2.core-functionality",{"title":440,"path":441,"stem":442,"icon":443},"Alignment","\u002Fts\u002Fexamples\u002Falignment","ts\u002F4.examples\u002F3.alignment","i-lucide-move-3d",{"title":160,"path":445,"stem":446,"icon":447},"\u002Fts\u002Fexamples\u002Fraycast-render","ts\u002F4.examples\u002F4.raycast-render","i-lucide-image",{"title":165,"icon":32,"path":449,"stem":450,"children":451,"page":32},"\u002Fts\u002Fabout","ts\u002F5.about",[452,455,458],{"title":170,"path":453,"stem":454,"icon":143},"\u002Fts\u002Fabout\u002Fresearch","ts\u002F5.about\u002F1.research",{"title":174,"path":456,"stem":457,"icon":177},"\u002Fts\u002Fabout\u002Fcontributing","ts\u002F5.about\u002F2.contributing",{"title":179,"path":459,"stem":460,"icon":182},"\u002Fts\u002Fabout\u002Flicense","ts\u002F5.about\u002F3.license",{"id":462,"title":106,"body":463,"description":1420,"extension":1421,"links":1422,"meta":1423,"navigation":1424,"path":107,"seo":1425,"sitemap":1426,"stem":108,"__hash__":1427},"docsPy\u002Fpy\u002F2.modules\u002F14.fill.md",{"type":464,"value":465,"toc":1414},"minimark",[466,470,499,503,626,742,758,761,773,778,794,989,995,1218,1313,1360,1362,1393,1403,1410],[467,468,469],"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.",[471,472,477],"pre",{"className":473,"code":474,"language":475,"meta":476,"style":476},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import trueform as tf\n","python","",[478,479,480],"code",{"__ignoreMap":476},[481,482,485,489,493,496],"span",{"class":483,"line":484},"line",1,[481,486,488],{"class":487},"s7zQu","import",[481,490,492],{"class":491},"sTEyZ"," trueform ",[481,494,495],{"class":487},"as",[481,497,498],{"class":491}," tf\n",[500,501,502],"h2",{"id":502},"fill_holes",[471,504,506],{"className":473,"code":505,"language":475,"meta":476,"style":476},"mesh = tf.Mesh(faces, points)\nrims = tf.boundary_rims(mesh)\n\nfill = tf.fill_holes(mesh, rims)\nfaces, points = tf.filled_mesh(mesh, fill)\n",[478,507,508,542,564,571,596],{"__ignoreMap":476},[481,509,510,513,517,520,523,527,530,533,536,539],{"class":483,"line":484},[481,511,512],{"class":491},"mesh ",[481,514,516],{"class":515},"sMK4o","=",[481,518,519],{"class":491}," tf",[481,521,522],{"class":515},".",[481,524,526],{"class":525},"s2Zo4","Mesh",[481,528,529],{"class":515},"(",[481,531,532],{"class":525},"faces",[481,534,535],{"class":515},",",[481,537,538],{"class":525}," points",[481,540,541],{"class":515},")\n",[481,543,545,548,550,552,554,557,559,562],{"class":483,"line":544},2,[481,546,547],{"class":491},"rims ",[481,549,516],{"class":515},[481,551,519],{"class":491},[481,553,522],{"class":515},[481,555,556],{"class":525},"boundary_rims",[481,558,529],{"class":515},[481,560,561],{"class":525},"mesh",[481,563,541],{"class":515},[481,565,567],{"class":483,"line":566},3,[481,568,570],{"emptyLinePlaceholder":569},true,"\n",[481,572,574,577,579,581,583,585,587,589,591,594],{"class":483,"line":573},4,[481,575,576],{"class":491},"fill ",[481,578,516],{"class":515},[481,580,519],{"class":491},[481,582,522],{"class":515},[481,584,502],{"class":525},[481,586,529],{"class":515},[481,588,561],{"class":525},[481,590,535],{"class":515},[481,592,593],{"class":525}," rims",[481,595,541],{"class":515},[481,597,599,601,603,606,608,610,612,615,617,619,621,624],{"class":483,"line":598},5,[481,600,532],{"class":491},[481,602,535],{"class":515},[481,604,605],{"class":491}," points ",[481,607,516],{"class":515},[481,609,519],{"class":491},[481,611,522],{"class":515},[481,613,614],{"class":525},"filled_mesh",[481,616,529],{"class":515},[481,618,561],{"class":525},[481,620,535],{"class":515},[481,622,623],{"class":525}," fill",[481,625,541],{"class":515},[627,628,629,645],"table",{},[630,631,632],"thead",{},[633,634,635,639,642],"tr",{},[636,637,638],"th",{},"Parameter",[636,640,641],{},"Type",[636,643,644],{},"Description",[646,647,648,662,685,708,726],"tbody",{},[633,649,650,655,659],{},[651,652,653],"td",{},[478,654,561],{},[651,656,657],{},[478,658,526],{},[651,660,661],{},"3D, triangles or dynamic faces; every rim edge must be carried by a triangle",[633,663,664,669,674],{},[651,665,666],{},[478,667,668],{},"rims",[651,670,671],{},[478,672,673],{},"tuple",[651,675,676,677,680,681,684],{},"The ",[478,678,679],{},"(vertices, faces, closed)"," that ",[478,682,683],{},"tf.boundary_rims"," returns",[633,686,687,692,701],{},[651,688,689],{},[478,690,691],{},"min_quality",[651,693,694,697,698],{},[478,695,696],{},"float",", default ",[478,699,700],{},"0.3",[651,702,703,704,707],{},"The floor a table patch is refined toward; ",[478,705,706],{},"0"," asks for none",[633,709,710,715,723],{},[651,711,712],{},[478,713,714],{},"fairing",[651,716,717,697,720],{},[478,718,719],{},"bool",[478,721,722],{},"True",[651,724,725],{},"Whether a refined table patch is faired against its host",[633,727,728,733,739],{},[651,729,730],{},[478,731,732],{},"split_rim",[651,734,735,697,737],{},[478,736,719],{},[478,738,722],{},[651,740,741],{},"Whether a tier may split the host's original rim edges",[467,743,744,745,749,750,753,754,757],{},"Each rim is one group, handed down three tiers: exhaustive enumeration for a rim of at most five vertices; then ",[746,747,748],"strong",{},"the chart",", which reads the hole as a height field over the plane its rim spans and continues the surface around it — or, where it refuses and the rim lies exactly in one plane, the flat ",[746,751,752],{},"lid"," in that plane; and otherwise ",[746,755,756],{},"the table",", the patch with the best smallest angle and least area over a tetrahedralization of the rim, refined and faired.",[467,759,760],{},"The chart decides on the mesh's own exact lattice, so a rim of only a few lattice units per edge — millions of times smaller than a float mesh — gets the lid or a refusal rather than an invented surface.",[467,762,763,764,766,767,769,770,522],{},"With ",[478,765,732],{},", a tier may split a rim edge; the split and the carrying face's new triangles are published in the result and replayed by ",[478,768,614],{},", 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 ",[478,771,772],{},"REFUSED_RIM_SPLIT",[774,775,777],"h3",{"id":776},"the-result","The result",[467,779,780,783,784,787,788,791,792,522],{},[478,781,782],{},"tf.fill_holes"," returns a ",[478,785,786],{},"tf.HoleFill",", laid out per group: entry ",[478,789,790],{},"g"," of every per-group lane belongs to rim ",[478,793,790],{},[627,795,796,808],{},[630,797,798],{},[633,799,800,803,805],{},[636,801,802],{},"Attribute",[636,804,641],{},[636,806,807],{},"Meaning",[646,809,810,836,854,890,908,930,955,975],{},[633,811,812,821,827],{},[651,813,814,817,818],{},[478,815,816],{},"triangle_offsets",", ",[478,819,820],{},"triangles",[651,822,823,826],{},[478,824,825],{},"np.ndarray"," (G+1,), (T, 3)",[651,828,829,830,832,833],{},"Group ",[478,831,790],{},"'s patch is rows ",[478,834,835],{},"triangle_offsets[g]:triangle_offsets[g + 1]",[633,837,838,846,851],{},[651,839,840,817,843],{},[478,841,842],{},"minted_offsets",[478,844,845],{},"minted_points",[651,847,848,850],{},[478,849,825],{}," (G+1,), (M, 3)",[651,852,853],{},"The points each patch minted, in the mesh's dtype",[633,855,856,870,875],{},[651,857,858,817,861,817,864,817,867],{},[478,859,860],{},"status",[478,862,863],{},"charted",[478,865,866],{},"refined",[478,868,869],{},"faired",[651,871,872,874],{},[478,873,825],{}," uint8",[651,876,877,878,817,881,817,884,817,887],{},"Values of ",[478,879,880],{},"tf.HoleFillStatus",[478,882,883],{},"tf.HoleChartStatus",[478,885,886],{},"tf.HoleRefineStatus",[478,888,889],{},"tf.HoleFairStatus",[633,891,892,897,901],{},[651,893,894],{},[478,895,896],{},"seam_max_angle",[651,898,899],{},[478,900,825],{},[651,902,903,904,907],{},"Largest angle across the seam in radians, ",[478,905,906],{},"-1"," where not computed",[633,909,910,915,920],{},[651,911,912],{},[478,913,914],{},"offending",[651,916,917,919],{},[478,918,825],{}," (G, 2)",[651,921,676,922,925,926,929],{},[478,923,924],{},"(rim, edge)"," a refusal names, ",[478,927,928],{},"(-1, -1)"," where none",[633,931,932,940,945],{},[651,933,934,817,937],{},[478,935,936],{},"splits",[478,938,939],{},"split_parameters",[651,941,942,944],{},[478,943,825],{}," (S, 4), (S,)",[651,946,947,948,951,952],{},"Split edges as ",[478,949,950],{},"(face, v0, v1, point)",", parameter over 64 from ",[478,953,954],{},"v0",[633,956,957,968,972],{},[651,958,959,817,962,817,965],{},[478,960,961],{},"plan_faces",[478,963,964],{},"plan_offsets",[478,966,967],{},"plan_triangles",[651,969,970],{},[478,971,825],{},[651,973,974],{},"The carrying faces the splits reached, and the rows of the (P, 3) triangles each becomes",[633,976,977,982,986],{},[651,978,979],{},[478,980,981],{},"group_offsets",[651,983,984],{},[478,985,825],{},[651,987,988],{},"The run of rims each group fills",[467,990,991,992,994],{},"A corner below the mesh's point count is one of its vertices; at or above it, it names the minted points read in order — the point order ",[478,993,614],{}," emits.",[471,996,998],{"className":473,"code":997,"language":475,"meta":476,"style":476},"for g in range(len(fill)):\n    if fill.status[g] != tf.HoleFillStatus.FILLED:\n        rim, edge = fill.offending[g]\n        print(f\"rim {rim} refused at edge {edge}: {tf.HoleFillStatus(fill.status[g]).name}\")\n    elif fill.charted[g] == tf.HoleChartStatus.RIM_PLANE:\n        print(f\"rim {g} lidded flat\")\n",[478,999,1000,1027,1065,1090,1162,1196],{"__ignoreMap":476},[481,1001,1002,1005,1008,1011,1014,1016,1019,1021,1024],{"class":483,"line":484},[481,1003,1004],{"class":487},"for",[481,1006,1007],{"class":491}," g ",[481,1009,1010],{"class":487},"in",[481,1012,1013],{"class":525}," range",[481,1015,529],{"class":515},[481,1017,1018],{"class":525},"len",[481,1020,529],{"class":515},[481,1022,1023],{"class":525},"fill",[481,1025,1026],{"class":515},")):\n",[481,1028,1029,1032,1034,1036,1039,1042,1044,1047,1050,1052,1054,1057,1059,1062],{"class":483,"line":544},[481,1030,1031],{"class":487},"    if",[481,1033,623],{"class":491},[481,1035,522],{"class":515},[481,1037,860],{"class":1038},"swJcz",[481,1040,1041],{"class":515},"[",[481,1043,790],{"class":1038},[481,1045,1046],{"class":515},"]",[481,1048,1049],{"class":515}," !=",[481,1051,519],{"class":491},[481,1053,522],{"class":515},[481,1055,1056],{"class":1038},"HoleFillStatus",[481,1058,522],{"class":515},[481,1060,1061],{"class":1038},"FILLED",[481,1063,1064],{"class":515},":\n",[481,1066,1067,1070,1072,1075,1077,1079,1081,1083,1085,1087],{"class":483,"line":566},[481,1068,1069],{"class":491},"        rim",[481,1071,535],{"class":515},[481,1073,1074],{"class":491}," edge ",[481,1076,516],{"class":515},[481,1078,623],{"class":491},[481,1080,522],{"class":515},[481,1082,914],{"class":1038},[481,1084,1041],{"class":515},[481,1086,790],{"class":1038},[481,1088,1089],{"class":515},"]\n",[481,1091,1092,1095,1097,1101,1105,1109,1112,1115,1118,1120,1123,1125,1128,1130,1133,1135,1137,1139,1141,1143,1145,1147,1149,1152,1155,1157,1160],{"class":483,"line":573},[481,1093,1094],{"class":525},"        print",[481,1096,529],{"class":515},[481,1098,1100],{"class":1099},"spNyl","f",[481,1102,1104],{"class":1103},"sfazB","\"rim ",[481,1106,1108],{"class":1107},"sbssI","{",[481,1110,1111],{"class":525},"rim",[481,1113,1114],{"class":1107},"}",[481,1116,1117],{"class":1103}," refused at edge ",[481,1119,1108],{"class":1107},[481,1121,1122],{"class":525},"edge",[481,1124,1114],{"class":1107},[481,1126,1127],{"class":1103},": ",[481,1129,1108],{"class":1107},[481,1131,1132],{"class":525},"tf",[481,1134,522],{"class":515},[481,1136,1056],{"class":525},[481,1138,529],{"class":515},[481,1140,1023],{"class":525},[481,1142,522],{"class":515},[481,1144,860],{"class":1038},[481,1146,1041],{"class":515},[481,1148,790],{"class":1038},[481,1150,1151],{"class":515},"]).",[481,1153,1154],{"class":1038},"name",[481,1156,1114],{"class":1107},[481,1158,1159],{"class":1103},"\"",[481,1161,541],{"class":515},[481,1163,1164,1167,1169,1171,1173,1175,1177,1179,1182,1184,1186,1189,1191,1194],{"class":483,"line":598},[481,1165,1166],{"class":487},"    elif",[481,1168,623],{"class":491},[481,1170,522],{"class":515},[481,1172,863],{"class":1038},[481,1174,1041],{"class":515},[481,1176,790],{"class":1038},[481,1178,1046],{"class":515},[481,1180,1181],{"class":515}," ==",[481,1183,519],{"class":491},[481,1185,522],{"class":515},[481,1187,1188],{"class":1038},"HoleChartStatus",[481,1190,522],{"class":515},[481,1192,1193],{"class":1038},"RIM_PLANE",[481,1195,1064],{"class":515},[481,1197,1199,1201,1203,1205,1207,1209,1211,1213,1216],{"class":483,"line":1198},6,[481,1200,1094],{"class":525},[481,1202,529],{"class":515},[481,1204,1100],{"class":1099},[481,1206,1104],{"class":1103},[481,1208,1108],{"class":1107},[481,1210,790],{"class":525},[481,1212,1114],{"class":1107},[481,1214,1215],{"class":1103}," lidded flat\"",[481,1217,541],{"class":515},[627,1219,1220,1230],{},[630,1221,1222],{},[633,1223,1224,1228],{},[636,1225,1226],{},[478,1227,1056],{},[636,1229,807],{},[646,1231,1232,1241,1251,1261,1271,1281,1291,1301],{},[633,1233,1234,1238],{},[651,1235,1236],{},[478,1237,1061],{},[651,1239,1240],{},"The group holds a patch",[633,1242,1243,1248],{},[651,1244,1245],{},[478,1246,1247],{},"REFUSED_OPEN",[651,1249,1250],{},"A rim does not close",[633,1252,1253,1258],{},[651,1254,1255],{},[478,1256,1257],{},"REFUSED_INVALID_RIM",[651,1259,1260],{},"The rim is not a simple cycle of triangle-carried edges",[633,1262,1263,1268],{},[651,1264,1265],{},[478,1266,1267],{},"REFUSED_HOST_FACE",[651,1269,1270],{},"A carrying triangle states no usable plane",[633,1272,1273,1278],{},[651,1274,1275],{},[478,1276,1277],{},"REFUSED_PROTECTION_DEPTH",[651,1279,1280],{},"A rim edge could not be recovered in the table's complex",[633,1282,1283,1288],{},[651,1284,1285],{},[478,1286,1287],{},"REFUSED_TABLE",[651,1289,1290],{},"No admissible triangulation of the rim",[633,1292,1293,1298],{},[651,1294,1295],{},[478,1296,1297],{},"REFUSED_RESOURCE",[651,1299,1300],{},"The index type cannot name the work",[633,1302,1303,1307],{},[651,1304,1305],{},[478,1306,772],{},[651,1308,1309,1310,1312],{},"The rim fills only by a split and ",[478,1311,732],{}," is off",[467,1314,1315,1317,1318,1321,1322,1324,1325,1328,1329,817,1332,817,1335,817,1338,817,1341,817,1344,817,1347,817,1350,817,1353,817,1356,1359],{},[478,1316,1188],{}," is ",[478,1319,1320],{},"ADMITTED"," (the chart continues the host), ",[478,1323,1193],{}," (the flat lid), ",[478,1326,1327],{},"NOT_ATTEMPTED",", or the reason the chart refused: ",[478,1330,1331],{},"NO_AREA",[478,1333,1334],{},"STEEP",[478,1336,1337],{},"FOLDED",[478,1339,1340],{},"COLLAR_ARITY",[478,1342,1343],{},"UNCOVERED",[478,1345,1346],{},"UNSAMPLED",[478,1348,1349],{},"UNSOLVED",[478,1351,1352],{},"FORBIDDEN_CHORD",[478,1354,1355],{},"RESOURCE",[478,1357,1358],{},"OUT_OF_LATTICE",". A refusal hands the rim to the table and stays stated whatever the table then makes of it.",[500,1361,614],{"id":614},[471,1363,1365],{"className":473,"code":1364,"language":475,"meta":476,"style":476},"faces, points = tf.filled_mesh(mesh, fill)\n",[478,1366,1367],{"__ignoreMap":476},[481,1368,1369,1371,1373,1375,1377,1379,1381,1383,1385,1387,1389,1391],{"class":483,"line":484},[481,1370,532],{"class":491},[481,1372,535],{"class":515},[481,1374,605],{"class":491},[481,1376,516],{"class":515},[481,1378,519],{"class":491},[481,1380,522],{"class":515},[481,1382,614],{"class":525},[481,1384,529],{"class":515},[481,1386,561],{"class":525},[481,1388,535],{"class":515},[481,1390,623],{"class":525},[481,1392,541],{"class":515},[467,1394,1395,1396,1399,1400,522],{},"The input with what the fill changed: a face no split reached is copied, a carrying face a split reached is replaced by its plan, and the patches follow. The points are the input's, then the minted ones. A triangle mesh comes back as an ",[478,1397,1398],{},"(N, 3)"," array; a dynamic mesh comes back as an ",[478,1401,1402],{},"OffsetBlockedArray",[1404,1405,1407],"tip",{"icon":1406},"i-lucide-info",[467,1408,1409],{},"The fill works in the mesh's own coordinates; a transformation set on the mesh does not enter it.",[1411,1412,1413],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":476,"searchDepth":484,"depth":544,"links":1415},[1416,1419],{"id":502,"depth":544,"text":502,"children":1417},[1418],{"id":776,"depth":566,"text":777},{"id":614,"depth":544,"text":614},"Hole filling — patches that continue the surface around a mesh's boundary rims.","md",null,{},{"icon":109},{"title":106,"description":1420},{"loc":107},"XiT-neByOfil7M0TdPHCJL2IP9LqD5l_dEVOUNNV4Co",[1429,1431],{"title":101,"path":102,"stem":103,"description":1430,"icon":104,"children":-1},"Dense scalar grids — signed distance fields, CSG, slicing, and isosurfaces.",{"title":111,"path":112,"stem":113,"description":1432,"icon":114,"children":-1},"Performance comparisons against MeshLib, VTK, CGAL, libigl, Coal, FCL, and nanoflann.",1793443612015]