From: eap Date: Tue, 18 Sep 2018 14:32:59 +0000 (+0300) Subject: 23586: [EDF] HYDRO: Copy mesh to new geometry X-Git-Tag: HYDRO_V2_0_0^0 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=refs%2Fheads%2Fhydro%2Fimps_2018;p=plugins%2Fhybridplugin.git 23586: [EDF] HYDRO: Copy mesh to new geometry --- diff --git a/src/HYBRIDPlugin/HYBRIDPlugin_HYBRID.cxx b/src/HYBRIDPlugin/HYBRIDPlugin_HYBRID.cxx index be443d1..ad57985 100644 --- a/src/HYBRIDPlugin/HYBRIDPlugin_HYBRID.cxx +++ b/src/HYBRIDPlugin/HYBRIDPlugin_HYBRID.cxx @@ -354,38 +354,54 @@ static bool readGMFFile(MG_HYBRID_API* MGOutput, // if imprinting, the original mesh faces are modified // => we clear all the faces to retrieve them from Hybrid output mesh. std::vector facesWithImprinting; - if (theAlgo->getHyp()) + if (theAlgo->getHyp()) facesWithImprinting = theAlgo->getHyp()->GetFacesWithImprinting(); if ( ! facesWithImprinting.empty() ) { #ifdef _DEBUG_ - std::cout << "Imprinting => Clear original mesh" << std::endl; + std::cout << "Imprinting => Clear original mesh" << std::endl; #endif - SMDS_ElemIteratorPtr eIt = theMeshDS->elementsIterator(); - while( eIt->more() ) - theMeshDS->RemoveFreeElement( eIt->next(), /*sm=*/0 ); - SMDS_NodeIteratorPtr nIt = theMeshDS->nodesIterator(); - while ( nIt->more() ) - theMeshDS->RemoveFreeNode( nIt->next(), /*sm=*/0 ); - - theNodeByHybridId.clear(); - theFaceByHybridId.clear(); + SMESH_subMesh* smOfSolid = + theHelper->GetMesh()->GetSubMesh( theHelper->GetSubShape() ); + SMESH_subMeshIteratorPtr smIt = + smOfSolid->getDependsOnIterator(/*includeSelf=*/false, /*complexShapeFirst=*/true); + while ( smIt->more() ) + { + SMESH_subMesh* sm = smIt->next(); + if ( SMESHDS_SubMesh * smDS = sm->GetSubMeshDS() ) + { + SMDS_ElemIteratorPtr eIt = smDS->GetElements(); + while( eIt->more() ) + { + theMeshDS->RemoveFreeElement( eIt->next(), smDS ); + } + SMDS_NodeIteratorPtr nIt = smDS->GetNodes(); + while ( nIt->more() ) + { + const SMDS_MeshNode* n = nIt->next(); + if ( n->NbInverseElements() == 0 ) + theMeshDS->RemoveFreeNode( n, smDS ); + } + } + } + theNodeByHybridId.clear(); + theFaceByHybridId.clear(); } int nbMeshNodes = theMeshDS->NbNodes(); int nbInitialNodes = theNodeByHybridId.size(); - const bool isQuadMesh = + const bool isQuadMesh = theHelper->GetMesh()->NbEdges( ORDER_QUADRATIC ) || theHelper->GetMesh()->NbFaces( ORDER_QUADRATIC ) || theHelper->GetMesh()->NbVolumes( ORDER_QUADRATIC ); - + #ifdef _DEBUG_ std::cout << "theNodeByHybridId.size(): " << nbInitialNodes << std::endl; std::cout << "theHelper->GetMesh()->NbNodes(): " << nbMeshNodes << std::endl; std::cout << "isQuadMesh: " << isQuadMesh << std::endl; #endif - + // --------------------------------- // Read generated elements and nodes // --------------------------------- diff --git a/src/HYBRIDPlugin/HYBRIDPlugin_Hypothesis_i.hxx b/src/HYBRIDPlugin/HYBRIDPlugin_Hypothesis_i.hxx index 6098883..2f13187 100644 --- a/src/HYBRIDPlugin/HYBRIDPlugin_Hypothesis_i.hxx +++ b/src/HYBRIDPlugin/HYBRIDPlugin_Hypothesis_i.hxx @@ -234,6 +234,11 @@ class HYBRIDPLUGIN_EXPORT HYBRIDPlugin_Hypothesis_i: // Verify whether hypothesis supports given entity type CORBA::Boolean IsDimSupported( SMESH::Dimension type ); + // Methods for copying mesh definition to other geometry + virtual bool getObjectsDependOn( std::vector< std::string > & entryArray, + std::vector< int > & subIDArray ) const { return false; } + virtual bool setObjectsDependOn( std::vector< std::string > & entryArray, + std::vector< int > & subIDArray ) { return true; } }; #endif