Salome HOME
PAL13460 (PAL EDF 301 force the mesh to go through a point)
authoreap <eap@opencascade.com>
Tue, 6 Mar 2007 10:50:30 +0000 (10:50 +0000)
committereap <eap@opencascade.com>
Tue, 6 Mar 2007 10:50:30 +0000 (10:50 +0000)
      enable selection of vertices

src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx
src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.h

index 796a0f6b7204c7b188e0d89bff34e9f82b79e566..ce60b192f2d05d95defb0665068dacef36d7cee5 100644 (file)
@@ -40,6 +40,8 @@
 #include "SMDS_MeshNode.hxx"
 #include "SMESH_Actor.h"
 #include "SMESH_ActorUtils.h"
+#include "SMESH_NumberFilter.hxx"
+#include "SMESH_LogicalFilter.hxx"
 
 #include "GEOMBase.h"
 #include "GeometryGUI.h"
 #include "SVTK_ViewWindow.h"
 #include "SVTK_ViewModel.h"
 #include "SalomeApp_Tools.h"
+#include "SalomeApp_TypeFilter.h"
 #include "SUIT_ResourceMgr.h"
 #include "SUIT_OverrideCursor.h"
 #include "SUIT_MessageBox.h"
 
 // OCCT Includes
 #include <TColStd_MapOfInteger.hxx>
-#include <TopoDS_Shape.hxx>
-#include <TopExp_Explorer.hxx>
+#include <TopoDS_Vertex.hxx>
+#include <BRep_Tool.hxx>
 
 // QT Includes
 #include <qframe.h>
@@ -254,6 +257,7 @@ SMESHGUI_MakeNodeAtPointOp::SMESHGUI_MakeNodeAtPointOp()
 {
   mySimulation = 0;
   myDlg = new SMESHGUI_MakeNodeAtPointDlg;
+  myFilter = 0;
 
   // connect signals and slots
   connect(myDlg->myX, SIGNAL (valueChanged(double)), this, SLOT(redisplayPreview()));
@@ -288,6 +292,15 @@ void SMESHGUI_MakeNodeAtPointOp::startOperation()
 
   SMESHGUI_SelectionOp::startOperation();
 
+  // SalomeApp_TypeFilter depends on a current study
+  if ( myFilter ) delete myFilter;
+  QPtrList<SUIT_SelectionFilter> filters;
+  filters.append( new SalomeApp_TypeFilter((SalomeApp_Study*)study(), "SMESH" ));
+  TColStd_MapOfInteger vertexType;
+  vertexType.Add( TopAbs_VERTEX );
+  filters.append( new SMESH_NumberFilter("GEOM", TopAbs_VERTEX, 1, vertexType ));
+  myFilter = new SMESH_LogicalFilter( filters, SMESH_LogicalFilter::LO_OR );
+  
   activateSelection(); // set filters
 
   myDlg->myX->SetValue(0);
@@ -323,6 +336,7 @@ void SMESHGUI_MakeNodeAtPointOp::stopOperation()
     SMESH::RepaintCurrentView();
     myMeshActor = 0;
   }
+  selectionMgr()->removeFilter( myFilter );
   SMESHGUI_SelectionOp::stopOperation();
 }
 
@@ -434,10 +448,30 @@ void SMESHGUI_MakeNodeAtPointOp::onSelectionDone()
       return;
     Handle(SALOME_InteractiveObject) anIO = aList.First();
     SMESH_Actor* aMeshActor = SMESH::FindActorByEntry(anIO->getEntry());
-    if (!aMeshActor)
-      return;
+
+    if (!aMeshActor) { // coord by geom
+      if ( myDlg->myCoordBtn->isOn() ) {
+        GEOM::GEOM_Object_var geom = SMESH::IObjectToInterface<GEOM::GEOM_Object>(anIO);
+        if ( !geom->_is_nil() ) {
+          TopoDS_Vertex aShape;
+          if ( GEOMBase::GetShape(geom, aShape) &&
+               aShape.ShapeType() == TopAbs_VERTEX ) {
+            gp_Pnt P = BRep_Tool::Pnt(aShape);
+            myNoPreview = true;
+            myDlg->myX->SetValue(P.X());
+            myDlg->myY->SetValue(P.Y());
+            myDlg->myZ->SetValue(P.Z());
+            myNoPreview = false;
+            redisplayPreview();
+          }
+        }
+        return;
+      }
+    }
+
     if ( !myMeshActor )
       myMeshActor = aMeshActor;
+
     QString aString;
     int nbElems = SMESH::GetNameOfSelectedElements(selector(),anIO, aString);
     if (nbElems == 1) {
@@ -561,6 +595,7 @@ void SMESHGUI_MakeNodeAtPointOp::activateSelection()
 {
   selectionMgr()->clearFilters();
   SMESH::SetPointRepresentation(false);
+  selectionMgr()->installFilter( myFilter );
   setSelectionMode( NodeSelection );
 }
 
@@ -572,9 +607,9 @@ void SMESHGUI_MakeNodeAtPointOp::activateSelection()
 
 SMESHGUI_MakeNodeAtPointOp::~SMESHGUI_MakeNodeAtPointOp()
 {
-  if ( myDlg )
-    delete myDlg;
-  delete mySimulation;
+  if ( myDlg )        delete myDlg;
+  if ( mySimulation ) delete mySimulation;
+  if ( myFilter )     delete myFilter;
 }
 
 //================================================================================
index 8ffa107bc23d1a15194f6848ecd3b10e6a8b4e17..6751b6fc15190dfcf84826c98e342258aa665e90 100644 (file)
@@ -80,6 +80,7 @@ private:
 
   SMESHGUI_MakeNodeAtPointDlg*  myDlg;
 
+  SUIT_SelectionFilter*         myFilter;
   int                           myMeshOldDisplayMode;
   SMESHGUI_MeshEditPreview*     mySimulation;
   SMESH_Actor*                  myMeshActor;