X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH%2FSMESH_Gen.cxx;h=399cef5292790aacec51ed47b3b44f6c63d80bd7;hb=33b54215515d9881ee22f4503f1543653a9ce8d1;hp=6635311805968590d0925c6ec593dc4f387f2483;hpb=fdab1d32d5c6a0e4e3e8548e717f725156ac88a2;p=modules%2Fsmesh.git diff --git a/src/SMESH/SMESH_Gen.cxx b/src/SMESH/SMESH_Gen.cxx index 663531180..399cef529 100644 --- a/src/SMESH/SMESH_Gen.cxx +++ b/src/SMESH/SMESH_Gen.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -142,7 +142,6 @@ SMESH_Gen::~SMESH_Gen() //============================================================================= SMESH_Mesh* SMESH_Gen::CreateMesh(bool theIsEmbeddedMode) - throw(SALOME_Exception) { Unexpect aCatch(SalomeException); @@ -339,12 +338,13 @@ bool SMESH_Gen::Compute(SMESH_Mesh & aMesh, std::vector< SMESH_subMesh* > smVec; for ( aShapeDim = 0; aShapeDim < 4; ++aShapeDim ) + smVec.insert( smVec.end(), + smWithAlgoSupportingSubmeshes[aShapeDim].begin(), + smWithAlgoSupportingSubmeshes[aShapeDim].end() ); { // ------------------------------------------------ // sort list of sub-meshes according to mesh order // ------------------------------------------------ - smVec.assign( smWithAlgoSupportingSubmeshes[ aShapeDim ].begin(), - smWithAlgoSupportingSubmeshes[ aShapeDim ].end() ); aMesh.SortByMeshOrder( smVec ); // ------------------------------------------------------------ @@ -355,20 +355,29 @@ bool SMESH_Gen::Compute(SMESH_Mesh & aMesh, for ( size_t i = 0; i < smVec.size(); ++i ) { sm = smVec[i]; + if ( sm->GetComputeState() != SMESH_subMesh::READY_TO_COMPUTE) + continue; + + const TopAbs_ShapeEnum shapeType = sm->GetSubShape().ShapeType(); // get a shape the algo is assigned to if ( !GetAlgo( sm, & algoShape )) continue; // strange... // look for more local algos - smIt = sm->getDependsOnIterator(!includeSelf, !complexShapeFirst); + if ( SMESH_subMesh* algoSM = aMesh.GetSubMesh( algoShape )) + smIt = algoSM->getDependsOnIterator(!includeSelf, !complexShapeFirst); + else + smIt = sm->getDependsOnIterator(!includeSelf, !complexShapeFirst); + while ( smIt->more() ) { SMESH_subMesh* smToCompute = smIt->next(); const TopoDS_Shape& aSubShape = smToCompute->GetSubShape(); const int aShapeDim = GetShapeDim( aSubShape ); - if ( aShapeDim < 1 ) continue; + if ( aShapeDim < 1 || aSubShape.ShapeType() == shapeType ) + continue; // check for preview dimension limitations if ( aShapesId && GetShapeDim( aSubShape.ShapeType() ) > (int)aDim ) @@ -392,22 +401,15 @@ bool SMESH_Gen::Compute(SMESH_Mesh & aMesh, Compute( aMesh, aSubShape, aFlags | SHAPE_ONLY_UPWARD, aDim, aShapesId, localAllowed ); } } - } - // -------------------------------- - // apply the all-dimensional algos - // -------------------------------- - for ( size_t i = 0; i < smVec.size(); ++i ) - { - sm = smVec[i]; - if ( sm->GetComputeState() == SMESH_subMesh::READY_TO_COMPUTE) + // -------------------------------- + // apply the all-dimensional algo + // -------------------------------- { - const TopAbs_ShapeEnum shapeType = sm->GetSubShape().ShapeType(); + if (_compute_canceled) + return false; // check for preview dimension limitations if ( aShapesId && GetShapeDim( shapeType ) > (int)aDim ) continue; - - if (_compute_canceled) - return false; sm->SetAllowedSubShapes( fillAllowed( shapeSM, aShapeOnly, allowedSubShapes )); setCurrentSubMesh( sm ); sm->ComputeStateEngine( computeEvent ); @@ -417,7 +419,7 @@ bool SMESH_Gen::Compute(SMESH_Mesh & aMesh, aShapesId->insert( sm->GetId() ); } } - } // loop on shape dimensions + } // ----------------------------------------------- // mesh the rest sub-shapes starting from vertices @@ -453,8 +455,8 @@ bool SMESH_Gen::Compute(SMESH_Mesh & aMesh, * Prepare Compute a mesh */ //============================================================================= -void SMESH_Gen::PrepareCompute(SMESH_Mesh & aMesh, - const TopoDS_Shape & aShape) +void SMESH_Gen::PrepareCompute(SMESH_Mesh & /*aMesh*/, + const TopoDS_Shape & /*aShape*/) { _compute_canceled = false; resetCurrentSubMesh(); @@ -465,8 +467,8 @@ void SMESH_Gen::PrepareCompute(SMESH_Mesh & aMesh, * Cancel Compute a mesh */ //============================================================================= -void SMESH_Gen::CancelCompute(SMESH_Mesh & aMesh, - const TopoDS_Shape & aShape) +void SMESH_Gen::CancelCompute(SMESH_Mesh & /*aMesh*/, + const TopoDS_Shape & /*aShape*/) { _compute_canceled = true; if ( const SMESH_subMesh* sm = GetCurrentSubMesh() ) @@ -1053,10 +1055,10 @@ std::vector< std::string > SMESH_Gen::GetPluginXMLPaths() } // get a separator from rootDir - for ( pos = strlen( rootDir )-1; pos >= 0 && sep.empty(); --pos ) - if ( rootDir[pos] == '/' || rootDir[pos] == '\\' ) + for ( int i = strlen( rootDir )-1; i >= 0 && sep.empty(); --i ) + if ( rootDir[i] == '/' || rootDir[i] == '\\' ) { - sep = rootDir[pos]; + sep = rootDir[i]; break; } #ifdef WIN32 @@ -1075,15 +1077,18 @@ std::vector< std::string > SMESH_Gen::GetPluginXMLPaths() xmlPath += sep + plugin + ".xml"; bool fileOK; #ifdef WIN32 -#ifdef UNICODE + #ifdef UNICODE const wchar_t* path = Kernel_Utils::decode_s(xmlPath); -#else + #else const char* path = xmlPath.c_str(); -#endif + #endif + fileOK = (GetFileAttributes(path) != INVALID_FILE_ATTRIBUTES); -#ifdef UNICODE + + #ifdef UNICODE delete path; -#endif + #endif + #else fileOK = (access(xmlPath.c_str(), F_OK) == 0); #endif