Archived issue #0029254
[Regression to OCCT 7.1.0] Programmatically highlighting AIS_Trihedron is not possible anymore
Description
When an AIS_Trihedron is highlighted programmatically, its colour does not change to the chosen color. For other AIS objects highlighting works as expected.
Steps to reproduce
Insert the following lines into samples\qt\Tutorial\src\DocumentTut.cxx after
"emit selectionChanged();" and before "fitAll();":
Handle(AIS_Trihedron) trihedron = new AIS_Trihedron(new Geom_Axis2Placement(gp_Ax2()));
getContext()->Display(trihedron, Standard_False);
getContext()->HilightWithColor(trihedron, getContext()->HighlightStyle(), Standard_True);
getContext()->HilightWithColor(AISBottle, getContext()->HighlightStyle(), Standard_True);
The following includes have to be added:
#include <AIS_Trihedron.hxx>
#include <Geom_Axis2Placement.hxx>
When drawing the bottle, the bottle is correctly highlighted but not the trihedron. This behaviour has changed since OCCT 7.1.0.
"emit selectionChanged();" and before "fitAll();":
Handle(AIS_Trihedron) trihedron = new AIS_Trihedron(new Geom_Axis2Placement(gp_Ax2()));
getContext()->Display(trihedron, Standard_False);
getContext()->HilightWithColor(trihedron, getContext()->HighlightStyle(), Standard_True);
getContext()->HilightWithColor(AISBottle, getContext()->HighlightStyle(), Standard_True);
The following includes have to be added:
#include <AIS_Trihedron.hxx>
#include <Geom_Axis2Placement.hxx>
When drawing the bottle, the bottle is correctly highlighted but not the trihedron. This behaviour has changed since OCCT 7.1.0.
Public activity
1 archived note
Participants are labeled by their role within this record.
This is a limitation of custom highlighting API, existed long time before AIS_Trihedron modification (AIS_Trihedron::IsAutoHilight() and AIS_Trihedron::HilightSelected() are now overridden):
To overcome this limitation, related API methods (e.g. SelectMgr_SelectableObject::HilightSelected()) should be modified to receive style Prs3d_Drawer as in case of Auto Hilight is turned on - see also current implementation of AIS_InteractiveContext::highlightGlobal() which just ignores passed style because HilightSelected() does not receive it:
//! Method which draws selected owners ( for fast presentation draw )
virtual void HilightSelected (const Handle(PrsMgr_PresentationManager3d)& PM,
const SelectMgr_SequenceOfOwner& Seq);
To overcome this limitation, related API methods (e.g. SelectMgr_SelectableObject::HilightSelected()) should be modified to receive style Prs3d_Drawer as in case of Auto Hilight is turned on - see also current implementation of AIS_InteractiveContext::highlightGlobal() which just ignores passed style because HilightSelected() does not receive it:
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, aHiMode); ///!<<
}
Related records