}
}
+//================================================================================
+/*!
+ * \brief Return true if mesh has ICON_SMESH_TREE_GEOM_MODIF icon
+ */
+//================================================================================
+
+bool SMESH_Gen_i::isGeomModifIcon( SMESH::SMESH_Mesh_ptr mesh )
+{
+ SALOMEDS::SObject_wrap so = ObjectToSObject( mesh );
+ SALOMEDS::GenericAttribute_wrap attr;
+ if ( ! so->_is_nil() && so->FindAttribute( attr.inout(), "AttributePixMap" ))
+ {
+ SALOMEDS::AttributePixMap_wrap pm = attr;
+ CORBA::String_var ico = pm->GetPixMap();
+ return ( strcmp( ico.in(), "ICON_SMESH_TREE_GEOM_MODIF" ) == 0 );
+ }
+ return false;
+}
+
+//=================================================================================
+// function : hasObjectInfo()
+// purpose : shows if module provides information for its objects
+//=================================================================================
+
+bool SMESH_Gen_i::hasObjectInfo()
+{
+ return true;
+}
+
+//=================================================================================
+// function : getObjectInfo()
+// purpose : returns an information for a given object by its entry
+//=================================================================================
+
+char* SMESH_Gen_i::getObjectInfo( const char* entry )
+{
+ // for a mesh with icon == ICON_SMESH_TREE_GEOM_MODIF show a warning;
+ // for the rest, "module 'SMESH', ID=0:1:2:*"
+
+ SMESH_Comment txt;
+
+ SALOMEDS::SObject_wrap so = getStudyServant()->FindObjectID( entry );
+ CORBA::Object_var obj = SObjectToObject( so );
+ SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( obj );
+ if ( isGeomModifIcon( mesh ))
+ {
+ txt << "The geometry was changed and the mesh needs to be recomputed";
+ }
+
+ if ( txt.empty() )
+ {
+ CORBA::String_var compType = ComponentDataType();
+ txt << "module '" << compType << "', ID=" << entry;
+ }
+ return CORBA::string_dup( txt );
+}
+
//=============================================================================
/*!
* SMESH_Gen_i::GetStudyContext
SMESH_Mesh_i* meshServant = SMESH::DownCast<SMESH_Mesh_i*>( theMesh );
ASSERT( meshServant );
if ( meshServant ) {
- meshServant->Load();
+ if ( isGeomModifIcon( theMesh ))
+ meshServant->Clear();
+ else
+ meshServant->Load();
// NPAL16168: "geometrical group edition from a submesh don't modify mesh computation"
meshServant->CheckGeomModif();
// get local TopoDS_Shape
GEOM::GEOM_Object_wrap geom = FindGeometryByMeshElement(theMesh, theElementID);
if ( !geom->_is_nil() ) {
GEOM::GEOM_Object_var mainShape = theMesh->GetShapeToMesh();
- GEOM::GEOM_Gen_ptr geomGen = GetGeomEngine( geom );
+ GEOM::GEOM_Gen_var geomGen = GetGeomEngine( geom );
// try to find the corresponding SObject
SALOMEDS::SObject_wrap SObj = ObjectToSObject( geom.in() );
}
}
}
- if ( SObj->_is_nil() ) // publish a new subshape
+ if ( SObj->_is_nil() && !geomGen->_is_nil() ) // publish a new subshape
SObj = geomGen->AddInStudy( geom, theGeomName, mainShape );
// return only published geometry
THROW_SALOME_CORBA_EXCEPTION( "bad Mesh reference", SALOME::BAD_PARAM );
GEOM::GEOM_Object_var mainShape = theMesh->GetShapeToMesh();
- GEOM::GEOM_Gen_ptr geomGen = GetGeomEngine( mainShape );
+ GEOM::GEOM_Gen_var geomGen = GetGeomEngine( mainShape );
// get a core mesh DS
SMESH_Mesh_i* meshServant = SMESH::DownCast<SMESH_Mesh_i*>( theMesh );
}
if ( !it->_is_nil() ) {
for ( it->InitEx(true); it->More(); it->Next() ) {
- SALOMEDS::SObject_wrap so = it->Value();
+ SALOMEDS::SObject_wrap so = it->Value();
CORBA::Object_var obj = SObjectToObject( so );
GEOM::GEOM_Object_var subGeom = GEOM::GEOM_Object::_narrow( obj );
if ( !subGeom->_is_nil() ) {
aDataset->WriteOnDisk( &meshPersistentId );
aDataset->CloseOnDisk();
+ // Store SMESH_Mesh_i::_mainShapeTick
+ int shapeTick = myImpl->MainShapeTick();
+ aSize[ 0 ] = 1;
+ aDataset = new HDFdataset( "shapeTick", aTopGroup, HDF_INT32, aSize, 1 );
+ aDataset->CreateOnDisk();
+ aDataset->WriteOnDisk( &shapeTick );
+ aDataset->CloseOnDisk();
+
// write reference on a shape if exists
SALOMEDS::SObject_wrap myRef;
bool shapeRefFound = false;
}
// issue 20918. Restore Persistent Id of SMESHDS_Mesh
- if( aTopGroup->ExistInternalObject( "meshPersistentId" ) )
+ if ( aTopGroup->ExistInternalObject( "meshPersistentId" ) )
{
aDataset = new HDFdataset( "meshPersistentId", aTopGroup );
aDataset->OpenOnDisk();
delete [] meshPersistentId;
}
+ // Restore SMESH_Mesh_i::_mainShapeTick
+ if ( aTopGroup->ExistInternalObject( "shapeTick" ))
+ {
+ aDataset = new HDFdataset( "shapeTick", aTopGroup );
+ aDataset->OpenOnDisk();
+ int* shapeTick = & myNewMeshImpl->MainShapeTick();
+ aDataset->ReadFromDisk( shapeTick );
+ aDataset->CloseOnDisk();
+ }
+
// Restore file info
if ( aTopGroup->ExistInternalObject( "file info" ))
{