class AIS_InteractiveContext : public MMgt_TShared { public: // .... Standard_EXPORT void SetPreselected(const Handle(AIS_InteractiveObject)& anIObj, const Standard_Boolean updateviewer); // .... }; //======================================================================= //function : SetPreselected //purpose : //======================================================================= void AIS_InteractiveContext::SetPreselected(const Handle(AIS_InteractiveObject)& anIObj, const Standard_Boolean updateviewer) { if(HasOpenedContext()){ return; } if (anIObj.IsNull()) return; #ifdef IMP160701 //Nullify class members storing information about detected AIS objects. myAISCurDetected = 0; myAISDetectedSeq.Clear(); #endif static Handle (PrsMgr_PresentationManager3d) pmgr ; static Handle (StdSelect_ViewerSelector3d) selector; Standard_Boolean ismain = Standard_True,UpdVwr = Standard_False; // Preliminaires pmgr = myMainPM; selector=myMainSel; myLastPicked = myLastinMain; myWasLastMain = Standard_True; AIS_StatusOfDetection TheStat(AIS_SOD_Nothing); #ifdef IMP160701 //filling of myAISDetectedSeq sequence storing information about detected AIS objects // (the objects must be AIS_Shapes). Handle(SelectMgr_EntityOwner) anEntityOwner; if (anObj->IsKind(STANDARD_TYPE(AIS_Shape))) { Handle_AIS_Shape anAIS=Handle_AIS_Shape::DownCast(anObj); anEntityOwner=new SelectMgr_EntityOwner(anObj,anAIS->Shape(),5); } else { anEntityOwner=new SelectMgr_EntityOwner(anObj,5); } if(myFilters->IsOk(anEntityOwner)) { if(!Handle(AIS_Shape)::DownCast(anObj).IsNull()) myAISDetectedSeq.Append(anObj); } #endif // si c'est le meme qu'au coup precedent -> fin if(anIObj == myLastPicked) return ; //si le precedent est un objet courant, on ne le desilighte pas, sinon si if(!myLastPicked.IsNull()){ if(myLastPicked->State()!= 1 ){ Standard_Integer HiMod = myLastPicked->HasHilightMode()?myLastPicked->HilightMode():0; pmgr->Unhighlight(myLastPicked,HiMod); UpdVwr = Standard_True; } } Handle(SelectMgr_SelectableObject) SO = anIObj; myLastPicked = anIObj; if(ismain) myLastinMain = myLastPicked; else myLastinColl = myLastPicked; // si l'objet detecte n'est pas courant, on le hilighte... #ifdef IMP191001 if( !myLastPicked.IsNull() && myLastPicked->State()!=1) #else if(myLastPicked->State()!=1) #endif { if(myLastPicked->HasHilightMode()) pmgr->Color(myLastPicked,myHilightColor,myLastPicked->HilightMode()); else pmgr->Color(myLastPicked,myHilightColor); UpdVwr = Standard_True; } else TheStat = AIS_SOD_Selected; if(UpdVwr && updateviewer) UpdateCurrentViewer(); // myLastPicked.Nullify(); return; }