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