From: ageay Date: Wed, 15 Feb 2012 14:50:20 +0000 (+0000) Subject: IntersectMesh with quadratic elements X-Git-Tag: V6_main_FINAL~864 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=3f4f8cc86ce97030d151395e82442251927e5d14;p=tools%2Fmedcoupling.git IntersectMesh with quadratic elements --- diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeArcCircle.cxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeArcCircle.cxx index 9cadd5ea1..e884131f2 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeArcCircle.cxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeArcCircle.cxx @@ -437,7 +437,7 @@ void EdgeArcCircle::applySimilarity(double xBary, double yBary, double dimChar) void EdgeArcCircle::unApplySimilarity(double xBary, double yBary, double dimChar) { - Edge::applySimilarity(xBary,yBary,dimChar); + Edge::unApplySimilarity(xBary,yBary,dimChar); _radius*=dimChar; _center[0]=_center[0]*dimChar+xBary; _center[1]=_center[1]*dimChar+yBary; diff --git a/src/MEDCoupling/MEDCouplingUMesh.cxx b/src/MEDCoupling/MEDCouplingUMesh.cxx index 3ac6281de..11f7bab04 100644 --- a/src/MEDCoupling/MEDCouplingUMesh.cxx +++ b/src/MEDCoupling/MEDCouplingUMesh.cxx @@ -2515,27 +2515,28 @@ namespace ParaMEDMEM // end }; - INTERP_KERNEL::Edge *MEDCouplingUMeshBuildQPFromEdge(INTERP_KERNEL::NormalizedCellType typ, std::map& mapp2, const int *bg) + INTERP_KERNEL::Edge *MEDCouplingUMeshBuildQPFromEdge(INTERP_KERNEL::NormalizedCellType typ, std::map >& mapp2, const int *bg) { INTERP_KERNEL::Edge *ret=0; switch(typ) { case INTERP_KERNEL::NORM_SEG2: { - ret=new INTERP_KERNEL::EdgeLin(mapp2[bg[0]],mapp2[bg[1]]); + ret=new INTERP_KERNEL::EdgeLin(mapp2[bg[0]].first,mapp2[bg[1]].first); break; } case INTERP_KERNEL::NORM_SEG3: { - INTERP_KERNEL::EdgeLin * e1=new INTERP_KERNEL::EdgeLin(mapp2[bg[0]],mapp2[bg[2]]); - INTERP_KERNEL::EdgeLin *e2=new INTERP_KERNEL::EdgeLin(mapp2[bg[2]],mapp2[bg[1]]); + INTERP_KERNEL::EdgeLin *e1=new INTERP_KERNEL::EdgeLin(mapp2[bg[0]].first,mapp2[bg[2]].first); + INTERP_KERNEL::EdgeLin *e2=new INTERP_KERNEL::EdgeLin(mapp2[bg[2]].first,mapp2[bg[1]].first); INTERP_KERNEL::SegSegIntersector inters(*e1,*e2); bool colinearity=inters.areColinears(); delete e1; delete e2; if(colinearity) - ret=new INTERP_KERNEL::EdgeLin(mapp2[bg[0]],mapp2[bg[1]]); + ret=new INTERP_KERNEL::EdgeLin(mapp2[bg[0]].first,mapp2[bg[1]].first); else - ret=new INTERP_KERNEL::EdgeArcCircle(mapp2[bg[0]],mapp2[bg[2]],mapp2[bg[1]]); + ret=new INTERP_KERNEL::EdgeArcCircle(mapp2[bg[0]].first,mapp2[bg[2]].first,mapp2[bg[1]].first); + mapp2[bg[2]].second=false; break; } default: @@ -2552,7 +2553,7 @@ namespace ParaMEDMEM INTERP_KERNEL::QuadraticPolygon *MEDCouplingUMeshBuildQPFromMesh(const MEDCouplingUMesh *mDesc, const std::vector& candidates, std::map& mapp) throw(INTERP_KERNEL::Exception) { mapp.clear(); - std::map mapp2; + std::map > mapp2;//bool is for a flag specifying if node is boundary (true) or only a middle for SEG3. const double *coo=mDesc->getCoords()->getConstPointer(); const int *c=mDesc->getNodalConnectivity()->getConstPointer(); const int *cI=mDesc->getNodalConnectivityIndex()->getConstPointer(); @@ -2562,7 +2563,7 @@ namespace ParaMEDMEM for(std::set::const_iterator it2=s.begin();it2!=s.end();it2++) { INTERP_KERNEL::Node *n=new INTERP_KERNEL::Node(coo[2*(*it2)],coo[2*(*it2)+1]); - mapp[n]=(*it2); mapp2[*it2]=n; + mapp2[*it2]=std::pair(n,true); } INTERP_KERNEL::QuadraticPolygon *ret=new INTERP_KERNEL::QuadraticPolygon; for(std::vector::const_iterator it=candidates.begin();it!=candidates.end();it++) @@ -2570,8 +2571,12 @@ namespace ParaMEDMEM INTERP_KERNEL::NormalizedCellType typ=(INTERP_KERNEL::NormalizedCellType)c[cI[*it]]; ret->pushBack(MEDCouplingUMeshBuildQPFromEdge(typ,mapp2,c+cI[*it]+1)); } - for(std::set::const_iterator it2=s.begin();it2!=s.end();it2++) - mapp2[*it2]->decrRef(); + for(std::map >::const_iterator it2=mapp2.begin();it2!=mapp2.end();it2++) + { + if((*it2).second.second) + mapp[(*it2).second.first]=(*it2).first; + ((*it2).second.first)->decrRef(); + } return ret; } @@ -5001,18 +5006,18 @@ void MEDCouplingUMesh::BuildIntersectEdges(const MEDCouplingUMesh *m1, const MED { const std::vector& divs=subDiv[i]; int nnode=cI[1]-cI[0]-1; - std::map mapp2; + std::map > mapp2; std::map mapp22; for(int j=0;j(nn,true); mapp22[nn]=nnid+offset1; } INTERP_KERNEL::Edge *e=MEDCouplingUMeshBuildQPFromEdge((INTERP_KERNEL::NormalizedCellType)c[*cI],mapp2,c+(*cI)+1); - for(std::map::const_iterator it=mapp2.begin();it!=mapp2.end();it++) - (*it).second->decrRef(); + for(std::map >::const_iterator it=mapp2.begin();it!=mapp2.end();it++) + ((*it).second.first)->decrRef(); std::vector addNodes(divs.size()); std::map mapp3; for(std::size_t j=0;j