+ updateViewer();
+}
+
+
+void XGUI_Displayer::clearSelected()
+{
+ Handle(AIS_InteractiveContext) aContext = AISContext();
+ if (aContext) {
+ aContext->UnhilightCurrents(false);
+ aContext->ClearSelected();
+ }
+}
+
+void XGUI_Displayer::eraseAll(const bool isUpdateViewer)
+{
+ Handle(AIS_InteractiveContext) ic = AISContext();
+ if (ic.IsNull())
+ return;
+
+ ResultToAISMap::iterator aIt;
+ for (aIt = myResult2AISObjectMap.begin(); aIt != myResult2AISObjectMap.end(); aIt++) {
+ // erase an object
+ AISObjectPtr aAISObj = (*aIt).second;
+ Handle(AIS_InteractiveObject) anIO = aAISObj->impl<Handle(AIS_InteractiveObject)>();
+ if (!anIO.IsNull())
+ ic->Remove(anIO, false);
+ }
+ myResult2AISObjectMap.clear();
+ if (isUpdateViewer)
+ updateViewer();
+ }
+
+void XGUI_Displayer::eraseDeletedResults(const bool isUpdateViewer)
+{
+ Handle(AIS_InteractiveContext) aContext = AISContext();
+ if (aContext.IsNull())
+ return;
+
+ ResultToAISMap::const_iterator aFIt = myResult2AISObjectMap.begin(), aFLast =
+ myResult2AISObjectMap.end();
+ std::list<ObjectPtr> aRemoved;
+ for (; aFIt != aFLast; aFIt++) {
+ ObjectPtr aFeature = (*aFIt).first;
+ if (!aFeature || !aFeature->data() || !aFeature->data()->isValid()) {
+ AISObjectPtr anObj = (*aFIt).second;
+ if (!anObj)
+ continue;
+ Handle(AIS_InteractiveObject) anAIS = anObj->impl<Handle(AIS_InteractiveObject)>();
+ if (!anAIS.IsNull()) {
+ aContext->Remove(anAIS, false);
+ aRemoved.push_back(aFeature);
+ }
+ }
+ }
+ std::list<ObjectPtr>::const_iterator anIt = aRemoved.begin(), aLast = aRemoved.end();
+ for (; anIt != aLast; anIt++) {
+ myResult2AISObjectMap.erase(myResult2AISObjectMap.find(*anIt));
+ }
+
+ if (isUpdateViewer)
+ updateViewer();
+}
+
+void XGUI_Displayer::openLocalContext()
+{
+ Handle(AIS_InteractiveContext) aContext = AISContext();
+ if (aContext.IsNull())
+ return;
+ // Open local context if there is no one
+ if (!aContext->HasOpenedContext()) {
+ aContext->ClearCurrents(false);
+ //aContext->OpenLocalContext(false/*use displayed objects*/, true/*allow shape decomposition*/);
+ aContext->OpenLocalContext();
+ aContext->NotUseDisplayedObjects();
+ }
+}
+
+void XGUI_Displayer::closeLocalContexts(const bool isUpdateViewer)
+{
+ AISContext()->ClearSelected(false);
+ closeAllContexts(true);
+}
+
+AISObjectPtr XGUI_Displayer::getAISObject(ObjectPtr theObject) const
+{
+ AISObjectPtr anIO;
+ if (myResult2AISObjectMap.find(theObject) != myResult2AISObjectMap.end())
+ anIO = (myResult2AISObjectMap.find(theObject))->second;
+ return anIO;
+}
+
+ObjectPtr XGUI_Displayer::getObject(const AISObjectPtr& theIO) const
+{
+ Handle(AIS_InteractiveObject) aRefAIS = theIO->impl<Handle(AIS_InteractiveObject)>();
+ return getObject(aRefAIS);
+}
+
+ObjectPtr XGUI_Displayer::getObject(const Handle(AIS_InteractiveObject)& theIO) const
+{
+ ObjectPtr aFeature;
+ ResultToAISMap::const_iterator aFIt = myResult2AISObjectMap.begin(), aFLast =
+ myResult2AISObjectMap.end();
+ for (; aFIt != aFLast && !aFeature; aFIt++) {
+ AISObjectPtr anObj = (*aFIt).second;
+ if (!anObj)
+ continue;
+ Handle(AIS_InteractiveObject) anAIS = anObj->impl<Handle(AIS_InteractiveObject)>();
+ if (anAIS != theIO)
+ continue;
+ aFeature = (*aFIt).first;
+ }
+ return aFeature;