#include namespace netgen { unique_ptr GetOpenElements( const Mesh & m, int dom = 0 ) { static Timer t("GetOpenElements"); RegionTimer rt(t); auto mesh = make_unique(); *mesh = m; Array interesting_points(mesh->GetNP()); interesting_points = false; mesh->FindOpenElements(dom); NgArray openelements; openelements = mesh->OpenElements(); for (auto & el : openelements) for (auto i : el.PNums()) interesting_points[i] = true; for (auto & el : mesh->VolumeElements()) { int num_interesting_points = 0; for (auto pi : el.PNums()) if(interesting_points[pi]) num_interesting_points++; if(num_interesting_points==0) el.Delete(); el.SetIndex(num_interesting_points); } mesh->SetMaterial(1, "1_point"); mesh->SetMaterial(2, "2_points"); mesh->SetMaterial(3, "3_points"); mesh->SetMaterial(4, "4_points"); mesh->ClearSurfaceElements(); for (auto & el : openelements) mesh->AddSurfaceElement( el ); mesh->Compress(); return mesh; } unique_ptr FilterMesh( const Mesh & m, FlatArray points, FlatArray sels, FlatArray els ) { static Timer t("GetOpenElements"); RegionTimer rt(t); auto mesh_ptr = make_unique(); auto & mesh = *mesh_ptr; mesh = m; Array keep_point(mesh.GetNP()); Array keep_sel(mesh.GetNSE()); Array keep_el(mesh.GetNE()); mesh.LineSegments().DeleteAll(); keep_point = false; for(auto pi : points) keep_point[pi] = true; auto set_keep = [&] (auto & input, auto & keep_array, auto & els) { keep_array = false; for(auto ind : input) keep_array[ind] = true; for(auto ind : Range(els)) { bool & keep = keep_array[ind]; if(keep) continue; for(auto pi : mesh[ind].PNums()) keep |= keep_point[pi]; if(!keep) mesh[ind].Delete(); } for(auto i = 0; i