X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_GroupDlg.cxx;h=2313c768ce438035762520a9727d1bf47be37bf1;hb=f435fe5c8210fd6b1f0c4e1ab62e91babc0cfd28;hp=62666c97ff45ceaf4d0d68f2668d3ecc28fd56c8;hpb=07ac4da8b237a9f7b8b87aa47e2fe0a8c2c8dbaf;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI_GroupDlg.cxx b/src/SMESHGUI/SMESHGUI_GroupDlg.cxx index 62666c97f..2313c768c 100644 --- a/src/SMESHGUI/SMESHGUI_GroupDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_GroupDlg.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 @@ -74,6 +74,7 @@ #include // OCCT includes +#include #include // Qt includes @@ -522,19 +523,38 @@ QString SMESHGUI_GroupDlg::GetDefaultName(const QString& theOperation) return aName; } +//======================================================================= +//function : setDefaultName +//purpose : +//======================================================================= + void SMESHGUI_GroupDlg::setDefaultName() const { QString aResName; - int i=1; - QString aPrefix ="Group_"; - _PTR(SObject) anObj; - do + const QString aPrefix ="Group_"; + + if ( myMesh->_is_nil() ) { - aResName = aPrefix + QString::number( i++ ); - anObj = SMESH::getStudy()->FindObject( aResName.toUtf8().constData() ); + aResName = aPrefix + "1"; + } + else + { + SMESH::ListOfGroups_var allGroups = myMesh->GetGroups(); + TColStd_MapOfAsciiString allNames( allGroups->length() ); + for ( CORBA::ULong i = 0; i < allGroups->length(); ++i ) + { + CORBA::String_var name = allGroups[i]->GetName(); + allNames.Add( name.in() ); + } + int i = 1; + while ( true ) + { + aResName = aPrefix + QString::number( i++ ); + if ( !allNames.Contains( aResName.toUtf8().constData() )) + break; + } } - while ( anObj ); - myName->setText(aResName); + myName->setText(aResName); } //================================================================================= @@ -944,7 +964,8 @@ bool SMESHGUI_GroupDlg::onApply() if (myGroup->_is_nil()) { // creation or conversion // check if group on geometry is not null - if (!myGroupOnGeom->_is_nil() || !myGroupOnFilter->_is_nil()) { + if (!myGroupOnGeom->_is_nil() || !myGroupOnFilter->_is_nil()) + { if (myMesh->_is_nil()) return false; if ( myGroupOnGeom->_is_nil() ) @@ -958,7 +979,8 @@ bool SMESHGUI_GroupDlg::onApply() } } - if (myGroup->_is_nil()) { // creation + if (myGroup->_is_nil()) // creation + { if (myMesh->_is_nil()) return false; @@ -990,10 +1012,10 @@ bool SMESHGUI_GroupDlg::onApply() myGroup->Add(anIdList.inout()); } } + } - - } else { // edition - + else // edition + { resultGroup = SMESH::SMESH_GroupBase::_narrow( myGroup ); isCreation = false; @@ -1063,7 +1085,7 @@ bool SMESHGUI_GroupDlg::onApply() if (geomGen->_is_nil()) return false; - GEOM::GEOM_IGroupOperations_ptr op = geomGen->GetIGroupOperations(); + GEOM::GEOM_IGroupOperations_wrap op = geomGen->GetIGroupOperations(); if (op->_is_nil()) return false; @@ -1083,6 +1105,8 @@ bool SMESHGUI_GroupDlg::onApply() GEOM::GEOM_Object_var aMeshShape = myMesh->GetShapeToMesh(); GEOM::GEOM_Object_wrap aGroupVar = op->CreateGroup(aMeshShape, aGroupType); + if ( aGroupVar->_is_nil() ) + return false; op->UnionList(aGroupVar, myGeomObjects); if (op->IsDone()) { @@ -1109,6 +1133,7 @@ bool SMESHGUI_GroupDlg::onApply() } anIsOk = true; } + if (myGrpTypeId == 2) // group on filter { if ( myFilter->_is_nil() ) return false; @@ -1168,7 +1193,7 @@ bool SMESHGUI_GroupDlg::onApply() Handle(SALOME_InteractiveObject) anIO = anActor->getIO(); if ( isConversion ) { // need to reset TVisualObj and actor SMESH::RemoveVisualObjectWithActors( anIO->getEntry(), true ); - SMESH::Update( anIO,true); + SMESH::Update( anIO, true ); myActorsList.clear(); anActor = SMESH::FindActorByEntry( anIO->getEntry() ); if ( !anActor ) return false; @@ -1400,9 +1425,11 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged() SALOME_ListIteratorOfListIO anIt (aList); for (; anIt.More(); anIt.Next()) { - aGeomGroup = GEOMBase::ConvertIOinGEOMObject(anIt.Value()); - + CORBA::Object_var aGroupObj = SMESH::IObjectToObject(anIt.Value()); + if (CORBA::is_nil(aGroupObj)) + continue; // Check if the object is a geometry group + aGeomGroup = GEOM::GEOM_Object::_narrow(aGroupObj); if (CORBA::is_nil(aGeomGroup)) continue; @@ -1412,7 +1439,7 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged() GEOM::GEOM_Object_var aGroupMainShape; if (aGeomGroup->GetType() == 37) { - GEOM::GEOM_IGroupOperations_ptr anOp = + GEOM::GEOM_IGroupOperations_wrap anOp = SMESH::GetGEOMGen( aGeomGroup )->GetIGroupOperations(); aGroupMainShape = anOp->GetMainShape( aGeomGroup ); // aGroupMainShape is an existing servant => GEOM_Object_var not GEOM_Object_wrap @@ -2010,7 +2037,7 @@ void SMESHGUI_GroupDlg::onAdd() } else if ( myCurrentLineEdit == myGeomGroupLine && myGeomObjects->length() == 1 ) { - GEOM::GEOM_IGroupOperations_ptr aGroupOp = + GEOM::GEOM_IGroupOperations_wrap aGroupOp = SMESH::GetGEOMGen( myGeomObjects[0] )->GetIGroupOperations(); SMESH::ElementType aGroupType = SMESH::ALL;