Salome HOME
Merge branch 'Dev_1.1.0' of newgeom:newgeom into Dev_1.1.0
[modules/shaper.git] / src / PartSet / PartSet_Module.cpp
index 83f59bfe61bab2cde6132c700e168076a81b57df..20cd411016fc4806e4f402843ee6926f4f03479e 100644 (file)
 #include <ModuleBase_FilterMulti.h>
 #include <ModuleBase_FilterCustom.h>
 #include <ModuleBase_FilterNoConsructionSubShapes.h>
+#include <GeomValidators_Edge.h>
+#include <GeomValidators_EdgeOrVertex.h>
+#include <GeomValidators_Face.h>
+#include <GeomValidators_ConstructionComposite.h>
+
 #include <PartSet_FilterSketchEntity.h>
 
 #include <ModelAPI_Object.h>
@@ -62,6 +67,7 @@
 #include <TopoDS.hxx>
 #include <TopoDS_Shape.hxx>
 #include <BRep_Tool.hxx>
+#include <AIS_Dimension.hxx>
 
 #include <QObject>
 #include <QMouseEvent>
@@ -86,7 +92,7 @@ extern "C" PARTSET_EXPORT ModuleBase_IModule* createModule(ModuleBase_IWorkshop*
 
 PartSet_Module::PartSet_Module(ModuleBase_IWorkshop* theWshop)
   : ModuleBase_IModule(theWshop), 
-  myRestartingMode(RM_None)
+  myRestartingMode(RM_None), myVisualLayerId(0)
 {
   //myWorkshop = dynamic_cast<XGUI_Workshop*>(theWshop);
   mySketchMgr = new PartSet_SketcherMgr(this);
@@ -125,7 +131,20 @@ void PartSet_Module::registerValidators()
   aFactory->registerValidator("PartSet_RigidValidator", new PartSet_RigidValidator);
   aFactory->registerValidator("PartSet_DifferentObjects", new PartSet_DifferentObjectsValidator);
   aFactory->registerValidator("PartSet_DifferentShapes", new ModelAPI_ShapeValidator);
-  aFactory->registerValidator("PartSet_SketchValidator", new PartSet_SketchValidator);
+
+  aFactory->registerValidator("GeomValidators_Edge", new GeomValidators_Edge);
+  aFactory->registerValidator("GeomValidators_EdgeOrVertex",
+                              new GeomValidators_EdgeOrVertex);
+  aFactory->registerValidator("GeomValidators_Face", new GeomValidators_Face);
+
+  aFactory->registerValidator("GeomValidators_ConstructionComposite",
+                              new GeomValidators_ConstructionComposite);
+
+  aFactory->registerValidator("PartSet_SketchEntityValidator",
+                              new PartSet_SketchEntityValidator);
+
+  aFactory->registerValidator("PartSet_SameTypeAttr",
+                              new PartSet_SameTypeAttrValidator);
 }
 
 void PartSet_Module::registerFilters()
@@ -134,14 +153,14 @@ void PartSet_Module::registerFilters()
   XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(workshop());
   ModuleBase_FilterFactory* aFactory = aConnector->selectionFilters();
 
-  aFactory->registerFilter("EdgeFilter", new ModuleBase_FilterLinearEdge);
-  aFactory->registerFilter("FaceFilter", new ModuleBase_FilterFace);
-  aFactory->registerFilter("MultiFilter", new ModuleBase_FilterMulti);
-  Handle(SelectMgr_Filter) aSelectFilter = new ModuleBase_FilterNoConsructionSubShapes(workshop());
-  aFactory->registerFilter("NoConstructionSubShapesFilter",
-            new ModuleBase_FilterCustom(aSelectFilter));
-  aSelectFilter = new PartSet_FilterSketchEntity(workshop());
-  aFactory->registerFilter("SketchEntityFilter", new ModuleBase_FilterCustom(aSelectFilter));
+  //aFactory->registerFilter("EdgeFilter", new ModuleBase_FilterLinearEdge);
+  //aFactory->registerFilter("FaceFilter", new ModuleBase_FilterFace);
+  //aFactory->registerFilter("MultiFilter", new ModuleBase_FilterMulti);
+  //Handle(SelectMgr_Filter) aSelectFilter = new ModuleBase_FilterNoConsructionSubShapes(workshop());
+  //aFactory->registerFilter("NoConstructionSubShapesFilter",
+  //          new ModuleBase_FilterCustom(aSelectFilter));
+  //Handle(SelectMgr_Filter) aSelectFilter = new PartSet_FilterSketchEntity(workshop());
+  //aFactory->registerFilter("SketchEntityFilter", new ModuleBase_FilterCustom(aSelectFilter));
 }
 
 void PartSet_Module::registerProperties()
@@ -196,6 +215,8 @@ void PartSet_Module::operationAborted(ModuleBase_Operation* theOperation)
 void PartSet_Module::operationStarted(ModuleBase_Operation* theOperation)
 {
   if (PartSet_SketcherMgr::isSketchOperation(theOperation)) {
+    Handle(V3d_Viewer) aViewer = myWorkshop->viewer()->AISContext()->CurrentViewer();
+    aViewer->AddZLayer(myVisualLayerId);
     mySketchMgr->startSketch(theOperation);
   }
   else if (PartSet_SketcherMgr::isNestedSketchOperation(theOperation)) {
@@ -211,6 +232,9 @@ void PartSet_Module::operationStopped(ModuleBase_Operation* theOperation)
 {
   if (PartSet_SketcherMgr::isSketchOperation(theOperation)) {
     mySketchMgr->stopSketch(theOperation);
+    Handle(V3d_Viewer) aViewer = myWorkshop->viewer()->AISContext()->CurrentViewer();
+    aViewer->RemoveZLayer(myVisualLayerId);
+    myVisualLayerId = 0;
   }
   else if (PartSet_SketcherMgr::isNestedSketchOperation(theOperation)) {
     mySketchMgr->stopNestedSketch(theOperation);
@@ -554,11 +578,8 @@ bool PartSet_Module::deleteObjects()
   if (aSelectedObj.count() == 0)
     return false;
 
-  if (isNestedOp)
-    anOperation->abort();
-
   // the active nested sketch operation should be aborted unconditionally
-  if (PartSet_SketcherMgr::isNestedSketchOperation(anOperation))
+  if (isNestedOp)
     anOperation->abort();
 
   std::set<FeaturePtr> aRefFeatures;
@@ -639,3 +660,17 @@ bool PartSet_Module::deleteObjects()
 
   return true;
 }
+
+
+void PartSet_Module::onObjectDisplayed(ObjectPtr theObject, AISObjectPtr theAIS) 
+{
+  Handle(AIS_InteractiveObject) anAIS = theAIS->impl<Handle(AIS_InteractiveObject)>();
+  if (!anAIS.IsNull()) {
+    Handle(AIS_Dimension) aDim = Handle(AIS_Dimension)::DownCast(anAIS);
+    if (!aDim.IsNull()) {
+      Handle(AIS_InteractiveContext) aCtx = anAIS->GetContext();
+      aCtx->SetZLayer(aDim, myVisualLayerId);
+    }
+  }
+}
+