//purpose :
//=======================================================================
void AIS_InteractiveContext::highlightWithColor (const Handle(SelectMgr_EntityOwner)& theOwner,
- const Quantity_NameOfColor theColor,
const Handle(V3d_Viewer)& theViewer)
{
const Handle(AIS_InteractiveObject) anObj =
const Standard_Integer aHiMode = anObj->HasHilightMode() ? anObj->HilightMode() : 0;
myMainPM->BeginImmediateDraw();
- theOwner->HilightWithColor (myMainPM, theColor, aHiMode);
+ theOwner->HilightWithColor (myMainPM, getHiStyle (anObj), aHiMode);
myMainPM->EndImmediateDraw (theViewer.IsNull() ? myMainVwr : theViewer);
}
//function : highlightSelected
//purpose :
//=======================================================================
-void AIS_InteractiveContext::highlightSelected (const Handle(SelectMgr_EntityOwner)& theOwner,
- const Quantity_NameOfColor theSelColor)
+void AIS_InteractiveContext::highlightSelected (const Handle(SelectMgr_EntityOwner)& theOwner)
{
const Handle(AIS_InteractiveObject) anObj =
Handle(AIS_InteractiveObject)::DownCast (theOwner->Selectable());
SelectMgr_SequenceOfOwner aSeq;
for (AIS_NListOfEntityOwner::Iterator aSelIter (mySelection->Objects()); aSelIter.More(); aSelIter.Next())
{
- if (aSelIter.Value()->Selectable() == anObj)
+ if (aSelIter.Value()->IsSameSelectable (anObj))
{
aSeq.Append (aSelIter.Value());
}
}
else
{
- theOwner->HilightWithColor (myMainPM, theSelColor, aHiMode);
+ theOwner->HilightWithColor (myMainPM, getSelStyle (anObj), aHiMode);
+ }
+}
+
+//=======================================================================
+//function : highlightGlobal
+//purpose :
+//=======================================================================
+void AIS_InteractiveContext::highlightGlobal (const Handle(AIS_InteractiveObject)& theObj,
+ const Handle(Graphic3d_HighlightStyle)& theStyle,
+ const Standard_Integer theMode) const
+{
+ if (theObj.IsNull())
+ return;
+ const Handle(SelectMgr_EntityOwner)& aGlobOwner = theObj->GlobalSelOwner();
+
+ if (aGlobOwner.IsNull())
+ {
+ myMainPM->Color (theObj, theStyle, theMode);
+ return;
+ }
+
+ if (!aGlobOwner->IsAutoHilight())
+ {
+ SelectMgr_SequenceOfOwner aSeq;
+ for (AIS_NListOfEntityOwner::Iterator aSelIter (mySelection->Objects()); aSelIter.More(); aSelIter.Next())
+ {
+ if (aSelIter.Value()->IsSameSelectable (theObj))
+ {
+ aSeq.Append (aSelIter.Value());
+ }
+ }
+ theObj->HilightSelected (myMainPM, aSeq);
+ }
+ else
+ {
+ aGlobOwner->HilightWithColor (myMainPM, theStyle, theMode);
}
}
{
if (myObjects.IsBound (anInteractive) && myObjects (anInteractive)->IsSubIntensityOn())
{
- anOwner->HilightWithColor (myMainPM, mySubIntensity, aHiMode);
+ highlightWithSubintensity (anOwner, aHiMode);
}
}
}
}
}
+//=======================================================================
+//function : unhighlightGlobal
+//purpose :
+//=======================================================================
+void AIS_InteractiveContext::unhighlightGlobal (const Handle(AIS_InteractiveObject)& theObj,
+ const Standard_Integer theMode) const
+{
+ if (theObj.IsNull())
+ return;
+ const Handle(SelectMgr_EntityOwner)& aGlobOwner = theObj->GlobalSelOwner();
+
+ if (aGlobOwner.IsNull())
+ {
+ myMainPM->Unhighlight (theObj, theMode);
+ return;
+ }
+
+ if (aGlobOwner->IsAutoHilight())
+ {
+ aGlobOwner->Unhilight (myMainPM, theMode);
+ }
+ else
+ {
+ myMainPM->Unhighlight (theObj, theMode);
+ theObj->ClearSelected();
+ }
+}
+
+//=======================================================================
+//function : turnOnSubintensity
+//purpose :
+//=======================================================================
+void AIS_InteractiveContext::turnOnSubintensity (const Handle(AIS_InteractiveObject)& theObject,
+ const Standard_Integer theDispMode,
+ const Standard_Boolean theIsDisplayedOnly) const
+{
+ // the only differ with selection highlight is color, so
+ // sync transparency values
+ mySubintStyle->SetTransparency (mySelStyle->Transparency());
+
+ if (theObject.IsNull())
+ {
+ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjsIter (myObjects); anObjsIter.More(); anObjsIter.Next())
+ {
+ const Handle(AIS_GlobalStatus)& aStatus = anObjsIter.Value();
+ if (aStatus->GraphicStatus() != AIS_DS_Displayed && theIsDisplayedOnly)
+ continue;
+
+ aStatus->SubIntensityOn();
+
+ if (theDispMode == -1)
+ {
+ myMainPM->Color (anObjsIter.Key(), mySubintStyle, aStatus->DisplayMode());
+ }
+ else
+ myMainPM->Color (anObjsIter.Key(), mySubintStyle, theDispMode);
+ }
+ }
+ else
+ {
+ Handle(AIS_GlobalStatus) aStatus;
+ if (!myObjects.Find (theObject, aStatus))
+ return;
+
+ if (aStatus->GraphicStatus() != AIS_DS_Displayed && theIsDisplayedOnly)
+ return;
+
+ aStatus->SubIntensityOn();
+
+ if (theDispMode == -1)
+ {
+ myMainPM->Color (theObject, mySubintStyle, aStatus->DisplayMode());
+ }
+ else
+ myMainPM->Color (theObject, mySubintStyle, theDispMode);
+ }
+}
+
+//=======================================================================
+//function : highlightWithSubintensity
+//purpose :
+//=======================================================================
+void AIS_InteractiveContext::highlightWithSubintensity (const Handle(AIS_InteractiveObject)& theObject,
+ const Standard_Integer theMode) const
+{
+ // the only differ with selection highlight is color, so
+ // sync transparency values
+ mySubintStyle->SetTransparency (mySelStyle->Transparency());
+
+ myMainPM->Color (theObject, mySubintStyle, theMode);
+}
+
+//=======================================================================
+//function : highlightWithSubintensity
+//purpose :
+//=======================================================================
+void AIS_InteractiveContext::highlightWithSubintensity (const Handle(SelectMgr_EntityOwner)& theOwner,
+ const Standard_Integer theMode) const
+{
+ // the only differ with selection highlight is color, so
+ // sync transparency values
+ mySubintStyle->SetTransparency (mySelStyle->Transparency());
+
+ theOwner->HilightWithColor (myMainPM, mySubintStyle, theMode);
+}
+
//=======================================================================
//function : MoveTo
//purpose :
}
else if (myToHilightSelected)
{
- highlightWithColor (aNewPickedOwner, mySelectionColor, theView->Viewer());
+ highlightSelected (aNewPickedOwner);
toUpdateViewer = Standard_True;
}
}
{
if (!myLastPicked->IsSelected() || myToHilightSelected)
{
- highlightWithColor (myLastPicked, myHilightColor, theView->Viewer());
+ highlightWithColor (myLastPicked, theView->Viewer());
toUpdateViewer = Standard_True;
}
}
else if (myToHilightSelected)
{
- highlightSelected (myLastPicked, mySelectionColor);
+ highlightSelected (myLastPicked);
toUpdateViewer = Standard_True;
}
}
{
const Handle(SelectMgr_EntityOwner) anOwner = aSelIter.Value();
const Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (anOwner->Selectable());
+ const Handle(Graphic3d_HighlightStyle)& anObjSelStyle = getSelStyle (anObj);
if (anOwner == anObj->GlobalSelOwner())
{
Handle(AIS_GlobalStatus)& aState = myObjects.ChangeFind (anObj);
aState->SetHilightStatus (Standard_True);
- aState->SetHilightColor (mySelectionColor);
+ aState->SetHilightStyle (anObjSelStyle);
}
anOwner->State (1);
if (!anOwner->IsAutoHilight())
else
{
const Standard_Integer aHiMode = anObj->HasHilightMode() ? anObj->HilightMode() : 0;
- anOwner->HilightWithColor (myMainPM, mySelectionColor, aHiMode);
+ anOwner->HilightWithColor (myMainPM, anObjSelStyle, aHiMode);
}
}
if (theObject->HasSelection (0))
return;
+ const Handle(Graphic3d_HighlightStyle)& anObjSelStyle =
+ getSelStyle (theObject);
+
if (NbSelected() == 1 && myObjects (theObject)->IsHilighted())
{
- Quantity_NameOfColor aHiCol;
- Standard_Boolean hasHiCol = Standard_False;
- if (IsHilighted (theObject, hasHiCol, aHiCol))
+ Handle(Graphic3d_HighlightStyle) aCustomStyle;
+ if (HighlightStyle (theObject, aCustomStyle))
{
- if (hasHiCol && aHiCol!= mySelectionColor)
+ if (!aCustomStyle.IsNull() && anObjSelStyle != aCustomStyle)
{
- HilightWithColor (theObject, mySelectionColor, theToUpdateViewer);
+ HilightWithColor (theObject, anObjSelStyle, theToUpdateViewer);
}
}
return;
{
Handle(AIS_GlobalStatus)& aState = myObjects.ChangeFind (theObject);
aState->SetHilightStatus (Standard_True);
- aState->SetHilightColor (mySelectionColor);
+ aState->SetHilightStyle (anObjSelStyle);
}
- Quantity_NameOfColor aHiCol;
- Standard_Boolean hasHiCol = Standard_False;
- if (IsHilighted (theObject, hasHiCol, aHiCol))
+ Handle(Graphic3d_HighlightStyle) aCustomStyle;
+ if (HighlightStyle (theObject, aCustomStyle))
{
- if (hasHiCol && aHiCol!= mySelectionColor)
+ if (!aCustomStyle.IsNull() && anObjSelStyle != aCustomStyle)
{
- HilightWithColor (theObject, mySelectionColor, Standard_False);
+ HilightWithColor (theObject, anObjSelStyle, Standard_False);
}
}
else
{
- HilightWithColor (theObject, mySelectionColor, Standard_False);
+ HilightWithColor (theObject, anObjSelStyle, Standard_False);
}
if (theToUpdateViewer)
const Handle(AIS_InteractiveObject) anObject =
Handle(AIS_InteractiveObject)::DownCast (theOwner->Selectable());
+ const Handle(Graphic3d_HighlightStyle)& anObjSelStyle =
+ getSelStyle (anObject);
if (NbSelected() == 1 && theOwner->IsSelected())
{
- Quantity_NameOfColor aCustomColor;
- Standard_Boolean isCustomColorSet;
- if (IsHilighted (theOwner, isCustomColorSet, aCustomColor))
+ Handle(Graphic3d_HighlightStyle) aCustomStyle;
+ if (HighlightStyle (theOwner, aCustomStyle))
{
- if (isCustomColorSet && aCustomColor != mySelectionColor)
+ if (!aCustomStyle.IsNull() && anObjSelStyle != aCustomStyle)
{
const Standard_Integer aHiMode = anObject->HasHilightMode() ? anObject->HilightMode() : 0;
- theOwner->HilightWithColor (myMainPM, mySelectionColor, aHiMode);
+ theOwner->HilightWithColor (myMainPM, anObjSelStyle, aHiMode);
}
}
return;
unhighlightSelected();
mySelection->ClearAndSelect (theOwner);
- theOwner->State (1);
- Quantity_NameOfColor aCustomColor;
- Standard_Boolean isCustomColorSet;
- if (!IsHilighted (theOwner, isCustomColorSet, aCustomColor) || (isCustomColorSet && aCustomColor!= mySelectionColor))
+ Handle(Graphic3d_HighlightStyle) aCustomStyle;
+ if (!HighlightStyle (theOwner, aCustomStyle) ||
+ (!aCustomStyle.IsNull() && aCustomStyle != anObjSelStyle))
{
- highlightSelected (theOwner, mySelectionColor);
+ highlightSelected (theOwner);
}
+ theOwner->State (1);
if (theOwner == anObject->GlobalSelOwner())
{
Handle(AIS_GlobalStatus)& aState = myObjects.ChangeFind (anObject);
aState->SetHilightStatus (Standard_True);
- aState->SetHilightColor (mySelectionColor);
+ aState->SetHilightStyle (anObjSelStyle);
}
if (theToUpdateViewer)
const Standard_Integer aHiMode = anObj->HasHilightMode() ? anObj->HilightMode() : 0;
if (aState == 1)
{
- highlightSelected (theOwner, mySelectionColor);
+ highlightSelected (theOwner);
if (isGlobal)
{
aStatus->SetHilightStatus (Standard_True);
- aStatus->SetHilightColor (mySelectionColor);
+ aStatus->SetHilightStyle (getSelStyle (anObj));
}
}
else
else
anObj->ClearSelected();
aStatus->SetHilightStatus (Standard_False);
- aStatus->SetHilightColor (Quantity_NOC_WHITE);
+ aStatus->SetHilightStyle (new Graphic3d_HighlightStyle());
}
if (theToUpdateViewer)