-bool XGUI_Displayer::activate(const Handle(AIS_InteractiveObject)& theIO,
- const QIntList& theModes,
- const bool theUpdateViewer) const
-{
- Handle(AIS_InteractiveContext) aContext = AISContext();
- if (aContext.IsNull() || theIO.IsNull())
- return false;
-
- bool isActivationChanged = false;
- // deactivate object in all modes, which are not in the list of activation
- // It seems that after the IO deactivation the selected state of the IO's owners
- // is modified in OCC(version: 6.8.0) and the selection of the object later is lost.
- // By this reason, the number of the IO deactivate is decreased and the object is deactivated
- // only if there is a difference in the current modes and the parameters modes.
- // If the selection problem happens again, it is possible to write a test scenario and create
- // a bug. The bug steps are the following:
- // Create two IO, activate them in 5 modes, select the first IO, deactivate 3 modes for both,
- // with clicked SHIFT select the second object.
- // The result is the selection of the first IO is lost.
- TColStd_ListOfInteger aTColModes;
- aContext->ActivatedModes(theIO, aTColModes);
- #ifdef TINSPECTOR
- if (getCallBack()) getCallBack()->ActivatedModes(theIO, aTColModes);
- #endif
- TColStd_ListIteratorOfListOfInteger itr( aTColModes );
- QIntList aModesActivatedForIO;
- bool isDeactivated = false;
- bool aHasValidMode = false;
- for (; itr.More(); itr.Next() ) {
- Standard_Integer aMode = itr.Value();
- aHasValidMode = aHasValidMode || aMode != -1;
- int aShapeMode = (aMode > 8)? aMode : AIS_Shape::SelectionType(aMode);
- if (!theModes.contains(aMode)) {
- deactivateAIS(theIO, aMode);
- isDeactivated = true;
- }
- else {
- aModesActivatedForIO.append(aMode);
- }
- }
- if (isDeactivated) {
- // the selection from the previous activation modes should be cleared manually (#26172)
- //theIO->ClearSelected();
- //#ifdef TINSPECTOR
- //if (getCallBack()) getCallBack()->ClearSelected(theIO);
- //#endif
-#ifndef CLEAR_OUTDATED_SELECTION_BEFORE_REDISPLAY
- deselectPresentation(theIO, aContext);
-#endif
- // For performance issues
- //if (theUpdateViewer)
- // updateViewer();
- isActivationChanged = true;
- }
-
- // loading the interactive object allowing the decomposition
- if (aTColModes.IsEmpty() || !aHasValidMode) {
- aContext->Load(theIO, -1, true);
- Handle(AIS_Trihedron) aTrihedron = Handle(AIS_Trihedron)::DownCast(theIO);
- if (!aTrihedron.IsNull()) {
- // Workaround for Trihedron. It should be loaded using the next Load method to
- // add this object to myGlobal map of selection manager
- // it is important to activate trihedron in two selection modes: edges and vertices
- aContext->SelectionManager()->Load(theIO);
- }
-
- #ifdef TINSPECTOR
- if (getCallBack()) getCallBack()->Load(theIO);
- #endif
- }
-
- // trihedron AIS check should be after the AIS loading.
- // If it is not loaded, it is steel selectable in the viewer.
- Handle(AIS_Trihedron) aTrihedron;
- if (!isTrihedronActive())
- aTrihedron = Handle(AIS_Trihedron)::DownCast(theIO);
- if (aTrihedron.IsNull()) {
- // In order to clear active modes list
- if (theModes.size() == 0) {
- activateAIS(theIO, 0, theUpdateViewer);
- } else {
- foreach(int aMode, theModes) {
- if (!aModesActivatedForIO.contains(aMode)) {
- activateAIS(theIO, aMode, theUpdateViewer);
- isActivationChanged = true;
- }
- }
- }
- }
- return isActivationChanged;
-}
-
-bool XGUI_Displayer::customizeObject(ObjectPtr theObject)
-{
- AISObjectPtr anAISObj = getAISObject(theObject);
- // correct the result's color it it has the attribute
- ResultPtr aResult = std::dynamic_pointer_cast<ModelAPI_Result>(theObject);
-
- // Customization of presentation
- GeomCustomPrsPtr aCustomPrs;
- FeaturePtr aFeature = ModelAPI_Feature::feature(theObject);
- if (aFeature.get() != NULL) {
- GeomCustomPrsPtr aCustPrs = std::dynamic_pointer_cast<GeomAPI_ICustomPrs>(aFeature);
- if (aCustPrs.get() != NULL)
- aCustomPrs = aCustPrs;
- }
- if (aCustomPrs.get() == NULL) {
- GeomPresentablePtr aPrs = std::dynamic_pointer_cast<GeomAPI_IPresentable>(theObject);
- // we ignore presentable not customized objects
- if (aPrs.get() == NULL)
- aCustomPrs = myCustomPrs;
- }
- bool isCustomized = aCustomPrs.get() &&
- aCustomPrs->customisePresentation(aResult, anAISObj, myCustomPrs);
- isCustomized = myWorkshop->module()->afterCustomisePresentation(aResult, anAISObj, myCustomPrs)
- || isCustomized;
- return isCustomized;
-}
-
-
+//**************************************************************
+//bool XGUI_Displayer::customizeObject(ObjectPtr theObject)
+//{
+// AISObjectPtr anAISObj = getAISObject(theObject);
+// // correct the result's color it it has the attribute
+// ResultPtr aResult = std::dynamic_pointer_cast<ModelAPI_Result>(theObject);
+//
+// // Customization of presentation
+// GeomCustomPrsPtr aCustomPrs;
+// FeaturePtr aFeature = ModelAPI_Feature::feature(theObject);
+// if (aFeature.get() != NULL) {
+// GeomCustomPrsPtr aCustPrs = std::dynamic_pointer_cast<GeomAPI_ICustomPrs>(aFeature);
+// if (aCustPrs.get() != NULL)
+// aCustomPrs = aCustPrs;
+// }
+// if (aCustomPrs.get() == NULL) {
+// GeomPresentablePtr aPrs = std::dynamic_pointer_cast<GeomAPI_IPresentable>(theObject);
+// // we ignore presentable not customized objects
+// if (aPrs.get() == NULL)
+// aCustomPrs = myCustomPrs;
+// }
+// bool isCustomized = aCustomPrs.get() &&
+// aCustomPrs->customisePresentation(aResult, anAISObj, myCustomPrs);
+// isCustomized = myWorkshop->module()->afterCustomisePresentation(aResult, anAISObj, myCustomPrs)
+// || isCustomized;
+//
+// // update presentation state if faces panel is active
+// if (anAISObj.get() && myWorkshop->facesPanel())
+// isCustomized = myWorkshop->facesPanel()->customizeObject(theObject, anAISObj) || isCustomized;
+//
+// return isCustomized;
+//}
+
+//**************************************************************