mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-24 16:30:34 +05:00
[bos #41485] Fixed memory error, possibly related to this issue. Fixed updating of mesh and group icons in the object browser.
This commit is contained in:
parent
6804300a09
commit
42a135c4a7
Binary file not shown.
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 7.5 KiB |
Binary file not shown.
Before Width: | Height: | Size: 6.7 KiB |
BIN
doc/gui/images/image88.jpg
Normal file → Executable file
BIN
doc/gui/images/image88.jpg
Normal file → Executable file
Binary file not shown.
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 12 KiB |
BIN
doc/gui/images/image89.jpg
Normal file
BIN
doc/gui/images/image89.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.3 KiB |
@ -210,6 +210,10 @@ When the Preview dialog is closed, the question about the storage of temporarily
|
||||
|
||||
These elements can be kept in the mesh.
|
||||
|
||||
Since the mesh, its submesh(es) and group(s) are now not empty, their **Object Browser** icons will be updated accordingly.
|
||||
|
||||
.. image:: ../images/image89.jpg
|
||||
:align: center
|
||||
|
||||
.. _submesh_order_anchor:
|
||||
|
||||
|
@ -35,7 +35,8 @@ using namespace std;
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
SMESHDS_Script::SMESHDS_Script(bool theIsEmbeddedMode):
|
||||
myIsEmbeddedMode(theIsEmbeddedMode)
|
||||
myIsEmbeddedMode(theIsEmbeddedMode),
|
||||
myIsModified(true)
|
||||
{
|
||||
//cerr << "=========================== myIsEmbeddedMode " << myIsEmbeddedMode << endl;
|
||||
}
|
||||
|
@ -410,9 +410,6 @@ namespace
|
||||
{
|
||||
_PTR(SObject) aMeshSO = SMESH::FindSObject( aMeshes[i] );
|
||||
if ( aMeshSO ) {
|
||||
_PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
|
||||
_PTR(AttributePixMap) aPixmap = aBuilder->FindOrCreateAttribute( aMeshSO, "AttributePixMap" );
|
||||
aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH_IMPORTED" );
|
||||
if ( theCommandID == SMESHOp::OpImportUNV ) // mesh names aren't taken from the file for UNV import
|
||||
SMESH::SetName( aMeshSO, QFileInfo(filename).fileName() );
|
||||
|
||||
@ -607,7 +604,7 @@ namespace
|
||||
{
|
||||
format = "CGNS";
|
||||
notSupportedElemTypes.push_back( SMESH::Entity_Ball );
|
||||
}
|
||||
}
|
||||
else if ( isGMF )
|
||||
{
|
||||
format = "GMF";
|
||||
@ -707,7 +704,7 @@ namespace
|
||||
checkBoxes << QObject::tr( "CGNS_EXPORT_ELEMS_BY_TYPE" ) << QObject::tr("STRUCTUREDCGNS");
|
||||
|
||||
SalomeApp_CheckFileDlg* fd = new SalomeApp_CheckFileDlg ( SMESHGUI::desktop(), false, checkBoxes, true, true );
|
||||
|
||||
|
||||
fd->setWindowTitle( aTitle );
|
||||
fd->setNameFilter( QObject::tr( "CGNS_FILES_FILTER" ) + " (*.cgns)" );
|
||||
|
||||
@ -717,18 +714,18 @@ namespace
|
||||
SMESHGUI_FileValidator* fv = new SMESHGUI_FileValidator( fd );
|
||||
fd->setValidator( fv );
|
||||
fd->SetChecked( option, 0 );
|
||||
|
||||
|
||||
if ( fd->exec() )
|
||||
{
|
||||
aFilename = fd->selectedFile();
|
||||
structureCGNS = fd->IsChecked( 1 );
|
||||
structureCGNS = fd->IsChecked( 1 );
|
||||
}
|
||||
|
||||
toOverwrite = fv->isOverwrite( aFilename );
|
||||
option = fd->IsChecked( 0 );
|
||||
SMESHGUI::resourceMgr()->setValue("SMESH", theOptionResource, option );
|
||||
toCreateGroups = option;
|
||||
|
||||
|
||||
delete fd;
|
||||
}
|
||||
else if ( isUNV || isDAT ) // Export to [ UNV | DAT ] - one option
|
||||
@ -768,11 +765,11 @@ namespace
|
||||
QStringList filters;
|
||||
aFilterMap.insert( QObject::tr( "STL_ASCII_FILES_FILTER" ) + " (*.stl)", 1 );
|
||||
aFilterMap.insert( QObject::tr( "STL_BIN_FILES_FILTER" ) + " (*.stl)", 0 );
|
||||
|
||||
|
||||
QMap<QString, int>::const_iterator it = aFilterMap.begin();
|
||||
for ( ; it != aFilterMap.end(); ++it )
|
||||
filters.push_back( it.key() );
|
||||
|
||||
filters.push_back( it.key() );
|
||||
|
||||
SUIT_FileDlg* fd = new SUIT_FileDlg( SMESHGUI::desktop(), false, true, true );
|
||||
fd->setWindowTitle( aTitle );
|
||||
fd->setNameFilters( filters );
|
||||
@ -1031,7 +1028,7 @@ namespace
|
||||
aFilename.toUtf8().data(),
|
||||
toOverwrite && aMeshIndex == 0,
|
||||
toCreateGroups );
|
||||
else
|
||||
else
|
||||
aMeshItem->ExportStructuredCGNS( aMeshOrGroup,
|
||||
aFilename.toUtf8().data(),
|
||||
toOverwrite && aMeshIndex == 0 );
|
||||
@ -1069,11 +1066,11 @@ namespace
|
||||
SUIT_MessageBox::warning(SMESHGUI::desktop(),
|
||||
QObject::tr("SMESH_WRN_WARNING"),
|
||||
QObject::tr("SMESH_EXPORT_FAILED") + SalomeApp_Tools::ExceptionToString(S_ex));
|
||||
}
|
||||
}
|
||||
else
|
||||
SUIT_MessageBox::warning(SMESHGUI::desktop(),
|
||||
QObject::tr("SMESH_WRN_WARNING"),
|
||||
SalomeApp_Tools::ExceptionToString(S_ex));
|
||||
SalomeApp_Tools::ExceptionToString(S_ex));
|
||||
wc.resume();
|
||||
}
|
||||
}
|
||||
@ -4196,7 +4193,7 @@ void SMESHGUI::createSMESHAction( const int id, const QString& po_id, const QStr
|
||||
pix = resMgr->loadPixmap( "SMESH", tr( QString( "ICON_%1" ).arg( po_id ).toLatin1().data() ), false );
|
||||
if ( !pix.isNull() )
|
||||
icon = QIcon( pix );
|
||||
|
||||
|
||||
QString tooltip = tr( QString( "TOP_%1" ).arg( po_id ).toLatin1().data() ),
|
||||
menu = tr( QString( "MEN_%1" ).arg( po_id ).toLatin1().data() ),
|
||||
status_bar = tr( QString( "STB_%1" ).arg( po_id ).toLatin1().data() );
|
||||
|
@ -1401,12 +1401,15 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMeshesFromUNV( const char* theFileName
|
||||
checkFileReadable( theFileName );
|
||||
|
||||
SMESH::SMESH_Mesh_var aMesh = createMesh();
|
||||
|
||||
string aFileName;
|
||||
|
||||
// publish mesh in the study
|
||||
if ( CanPublishInStudy( aMesh ) ) {
|
||||
SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder();
|
||||
aStudyBuilder->NewCommand(); // There is a transaction
|
||||
SALOMEDS::SObject_wrap aSO = PublishMesh( aMesh.in(), aFileName.c_str() );
|
||||
SALOMEDS::SObject_wrap aSO =
|
||||
PublishMesh( aMesh.in(), aFileName.c_str(), "ICON_SMESH_TREE_MESH_IMPORTED" );
|
||||
aStudyBuilder->CommitCommand();
|
||||
if ( !aSO->_is_nil() ) {
|
||||
// Update Python script
|
||||
@ -1438,13 +1441,6 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMED( const char*
|
||||
{
|
||||
checkFileReadable( theFileName );
|
||||
|
||||
#ifdef WIN32
|
||||
char bname[ _MAX_FNAME ];
|
||||
_splitpath( theFileName, NULL, NULL, bname, NULL );
|
||||
string aFileName = bname;
|
||||
#else
|
||||
string aFileName = basename( const_cast<char *>( theFileName ));
|
||||
#endif
|
||||
// Retrieve mesh names from the file
|
||||
DriverMED_R_SMESHDS_Mesh myReader;
|
||||
myReader.SetFile( theFileName );
|
||||
@ -1481,7 +1477,7 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMED( const char*
|
||||
// publish mesh in the study
|
||||
SALOMEDS::SObject_wrap aSO;
|
||||
if ( CanPublishInStudy( mesh ) )
|
||||
aSO = PublishMesh( mesh.in(), meshName.c_str() );
|
||||
aSO = PublishMesh( mesh.in(), meshName.c_str(), "ICON_SMESH_TREE_MESH_IMPORTED" );
|
||||
|
||||
// Python Dump
|
||||
if ( !aSO->_is_nil() ) {
|
||||
@ -1529,7 +1525,7 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMeshesFromSTL( const char* theFileName
|
||||
checkFileReadable( theFileName );
|
||||
|
||||
SMESH::SMESH_Mesh_var aMesh = createMesh();
|
||||
//string aFileName;
|
||||
|
||||
#ifdef WIN32
|
||||
char bname[ _MAX_FNAME ];
|
||||
_splitpath( theFileName, NULL, NULL, bname, NULL );
|
||||
@ -1537,11 +1533,13 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMeshesFromSTL( const char* theFileName
|
||||
#else
|
||||
string aFileName = basename( const_cast<char *>(theFileName) );
|
||||
#endif
|
||||
|
||||
// publish mesh in the study
|
||||
if ( CanPublishInStudy( aMesh ) ) {
|
||||
SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder();
|
||||
aStudyBuilder->NewCommand(); // There is a transaction
|
||||
SALOMEDS::SObject_wrap aSO = PublishInStudy( SALOMEDS::SObject::_nil(), aMesh.in(), aFileName.c_str() );
|
||||
SALOMEDS::SObject_wrap aSO =
|
||||
PublishMesh( aMesh.in(), aFileName.c_str(), "ICON_SMESH_TREE_MESH_IMPORTED" );
|
||||
aStudyBuilder->CommitCommand();
|
||||
if ( !aSO->_is_nil() ) {
|
||||
// Update Python script
|
||||
@ -1616,7 +1614,7 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromCGNS( const char*
|
||||
// publish mesh in the study
|
||||
SALOMEDS::SObject_wrap aSO;
|
||||
if ( CanPublishInStudy( mesh ) )
|
||||
aSO = PublishMesh( mesh.in(), meshName.c_str() );
|
||||
aSO = PublishMesh( mesh.in(), meshName.c_str(), "ICON_SMESH_TREE_MESH_IMPORTED" );
|
||||
|
||||
// Python Dump
|
||||
if ( !aSO->_is_nil() ) {
|
||||
@ -1667,7 +1665,8 @@ SMESH_Gen_i::CreateMeshesFromGMF( const char* theFileName,
|
||||
if ( CanPublishInStudy( aMesh ) ) {
|
||||
SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder();
|
||||
aStudyBuilder->NewCommand(); // There is a transaction
|
||||
SALOMEDS::SObject_wrap aSO = PublishInStudy( SALOMEDS::SObject::_nil(), aMesh.in(), aFileName.c_str() );
|
||||
SALOMEDS::SObject_wrap aSO =
|
||||
PublishMesh( aMesh.in(), aFileName.c_str(), "ICON_SMESH_TREE_MESH_IMPORTED" );
|
||||
aStudyBuilder->CommitCommand();
|
||||
if ( !aSO->_is_nil() ) {
|
||||
// Update Python script
|
||||
@ -1737,7 +1736,7 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMESHIO(const char* theFileName,
|
||||
// publish mesh in the study
|
||||
SALOMEDS::SObject_wrap aSO;
|
||||
if (CanPublishInStudy(mesh))
|
||||
aSO = PublishMesh(mesh.in(), meshName.c_str());
|
||||
aSO = PublishMesh(mesh.in(), meshName.c_str(), "ICON_SMESH_TREE_MESH_IMPORTED");
|
||||
|
||||
// Save SO to use in a python dump
|
||||
sobjects.emplace_back(aSO);
|
||||
|
@ -524,7 +524,8 @@ public:
|
||||
// publishing methods
|
||||
SALOMEDS::SComponent_ptr PublishComponent();
|
||||
SALOMEDS::SObject_ptr PublishMesh (SMESH::SMESH_Mesh_ptr theMesh,
|
||||
const char* theName = 0);
|
||||
const char* theName = 0,
|
||||
const char* thePixMap = 0);
|
||||
SALOMEDS::SObject_ptr PublishHypothesis (SMESH::SMESH_Hypothesis_ptr theHyp,
|
||||
const char* theName = 0);
|
||||
SALOMEDS::SObject_ptr PublishSubMesh (SMESH::SMESH_Mesh_ptr theMesh,
|
||||
@ -536,6 +537,7 @@ public:
|
||||
GEOM::GEOM_Object_ptr theShapeObject,
|
||||
const char* theName = 0);
|
||||
void UpdateIcons(SMESH::SMESH_Mesh_ptr theMesh);
|
||||
void UpdateGroupIcon(SMESH::SMESH_GroupBase_ptr theGroup);
|
||||
void HighLightInvalid(CORBA::Object_ptr theObject, bool isInvalid);
|
||||
bool IsInvalid(SALOMEDS::SObject_ptr theObject);
|
||||
bool AddHypothesisToShape(SMESH::SMESH_Mesh_ptr theMesh,
|
||||
|
@ -607,7 +607,8 @@ SALOMEDS::SComponent_ptr SMESH_Gen_i::PublishComponent()
|
||||
//=======================================================================
|
||||
|
||||
SALOMEDS::SObject_ptr SMESH_Gen_i::PublishMesh (SMESH::SMESH_Mesh_ptr theMesh,
|
||||
const char* theName)
|
||||
const char* theName,
|
||||
const char* thePixMap)
|
||||
{
|
||||
if ( !myIsEnablePublish )
|
||||
return SALOMEDS::SObject::_nil();
|
||||
@ -631,7 +632,8 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishMesh (SMESH::SMESH_Mesh_ptr theMesh,
|
||||
else
|
||||
aTag++;
|
||||
|
||||
aMeshSO = publish( theMesh, father, aTag, "ICON_SMESH_TREE_MESH_WARN" );
|
||||
aMeshSO = publish( theMesh, father, aTag,
|
||||
thePixMap ? thePixMap : "ICON_SMESH_TREE_MESH_WARN" );
|
||||
if ( aMeshSO->_is_nil() )
|
||||
return aMeshSO._retn();
|
||||
}
|
||||
@ -977,18 +979,13 @@ void SMESH_Gen_i::UpdateIcons( SMESH::SMESH_Mesh_ptr theMesh )
|
||||
if ( idSrc->_is_nil() )
|
||||
continue;
|
||||
|
||||
SMESH::SMESH_GroupBase_var grp = SMESH::SMESH_GroupBase::_narrow( obj );
|
||||
SMESH::SMESH_GroupOnFilter_var gof = SMESH::SMESH_GroupOnFilter::_narrow( obj );
|
||||
const bool isGroup = !grp->_is_nil();
|
||||
const bool isGroupOnFilter = !gof->_is_nil();
|
||||
|
||||
bool isEmpty = ( mesh_i->NbNodes() == 0 );
|
||||
if ( !isEmpty )
|
||||
{
|
||||
if ( isGroupOnFilter ) // GetTypes() can be very long on GroupOnFilter!
|
||||
{
|
||||
SMESH::smIdType_array_var nbByType = mesh_i->GetNbElementsByType();
|
||||
isEmpty = ( nbByType[ grp->GetType() ] == 0 );
|
||||
SMESH::SMESH_GroupBase_var grp = SMESH::SMESH_GroupBase::_narrow( obj );
|
||||
if ( !grp->_is_nil() ) {
|
||||
UpdateGroupIcon(grp);
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1013,17 +1010,46 @@ void SMESH_Gen_i::UpdateIcons( SMESH::SMESH_Mesh_ptr theMesh )
|
||||
|
||||
if ( isEmpty )
|
||||
SetPixMap( so, "ICON_SMESH_TREE_MESH_WARN");
|
||||
else if ( !isGroup )
|
||||
SetPixMap( so, "ICON_SMESH_TREE_MESH" );
|
||||
else if ( isGroupOnFilter )
|
||||
SetPixMap( so, "ICON_SMESH_TREE_GROUP_ON_FILTER" );
|
||||
else
|
||||
SetPixMap( so, "ICON_SMESH_TREE_GROUP" );
|
||||
SetPixMap( so, "ICON_SMESH_TREE_MESH" );
|
||||
|
||||
} // loop on sub-meshes or groups
|
||||
} // loop on roots
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : UpdateGroupIcon
|
||||
//purpose : update icon of a group
|
||||
//=======================================================================
|
||||
|
||||
void SMESH_Gen_i::UpdateGroupIcon( SMESH::SMESH_GroupBase_ptr theGroup )
|
||||
{
|
||||
SALOMEDS::SObject_wrap so = ObjectToSObject( theGroup );
|
||||
if ( so->_is_nil() )
|
||||
return;
|
||||
|
||||
SMESH::SMESH_GroupOnFilter_var gof = SMESH::SMESH_GroupOnFilter::_narrow( theGroup );
|
||||
const bool isGroupOnFilter = !gof->_is_nil();
|
||||
|
||||
bool isEmpty = false;
|
||||
if ( isGroupOnFilter ) // GetTypes() can be very long on GroupOnFilter!
|
||||
{
|
||||
SMESH::smIdType_array_var nbByType = theGroup->GetMesh()->GetNbElementsByType();
|
||||
isEmpty = ( nbByType[ theGroup->GetType() ] == 0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
isEmpty = ( theGroup->Size() == 0 );
|
||||
}
|
||||
|
||||
if ( isEmpty )
|
||||
SetPixMap( so, "ICON_SMESH_TREE_MESH_WARN");
|
||||
else if ( isGroupOnFilter )
|
||||
SetPixMap( so, "ICON_SMESH_TREE_GROUP_ON_FILTER" );
|
||||
else
|
||||
SetPixMap( so, "ICON_SMESH_TREE_GROUP" );
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : HighLightInvalid
|
||||
//purpose : change font color of a object in the Object Browser
|
||||
|
@ -261,16 +261,19 @@ void SMESH_Group_i::Clear()
|
||||
if ( myPreMeshInfo )
|
||||
myPreMeshInfo->FullLoadFromFile();
|
||||
|
||||
SMESH::SMESH_Group_var me = _this();
|
||||
|
||||
// Update Python script
|
||||
SMESH::TPythonDump() << SMESH::SMESH_Group_var(_this()) << ".Clear()";
|
||||
SMESH::TPythonDump() << me << ".Clear()";
|
||||
|
||||
// Clear the group
|
||||
SMESHDS_Group* aGroupDS = dynamic_cast<SMESHDS_Group*>( GetGroupDS() );
|
||||
if (aGroupDS) {
|
||||
aGroupDS->Clear();
|
||||
return;
|
||||
SMESH_Gen_i* aGen = GetMeshServant()->GetGen();
|
||||
aGen->UpdateGroupIcon(me);
|
||||
Modified(); // notify dependent Filter with FT_BelongToMeshGroup criterion
|
||||
}
|
||||
Modified(); // notify dependent Filter with FT_BelongToMeshGroup criterion
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
@ -301,20 +304,28 @@ SMESH::smIdType SMESH_Group_i::Add( const SMESH::smIdType_array& theIDs )
|
||||
if ( myPreMeshInfo )
|
||||
myPreMeshInfo->FullLoadFromFile();
|
||||
|
||||
SMESH::SMESH_Group_var me = _this();
|
||||
|
||||
// Update Python script
|
||||
SMESH::TPythonDump() << "nbAdd = " << SMESH::SMESH_Group_var(_this()) << ".Add( " << theIDs << " )";
|
||||
SMESH::TPythonDump() << "nbAdd = " << me << ".Add( " << theIDs << " )";
|
||||
|
||||
// Add elements to the group
|
||||
SMESHDS_Group* aGroupDS = dynamic_cast<SMESHDS_Group*>( GetGroupDS() );
|
||||
if (aGroupDS) {
|
||||
bool wasEmpty = aGroupDS->IsEmpty();
|
||||
int nbAdd = 0;
|
||||
for ( CORBA::ULong i = 0; i < theIDs.length(); i++) {
|
||||
int anID = (int) theIDs[i];
|
||||
if ( aGroupDS->Add( anID ))
|
||||
nbAdd++;
|
||||
}
|
||||
if ( nbAdd )
|
||||
if ( nbAdd ) {
|
||||
Modified(); // notify dependent Filter with FT_BelongToMeshGroup criterion
|
||||
if (wasEmpty) {
|
||||
SMESH_Gen_i* aGen = GetMeshServant()->GetGen();
|
||||
aGen->UpdateGroupIcon(me);
|
||||
}
|
||||
}
|
||||
return nbAdd;
|
||||
}
|
||||
MESSAGE("attempt to add elements to a vague group");
|
||||
@ -332,9 +343,10 @@ SMESH::smIdType SMESH_Group_i::Remove( const SMESH::smIdType_array& theIDs )
|
||||
if ( myPreMeshInfo )
|
||||
myPreMeshInfo->FullLoadFromFile();
|
||||
|
||||
SMESH::SMESH_Group_var me = _this();
|
||||
|
||||
// Update Python script
|
||||
SMESH::TPythonDump() << "nbDel = " << SMESH::SMESH_Group_var(_this())
|
||||
<< ".Remove( " << theIDs << " )";
|
||||
SMESH::TPythonDump() << "nbDel = " << me << ".Remove( " << theIDs << " )";
|
||||
|
||||
// Remove elements from the group
|
||||
SMESHDS_Group* aGroupDS = dynamic_cast<SMESHDS_Group*>( GetGroupDS() );
|
||||
@ -345,8 +357,13 @@ SMESH::smIdType SMESH_Group_i::Remove( const SMESH::smIdType_array& theIDs )
|
||||
if ( aGroupDS->Remove( anID ))
|
||||
nbDel++;
|
||||
}
|
||||
if ( nbDel )
|
||||
if ( nbDel ) {
|
||||
Modified(); // notify dependent Filter with FT_BelongToMeshGroup criterion
|
||||
if (aGroupDS->IsEmpty()) {
|
||||
SMESH_Gen_i* aGen = GetMeshServant()->GetGen();
|
||||
aGen->UpdateGroupIcon(me);
|
||||
}
|
||||
}
|
||||
return nbDel;
|
||||
}
|
||||
MESSAGE("attempt to remove elements from a vague group");
|
||||
@ -361,24 +378,27 @@ SMESH::smIdType SMESH_Group_i::Remove( const SMESH::smIdType_array& theIDs )
|
||||
|
||||
typedef bool (SMESHDS_Group::*TFunChangeGroup)(const smIdType);
|
||||
|
||||
CORBA::Long
|
||||
ChangeByPredicate( SMESH::Predicate_i* thePredicate,
|
||||
SMESHDS_GroupBase* theGroupBase,
|
||||
SMESH::NotifyerAndWaiter* theGroupImpl,
|
||||
TFunChangeGroup theFun)
|
||||
CORBA::Long ChangeByPredicate( SMESH::Predicate_i* thePredicate,
|
||||
SMESHDS_GroupBase* theGroupBase,
|
||||
SMESH_GroupBase_i* theGroup,
|
||||
TFunChangeGroup theFun)
|
||||
{
|
||||
CORBA::Long aNb = 0;
|
||||
if(SMESHDS_Group* aGroupDS = dynamic_cast<SMESHDS_Group*>(theGroupBase)){
|
||||
if (SMESHDS_Group* aGroupDS = dynamic_cast<SMESHDS_Group*>(theGroupBase)) {
|
||||
SMESH::Controls::Filter::TIdSequence aSequence;
|
||||
const SMDS_Mesh* aMesh = theGroupBase->GetMesh();
|
||||
SMESH::Filter_i::GetElementsId(thePredicate,aMesh,aSequence);
|
||||
|
||||
CORBA::Long i = 0, iEnd = aSequence.size();
|
||||
for(; i < iEnd; i++)
|
||||
if((aGroupDS->*theFun)(aSequence[i]))
|
||||
for (; i < iEnd; i++)
|
||||
if ((aGroupDS->*theFun)(aSequence[i]))
|
||||
aNb++;
|
||||
if ( aNb )
|
||||
theGroupImpl->Modified();
|
||||
if ( aNb ) {
|
||||
theGroup->Modified();
|
||||
SMESH_Gen_i* aGen = theGroup->GetMeshServant()->GetGen();
|
||||
SMESH::SMESH_GroupBase_var aGroup = theGroup->_this();
|
||||
aGen->UpdateGroupIcon(aGroup);
|
||||
}
|
||||
return aNb;
|
||||
}
|
||||
return aNb;
|
||||
@ -428,11 +448,16 @@ SMESH::smIdType SMESH_Group_i::AddFrom( SMESH::SMESH_IDSource_ptr theSource )
|
||||
aGroupDS->SMDSGroup().Add( elemIt->next() );
|
||||
}
|
||||
|
||||
// Update Python script
|
||||
pd << "nbAdd = " << SMESH::SMESH_Group_var(_this()) << ".AddFrom( " << theSource << " )";
|
||||
SMESH::SMESH_Group_var me = _this();
|
||||
|
||||
if ( prevNb != Size() )
|
||||
// Update Python script
|
||||
pd << "nbAdd = " << me << ".AddFrom( " << theSource << " )";
|
||||
|
||||
if ( prevNb != Size() ) {
|
||||
SMESH_Gen_i* aGen = GetMeshServant()->GetGen();
|
||||
aGen->UpdateGroupIcon(me);
|
||||
Modified(); // notify dependent Filter with FT_BelongToMeshGroup criterion
|
||||
}
|
||||
|
||||
return Size() - prevNb;
|
||||
}
|
||||
@ -830,17 +855,18 @@ void SMESH_GroupOnFilter_i::SetFilter(SMESH::Filter_ptr theFilter)
|
||||
myFilter->SetMesh( SMESH::SMESH_Mesh::_nil() ); // to UnRegister() the mesh
|
||||
}
|
||||
|
||||
SMESH_Gen_i* aGen = GetMeshServant()->GetGen();
|
||||
SMESH::SMESH_GroupOnFilter_var me = _this();
|
||||
|
||||
if ( SMESHDS_GroupOnFilter* grDS = dynamic_cast< SMESHDS_GroupOnFilter*>( GetGroupDS() ))
|
||||
{
|
||||
grDS->SetPredicate( GetPredicate( myFilter ));
|
||||
aGen->UpdateGroupIcon(me);
|
||||
Modified(); // notify dependent Filter with FT_BelongToMeshGroup criterion
|
||||
}
|
||||
|
||||
SMESH::SMESH_GroupOnFilter_var me = _this();
|
||||
|
||||
// mark the group valid after edition
|
||||
GetMeshServant()->GetGen()->HighLightInvalid( me, false );
|
||||
|
||||
aGen->HighLightInvalid( me, false );
|
||||
|
||||
SMESH::TPythonDump()<< me <<".SetFilter( "<< theFilter <<" )";
|
||||
}
|
||||
@ -1078,4 +1104,3 @@ void SMESH_GroupOnFilter_i::OnBaseObjModified(NotifyerAndWaiter* /*filter*/, boo
|
||||
if ( SMESHDS_GroupOnFilter* grDS = dynamic_cast< SMESHDS_GroupOnFilter*>( GetGroupDS() ))
|
||||
grDS->SetPredicate( GetPredicate( myFilter )); // group resets its cache
|
||||
}
|
||||
|
||||
|
@ -1414,6 +1414,9 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::IntersectGroups( SMESH::SMESH_GroupBase_ptr
|
||||
resGroupDS->SMDSGroup().Add( e );
|
||||
}
|
||||
}
|
||||
|
||||
GetGen()->UpdateGroupIcon(aResGrp);
|
||||
|
||||
// Update Python script
|
||||
pyDump << aResGrp << " = " << SMESH::SMESH_Mesh_var(_this()) << ".IntersectGroups( "
|
||||
<< theGroup1 << ", " << theGroup2 << ", '" << theName << "')";
|
||||
@ -1500,6 +1503,8 @@ SMESH_Mesh_i::IntersectListOfGroups(const SMESH::ListOfGroups& theGroups,
|
||||
resGroupDS->SMDSGroup().Add( e );
|
||||
}
|
||||
|
||||
GetGen()->UpdateGroupIcon(aResGrp);
|
||||
|
||||
// Update Python script
|
||||
pyDump << aResGrp << " = " << SMESH::SMESH_Mesh_var( _this() )
|
||||
<< ".IntersectListOfGroups( " << theGroups << ", '" << theName << "' )";
|
||||
@ -1561,6 +1566,9 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::CutGroups( SMESH::SMESH_GroupBase_ptr theGr
|
||||
resGroupDS->SMDSGroup().Add( e );
|
||||
}
|
||||
}
|
||||
|
||||
GetGen()->UpdateGroupIcon(aResGrp);
|
||||
|
||||
// Update Python script
|
||||
pyDump << aResGrp << " = " << SMESH::SMESH_Mesh_var(_this()) << ".CutGroups( "
|
||||
<< theGroup1 << ", " << theGroup2 << ", '" << theName << "')";
|
||||
@ -1661,6 +1669,8 @@ SMESH_Mesh_i::CutListOfGroups(const SMESH::ListOfGroups& theMainGroups,
|
||||
resGroupDS->SMDSGroup().Add( e );
|
||||
}
|
||||
|
||||
GetGen()->UpdateGroupIcon(aResGrp);
|
||||
|
||||
// Update Python script
|
||||
pyDump << aResGrp << " = " << SMESH::SMESH_Mesh_var( _this() )
|
||||
<< ".CutListOfGroups( " << theMainGroups << ", "
|
||||
@ -4576,7 +4586,7 @@ void SMESH_Mesh_i::ExportStructuredCGNS( SMESH::SMESH_IDSource_ptr meshPart,
|
||||
meshName = name.in();
|
||||
}
|
||||
SMESH_TRY;
|
||||
|
||||
|
||||
SMESH::SMESH_Mesh_var mesh = meshPart->GetMesh();
|
||||
SMESH_Mesh_i* mesh_i = SMESH::DownCast<SMESH_Mesh_i*>( mesh );
|
||||
mesh_i->Load();
|
||||
|
Loading…
Reference in New Issue
Block a user