For all issues regarding the Forums use, please, refer to the Forum Rules.

Our Solutions

Need professional assistance?
Consider our:

Support Offerings

 

Need to speed up your development?
Have a look at our:

Samples & Tools

 

Need some functionality extending standard OCCT capabilities?
Check out our:

Adv. Components

Related pages

wrong location of selection entities of AIS_Trihedron

Alexander Bovsunovsky's picture
Forums: 

If I create the AIS_Trihedron object and then start moving it by AIS_InteractiveContext::SetLocation(), the presentation of the object and selection entities of mode=0 moves as expected. However, the entities of any other selection mode (origin,axis,planes) remain at initial place defined by Geom_Axis2Placement object.It happens because that entities are binded to the independent interactive objects stored inside AIS_Trihedron.
I expect to move the entities of any selection mode without re-creating the parent object. In order to fix that I have re-implemented the following virtual functions in AIS_Trihedron class:
//---------------------------
void AIS_Trihedron::SetLocation(const TopLoc_Location& aLoc)
{
SetTransformation(new Geom_Transformation(aLoc.Transformation()));
PrsMgr_PresentableObject::SetLocation(aLoc);
for (Standard_Integer i=0; i {
myShapes[i]->SetTransformation(new Geom_Transformation(aLoc.Transformation()));
myShapes[i]->SetLocation(aLoc);
}
}
void AIS_Trihedron::ResetLocation()
{
UnsetTransformation();
SelectMgr_SelectableObject::ResetLocation();
for (Standard_Integer i=0; i {
myShapes[i]->UnsetTransformation();
myShapes[i]->ResetLocation();
}
}
void AIS_Trihedron::UpdateSelection()
{
SelectMgr_SelectableObject::UpdateSelection();
for (Standard_Integer i=0; i myShapes[i]->UpdateSelection();
}
void AIS_Trihedron::UpdateSelection(const Standard_Integer aMode)
{
SelectMgr_SelectableObject::UpdateSelection(aMode);
for (Standard_Integer i=0; i myShapes[i]->UpdateSelection(aMode);
}
//---------------------------
The last issue remains - when I remove the AIS_Trihedron from the interactive context I need to remove the inner interactive objects too (especially if the user have selected them and, therefore, made them to be displayed).
As I can see, there are no virtual functions in parent classes which are called during AIS_InteractiveContext::Remove() execution.
Maybe the PrsMgr_PresentableObject::Presentations() must be made virtual for such cases?...