#include <GeomValidators_Tools.h>
-#include <ModelAPI_Attribute.h>
-#include <ModelAPI_AttributeSelectionList.h>
-
#include <Config_PropManager.h>
#include <AIS_InteractiveContext.hxx>
#define OPERATION_PARAMETER_COLOR "255, 255, 0"
PartSet_CustomPrs::PartSet_CustomPrs(ModuleBase_IWorkshop* theWorkshop)
- : myWorkshop(theWorkshop)
+ : myWorkshop(theWorkshop), myIsActive(false)
{
- myOperationPrs = AISObjectPtr(new GeomAPI_AISObject());
- myOperationPrs->setImpl(new Handle(AIS_InteractiveObject)(new PartSet_OperationPrs(theWorkshop)));
-
- std::vector<int> aColor = Config_PropManager::color("Visualization", "operation_parameter_color",
- OPERATION_PARAMETER_COLOR);
- myOperationPrs->setColor(aColor[0], aColor[1], aColor[2]);
-
- myOperationPrs->setPointMarker(5, 2.);
- myOperationPrs->setWidth(1);
+ initPrs();
}
-bool PartSet_CustomPrs::isActive() const
+bool PartSet_CustomPrs::isActive()
{
- Handle(PartSet_OperationPrs) anOperationPrs = getPresentation();
+ return myIsActive;
+ /*Handle(PartSet_OperationPrs) anOperationPrs = getPresentation();
Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext();
- return aContext->IsDisplayed(anOperationPrs);
+ return !aContext.IsNull() && 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)) {
+ myIsActive = true;
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)
{
+ myIsActive = false;
+ bool isModified = false;
+
Handle(PartSet_OperationPrs) anOperationPrs = getPresentation();
anOperationPrs->setFeature(FeaturePtr());
- erasePresentation();
+ Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext();
+ if (!aContext.IsNull() && 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();
Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext();
- if (!aContext->IsDisplayed(anOperationPrs)) {
- PartSet_Module* aModule = dynamic_cast<PartSet_Module*>(myWorkshop->module());
- aContext->Display(anOperationPrs);
- aContext->SetZLayer(anOperationPrs, aModule->getVisualLayerId());
+ if (!aContext.IsNull() && !aContext->IsDisplayed(anOperationPrs)) {
+ if (anOperationPrs->hasShapes()) {
+ PartSet_Module* aModule = dynamic_cast<PartSet_Module*>(myWorkshop->module());
+ XGUI_Workshop* aWorkshop = workshop();
+ aWorkshop->displayer()->displayAIS(myOperationPrs, false/*load object in selection*/, theUpdateViewer);
+ aContext->SetZLayer(anOperationPrs, aModule->getVisualLayerId());
+ }
+ }
+ else {
+ if (!anOperationPrs->hasShapes())
+ erasePresentation(theUpdateViewer);
+ else {
+ anOperationPrs->Redisplay();
+ if (theUpdateViewer)
+ workshop()->displayer()->updateViewer();
+ }
}
- else
- anOperationPrs->Redisplay();
}
-void PartSet_CustomPrs::erasePresentation()
+void PartSet_CustomPrs::erasePresentation(const bool theUpdateViewer)
{
- Handle(AIS_InteractiveObject) anOperationPrs = myOperationPrs->impl<Handle(AIS_InteractiveObject)>();
- Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext();
- if (aContext->IsDisplayed(anOperationPrs))
- aContext->Remove(anOperationPrs);
+ XGUI_Workshop* aWorkshop = workshop();
+ aWorkshop->displayer()->eraseAIS(myOperationPrs, theUpdateViewer);
}
-Handle(PartSet_OperationPrs) PartSet_CustomPrs::getPresentation() const
+Handle(PartSet_OperationPrs) PartSet_CustomPrs::getPresentation()
{
+ if (!myOperationPrs.get())
+ initPrs();
Handle(AIS_InteractiveObject) anAISIO = myOperationPrs->impl<Handle(AIS_InteractiveObject)>();
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();
Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext();
- if (aContext->IsDisplayed(anOperationPrs)) {
- // if there are performance poblems, to improve them, the necessity of redisplay can be checked
- //bool aChanged = anOperationPrs->dependOn(theObject);
- anOperationPrs->updateShapes();
- //aChanged = aChanged || anOperationPrs->dependOn(theObject);
- //if (aChanged)
- anOperationPrs->Redisplay();
+ if (!aContext.IsNull()) {
+ if (aContext->IsDisplayed(anOperationPrs)) {
+ // if there are performance poblems, to improve them, the necessity of redisplay can be checked
+ //bool aChanged = anOperationPrs->dependOn(theObject);
+ anOperationPrs->updateShapes();
+ //aChanged = aChanged || anOperationPrs->dependOn(theObject);
+ //if (aChanged)
+ anOperationPrs->Redisplay();
+ isModified = true;
+ if (theUpdateViewer)
+ workshop()->displayer()->updateViewer();
+ }
+ else {
+ anOperationPrs->updateShapes();
+ displayPresentation(theUpdateViewer);
+ }
}
+ return isModified;
+}
+
+void PartSet_CustomPrs::clearPrs()
+{
+ Handle(PartSet_OperationPrs) anOperationPrs = getPresentation();
+ if (!anOperationPrs.IsNull())
+ anOperationPrs.Nullify();
+
+ myOperationPrs.reset();
+}
+
+void PartSet_CustomPrs::initPrs()
+{
+ myOperationPrs = AISObjectPtr(new GeomAPI_AISObject());
+ myOperationPrs->setImpl(new Handle(AIS_InteractiveObject)(new PartSet_OperationPrs(myWorkshop)));
+
+ std::vector<int> aColor = Config_PropManager::color("Visualization", "operation_parameter_color",
+ OPERATION_PARAMETER_COLOR);
+ myOperationPrs->setColor(aColor[0], aColor[1], aColor[2]);
+
+ myOperationPrs->setPointMarker(5, 2.);
+ myOperationPrs->setWidth(1);
+}
+
+XGUI_Workshop* PartSet_CustomPrs::workshop() const
+{
+ XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(myWorkshop);
+ return aConnector->workshop();
}