X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_MeshOp.cxx;h=84107dc27e1734034a7e4ef3f121fb0af41d4169;hb=0b8910a8fd8854d393179941b07b8d31266b77fa;hp=f34871254654c7adab62363e53208ebada027235;hpb=686a8645643ba74ea3be5646b8fc7b35a70c297d;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI_MeshOp.cxx b/src/SMESHGUI/SMESHGUI_MeshOp.cxx index f34871254..84107dc27 100644 --- a/src/SMESHGUI/SMESHGUI_MeshOp.cxx +++ b/src/SMESHGUI/SMESHGUI_MeshOp.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2010 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 @@ -19,9 +19,9 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// SMESH SMESHGUI : GUI for SMESH component -// File : SMESHGUI_MeshOp.cxx -// Author : Sergey LITONIN, Open CASCADE S.A.S. +// SMESH SMESHGUI : GUI for SMESH component +// File : SMESHGUI_MeshOp.cxx +// Author : Sergey LITONIN, Open CASCADE S.A.S. // SMESH includes #include "SMESHGUI_MeshOp.h" @@ -71,6 +71,10 @@ #include #include CORBA_CLIENT_HEADER(SMESH_Gen) +//To disable automatic genericobj management, the following line should be commented. +//Otherwise, it should be uncommented. Refer to KERNEL_SRC/src/SALOMEDSImpl/SALOMEDSImpl_AttributeIOR.cxx +#define WITHGENERICOBJ + //================================================================================ /*! * \brief Constructor @@ -85,7 +89,8 @@ SMESHGUI_MeshOp::SMESHGUI_MeshOp( const bool theToCreate, const bool theIsMesh ) myToCreate( theToCreate ), myIsMesh( theIsMesh ), myDlg( 0 ), - myShapeByMeshOp( 0 ) + myShapeByMeshOp( 0 ), + myHypoSet( 0 ) { if ( GeometryGUI::GetGeomGen()->_is_nil() )// check that GEOM_Gen exists GeometryGUI::InitGeomGen(); @@ -148,7 +153,10 @@ bool SMESHGUI_MeshOp::onApply() else if ( !myToCreate ) aResult = editMeshOrSubMesh( aMess ); if ( aResult ) + { + SMESHGUI::Modified(); update( UF_ObjBrowser | UF_Model ); + } } catch ( const SALOME::SALOME_Exception& S_ex ) { @@ -275,7 +283,6 @@ SUIT_SelectionFilter* SMESHGUI_MeshOp::createFilter( const int theId ) const * \retval bool - check result */ //================================================================================ - bool SMESHGUI_MeshOp::isSubshapeOk() const { if ( !myToCreate || myIsMesh ) // not submesh creation @@ -338,11 +345,10 @@ bool SMESHGUI_MeshOp::isSubshapeOk() const //================================================================================ /*! * \brief Return name of the algorithm that does not support submeshes and makes - * submesh creation useless + * submesh creation useless * \retval char* - string is to be deleted!!! */ //================================================================================ - char* SMESHGUI_MeshOp::isSubmeshIgnored() const { if ( myToCreate && !myIsMesh ) { @@ -388,7 +394,6 @@ char* SMESHGUI_MeshOp::isSubmeshIgnored() const * \retval _PTR(SObject) - the found submesh SObject */ //================================================================================ - _PTR(SObject) SMESHGUI_MeshOp::getSubmeshByGeom() const { QString aMeshEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Mesh ); @@ -575,11 +580,11 @@ void SMESHGUI_MeshOp::selectionDone() SMESH::SObjectToInterface( pSubmesh ); bool editSubmesh = ( !sm->_is_nil() && SUIT_MessageBox::question( myDlg, tr( "SMESH_WARNING" ), - tr( "EDIT_SUBMESH_QUESTION"), - SUIT_MessageBox::Yes | - SUIT_MessageBox::No, - SUIT_MessageBox::No ) - == SUIT_MessageBox::Yes ); + tr( "EDIT_SUBMESH_QUESTION"), + SUIT_MessageBox::Yes | + SUIT_MessageBox::No, + SUIT_MessageBox::No ) + == SUIT_MessageBox::Yes ); if ( editSubmesh ) { selectionMgr()->clearFilters(); @@ -738,7 +743,6 @@ bool SMESHGUI_MeshOp::isValid( QString& theMess ) const * \retval bool - check result */ //================================================================================ - static bool isCompatible(const HypothesisData* theAlgoData, const HypothesisData* theHypData, const int theHypType) @@ -881,7 +885,6 @@ void SMESHGUI_MeshOp::existingHyps( const int theDim, * \retval SMESH::SMESH_Hypothesis_var - the hypothesis holding parameter values */ //================================================================================ - SMESH::SMESH_Hypothesis_var SMESHGUI_MeshOp::getInitParamsHypothesis( const QString& aHypType, const QString& aServerLib ) const @@ -944,12 +947,19 @@ SMESHGUI_MeshOp::getInitParamsHypothesis( const QString& aHypType, } } - return SMESHGUI::GetSMESHGen()->GetHypothesisParameterValues( aHypType.toLatin1().data(), - aServerLib.toLatin1().data(), - aMeshVar, - aGeomVar, - /*byMesh = */isSubMesh); - + SMESH::SMESH_Hypothesis_var hyp = + SMESHGUI::GetSMESHGen()->GetHypothesisParameterValues( aHypType.toLatin1().data(), + aServerLib.toLatin1().data(), + aMeshVar, + aGeomVar, + /*byMesh = */isSubMesh); + if ( hyp->_is_nil() && isSubMesh ) + hyp = SMESHGUI::GetSMESHGen()->GetHypothesisParameterValues( aHypType.toLatin1().data(), + aServerLib.toLatin1().data(), + aMeshVar, + aGeomVar, + /*byMesh = */false); + return hyp; } //================================================================================ @@ -960,7 +970,6 @@ SMESHGUI_MeshOp::getInitParamsHypothesis( const QString& aHypType, * \retval int - dimention */ //================================================================================ - static int getTabDim (const QObject* tab, SMESHGUI_MeshDlg* dlg ) { int aDim = -1; @@ -1018,8 +1027,7 @@ namespace * \param theTypeName - specifies hypothesis to be created */ //================================================================================ - -void SMESHGUI_MeshOp::createHypothesis (const int theDim, +void SMESHGUI_MeshOp::createHypothesis(const int theDim, const int theType, const QString& theTypeName) { @@ -1027,6 +1035,8 @@ void SMESHGUI_MeshOp::createHypothesis (const int theDim, if (!aData) return; + myDim = theDim; + myType = theType; QStringList aHypNames; TDim2Type2HypList::const_iterator aDimIter = myExistingHyps.begin(); for ( ; aDimIter != myExistingHyps.end(); aDimIter++) { @@ -1045,17 +1055,22 @@ void SMESHGUI_MeshOp::createHypothesis (const int theDim, QString aHypName = GetUniqueName( aHypNames, aData->Label); // existing hypos - int nbHyp = myExistingHyps[theDim][theType].count(); + bool dialog = false; QString aClientLibName = aData->ClientLibName; if (aClientLibName == "") { // Call hypothesis creation server method (without GUI) - SMESH::CreateHypothesis(theTypeName, aHypName, false); + SMESH::SMESH_Hypothesis_var aHyp = + SMESH::CreateHypothesis(theTypeName, aHypName, false); +#ifdef WITHGENERICOBJ + if (!CORBA::is_nil(aHyp)) + aHyp->Destroy(); +#endif } else { // Get hypotheses creator client (GUI) // BUG 0020378 //SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator(theTypeName); - SMESH::HypothesisCreatorPtr aCreator = SMESH::GetHypothesisCreator(theTypeName); + SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator(theTypeName); // Create hypothesis if (aCreator) { @@ -1063,35 +1078,100 @@ void SMESHGUI_MeshOp::createHypothesis (const int theDim, SMESH::SMESH_Hypothesis_var initParamHyp = getInitParamsHypothesis(theTypeName, aData->ServerLibName); - int obj = myDlg->getActiveObject(); removeCustomFilters(); // Issue 0020170 - // Set Geometry - QStringList aList; - myDlg->selectedObject( SMESHGUI_MeshDlg::Geom, aList ); - if (aList.count() != 0) - aCreator->setShapeEntry( aList.first() ); - else - aCreator->setShapeEntry( QString() ); - + // Get Entry of the Geom object + QString aGeomEntry = ""; + QString aMeshEntry = ""; + QString anObjEntry = ""; + aGeomEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom ); + aMeshEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Mesh ); + anObjEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Obj ); + + if ( aMeshEntry != "" ) { // Get Geom object from Mesh + _PTR(SObject) pObj = studyDS()->FindObjectID( aMeshEntry.toLatin1().data() ); + GEOM::GEOM_Object_var aGeomVar = SMESH::GetShapeOnMeshOrSubMesh( pObj ); + aMeshEntry = ( aGeomVar->_is_nil() ) ? "" : aMeshEntry = aGeomVar->GetStudyEntry(); + } + + if ( aMeshEntry == "" && aGeomEntry == "" ) { + _PTR(SObject) pObj = studyDS()->FindObjectID( anObjEntry.toLatin1().data() ); + GEOM::GEOM_Object_var aGeomVar = SMESH::GetShapeOnMeshOrSubMesh( pObj ); + if ( !aGeomVar->_is_nil() ) + aGeomEntry = aGeomVar->GetStudyEntry(); + } + + if ( anObjEntry != "" && aGeomEntry != "" && aMeshEntry == "" ) { // take geometry from submesh + _PTR(SObject) pObj = studyDS()->FindObjectID( anObjEntry.toLatin1().data() ); + if ( pObj ) { + // if current object is sub-mesh + SMESH::SMESH_subMesh_var aSubMeshVar = + SMESH::SMESH_subMesh::_narrow( _CAST( SObject,pObj )->GetObject() ); + if ( !aSubMeshVar->_is_nil() ) { + SMESH::SMESH_Mesh_var aMeshVar = aSubMeshVar->GetFather(); + if ( !aMeshVar->_is_nil() ) { + _PTR(SObject) aMeshSO = SMESH::FindSObject( aMeshVar ); + GEOM::GEOM_Object_var aGeomVar = SMESH::GetShapeOnMeshOrSubMesh( aMeshSO ); + if ( !aGeomVar->_is_nil() ) + aMeshEntry = aGeomVar->GetStudyEntry(); + } + } + } + } + + aCreator->setShapeEntry( aGeomEntry ); + if ( aMeshEntry != "" ) + aCreator->setMainShapeEntry( aMeshEntry ); myDlg->setEnabled( false ); - aCreator->create(initParamHyp, aHypName, myDlg); - onActivateObject( obj ); // Issue 0020170. Restore filters - myDlg->setEnabled( true ); - } else { - SMESH::CreateHypothesis(theTypeName, aHypName, false); + aCreator->create(initParamHyp, aHypName, myDlg, this, SLOT( onHypoCreated( int ) ) ); + dialog = true; } + else { + SMESH::SMESH_Hypothesis_var aHyp = + SMESH::CreateHypothesis(theTypeName, aHypName, false); +#ifdef WITHGENERICOBJ + if (!CORBA::is_nil(aHyp)) + aHyp->Destroy(); +#endif + } + } + + if( !dialog ) + onHypoCreated(2); +} + +//================================================================================ +/*! + * Necessary steps after hypothesis creation + * \param result - creation result: + * 0 = rejected + * 1 = accepted + * 2 = additional value meaning that slot is called not from dialog box + */ +//================================================================================ +void SMESHGUI_MeshOp::onHypoCreated( int result ) +{ + if( result != 2 ) + { + int obj = myDlg->getActiveObject(); + onActivateObject( obj ); // Issue 0020170. Restore filters + myDlg->setEnabled( true ); } _PTR(SComponent) aFather = SMESH::GetActiveStudyDocument()->FindComponent("SMESH"); - HypothesisData* algoData = hypData( theDim, Algo, currentHyp( theDim, Algo )); + int nbHyp = myExistingHyps[myDim][myType].count(); + HypothesisData* algoData = hypData( myDim, Algo, currentHyp( myDim, Algo )); QStringList aNewHyps; - existingHyps(theDim, theType, aFather, aNewHyps, myExistingHyps[theDim][theType], algoData); - if (aNewHyps.count() > nbHyp) { + existingHyps(myDim, myType, aFather, aNewHyps, myExistingHyps[myDim][myType], algoData); + if (aNewHyps.count() > nbHyp) + { for (int i = nbHyp; i < aNewHyps.count(); i++) - myDlg->tab(theDim)->addHyp(theType, aNewHyps[i]); + myDlg->tab(myDim)->addHyp(myType, aNewHyps[i]); } + + if( result!=2 && myHypoSet ) + processSet(); } //================================================================================ @@ -1121,7 +1201,7 @@ void SMESHGUI_MeshOp::onEditHyp( const int theHypType, const int theIndex ) // BUG 0020378 //SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator(aHyp->GetName()); - SMESH::HypothesisCreatorPtr aCreator = SMESH::GetHypothesisCreator(aHyp->GetName()); + SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator(aHyp->GetName()); if ( aCreator ) { // Get initial parameters @@ -1129,23 +1209,69 @@ void SMESHGUI_MeshOp::onEditHyp( const int theHypType, const int theIndex ) getInitParamsHypothesis( aHyp->GetName(), aHyp->GetLibName()); aCreator->setInitParamsHypothesis( initParamHyp ); - // Set Geometry - QStringList aList; - myDlg->selectedObject( SMESHGUI_MeshDlg::Geom, aList ); - if (aList.count() > 0) - aCreator->setShapeEntry( aList.first() ); - else - aCreator->setShapeEntry( "" ); + // Get Entry of the Geom object + QString aGeomEntry = ""; + QString aMeshEntry = ""; + QString anObjEntry = ""; + aGeomEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom ); + aMeshEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Mesh ); + anObjEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Obj ); + + if ( aMeshEntry != "" ) { // Get Geom object from Mesh + _PTR(SObject) pObj = studyDS()->FindObjectID( aMeshEntry.toLatin1().data() ); + GEOM::GEOM_Object_var aGeomVar = SMESH::GetShapeOnMeshOrSubMesh( pObj ); + aMeshEntry = ( aGeomVar->_is_nil() ) ? "" : aMeshEntry = aGeomVar->GetStudyEntry(); + } - int obj = myDlg->getActiveObject(); + if ( aMeshEntry == "" && aGeomEntry == "" ) { + _PTR(SObject) pObj = studyDS()->FindObjectID( anObjEntry.toLatin1().data() ); + GEOM::GEOM_Object_var aGeomVar = SMESH::GetShapeOnMeshOrSubMesh( pObj ); + if ( !aGeomVar->_is_nil() ) + aGeomEntry = aGeomVar->GetStudyEntry(); + } + + if ( anObjEntry != "" && aGeomEntry != "" && aMeshEntry == "" ) { // take geometry from submesh + _PTR(SObject) pObj = studyDS()->FindObjectID( anObjEntry.toLatin1().data() ); + if ( pObj ) { + // if current object is sub-mesh + SMESH::SMESH_subMesh_var aSubMeshVar = + SMESH::SMESH_subMesh::_narrow( _CAST( SObject,pObj )->GetObject() ); + if ( !aSubMeshVar->_is_nil() ) { + SMESH::SMESH_Mesh_var aMeshVar = aSubMeshVar->GetFather(); + if ( !aMeshVar->_is_nil() ) { + _PTR(SObject) aMeshSO = SMESH::FindSObject( aMeshVar ); + GEOM::GEOM_Object_var aGeomVar = SMESH::GetShapeOnMeshOrSubMesh( aMeshSO ); + if ( !aGeomVar->_is_nil() ) + aMeshEntry = aGeomVar->GetStudyEntry(); + } + } + } + } + + aCreator->setShapeEntry( aGeomEntry ); + if ( aMeshEntry != "" ) + aCreator->setMainShapeEntry( aMeshEntry ); removeCustomFilters(); // Issue 0020170 myDlg->setEnabled( false ); - aCreator->edit( aHyp.in(), aHypItem.second, dlg() ); - onActivateObject( obj ); // Issue 0020170. Restore filters - myDlg->setEnabled( true ); + aCreator->edit( aHyp.in(), aHypItem.second, dlg(), this, SLOT( onHypoEdited( int ) ) ); } } +//================================================================================ +/*! + * Necessary steps after hypothesis edition + * \param result - creation result: + * 0 = rejected + * 1 = accepted + */ +//================================================================================ +void SMESHGUI_MeshOp::onHypoEdited( int result ) +{ + int obj = myDlg->getActiveObject(); + onActivateObject( obj ); // Issue 0020170. Restore filters + myDlg->setEnabled( true ); +} + //================================================================================ /*! * \brief access to hypothesis data @@ -1155,7 +1281,6 @@ void SMESHGUI_MeshOp::onEditHyp( const int theHypType, const int theIndex ) * \retval HypothesisData* - result data, may be 0 */ //================================================================================ - HypothesisData* SMESHGUI_MeshOp::hypData( const int theDim, const int theHypType, const int theIndex) @@ -1173,7 +1298,6 @@ HypothesisData* SMESHGUI_MeshOp::hypData( const int theDim, * \param theIndex - algorithm index */ //================================================================================ - void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex, const int theDim ) { @@ -1282,7 +1406,7 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex, CORBA::String_var curHypType = curHyp->GetName(); if ( !algoDeselectedByUser && myObjHyps[ dim ][ type ].count() > 0 && - curHypType == myObjHyps[ dim ][ type ].first().first->GetName()) + !strcmp( curHypType, myObjHyps[ dim ][ type ].first().first->GetName()) ) { HypothesisData* hypData = SMESH::GetHypothesisData( curHyp->GetName() ); for (int i = 0; i < myAvailableHypData[ dim ][ Algo ].count(); ++i) { @@ -1337,8 +1461,9 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex, //================================================================================ void SMESHGUI_MeshOp::onHypoSet( const QString& theSetName ) { - HypothesesSet* aHypoSet = SMESH::GetHypothesesSet(theSetName); - if (!aHypoSet) return; + myHypoSet = SMESH::GetHypothesesSet(theSetName); + if (!myHypoSet) + return; // clear all hyps for (int dim = SMESH::DIM_0D; dim <= SMESH::DIM_3D; dim++) { @@ -1347,45 +1472,68 @@ void SMESHGUI_MeshOp::onHypoSet( const QString& theSetName ) setCurrentHyp(dim, MainHyp, -1); } - for (int aHypType = Algo; aHypType < AddHyp; aHypType++) { - bool isAlgo = (aHypType == Algo); + myHypoSet->init(true); //algorithms + processSet(); + myHypoSet->init(false); //hypotheses + processSet(); + myHypoSet = 0; +} - // set hyps from the set - QStringList* aHypoList = isAlgo ? &aHypoSet->AlgoList : &aHypoSet->HypoList; - for (int i = 0, n = aHypoList->count(); i < n; i++) { - const QString& aHypoTypeName = (*aHypoList)[ i ]; - HypothesisData* aHypData = SMESH::GetHypothesisData(aHypoTypeName); - if (!aHypData) - continue; +//================================================================================ +/*! + * \brief One step of hypothesis/algorithm list creation + * + * Creates a hypothesis or an algorithm for current item of internal list of names myHypoSet + */ +//================================================================================ +void SMESHGUI_MeshOp::processSet() +{ + myHypoSet->next(); + if( !myHypoSet->more() ) + return; - int aDim = aHypData->Dim[0]; - // create or/and set - if (isAlgo) { - int index = myAvailableHypData[aDim][Algo].indexOf( aHypData ); - if ( index < 0 ) { - QStringList anAvailable; - availableHyps( aDim, Algo, anAvailable, myAvailableHypData[aDim][Algo] ); - myDlg->tab( aDim )->setAvailableHyps( Algo, anAvailable ); - index = myAvailableHypData[aDim][Algo].indexOf( aHypData ); - } - setCurrentHyp( aDim, Algo, index ); - onAlgoSelected( index, aDim ); - } - else { - bool mainHyp = true; - QStringList anAvailable; - availableHyps( aDim, MainHyp, anAvailable, myAvailableHypData[aDim][MainHyp] ); - myDlg->tab( aDim )->setAvailableHyps( MainHyp, anAvailable ); - int index = myAvailableHypData[aDim][MainHyp].indexOf( aHypData ); - if ( index < 0 ) { - mainHyp = false; - index = myAvailableHypData[aDim][AddHyp].indexOf( aHypData ); - } - if (index >= 0) - createHypothesis(aDim, mainHyp ? MainHyp : AddHyp, aHypoTypeName); - } - } // loop on hypos in the set - } // loop on algo/hypo + bool isAlgo = myHypoSet->isAlgo(); + QString aHypoTypeName = myHypoSet->current(); + HypothesisData* aHypData = SMESH::GetHypothesisData(aHypoTypeName); + if (!aHypData) + { + processSet(); + return; + } + + int aDim = aHypData->Dim[0]; + // create or/and set + if (isAlgo) + { + int index = myAvailableHypData[aDim][Algo].indexOf( aHypData ); + if ( index < 0 ) + { + QStringList anAvailable; + availableHyps( aDim, Algo, anAvailable, myAvailableHypData[aDim][Algo] ); + myDlg->tab( aDim )->setAvailableHyps( Algo, anAvailable ); + index = myAvailableHypData[aDim][Algo].indexOf( aHypData ); + } + setCurrentHyp( aDim, Algo, index ); + onAlgoSelected( index, aDim ); + processSet(); + } + else + { + bool mainHyp = true; + QStringList anAvailable; + availableHyps( aDim, MainHyp, anAvailable, myAvailableHypData[aDim][MainHyp] ); + myDlg->tab( aDim )->setAvailableHyps( MainHyp, anAvailable ); + int index = myAvailableHypData[aDim][MainHyp].indexOf( aHypData ); + if ( index < 0 ) + { + mainHyp = false; + index = myAvailableHypData[aDim][AddHyp].indexOf( aHypData ); + } + if (index >= 0) + createHypothesis(aDim, mainHyp ? MainHyp : AddHyp, aHypoTypeName); + else + processSet(); + } } //================================================================================ @@ -1445,7 +1593,13 @@ bool SMESHGUI_MeshOp::createMesh( QString& theMess ) if ( !anAlgoVar->_is_nil() ) SMESH::AddHypothesisOnMesh( aMeshVar, anAlgoVar ); } - +#ifdef WITHGENERICOBJ + // obj has been published in study. Its refcount has been incremented. + // It is safe to decrement its refcount + // so that it will be destroyed when the entry in study will be removed + if (aMeshSO) + aMeshVar->Destroy(); +#endif } return true; } @@ -1533,8 +1687,8 @@ bool SMESHGUI_MeshOp::createSubMesh( QString& theMess ) QString aNewGeomGroupName ("Auto_group_for_"); aNewGeomGroupName += aName; SALOMEDS::SObject_var aNewGroupSO = - geomGen->AddInStudy(aSMESHGen->GetCurrentStudy(), aGeomVar, - aNewGeomGroupName.toLatin1().data(), mainGeom); + geomGen->AddInStudy(aSMESHGen->GetCurrentStudy(), aGeomVar, + aNewGeomGroupName.toLatin1().data(), mainGeom); } } } @@ -1680,39 +1834,54 @@ SMESH::SMESH_Hypothesis_var SMESHGUI_MeshOp::getAlgo( const int theDim ) QStringList tmp; existingHyps( theDim, Algo, pObj, tmp, myExistingHyps[ theDim ][ Algo ]); - // look for anexisting algo of such a type + // look for an existing algo of such a type THypList& aHypVarList = myExistingHyps[ theDim ][ Algo ]; THypList::iterator anIter = aHypVarList.begin(); for ( ; anIter != aHypVarList.end(); anIter++) { SMESH::SMESH_Hypothesis_var aHypVar = (*anIter).first; CORBA::String_var aName = aHypVar->GetName(); - if ( !aHypVar->_is_nil() && aHypName == aName ) + if ( !aHypVar->_is_nil() && !strcmp(aHypName.toLatin1().data(), aName) ) { anAlgoVar = aHypVar; break; } } - if (anAlgoVar->_is_nil()) { + if (anAlgoVar->_is_nil()) + { HypothesisData* aHypData = SMESH::GetHypothesisData( aHypName ); - if (aHypData) { + if (aHypData) + { QString aClientLibName = aHypData->ClientLibName; - if (aClientLibName == "") { + if (aClientLibName == "") + { // Call hypothesis creation server method (without GUI) - SMESH::CreateHypothesis(aHypName, aHypData->Label, true); - } else { + SMESH::SMESH_Hypothesis_var aHyp = + SMESH::CreateHypothesis(aHypName, aHypData->Label, true); +#ifdef WITHGENERICOBJ + if (!CORBA::is_nil(aHyp)) + aHyp->Destroy(); +#endif + } + else + { // Get hypotheses creator client (GUI) // BUG 0020378 //SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator(aHypName); - SMESH::HypothesisCreatorPtr aCreator = SMESH::GetHypothesisCreator(aHypName); + SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator(aHypName); // Create algorithm - if (aCreator) { - aCreator->create(true, aHypName, myDlg); + if (aCreator) + aCreator->create(true, aHypName, myDlg, 0, QString::null ); + else { + SMESH::SMESH_Hypothesis_var aHyp = + SMESH::CreateHypothesis(aHypName, aHypData->Label, true); +#ifdef WITHGENERICOBJ + if (!CORBA::is_nil(aHyp)) + aHyp->Destroy(); +#endif } - else - SMESH::CreateHypothesis(aHypName, aHypData->Label, true); } QStringList tmpList; _PTR(SComponent) aFather = SMESH::GetActiveStudyDocument()->FindComponent( "SMESH" ); @@ -1724,7 +1893,7 @@ SMESH::SMESH_Hypothesis_var SMESHGUI_MeshOp::getAlgo( const int theDim ) { SMESH::SMESH_Hypothesis_var aHypVar = (*anIter).first; CORBA::String_var aName = aHypVar->GetName(); - if ( !aHypVar->_is_nil() && aHypName == aName ) + if ( !aHypVar->_is_nil() && !strcmp(aHypName.toLatin1().data(), aName) ) { anAlgoVar = aHypVar; break; @@ -2013,14 +2182,14 @@ bool SMESHGUI_MeshOp::editMeshOrSubMesh( QString& theMess ) //================================================================================ /*! * \brief Verifies whether given operator is valid for this one - * \param theOtherOp - other operation - * \return Returns TRUE if the given operator is valid for this one, FALSE otherwise -* -* method redefined from base class verifies whether given operator is valid for -* this one (i.e. can be started "above" this operator). In current implementation method -* retuns false if theOtherOp operation is not intended for deleting objects or mesh -* elements. -*/ + * \param theOtherOp - other operation + * \return Returns TRUE if the given operator is valid for this one, FALSE otherwise + * + * method redefined from base class verifies whether given operator is valid for + * this one (i.e. can be started "above" this operator). In current implementation method + * retuns false if theOtherOp operation is not intended for deleting objects or mesh + * elements. + */ //================================================================================ bool SMESHGUI_MeshOp::isValid( SUIT_Operation* theOp ) const { @@ -2030,10 +2199,9 @@ bool SMESHGUI_MeshOp::isValid( SUIT_Operation* theOp ) const //================================================================================ /*! * \brief SLOT. Is called when the user selects a way of geometry selection - * \param theByMesh - true if the user wants to find geometry by mesh element + * \param theByMesh - true if the user wants to find geometry by mesh element */ //================================================================================ - void SMESHGUI_MeshOp::onGeomSelectionByMesh( bool theByMesh ) { if ( theByMesh ) { @@ -2065,7 +2233,6 @@ void SMESHGUI_MeshOp::onGeomSelectionByMesh( bool theByMesh ) * \brief SLOT. Is called when Ok is pressed in SMESHGUI_ShapeByMeshDlg */ //================================================================================ - void SMESHGUI_MeshOp::onPublishShapeByMeshDlg(SUIT_Operation* op) { if ( myShapeByMeshOp == op ) { @@ -2089,7 +2256,6 @@ void SMESHGUI_MeshOp::onPublishShapeByMeshDlg(SUIT_Operation* op) * \brief SLOT. Is called when Close is pressed in SMESHGUI_ShapeByMeshDlg */ //================================================================================ - void SMESHGUI_MeshOp::onCloseShapeByMeshDlg(SUIT_Operation* op) { if ( myShapeByMeshOp == op && myDlg ) { @@ -2100,10 +2266,9 @@ void SMESHGUI_MeshOp::onCloseShapeByMeshDlg(SUIT_Operation* op) //================================================================================ /*! * \brief Selects a SObject - * \param theSObj - the SObject to select + * \param theSObj - the SObject to select */ //================================================================================ - void SMESHGUI_MeshOp::selectObject( _PTR(SObject) theSObj ) const { if ( LightApp_SelectionMgr* sm = selectionMgr() ) {