+ // Check Trihedron sub-objects
+ Handle(SelectMgr_SelectableObject) aSelObj = theOwner->Selectable();
+ Handle(Standard_Type) aType = aSelObj->DynamicType();
+ if (aType == STANDARD_TYPE(AIS_Axis)) {
+ Handle(AIS_Axis) aAxis = Handle(AIS_Axis)::DownCast(aSelObj);
+ gp_Lin aLine = aAxis->Component()->Lin();
+ return aPlane.Contains(aLine, Precision::Confusion(), Precision::Angular());
+
+ } else if (aType == STANDARD_TYPE(AIS_Point)) {
+ Handle(AIS_Point) aPoint = Handle(AIS_Point)::DownCast(aSelObj);
+ return aPlane.Distance(aPoint->Component()->Pnt()) < Precision::Confusion();
+
+ } else if (aType == STANDARD_TYPE(AIS_Plane)) {
+ Handle(AIS_Plane) aAisPlane = Handle(AIS_Plane)::DownCast(aSelObj);
+ gp_Pln aPln = aAisPlane->Component()->Pln();
+ return aPlane.Distance(aPln) < Precision::Confusion();
+ }