// method call. As result it is necessary to rehighligt it with mySelectionColor.
if (!myLastPicked.IsNull() && myLastPicked->HasSelectable())
{
- myMainPM->ClearImmediateDraw();
- if (!myLastPicked->IsSelected())
- {
- myLastPicked->Unhilight (myMainPM);
- toUpdateViewer = Standard_True;
- }
- else if (myToHilightSelected)
- {
- highlightSelected (aNewPickedOwner);
- toUpdateViewer = Standard_True;
- }
+ clearDynamicHighlight();
+ toUpdateViewer = Standard_True;
}
// initialize myLastPicked field with currently detected object
aStatus = AIS_SOD_Nothing;
if (!myLastPicked.IsNull() && myLastPicked->HasSelectable())
{
- myMainPM->ClearImmediateDraw();
- if (!myLastPicked->IsSelected())
- {
- if (myLastPicked->IsAutoHilight())
- {
- myLastPicked->Unhilight (myMainPM);
- }
- toUpdateViewer = Standard_True;
- }
- else if (myToHilightSelected)
- {
- highlightSelected (myLastPicked);
- toUpdateViewer = Standard_True;
- }
+ clearDynamicHighlight();
+ toUpdateViewer = Standard_True;
}
myLastinMain.Nullify();
}
}
- myMainPM->ClearImmediateDraw();
+ clearDynamicHighlight();
if (myWasLastMain && !myLastinMain.IsNull())
{
- if(!myLastinMain->IsSelected())
+ if (!myLastinMain->IsSelected() || myLastinMain->IsForcedHilight())
{
SetSelected (myLastinMain, Standard_False);
if(toUpdateViewer)
}
}
- myMainPM->ClearImmediateDraw();
+ clearDynamicHighlight();
if (myWasLastMain && !myLastinMain.IsNull())
{
AddOrRemoveSelected (myLastinMain, toUpdateViewer);
}
// In case of selection without using local context
- myMainPM->ClearImmediateDraw();
+ clearDynamicHighlight();
AIS_MapOfObjSelectedOwners anObjOwnerMap;
for (AIS_NListOfEntityOwner::Iterator aSelIter (mySelection->Objects()); aSelIter.More(); aSelIter.Next())
{
unhighlightSelected();
mySelection->Clear();
- myMainPM->ClearImmediateDraw();
+ clearDynamicHighlight();
if (theToUpdateViewer)
UpdateCurrentViewer();
const Handle(AIS_InteractiveObject) anObject = Handle(AIS_InteractiveObject)::DownCast (theOwner->Selectable());
const Handle(Prs3d_Drawer)& anObjSelStyle = getSelStyle (anObject, theOwner);
- if (NbSelected() == 1 && theOwner->IsSelected())
+ if (NbSelected() == 1 && theOwner->IsSelected() && !theOwner->IsForcedHilight())
{
Handle(Prs3d_Drawer) aCustomStyle;
if (HighlightStyle (theOwner, aCustomStyle))
//! Method which clear all selected owners belonging
//! to this selectable object ( for fast presentation draw )
Standard_EXPORT virtual void ClearSelected();
-
+
+ //! Method that needs to be implemented when the object
+ //! manages selection and dynamic highlighting on its own.
+ //! Clears or invalidates dynamic highlight presentation.
+ //! By default it clears immediate draw of given presentation
+ //! manager.
+ Standard_EXPORT virtual void ClearDynamicHighlight (const Handle(PrsMgr_PresentationManager3d)& theMgr);
+
//! Method which hilight an owner belonging to
//! this selectable object ( for fast presentation draw )
Standard_EXPORT virtual void HilightOwnerWithColor (const Handle(PrsMgr_PresentationManager3d)& thePM,