MantisBT - Community
View Issue Details
0029254Community[OCCT] OCCT:Visualizationpublic2017-10-23 12:592019-11-18 17:17
BenjaminBihler 
kgv 
normalminor 
newopen 
WindowsVC++ 201564 bit
[OCCT] 7.2.0 
[OCCT] 7.5.0* 
0029254: [Regression to OCCT 7.1.0] Programmatically highlighting AIS_Trihedron is not possible anymore
When an AIS_Trihedron is highlighted programmatically, its colour does not change to the chosen color. For other AIS objects highlighting works as expected.
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.
No tags attached.
related to 0027958closed bugmaster Open CASCADE Visualization, AIS_Trihedron - add shaded presentation option 
related to 0027818closed kgv Open CASCADE Visualization - provide an interface to define highlight presentation properties 
Issue History
2017-10-23 12:59BenjaminBihlerNew Issue
2017-10-23 12:59BenjaminBihlerAssigned To => kgv
2017-10-23 13:01kgvRelationship addedrelated to 0027958
2017-10-23 17:08kgvRelationship addedrelated to 0027818
2017-10-23 17:16kgvNote Added: 0071719
2017-10-23 17:17kgvNote Edited: 0071719bug_revision_view_page.php?bugnote_id=71719#r17980
2017-10-23 17:17kgvNote Edited: 0071719bug_revision_view_page.php?bugnote_id=71719#r17981
2019-09-04 17:50kgvTarget Version7.4.0 => 7.5.0*
2019-11-18 17:17kgvRelationship addedrelated to 0031153

Notes
(0071719)
kgv   
2017-10-23 17:16   
(edited on: 2017-10-23 17:17)
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):
  //! 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); ///!<<
  }