]> OCCT Git - occt.git/commitdiff
Visualization - NCollection_DataMap::Find() exception from AIS_Selection::Select...
authorZernova Marina <36417100+mzernova@users.noreply.github.com>
Mon, 17 Feb 2025 15:52:24 +0000 (15:52 +0000)
committerGitHub <noreply@github.com>
Mon, 17 Feb 2025 15:52:24 +0000 (15:52 +0000)
Problem with NCollection_DataMap::Find() exception during multiple selection in OCC viewer.
Incorrect call is made from AIS_Selection::Select() method at line:
AIS_NListOfEntityOwner::Iterator aListIter = myResultMap.Find (theOwner);
Original issue: 0033742

src/AIS/AIS_Selection.cxx

index 874ba363bb9795fbb00def92ecece268cc392e53..039f3004caa8fc85ea56073c91284375bf674441 100644 (file)
@@ -65,8 +65,11 @@ AIS_SelectStatus AIS_Selection::Select(const Handle(SelectMgr_EntityOwner)& theO
   const Standard_Boolean wasSelected = theOwner->IsSelected();
   const Standard_Boolean toSelect    = theOwner->Select(theSelScheme, isDetected);
 
-  if (toSelect && !wasSelected)
+  if (!wasSelected || !myResultMap.IsBound(theOwner))
   {
+    if (!toSelect)
+      return AIS_SS_NotDone;
+
     AIS_NListOfEntityOwner::Iterator aListIter;
     myresult.Append(theOwner, aListIter);
     myResultMap.Bind(theOwner, aListIter);
@@ -74,11 +77,6 @@ AIS_SelectStatus AIS_Selection::Select(const Handle(SelectMgr_EntityOwner)& theO
     return AIS_SS_Added;
   }
 
-  if (!toSelect && !wasSelected)
-  {
-    return AIS_SS_NotDone;
-  }
-
   AIS_NListOfEntityOwner::Iterator aListIter = myResultMap.Find(theOwner);
   if (myIterator == aListIter)
   {