From c141cb9d74fbdf64bb2fcd1b8430f98767afba84 Mon Sep 17 00:00:00 2001 From: karadaniz Date: Thu, 15 Feb 2024 15:53:27 +0100 Subject: [PATCH] [spns#34841] Intersect2DMeshWith1DLine : throw exception if any node within mesh1D is connected to more than two edges --- src/MEDCoupling/MEDCouplingUMesh_intersection.cxx | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/MEDCoupling/MEDCouplingUMesh_intersection.cxx b/src/MEDCoupling/MEDCouplingUMesh_intersection.cxx index 8b569163d..36874bd56 100644 --- a/src/MEDCoupling/MEDCouplingUMesh_intersection.cxx +++ b/src/MEDCoupling/MEDCouplingUMesh_intersection.cxx @@ -1791,8 +1791,20 @@ void MEDCouplingUMesh::Intersect2DMeshWith1DLine(const MEDCouplingUMesh *mesh2D, { if(!mesh2D || !mesh1D) throw INTERP_KERNEL::Exception("MEDCouplingUMesh::Intersect2DMeshWith1DLine : input meshes must be not NULL !"); + + // Check if any node within mesh1D is connected to more than two edges + DataArrayIdType *mesh1DDesc1(DataArrayIdType::New()),*mesh1DDescIndx1(DataArrayIdType::New()),*mesh1DRevDesc1(DataArrayIdType::New()),*mesh1DRevDescIndx1(DataArrayIdType::New()); + MCAuto m1dd1(mesh1DDesc1),m1dd2(mesh1DDescIndx1),m1dd3(mesh1DRevDesc1),m1dd4(mesh1DRevDescIndx1); + MCAuto mesh1Desc(mesh1D->buildDescendingConnectivity(mesh1DDesc1,mesh1DDescIndx1,mesh1DRevDesc1,mesh1DRevDescIndx1)); + MCAuto dsi=mesh1DRevDescIndx1->deltaShiftIndex(); + MCAuto tpls = dsi->findIdsGreaterOrEqualTo(3); + if(tpls->getNumberOfTuples() != 0) + throw INTERP_KERNEL::Exception("MEDCouplingUMesh::Intersect2DMeshWith1DLine : Certain nodes of the 1D mesh are connected to more than 2 edges !\ + If the 1D mesh consists of mutiple lines, make sure those lines are not overlapping. "); + mesh2D->checkFullyDefined(); mesh1D->checkFullyDefined(); + const std::vector& compNames(mesh2D->getCoords()->getInfoOnComponents()); if(mesh2D->getMeshDimension()!=2 || mesh2D->getSpaceDimension()!=2 || mesh1D->getMeshDimension()!=1 || mesh1D->getSpaceDimension()!=2) throw INTERP_KERNEL::Exception("MEDCouplingUMesh::Intersect2DMeshWith1DLine works with mesh2D with spacedim=meshdim=2 and mesh1D with meshdim=1 spaceDim=2 !"); -- 2.39.2