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:
//purpose :
//=======================================================================
SMESHDS_Script::SMESHDS_Script(bool theIsEmbeddedMode):
- myIsEmbeddedMode(theIsEmbeddedMode)
+ myIsEmbeddedMode(theIsEmbeddedMode),
+ myIsModified(true)
{
//cerr << "=========================== myIsEmbeddedMode " << myIsEmbeddedMode << endl;
}
{
_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() );
{
format = "CGNS";
notSupportedElemTypes.push_back( SMESH::Entity_Ball );
- }
+ }
else if ( isGMF )
{
format = "GMF";
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)" );
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
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 );
aFilename.toUtf8().data(),
toOverwrite && aMeshIndex == 0,
toCreateGroups );
- else
+ else
aMeshItem->ExportStructuredCGNS( aMeshOrGroup,
aFilename.toUtf8().data(),
toOverwrite && aMeshIndex == 0 );
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();
}
}
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() );
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
{
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 );
// 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() ) {
checkFileReadable( theFileName );
SMESH::SMESH_Mesh_var aMesh = createMesh();
- //string aFileName;
+
#ifdef WIN32
char bname[ _MAX_FNAME ];
_splitpath( theFileName, NULL, NULL, bname, NULL );
#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
// 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() ) {
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
// 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);
// 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,
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,
//=======================================================================
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();
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();
}
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
{
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
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
}
//=============================================================================
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");
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() );
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");
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;
aGroupDS->SMDSGroup().Add( elemIt->next() );
}
+ SMESH::SMESH_Group_var me = _this();
+
// Update Python script
- pd << "nbAdd = " << SMESH::SMESH_Group_var(_this()) << ".AddFrom( " << theSource << " )";
+ pd << "nbAdd = " << me << ".AddFrom( " << theSource << " )";
- if ( prevNb != Size() )
+ if ( prevNb != Size() ) {
+ SMESH_Gen_i* aGen = GetMeshServant()->GetGen();
+ aGen->UpdateGroupIcon(me);
Modified(); // notify dependent Filter with FT_BelongToMeshGroup criterion
+ }
return Size() - prevNb;
}
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 <<" )";
}
if ( SMESHDS_GroupOnFilter* grDS = dynamic_cast< SMESHDS_GroupOnFilter*>( GetGroupDS() ))
grDS->SetPredicate( GetPredicate( myFilter )); // group resets its cache
}
-
resGroupDS->SMDSGroup().Add( e );
}
}
+
+ GetGen()->UpdateGroupIcon(aResGrp);
+
// Update Python script
pyDump << aResGrp << " = " << SMESH::SMESH_Mesh_var(_this()) << ".IntersectGroups( "
<< theGroup1 << ", " << theGroup2 << ", '" << theName << "')";
resGroupDS->SMDSGroup().Add( e );
}
+ GetGen()->UpdateGroupIcon(aResGrp);
+
// Update Python script
pyDump << aResGrp << " = " << SMESH::SMESH_Mesh_var( _this() )
<< ".IntersectListOfGroups( " << theGroups << ", '" << theName << "' )";
resGroupDS->SMDSGroup().Add( e );
}
}
+
+ GetGen()->UpdateGroupIcon(aResGrp);
+
// Update Python script
pyDump << aResGrp << " = " << SMESH::SMESH_Mesh_var(_this()) << ".CutGroups( "
<< theGroup1 << ", " << theGroup2 << ", '" << theName << "')";
resGroupDS->SMDSGroup().Add( e );
}
+ GetGen()->UpdateGroupIcon(aResGrp);
+
// Update Python script
pyDump << aResGrp << " = " << SMESH::SMESH_Mesh_var( _this() )
<< ".CutListOfGroups( " << theMainGroups << ", "
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();