X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_CustomPrs.cpp;h=3bf751b1e3874a141e2561f103a747859ab014b5;hb=857b1f72d9703c46c6c8c9bb239821d314344c86;hp=5cd38b33b91be11bba776bda02e9dbd075d009b2;hpb=962869024a608123017b91ac93d7c784ebc12b67;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_CustomPrs.cpp b/src/PartSet/PartSet_CustomPrs.cpp index 5cd38b33b..3bf751b1e 100755 --- a/src/PartSet/PartSet_CustomPrs.cpp +++ b/src/PartSet/PartSet_CustomPrs.cpp @@ -39,27 +39,39 @@ bool PartSet_CustomPrs::isActive() return aContext->IsDisplayed(anOperationPrs); } -void PartSet_CustomPrs::activate(const FeaturePtr& theFeature) +bool PartSet_CustomPrs::activate(const FeaturePtr& theFeature, const bool theUpdateViewer) { + bool isModified = false; Handle(PartSet_OperationPrs) anOperationPrs = getPresentation(); if (anOperationPrs->canActivate(theFeature)) { anOperationPrs->setFeature(theFeature); - if (theFeature.get()) - displayPresentation(); + if (theFeature.get()) { + displayPresentation(theUpdateViewer); + isModified = true; + } } + return isModified; } -void PartSet_CustomPrs::deactivate() +bool PartSet_CustomPrs::deactivate(const bool theUpdateViewer) { + bool isModified = false; + Handle(PartSet_OperationPrs) anOperationPrs = getPresentation(); anOperationPrs->setFeature(FeaturePtr()); - erasePresentation(); + Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext(); + if (aContext->IsDisplayed(anOperationPrs)) { + erasePresentation(theUpdateViewer); + isModified = true; + } + + return isModified; } -void PartSet_CustomPrs::displayPresentation() +void PartSet_CustomPrs::displayPresentation(const bool theUpdateViewer) { Handle(PartSet_OperationPrs) anOperationPrs = getPresentation(); @@ -68,17 +80,20 @@ void PartSet_CustomPrs::displayPresentation() PartSet_Module* aModule = dynamic_cast(myWorkshop->module()); XGUI_Workshop* aWorkshop = workshop(); - aWorkshop->displayer()->displayAIS(myOperationPrs, false/*load object in selection*/, true); + aWorkshop->displayer()->displayAIS(myOperationPrs, false/*load object in selection*/, theUpdateViewer); aContext->SetZLayer(anOperationPrs, aModule->getVisualLayerId()); } - else + else { anOperationPrs->Redisplay(); + if (theUpdateViewer) + workshop()->displayer()->updateViewer(); + } } -void PartSet_CustomPrs::erasePresentation() +void PartSet_CustomPrs::erasePresentation(const bool theUpdateViewer) { XGUI_Workshop* aWorkshop = workshop(); - aWorkshop->displayer()->eraseAIS(myOperationPrs, true); + aWorkshop->displayer()->eraseAIS(myOperationPrs, theUpdateViewer); } Handle(PartSet_OperationPrs) PartSet_CustomPrs::getPresentation() @@ -89,8 +104,9 @@ Handle(PartSet_OperationPrs) PartSet_CustomPrs::getPresentation() return Handle(PartSet_OperationPrs)::DownCast(anAISIO); } -void PartSet_CustomPrs::customize(const ObjectPtr& theObject) +bool PartSet_CustomPrs::redisplay(const ObjectPtr& theObject, const bool theUpdateViewer) { + bool isModified = false; // the presentation should be recomputed if the previous AIS depend on the result // [it should be hiddend] or the new AIS depend on it [it should be visualized] Handle(PartSet_OperationPrs) anOperationPrs = getPresentation(); @@ -102,7 +118,11 @@ void PartSet_CustomPrs::customize(const ObjectPtr& theObject) //aChanged = aChanged || anOperationPrs->dependOn(theObject); //if (aChanged) anOperationPrs->Redisplay(); + isModified = true; + if (theUpdateViewer) + workshop()->displayer()->updateViewer(); } + return isModified; } void PartSet_CustomPrs::clearPrs()