Salome HOME
NPAL15379: Fuse error with partitionned shape. Roll back the fix because of regressions.
[modules/geom.git] / src / GEOMGUI / GeometryGUI.cxx
index e41898df3f6438c04cb9853c2bbe9f8984d695bc..18022605da0b5cf38ba45ec058af7bef4f44b591 100644 (file)
@@ -17,7 +17,7 @@
 //  License along with this library; if not, write to the Free Software
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 //  License along with this library; if not, write to the Free Software
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //
 //
 //
 //
 //
@@ -61,6 +61,7 @@
 
 #include <Prs3d_Drawer.hxx>
 #include <Prs3d_IsoAspect.hxx>
 
 #include <Prs3d_Drawer.hxx>
 #include <Prs3d_IsoAspect.hxx>
+#include <Aspect_TypeOfMarker.hxx>
 #include <OSD_SharedLibrary.hxx>
 
 #include <utilities.h>
 #include <OSD_SharedLibrary.hxx>
 
 #include <utilities.h>
@@ -96,7 +97,7 @@ bool GeometryGUI::InitGeomGen()
 
 //=======================================================================
 // function : ClientSObjectToObject
 
 //=======================================================================
 // function : ClientSObjectToObject
-// purpose  : 
+// purpose  :
 //=======================================================================
 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
 {
 //=======================================================================
 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
 {
@@ -116,7 +117,7 @@ CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
 
 //=======================================================================
 // function : ClientStudyToStudy
 
 //=======================================================================
 // function : ClientStudyToStudy
-// purpose  : 
+// purpose  :
 //=======================================================================
 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
 {
 //=======================================================================
 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
 {
@@ -171,12 +172,12 @@ GeometryGUI::GeometryGUI() :
   SalomeApp_Module( "GEOM" )
 {
   if ( CORBA::is_nil( myComponentGeom ) )
   SalomeApp_Module( "GEOM" )
 {
   if ( CORBA::is_nil( myComponentGeom ) )
-  { 
+  {
     SALOME_LifeCycleCORBA* ls = new SALOME_LifeCycleCORBA( getApp()->namingService() );
     Engines::Component_var comp = ls->FindOrLoad_Component( "FactoryServer", "GEOM" );
     myComponentGeom  = GEOM::GEOM_Gen::_narrow( comp );
   }
     SALOME_LifeCycleCORBA* ls = new SALOME_LifeCycleCORBA( getApp()->namingService() );
     Engines::Component_var comp = ls->FindOrLoad_Component( "FactoryServer", "GEOM" );
     myComponentGeom  = GEOM::GEOM_Gen::_narrow( comp );
   }
-  
+
   myState           = -1;
   myActiveDialogBox = 0;
   myFatherior       = "";
   myState           = -1;
   myActiveDialogBox = 0;
   myFatherior       = "";
@@ -189,6 +190,7 @@ GeometryGUI::GeometryGUI() :
   myVTKSelectors.setAutoDelete( true );
 
   myDisplayer = 0;
   myVTKSelectors.setAutoDelete( true );
 
   myDisplayer = 0;
+  myLocalSelectionMode = GEOM_ALLOBJECTS;
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -350,7 +352,7 @@ void GeometryGUI::OnGUIEvent( int id )
   bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
   // if current viewframe is not of OCC and not of VTK type - return immediately
   // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
   bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
   // if current viewframe is not of OCC and not of VTK type - return immediately
   // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
-  bool NotViewerDependentCommand = ( id == 901 || id == 216 || id == 213 ); 
+  bool NotViewerDependentCommand = ( id == 901 || id == 216 || id == 213 );
   if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommand )
       return;
 
   if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommand )
       return;
 
@@ -368,6 +370,14 @@ void GeometryGUI::OnGUIEvent( int id )
       id == 121  ||  // MENU FILE - EXPORT BREP
       id == 122  ||  // MENU FILE - EXPORT IGES
       id == 123  ||  // MENU FILE - EXPORT STEP
       id == 121  ||  // MENU FILE - EXPORT BREP
       id == 122  ||  // MENU FILE - EXPORT IGES
       id == 123  ||  // MENU FILE - EXPORT STEP
+      id == 2171 ||  // POPUP VIEWER - SELECT ONLY - VERTEX
+      id == 2172 ||  // POPUP VIEWER - SELECT ONLY - EDGE
+      id == 2173 ||  // POPUP VIEWER - SELECT ONLY - WIRE
+      id == 2174 ||  // POPUP VIEWER - SELECT ONLY - FACE
+      id == 2175 ||  // POPUP VIEWER - SELECT ONLY - SHELL
+      id == 2176 ||  // POPUP VIEWER - SELECT ONLY - SOLID
+      id == 2177 ||  // POPUP VIEWER - SELECT ONLY - COMPOUND
+      id == 2178 ||  // POPUP VIEWER - SELECT ONLY - SELECT ALL      
       id == 31   ||  // MENU EDIT - COPY
       id == 33   ||  // MENU EDIT - DELETE
       id == 411  ||  // MENU SETTINGS - ADD IN STUDY
       id == 31   ||  // MENU EDIT - COPY
       id == 33   ||  // MENU EDIT - DELETE
       id == 411  ||  // MENU SETTINGS - ADD IN STUDY
@@ -486,7 +496,7 @@ void GeometryGUI::OnGUIEvent( int id )
   else if( id == 503 ||   // MENU OPERATION - PARTITION
           id == 504 ||   // MENU OPERATION - ARCHIMEDE
           id == 505 ||   // MENU OPERATION - FILLET
   else if( id == 503 ||   // MENU OPERATION - PARTITION
           id == 504 ||   // MENU OPERATION - ARCHIMEDE
           id == 505 ||   // MENU OPERATION - FILLET
-          id == 506 ||   // MENU OPERATION - CHAMFER  
+          id == 506 ||   // MENU OPERATION - CHAMFER
           id == 507 ) {  // MENU OPERATION - CLIPPING RANGE
 #ifndef WNT
        library = getLibrary( "libOperationGUI.so" );
           id == 507 ) {  // MENU OPERATION - CLIPPING RANGE
 #ifndef WNT
        library = getLibrary( "libOperationGUI.so" );
@@ -549,9 +559,9 @@ void GeometryGUI::OnGUIEvent( int id )
   }
 
   // call method of corresponding GUI library
   }
 
   // call method of corresponding GUI library
-  if ( library ) 
+  if ( library )
     library->OnGUIEvent( id, desk );
     library->OnGUIEvent( id, desk );
-  else 
+  else
     SUIT_MessageBox::error1( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
 }
 
     SUIT_MessageBox::error1( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
 }
 
@@ -578,7 +588,7 @@ void GeometryGUI::OnKeyPress( SUIT_ViewWindow* win, QKeyEvent* pe )
 // purpose  : Manages mouse move events [static]
 //=================================================================================
 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* win, QMouseEvent* pe )
 // purpose  : Manages mouse move events [static]
 //=================================================================================
 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* win, QMouseEvent* pe )
-{  
+{
   GUIMap::Iterator it;
   bool bOk = true;
   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it ) {
   GUIMap::Iterator it;
   bool bOk = true;
   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it ) {
@@ -637,7 +647,7 @@ bool GeometryGUI::SetSettings()
 {
   QMenuBar*     Mb = parent->getMainMenuBar();
   SUIT_Study*   ActiveStudy = application()->activeStudy();
 {
   QMenuBar*     Mb = parent->getMainMenuBar();
   SUIT_Study*   ActiveStudy = application()->activeStudy();
-    
+
 // Wireframe or Shading
   int DisplayMode = 0;
   SUIT_ViewWindow* window = application()->desktop()->activeWindow();
 // Wireframe or Shading
   int DisplayMode = 0;
   SUIT_ViewWindow* window = application()->desktop()->activeWindow();
@@ -671,16 +681,16 @@ bool GeometryGUI::SetSettings()
   //  if(!AddInStudy.isEmpty())
   //    Settings_AddInStudy = AddInStudy.toInt();
   //  else
   //  if(!AddInStudy.isEmpty())
   //    Settings_AddInStudy = AddInStudy.toInt();
   //  else
-  
+
   Settings_AddInStudy = 1;
   Mb->setItemChecked(411, Settings_AddInStudy);
 
   Settings_AddInStudy = 1;
   Mb->setItemChecked(411, Settings_AddInStudy);
 
-  // step value 
+  // step value
   QString S = QAD_CONFIG->getSetting("Geometry:SettingsGeomStep");
   if(S.isEmpty())
     QAD_CONFIG->addSetting("Geometry:SettingsGeomStep", "100");
 
   QString S = QAD_CONFIG->getSetting("Geometry:SettingsGeomStep");
   if(S.isEmpty())
     QAD_CONFIG->addSetting("Geometry:SettingsGeomStep", "100");
 
-  // isos 
+  // isos
   int count = ActiveStudy->getStudyFramesCount();
   for(int i = 0; i < count; i++) {
     if(ActiveStudy->getStudyFrame(i)->getTypeView() == VIEW_OCC) {
   int count = ActiveStudy->getStudyFramesCount();
   for(int i = 0; i < count; i++) {
     if(ActiveStudy->getStudyFrame(i)->getTypeView() == VIEW_OCC) {
@@ -704,22 +714,22 @@ bool GeometryGUI::SetSettings()
   GUIMap::Iterator it;
   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
     bOk = bOk && it.data()->SetSettings( parent );
   GUIMap::Iterator it;
   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
     bOk = bOk && it.data()->SetSettings( parent );
-    
-  // MZN: Enable/disable "Clipping range" menu item(from GEOM_CLIPPING variable)       
+
+  // MZN: Enable/disable "Clipping range" menu item(from GEOM_CLIPPING variable)
   if (getenv( "GEOM_CLIPPING" ) == NULL)
     {
       QMenuItem* mi = Mb->findItem(50);
       if (mi && mi->popup())
   if (getenv( "GEOM_CLIPPING" ) == NULL)
     {
       QMenuItem* mi = Mb->findItem(50);
       if (mi && mi->popup())
-      mi->popup()->removeItem(507);            
-    } 
-    
+      mi->popup()->removeItem(507);
+    }
+
   return bOk;
 }
 */
 
 //=======================================================================
 // function : createGeomAction
   return bOk;
 }
 */
 
 //=======================================================================
 // function : createGeomAction
-// purpose  : 
+// purpose  :
 //=======================================================================
 void GeometryGUI::createGeomAction( const int id, const QString& po_id, const QString& icon_id, const int key, const bool toggle  )
 {
 //=======================================================================
 void GeometryGUI::createGeomAction( const int id, const QString& po_id, const QString& icon_id, const int key, const bool toggle  )
 {
@@ -727,7 +737,7 @@ void GeometryGUI::createGeomAction( const int id, const QString& po_id, const QS
   QWidget* parent = application()->desktop();
   SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
   QPixmap pix;
   QWidget* parent = application()->desktop();
   SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
   QPixmap pix;
-  if ( icon_id.length() ) 
+  if ( icon_id.length() )
     pix = resMgr->loadPixmap( "GEOM", tr( icon_id ) );
   else
     pix = resMgr->loadPixmap( "GEOM", tr( QString( "ICO_" )+po_id ), false );
     pix = resMgr->loadPixmap( "GEOM", tr( icon_id ) );
   else
     pix = resMgr->loadPixmap( "GEOM", tr( QString( "ICO_" )+po_id ), false );
@@ -831,7 +841,7 @@ void GeometryGUI::initialize( CAM_Application* app )
   createGeomAction( 609, "CHECK_FREE_BNDS" );
   createGeomAction( 610, "CHECK_FREE_FACES" );
   createGeomAction( 611, "CHANGE_ORIENTATION" );
   createGeomAction( 609, "CHECK_FREE_BNDS" );
   createGeomAction( 610, "CHECK_FREE_FACES" );
   createGeomAction( 611, "CHANGE_ORIENTATION" );
-  
+
   createGeomAction( 708, "POINT_COORDS" );
   createGeomAction( 701, "BASIC_PROPS" );
   createGeomAction( 702, "MASS_CENTER" );
   createGeomAction( 708, "POINT_COORDS" );
   createGeomAction( 701, "BASIC_PROPS" );
   createGeomAction( 702, "MASS_CENTER" );
@@ -845,7 +855,7 @@ void GeometryGUI::initialize( CAM_Application* app )
   createGeomAction( 7072, "CHECK_COMPOUND" );
 
   createGeomAction( 5103, "CHECK_GEOMETRY" );
   createGeomAction( 7072, "CHECK_COMPOUND" );
 
   createGeomAction( 5103, "CHECK_GEOMETRY" );
-  
+
   createGeomAction( 412, "SHADING_COLOR" );
   createGeomAction( 413, "ISOS" );
   createGeomAction( 414, "STEP_VALUE" );
   createGeomAction( 412, "SHADING_COLOR" );
   createGeomAction( 413, "ISOS" );
   createGeomAction( 414, "STEP_VALUE" );
@@ -854,6 +864,14 @@ void GeometryGUI::initialize( CAM_Application* app )
   createGeomAction( 212, "DISPLAY_ALL" );
   createGeomAction( 214, "ERASE_ALL" );
   createGeomAction( 216, "DISPLAY" );
   createGeomAction( 212, "DISPLAY_ALL" );
   createGeomAction( 214, "ERASE_ALL" );
   createGeomAction( 216, "DISPLAY" );
+  createGeomAction( 2171, "VERTEX_SEL_ONLY" ,"", 0, true );
+  createGeomAction( 2172, "EDGE_SEL_ONLY", "", 0, true );
+  createGeomAction( 2173, "WIRE_SEL_ONLY", "",  0, true );
+  createGeomAction( 2174, "FACE_SEL_ONLY", "", 0, true );
+  createGeomAction( 2175, "SHELL_SEL_ONLY", "",  0, true );
+  createGeomAction( 2176, "SOLID_SEL_ONLY", "", 0, true );
+  createGeomAction( 2177, "COMPOUND_SEL_ONLY", "",  0, true );
+  createGeomAction( 2178, "ALL_SEL_ONLY", "",  0, true );
   createGeomAction( 213, "DISPLAY_ONLY" );
   createGeomAction( 215, "ERASE" );
 
   createGeomAction( 213, "DISPLAY_ONLY" );
   createGeomAction( 215, "ERASE" );
 
@@ -896,125 +914,125 @@ void GeometryGUI::initialize( CAM_Application* app )
   createMenu( 4020, basicId, -1 );
 
   int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
   createMenu( 4020, basicId, -1 );
 
   int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
-  createMenu( 4021, primId, -1 );  
-  createMenu( 4022, primId, -1 );  
-  createMenu( 4023, primId, -1 );  
-  createMenu( 4024, primId, -1 );  
-  createMenu( 4025, primId, -1 );  
+  createMenu( 4021, primId, -1 );
+  createMenu( 4022, primId, -1 );
+  createMenu( 4023, primId, -1 );
+  createMenu( 4024, primId, -1 );
+  createMenu( 4025, primId, -1 );
 
   int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
 
   int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
-  createMenu( 4031, genId, -1 );  
-  createMenu( 4032, genId, -1 );  
-  createMenu( 4033, genId, -1 );  
-  createMenu( 4034, genId, -1 );  
+  createMenu( 4031, genId, -1 );
+  createMenu( 4032, genId, -1 );
+  createMenu( 4033, genId, -1 );
+  createMenu( 4034, genId, -1 );
   createMenu( separator(), newEntId, -1 );
 
   int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
   createMenu( separator(), newEntId, -1 );
 
   int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
-  createMenu( 800, groupId, -1 );  
-  createMenu( 801, groupId, -1 );  
+  createMenu( 800, groupId, -1 );
+  createMenu( 801, groupId, -1 );
   createMenu( separator(), newEntId, -1 );
 
   int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
   createMenu( separator(), newEntId, -1 );
 
   int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
-  createMenu( 9997, blocksId, -1 );  
-  createMenu( 9999, blocksId, -1 );  
+  createMenu( 9997, blocksId, -1 );
+  createMenu( 9999, blocksId, -1 );
 
   createMenu( separator(), newEntId, -1 );
 
   createMenu( separator(), newEntId, -1 );
-  createMenu( 404, newEntId, -1 );  
+  createMenu( 404, newEntId, -1 );
   createMenu( separator(), newEntId, -1 );
   createMenu( separator(), newEntId, -1 );
-  createMenu( 407, newEntId, -1 );  
+  createMenu( 407, newEntId, -1 );
 
   int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
 
   int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
-  createMenu( 4081, buildId, -1 );  
-  createMenu( 4082, buildId, -1 );  
-  createMenu( 4083, buildId, -1 );  
-  createMenu( 4084, buildId, -1 );  
-  createMenu( 4085, buildId, -1 );  
-  createMenu( 4086, buildId, -1 );  
+  createMenu( 4081, buildId, -1 );
+  createMenu( 4082, buildId, -1 );
+  createMenu( 4083, buildId, -1 );
+  createMenu( 4084, buildId, -1 );
+  createMenu( 4085, buildId, -1 );
+  createMenu( 4086, buildId, -1 );
 
   int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
 
   int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
 
   int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
 
   int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
-  createMenu( 5011, boolId, -1 );  
-  createMenu( 5012, boolId, -1 );  
-  createMenu( 5013, boolId, -1 );  
-  createMenu( 5014, boolId, -1 );  
+  createMenu( 5011, boolId, -1 );
+  createMenu( 5012, boolId, -1 );
+  createMenu( 5013, boolId, -1 );
+  createMenu( 5014, boolId, -1 );
 
   int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
 
   int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
-  createMenu( 5021, transId, -1 );  
-  createMenu( 5022, transId, -1 );  
-  createMenu( 5023, transId, -1 );  
-  createMenu( 5024, transId, -1 );  
-  createMenu( 5025, transId, -1 );  
-  createMenu( 5026, transId, -1 );  
+  createMenu( 5021, transId, -1 );
+  createMenu( 5022, transId, -1 );
+  createMenu( 5023, transId, -1 );
+  createMenu( 5024, transId, -1 );
+  createMenu( 5025, transId, -1 );
+  createMenu( 5026, transId, -1 );
   createMenu( separator(), transId, -1 );
   createMenu( separator(), transId, -1 );
-  createMenu( 5027, transId, -1 );  
-  createMenu( 5028, transId, -1 );  
+  createMenu( 5027, transId, -1 );
+  createMenu( 5028, transId, -1 );
 
 
-  createMenu( 503, operId, -1 );  
-  createMenu( 504, operId, -1 );  
+  createMenu( 503, operId, -1 );
+  createMenu( 504, operId, -1 );
   createMenu( separator(), operId, -1 );
   createMenu( separator(), operId, -1 );
-  createMenu( 505, transId, -1 );  
-  createMenu( 506, transId, -1 );  
-  //createMenu( 507, transId, -1 );  
+  createMenu( 505, transId, -1 );
+  createMenu( 506, transId, -1 );
+  //createMenu( 507, transId, -1 );
 
   int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
 
   int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
-  createMenu( 9998, blockId, -1 );  
-  createMenu( 9995, blockId, -1 );  
-  createMenu( 99991, blockId, -1 );  
+  createMenu( 9998, blockId, -1 );
+  createMenu( 9995, blockId, -1 );
+  createMenu( 99991, blockId, -1 );
 
   int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
 
   int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
-  createMenu( 605, repairId, -1 );  
-  createMenu( 603, repairId, -1 );  
-  createMenu( 606, repairId, -1 );  
-  createMenu( 607, repairId, -1 );  
-  createMenu( 604, repairId, -1 );  
-  createMenu( 601, repairId, -1 );  
-  createMenu( 602, repairId, -1 );  
-  createMenu( 608, repairId, -1 );  
-  createMenu( 609, repairId, -1 );  
-  createMenu( 610, repairId, -1 );  
-  createMenu( 611, repairId, -1 );  
+  createMenu( 605, repairId, -1 );
+  createMenu( 603, repairId, -1 );
+  createMenu( 606, repairId, -1 );
+  createMenu( 607, repairId, -1 );
+  createMenu( 604, repairId, -1 );
+  createMenu( 601, repairId, -1 );
+  createMenu( 602, repairId, -1 );
+  createMenu( 608, repairId, -1 );
+  createMenu( 609, repairId, -1 );
+  createMenu( 610, repairId, -1 );
+  createMenu( 611, repairId, -1 );
 
   int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
 
   int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
-  createMenu( 708, measurId, -1 );  
-  createMenu( 701, measurId, -1 );  
+  createMenu( 708, measurId, -1 );
+  createMenu( 701, measurId, -1 );
   createMenu( separator(), measurId, -1 );
   createMenu( separator(), measurId, -1 );
-  createMenu( 702, measurId, -1 );  
-  createMenu( 703, measurId, -1 );  
+  createMenu( 702, measurId, -1 );
+  createMenu( 703, measurId, -1 );
   createMenu( separator(), measurId, -1 );
 
   int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
   createMenu( separator(), measurId, -1 );
 
   int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
-  createMenu( 7041, dimId, -1 );  
+  createMenu( 7041, dimId, -1 );
   createMenu( 7042, dimId, -1 );
   createMenu( separator(), measurId, -1 );
   createMenu( 7042, dimId, -1 );
   createMenu( separator(), measurId, -1 );
-  
-  createMenu( 705, measurId, -1 );  
+
+  createMenu( 705, measurId, -1 );
   createMenu( separator(), measurId, -1 );
   createMenu( separator(), measurId, -1 );
-  createMenu( 706, measurId, -1 );  
-  createMenu( 707, measurId, -1 );  
-  createMenu( 7072, measurId, -1 );  
+  createMenu( 706, measurId, -1 );
+  createMenu( 707, measurId, -1 );
+  createMenu( 7072, measurId, -1 );
 
   int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
   createMenu( separator(), toolsId, -1 );
 
   int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
   createMenu( separator(), toolsId, -1 );
-  createMenu( 5103, toolsId, -1 );  
-  
+  createMenu( 5103, toolsId, -1 );
+
   //int prefId = createMenu( tr( "MEN_PREFERENCES" ), -1, -1, 50 );
   //createMenu( separator(), prefId, -1 );
   //int geomId = createMenu( tr( "MEN_PREFERENCES_GEOM" ), prefId, -1 );
   //int prefId = createMenu( tr( "MEN_PREFERENCES" ), -1, -1, 50 );
   //createMenu( separator(), prefId, -1 );
   //int geomId = createMenu( tr( "MEN_PREFERENCES_GEOM" ), prefId, -1 );
-  //createMenu( 412, geomId, -1 );  
-  //createMenu( 413, geomId, -1 );  
-  //createMenu( 414, geomId, -1 );  
+  //createMenu( 412, geomId, -1 );
+  //createMenu( 413, geomId, -1 );
+  //createMenu( 414, geomId, -1 );
   //createMenu( separator(), prefId, -1 );
 
   int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
   createMenu( separator(), viewId, -1 );
 
   int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
   //createMenu( separator(), prefId, -1 );
 
   int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
   createMenu( separator(), viewId, -1 );
 
   int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
-  createMenu( 211, dispmodeId, -1 );  
-  
+  createMenu( 211, dispmodeId, -1 );
+
   createMenu( separator(), viewId, -1 );
   createMenu( separator(), viewId, -1 );
-  createMenu( 212, viewId, -1 );  
-  createMenu( 214, viewId, -1 );  
+  createMenu( 212, viewId, -1 );
+  createMenu( 214, viewId, -1 );
   createMenu( separator(), viewId, -1 );
 
 /*
   createMenu( separator(), viewId, -1 );
 
 /*
@@ -1022,8 +1040,8 @@ void GeometryGUI::initialize( CAM_Application* app )
   because of these items are accessible through object browser and viewers
   we have removed they from main menu
 
   because of these items are accessible through object browser and viewers
   we have removed they from main menu
 
-  createMenu( 216, viewId, -1 );  
-  createMenu( 213, viewId, -1 );  
+  createMenu( 216, viewId, -1 );
+  createMenu( 213, viewId, -1 );
   createMenu( 215, viewId, -1 );
 */
 
   createMenu( 215, viewId, -1 );
 */
 
@@ -1042,33 +1060,33 @@ void GeometryGUI::initialize( CAM_Application* app )
   createTool( 4020, basicTbId );
 
   int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
   createTool( 4020, basicTbId );
 
   int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
-  createTool( 4021, primTbId );  
-  createTool( 4022, primTbId );  
-  createTool( 4023, primTbId );  
-  createTool( 4024, primTbId );  
-  createTool( 4025, primTbId );  
+  createTool( 4021, primTbId );
+  createTool( 4022, primTbId );
+  createTool( 4023, primTbId );
+  createTool( 4024, primTbId );
+  createTool( 4025, primTbId );
 
   int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
 
   int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
-  createTool( 5011, boolTbId );  
-  createTool( 5012, boolTbId );  
-  createTool( 5013, boolTbId );  
-  createTool( 5014, boolTbId );  
+  createTool( 5011, boolTbId );
+  createTool( 5012, boolTbId );
+  createTool( 5013, boolTbId );
+  createTool( 5014, boolTbId );
 
   int genTbId = createTool( tr( "TOOL_GENERATION" ) );
 
   int genTbId = createTool( tr( "TOOL_GENERATION" ) );
-  createTool( 4031, genTbId );  
-  createTool( 4032, genTbId );  
-  createTool( 4033, genTbId );  
-  createTool( 4034, genTbId );  
+  createTool( 4031, genTbId );
+  createTool( 4032, genTbId );
+  createTool( 4033, genTbId );
+  createTool( 4034, genTbId );
 
   int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
 
   int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
-  createTool( 5021, transTbId );  
-  createTool( 5022, transTbId );  
-  createTool( 5023, transTbId );  
-  createTool( 5024, transTbId );  
-  createTool( 5025, transTbId );  
-  createTool( 5026, transTbId );  
+  createTool( 5021, transTbId );
+  createTool( 5022, transTbId );
+  createTool( 5023, transTbId );
+  createTool( 5024, transTbId );
+  createTool( 5025, transTbId );
+  createTool( 5026, transTbId );
   createTool( separator(), transTbId );
   createTool( separator(), transTbId );
-  createTool( 5027, transTbId );  
+  createTool( 5027, transTbId );
   createTool( 5028, transTbId );
 
   // ---- create popup menus --------------------------
   createTool( 5028, transTbId );
 
   // ---- create popup menus --------------------------
@@ -1115,6 +1133,35 @@ void GeometryGUI::initialize( CAM_Application* app )
   mgr->insert( action(  214 ), -1, -1 ); // erase All
   mgr->setRule( action( 214 ), clientOCCorVTK, true );
 
   mgr->insert( action(  214 ), -1, -1 ); // erase All
   mgr->setRule( action( 214 ), clientOCCorVTK, true );
 
+  QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
+  
+  int selectolnyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1);                //select only menu
+  mgr->insert( action(2171), selectolnyId, -1);                                  //Vertex
+  mgr->setRule(action(2171), selectOnly, true);
+  mgr->setRule(action(2171), selectOnly + " and selectionmode='VERTEX'", false);
+  mgr->insert( action(2172), selectolnyId, -1);                                  //Edge
+  mgr->setRule(action(2172), selectOnly, true);
+  mgr->setRule(action(2172), selectOnly + " and selectionmode='EDGE'", false);
+  mgr->insert( action(2173), selectolnyId, -1);                                  //Wire
+  mgr->setRule(action(2173), selectOnly, true);
+  mgr->setRule(action(2173), selectOnly + " and selectionmode='WIRE'", false);
+  mgr->insert( action(2174), selectolnyId, -1);                                  //Face
+  mgr->setRule(action(2174), selectOnly, true);
+  mgr->setRule(action(2174), selectOnly + " and selectionmode='FACE'", false);
+  mgr->insert( action(2175), selectolnyId, -1);                                  //Shell
+  mgr->setRule(action(2175), selectOnly, true);
+  mgr->setRule(action(2175), selectOnly + " and selectionmode='SHELL'", false);
+  mgr->insert( action(2176), selectolnyId, -1);                                  //Solid
+  mgr->setRule(action(2176), selectOnly, true);
+  mgr->setRule(action(2176), selectOnly + " and selectionmode='SOLID'", false);
+  mgr->insert( action(2177), selectolnyId, -1);                                  //Compound
+  mgr->setRule(action(2177), selectOnly, true);
+  mgr->setRule(action(2177), selectOnly + " and selectionmode='COMPOUND'", false);
+  mgr->insert( separator(), selectolnyId, -1);
+  mgr->insert( action(2178), selectolnyId, -1);                                  //Clear selection filter
+  mgr->setRule(action(2178), selectOnly, true);
+  mgr->setRule(action(2178), selectOnly + " and selectionmode='ALL'", false);
+  
   mgr->insert( action(  213 ), -1, -1 ); // display only
   mgr->setRule( action( 213 ), rule.arg( types ).arg( "true" ), true );
   mgr->insert( separator(), -1, -1 );
   mgr->insert( action(  213 ), -1, -1 ); // display only
   mgr->setRule( action( 213 ), rule.arg( types ).arg( "true" ), true );
   mgr->insert( separator(), -1, -1 );
@@ -1185,14 +1232,14 @@ bool GeometryGUI::deactivateModule( SUIT_Study* study )
   setMenuShown( false );
   setToolShown( false );
 
   setMenuShown( false );
   setToolShown( false );
 
-  disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ), 
+  disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
             this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
 
   EmitSignalCloseAllDialogs();
 
   GUIMap::Iterator it;
   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
             this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
 
   EmitSignalCloseAllDialogs();
 
   GUIMap::Iterator it;
   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
-    it.data()->deactivate();  
+    it.data()->deactivate();
 
   // Unset actions accelerator keys
   //action(111)->setAccel(QKeySequence()); // Import
 
   // Unset actions accelerator keys
   //action(111)->setAccel(QKeySequence()); // Import
@@ -1286,7 +1333,7 @@ bool GeometryGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* popup, const QStr
   if( nbSel == 0 ) {
     ////// NOTHING SELECTED
     popup->clear();
   if( nbSel == 0 ) {
     ////// NOTHING SELECTED
     popup->clear();
-  } 
+  }
   else if ( nbSel == 1 ) {
     ////// SINGLE OBJECT SELECTION
     if ( parentComponent != parent->getActiveComponent() )  {
   else if ( nbSel == 1 ) {
     ////// SINGLE OBJECT SELECTION
     if ( parentComponent != parent->getActiveComponent() )  {
@@ -1513,7 +1560,7 @@ bool GeometryGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* popup, const QStr
 
 //=======================================================================
 // function : GeometryGUI::BuildPresentation()
 
 //=======================================================================
 // function : GeometryGUI::BuildPresentation()
-// purpose  : 
+// purpose  :
 //=======================================================================
 void GeometryGUI::BuildPresentation( const Handle(SALOME_InteractiveObject)& io, SUIT_ViewWindow* win )
 {
 //=======================================================================
 void GeometryGUI::BuildPresentation( const Handle(SALOME_InteractiveObject)& io, SUIT_ViewWindow* win )
 {
@@ -1531,7 +1578,7 @@ void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
 
   const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
 //  const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
 
   const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
 //  const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
-  
+
   // disable non-OCC viewframe menu commands
 //  action( 404 )->setEnabled( ViewOCC ); // SKETCHER
   action( 603 )->setEnabled( ViewOCC ); // SuppressFace
   // disable non-OCC viewframe menu commands
 //  action( 404 )->setEnabled( ViewOCC ); // SKETCHER
   action( 603 )->setEnabled( ViewOCC ); // SuppressFace
@@ -1654,46 +1701,102 @@ void GeometryGUI::createPreferences()
 
   addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
                 LightApp_Preferences::Color, "Geometry", "shading_color" );
 
   addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
                 LightApp_Preferences::Color, "Geometry", "shading_color" );
-  
+
   addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
                 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
   addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
                 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
-  
+
   addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
                 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
   addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
                 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
-  
+
   addPreference( tr( "PREF_LINE_COLOR"), genGroup,
                 LightApp_Preferences::Color, "Geometry", "line_color" );
   addPreference( tr( "PREF_LINE_COLOR"), genGroup,
                 LightApp_Preferences::Color, "Geometry", "line_color" );
-  
+
   addPreference( tr( "PREF_POINT_COLOR"), genGroup,
                 LightApp_Preferences::Color, "Geometry", "point_color" );
   addPreference( tr( "PREF_POINT_COLOR"), genGroup,
                 LightApp_Preferences::Color, "Geometry", "point_color" );
-  
+
   addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
                 LightApp_Preferences::Color, "Geometry", "isos_color" );
   addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
                 LightApp_Preferences::Color, "Geometry", "isos_color" );
-  
+
   int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
                            LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
 
   int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
                            LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
 
+  int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
+
+  int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
+                                    LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
+
+  int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
+                                   LightApp_Preferences::DblSpin, "Geometry", "marker_scale" );
+
   // Set property for default display mode
   QStringList aModesList;
   aModesList.append( tr("MEN_WIREFRAME") );
   aModesList.append( tr("MEN_SHADING") );
   // Set property for default display mode
   QStringList aModesList;
   aModesList.append( tr("MEN_WIREFRAME") );
   aModesList.append( tr("MEN_SHADING") );
-  
+
   QValueList<QVariant> anIndexesList;
   anIndexesList.append(0);
   anIndexesList.append(1);
   QValueList<QVariant> anIndexesList;
   anIndexesList.append(0);
   anIndexesList.append(1);
-  
+
   setPreferenceProperty( dispmode, "strings", aModesList );
   setPreferenceProperty( dispmode, "indexes", anIndexesList );
   setPreferenceProperty( dispmode, "strings", aModesList );
   setPreferenceProperty( dispmode, "indexes", anIndexesList );
-  
+
   // Set property for step value for spinboxes
   setPreferenceProperty( step, "min", 0.001 );
   setPreferenceProperty( step, "max", 10000 );
   setPreferenceProperty( step, "precision", 3 );
   // Set property for step value for spinboxes
   setPreferenceProperty( step, "min", 0.001 );
   setPreferenceProperty( step, "max", 10000 );
   setPreferenceProperty( step, "precision", 3 );
-  
+
+  // Set property for type of vertex marker
+  QStringList aTypeOfMarkerList;
+  QValueList<QVariant> anTypeOfMarkerIndexesList;
+
+  aTypeOfMarkerList.append( tr("TOM_PLUS") );
+  anTypeOfMarkerIndexesList.append(Aspect_TOM_PLUS);
+
+  aTypeOfMarkerList.append( tr("TOM_POINT") );
+  anTypeOfMarkerIndexesList.append(Aspect_TOM_POINT);
+
+  aTypeOfMarkerList.append( tr("TOM_STAR") );
+  anTypeOfMarkerIndexesList.append(Aspect_TOM_STAR);
+
+  aTypeOfMarkerList.append( tr("TOM_O") );
+  anTypeOfMarkerIndexesList.append(Aspect_TOM_O);
+
+  aTypeOfMarkerList.append( tr("TOM_X") );
+  anTypeOfMarkerIndexesList.append(Aspect_TOM_X);
+
+  aTypeOfMarkerList.append( tr("TOM_O_POINT") );
+  anTypeOfMarkerIndexesList.append(Aspect_TOM_O_POINT);
+
+  aTypeOfMarkerList.append( tr("TOM_O_PLUS") );
+  anTypeOfMarkerIndexesList.append(Aspect_TOM_O_PLUS);
+
+  aTypeOfMarkerList.append( tr("TOM_O_STAR") );
+  anTypeOfMarkerIndexesList.append(Aspect_TOM_O_STAR);
+
+  aTypeOfMarkerList.append( tr("TOM_O_X") );
+  anTypeOfMarkerIndexesList.append(Aspect_TOM_O_X);
+
+
+  setPreferenceProperty( typeOfMarker, "strings", aTypeOfMarkerList );
+  setPreferenceProperty( typeOfMarker, "indexes", anTypeOfMarkerIndexesList );
+
+  // Set property for Vertex Marker scale
+  setPreferenceProperty( markerScale, "min", 1. );
+  setPreferenceProperty( markerScale, "max", 7. );
+  setPreferenceProperty( markerScale, "precision", 0.01 );
+  setPreferenceProperty( markerScale, "step", 0.5 );
+
 }
 
 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
 {
 }
 
 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
 {
+  if (section == "Geometry") {
+    SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
+    if (param == QString("SettingsGeomStep")) {
+      double spin_step = aResourceMgr->doubleValue(section, param, 100.);
+      EmitSignalDefaultStepValueChanged(spin_step);
+    }
+  }
 }
 
 LightApp_Displayer* GeometryGUI::displayer()
 }
 
 LightApp_Displayer* GeometryGUI::displayer()
@@ -1702,3 +1805,12 @@ LightApp_Displayer* GeometryGUI::displayer()
     myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
   return myDisplayer;
 }
     myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
   return myDisplayer;
 }
+
+void GeometryGUI::setLocalSelectionMode(const int mode)
+{
+  myLocalSelectionMode = mode;
+}
+int GeometryGUI::getLocalSelectionMode() const
+{
+  return myLocalSelectionMode;
+}