+ bool aContains = false;
+ QMap<int, ModuleBase_ViewerPrsPtr>::iterator aIt;
+ for (aIt = myItems.begin(); aIt != myItems.end(); aIt++) {
+ ModuleBase_ViewerPrsPtr aPrs = aIt.value();
+ if (aPrs->object() == theObject) {
+ aContains = true;
+ break;
+ }
+ }
+ if (aContains) {
+ ResultGroupPtr aResGroup;
+ FeaturePtr aGroupFeature;
+ std::map<ObjectPtr, TopoDS_ListOfShape> aObjectToShapes;
+ std::map<ObjectPtr, Handle(ModuleBase_ResultPrs)> aObjectToPrs;
+ std::set<ObjectPtr> aObjects;
+ std::set<int> aIdsToRem;
+
+ TopoDS_ListOfShape aHideShapes;
+ std::map<ObjectPtr, TopoDS_ListOfShape>::const_iterator aSIt;
+ for (aIt = myItems.begin(); aIt != myItems.end(); aIt++) {
+ ModuleBase_ViewerPrsPtr aPrs = aIt.value();
+ if (getGroup(aPrs, aResGroup, aGroupFeature)) {
+ getObjectsMapFromResult(aResGroup, aGroupFeature, aObjectToShapes, aObjectToPrs);
+ if (aResGroup == theObject) {
+ // If group is displayed it means that it has to be deleted from the Faces list and all
+ // corresponded faces have been restored
+ for (aSIt = aObjectToShapes.begin(); aSIt != aObjectToShapes.end(); aSIt++) {
+ TopoDS_ListOfShape aShapes = aSIt->second;
+ Handle(ModuleBase_ResultPrs) aResPrs = aObjectToPrs[aSIt->first];
+ TopoDS_ListOfShape aAlreadyHidden = aResPrs->hiddenSubShapes();
+ TopoDS_ListOfShape::Iterator aShPIt(aShapes);
+ for (; aShPIt.More(); aShPIt.Next()) {
+ if (aAlreadyHidden.Contains(aShPIt.Value()))
+ aAlreadyHidden.Remove(aShPIt.Value());
+ }
+ aResPrs->setSubShapeHidden(aAlreadyHidden);
+ aObjects.insert(aSIt->first);
+ }
+ aIdsToRem.insert(aIt.key());
+ }
+ else {
+ std::map<ObjectPtr, Handle(ModuleBase_ResultPrs)>::iterator aPIt =
+ aObjectToPrs.find(theObject);
+ if (aPIt != aObjectToPrs.end()) {
+ ObjectPtr aObj = aPIt->first;
+ if (aObj == theObject) {
+ TopoDS_ListOfShape aShapes = aObjectToShapes[aObj];
+ aHideShapes.Append(aShapes);
+ aObjects.insert(aObj);
+ }
+ }
+ }
+ }
+ else {
+ if (aPrs->object() == theObject) {
+ TopoDS_Shape aShape = aPrs->shape()->impl<TopoDS_Shape>();
+ if (!aShape.IsNull())
+ aHideShapes.Append(aShape);
+ aPrs->setInteractive(theAIS->impl<Handle(AIS_InteractiveObject)>());
+ }
+ }
+ }
+ double aTransp = transparency();
+ if (aHideShapes.Size() > 0) {
+ Handle(ModuleBase_ResultPrs) aResultPrs = Handle(ModuleBase_ResultPrs)::DownCast(
+ theAIS->impl<Handle(AIS_InteractiveObject)>());
+ if (!aResultPrs.IsNull()) {
+ aResultPrs->setSubShapeHidden(aHideShapes);
+ aResultPrs->setHiddenSubShapeTransparency(aTransp);
+ aObjects.insert(theObject);
+ }
+ }
+ removeItems(aIdsToRem);
+ myWorkshop->selector()->clearSelection();
+ if (redisplayObjects(aObjects))
+ QTimer::singleShot(50, this, SLOT(flushRedisplay()));
+ }