Salome HOME
0022750: [EDF] Improve ergonomics of the "Detect Self-intersections" dialog box
authorskv <skv@opencascade.com>
Mon, 13 Oct 2014 08:14:17 +0000 (12:14 +0400)
committervsr <vsr@opencascade.com>
Thu, 13 Nov 2014 11:16:40 +0000 (14:16 +0300)
doc/salome/gui/GEOM/images/measures11.png
doc/salome/gui/GEOM/input/check_self_intersections.doc
idl/GEOM_Gen.idl
src/GEOMGUI/GEOM_msg_en.ts
src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx
src/GEOMImpl/GEOMImpl_IMeasureOperations.hxx
src/GEOM_I/GEOM_IMeasureOperations_i.cc
src/GEOM_I/GEOM_IMeasureOperations_i.hh
src/GEOM_SWIG/geomBuilder.py
src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.cxx
src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.h

index 85af6f187502f209f551313aaf1f40888065dd65..fc1cea58214c525cefcd4af5306907b0ca3ad14b 100644 (file)
Binary files a/doc/salome/gui/GEOM/images/measures11.png and b/doc/salome/gui/GEOM/images/measures11.png differ
index 86c556786c47d1a54dc5626f3e20ad018e66157e..7446f3dd38f1a63d7a020e8720691e1662e1e785 100644 (file)
@@ -8,9 +8,16 @@ This operation checks the topology of the selected shape to detect self-intersec
 
 In this dialog:
 
 
 In this dialog:
 
-- \b Object - the checked object. \b Selection button allows picking it in the viewer or in the object browser. 
-- \b Errors list contains the list of intersections. Select the intersection to show <b>Incriminated Sub-shapes</b> in the field to the right. 
-
+- \b Object - the checked object. \b Selection button allows picking it in the viewer or in the object browser.
+- <b>Level of check</b> - The combo box that allows to set the level of checking shape on self-interference.
+  It defines which interferferences will be checked. Default value is "All interferences".
+- <b>Compute self-intersections</b> button computes self-interferences.
+- \b Summary section contains the general report if the object has self-intersections and/or if errors are occured during computation.
+- \b Self-intersections list contains the list of self-intersections detected.
+Select the intersection to show <b>Sub-shapes</b> in the field to the right. 
+- \b Apply and <b>Apply and Close</b> buttons are used to store selected self-intersected shapes in the study for further analysis.
+If no shapes are selected, but an intersection is selected the both of intersected shapes are stored. If no intersections selected
+all shapes of all intersections are stored in the study.
 
 \note This tool is useful for detection of shapes, not suitable for
 arguments of Boolean operations and Partition algorithm.
 
 \note This tool is useful for detection of shapes, not suitable for
 arguments of Boolean operations and Partition algorithm.
@@ -18,8 +25,10 @@ For more information about Partition and Boolean Operations Algorithms
 and their limitations refer to <a href="SALOME_BOA_PA.pdf">this document</a>.
 
 \n <b>Result:</b> Boolean.
 and their limitations refer to <a href="SALOME_BOA_PA.pdf">this document</a>.
 
 \n <b>Result:</b> Boolean.
-\n <b>TUI Command:</b> <em>geompy.CheckSelfIntersections(theShape),</em>
-where \em theShape is the shape checked for validity.
+\n <b>TUI Command:</b> <em>geompy.CheckSelfIntersections(theShape, theCheckLevel = GEOM.SI_ALL),</em> \n
+where: \n
+\em theShape is the shape checked for validity. \n
+\em theCheckLevel is the level of check. Default value is GEOM.SI_ALL to check all interferences.
 
 See also a \ref tui_check_self_intersections_page "TUI example".
 
 
 See also a \ref tui_check_self_intersections_page "TUI example".
 
index e4bb0840b428fa796a35d5d372eb20b8aa1094b8..e4a539f91dca5bcb2ab447ea545d70ec04c198f5 100644 (file)
@@ -188,6 +188,20 @@ module GEOM
     FDT_String
   };
 
     FDT_String
   };
 
+  /**
+   * This enumeration represents the level of checking shape on
+   * self-interference. It defines which interferferences will be checked.
+   */
+  enum si_check_level
+  {
+    SI_V_V,     // only V/V interferences
+    SI_V_E,     // V/V and V/E interferences
+    SI_E_E,     // V/V, V/E and E/E interferences
+    SI_V_F,     // V/V, V/E, E/E and V/F interferences
+    SI_E_F,     // V/V, V/E, E/E, V/F and E/F interferences
+    SI_ALL      // all interferences
+  };
+
 
  /*!
    * \brief Object creation parameters
 
  /*!
    * \brief Object creation parameters
@@ -4148,10 +4162,12 @@ module GEOM
     /*!
      *  \brief Check a topology of the given shape on self-intersections presence.
      *  \param theShape Shape to check validity of.
     /*!
      *  \brief Check a topology of the given shape on self-intersections presence.
      *  \param theShape Shape to check validity of.
+     *  \param theCheckLevel the level of self-interference check.
      *  \param theIntersections Output. List of intersected sub-shapes IDs, it contains pairs of IDs.
      *  \return TRUE, if the shape does not have any self-intersections.
      */
     boolean CheckSelfIntersections (in GEOM_Object theShape,
      *  \param theIntersections Output. List of intersected sub-shapes IDs, it contains pairs of IDs.
      *  \return TRUE, if the shape does not have any self-intersections.
      */
     boolean CheckSelfIntersections (in GEOM_Object theShape,
+                                    in long        theCheckLevel,
                                     out ListOfLong theIntersections);
 
     /*!
                                     out ListOfLong theIntersections);
 
     /*!
index d9ed8d59b262398928d0c67f27986a25a444a354..5d7d875bcf2e8ab46ebbe050a567b6d626022cd1 100644 (file)
@@ -415,22 +415,6 @@ Please, select face, shell or solid and try again</translation>
         <source>GEOM_CHECK_SELF_INTERSECTIONS</source>
         <translation>Detect Self-intersections</translation>
     </message>
         <source>GEOM_CHECK_SELF_INTERSECTIONS</source>
         <translation>Detect Self-intersections</translation>
     </message>
-    <message>
-        <source>GEOM_CHECK_SELF_INTERSECTIONS_FAILED</source>
-        <translation>Detection of self-intersections failed</translation>
-    </message>
-    <message>
-        <source>GEOM_NO_SELF_INTERSECTIONS</source>
-        <translation>There are no self-intersections in the shape</translation>
-    </message>
-    <message>
-        <source>GEOM_SELF_INTERSECTIONS_FOUND</source>
-        <translation>Some self-intersections detected</translation>
-    </message>
-    <message>
-        <source>GEOM_CHECK_SELF_INTERSECTIONS_ERRORS</source>
-        <translation>Warning: there were errors during the operation, so the list may be incomplete.</translation>
-    </message>
     <message>
         <source>GEOM_CIRCLE</source>
         <translation>Circle</translation>
     <message>
         <source>GEOM_CIRCLE</source>
         <translation>Circle</translation>
@@ -6927,4 +6911,71 @@ Do you want to create new material?</translation>
         <translation>V-Isoline</translation>
     </message>
 </context>
         <translation>V-Isoline</translation>
     </message>
 </context>
+<context>
+    <name>MeasureGUI_CheckSelfIntersectionsDlg</name>
+    <message>
+        <source>GEOM_CHECK_INTE_INTERSECTIONS</source>
+        <translation>Self-intersections</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_INTE_SUBSHAPES</source>
+        <translation>Sub-shapes</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_INTE_CHECK_LEVEL</source>
+        <translation>Level of check</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_INTE_SUMMARY</source>
+        <translation>Summary</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_INTE_COMPUTE</source>
+        <translation>Compute self-intersections</translation>
+    </message>
+    <message>
+        <source>GEOM_SELF_INTERSECTION_NAME</source>
+        <translation>Self_intersection</translation>
+    </message>
+    <message>
+        <source>GEOM_NO_SELF_INTERSECTIONS</source>
+        <translation>There are no self-intersections in the shape</translation>
+    </message>
+    <message>
+        <source>GEOM_SELF_INTERSECTIONS_FOUND</source>
+        <translation>Some self-intersections detected</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_SELF_INTERSECTIONS_FAILED</source>
+        <translation>Detection of self-intersections failed</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_SELF_INTERSECTIONS_ERRORS</source>
+        <translation>Warning: there were errors during the operation, so the list may be incomplete.</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_INTE_V_V</source>
+        <translation>Vertex to Vertex</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_INTE_V_E</source>
+        <translation>Vertex to Edge + all above</translation>
+    </message>
+  <message>
+    <source>GEOM_CHECK_INTE_E_E</source>
+    <translation>Edge to Edge + all above</translation>
+  </message>
+  <message>
+    <source>GEOM_CHECK_INTE_V_F</source>
+    <translation>Vertex to Face + all above</translation>
+  </message>
+  <message>
+    <source>GEOM_CHECK_INTE_E_F</source>
+    <translation>Edge to Face + all above</translation>
+  </message>
+  <message>
+    <source>GEOM_CHECK_INTE_ALL</source>
+    <translation>All interferences</translation>
+  </message>
+</context>
 </TS>
 </TS>
index 0764495dcd426335f95dc57ab88f9977407d116b..fb2320ea5cef74e4d237a89c1b6be2ba9d7a1005 100644 (file)
@@ -1501,6 +1501,7 @@ TCollection_AsciiString GEOMImpl_IMeasureOperations::PrintShapeErrors
 //=============================================================================
 bool GEOMImpl_IMeasureOperations::CheckSelfIntersections
                          (Handle(GEOM_Object)                 theShape,
 //=============================================================================
 bool GEOMImpl_IMeasureOperations::CheckSelfIntersections
                          (Handle(GEOM_Object)                 theShape,
+                          const SICheckLevel                  theCheckLevel,
                           Handle(TColStd_HSequenceOfInteger)& theIntersections)
 {
   SetErrorCode(KO);
                           Handle(TColStd_HSequenceOfInteger)& theIntersections)
 {
   SetErrorCode(KO);
@@ -1534,6 +1535,7 @@ bool GEOMImpl_IMeasureOperations::CheckSelfIntersections
   //
   BOPAlgo_CheckerSI aCSI; // checker of self-interferences
   aCSI.SetArguments(aLCS);
   //
   BOPAlgo_CheckerSI aCSI; // checker of self-interferences
   aCSI.SetArguments(aLCS);
+  aCSI.SetLevelOfCheck(theCheckLevel);
 
   // 1. Launch the checker
   aCSI.Perform();
 
   // 1. Launch the checker
   aCSI.Perform();
index 86d0a9c7b2b83125f67acb9e36dda8658b4c5ab4..3b8ae3d42279502ae9214b52053417027a80253b 100644 (file)
@@ -85,6 +85,20 @@ class GEOMImpl_IMeasureOperations : public GEOM_IOperations {
     SK_ADVANCED,     // all advanced shapes (temporary implementation)
   };
 
     SK_ADVANCED,     // all advanced shapes (temporary implementation)
   };
 
+  /**
+   * This enumeration represents the level of checking shape on
+   * self-interference. It defines which interferferences will be checked.
+   */
+  enum SICheckLevel
+  {
+    SI_V_V = 0, // only V/V interferences
+    SI_V_E,     // V/V and V/E interferences
+    SI_E_E,     // V/V, V/E and E/E interferences
+    SI_V_F,     // V/V, V/E, E/E and V/F interferences
+    SI_E_F,     // V/V, V/E, E/E, V/F and E/F interferences
+    SI_ALL      // all interferences
+  };
+
   Standard_EXPORT ShapeKind KindOfShape (Handle(GEOM_Object) theShape,
                                          Handle(TColStd_HSequenceOfInteger)& theIntegers,
                                          Handle(TColStd_HSequenceOfReal)&    theDoubles);
   Standard_EXPORT ShapeKind KindOfShape (Handle(GEOM_Object) theShape,
                                          Handle(TColStd_HSequenceOfInteger)& theIntegers,
                                          Handle(TColStd_HSequenceOfReal)&    theDoubles);
@@ -141,6 +155,7 @@ class GEOMImpl_IMeasureOperations : public GEOM_IOperations {
                                    const std::list<ShapeError> &theErrors);
 
   Standard_EXPORT bool CheckSelfIntersections (Handle(GEOM_Object) theShape,
                                    const std::list<ShapeError> &theErrors);
 
   Standard_EXPORT bool CheckSelfIntersections (Handle(GEOM_Object) theShape,
+                                               const SICheckLevel  theCheckLevel,
                                                Handle(TColStd_HSequenceOfInteger)& theIntersections);
 
   Standard_EXPORT TCollection_AsciiString IsGoodForSolid (Handle(GEOM_Object) theShape);
                                                Handle(TColStd_HSequenceOfInteger)& theIntersections);
 
   Standard_EXPORT TCollection_AsciiString IsGoodForSolid (Handle(GEOM_Object) theShape);
index b6785bda922a9edf0836974fa0a7b9698892d460..0d4a89effb2514e7e598e33197b4dbf2eb43b4dd 100644 (file)
@@ -706,6 +706,7 @@ char* GEOM_IMeasureOperations_i::PrintShapeErrors
  */
 //=============================================================================
 CORBA::Boolean GEOM_IMeasureOperations_i::CheckSelfIntersections (GEOM::GEOM_Object_ptr theShape,
  */
 //=============================================================================
 CORBA::Boolean GEOM_IMeasureOperations_i::CheckSelfIntersections (GEOM::GEOM_Object_ptr theShape,
+                                                                  CORBA::Long           theCheckLevel,
                                                                   GEOM::ListOfLong_out  theIntersections)
 {
   // Set a not done flag
                                                                   GEOM::ListOfLong_out  theIntersections)
 {
   // Set a not done flag
@@ -720,10 +721,35 @@ CORBA::Boolean GEOM_IMeasureOperations_i::CheckSelfIntersections (GEOM::GEOM_Obj
   Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
 
   if (!aShape.IsNull()) {
   Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
 
   if (!aShape.IsNull()) {
+    GEOMImpl_IMeasureOperations::SICheckLevel aCheckLevel;
+
+    switch(theCheckLevel) {
+    case GEOM::SI_V_V:
+      aCheckLevel = GEOMImpl_IMeasureOperations::SI_V_V;
+      break;
+    case GEOM::SI_V_E:
+      aCheckLevel = GEOMImpl_IMeasureOperations::SI_V_E;
+      break;
+    case GEOM::SI_E_E:
+      aCheckLevel = GEOMImpl_IMeasureOperations::SI_E_E;
+      break;
+    case GEOM::SI_V_F:
+      aCheckLevel = GEOMImpl_IMeasureOperations::SI_V_F;
+      break;
+    case GEOM::SI_E_F:
+      aCheckLevel = GEOMImpl_IMeasureOperations::SI_E_F;
+      break;
+    case GEOM::SI_ALL:
+    default:
+      aCheckLevel = GEOMImpl_IMeasureOperations::SI_ALL;
+      break;
+    }
+
     Handle(TColStd_HSequenceOfInteger) anIntegers = new TColStd_HSequenceOfInteger;
 
     // Detect self-intersections
     Handle(TColStd_HSequenceOfInteger) anIntegers = new TColStd_HSequenceOfInteger;
 
     // Detect self-intersections
-    isGood = GetOperations()->CheckSelfIntersections(aShape, anIntegers);
+    isGood = GetOperations()->CheckSelfIntersections
+      (aShape, aCheckLevel, anIntegers);
 
     int nbInts = anIntegers->Length();
 
 
     int nbInts = anIntegers->Length();
 
index 690ac5390fb0b31d2df461519b7dfbe4321c5b2f..391de3f48e60807d4b2689c1a1daf4b094cb4812 100644 (file)
@@ -97,6 +97,7 @@ class GEOM_I_EXPORT GEOM_IMeasureOperations_i :
               const GEOM::GEOM_IMeasureOperations::ShapeErrors &theErrors);
 
   CORBA::Boolean CheckSelfIntersections (GEOM::GEOM_Object_ptr theShape,
               const GEOM::GEOM_IMeasureOperations::ShapeErrors &theErrors);
 
   CORBA::Boolean CheckSelfIntersections (GEOM::GEOM_Object_ptr theShape,
+                                         CORBA::Long           theCheckLevel,
                                          GEOM::ListOfLong_out  theIntersections);
 
   char* IsGoodForSolid (GEOM::GEOM_Object_ptr theShape);
                                          GEOM::ListOfLong_out  theIntersections);
 
   char* IsGoodForSolid (GEOM::GEOM_Object_ptr theShape);
index 91afbf8a856382018aceec95a7fb52382dff46d6..7d1ab412dd47c8bcf60630dc15281c14706bdbd0 100644 (file)
@@ -10588,22 +10588,38 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
 
         ## Detect self-intersections in the given shape.
         #  @param theShape Shape to check.
 
         ## Detect self-intersections in the given shape.
         #  @param theShape Shape to check.
+        #  @param theCheckLevel is the level of self-intersection check.
+        #         Possible input values are:
+        #         - GEOM.SI_V_V(0) - only V/V interferences
+        #         - GEOM.SI_V_E(1) - V/V and V/E interferences
+        #         - GEOM.SI_E_E(2) - V/V, V/E and E/E interferences
+        #         - GEOM.SI_V_F(3) - V/V, V/E, E/E and V/F interferences
+        #         - GEOM.SI_E_F(4) - V/V, V/E, E/E, V/F and E/F interferences
+        #         - GEOM.SI_ALL(5) - all interferences.
         #  @return TRUE, if the shape contains no self-intersections.
         #
         #  @ref tui_measurement_tools_page "Example"
         @ManageTransactions("MeasuOp")
         #  @return TRUE, if the shape contains no self-intersections.
         #
         #  @ref tui_measurement_tools_page "Example"
         @ManageTransactions("MeasuOp")
-        def CheckSelfIntersections(self, theShape):
+        def CheckSelfIntersections(self, theShape, theCheckLevel = GEOM.SI_ALL):
             """
             Detect self-intersections in the given shape.
 
             Parameters:
                 theShape Shape to check.
             """
             Detect self-intersections in the given shape.
 
             Parameters:
                 theShape Shape to check.
-
+                theCheckLevel is the level of self-intersection check.
+                  Possible input values are:
+                   - GEOM.SI_V_V(0) - only V/V interferences
+                   - GEOM.SI_V_E(1) - V/V and V/E interferences
+                   - GEOM.SI_E_E(2) - V/V, V/E and E/E interferences
+                   - GEOM.SI_V_F(3) - V/V, V/E, E/E and V/F interferences
+                   - GEOM.SI_E_F(4) - V/V, V/E, E/E, V/F and E/F interferences
+                   - GEOM.SI_ALL(5) - all interferences.
             Returns:
                 TRUE, if the shape contains no self-intersections.
             """
             # Example: see GEOM_TestMeasures.py
             Returns:
                 TRUE, if the shape contains no self-intersections.
             """
             # Example: see GEOM_TestMeasures.py
-            (IsValid, Pairs) = self.MeasuOp.CheckSelfIntersections(theShape)
+            (IsValid, Pairs) = self.MeasuOp.CheckSelfIntersections(theShape, EnumToLong(theCheckLevel))
             RaiseIfFailed("CheckSelfIntersections", self.MeasuOp)
             return IsValid
 
             RaiseIfFailed("CheckSelfIntersections", self.MeasuOp)
             return IsValid
 
index de712233dab1132596b4028ef6e5cbbfa7d4d95e..de58de84c5a9d356457fe1d8b7ad9f9781071b60 100644 (file)
@@ -24,8 +24,9 @@
 // File   : MeasureGUI_CheckSelfIntersectionsDlg.cxx
 
 #include "MeasureGUI_CheckSelfIntersectionsDlg.h"
 // File   : MeasureGUI_CheckSelfIntersectionsDlg.cxx
 
 #include "MeasureGUI_CheckSelfIntersectionsDlg.h"
-#include "MeasureGUI_Widgets.h"
+#include "MeasureGUI.h"
 
 
+#include <SUIT_OverrideCursor.h>
 #include <SUIT_Session.h>
 #include <SUIT_ResourceMgr.h>
 #include <LightApp_SelectionMgr.h>
 #include <SUIT_Session.h>
 #include <SUIT_ResourceMgr.h>
 #include <LightApp_SelectionMgr.h>
@@ -34,6 +35,7 @@
 
 #include <TopTools_IndexedMapOfShape.hxx>
 #include <TopExp.hxx>
 
 #include <TopTools_IndexedMapOfShape.hxx>
 #include <TopExp.hxx>
+#include <TColStd_IndexedMapOfInteger.hxx>
 #include <TColStd_MapOfInteger.hxx>
 
 #include <DlgRef.h>
 #include <TColStd_MapOfInteger.hxx>
 
 #include <DlgRef.h>
@@ -41,6 +43,8 @@
 #include <GEOMBase.h>
 #include <GEOMImpl_Types.hxx>
 
 #include <GEOMBase.h>
 #include <GEOMImpl_Types.hxx>
 
+#include <QListWidget>
+
 #define TEXTEDIT_FONT_FAMILY "Courier"
 #define TEXTEDIT_FONT_SIZE 11
 
 #define TEXTEDIT_FONT_FAMILY "Courier"
 #define TEXTEDIT_FONT_SIZE 11
 
 //            true to construct a modal dialog.
 //=================================================================================
 MeasureGUI_CheckSelfIntersectionsDlg::MeasureGUI_CheckSelfIntersectionsDlg (GeometryGUI* GUI, QWidget* parent)
 //            true to construct a modal dialog.
 //=================================================================================
 MeasureGUI_CheckSelfIntersectionsDlg::MeasureGUI_CheckSelfIntersectionsDlg (GeometryGUI* GUI, QWidget* parent)
-  : MeasureGUI_Skeleton(GUI, parent, false)
+  : GEOMBase_Skeleton (GUI, parent, false),
+    myTextView        (0),
+    mySelButton       (0),
+    myEditObjName     (0),
+    myLevelBox        (0),
+    myComputeButton   (0),
+    myInteList        (0),
+    myShapeList       (0)
 {
   SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
   QPixmap image0 (aResMgr->loadPixmap("GEOM", tr("ICON_DLG_CHECK_SELF_INTERSECTIONS")));
 {
   SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
   QPixmap image0 (aResMgr->loadPixmap("GEOM", tr("ICON_DLG_CHECK_SELF_INTERSECTIONS")));
@@ -63,27 +74,60 @@ MeasureGUI_CheckSelfIntersectionsDlg::MeasureGUI_CheckSelfIntersectionsDlg (Geom
   /***************************************************************/
   mainFrame()->GroupConstructors->setTitle(tr("GEOM_CHECK_SELF_INTERSECTIONS"));
   mainFrame()->RadioButton1->setIcon(image0);
   /***************************************************************/
   mainFrame()->GroupConstructors->setTitle(tr("GEOM_CHECK_SELF_INTERSECTIONS"));
   mainFrame()->RadioButton1->setIcon(image0);
+  mainFrame()->RadioButton2->setAttribute( Qt::WA_DeleteOnClose );
+  mainFrame()->RadioButton2->close();
+  mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose );
+  mainFrame()->RadioButton3->close();
+
+  QGroupBox *aGrp      = new QGroupBox(tr("GEOM_CHECK_INFOS"));
+  QLabel    *anObjLbl  = new QLabel(tr("GEOM_OBJECT"));
+  QLabel    *anInteLbl = new QLabel(tr("GEOM_CHECK_INTE_INTERSECTIONS"));
+  QLabel    *aShapeLbl = new QLabel(tr("GEOM_CHECK_INTE_SUBSHAPES"));
+  QLabel    *aLevelLbl = new QLabel(tr("GEOM_CHECK_INTE_CHECK_LEVEL"));
+  QLabel    *aSummaryLbl = new QLabel(tr("GEOM_CHECK_INTE_SUMMARY"));
+  QFont      aFont (TEXTEDIT_FONT_FAMILY, TEXTEDIT_FONT_SIZE);
 
 
-  myGrp = new MeasureGUI_1Sel1TextView2ListBox (centralWidget());
-  myGrp->GroupBox1->setTitle(tr("GEOM_CHECK_INFOS"));
-  myGrp->TextLabel1->setText(tr("GEOM_OBJECT"));
-
-  myGrp->TextView1->setReadOnly(true);
-  QFont aFont (TEXTEDIT_FONT_FAMILY, TEXTEDIT_FONT_SIZE);
   aFont.setStyleHint(QFont::TypeWriter, QFont::PreferAntialias);
   aFont.setStyleHint(QFont::TypeWriter, QFont::PreferAntialias);
-  myGrp->TextView1->setFont(aFont);
+  myTextView = new QTextBrowser;
+  myTextView->setReadOnly(true);
+  myTextView->setFont(aFont);
+
+  mySelButton = new QPushButton;
+  mySelButton->setIcon(image1);
+  mySelButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+
+  myEditObjName = new QLineEdit;
+  myEditObjName->setReadOnly(true);
+
+  myLevelBox = new QComboBox;
 
 
-  myGrp->PushButton1->setIcon(image1);
-  myGrp->LineEdit1->setReadOnly(true);
+  myComputeButton = new QPushButton(tr("GEOM_CHECK_INTE_COMPUTE"));
 
 
-  myGrp->TextLabel2->setText(tr("GEOM_CHECK_BLOCKS_COMPOUND_ERRORS"));
-  myGrp->TextLabel3->setText(tr("GEOM_CHECK_BLOCKS_COMPOUND_SUBSHAPES"));
 
 
-  myGrp->ListBox2->setSelectionMode(QAbstractItemView::ExtendedSelection);
+  myInteList  = new QListWidget;
+  myShapeList = new QListWidget;
+  myShapeList->setSelectionMode(QAbstractItemView::ExtendedSelection);
+
+  QGridLayout *aGrpLayout = new QGridLayout(aGrp);
+
+  aGrpLayout->setMargin(9);
+  aGrpLayout->setSpacing(6);
+  aGrpLayout->addWidget(anObjLbl,        0, 0);
+  aGrpLayout->addWidget(anInteLbl,       5, 0);
+  aGrpLayout->addWidget(aShapeLbl,       5, 2);
+  aGrpLayout->addWidget(aLevelLbl,       1, 0);
+  aGrpLayout->addWidget(myLevelBox,      1, 1, 1, 2);
+  aGrpLayout->addWidget(myComputeButton, 2, 0, 1, 3);
+  aGrpLayout->addWidget(aSummaryLbl,     3, 0);
+  aGrpLayout->addWidget(myTextView,      4, 0, 1, 3);
+  aGrpLayout->addWidget(mySelButton,     0, 1);
+  aGrpLayout->addWidget(myEditObjName,   0, 2);
+  aGrpLayout->addWidget(myInteList,      6, 0, 1, 2);
+  aGrpLayout->addWidget(myShapeList,     6, 2);
 
   QVBoxLayout* layout = new QVBoxLayout (centralWidget());
   layout->setMargin(0); layout->setSpacing(6);
 
   QVBoxLayout* layout = new QVBoxLayout (centralWidget());
   layout->setMargin(0); layout->setSpacing(6);
-  layout->addWidget(myGrp);
+  layout->addWidget(aGrp);
 
   /***************************************************************/
 
 
   /***************************************************************/
 
@@ -107,94 +151,302 @@ MeasureGUI_CheckSelfIntersectionsDlg::~MeasureGUI_CheckSelfIntersectionsDlg()
 //=================================================================================
 void MeasureGUI_CheckSelfIntersectionsDlg::Init()
 {
 //=================================================================================
 void MeasureGUI_CheckSelfIntersectionsDlg::Init()
 {
-  mySelBtn = myGrp->PushButton1;
-  mySelEdit = myGrp->LineEdit1;
-  MeasureGUI_Skeleton::Init();
-
-  connect(myGrp->ListBox1, SIGNAL(itemSelectionChanged()), SLOT(onErrorsListSelectionChanged()));
-  connect(myGrp->ListBox2, SIGNAL(itemSelectionChanged()), SLOT(onSubShapesListSelectionChanged()));
+  // Fill in the combo box.
+  myLevelBox->insertItem(GEOM::SI_V_V, tr("GEOM_CHECK_INTE_V_V"));
+  myLevelBox->insertItem(GEOM::SI_V_E, tr("GEOM_CHECK_INTE_V_E"));
+  myLevelBox->insertItem(GEOM::SI_E_E, tr("GEOM_CHECK_INTE_E_E"));
+  myLevelBox->insertItem(GEOM::SI_V_F, tr("GEOM_CHECK_INTE_V_F"));
+  myLevelBox->insertItem(GEOM::SI_E_F, tr("GEOM_CHECK_INTE_E_F"));
+  myLevelBox->insertItem(GEOM::SI_ALL, tr("GEOM_CHECK_INTE_ALL"));
+  myLevelBox->setCurrentIndex(GEOM::SI_ALL);
+
+  connect(myGeomGUI,          SIGNAL(SignalDeactivateActiveDialog()),
+          this,               SLOT(DeactivateActiveDialog()));
+  connect(myGeomGUI,          SIGNAL(SignalCloseAllDialogs()),
+          this,               SLOT(ClickOnCancel()));
+  connect(buttonOk(),         SIGNAL(clicked()), this, SLOT(ClickOnOk()));
+  connect(buttonApply(),      SIGNAL(clicked()), this, SLOT(ClickOnApply()));
+  connect(mySelButton,        SIGNAL(clicked()),
+          this,               SLOT(SetEditCurrentArgument()));
+  connect(myInteList,         SIGNAL(itemSelectionChanged()),
+          SLOT(onInteListSelectionChanged()));
+  connect(myShapeList,        SIGNAL(itemSelectionChanged()),
+          SLOT(onSubShapesListSelectionChanged()));
+  connect(myLevelBox,         SIGNAL(currentIndexChanged(int)),
+          this,               SLOT(clear()));
+  connect(myComputeButton,    SIGNAL(clicked()), this, SLOT(onCompute()));
+
+  LightApp_SelectionMgr* aSel = myGeomGUI->getApp()->selectionMgr();
+
+  connect(aSel,               SIGNAL(currentSelectionChanged()),
+          this,               SLOT(SelectionIntoArgument()));
+
+  initName( tr( "GEOM_SELF_INTERSECTION_NAME") );
+  buttonOk()->setEnabled(false);
+  buttonApply()->setEnabled(false);
+  myComputeButton->setEnabled(false);
+  activateSelection();
+  SelectionIntoArgument();
 }
 
 //=================================================================================
 }
 
 //=================================================================================
-// function : processObject
+// function : clear
 // purpose  :
 //=================================================================================
 // purpose  :
 //=================================================================================
-void MeasureGUI_CheckSelfIntersectionsDlg::processObject()
+void MeasureGUI_CheckSelfIntersectionsDlg::clear()
 {
 {
-  myGrp->ListBox1->clear();
-  myGrp->ListBox2->clear();
+  myTextView->setText("");
+  disconnect(myInteList, SIGNAL(itemSelectionChanged()), this, 0);
+  disconnect(myShapeList, SIGNAL(itemSelectionChanged()), this, 0);
+  myInteList->clear();
+  myShapeList->clear();
+  connect(myInteList,    SIGNAL(itemSelectionChanged()),
+          SLOT(onInteListSelectionChanged()));
+  connect(myShapeList,    SIGNAL(itemSelectionChanged()),
+          SLOT(onSubShapesListSelectionChanged()));
   erasePreview();
   erasePreview();
+  buttonOk()->setEnabled(false);
+  buttonApply()->setEnabled(false);
+  myComputeButton->setEnabled(true);
+}
 
 
-  if (myObj->_is_nil())
-    return;
-
-  QString aMsg ("");
-  GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation());
-  bool isGood = false, isFailed = false;
-  int nbPairs = 0;
-  try {
-    isGood = anOper->CheckSelfIntersections(myObj, myInters);
-    nbPairs = myInters->length()/2;
-    if (nbPairs*2 != myInters->length()) {
-      isFailed = true;
-    }
-  }
-  catch (const SALOME::SALOME_Exception& e) {
-    SalomeApp_Tools::QtCatchCorbaException(e);
-    isFailed = true;
-  }
+//=================================================================================
+// function : onCompute
+// purpose  :
+//=================================================================================
+void MeasureGUI_CheckSelfIntersectionsDlg::onCompute()
+{
+  bool    hasSelfInte = false;
+  QString anErrMsg("");
 
 
-  if (!anOper->IsDone() && myInters->length() == 0) {
-    aMsg += tr(anOper->GetErrorCode());
-    myGrp->TextView1->setText(aMsg);
-    return;
-  }
-  else if (isFailed) {
-    aMsg += tr("GEOM_CHECK_SELF_INTERSECTIONS_FAILED");
-    myGrp->TextView1->setText(aMsg);
+  if (!findSelfIntersections(hasSelfInte, anErrMsg)) {
+    myTextView->setText(anErrMsg);
     return;
   }
 
     return;
   }
 
-  // Status
-  if (isGood) {
-    aMsg += tr("GEOM_NO_SELF_INTERSECTIONS");
-  }
-  else {
+  // Status and apply buttons
+  QString aMsg("");
+
+  if (hasSelfInte) {
     aMsg += tr("GEOM_SELF_INTERSECTIONS_FOUND");
     aMsg += tr("GEOM_SELF_INTERSECTIONS_FOUND");
+    buttonOk()->setEnabled(true);
+    buttonApply()->setEnabled(true);
+  } else {
+    aMsg += tr("GEOM_NO_SELF_INTERSECTIONS");
   }
 
   }
 
-  if (!anOper->IsDone()) {
+  if (!anErrMsg.isEmpty()) {
     aMsg += "\n\n";
     aMsg += "\n\n";
-    aMsg += tr("GEOM_CHECK_SELF_INTERSECTIONS_ERRORS");
+    aMsg += anErrMsg;
   }
 
   }
 
-  myGrp->TextView1->setText(aMsg);
+  myTextView->setText(aMsg);
 
   // Pairs
 
   // Pairs
-  QStringList aErrList;
-  QString aErrStr ("");
+  QStringList anInteList;
+  QString anInteStr ("");
+  int nbPairs = myInters->length()/2;
+
   for (int i = 1; i <= nbPairs; i++) {
   for (int i = 1; i <= nbPairs; i++) {
-    aErrStr = "Intersection # ";
-    aErrStr += QString::number(i);
-    aErrList.append(aErrStr);
+    anInteStr = "Intersection # ";
+    anInteStr += QString::number(i);
+    anInteList.append(anInteStr);
+  }
+
+  myInteList->addItems(anInteList);
+  myComputeButton->setEnabled(false);
+}
+
+//=================================================================================
+// function : ActivateThisDialog
+// purpose  :
+//=================================================================================
+void MeasureGUI_CheckSelfIntersectionsDlg::ActivateThisDialog()
+{
+  GEOMBase_Skeleton::ActivateThisDialog();
+
+  LightApp_SelectionMgr* aSel = myGeomGUI->getApp()->selectionMgr();
+  if ( aSel )
+    connect( aSel, SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
+
+  activateSelection();
+  DISPLAY_PREVIEW_MACRO
+}
+
+//=================================================================================
+// function : DeactivateActiveDialog()
+// purpose  : public slot to deactivate if active
+//=================================================================================
+void MeasureGUI_CheckSelfIntersectionsDlg::DeactivateActiveDialog()
+{
+  GEOMBase_Skeleton::DeactivateActiveDialog();
+}
+
+//=================================================================================
+// function : activateSelection
+// purpose  : 
+//=================================================================================
+void MeasureGUI_CheckSelfIntersectionsDlg::activateSelection()
+{
+  globalSelection(GEOM_ALLSHAPES);
+}
+
+//=================================================================================
+// function : ClickOnOk()
+// purpose  :
+//=================================================================================
+void MeasureGUI_CheckSelfIntersectionsDlg::ClickOnOk()
+{
+  if ( ClickOnApply() )
+    ClickOnCancel();
+}
+
+//=================================================================================
+// function : ClickOnApply()
+// purpose  :
+//=================================================================================
+bool MeasureGUI_CheckSelfIntersectionsDlg::ClickOnApply()
+{
+  if ( !onAccept() )
+    return false;
+
+  initName();
+  return true;
+}
+
+//=================================================================================
+// function : extractPrefix
+// purpose  :
+//=================================================================================
+bool MeasureGUI_CheckSelfIntersectionsDlg::extractPrefix() const
+{
+  return true;
+}
+
+//=================================================================================
+// function : createOperation
+// purpose  :
+//=================================================================================
+GEOM::GEOM_IOperations_ptr MeasureGUI_CheckSelfIntersectionsDlg::createOperation()
+{
+  return getGeomEngine()->GetIMeasureOperations( getStudyId() );
+}
+
+//=================================================================================
+// function : isValid
+// purpose  :
+//=================================================================================
+bool MeasureGUI_CheckSelfIntersectionsDlg::isValid( QString& )
+{
+  return !myObj->_is_nil();
+}
+
+//=================================================================================
+// function : SetEditCurrentArgument
+// purpose  :
+//=================================================================================
+void MeasureGUI_CheckSelfIntersectionsDlg::SetEditCurrentArgument()
+{
+  myEditObjName->setFocus();
+  SelectionIntoArgument();
+}
+
+//=================================================================================
+// function : SelectionIntoArgument
+// purpose  :
+//=================================================================================
+void MeasureGUI_CheckSelfIntersectionsDlg::SelectionIntoArgument()
+{
+  // Clear the dialog.
+  clear();
+  myObj = GEOM::GEOM_Object::_nil();
+
+  LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
+  SALOME_ListIO aSelList;
+  aSelMgr->selectedObjects(aSelList);
+
+  GEOM::GEOM_Object_var aSelectedObject = GEOM::GEOM_Object::_nil();
+
+  if (aSelList.Extent() > 0) {
+    aSelectedObject = GEOMBase::ConvertIOinGEOMObject( aSelList.First() );
+  }
+
+  if (aSelectedObject->_is_nil()) {
+    myEditObjName->setText("");
+    return;
+  }
+
+  myObj = aSelectedObject;
+  myEditObjName->setText(GEOMBase::GetName(myObj));
+}
+
+//=================================================================================
+// function : enterEvent
+// purpose  :
+//=================================================================================
+void MeasureGUI_CheckSelfIntersectionsDlg::enterEvent(QEvent *)
+{
+  if ( !mainFrame()->GroupConstructors->isEnabled() )
+    ActivateThisDialog();
+}
+
+//=================================================================================
+// function : findSelfIntersections
+// purpose  :
+//=================================================================================
+bool MeasureGUI_CheckSelfIntersectionsDlg::findSelfIntersections
+        (bool &HasSelfInte, QString &theErrMsg)
+{
+  if (myObj->_is_nil()) {
+    return false;
+  }
+
+  GEOM::GEOM_IMeasureOperations_var anOper =
+    GEOM::GEOM_IMeasureOperations::_narrow(getOperation());
+  bool isOK = true;
+  int  nbPairs  = 0;
+  int aLevel = myLevelBox->currentIndex();
+
+  try {
+    HasSelfInte = !anOper->CheckSelfIntersections(myObj, aLevel, myInters);
+    nbPairs = myInters->length()/2;
+
+    if (nbPairs*2 != myInters->length()) {
+      isOK = false;
+    }
+  }
+  catch (const SALOME::SALOME_Exception& e) {
+    SalomeApp_Tools::QtCatchCorbaException(e);
+    isOK = false;
+  }
+
+  if (!anOper->IsDone()) {
+    if (myInters->length() == 0) {
+      theErrMsg = tr(anOper->GetErrorCode());
+      isOK = false;
+    } else {
+      // Valid case. Display all computed self-intersections
+      theErrMsg = tr("GEOM_CHECK_SELF_INTERSECTIONS_ERRORS");
+    }
+  } else if (!isOK) {
+    theErrMsg = tr("GEOM_CHECK_SELF_INTERSECTIONS_FAILED");
   }
 
   }
 
-  myGrp->ListBox1->addItems(aErrList);
+  return isOK;
 }
 
 //=================================================================================
 }
 
 //=================================================================================
-// function : onErrorsListSelectionChanged
+// function : onInteListSelectionChanged
 // purpose  :
 //=================================================================================
 // purpose  :
 //=================================================================================
-void MeasureGUI_CheckSelfIntersectionsDlg::onErrorsListSelectionChanged()
+void MeasureGUI_CheckSelfIntersectionsDlg::onInteListSelectionChanged()
 {
   erasePreview();
 {
   erasePreview();
-  int aCurItem = myGrp->ListBox1->currentRow();
+  int aCurItem = myInteList->currentRow();
+
   if (aCurItem < 0)
     return;
 
   if (aCurItem < 0)
     return;
 
-  //int nbPairs = myInters->length()/2;
-
   QStringList aSubShapeList;
   TopoDS_Shape aSelShape;
   if (!myObj->_is_nil() && GEOMBase::GetShape(myObj, aSelShape)) {
   QStringList aSubShapeList;
   TopoDS_Shape aSelShape;
   if (!myObj->_is_nil() && GEOMBase::GetShape(myObj, aSelShape)) {
@@ -210,8 +462,8 @@ void MeasureGUI_CheckSelfIntersectionsDlg::onErrorsListSelectionChanged()
     if (!aType.isEmpty())
       aSubShapeList.append(QString("%1_%2").arg(aType).arg(myInters[aCurItem*2 + 1]));
   }
     if (!aType.isEmpty())
       aSubShapeList.append(QString("%1_%2").arg(aType).arg(myInters[aCurItem*2 + 1]));
   }
-  myGrp->ListBox2->clear();
-  myGrp->ListBox2->addItems(aSubShapeList);
+  myShapeList->clear();
+  myShapeList->addItems(aSubShapeList);
 }
 
 //=================================================================================
 }
 
 //=================================================================================
@@ -223,14 +475,14 @@ void MeasureGUI_CheckSelfIntersectionsDlg::onSubShapesListSelectionChanged()
   erasePreview();
 
   // Current pair
   erasePreview();
 
   // Current pair
-  int aErrCurItem = myGrp->ListBox1->currentRow();
+  int aErrCurItem = myInteList->currentRow();
   if (aErrCurItem < 0)
     return;
 
   // Selected IDs
   QList<int> aIds;
   if (aErrCurItem < 0)
     return;
 
   // Selected IDs
   QList<int> aIds;
-  for (int i = 0, n = myGrp->ListBox2->count(); i < n; i++) {
-    if (myGrp->ListBox2->item(i)->isSelected())
+  for (int i = 0, n = myShapeList->count(); i < n; i++) {
+    if (myShapeList->item(i)->isSelected())
       aIds.append(i);
   }
   if (aIds.count() < 1)
       aIds.append(i);
   }
   if (aIds.count() < 1)
@@ -259,3 +511,82 @@ void MeasureGUI_CheckSelfIntersectionsDlg::onSubShapesListSelectionChanged()
     }
   }
 }
     }
   }
 }
+
+//=================================================================================
+// function : execute
+// purpose  :
+//=================================================================================
+bool MeasureGUI_CheckSelfIntersectionsDlg::execute(ObjectList& objects)
+{
+  bool hasSelfInte;
+  QString anErrMsg;
+
+  if (!findSelfIntersections(hasSelfInte, anErrMsg)) {
+    return false;
+  }
+
+  const int  aNbInteSelected    = myInteList->selectedItems().size();
+  const bool isPublishAllInte   = (aNbInteSelected < 1);
+  const bool isPublishAllShapes =
+    (aNbInteSelected != 1 || myShapeList->selectedItems().empty());
+  int        i;
+  const int  n = myInteList->count();
+  TColStd_IndexedMapOfInteger aMapIndex;
+
+  // Collect the map of indices.
+  for (i = 0; i < n; i++) {
+    if (isPublishAllInte) {
+      // Collect the both of two indices.
+      aMapIndex.Add(myInters[i*2]);
+      aMapIndex.Add(myInters[i*2 + 1]);
+    } else if (myInteList->item(i)->isSelected()) {
+      if (isPublishAllShapes) {
+        // Collect the both of two indices.
+        aMapIndex.Add(myInters[i*2]);
+        aMapIndex.Add(myInters[i*2 + 1]);
+      } else if (myShapeList->count() == 2) {
+        // Collect only selected items.
+        if (myShapeList->item(0)->isSelected()) {
+          aMapIndex.Add(myInters[i*2]);
+        }
+        if (myShapeList->item(1)->isSelected()) {
+          aMapIndex.Add(myInters[i*2 + 1]);
+        }
+      }
+    }
+  }
+
+  // Create objects.
+  GEOM::ListOfLong_var anArray   = new GEOM::ListOfLong;
+  const int            aNbShapes = aMapIndex.Extent();
+
+  anArray->length(aNbShapes);
+
+  for (i = 1; i <= aNbShapes; i++) {
+    anArray[i - 1] = aMapIndex.FindKey(i);
+  }
+
+  if (myShapesOper->_is_nil()) {
+    myShapesOper = getGeomEngine()->GetIShapesOperations(getStudyId());
+  }
+
+  GEOM::ListOfGO_var aList = myShapesOper->MakeSubShapes(myObj, anArray);
+  const int aNbObj = aList->length();
+
+  for (i = 0; i < aNbObj; i++) {
+    objects.push_back(GEOM::GEOM_Object::_duplicate(aList[i]));
+  }
+
+  return true;
+}
+
+//================================================================
+// Function : getFather
+// Purpose  : Get father object for object to be added in study
+//            (called with addInStudy method)
+//================================================================
+GEOM::GEOM_Object_ptr MeasureGUI_CheckSelfIntersectionsDlg::getFather
+                  (GEOM::GEOM_Object_ptr)
+{
+  return myObj;
+}
index e22346439ebb437bfb700d460ba1ac84fb34428f..e9400be2d64abd8abfb2112399b053b26d19b85d 100644 (file)
 #ifndef MEASUREGUI_CHECKSELFINTERDLG_H
 #define MEASUREGUI_CHECKSELFINTERDLG_H
 
 #ifndef MEASUREGUI_CHECKSELFINTERDLG_H
 #define MEASUREGUI_CHECKSELFINTERDLG_H
 
-#include <MeasureGUI_Skeleton.h>
+#include <GEOMBase_Skeleton.h>
+
+class QComboBox;
+class QListWidget;
+class QTextBrowser;
 
 
-class MeasureGUI_1Sel1TextView2ListBox;
 
 //=================================================================================
 // class    : MeasureGUI_CheckSelfIntersectionsDlg
 // purpose  :
 //=================================================================================
 
 
 //=================================================================================
 // class    : MeasureGUI_CheckSelfIntersectionsDlg
 // purpose  :
 //=================================================================================
 
-class MeasureGUI_CheckSelfIntersectionsDlg : public MeasureGUI_Skeleton
+class MeasureGUI_CheckSelfIntersectionsDlg : public GEOMBase_Skeleton
 {
   Q_OBJECT
 
 public:
 {
   Q_OBJECT
 
 public:
+
   MeasureGUI_CheckSelfIntersectionsDlg(GeometryGUI*, QWidget*);
   ~MeasureGUI_CheckSelfIntersectionsDlg();
 
 protected:
   MeasureGUI_CheckSelfIntersectionsDlg(GeometryGUI*, QWidget*);
   ~MeasureGUI_CheckSelfIntersectionsDlg();
 
 protected:
-  // redefined from GEOMBase_Helper and MeasureGUI_Skeleton
-  virtual void                        processObject();
+  // redefined from GEOMBase_Helper
+  virtual GEOM::GEOM_IOperations_ptr  createOperation();
+  virtual bool                        isValid(QString &);
+  virtual bool                        execute(ObjectList &);
+  virtual bool                        extractPrefix() const;
+  virtual GEOM::GEOM_Object_ptr       getFather (GEOM::GEOM_Object_ptr);
 
 private slots:
 
 private slots:
-  void                                onErrorsListSelectionChanged();
+
+  void                                onInteListSelectionChanged();
   void                                onSubShapesListSelectionChanged();
   void                                onSubShapesListSelectionChanged();
+  void                                clear();
+  void                                onCompute();
+  void                                ClickOnOk();
+  bool                                ClickOnApply();
+  void                                ActivateThisDialog();
+  void                                DeactivateActiveDialog();
+  void                                SelectionIntoArgument();
+  void                                SetEditCurrentArgument();
 
 private:
 
 private:
+
   void                                Init();
   void                                Init();
+  void                                activateSelection();
+  void                                enterEvent(QEvent *);
+  bool                                findSelfIntersections
+                                                    (bool    &HasSelfInte,
+                                                     QString &theErrMsg);
 
 private:
 
 private:
-  MeasureGUI_1Sel1TextView2ListBox*   myGrp;
 
 
+  QTextBrowser                       *myTextView;
+  QPushButton                        *mySelButton;
+  QLineEdit                          *myEditObjName;
+  QComboBox                          *myLevelBox;
+  QPushButton                        *myComputeButton;
+  QListWidget                        *myInteList;
+  QListWidget                        *myShapeList;
+  GEOM::GEOM_Object_var               myObj;
   GEOM::ListOfLong_var                myInters;
   GEOM::ListOfLong_var                myInters;
+  GEOM::GEOM_IShapesOperations_var    myShapesOper;
+
 };
 
 #endif // MEASUREGUI_CHECKSELFINTERDLG_H
 };
 
 #endif // MEASUREGUI_CHECKSELFINTERDLG_H