[{"data":1,"prerenderedAt":1110},["ShallowReactive",2],{"navigation-docsPy":3,"lib-picker-navigation":188,"docsPy-\u002Fpy\u002Fmodules\u002Ftetmesh":473,"docsPy-\u002Fpy\u002Fmodules\u002Ftetmesh-surround":1105},[4],{"title":5,"path":6,"stem":7,"children":8,"page":32},"Py","\u002Fpy","py",[9,33,115,120,142,169],{"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,110],{"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},"Tetmesh","\u002Fpy\u002Fmodules\u002Ftetmesh","py\u002F2.modules\u002F15.tetmesh","i-lucide-pyramid",{"title":116,"path":117,"stem":118,"icon":119},"Benchmarks","\u002Fpy\u002Fbenchmarks","py\u002F3.benchmarks","i-lucide-chart-bar-stacked",{"title":121,"path":122,"stem":123,"children":124,"icon":32},"Blender","\u002Fpy\u002Fblender","py\u002F4.blender\u002F1.index",[125,127,132,137],{"title":39,"path":122,"stem":123,"icon":126},"i-vscode-icons:file-type-blender",{"title":128,"path":129,"stem":130,"icon":131},"Convert","\u002Fpy\u002Fblender\u002Fconvert","py\u002F4.blender\u002F2.convert","i-lucide-repeat",{"title":133,"path":134,"stem":135,"icon":136},"Scene","\u002Fpy\u002Fblender\u002Fscene","py\u002F4.blender\u002F3.scene","i-lucide-layers",{"title":138,"path":139,"stem":140,"icon":141},"Plugin Architecture","\u002Fpy\u002Fblender\u002Fplugin","py\u002F4.blender\u002F4.plugin","i-lucide-puzzle",{"title":143,"path":144,"stem":145,"children":146,"icon":32},"Examples","\u002Fpy\u002Fexamples","py\u002F5.examples\u002F0.index",[147,149,154,159,164],{"title":39,"path":144,"stem":145,"icon":148},"i-lucide-book-open",{"title":150,"path":151,"stem":152,"icon":153},"Core Functionality","\u002Fpy\u002Fexamples\u002Fcore-functionality","py\u002F5.examples\u002F2.core-functionality","i-lucide-code",{"title":155,"path":156,"stem":157,"icon":158},"Booleans and Domains from One Build","\u002Fpy\u002Fexamples\u002Farrangements","py\u002F5.examples\u002F3.arrangements","i-lucide-layers-3",{"title":160,"path":161,"stem":162,"icon":163},"VTK Integration","\u002Fpy\u002Fexamples\u002Fvtk-integration","py\u002F5.examples\u002F4.vtk-integration","i-lucide-grid-2x2",{"title":165,"path":166,"stem":167,"icon":168},"Raycast Rendering","\u002Fpy\u002Fexamples\u002Fraycast-rendering","py\u002F5.examples\u002F5.raycast-rendering","i-lucide-scan-line",{"title":170,"path":171,"stem":172,"children":173,"page":32},"About","\u002Fpy\u002Fabout","py\u002F6.about",[174,178,183],{"title":175,"path":176,"stem":177,"icon":148},"Research","\u002Fpy\u002Fabout\u002Fresearch","py\u002F6.about\u002F1.research",{"title":179,"path":180,"stem":181,"icon":182},"Contributing","\u002Fpy\u002Fabout\u002Fcontributing","py\u002F6.about\u002F2.contributing","i-lucide-heart-handshake",{"title":184,"path":185,"stem":186,"icon":187},"License","\u002Fpy\u002Fabout\u002Flicense","py\u002F6.about\u002F3.license","i-lucide-file-text",{"cpp":189,"py":327,"ts":373},[190],{"title":191,"path":192,"stem":193,"children":194,"page":32},"Cpp","\u002Fcpp","cpp",[195,209,264,267,289,314],{"title":10,"path":196,"stem":197,"children":198,"icon":32},"\u002Fcpp\u002Fgetting-started","cpp\u002F1.getting-started\u002F1.index",[199,200,203,206],{"title":15,"path":196,"stem":197,"icon":16},{"title":18,"path":201,"stem":202,"icon":21},"\u002Fcpp\u002Fgetting-started\u002Finstallation","cpp\u002F1.getting-started\u002F2.installation",{"title":23,"path":204,"stem":205,"icon":26},"\u002Fcpp\u002Fgetting-started\u002Flive-examples","cpp\u002F1.getting-started\u002F3.live-examples",{"title":28,"path":207,"stem":208,"icon":31},"\u002Fcpp\u002Fgetting-started\u002Frelease-notes","cpp\u002F1.getting-started\u002F4.release-notes",{"title":34,"path":210,"stem":211,"children":212,"icon":32},"\u002Fcpp\u002Fmodules","cpp\u002F2.modules\u002F00.index",[213,214,217,220,223,226,229,232,235,238,241,244,247,250,253,256,261],{"title":39,"path":210,"stem":211,"icon":40},{"title":42,"path":215,"stem":216,"icon":45},"\u002Fcpp\u002Fmodules\u002Fcore","cpp\u002F2.modules\u002F01.core",{"title":47,"path":218,"stem":219,"icon":50},"\u002Fcpp\u002Fmodules\u002Fspatial","cpp\u002F2.modules\u002F02.spatial",{"title":52,"path":221,"stem":222,"icon":55},"\u002Fcpp\u002Fmodules\u002Ftopology","cpp\u002F2.modules\u002F03.topology",{"title":57,"path":224,"stem":225,"icon":60},"\u002Fcpp\u002Fmodules\u002Fgeometry","cpp\u002F2.modules\u002F04.geometry",{"title":62,"path":227,"stem":228,"icon":65},"\u002Fcpp\u002Fmodules\u002Fremesh","cpp\u002F2.modules\u002F05.remesh",{"title":67,"path":230,"stem":231,"icon":70},"\u002Fcpp\u002Fmodules\u002Fintersect","cpp\u002F2.modules\u002F06.intersect",{"title":72,"path":233,"stem":234,"icon":75},"\u002Fcpp\u002Fmodules\u002Farrangement","cpp\u002F2.modules\u002F07.arrangement",{"title":77,"path":236,"stem":237,"icon":80},"\u002Fcpp\u002Fmodules\u002Fiso","cpp\u002F2.modules\u002F08.iso",{"title":82,"path":239,"stem":240,"icon":85},"\u002Fcpp\u002Fmodules\u002Fcsg","cpp\u002F2.modules\u002F09.csg",{"title":87,"path":242,"stem":243,"icon":31},"\u002Fcpp\u002Fmodules\u002Fclean","cpp\u002F2.modules\u002F10.clean",{"title":91,"path":245,"stem":246,"icon":94},"\u002Fcpp\u002Fmodules\u002Freindex","cpp\u002F2.modules\u002F11.reidx",{"title":96,"path":248,"stem":249,"icon":99},"\u002Fcpp\u002Fmodules\u002Fio","cpp\u002F2.modules\u002F12.io",{"title":101,"path":251,"stem":252,"icon":104},"\u002Fcpp\u002Fmodules\u002Fvolume","cpp\u002F2.modules\u002F13.volume",{"title":106,"path":254,"stem":255,"icon":109},"\u002Fcpp\u002Fmodules\u002Ffill","cpp\u002F2.modules\u002F14.fill",{"title":257,"path":258,"stem":259,"icon":260},"Linalg","\u002Fcpp\u002Fmodules\u002Flinalg","cpp\u002F2.modules\u002F15.linalg","i-lucide-sigma",{"title":111,"path":262,"stem":263,"icon":114},"\u002Fcpp\u002Fmodules\u002Ftetmesh","cpp\u002F2.modules\u002F16.tetmesh",{"title":116,"path":265,"stem":266,"icon":119},"\u002Fcpp\u002Fbenchmarks","cpp\u002F3.benchmarks",{"title":268,"path":269,"stem":270,"children":271,"icon":32},"VTK","\u002Fcpp\u002Fvtk","cpp\u002F4.vtk\u002F1.index",[272,273,276,281,286],{"title":39,"path":269,"stem":270,"icon":136},{"title":42,"path":274,"stem":275,"icon":45},"\u002Fcpp\u002Fvtk\u002Fcore","cpp\u002F4.vtk\u002F2.core",{"title":277,"path":278,"stem":279,"icon":280},"Functions","\u002Fcpp\u002Fvtk\u002Ffunctions","cpp\u002F4.vtk\u002F3.functions","i-lucide-function-square",{"title":282,"path":283,"stem":284,"icon":285},"Filters","\u002Fcpp\u002Fvtk\u002Ffilters","cpp\u002F4.vtk\u002F4.filters","i-lucide-filter",{"title":143,"path":287,"stem":288,"icon":26},"\u002Fcpp\u002Fvtk\u002Fexamples","cpp\u002F4.vtk\u002F5.examples",{"title":143,"path":290,"stem":291,"children":292,"icon":32},"\u002Fcpp\u002Fexamples","cpp\u002F5.examples\u002F0.index",[293,294,298,303,306,309],{"title":39,"path":290,"stem":291,"icon":148},{"title":295,"path":296,"stem":297,"icon":104},"Geometry Walkthrough","\u002Fcpp\u002Fexamples\u002Fmesh-assembly","cpp\u002F5.examples\u002F1.mesh-assembly",{"title":299,"path":300,"stem":301,"icon":302},"Point Cloud Alignment","\u002Fcpp\u002Fexamples\u002Falignment","cpp\u002F5.examples\u002F2.alignment","i-lucide-move",{"title":155,"path":304,"stem":305,"icon":158},"\u002Fcpp\u002Fexamples\u002Farrangements","cpp\u002F5.examples\u002F3.arrangements",{"title":160,"path":307,"stem":308,"icon":136},"\u002Fcpp\u002Fexamples\u002Fvtk","cpp\u002F5.examples\u002F4.vtk",{"title":310,"path":311,"stem":312,"icon":313},"Coming from Other Libraries","\u002Fcpp\u002Fexamples\u002Flibrary-comparisons","cpp\u002F5.examples\u002F5.library-comparisons","i-lucide-git-compare",{"title":170,"path":315,"stem":316,"children":317,"page":32},"\u002Fcpp\u002Fabout","cpp\u002F6.about",[318,321,324],{"title":175,"path":319,"stem":320,"icon":148},"\u002Fcpp\u002Fabout\u002Fresearch","cpp\u002F6.about\u002F1.research",{"title":179,"path":322,"stem":323,"icon":182},"\u002Fcpp\u002Fabout\u002Fcontributing","cpp\u002F6.about\u002F2.contributing",{"title":184,"path":325,"stem":326,"icon":187},"\u002Fcpp\u002Fabout\u002Flicense","cpp\u002F6.about\u002F3.license",[328],{"title":5,"path":6,"stem":7,"children":329,"page":32},[330,336,354,355,361,368],{"title":10,"path":11,"stem":12,"children":331,"icon":32},[332,333,334,335],{"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":337,"icon":32},[338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353],{"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":356,"icon":32},[357,358,359,360],{"title":39,"path":122,"stem":123,"icon":126},{"title":128,"path":129,"stem":130,"icon":131},{"title":133,"path":134,"stem":135,"icon":136},{"title":138,"path":139,"stem":140,"icon":141},{"title":143,"path":144,"stem":145,"children":362,"icon":32},[363,364,365,366,367],{"title":39,"path":144,"stem":145,"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,"icon":168},{"title":170,"path":171,"stem":172,"children":369,"page":32},[370,371,372],{"title":175,"path":176,"stem":177,"icon":148},{"title":179,"path":180,"stem":181,"icon":182},{"title":184,"path":185,"stem":186,"icon":187},[374],{"title":375,"path":376,"stem":377,"children":378,"page":32},"Ts","\u002Fts","ts",[379,393,440,443,460],{"title":10,"path":380,"stem":381,"children":382,"icon":32},"\u002Fts\u002Fgetting-started","ts\u002F1.getting-started\u002F1.index",[383,384,387,390],{"title":15,"path":380,"stem":381,"icon":16},{"title":18,"path":385,"stem":386,"icon":21},"\u002Fts\u002Fgetting-started\u002Finstallation","ts\u002F1.getting-started\u002F2.installation",{"title":23,"path":388,"stem":389,"icon":26},"\u002Fts\u002Fgetting-started\u002Flive-examples","ts\u002F1.getting-started\u002F3.live-examples",{"title":28,"path":391,"stem":392,"icon":31},"\u002Fts\u002Fgetting-started\u002Frelease-notes","ts\u002F1.getting-started\u002F4.release-notes",{"title":34,"path":394,"stem":395,"children":396,"icon":32},"\u002Fts\u002Fmodules","ts\u002F2.modules\u002F00.index",[397,398,401,404,407,410,413,416,419,422,425,428,431,434,437],{"title":39,"path":394,"stem":395,"icon":40},{"title":42,"path":399,"stem":400,"icon":45},"\u002Fts\u002Fmodules\u002Fcore","ts\u002F2.modules\u002F01.core",{"title":47,"path":402,"stem":403,"icon":50},"\u002Fts\u002Fmodules\u002Fspatial","ts\u002F2.modules\u002F02.spatial",{"title":52,"path":405,"stem":406,"icon":55},"\u002Fts\u002Fmodules\u002Ftopology","ts\u002F2.modules\u002F03.topology",{"title":57,"path":408,"stem":409,"icon":60},"\u002Fts\u002Fmodules\u002Fgeometry","ts\u002F2.modules\u002F04.geometry",{"title":62,"path":411,"stem":412,"icon":65},"\u002Fts\u002Fmodules\u002Fremesh","ts\u002F2.modules\u002F05.remesh",{"title":67,"path":414,"stem":415,"icon":70},"\u002Fts\u002Fmodules\u002Fintersect","ts\u002F2.modules\u002F06.intersect",{"title":72,"path":417,"stem":418,"icon":75},"\u002Fts\u002Fmodules\u002Farrangement","ts\u002F2.modules\u002F07.arrangement",{"title":77,"path":420,"stem":421,"icon":80},"\u002Fts\u002Fmodules\u002Fiso","ts\u002F2.modules\u002F08.iso",{"title":82,"path":423,"stem":424,"icon":85},"\u002Fts\u002Fmodules\u002Fcsg","ts\u002F2.modules\u002F09.csg",{"title":87,"path":426,"stem":427,"icon":31},"\u002Fts\u002Fmodules\u002Fclean","ts\u002F2.modules\u002F10.clean",{"title":91,"path":429,"stem":430,"icon":94},"\u002Fts\u002Fmodules\u002Freindex","ts\u002F2.modules\u002F11.reidx",{"title":96,"path":432,"stem":433,"icon":99},"\u002Fts\u002Fmodules\u002Fio","ts\u002F2.modules\u002F12.io",{"title":106,"path":435,"stem":436,"icon":109},"\u002Fts\u002Fmodules\u002Ffill","ts\u002F2.modules\u002F13.fill",{"title":111,"path":438,"stem":439,"icon":114},"\u002Fts\u002Fmodules\u002Ftetmesh","ts\u002F2.modules\u002F14.tetmesh",{"title":116,"path":441,"stem":442,"icon":119},"\u002Fts\u002Fbenchmarks","ts\u002F3.benchmarks",{"title":143,"path":444,"stem":445,"children":446,"icon":32},"\u002Fts\u002Fexamples","ts\u002F4.examples\u002F0.index",[447,448,451,456],{"title":39,"path":444,"stem":445,"icon":148},{"title":150,"path":449,"stem":450,"icon":153},"\u002Fts\u002Fexamples\u002Fcore-functionality","ts\u002F4.examples\u002F2.core-functionality",{"title":452,"path":453,"stem":454,"icon":455},"Alignment","\u002Fts\u002Fexamples\u002Falignment","ts\u002F4.examples\u002F3.alignment","i-lucide-move-3d",{"title":165,"path":457,"stem":458,"icon":459},"\u002Fts\u002Fexamples\u002Fraycast-render","ts\u002F4.examples\u002F4.raycast-render","i-lucide-image",{"title":170,"icon":32,"path":461,"stem":462,"children":463,"page":32},"\u002Fts\u002Fabout","ts\u002F5.about",[464,467,470],{"title":175,"path":465,"stem":466,"icon":148},"\u002Fts\u002Fabout\u002Fresearch","ts\u002F5.about\u002F1.research",{"title":179,"path":468,"stem":469,"icon":182},"\u002Fts\u002Fabout\u002Fcontributing","ts\u002F5.about\u002F2.contributing",{"title":184,"path":471,"stem":472,"icon":187},"\u002Fts\u002Fabout\u002Flicense","ts\u002F5.about\u002F3.license",{"id":474,"title":111,"body":475,"description":1097,"extension":1098,"links":1099,"meta":1100,"navigation":1101,"path":112,"seo":1102,"sitemap":1103,"stem":113,"__hash__":1104},"docsPy\u002Fpy\u002F2.modules\u002F15.tetmesh.md",{"type":476,"value":477,"toc":1092},"minimark",[478,486,489,518,522,638,767,770,781,785,915,931,935,942,1019,1088],[479,480,482],"note",{"icon":481},"i-lucide-info",[483,484,485],"p",{},"This module is in active development: its surface and its results may change between releases.",[483,487,488],{},"The Tetmesh module fills the solid a closed surface encloses with tetrahedra. The surface is recovered exactly: every input face is a union of tetrahedron faces, and the tetrahedralization is constrained Delaunay.",[490,491,496],"pre",{"className":492,"code":493,"language":494,"meta":495,"style":495},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import trueform as tf\n","python","",[497,498,499],"code",{"__ignoreMap":495},[500,501,504,508,512,515],"span",{"class":502,"line":503},"line",1,[500,505,507],{"class":506},"s7zQu","import",[500,509,511],{"class":510},"sTEyZ"," trueform ",[500,513,514],{"class":506},"as",[500,516,517],{"class":510}," tf\n",[519,520,521],"h2",{"id":521},"tet_mesh",[490,523,525],{"className":492,"code":524,"language":494,"meta":495,"style":495},"mesh = tf.Mesh(faces, points)\ntets, points, status = tf.tet_mesh(mesh)\n# tets: (T, 4) corners into points; points: (P, 3) float64\n\nif status == tf.TetMeshStatus.MESHED:\n    ...\n",[497,526,527,561,591,598,605,632],{"__ignoreMap":495},[500,528,529,532,536,539,542,546,549,552,555,558],{"class":502,"line":503},[500,530,531],{"class":510},"mesh ",[500,533,535],{"class":534},"sMK4o","=",[500,537,538],{"class":510}," tf",[500,540,541],{"class":534},".",[500,543,545],{"class":544},"s2Zo4","Mesh",[500,547,548],{"class":534},"(",[500,550,551],{"class":544},"faces",[500,553,554],{"class":534},",",[500,556,557],{"class":544}," points",[500,559,560],{"class":534},")\n",[500,562,564,567,569,571,573,576,578,580,582,584,586,589],{"class":502,"line":563},2,[500,565,566],{"class":510},"tets",[500,568,554],{"class":534},[500,570,557],{"class":510},[500,572,554],{"class":534},[500,574,575],{"class":510}," status ",[500,577,535],{"class":534},[500,579,538],{"class":510},[500,581,541],{"class":534},[500,583,521],{"class":544},[500,585,548],{"class":534},[500,587,588],{"class":544},"mesh",[500,590,560],{"class":534},[500,592,594],{"class":502,"line":593},3,[500,595,597],{"class":596},"sHwdD","# tets: (T, 4) corners into points; points: (P, 3) float64\n",[500,599,601],{"class":502,"line":600},4,[500,602,604],{"emptyLinePlaceholder":603},true,"\n",[500,606,608,611,613,616,618,620,624,626,629],{"class":502,"line":607},5,[500,609,610],{"class":506},"if",[500,612,575],{"class":510},[500,614,615],{"class":534},"==",[500,617,538],{"class":510},[500,619,541],{"class":534},[500,621,623],{"class":622},"swJcz","TetMeshStatus",[500,625,541],{"class":534},[500,627,628],{"class":622},"MESHED",[500,630,631],{"class":534},":\n",[500,633,635],{"class":502,"line":634},6,[500,636,637],{"class":510},"    ...\n",[639,640,641,657],"table",{},[642,643,644],"thead",{},[645,646,647,651,654],"tr",{},[648,649,650],"th",{},"Parameter",[648,652,653],{},"Type",[648,655,656],{},"Description",[658,659,660,674,693,711,727,748],"tbody",{},[645,661,662,667,671],{},[663,664,665],"td",{},[497,666,588],{},[663,668,669],{},[497,670,545],{},[663,672,673],{},"A 3D triangle mesh; its transformation places it, and its face membership and manifold edge link are reused",[645,675,676,681,690],{},[663,677,678],{},[497,679,680],{},"split_constraints",[663,682,683,686,687],{},[497,684,685],{},"bool",", default ",[497,688,689],{},"True",[663,691,692],{},"Cut the crossings the recovery finds; without it the surface is meshed as given and a crossing in it refuses",[645,694,695,700,708],{},[663,696,697],{},[497,698,699],{},"tolerance",[663,701,702,686,705],{},[497,703,704],{},"float",[497,706,707],{},"0.0",[663,709,710],{},"Plane pooling, in the mesh's coordinates: near-coplanar faces pool onto one plane at the entrance, and it is the band of every drain",[645,712,713,718,724],{},[663,714,715],{},[497,716,717],{},"site_budget_ratio",[663,719,720,723],{},[497,721,722],{},"int",", optional",[663,725,726],{},"The sites a run may hold per site its entrance states; a recovery past it refuses. Default: the library's",[645,728,729,734,741],{},[663,730,731],{},[497,732,733],{},"return_report",[663,735,736,686,738],{},[497,737,685],{},[497,739,740],{},"False",[663,742,743,744,747],{},"Return the ",[497,745,746],{},"TetMeshReport"," in the status's place",[645,749,750,755,761],{},[663,751,752],{},[497,753,754],{},"return_index_map",[663,756,757,686,759],{},[497,758,685],{},[497,760,740],{},[663,762,763,764],{},"Also return a ",[497,765,766],{},"TetMeshIndexMap",[483,768,769],{},"Faces that cross each other are cut where they cross, so a self-intersecting surface meshes too; inside is decided by the surface's winding, a cell kept when the surface winds around it a positive number of times. The points come back in float64 whatever the mesh's dtype: they are exact lattice positions mapped back, finer than a float32 holds. A mesh with a transformation is meshed where the transformation places it, and its points are world positions.",[483,771,772,773,776,777,780],{},"A crossing is found where the constraint recovery refuses it and is cut there, so a surface that crosses nowhere pays nothing for it. With ",[497,774,775],{},"split_constraints=False"," no crossing is cut (the report's ",[497,778,779],{},"drains"," is zero) and the first one the recovery names refuses; a clean surface gives the same cells either way.",[519,782,784],{"id":783},"the-index-map","The Index Map",[490,786,788],{"className":492,"code":787,"language":494,"meta":495,"style":495},"tets, points, status, imap = tf.tet_mesh(mesh, return_index_map=True)\nfor facet in imap.face_facets[f]:\n    rows = imap.facet_triangles[imap.facet_offsets[facet]:imap.facet_offsets[facet + 1]]\n    # rows: (k, 3) triangles into points, wound as the facet\n",[497,789,790,829,857,910],{"__ignoreMap":495},[500,791,792,794,796,798,800,803,805,808,810,812,814,816,818,820,822,826],{"class":502,"line":503},[500,793,566],{"class":510},[500,795,554],{"class":534},[500,797,557],{"class":510},[500,799,554],{"class":534},[500,801,802],{"class":510}," status",[500,804,554],{"class":534},[500,806,807],{"class":510}," imap ",[500,809,535],{"class":534},[500,811,538],{"class":510},[500,813,541],{"class":534},[500,815,521],{"class":544},[500,817,548],{"class":534},[500,819,588],{"class":544},[500,821,554],{"class":534},[500,823,825],{"class":824},"sHdIc"," return_index_map",[500,827,828],{"class":534},"=True)\n",[500,830,831,834,837,840,843,845,848,851,854],{"class":502,"line":563},[500,832,833],{"class":506},"for",[500,835,836],{"class":510}," facet ",[500,838,839],{"class":506},"in",[500,841,842],{"class":510}," imap",[500,844,541],{"class":534},[500,846,847],{"class":622},"face_facets",[500,849,850],{"class":534},"[",[500,852,853],{"class":622},"f",[500,855,856],{"class":534},"]:\n",[500,858,859,862,864,866,868,871,873,876,878,881,883,886,889,891,893,895,897,900,903,907],{"class":502,"line":593},[500,860,861],{"class":510},"    rows ",[500,863,535],{"class":534},[500,865,842],{"class":510},[500,867,541],{"class":534},[500,869,870],{"class":622},"facet_triangles",[500,872,850],{"class":534},[500,874,875],{"class":622},"imap",[500,877,541],{"class":534},[500,879,880],{"class":622},"facet_offsets",[500,882,850],{"class":534},[500,884,885],{"class":622},"facet",[500,887,888],{"class":534},"]:",[500,890,875],{"class":622},[500,892,541],{"class":534},[500,894,880],{"class":622},[500,896,850],{"class":534},[500,898,899],{"class":622},"facet ",[500,901,902],{"class":534},"+",[500,904,906],{"class":905},"sbssI"," 1",[500,908,909],{"class":534},"]]\n",[500,911,912],{"class":502,"line":600},[500,913,914],{"class":596},"    # rows: (k, 3) triangles into points, wound as the facet\n",[483,916,917,918,920,921,923,924,926,927,930],{},"Coplanar input triangles that meet wound alike are one facet. ",[497,919,880],{}," \u002F ",[497,922,870],{}," hold per facet the boundary triangles of the tet mesh covering it; ",[497,925,847],{}," (an ",[497,928,929],{},"OffsetBlockedArray",") lists per input face, ascending, the facets it lies in — one unless a crossing cut it. The map is only computed when asked for.",[519,932,934],{"id":933},"the-report","The Report",[483,936,937,938,941],{},"The call's third value is a ",[497,939,940],{},"tf.TetMeshStatus",":",[639,943,944,954],{},[642,945,946],{},[645,947,948,951],{},[648,949,950],{},"Status",[648,952,953],{},"Meaning",[658,955,956,965,975,989,999,1009],{},[645,957,958,962],{},[663,959,960],{},[497,961,628],{},[663,963,964],{},"Every constraint recovered and the surface winds consistently; the mesh is the cells it winds positively",[645,966,967,972],{},[663,968,969],{},[497,970,971],{},"REFUSED",[663,973,974],{},"Some constraint was refused, the entrance left a carrier without its triangles, or its lattice cannot resolve the crossings its passes kept naming; the report counts each kind. A mesh is returned only when the surface still winds consistently",[645,976,977,982],{},[663,978,979],{},[497,980,981],{},"OPEN",[663,983,984,985,988],{},"The recovered surface has a hole, a rim of free edges that hangs off no non-manifold attachment; no mesh. ",[497,986,987],{},"tf.fill_holes"," closes a hole",[645,990,991,996],{},[663,992,993],{},[497,994,995],{},"UNWOUND",[663,997,998],{},"The surface does not wind consistently, or it holds a sheet such as a flap whose free rim bounds nothing; no mesh",[645,1000,1001,1006],{},[663,1002,1003],{},[497,1004,1005],{},"RANK_DEFICIENT",[663,1007,1008],{},"The points span less than three dimensions",[645,1010,1011,1016],{},[663,1012,1013],{},[497,1014,1015],{},"CAPACITY",[663,1017,1018],{},"The cells or sites outgrew the index type",[483,1020,1021,1024,1025,1027,1028,1031,1032,1035,1036,1038,1039,1042,1043,1042,1046,1042,1049,1052,1053,1042,1055,1042,1058,1042,1061,1042,1064,1067,1068,1071,1072,1067,1075,1078,1079,1082,1083,1087],{},[497,1022,1023],{},"tf.tet_mesh(mesh, return_report=True)"," returns the ",[497,1026,746],{}," in the status's place; its diagnostics are measured only when it is asked for. It mirrors the C++ ",[497,1029,1030],{},"tf::tet_mesh_report",": ",[497,1033,1034],{},"status"," is a ",[497,1037,623],{},", the refusals are counted by kind (",[497,1040,1041],{},"refused_segments",", ",[497,1044,1045],{},"refused_depth",[497,1047,1048],{},"refused_budget",[497,1050,1051],{},"refused_faces","), the cuts by ",[497,1054,779],{},[497,1056,1057],{},"pairs_named",[497,1059,1060],{},"pairs_cut",[497,1062,1063],{},"triangles_cut",[497,1065,1066],{},"failed_triangles"," and ",[497,1069,1070],{},"pairs_unresolved",", the entrance's statements by ",[497,1073,1074],{},"dropped_degenerate",[497,1076,1077],{},"stitched_triangles",", and ",[497,1080,1081],{},"census"," is the constraint recovery's census as a dict. See the ",[1084,1085,1086],"a",{"href":262},"C++ Tetmesh module"," for every field.",[1089,1090,1091],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":495,"searchDepth":503,"depth":563,"links":1093},[1094,1095,1096],{"id":521,"depth":563,"text":521},{"id":783,"depth":563,"text":784},{"id":933,"depth":563,"text":934},"Constrained Delaunay tetrahedralization of closed surfaces.","md",null,{},{"icon":114},{"title":111,"description":1097},{"loc":112},"A-BJ_0KdOaXyQ-3RwyuxktHELU_kknL-YSts4JrMw4A",[1106,1108],{"title":106,"path":107,"stem":108,"description":1107,"icon":109,"children":-1},"Hole filling — patches that continue the surface around a mesh's boundary rims.",{"title":116,"path":117,"stem":118,"description":1109,"icon":119,"children":-1},"Performance comparisons against MeshLib, VTK, CGAL, libigl, Coal, FCL, and nanoflann.",1794391227165]