]> OCCT Git - occt-copy.git/commitdiff
0026628: Button Erase (Delete where erase algorythm is used) works incorrect
authorisk <isk@opencascade.com>
Thu, 10 Sep 2015 14:26:45 +0000 (17:26 +0300)
committerabv <abv@opencascade.com>
Fri, 11 Sep 2015 16:04:58 +0000 (19:04 +0300)
Update AIS_InteractiveContext::EraseSelected() method.

Fix HLR sample

Fix samples.

samples/CSharp/OCCTProxy/OCCTProxy.cpp
samples/CSharp/OCCTProxy_D3D/OCCTProxyD3D.cpp
samples/mfc/standard/08_HLR/src/HLRDoc.cpp
samples/mfc/standard/Common/OCC_3dBaseDoc.cpp
samples/qt/Common/src/DocumentCommon.cxx
src/AIS/AIS_InteractiveContext.cxx

index e7bc2a6e0b0ec583a4f43741a806e7b05a18e075..cd2c8cb28742b491eebe5dcd85bce96303734902 100644 (file)
@@ -590,10 +590,8 @@ public:
     {
       return;
     }
-    for(myAISContext()->InitCurrent();myAISContext()->MoreCurrent();myAISContext()->NextCurrent())
-    {
-        myAISContext()->Erase(myAISContext()->Current(),Standard_True);
-    }
+
+    myAISContext()->EraseSelected (Standard_True);
     myAISContext()->ClearCurrents();
   }
 
index 98da86ee096038713601ccf4fd4eaadfda7f49fc..4659452d3570f08dccf21a42c47fa46bf51de0bf 100644 (file)
@@ -642,10 +642,8 @@ public:
     {
       return;
     }
-    for(myAISContext()->InitCurrent(); myAISContext()->MoreCurrent(); myAISContext()->NextCurrent())
-    {
-      myAISContext()->Erase (myAISContext()->Current(), Standard_True);
-    }
+
+    myAISContext()->EraseSelected (Standard_True);
     myAISContext()->ClearCurrents();
   }
 
index eaddf0aea89dc9ea1ca512ce237c152aeaab1f90..3544beeb616f57f6be3b6f161f03a11273617889 100755 (executable)
@@ -188,14 +188,17 @@ void CHLRDoc::Fit()
 void CHLRDoc::OnObjectErase()
 {
   Standard_Boolean toUpdateDisplayable = Standard_False;
-  for (myAISContext->InitCurrent(); myAISContext->MoreCurrent(); myAISContext->NextCurrent())
+  myAISContext->InitCurrent();
+  while (myAISContext->MoreCurrent())
   {
-    myAISContext->Erase (myAISContext->Current(), Standard_True);
     if (myAISContext->Current()->Type() == AIS_KOI_Shape && myCSelectionDialogIsCreated)
     {
       myCSelectionDialog->DiplayableShape()->Remove (Handle(AIS_Shape)::DownCast (myAISContext->Current())->Shape());
       toUpdateDisplayable = Standard_True;
     }
+
+    myAISContext->Erase (myAISContext->Current(), Standard_True);
+    myAISContext->InitCurrent();
   }
 
   myAISContext->ClearCurrents();
index 6e225fd6e85d36d06113a134951d1b9a088596da..0655c57d37ea1fbd6cd967869bc1e5651bdcb7bd 100755 (executable)
@@ -293,10 +293,7 @@ void OCC_3dBaseDoc::OnUpdateObjectColor(CCmdUI* pCmdUI)
 
 void OCC_3dBaseDoc::OnObjectErase() 
 {
-  for (myAISContext->InitCurrent(); myAISContext->MoreCurrent(); myAISContext->NextCurrent())
-  {
-    myAISContext->Erase (myAISContext->Current(), Standard_True);
-  }
+  myAISContext->EraseSelected();
   myAISContext->ClearCurrents();
 }
 void OCC_3dBaseDoc::OnUpdateObjectErase(CCmdUI* pCmdUI) 
index 343c21db99a99f4fb0c2cc842dd54dd48f9da8b5..1c567615dff1a2646f07476f9eb95caf7d3bba8b 100755 (executable)
@@ -234,8 +234,7 @@ void DocumentCommon::onTransparency()
 
 void DocumentCommon::onDelete()
 {
-    for ( myContext->InitCurrent(); myContext->MoreCurrent(); myContext->NextCurrent() )
-        myContext->Erase( myContext->Current(), false);
+    myContext->EraseSelected (Standard_False);
     myContext->ClearSelected();
     getApplication()->onSelectionChanged();
 }
index 46b6050525c069dc0922f9c4233582ea503c4e6b..fd68376bc39b3a2fe99fc04d819b66fc8dee3c58 100644 (file)
@@ -701,11 +701,17 @@ void AIS_InteractiveContext::EraseSelected (const Standard_Boolean theToUpdateVi
 
   Standard_Boolean      isFound  = Standard_False;
   Handle(AIS_Selection) aSelIter = AIS_Selection::Selection(myCurrentName.ToCString());
-  for (aSelIter->Init(); aSelIter->More(); aSelIter->Next())
+
+  aSelIter->Init();
+  while (aSelIter->More())
   {
-    Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (aSelIter->Value());
+    Handle(SelectMgr_EntityOwner) anOwner = Handle(SelectMgr_EntityOwner)::DownCast (aSelIter->Value());
+    Handle(AIS_InteractiveObject) anObj   = Handle(AIS_InteractiveObject)::DownCast (anOwner->Selectable());
+
     Erase (anObj, Standard_False);
     isFound = Standard_True;
+
+    aSelIter->Init();
   }
 
   if (isFound && theToUpdateViewer)