From: ageay Date: Tue, 14 Feb 2012 09:58:46 +0000 (+0000) Subject: IntersectMesh with quadratic elements X-Git-Tag: V6_main_FINAL~866 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=e8ea89d726ae17c2e3d5bc9af343144ed727c9bf;p=tools%2Fmedcoupling.git IntersectMesh with quadratic elements --- diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.cxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.cxx index 592ee26ad..fa32b10b1 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.cxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.cxx @@ -19,6 +19,7 @@ #include "InterpKernelGeo2DComposedEdge.hxx" #include "InterpKernelGeo2DElementaryEdge.hxx" +#include "InterpKernelGeo2DEdgeArcCircle.hxx" #include "InterpKernelGeo2DEdgeInfLin.hxx" #include "InterpKernelException.hxx" @@ -116,6 +117,18 @@ bool ComposedEdge::presenceOfOn() const return ret; } +bool ComposedEdge::presenceOfQuadraticEdge() const +{ + bool ret=false; + for(std::list::const_iterator iter=_sub_edges.begin();iter!=_sub_edges.end() && !ret;iter++) + { + Edge *e=(*iter)->getPtr(); + if(e) + ret=dynamic_cast(e)!=0; + } + return ret; +} + void ComposedEdge::initLocations() const { for(std::list::const_iterator iter=_sub_edges.begin();iter!=_sub_edges.end();iter++) diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.hxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.hxx index 248f9738b..1738b353c 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.hxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.hxx @@ -47,6 +47,7 @@ namespace INTERP_KERNEL void reverse(); int recursiveSize() const { return (int)_sub_edges.size(); } bool presenceOfOn() const; + bool presenceOfQuadraticEdge() const; void initLocations() const; ComposedEdge *clone() const; bool isNodeIn(Node *n) const; diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DNode.cxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DNode.cxx index a844c3d3c..6ebe9a53f 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DNode.cxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DNode.cxx @@ -131,6 +131,19 @@ void Node::applySimilarity(double xBary, double yBary, double dimChar) _coords[1]=(_coords[1]-yBary)/dimChar; } +/*! + * apply the reverse Similarity transformation on this. + * This method is the opposite of Node::applySimilarity method to retrieve the initial state. + * @param xBary is the opposite of the X translation to do. + * @param yBary is the opposite of the Y translation to do. + * @param dimChar is the reduction factor. + */ +void Node::unApplySimilarity(double xBary, double yBary, double dimChar) +{ + _coords[0]=_coords[0]*dimChar+xBary; + _coords[1]=_coords[1]*dimChar+yBary; +} + /*! * Called by QuadraticPolygon::splitAbs method. */ diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DNode.hxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DNode.hxx index bccab067b..0faeb2397 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DNode.hxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DNode.hxx @@ -76,6 +76,7 @@ namespace INTERP_KERNEL //returns an angle in -Pi;Pi static double computeAngle(const double *pt1, const double *pt2); void applySimilarity(double xBary, double yBary, double dimChar); + void unApplySimilarity(double xBary, double yBary, double dimChar); static double dot(const double *vect1, const double *vect2) { return vect1[0]*vect2[0]+vect1[1]*vect2[1]; } static double sign(double val) { if(val>=0) return 1.; else return -1.; } static double norm(const double *vect) { return sqrt(vect[0]*vect[0]+vect[1]*vect[1]); } diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DQuadraticPolygon.cxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DQuadraticPolygon.cxx index 1a96efa8e..e2484bc18 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DQuadraticPolygon.cxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DQuadraticPolygon.cxx @@ -25,6 +25,8 @@ #include "InterpKernelGeo2DBounds.hxx" #include "InterpKernelGeo2DEdge.txx" +#include "NormalizedUnstructuredMesh.hxx" + #include #include #include @@ -295,79 +297,86 @@ void QuadraticPolygon::splitAbs(QuadraticPolygon& other, const std::map& mapp, bool isQuad, const int *nodalBg, const double *coords, const int *descBg, const int *descEnd, const std::vector >& intersectEdges) { - if(!isQuad) - { - std::size_t nbOfSeg=std::distance(descBg,descEnd); - for(std::size_t i=0;i0; - int edgeId=abs(descBg[i])-1; - const std::vector& subEdge=intersectEdges[edgeId]; - std::size_t nbOfSubEdges=subEdge.size()/2; - for(std::size_t j=0;j0; - int edgeId=abs(descBg[i])-1; - const std::vector& subEdge=intersectEdges[edgeId]; - std::size_t nbOfSubEdges=subEdge.size()/2; - if(colinearity) - { - for(std::size_t j=0;jbuildEdgeLyingOnMe(start,end); - ElementaryEdge *eee=new ElementaryEdge(ee,true); - pushBack(eee); - } - e->decrRef(); - } - st0->decrRef(); endd0->decrRef(); middle0->decrRef(); - } - } + appendEdgeFromCrudeDataArray(i,mapp,isQuad,nodalBg,coords,descBg,descEnd,intersectEdges); + } +} + +void QuadraticPolygon::appendEdgeFromCrudeDataArray(std::size_t edgePos, const std::map& mapp, bool isQuad, const int *nodalBg, const double *coords, + const int *descBg, const int *descEnd, const std::vector >& intersectEdges) +{ + if(!isQuad) + { + bool direct=descBg[edgePos]>0; + int edgeId=abs(descBg[edgePos])-1; + const std::vector& subEdge=intersectEdges[edgeId]; + std::size_t nbOfSubEdges=subEdge.size()/2; + for(std::size_t j=0;j0; + int edgeId=abs(descBg[edgePos])-1; + const std::vector& subEdge=intersectEdges[edgeId]; + std::size_t nbOfSubEdges=subEdge.size()/2; + if(colinearity) + { + for(std::size_t j=0;jdecrRef(); + } + st0->decrRef(); endd0->decrRef(); middle0->decrRef(); + } +} + +void QuadraticPolygon::appendSubEdgeFromCrudeDataArray(Edge *baseEdge, std::size_t j, bool direct, int edgeId, const std::vector& subEdge, const std::map& mapp) +{ + std::size_t nbOfSubEdges=subEdge.size()/2; + if(!baseEdge) + {//it is not a quadratic subedge + Node *start=(*mapp.find(direct?subEdge[2*j]:subEdge[2*nbOfSubEdges-2*j-1])).second; + Node *end=(*mapp.find(direct?subEdge[2*j+1]:subEdge[2*nbOfSubEdges-2*j-2])).second; + ElementaryEdge *e=ElementaryEdge::BuildEdgeFromCrudeDataArray(true,start,end); + pushBack(e); + } + else + {//it is a quadratic subedge + Node *start=(*mapp.find(direct?subEdge[2*j]:subEdge[2*nbOfSubEdges-2*j-1])).second; + Node *end=(*mapp.find(direct?subEdge[2*j+1]:subEdge[2*nbOfSubEdges-2*j-2])).second; + Edge *ee=baseEdge->buildEdgeLyingOnMe(start,end); + ElementaryEdge *eee=new ElementaryEdge(ee,true); + pushBack(eee); + } } /*! * This method builds from descending conn of a quadratic polygon stored in crude mode (MEDCoupling). Descending conn is in FORTRAN relative mode in order to give the * orientation of edge. */ -void QuadraticPolygon::buildFromCrudeDataArray2(const std::map& mapp, bool isQuad, const int *descBg, const int *descEnd, const std::vector >& intersectEdges, +void QuadraticPolygon::buildFromCrudeDataArray2(const std::map& mapp, bool isQuad, const int *nodalBg, const double *coords, const int *descBg, const int *descEnd, const std::vector >& intersectEdges, const INTERP_KERNEL::QuadraticPolygon& pol1, const int *descBg1, const int *descEnd1, const std::vector >& intersectEdges1, const std::vector< std::vector >& colinear1) { @@ -377,8 +386,8 @@ void QuadraticPolygon::buildFromCrudeDataArray2(const std::map0; int edgeId=abs(descBg[i])-1;//current edge id of pol2 bool directos=colinear1[edgeId].empty(); - int idIn1=-1; - bool direct1;//store is needed the direction in 1 + int idIn1=-1;//store if needed the cell id in 1 + bool direct1;//store if needed the direction in 1 int offset1=0; if(!directos) {// if the current edge of pol2 has one or more colinear edges part into pol1 @@ -398,13 +407,7 @@ void QuadraticPolygon::buildFromCrudeDataArray2(const std::map build new Edge instance + //appendEdgeFromCrudeDataArray(j,mapp,isQuad,nodalBg,coords,descBg,descEnd,intersectEdges); Node *start=(*mapp.find(idBg)).second; Node *end=(*mapp.find(idEnd)).second; ElementaryEdge *e=ElementaryEdge::BuildEdgeFromCrudeDataArray(true,start,end); @@ -444,10 +448,11 @@ void QuadraticPolygon::buildFromCrudeDataArray2(const std::map& mapp, std::vector& conn, std::vector& connI) +void QuadraticPolygon::appendCrudeData(const std::map& mapp, double xBary, double yBary, double fact, int offset, std::vector& addCoordsQuadratic, std::vector& conn, std::vector& connI) const { int nbOfNodesInPg=0; - conn.push_back(5); + bool presenceOfQuadratic=presenceOfQuadraticEdge(); + conn.push_back(presenceOfQuadratic?NORM_QPOLYG:NORM_POLYGON); for(std::list::const_iterator it=_sub_edges.begin();it!=_sub_edges.end();it++) { Node *tmp=0; @@ -456,6 +461,20 @@ void QuadraticPolygon::appendCrudeData(const std::map conn.push_back((*it1).second); nbOfNodesInPg++; } + if(presenceOfQuadratic) + { + int j=0; + int off=offset+((int)addCoordsQuadratic.size())/2; + for(std::list::const_iterator it=_sub_edges.begin();it!=_sub_edges.end();it++,j++,nbOfNodesInPg++) + { + INTERP_KERNEL::Node *node=(*it)->getPtr()->buildRepresentantOfMySelf(); + node->unApplySimilarity(xBary,yBary,fact); + addCoordsQuadratic.push_back((*node)[0]); + addCoordsQuadratic.push_back((*node)[1]); + conn.push_back(off+j); + node->decrRef(); + } + } connI.push_back(connI.back()+nbOfNodesInPg+1); } @@ -463,16 +482,16 @@ void QuadraticPolygon::appendCrudeData(const std::map * This method make the hypothesis that 'this' and 'other' are splited at the minimum into edges that are fully IN, OUT or ON. * This method returns newly created polygons in 'conn' and 'connI' and the corresponding ids ('idThis','idOther') are stored respectively into 'nbThis' and 'nbOther'. */ -void QuadraticPolygon::buildPartitionsAbs(QuadraticPolygon& other, const std::map& mapp, int idThis, int idOther, std::vector& conn, std::vector& connI, std::vector& nbThis, std::vector& nbOther) +void QuadraticPolygon::buildPartitionsAbs(QuadraticPolygon& other, const std::map& mapp, int idThis, int idOther, int offset, std::vector& addCoordsQuadratic, std::vector& conn, std::vector& connI, std::vector& nbThis, std::vector& nbOther) { double xBaryBB, yBaryBB; - normalizeExt(&other, xBaryBB, yBaryBB); + double fact=normalizeExt(&other, xBaryBB, yBaryBB); //Locate 'this' relative to 'other' other.performLocatingOperation(*this); std::vector res=buildIntersectionPolygons(other,*this); for(std::vector::iterator it=res.begin();it!=res.end();it++) { - (*it)->appendCrudeData(mapp,conn,connI); + (*it)->appendCrudeData(mapp,xBaryBB,yBaryBB,fact,offset,addCoordsQuadratic,conn,connI); nbThis.push_back(idThis); nbOther.push_back(idOther); delete *it; diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DQuadraticPolygon.hxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DQuadraticPolygon.hxx index bab62ab32..931ba1d9d 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DQuadraticPolygon.hxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DQuadraticPolygon.hxx @@ -58,12 +58,16 @@ namespace INTERP_KERNEL std::vector& edgesThis, int cellIdThis, std::vector< std::vector >& edgesInOtherColinearWithThis, std::vector< std::vector >& subDivOther, std::vector& addCoo); void buildFromCrudeDataArray(const std::map& mapp, bool isQuad, const int *nodalBg, const double *coords, const int *descBg, const int *descEnd, const std::vector >& intersectEdges); - void buildFromCrudeDataArray2(const std::map& mapp, bool isQuad, const int *descBg, const int *descEnd, const std::vector >& intersectEdges, + void buildFromCrudeDataArray2(const std::map& mapp, bool isQuad, const int *nodalBg, const double *coords, const int *descBg, const int *descEnd, const std::vector >& intersectEdges, const INTERP_KERNEL::QuadraticPolygon& pol1, const int *descBg1, const int *descEnd1, const std::vector >& intersectEdges1, const std::vector< std::vector >& colinear1); - void appendCrudeData(const std::map& mapp, std::vector& conn, std::vector& connI); - void buildPartitionsAbs(QuadraticPolygon& other, const std::map& mapp, int idThis, int idOther, std::vector& conn, std::vector& connI, std::vector& nb1, std::vector& nb2); - + void appendEdgeFromCrudeDataArray(std::size_t edgeId, const std::map& mapp, bool isQuad, const int *nodalBg, const double *coords, + const int *descBg, const int *descEnd, const std::vector >& intersectEdges); + void appendSubEdgeFromCrudeDataArray(Edge *baseEdge, std::size_t j, bool direct, int edgeId, const std::vector& subEdge, const std::map& mapp); + void appendCrudeData(const std::map& mapp, double xBary, double yBary, double fact, int offset, std::vector& addCoordsQuadratic, std::vector& conn, std::vector& connI) const; + void buildPartitionsAbs(QuadraticPolygon& other, const std::map& mapp, int idThis, int idOther, int offset, + std::vector& addCoordsQuadratic, std::vector& conn, std::vector& connI, std::vector& nb1, std::vector& nb2); + // double intersectWith(const QuadraticPolygon& other) const; double intersectWith(const QuadraticPolygon& other, double* barycenter) const; std::vector intersectMySelfWith(const QuadraticPolygon& other) const; diff --git a/src/MEDCoupling/MEDCouplingUMesh.cxx b/src/MEDCoupling/MEDCouplingUMesh.cxx index 9a517ec51..3ac6281de 100644 --- a/src/MEDCoupling/MEDCouplingUMesh.cxx +++ b/src/MEDCoupling/MEDCouplingUMesh.cxx @@ -4824,8 +4824,9 @@ MEDCouplingUMesh *MEDCouplingUMesh::Intersect2DMeshes(const MEDCouplingUMesh *m1 std::vector< std::vector > intersectEdge1, colinear2, subDiv2; MEDCouplingUMesh *m1Desc=0,*m2Desc=0; DataArrayInt *desc1=0,*descIndx1=0,*revDesc1=0,*revDescIndx1=0,*desc2=0,*descIndx2=0,*revDesc2=0,*revDescIndx2=0; - std::vector addCoo; + std::vector addCoo,addCoordsQuadratic; INTERP_KERNEL::QUADRATIC_PLANAR::_precision=eps; + INTERP_KERNEL::QUADRATIC_PLANAR::_arc_detection_precision=eps; IntersectDescending2DMeshes(m1,m2,eps,intersectEdge1,colinear2, subDiv2,m1Desc,desc1,descIndx1,revDesc1,revDescIndx1, m2Desc,desc2,descIndx2,revDesc2,revDescIndx2,addCoo); revDesc1->decrRef(); revDescIndx1->decrRef(); revDesc2->decrRef(); revDescIndx2->decrRef(); @@ -4833,18 +4834,20 @@ MEDCouplingUMesh *MEDCouplingUMesh::Intersect2DMeshes(const MEDCouplingUMesh *m1 MEDCouplingAutoRefCountObjectPtr dd5(m1Desc),dd6(m2Desc); std::vector< std::vector > intersectEdge2; BuildIntersectEdges(m1Desc,m2Desc,addCoo,subDiv2,intersectEdge2); - std::vector b2=m1Desc->getQuadraticStatus(); subDiv2.clear(); dd5=0; dd6=0; std::vector cr,crI; std::vector cNb1,cNb2; - BuildIntersecting2DCellsFromEdges(eps,m1,desc1->getConstPointer(),descIndx1->getConstPointer(),intersectEdge1,colinear2,m2,b2,desc2->getConstPointer(),descIndx2->getConstPointer(),intersectEdge2,addCoo, - /* outputs -> */cr,crI,cNb1,cNb2); + BuildIntersecting2DCellsFromEdges(eps,m1,desc1->getConstPointer(),descIndx1->getConstPointer(),intersectEdge1,colinear2,m2,desc2->getConstPointer(),descIndx2->getConstPointer(),intersectEdge2,addCoo, + /* outputs -> */addCoordsQuadratic,cr,crI,cNb1,cNb2); // MEDCouplingAutoRefCountObjectPtr addCooDa=DataArrayDouble::New(); addCooDa->alloc((int)(addCoo.size())/2,2); std::copy(addCoo.begin(),addCoo.end(),addCooDa->getPointer()); - std::vector coordss(3); - coordss[0]=m1->getCoords(); coordss[1]=m2->getCoords(); coordss[2]=addCooDa; + MEDCouplingAutoRefCountObjectPtr addCoordsQuadraticDa=DataArrayDouble::New(); + addCoordsQuadraticDa->alloc((int)(addCoordsQuadratic.size())/2,2); + std::copy(addCoordsQuadratic.begin(),addCoordsQuadratic.end(),addCoordsQuadraticDa->getPointer()); + std::vector coordss(4); + coordss[0]=m1->getCoords(); coordss[1]=m2->getCoords(); coordss[2]=addCooDa; coordss[3]=addCoordsQuadraticDa; MEDCouplingAutoRefCountObjectPtr coo=DataArrayDouble::Aggregate(coordss); MEDCouplingAutoRefCountObjectPtr ret=MEDCouplingUMesh::New("Intersect2D",2); MEDCouplingAutoRefCountObjectPtr conn=DataArrayInt::New(); conn->alloc((int)cr.size(),1); std::copy(cr.begin(),cr.end(),conn->getPointer()); @@ -4861,9 +4864,9 @@ MEDCouplingUMesh *MEDCouplingUMesh::Intersect2DMeshes(const MEDCouplingUMesh *m1 void MEDCouplingUMesh::BuildIntersecting2DCellsFromEdges(double eps, const MEDCouplingUMesh *m1, const int *desc1, const int *descIndx1, const std::vector >& intesctEdges1, const std::vector< std::vector >& colinear2, - const MEDCouplingUMesh *m2, const std::vector& b2, const int *desc2, const int *descIndx2, const std::vector >& intesctEdges2, + const MEDCouplingUMesh *m2, const int *desc2, const int *descIndx2, const std::vector >& intesctEdges2, const std::vector& addCoords, - std::vector& cr, std::vector& crI, std::vector& cNb1, std::vector& cNb2) + std::vector& addCoordsQuadratic, std::vector& cr, std::vector& crI, std::vector& cNb1, std::vector& cNb2) { static const int SPACEDIM=2; std::vector bbox1,bbox2; @@ -4872,7 +4875,10 @@ void MEDCouplingUMesh::BuildIntersecting2DCellsFromEdges(double eps, const MEDCo const int *connI1=m1->getNodalConnectivityIndex()->getConstPointer(); int offset1=m1->getNumberOfNodes(); const double *coo2=m2->getCoords()->getConstPointer(); + const int *conn2=m2->getNodalConnectivity()->getConstPointer(); + const int *connI2=m2->getNodalConnectivityIndex()->getConstPointer(); int offset2=offset1+m2->getNumberOfNodes(); + int offset3=offset2+((int)addCoords.size())/2; m1->getBoundingBoxForBBTree(bbox1); m2->getBoundingBoxForBBTree(bbox2); BBTree myTree(&bbox2[0],0,0,m2->getNumberOfCells(),eps); @@ -4897,10 +4903,12 @@ void MEDCouplingUMesh::BuildIntersecting2DCellsFromEdges(double eps, const MEDCo INTERP_KERNEL::QuadraticPolygon pol2; pol1.initLocations(); MEDCouplingUMeshBuildQPFromMesh3(coo1,offset1,coo2,offset2,addCoords,desc2+descIndx2[*it2],desc2+descIndx2[*it2+1],intesctEdges2,/* output */mapp,mappRev); - pol2.buildFromCrudeDataArray2(mappRev,b2[i],desc2+descIndx2[*it2],desc2+descIndx2[*it2+1],intesctEdges2, + INTERP_KERNEL::NormalizedCellType typ2=(INTERP_KERNEL::NormalizedCellType)conn2[connI2[*it2]]; + const INTERP_KERNEL::CellModel& cm2=INTERP_KERNEL::CellModel::GetCellModel(typ2); + pol2.buildFromCrudeDataArray2(mappRev,cm2.isQuadratic(),conn2+connI2[*it2]+1,coo2,desc2+descIndx2[*it2],desc2+descIndx2[*it2+1],intesctEdges2, pol1,desc1+descIndx1[i],desc1+descIndx1[i+1],intesctEdges1,colinear2); //MEDCouplingUMeshAssignOnLoc(pol1,pol2,desc1+descIndx1[i],desc1+descIndx1[i+1],intesctEdges1,desc2+descIndx2[*it2],desc2+descIndx2[*it2+1],intesctEdges2,colinear2); - pol1.buildPartitionsAbs(pol2,mapp,i,*it2,cr,crI,cNb1,cNb2); + pol1.buildPartitionsAbs(pol2,mapp,i,*it2,offset3,addCoordsQuadratic,cr,crI,cNb1,cNb2); } if(!crTmp.empty()) { diff --git a/src/MEDCoupling/MEDCouplingUMesh.hxx b/src/MEDCoupling/MEDCouplingUMesh.hxx index dc84121d8..611f7bb14 100644 --- a/src/MEDCoupling/MEDCouplingUMesh.hxx +++ b/src/MEDCoupling/MEDCouplingUMesh.hxx @@ -221,9 +221,9 @@ namespace ParaMEDMEM std::vector& addCoo) throw(INTERP_KERNEL::Exception); static void BuildIntersectEdges(const MEDCouplingUMesh *m1, const MEDCouplingUMesh *m2, const std::vector& addCoo, const std::vector< std::vector >& subDiv, std::vector< std::vector >& intersectEdge) throw(INTERP_KERNEL::Exception); static void BuildIntersecting2DCellsFromEdges(double eps, const MEDCouplingUMesh *m1, const int *desc1, const int *descIndx1, const std::vector >& intesctEdges1, const std::vector< std::vector >& colinear2, - const MEDCouplingUMesh *m2, const std::vector& b2, const int *desc2, const int *descIndx2, const std::vector >& intesctEdges2, + const MEDCouplingUMesh *m2, const int *desc2, const int *descIndx2, const std::vector >& intesctEdges2, const std::vector& addCoords, - std::vector& cr, std::vector& crI, std::vector& cNb1, std::vector& cNb2); + std::vector& addCoordsQuadratic, std::vector& cr, std::vector& crI, std::vector& cNb1, std::vector& cNb2); static void BuildUnionOf2DMesh(const std::vector& conn2D, const std::vector& connI2D, std::vector& polyUnion); /// @endcond private: