X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_MeshOp.cxx;h=cb3185b888f67320a432eb7123b5110577bc3d7b;hb=9beb8d27644a2b0e2585bea7f990457a3d80d643;hp=d1a7d6305bf10a5f48475282f2053eb70e7bbe17;hpb=f67cc2cf7623ceb111ae0c249af06db1f1973db3;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI_MeshOp.cxx b/src/SMESHGUI/SMESHGUI_MeshOp.cxx index d1a7d6305..cb3185b88 100644 --- a/src/SMESHGUI/SMESHGUI_MeshOp.cxx +++ b/src/SMESHGUI/SMESHGUI_MeshOp.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2019 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2020 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 @@ -346,7 +346,7 @@ bool SMESHGUI_MeshOp::isSubshapeOk() const myDlg->selectedObject(SMESHGUI_MeshDlg::Geom, aGEOMs); if (aGEOMs.count() > 0) { - GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen(); + GEOM::GEOM_Gen_var geomGen = mainGeom->GetGen(); if (geomGen->_is_nil()) return false; GEOM::GEOM_IGroupOperations_wrap op = geomGen->GetIGroupOperations(); @@ -780,7 +780,7 @@ bool SMESHGUI_MeshOp::isCompatibleToGeometry(HypothesisData* theAlgoData, bool isApplicable = false; if ( myGeomEntry == myLastGeomEntry && !myGeomEntry.isEmpty() ) { - THypLabelIsAppMap::const_iterator lab2isApp = myHypMapIsApplicable.find( theAlgoData->Label ); + THypLabelIsAppMap::const_iterator lab2isApp = myHypMapIsApplicable.find( theAlgoData->TypeName ); if ( lab2isApp != myHypMapIsApplicable.end() ) { isApplicable = lab2isApp.value(); return isApplicable; @@ -791,7 +791,7 @@ bool SMESHGUI_MeshOp::isCompatibleToGeometry(HypothesisData* theAlgoData, toCheckIsApplicableToAll = ( myGeom->GetType() == GEOM_GROUP ); isApplicable = SMESH::IsApplicable( theAlgoData->TypeName, myGeom, toCheckIsApplicableToAll ); - myHypMapIsApplicable.insert( theAlgoData->Label, isApplicable ); + myHypMapIsApplicable.insert( theAlgoData->TypeName, isApplicable ); return isApplicable; } @@ -1103,12 +1103,18 @@ SMESHGUI_MeshOp::getInitParamsHypothesis( const QString& aHypType, initParams.way = isSubMesh ? BY_MESH : BY_GEOM; } - SMESH::SMESH_Hypothesis_var hyp = - SMESHGUI::GetSMESHGen()->GetHypothesisParameterValues( aHypType.toUtf8().data(), - aServerLib.toUtf8().data(), - aMesh, - aGeomVar, - initParams ); + SMESH::SMESH_Hypothesis_var hyp; + if ( initParams.way == BY_AVERAGE_LENGTH ) + hyp = SMESHGUI::GetSMESHGen()->CreateHypothesisByAverageLength( aHypType.toUtf8().data(), + aServerLib.toUtf8().data(), + initParams.averageLength, + initParams.quadDominated ); + else + hyp = SMESHGUI::GetSMESHGen()->GetHypothesisParameterValues( aHypType.toUtf8().data(), + aServerLib.toUtf8().data(), + aMesh, + aGeomVar, + initParams ); if ( hyp->_is_nil() && initParams.way == BY_MESH ) { initParams.way = BY_GEOM; @@ -1750,7 +1756,7 @@ void SMESHGUI_MeshOp::createSubMeshOnInternalEdges( SMESH::SMESH_Mesh_ptr theMes for ( size_t i = 0; i < internalEdges.size(); ++i ) intIDSet.insert( shapeIDs.FindIndex( internalEdges[ i ])); - GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen(); + GEOM::GEOM_Gen_var geomGen = theMainShape->GetGen(); if (geomGen->_is_nil()) return; GEOM::GEOM_Object_var edgeGroup; @@ -1898,7 +1904,7 @@ void SMESHGUI_MeshOp::onHypoSet( const QString& theSetName ) HypothesesSet::SetType setType = aHypoSet->getPreferredHypType(); if ( !aHypoSet->getAlgoAvailable( setType )) { - setType = setType == HypothesesSet::ALT ? HypothesesSet::MAIN : HypothesesSet::ALT; + setType = ( setType == HypothesesSet::ALT ) ? HypothesesSet::MAIN : HypothesesSet::ALT; if ( !aHypoSet->getAlgoAvailable( setType )) return; } @@ -2056,7 +2062,7 @@ bool SMESHGUI_MeshOp::createMesh( QString& theMess, QStringList& theEntryList ) { // Create groups on all geom groups - GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen(); + GEOM::GEOM_Gen_var geomGen = aGeomVar->GetGen(); GEOM::GEOM_IShapesOperations_wrap op = geomGen->GetIShapesOperations(); GEOM::ListOfGO_var geomGroups = op->GetExistingSubObjects( aGeomVar, /*groupsOnly=*/false ); @@ -2132,11 +2138,11 @@ bool SMESHGUI_MeshOp::createSubMesh( QString& theMess, QStringList& theEntryList else if (aGEOMs.count() > 1) { // create a GEOM group - GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen(); - if (!geomGen->_is_nil()) { - GEOM::GEOM_IGroupOperations_wrap op = - geomGen->GetIGroupOperations(); - if (!op->_is_nil()) { + GEOM::GEOM_Gen_var geomGen = mainGeom->GetGen(); + if ( !geomGen->_is_nil() ) { + GEOM::GEOM_IGroupOperations_wrap op = geomGen->GetIGroupOperations(); + if ( !op->_is_nil() ) + { // check and add all selected GEOM objects: they must be // a sub-shapes of the main GEOM and must be of one type int iSubSh = 0; @@ -2940,9 +2946,19 @@ void SMESHGUI_MeshOp::updateHypoSets() } currentHypoSet->setAlgoAvailable( sType, isAvailable ); } + if ( currentHypoSet->hasAlgo( HypothesesSet::MAIN ) && + currentHypoSet->hasAlgo( HypothesesSet::ALT )) + { + HypothesesSet::SetType setType = HypothesesSet::getPreferredHypType(); + if ( !currentHypoSet->getAlgoAvailable( setType )) + continue; // not add if a preferred type not available currently + } + if ( currentHypoSet->getAlgoAvailable( HypothesesSet::MAIN ) || currentHypoSet->getAlgoAvailable( HypothesesSet::ALT )) + { aFilteredHypothesesSetsList.append( *inHypoSetName ); + } } myDlg->setHypoSets( aFilteredHypothesesSetsList ); }