]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
NPAL17269: Performance pb. when creating a group with GUI.
authorjfa <jfa@opencascade.com>
Fri, 19 Oct 2007 12:18:46 +0000 (12:18 +0000)
committerjfa <jfa@opencascade.com>
Fri, 19 Oct 2007 12:18:46 +0000 (12:18 +0000)
src/GEOMGUI/GEOMGUI_OCCSelector.cxx
src/GroupGUI/GroupGUI_GroupDlg.cxx

index 025ef33760f90f3ff66cf39c765f647e7a6dd833..0cd04c86fea0af0cec87e27e5838f835d8ca786b 100644 (file)
@@ -333,8 +333,10 @@ void GEOMGUI_OCCSelector::setSelection( const SUIT_DataOwnerPtrList& aList )
       ic->AddOrRemoveSelected( Handle(AIS_InteractiveObject)::DownCast(owner->Selectable()), false );
   }
   ic->SetAutomaticHilight(isAutoHilight); //Bug 17269: restore mode
-  ic->HilightSelected(/*updateviewer*/Standard_True);
-  //vw->update();
+  if (n < 3000)
+    ic->HilightSelected(/*updateviewer*/Standard_True);
+  else
+    vw->update();
 
   // fill extra selected
   mySelectedExternals.clear();
index 45a98586b90722e1e6163b26cca003e0e3053083..d2fa4198ae2b7cb829090f1e44ac112cec7ad1c9 100644 (file)
@@ -313,14 +313,16 @@ void GroupGUI_GroupDlg::SelectionIntoArgument()
 
     TColStd_IndexedMapOfInteger aMapIndex;
 
-    if ( IObjectCount() == 1 ) {
-      Standard_Boolean aResult = Standard_False;
-      GEOM::GEOM_Object_var anObj =
-        GEOMBase::ConvertIOinGEOMObject( firstIObject(), aResult );
-
-      if ( aResult && !anObj->_is_nil() )
-        ((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->
-          selectionMgr()->GetIndexes( firstIObject(), aMapIndex );
+    SALOME_ListIO aSelIOs;
+    SalomeApp_Application* app = myGeomGUI->getApp();
+    if (app) {
+      LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
+      if (aSelMgr) {
+        QMap<QString, TColStd_IndexedMapOfInteger> aMap;
+        aSelMgr->selectedSubOwners(aMap);
+        if (aMap.size() == 1)
+          aMapIndex = aMap.begin().data();
+      }
     }
 
     // try to find out and process the object browser selection
@@ -438,14 +440,16 @@ void GroupGUI_GroupDlg::add()
 
   TColStd_IndexedMapOfInteger aMapIndex;
 
-  if ( IObjectCount() == 1 ) {
-    Standard_Boolean aResult = Standard_False;
-    GEOM::GEOM_Object_var anObj =
-      GEOMBase::ConvertIOinGEOMObject( firstIObject(), aResult );
-
-    if ( aResult && !anObj->_is_nil() )
-      ((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->
-        selectionMgr()->GetIndexes( firstIObject(), aMapIndex );
+  SALOME_ListIO aSelIOs;
+  SalomeApp_Application* app = myGeomGUI->getApp();
+  if (app) {
+    LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
+    if (aSelMgr) {
+      QMap<QString, TColStd_IndexedMapOfInteger> aMap;
+      aSelMgr->selectedSubOwners(aMap);
+      if (aMap.size() == 1)
+        aMapIndex = aMap.begin().data();
+    }
   }
 
   // try to find out and process the object browser selection
@@ -595,20 +599,7 @@ void GroupGUI_GroupDlg::updateState()
   if (app) {
     LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
     if (aSelMgr) {
-      /*
-      aSelMgr->selectedObjects(aSelIOs);
-
-      if ( aSelIOs.Extent() == 1 ) {
-        Standard_Boolean aResult = Standard_False;
-        GEOM::GEOM_Object_var anObj =
-          GEOMBase::ConvertIOinGEOMObject( aSelIOs.First(), aResult );
-
-        if ( aResult && !anObj->_is_nil() )
-          aSelMgr->GetIndexes( aSelIOs.First(), aMapIndex );
-      }
-      */
       QMap<QString, TColStd_IndexedMapOfInteger> aMap;
-      //MapEntryOfMapOfInteger& aMap;
       aSelMgr->selectedSubOwners(aMap);
       if (aMap.size() == 1)
         aMapIndex = aMap.begin().data();
@@ -710,18 +701,27 @@ void GroupGUI_GroupDlg::highlightSubShapes()
 
   myBusy = true;
 
-  for ( int ii = 0, nn = myIdList->count(); ii < nn; ii++ )
+  int ii = 0, nn = myIdList->count();
+  for ( ; ii < nn; ii++ )
     if ( myIdList->isSelected( ii ) )
       anIds.Add( myIdList->item( ii )->text().toInt() );
 
   SalomeApp_Application* app = myGeomGUI->getApp();
   LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
   aSelMgr->clearSelected();
+  //if (nn < 3000) aSelMgr->AddOrRemoveIndex(aSh->getIO(), anIds, false);
   aSelMgr->AddOrRemoveIndex(aSh->getIO(), anIds, false);
 
   myBusy = false;
 
-  updateState();
+  //updateState();
+  if (nn < 3000) {
+    updateState();
+  }
+  else {
+    myAddBtn->setEnabled( true );
+    myRemBtn->setEnabled( true );
+  }
 }
 
 //=================================================================================