//#define DEBUG_ACTIVATE
//#define DEBUG_FEATURE_REDISPLAY
//#define DEBUG_SELECTION_FILTERS
+//#define DEBUG_USE_CLEAR_OUTDATED_SELECTION
// Workaround for bug #25637
void displayedObjects(const Handle(AIS_InteractiveContext)& theAIS, AIS_ListOfInteractive& theList)
if (!aShapePrs.IsNull()) {
std::shared_ptr<GeomAPI_Shape> aShapePtr = ModelAPI_Tools::shape(aResult);
if (aShapePtr.get()) {
- const TopoDS_Shape& aShape = aShapePrs->Shape();
- std::shared_ptr<GeomAPI_Shape> anAISShapePtr(new GeomAPI_Shape());
- anAISShapePtr->setImpl(new TopoDS_Shape(aShape));
- isEqualShapes = aShapePtr->isEqual(anAISShapePtr);
+ const TopoDS_Shape& aOldShape = aShapePrs->Shape();
+ isEqualShapes = aOldShape.IsEqual(aShapePtr->impl<TopoDS_Shape>());
}
}
}
AISObjectPtr anObj = myResult2AISObjectMap[theObject];
Handle(AIS_InteractiveObject) anAIS = anObj->impl<Handle(AIS_InteractiveObject)>();
aContext->Deactivate(anAIS);
+#ifdef DEBUG_USE_CLEAR_OUTDATED_SELECTION
+ aContext->LocalContext()->ClearOutdatedSelection(anAIS, true);
+ updateViewer();
+#endif
}
}
for(aLIt.Initialize(aPrsList); aLIt.More(); aLIt.Next()){
anAISIO = aLIt.Value();
aContext->Deactivate(anAISIO);
+#ifdef DEBUG_USE_CLEAR_OUTDATED_SELECTION
+ aContext->LocalContext()->ClearOutdatedSelection(anAISIO, true);
+ updateViewer();
+#endif
}
}
if (isVisible(aResult)) {
AISObjectPtr anObj = myResult2AISObjectMap[aResult];
Handle(AIS_InteractiveObject) anAIS = anObj->impl<Handle(AIS_InteractiveObject)>();
- if (!anAIS.IsNull())
- aContext->SetSelected(anAIS, false);
+ if (!anAIS.IsNull()) {
+ // The methods are replaced in order to provide multi-selection, e.g. restore selection
+ // by activating multi selector widget. It also gives an advantage that the multi
+ // selection in OB gives multi-selection in the viewer
+ //aContext->SetSelected(anAIS, false);
+ aContext->AddOrRemoveSelected(anAIS, false);
+ }
}
}
} else {
return aWasEnabled;
}
-void XGUI_Displayer::updateViewer()
+void XGUI_Displayer::updateViewer() const
{
Handle(AIS_InteractiveContext) aContext = AISContext();
if (!aContext.IsNull() && myEnableUpdateViewer)
closeLocalContexts(false);
}
aContext->SetDisplayMode(aAISIO, theMode, false);
+ // Redisplay in order to update new mode because it could be not computed before
+ aContext->Redisplay(aAISIO, false);
if (aCanBeShaded) {
openLocalContext();
activateObjects(myActiveSelectionModes);
aContext->ActivatedModes(theIO, aTColModes);
TColStd_ListIteratorOfListOfInteger itr( aTColModes );
QIntList aModesActivatedForIO;
+ //bool isDeactivated = false;
for (; itr.More(); itr.Next() ) {
Standard_Integer aMode = itr.Value();
if (!theModes.contains(aMode)) {
qDebug(QString("deactivate: %1").arg(aMode).toStdString().c_str());
#endif
aContext->Deactivate(theIO, aMode);
+ //isDeactivated = true;
}
else {
aModesActivatedForIO.append(aMode);
#endif
}
}
+#ifdef DEBUG_USE_CLEAR_OUTDATED_SELECTION
+ if (isDeactivated) {
+ aContext->LocalContext()->ClearOutdatedSelection(theIO, true);
+ updateViewer();
+ }
+#endif
// loading the interactive object allowing the decomposition
if (aTColModes.IsEmpty())
aContext->Load(theIO, -1, true);