]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
Correction compilation on Linux
authorabd <abd@opencascade.com>
Mon, 28 Apr 2008 06:22:25 +0000 (06:22 +0000)
committerabd <abd@opencascade.com>
Mon, 28 Apr 2008 06:22:25 +0000 (06:22 +0000)
20 files changed:
doc/salome/gui/GEOM/doxyfile_py.in
doc/salome/gui/Makefile.am
idl/GEOM_Gen.idl
src/BooleanGUI/BooleanGUI_Dialog.cxx
src/GEOM/GEOM_Engine.cxx
src/GEOMClient/GEOM_Client.cxx
src/GEOMGUI/GEOM_Displayer.h
src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx
src/GEOMImpl/GEOMImpl_IBlocksOperations.hxx
src/GEOMImpl/GEOMImpl_IHealingOperations.cxx
src/GEOMImpl/GEOMImpl_IHealingOperations.hxx
src/GEOMImpl/GEOMImpl_ILocalOperations.cxx
src/GEOMImpl/GEOMImpl_ILocalOperations.hxx
src/GEOMImpl/GEOMImpl_IShapesOperations.cxx
src/GEOMImpl/GEOMImpl_IShapesOperations.hxx
src/GEOMImpl/GEOMImpl_ShapeDriver.cxx
src/GEOM_I_Superv/GEOM_Superv_i.cc
src/GEOM_SWIG/GEOM_TestAll.py
src/GEOM_SWIG/geompyDC.py
src/RepairGUI/RepairGUI_GlueDlg.cxx

index 41a0b2fc4d477552e51b4b2276b22e2e32d61e5b..88df45eb83304907dfe4bfc1368361e83dc51fbc 100755 (executable)
@@ -107,19 +107,26 @@ GENERATE_RTF      = NO
 #---------------------------------------------------------------------------
 # Configuration options related to the dot tool   
 #---------------------------------------------------------------------------
-CLASS_DIAGRAMS         = YES
+#CLASS_DIAGRAMS         = YES
+CLASS_DIAGRAMS         = NO
 HIDE_UNDOC_RELATIONS   = NO
-HAVE_DOT               = YES
-CLASS_GRAPH            = YES
+#HAVE_DOT               = YES
+HAVE_DOT               = NO
+#CLASS_GRAPH            = YES
+CLASS_GRAPH            = NO
 COLLABORATION_GRAPH    = NO
 GROUP_GRAPHS           = NO
 UML_LOOK               = NO
-TEMPLATE_RELATIONS     = YES
-INCLUDE_GRAPH          = YES
+#TEMPLATE_RELATIONS     = YES
+#INCLUDE_GRAPH          = YES
+TEMPLATE_RELATIONS     = NO
+INCLUDE_GRAPH          = NO
 INCLUDED_BY_GRAPH      = NO
 CALL_GRAPH             = NO
-GRAPHICAL_HIERARCHY    = YES
-DIRECTORY_GRAPH        = YES
+#GRAPHICAL_HIERARCHY    = YES
+#DIRECTORY_GRAPH        = YES
+GRAPHICAL_HIERARCHY    = NO
+DIRECTORY_GRAPH        = NO
 DOT_IMAGE_FORMAT       = jpg
 DOT_PATH               = 
 DOTFILE_DIRS           = 
index 2ab31da21b2a7756a55400fc4d38515abbc2051e..dec4ee81c99949fc9a2a95461387d086eab9d8c2 100644 (file)
@@ -27,10 +27,25 @@ EXTRA_DIST+=GEOM
 
 doxygen=@DOXYGEN@
 
+# Below command replaces "geompyDC" by "geompy" except cases
+# "sgeompyDC", "1geompyDC" and "egeompyDC" (these sequences
+# can be found in file names and must not be replaces):
+#
+# sed 's/\([^s1e]\)geompyDC\|^geompyDC/\1geompy/g' $${filen} > ./tmp;
+#
 usr_docs:
        cd ./GEOM; \
        echo "Processing geompyDC.py file: "; \
        $(doxygen) ./doxyfile_py; \
+       cd ./geompy_doc; \
+       filesl=`find .`; \
+       for filen in $${filesl}; do \
+         sed 's/\([^s1e]\)geompyDC\|^geompyDC/\1geompy/g' $${filen} > ./tmp1; \
+         sed 's/geompy\.geompy/geompy/g' ./tmp1 > ./tmp; \
+         rm -f tmp1; \
+         mv -f tmp $${filen}; \
+       done; \
+       cd ..; \
        echo "Running doxygen in directory: "`pwd`; \
        $(doxygen) ./doxyfile;
 
@@ -53,4 +68,4 @@ docguidir=$(docdir)/gui/GEOM
 nodist_docgui_DATA= GEOM/doxyfile
 nodist_docgui_DATA+= GEOM/doxyfile_py
 EXTRA_DIST+= GEOM/doxyfile.in
-EXTRA_DIST+= GEOM/doxyfile_py.in
\ No newline at end of file
+EXTRA_DIST+= GEOM/doxyfile_py.in
index de4600e277da9ea6ae230fbd74fa6e7802544ebc..4c30ee6005e62474bb20db50b949b08992aa85d0 100644 (file)
@@ -892,11 +892,11 @@ module GEOM
 
     /*!
      *  Create a filling from the given compound of contours.
-     *  \param theMinDeg a minimal degree
-     *  \param theMaxDeg a maximal degree
-     *  \param theTol2D a 2d tolerance
-     *  \param theTol3D a 3d tolerance
-     *  \param theNbIter a number of iteration
+     *  \param theMinDeg a minimal degree of BSpline surface to create
+     *  \param theMaxDeg a maximal degree of BSpline surface to create
+     *  \param theTol2D a 2d tolerance to be reached
+     *  \param theTol3D a 3d tolerance to be reached
+     *  \param theNbIter a number of iteration of approximation algorithm
      *  \return New GEOM_Object, containing the created filling surface.
      */
     GEOM_Object MakeFilling (in GEOM_Object theShape,
index f4778eba013d4817fe15f5a8fb7ed21dffef0602..39826043a23424f004dcdc5446a2f802130d15a6 100644 (file)
@@ -148,6 +148,16 @@ void BooleanGUI_Dialog::Init()
 
   initName( GroupConstructors->title() );
 
+  setTabOrder (RadioButton1, ResultName );
+  setTabOrder (ResultName, myGroup->PushButton1);
+  setTabOrder (myGroup->PushButton1, myGroup->PushButton2);
+  setTabOrder (myGroup->PushButton2, buttonOk);
+  setTabOrder (buttonOk, buttonApply);
+  setTabOrder (buttonApply, buttonCancel);
+  setTabOrder (buttonCancel, buttonHelp);
+
+  RadioButton1->setFocus();
+
   globalSelection( GEOM_ALLSHAPES );
 }
 
@@ -273,6 +283,12 @@ GEOM::GEOM_IOperations_ptr BooleanGUI_Dialog::createOperation()
 //=================================================================================
 bool BooleanGUI_Dialog::isValid( QString& msg )
 {
+  Handle(SALOME_InteractiveObject) IO = firstIObject();
+  Standard_Boolean testResult;
+  GEOM::GEOM_Object_var anObject = GEOMBase::ConvertIOinGEOMObject( IO, testResult );
+  if ( !testResult || anObject->_is_nil() )
+    return false;
+
   return !CORBA::is_nil( myObject1 ) && !CORBA::is_nil( myObject2 );
 }
 
index a7e620041e5233502d99e85355e6226ff5c8ca9b..048144c884fe2ad8a0f74293733e1fa5a1749bba 100644 (file)
@@ -117,7 +117,6 @@ GEOM_Engine::GEOM_Engine()
 
   _OCAFApp = new GEOM_Application();
   _UndoLimit = 10;
-  //_lastObjectTag = 0;
 }
 
 /*!
@@ -397,20 +396,22 @@ bool GEOM_Engine::Load(int theDocID, char* theFileName)
 //=============================================================================
 void GEOM_Engine::Close(int theDocID)
 {
-  if(_mapIDDocument.IsBound(theDocID)) {
+  if (_mapIDDocument.IsBound(theDocID)) {
     Handle(TDocStd_Document) aDoc = Handle(TDocStd_Document)::DownCast(_mapIDDocument(theDocID));
 
     //Remove all GEOM Objects associated to the given document
     TColStd_SequenceOfAsciiString aSeq;
-    GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient It(_objects);
-    for(; It.More(); It.Next()) {
-      TCollection_AsciiString anObjID(It.Key());
+    GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient It (_objects);
+    for (; It.More(); It.Next()) {
+      TCollection_AsciiString anObjID (It.Key());
       Standard_Integer anID = ExtractDocID(anObjID);
-      if(theDocID == anID) aSeq.Append(It.Key());
+      if (theDocID == anID) aSeq.Append(It.Key());
     }
-    for(Standard_Integer i=1; i<=aSeq.Length(); i++) _objects.UnBind(aSeq.Value(i));
+    for (Standard_Integer i=1; i<=aSeq.Length(); i++) _objects.UnBind(aSeq.Value(i));
 
-   _mapIDDocument.UnBind(theDocID);
+    _lastCleared.Nullify();
+
+    _mapIDDocument.UnBind(theDocID);
     _OCAFApp->Close(aDoc);
     aDoc.Nullify();
   }
@@ -571,7 +572,7 @@ TCollection_AsciiString GEOM_Engine::DumpPython(int theDocID,
   // Make script to publish in study
   if ( isPublished )
   {
-    map< int, string > anEntryToCommandMap; // sort publishing commands by object entry
+    std::map< int, std::string > anEntryToCommandMap; // sort publishing commands by object entry
     for (anEntryToNameIt.Initialize( theObjectNames );
          anEntryToNameIt.More();
          anEntryToNameIt.Next())
@@ -604,11 +605,11 @@ TCollection_AsciiString GEOM_Engine::DumpPython(int theDocID,
       // bind a command to the last digit of the entry
       int tag =
         aEntry.SubString( aEntry.SearchFromEnd(":")+1, aEntry.Length() ).IntegerValue();
-      anEntryToCommandMap.insert( make_pair( tag, aCommand.ToCString() ));
+      anEntryToCommandMap.insert( std::make_pair( tag, aCommand.ToCString() ));
     }
 
     // add publishing commands to the script
-    map< int, string >::iterator anEntryToCommand = anEntryToCommandMap.begin();
+    std::map< int, std::string >::iterator anEntryToCommand = anEntryToCommandMap.begin();
     for ( ; anEntryToCommand != anEntryToCommandMap.end(); ++anEntryToCommand ) {
       anUpdatedScript += (char*)anEntryToCommand->second.c_str();
     }
index 4c2c919752ec41ced5ca3367065e33b6b4d5bbc8..f5167327c142752a76efcb2ff539c165c1367cd1 100644 (file)
@@ -26,6 +26,8 @@
 //  Module : GEOM
 //  $Header$
 
+using namespace std;
+
 #include <Standard_Stream.hxx>
 
 #include <Standard_Stream.hxx>
index 87a3f74e7cc17a10dd83d4a40b245a28676eb02d..0a55928bc94275e747eef4ed74d03830e411d200 100644 (file)
@@ -29,6 +29,8 @@
 #if !defined (__GEOM_DISPLAYER_H)
 #define __GEOM_DISPLAYER_H
 
+using namespace std;
+
 #include "GEOM_GEOMGUI.hxx"
 
 #include "SALOME_Prs.h"
index 6be4c561b8c53fb8b1269fc09ddfef8d4b0c01c3..883c848c7cd59460d9853ed9f6a8abb9158af942 100644 (file)
@@ -21,6 +21,8 @@
 #pragma warning( disable:4786 )
 #endif
 
+using namespace std;
+
 #include <Standard_Stream.hxx>
 
 #include <GEOMImpl_IBlocksOperations.hxx>
index e6d048104c793dd191759fdc00a31805c4835214..e32b687f071ddf87be137837ac6805170248ebdd 100644 (file)
@@ -21,6 +21,8 @@
 #ifndef _GEOMImpl_IBlocksOperations_HXX_
 #define _GEOMImpl_IBlocksOperations_HXX_
 
+using namespace std;
+
 #include "GEOM_IOperations.hxx"
 
 #include <TopTools_ListOfShape.hxx>
index 47dde616fbaf8ead171ee137ea59c1a1072bdfe4..dee7cd1fd4b1cff39116f778366f7fb83796c9c4 100644 (file)
 //
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+
+
+
 #ifdef WNT
 #pragma warning( disable:4786 )
 #endif
 
+using namespace std;
+
 #include <Standard_Stream.hxx>
 
 #include <GEOMImpl_IHealingOperations.hxx>
index 0084d09d1c5d7aaaf72dfaf2ce5270da21b1734e..176178412b330a8f62d7fc9ec09ca1c1335cdf56 100644 (file)
@@ -18,6 +18,8 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+using namespace std;
+
 #ifndef _GEOMImpl_IHealingOperations_HXX_
 #define _GEOMImpl_IHealingOperations_HXX_
 
index 14ef164437d948b829f35c4b8fe9c73c75e7da4d..2ec4e5e397e89baef23af36cabb8831a5d4ea966 100644 (file)
@@ -17,6 +17,9 @@
 //
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+
+using namespace std;
+
 #include <Standard_Stream.hxx>
 
 #include <GEOMImpl_ILocalOperations.hxx>
index bceffa675d784602c00dd35558884920cf2b19c6..23de4e502aca13ce9a9b987aa27a138eb8413be7 100644 (file)
@@ -21,6 +21,8 @@
 #ifndef _GEOMImpl_ILocalOperations_HXX_
 #define _GEOMImpl_ILocalOperations_HXX_
 
+using namespace std;
+
 #include "Utils_SALOME_Exception.hxx"
 #include "GEOM_IOperations.hxx"
 #include "GEOM_Engine.hxx"
index ff5f7a1377a2aa2bf2e67ab80244ec7e8b295d15..fddf2e7244456aef6178ec79a014dfeaaae9624f 100644 (file)
@@ -23,6 +23,8 @@
 // Project   : SALOME
 // $Header$
 
+using namespace std;
+
 #include <Standard_Stream.hxx>
 
 #include "GEOMImpl_IShapesOperations.hxx"
@@ -640,7 +642,7 @@ Handle(TColStd_HSequenceOfTransient) GEOMImpl_IShapesOperations::GetGlueFaces
   Handle(GEOM_Function) aFunction = theShape->GetLastFunction();
   GEOM::TPythonDump pd (aFunction, /*append=*/true);
   pd << "[" << anAsciiList.ToCString();
-  pd << "] = geompy.GetGlueFaces" << theShape << ", " << theTolerance << ")";
+  pd << "] = geompy.GetGlueFaces(" << theShape << ", " << theTolerance << ")";
 
   SetErrorCode(OK);
 
index 8e5c6067fb7fc74b726636573d91076032b4e85e..3d2a6b77b8709f2437ddd3d6d5be3186e8adbc99 100644 (file)
@@ -28,6 +28,8 @@
 #ifndef _GEOMImpl_IShapesOperations_HXX_
 #define _GEOMImpl_IShapesOperations_HXX_
 
+using namespace std;
+
 #include "GEOM_IOperations.hxx"
 
 #include "GEOMAlgo_State.hxx"
index 4343903d5ed99bf381b465b8819a079b6e7669f2..349b59f09a25e0e321d5c60e29051a1d16c275a2 100644 (file)
@@ -147,7 +147,7 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const
       aFW->Load(aWire);
       aFW->FixReorder();
 
-      if (aFW->StatusReorder(ShapeExtend_FAIL1)) {
+      if        (aFW->StatusReorder(ShapeExtend_FAIL1)) {
         Standard_ConstructionError::Raise("Wire construction failed: several loops detected");
       } else if (aFW->StatusReorder(ShapeExtend_FAIL)) {
         Standard_ConstructionError::Raise("Wire construction failed");
@@ -155,6 +155,13 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const
         Standard_ConstructionError::Raise("Wire construction failed: some gaps detected");
       } else {
       }
+
+      aFW->ClosedWireMode() = Standard_False;
+      aFW->FixConnected();
+      if (aFW->StatusConnected(ShapeExtend_FAIL)) {
+        Standard_ConstructionError::Raise("Wire construction failed: cannot build connected wire");
+      }
+
       aShape = aFW->WireAPIMake();
     }
   }
index 520fbc2fe4bde0ec244836d3f5ab3e89d613d5fc..387c3b0d4b867c4058c2fa9a797faa39f91152da 100644 (file)
@@ -96,15 +96,15 @@ void GEOM_Superv_i::setGeomEngine()
 {
   if ( !CORBA::is_nil(myGeomEngine) ) 
     return;
-  // get GEOM_Gen engine
-  /*
-  SALOME_LifeCycleCORBA* lcc = new SALOME_LifeCycleCORBA( name_service );
-  Engines::Component_var comp = lcc->FindOrLoad_Component( "FactoryServer", "GEOM" );
-  */
 
+  // get GEOM_Gen engine
   Engines::Container_var cont=GetContainerRef();
-  cont->load_component_Library("GEOM");
-  Engines::Component_var comp=cont->create_component_instance("GEOM",0);
+  CORBA::String_var container_name=cont->name();
+  std::string shortName=container_name.in();
+  shortName=shortName.substr(12); // substract "/Containers/"
+  SALOME_LifeCycleCORBA* lcc = new SALOME_LifeCycleCORBA( name_service );
+  Engines::Component_var comp = lcc->FindOrLoad_Component( shortName.c_str(), "GEOM" );
+  delete lcc;
 
   myGeomEngine = GEOM::GEOM_Gen::_narrow(comp);
 }
index 67188c761ae3bd37df5ec70d0ec93497943e5449..4c2d3675aa55891043393d4f62a7f57c5b76746c 100644 (file)
@@ -160,7 +160,9 @@ def TestAll (geompy, math):
   #Create advanced objects
   Copy       = geompy.MakeCopy(Box)                      #(GEOM_Object_ptr)->GEOM_Object_ptr
   Prism      = geompy.MakePrismVecH(Face, vz, 100.0)     #(2 GEOM_Object_ptr, Double)->GEOM_Object_ptr
+  Prism2Ways = geompy.MakePrismVecH2Ways(Face, vz, 10.0) #(2 GEOM_Object_ptr, Double)->GEOM_Object_ptr
   Revolution = geompy.MakeRevolution(Face, vz, angle2)   #
+  Revolution2Ways = geompy.MakeRevolution(Face, vz, angle1)   #
   Filling    = geompy.MakeFilling(Compound, mindeg, maxdeg,
                                   tol2d, tol3d, nbiter)  #(GEOM_Object_ptr, 4 Doubles, Short)->GEOM_Object_ptr
   Pipe       = geompy.MakePipe(Wire, Edge)               #(2 GEOM_Object_ptr)->GEOM_Object_ptr
@@ -304,7 +306,9 @@ def TestAll (geompy, math):
 
   id_Copy       = geompy.addToStudy(Copy,       "Copy")
   id_Prism      = geompy.addToStudy(Prism,      "Prism")
+  id_Prism2Ways = geompy.addToStudy(Prism2Ways, "Prism2Ways")
   id_Revolution = geompy.addToStudy(Revolution, "Revolution")
+  id_Revolution2Ways = geompy.addToStudy(Revolution2Ways, "Revolution2Ways")
   id_Filling    = geompy.addToStudy(Filling,    "Filling")
   id_Pipe       = geompy.addToStudy(Pipe,       "Pipe")
   id_Sewing     = geompy.addToStudy(Sewing,     "Sewing")
index 2f37c4e86c241faa2bde0a99054000c992adbefb..5853af96666764107117bf8f5701a78a189606c0 100644 (file)
@@ -666,6 +666,20 @@ class geompyDC(GEOM._objref_GEOM_Gen):
             anObj = self.PrimOp.MakePrismVecH(theBase, theVec, theH)
             RaiseIfFailed("MakePrismVecH", self.PrimOp)
             return anObj
+
+        ## Create a shape by extrusion of the base shape along the vector,
+        #  i.e. all the space, transfixed by the base shape during its translation
+        #  along the vector on the given distance in 2 Ways (forward/backward) .
+        #  @param theBase Base shape to be extruded.
+        #  @param theVec Direction of extrusion.
+        #  @param theH Prism dimension along theVec in forward direction.
+        #  @return New GEOM_Object, containing the created prism.
+        #
+        #  Example: see GEOM_TestAll.py
+        def MakePrismVecH2Ways(self, theBase, theVec, theH):
+            anObj = self.PrimOp.MakePrismVecH2Ways(theBase, theVec, theH)
+            RaiseIfFailed("MakePrismVecH2Ways", self.PrimOp)
+            return anObj
         
         ## Create a shape by extrusion of the base shape along
         #  the path shape. The path shape can be a wire or an edge.
@@ -692,6 +706,11 @@ class geompyDC(GEOM._objref_GEOM_Gen):
             anObj = self.PrimOp.MakeRevolutionAxisAngle(theBase, theAxis, theAngle)
             RaiseIfFailed("MakeRevolutionAxisAngle", self.PrimOp)
             return anObj
+        ## The Same Revolution but in both ways forward&backward.
+        def MakeRevolution2Ways(self, theBase, theAxis, theAngle):
+            anObj = self.PrimOp.MakeRevolutionAxisAngle2Ways(theBase, theAxis, theAngle)
+            RaiseIfFailed("MakeRevolutionAxisAngle2Ways", self.PrimOp)
+            return anObj
         
         ## Create a shell or solid passing through set of sections.Sections should be wires,edges or vertices.
         #  @param theSeqSections - set of specified sections.
@@ -1371,11 +1390,11 @@ class geompyDC(GEOM._objref_GEOM_Gen):
         
         ## Create a filling from the given compound of contours.
         #  @param theShape the compound of contours
-        #  @param theMinDeg a minimal degree
-        #  @param theMaxDeg a maximal degree
-        #  @param theTol2D a 2d tolerance
-        #  @param theTol3D a 3d tolerance
-        #  @param theNbIter a number of iteration
+        #  @param theMinDeg a minimal degree of BSpline surface to create
+        #  @param theMaxDeg a maximal degree of BSpline surface to create
+        #  @param theTol2D a 2d tolerance to be reached
+        #  @param theTol3D a 3d tolerance to be reached
+        #  @param theNbIter a number of iteration of approximation algorithm
         #  @return New GEOM_Object, containing the created filling surface.
         #
         #  Example: see GEOM_TestAll.py
@@ -1595,7 +1614,7 @@ class geompyDC(GEOM._objref_GEOM_Gen):
             anObj = self.TrsfOp.TranslateVectorCopy(theObject, theVector)
             RaiseIfFailed("TranslateVectorCopy", self.TrsfOp)
             return anObj
-        
+
         ## Rotate the given object around the given axis
         #  on the given angle, creating its copy before the rotatation.
         #  @param theObject The object to be rotated.
index fbeac2c3b1a96aa41d2ff2f6ddfe0dea6dae597a..d723e1e80329e4154dc5183aecfc535f49586b11 100644 (file)
@@ -174,7 +174,7 @@ void RepairGUI_GlueDlg::Init()
   connect( mySubShapesChk, SIGNAL( stateChanged( int ) ), this, SLOT( onSubShapesChk() ) );
 
   connect( ((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(), 
-          SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()) );
+          SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()) );
 
   connect(myDetectBtn, SIGNAL(clicked()), this, SLOT(onDetect()));
 
@@ -240,8 +240,8 @@ void RepairGUI_GlueDlg::ConstructorsClicked( int constructorId )
 
   myEditCurrentArgument->setFocus();
 
-  connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(), 
-          SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
+  connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(),
+         SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
 
   qApp->processEvents();
   updateGeometry();
@@ -294,8 +294,10 @@ bool RepairGUI_GlueDlg::ClickOnApply()
 //=================================================================================
 void RepairGUI_GlueDlg::SelectionIntoArgument()
 {
-  if ( mySubShapesChk->isChecked() &&  getConstructorId() == 1 )
+  if ( mySubShapesChk->isChecked() &&  getConstructorId() == 1 ) {
+    updateButtonState();
     return;
+  }
   
   erasePreview();
   myEditCurrentArgument->setText("");
@@ -350,7 +352,7 @@ void RepairGUI_GlueDlg::LineEditReturnPressed()
 void RepairGUI_GlueDlg::ActivateThisDialog()
 {
   GEOMBase_Skeleton::ActivateThisDialog();
-  connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(), 
+  connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(),
          SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
 
   //GroupPoints->LineEdit1->setText("");
@@ -651,6 +653,8 @@ void RepairGUI_GlueDlg::onDetect()
     msg = tr( "THERE_ARE_NO_FACES_FOR_GLUING" );
   }
   
+  connect( ((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(),
+          SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()) ) ;
   SUIT_MessageBox::info1( this, tr( "GEOM_FREE_BOUNDS_TLT" ), msg, "Close" );
   updateButtonState();
   activateSelection();
@@ -667,15 +671,15 @@ void RepairGUI_GlueDlg::activateSelection()
   int anId = getConstructorId();
   if ( anId == 0 )  // Case of whole gluing
   {
-    disconnect( ((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(), 
-               SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()) ) ;
+    disconnect( ((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(),
+               SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()) ) ;
     
     globalSelection( GEOM_ALLSHAPES );
     if (myObject->_is_nil()) 
       SelectionIntoArgument();
 
-    connect( ((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(), 
-             SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()) ) ;
+    connect( ((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(),
+            SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()) ) ;
   } 
   else // Second case of gluing
   {
@@ -684,10 +688,13 @@ void RepairGUI_GlueDlg::activateSelection()
     else 
     {
       displayPreview( true, false, false, 2/*line width*/, 1/*display mode*/, Quantity_NOC_RED );
+     disconnect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(),
+               SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()) ) ;
       globalSelection( GEOM_PREVIEW );
-    }
+      connect( ((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(),
+              SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()) ) ;
+    } 
   }
-  
   updateViewer();
 }
 
@@ -706,9 +713,13 @@ void RepairGUI_GlueDlg::updateButtonState()
   }
   else
   {
+    bool wasSelected = false;
+    SALOME_ListIteratorOfListIO it ( selectedIO() );
+    if (it.More() > 0)
+      wasSelected = true;
     bool wasDetected = myTmpObjs.size() ? true : false;
-    buttonOk->setEnabled( hasMainObj && wasDetected );
-    buttonApply->setEnabled( hasMainObj && wasDetected );
+    buttonOk->setEnabled( hasMainObj && wasDetected && wasSelected);
+    buttonApply->setEnabled( hasMainObj && wasDetected && wasSelected);
     mySubShapesChk->setEnabled( hasMainObj && wasDetected );
     myDetectBtn->setEnabled( hasMainObj );
     if ( !hasMainObj || !wasDetected )