mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-25 08:50:35 +05:00
#19765 EDF 21730 - long time to load med file file with huge amount of groups
This commit is contained in:
parent
d55dbe18f5
commit
e85e13ee2a
@ -74,6 +74,7 @@
|
||||
#include <vtkActorCollection.h>
|
||||
|
||||
// OCCT includes
|
||||
#include <TColStd_MapOfAsciiString.hxx>
|
||||
#include <TColStd_MapOfInteger.hxx>
|
||||
|
||||
// Qt includes
|
||||
@ -522,18 +523,37 @@ 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 + "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++ );
|
||||
anObj = SMESH::getStudy()->FindObject( aResName.toUtf8().constData() );
|
||||
if ( !allNames.Contains( aResName.toUtf8().constData() ))
|
||||
break;
|
||||
}
|
||||
}
|
||||
while ( anObj );
|
||||
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;
|
||||
|
||||
@ -1111,6 +1133,7 @@ bool SMESHGUI_GroupDlg::onApply()
|
||||
}
|
||||
anIsOk = true;
|
||||
}
|
||||
|
||||
if (myGrpTypeId == 2) // group on filter
|
||||
{
|
||||
if ( myFilter->_is_nil() ) return false;
|
||||
@ -1170,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;
|
||||
|
@ -5821,15 +5821,21 @@ void SMESH_Mesh_i::CreateGroupServants()
|
||||
GEOM::GEOM_Object_var shapeVar = _gen_i->ShapeToGeomObject( shape );
|
||||
_gen_i->PublishGroup( aMesh, groupVar, shapeVar, group->GetName());
|
||||
}
|
||||
|
||||
if ( !addedIDs.empty() )
|
||||
{
|
||||
// python dump
|
||||
set<int>::iterator id = addedIDs.begin();
|
||||
for ( ; id != addedIDs.end(); ++id )
|
||||
map<int, SMESH::SMESH_GroupBase_ptr>::iterator i_grp = _mapGroups.begin();
|
||||
for ( int index = 0; i_grp != _mapGroups.end(); ++index, ++i_grp )
|
||||
{
|
||||
map<int, SMESH::SMESH_GroupBase_ptr>::iterator it = _mapGroups.find(*id);
|
||||
int i = std::distance( _mapGroups.begin(), it );
|
||||
TPythonDump() << it->second << " = " << aMesh << ".GetGroups()[ "<< i << " ]";
|
||||
set<int>::iterator it = addedIDs.find( i_grp->first );
|
||||
if ( it != addedIDs.end() )
|
||||
{
|
||||
TPythonDump() << i_grp->second << " = " << aMesh << ".GetGroups()[ "<< index << " ]";
|
||||
addedIDs.erase( it );
|
||||
if ( addedIDs.empty() )
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user