Salome HOME
Issue #1452 Fatal error when create Distance constraint on construction vertex
[modules/shaper.git] / src / ModuleBase / ModuleBase_FilterValidated.cpp
index 08314d734cc3cf2793e3e601ac6a9a53d891551d..c977072a831a9da84c606555301e3ac4544a0769 100644 (file)
@@ -12,6 +12,7 @@
 #include <ModuleBase_ISelection.h>
 #include <ModuleBase_Operation.h>
 #include <ModuleBase_WidgetValidated.h>
+#include <ModuleBase_WidgetValidator.h>
 #include <ModuleBase_ViewerPrs.h>
 
 IMPLEMENT_STANDARD_HANDLE(ModuleBase_FilterValidated, SelectMgr_Filter);
@@ -26,12 +27,19 @@ Standard_Boolean ModuleBase_FilterValidated::IsOk(const Handle(SelectMgr_EntityO
     ModuleBase_ModelWidget* aCurrentWidget = aPanel->preselectionWidget();
     if (!aCurrentWidget)
       aCurrentWidget = myWorkshop->module()->activeWidget();
-    ModuleBase_WidgetValidated* aWidgetValidated = dynamic_cast<ModuleBase_WidgetValidated*>
-                                                                           (aCurrentWidget);
-    ModuleBase_ViewerPrs aPrs;
-    myWorkshop->selection()->fillPresentation(aPrs, theOwner);
-
-    aValid = !aWidgetValidated || aWidgetValidated->isValidSelection(aPrs);
+    if (aCurrentWidget) {
+      ModuleBase_ViewerPrsPtr aPrs(new ModuleBase_ViewerPrs());
+      myWorkshop->selection()->fillPresentation(aPrs, theOwner);
+      ModuleBase_WidgetValidated* aWidgetValidated = dynamic_cast<ModuleBase_WidgetValidated*>
+                                                                             (aCurrentWidget);
+      if (aWidgetValidated)
+        aValid = !aWidgetValidated || aWidgetValidated->isValidSelection(aPrs);
+      else{
+        ModuleBase_WidgetValidator* aWidgetValidator = aCurrentWidget->widgetValidator();
+        if (aWidgetValidator)
+          aValid = aWidgetValidator->isValidSelection(aPrs);
+      }
+    }
   }
 
 #ifdef DEBUG_FILTERS