]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
Bug IPAL20039 Crash when Edit Group in mesh with invalid reference (deleted object).
authordmv <dmv@opencascade.com>
Wed, 2 Jul 2008 14:00:03 +0000 (14:00 +0000)
committerdmv <dmv@opencascade.com>
Wed, 2 Jul 2008 14:00:03 +0000 (14:00 +0000)
src/GEOMToolsGUI/GEOMToolsGUI.cxx

index d94543ad1e48ce2cf2188ff3f8c4eef096e4e4cb..4718b347257422447d7b13a1a83d43ee9280712a 100644 (file)
@@ -206,17 +206,35 @@ static bool inUse( _PTR(Study) study, const QString& component, const QMap<QStri
   // collect all GEOM objects being deleted
   QMap<QString, GEOM::GEOM_Object_var> gobjects;
   QMap<QString, QString>::ConstIterator oit;
+  list<_PTR(SObject)> aSelectedSO;
   for ( oit = objects.begin(); oit != objects.end(); ++oit ) {
     _PTR(SObject) so = study->FindObjectID( oit.key().latin1() );
     if ( !so )
       continue;
+    aSelectedSO.push_back(so);
     CORBA::Object_var corbaObj_rem = GeometryGUI::ClientSObjectToObject( so );
     GEOM::GEOM_Object_var geomObj_rem = GEOM::GEOM_Object::_narrow( corbaObj_rem );
     if( CORBA::is_nil( geomObj_rem ) ) 
       continue;
     gobjects.insert( oit.key(), geomObj_rem );
   }
-  
+
+  // Search References with other Modules
+  list< _PTR(SObject) >::iterator itSO = aSelectedSO.begin();
+  for ( ; itSO != aSelectedSO.end(); ++itSO ) {
+    std::vector<_PTR(SObject)> aReferences = study->FindDependances( *itSO  );    
+    int aRefLength = aReferences.size();
+    if (aRefLength) {
+      for (int i = 0; i < aRefLength; i++) {
+       _PTR(SObject) firstSO( aReferences[i] );
+       _PTR(SComponent) aComponent = firstSO->GetFatherComponent();
+       QString type = aComponent->ComponentDataType();
+       if ( type == "SMESH" )
+         return true;
+      }
+    }
+  }
+
   // browse through all GEOM data tree
   _PTR(ChildIterator) it ( study->NewChildIterator( comp ) );
   for ( it->InitEx( true ); it->More(); it->Next() ) {