]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
Mantis issue 0021394: EDF 1637 GEOM: Function 'MinDistance' with creation of vertices
authorjfa <jfa@opencascade.com>
Fri, 18 Jan 2013 11:52:16 +0000 (11:52 +0000)
committerjfa <jfa@opencascade.com>
Fri, 18 Jan 2013 11:52:16 +0000 (11:52 +0000)
21 files changed:
doc/salome/gui/GEOM/images/distance.png
doc/salome/gui/GEOM/input/min_distance.doc
doc/salome/gui/GEOM/input/tui_min_distance.doc
src/DlgRef/DlgRef.cxx
src/DlgRef/DlgRef.h
src/DlgRef/DlgRef_1Sel4Spin2Check_QTD.ui [deleted file]
src/DlgRef/DlgRef_1Sel4Spin_QTD.ui [deleted file]
src/DlgRef/DlgRef_1Sel5Spin_QTD.ui [deleted file]
src/DlgRef/Makefile.am
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_SWIG/GEOM_TestMeasures.py
src/GEOM_SWIG/geompyDC.py
src/MeasureGUI/Makefile.am
src/MeasureGUI/MeasureGUI_2Sel4LineEdit_QTD.ui [deleted file]
src/MeasureGUI/MeasureGUI_DistanceDlg.cxx
src/MeasureGUI/MeasureGUI_DistanceDlg.h
src/MeasureGUI/MeasureGUI_Widgets.cxx
src/MeasureGUI/MeasureGUI_Widgets.h

index 594bef905b8b4726328375860e8d3c766bd34d80..31fa829fdea01f24fa2138e7e6ec97b3dbdcb7a4 100755 (executable)
Binary files a/doc/salome/gui/GEOM/images/distance.png and b/doc/salome/gui/GEOM/images/distance.png differ
index 690a17f3aa86b69eeb64e4acae9c1f46191448be..d329126b4e824bbe2a1eb74a17277d93582f3c1a 100644 (file)
@@ -5,7 +5,13 @@
 Returns the minimum distance between two geometrical objects and
 the coordinates of the vector of distance and shows the vector in the viewer.
 
-<b>TUI Command:</b> <em>geompy.MinDistance(Shape1, Shape2),</em>
+\n On \b Apply or <b>Apply and Close</b> it creates a set of closest
+points of the shapes.
+
+<b>TUI Commands:</b>
+\n<em>aDist = geompy.MinDistance(Shape1, Shape2),</em>
+\n<em>[aDist, DX, DY, DZ] = geompy.MinDistanceComponents(Shape1, Shape2),</em>
+\n<em>[nbSols, (x11, y11, z11, x21, y21, z21, ...)] = geompy.ClosestPoints(Shape1, Shape2),</em>
 where \em Shape1 and \em Shape2 are shapes between which the minimal
 distance is computed.
 
@@ -13,4 +19,4 @@ See also a \ref tui_min_distance_page "TUI example".
 
 \image html distance.png
 
-*/
\ No newline at end of file
+*/
index e26e219f906992d3d02b9cca79192ac83e9a2f6b..6afa6abd615a6ec06fc1ee68030e08c1e3aae45b 100644 (file)
@@ -5,11 +5,51 @@
 \code
 import geompy
 
-# create boxes
-box1 = geompy.MakeBoxDXDYDZ(100,30,100)
-box2 = geompy.MakeBox(105,0,0,200,30,100)
-min_dist = geompy.MinDistance(box1,box2)
-print "\nMinimal distance between box1 and box2 = ", min_dist
+# Create two curves with three closest points
+Vertex_1 = geompy.MakeVertex(0, 0, 0)
+Vertex_2 = geompy.MakeVertex(0, 70, 0)
+Vertex_3 = geompy.MakeVertex(30, 100, 0)
+Vertex_4 = geompy.MakeVertex(60, 70, 0)
+Vertex_5 = geompy.MakeVertex(90, 100, 0)
+Vertex_6 = geompy.MakeVertex(120, 70, 0)
+Vertex_7 = geompy.MakeVertex(120, 0, 0)
+Vertex_8 = geompy.MakeVertex(90, -30, 0)
+Vertex_9 = geompy.MakeVertex(60, 0, 0)
+Vertex_10 = geompy.MakeVertex(30, -30, 0)
+
+geompy.addToStudy( Vertex_1, 'Vertex_1' )
+geompy.addToStudy( Vertex_2, 'Vertex_2' )
+geompy.addToStudy( Vertex_3, 'Vertex_3' )
+geompy.addToStudy( Vertex_4, 'Vertex_4' )
+geompy.addToStudy( Vertex_5, 'Vertex_5' )
+geompy.addToStudy( Vertex_6, 'Vertex_6' )
+geompy.addToStudy( Vertex_7, 'Vertex_7' )
+geompy.addToStudy( Vertex_8, 'Vertex_8' )
+geompy.addToStudy( Vertex_9, 'Vertex_9' )
+geompy.addToStudy( Vertex_10, 'Vertex_10' )
+
+Curve_a = geompy.MakeInterpol([Vertex_2, Vertex_3, Vertex_4, Vertex_5, Vertex_6], False, True)
+Curve_b = geompy.MakeInterpol([Vertex_1, Vertex_7, Vertex_8, Vertex_9, Vertex_10], False, True)
+
+geompy.addToStudy( Curve_a, 'Curve_a' )
+geompy.addToStudy( Curve_b, 'Curve_b' )
+
+# Get all closest points
+[nbSols, listCoords] = geompy.ClosestPoints(Curve_a, Curve_b)
+
+for i in range(nbSols):
+  v1 = geompy.MakeVertex(listCoords[i*6 + 0], listCoords[i*6 + 1], listCoords[i*6 + 2])
+  v2 = geompy.MakeVertex(listCoords[i*6 + 3], listCoords[i*6 + 4], listCoords[i*6 + 5])
+
+  geompy.addToStudy(v1, 'MinDist_%d_Curve_a'%(i+1))
+  geompy.addToStudy(v2, 'MinDist_%d_Curve_b'%(i+1))
+
+# Get minimum distance
+print "Minimal distance between Curve_a and Curve_b is", geompy.MinDistance(Curve_a, Curve_b)
+
+# Get minimum distance with components along axes
+[aDist, DX, DY, DZ] = geompy.MinDistanceComponents(Curve_a, Curve_b)
+print "Minimal distance between Curve_a and Curve_b is (", DX, ",", DY, ",", DZ, ")"
 \endcode
 
 */
index 01be686b65ed1971c88ebfaf054b7954a75ed4b9..a7a551f602bb42750e1b5d7d06ecf46d8b9f64ae 100644 (file)
@@ -217,34 +217,6 @@ DlgRef_1Sel3Spin1Check::~DlgRef_1Sel3Spin1Check()
 {
 }
 
-//////////////////////////////////////////
-// DlgRef_1Sel4Spin2Check
-//////////////////////////////////////////
-
-DlgRef_1Sel4Spin2Check::DlgRef_1Sel4Spin2Check( QWidget* parent, Qt::WindowFlags f )
-: QWidget( parent, f )
-{
-  setupUi( this );
-}
-
-DlgRef_1Sel4Spin2Check::~DlgRef_1Sel4Spin2Check()
-{
-}
-
-//////////////////////////////////////////
-// DlgRef_1Sel4Spin
-//////////////////////////////////////////
-
-DlgRef_1Sel4Spin::DlgRef_1Sel4Spin( QWidget* parent, Qt::WindowFlags f )
-: QWidget( parent, f )
-{
-  setupUi( this );
-}
-
-DlgRef_1Sel4Spin::~DlgRef_1Sel4Spin()
-{
-}
-
 //////////////////////////////////////////
 // DlgRef_1Sel5Spin1Check
 //////////////////////////////////////////
@@ -259,20 +231,6 @@ DlgRef_1Sel5Spin1Check::~DlgRef_1Sel5Spin1Check()
 {
 }
 
-//////////////////////////////////////////
-// DlgRef_1Sel5Spin
-//////////////////////////////////////////
-
-DlgRef_1Sel5Spin::DlgRef_1Sel5Spin( QWidget* parent, Qt::WindowFlags f )
-: QWidget( parent, f )
-{
-  setupUi( this );
-}
-
-DlgRef_1Sel5Spin::~DlgRef_1Sel5Spin()
-{
-}
-
 //////////////////////////////////////////
 // DlgRef_1Spin
 //////////////////////////////////////////
index bb707a5119becd561870c6c58336f3d25288cf0a..b727e96ec7df28617ed3485ef74146f3629b9ceb 100644 (file)
@@ -258,38 +258,6 @@ public:
   ~DlgRef_1Sel3Spin1Check();
 };
 
-//////////////////////////////////////////
-// DlgRef_1Sel4Spin2Check
-//////////////////////////////////////////
-
-#include "ui_DlgRef_1Sel4Spin2Check_QTD.h"
-
-class DLGREF_EXPORT DlgRef_1Sel4Spin2Check : public QWidget, 
-                                             public Ui::DlgRef_1Sel4Spin2Check_QTD
-{
-  Q_OBJECT
-
-public:
-  DlgRef_1Sel4Spin2Check( QWidget* = 0, Qt::WindowFlags = 0 );
-  ~DlgRef_1Sel4Spin2Check();
-};
-
-//////////////////////////////////////////
-// DlgRef_1Sel4Spin
-//////////////////////////////////////////
-
-#include "ui_DlgRef_1Sel4Spin_QTD.h"
-
-class DLGREF_EXPORT DlgRef_1Sel4Spin : public QWidget, 
-                                       public Ui::DlgRef_1Sel4Spin_QTD
-{
-  Q_OBJECT
-
-public:
-  DlgRef_1Sel4Spin( QWidget* = 0, Qt::WindowFlags = 0 );
-  ~DlgRef_1Sel4Spin();
-};
-
 //////////////////////////////////////////
 // DlgRef_1Sel5Spin1Check
 //////////////////////////////////////////
@@ -306,22 +274,6 @@ public:
   ~DlgRef_1Sel5Spin1Check();
 };
 
-//////////////////////////////////////////
-// DlgRef_1Sel5Spin
-//////////////////////////////////////////
-
-#include "ui_DlgRef_1Sel5Spin_QTD.h"
-
-class DLGREF_EXPORT DlgRef_1Sel5Spin : public QWidget, 
-                                       public Ui::DlgRef_1Sel5Spin_QTD
-{
-  Q_OBJECT
-
-public:
-  DlgRef_1Sel5Spin( QWidget* = 0, Qt::WindowFlags = 0 );
-  ~DlgRef_1Sel5Spin();
-};
-
 //////////////////////////////////////////
 // DlgRef_1Spin
 //////////////////////////////////////////
diff --git a/src/DlgRef/DlgRef_1Sel4Spin2Check_QTD.ui b/src/DlgRef/DlgRef_1Sel4Spin2Check_QTD.ui
deleted file mode 100644 (file)
index a6c6a63..0000000
+++ /dev/null
@@ -1,211 +0,0 @@
-<ui version="4.0" >
- <class>DlgRef_1Sel4Spin2Check_QTD</class>
- <widget class="QWidget" name="DlgRef_1Sel4Spin2Check_QTD" >
-  <property name="geometry" >
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>156</width>
-    <height>120</height>
-   </rect>
-  </property>
-  <property name="windowTitle" >
-   <string/>
-  </property>
-  <layout class="QGridLayout" >
-   <property name="leftMargin" >
-    <number>0</number>
-   </property>
-   <property name="topMargin" >
-    <number>0</number>
-   </property>
-   <property name="rightMargin" >
-    <number>0</number>
-   </property>
-   <property name="bottomMargin" >
-    <number>0</number>
-   </property>
-   <property name="horizontalSpacing" >
-    <number>6</number>
-   </property>
-   <property name="verticalSpacing" >
-    <number>6</number>
-   </property>
-   <item row="0" column="0" >
-    <widget class="QGroupBox" name="GroupBox1" >
-     <property name="title" >
-      <string/>
-     </property>
-     <layout class="QGridLayout" >
-      <property name="leftMargin" >
-       <number>9</number>
-      </property>
-      <property name="topMargin" >
-       <number>9</number>
-      </property>
-      <property name="rightMargin" >
-       <number>9</number>
-      </property>
-      <property name="bottomMargin" >
-       <number>9</number>
-      </property>
-      <property name="horizontalSpacing" >
-       <number>6</number>
-      </property>
-      <property name="verticalSpacing" >
-       <number>6</number>
-      </property>
-      <item row="0" column="0" >
-       <widget class="QLabel" name="TextLabel1" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text" >
-         <string>TL1</string>
-        </property>
-        <property name="wordWrap" >
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1" >
-       <widget class="QPushButton" name="PushButton1" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text" >
-         <string/>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="2" >
-       <widget class="QLineEdit" name="LineEdit1" />
-      </item>
-
-      <item row="1" column="0" >
-       <widget class="QLabel" name="TextLabel2" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text" >
-         <string>TL2</string>
-        </property>
-        <property name="wordWrap" >
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="1" colspan="2" >
-       <widget class="SalomeApp_DoubleSpinBox" name="SpinBox_DX" />
-      </item>
-
-      <item row="2" column="0" >
-       <widget class="QLabel" name="TextLabel3" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text" >
-         <string>TL3</string>
-        </property>
-        <property name="wordWrap" >
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="1" colspan="2" >
-       <widget class="SalomeApp_DoubleSpinBox" name="SpinBox_DY" />
-      </item>
-
-      <item row="3" column="0" >
-       <widget class="QLabel" name="TextLabel4" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text" >
-         <string>TL4</string>
-        </property>
-        <property name="wordWrap" >
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="1" colspan="2" >
-       <widget class="SalomeApp_DoubleSpinBox" name="SpinBox_DZ" />
-      </item>
-
-      <item row="4" column="0" >
-       <widget class="QLabel" name="TextLabel5" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text" >
-         <string>TL5</string>
-        </property>
-        <property name="wordWrap" >
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="1" colspan="2" >
-       <widget class="SalomeApp_DoubleSpinBox" name="SpinBox_SC" />
-      </item>
-
-      <item row="5" column="0" colspan="3" >
-       <widget class="QCheckBox" name="CheckBox1" >
-         <property name="text" >
-         <string/>
-        </property>
-       </widget>
-      </item>  
-      <item row="6" column="0" colspan="3" >
-       <widget class="QCheckBox" name="CheckBox2" >
-         <property name="text" >
-         <string/>
-        </property>
-       </widget>
-      </item>  
-     </layout>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <layoutdefault spacing="6" margin="11" />
- <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
- <customwidgets>
-  <customwidget>
-   <class>SalomeApp_DoubleSpinBox</class>
-   <extends>QDoubleSpinBox</extends>
-   <header location="global" >SalomeApp_DoubleSpinBox.h</header>
-  </customwidget>
- </customwidgets>
- <tabstops>
-  <tabstop>PushButton1</tabstop>
-  <tabstop>LineEdit1</tabstop>
-  <tabstop>SpinBox_DX</tabstop>
-  <tabstop>SpinBox_DY</tabstop>
-  <tabstop>SpinBox_DZ</tabstop>
-  <tabstop>SpinBox_SC</tabstop>
-  <tabstop>CheckBox1</tabstop>
-  <tabstop>CheckBox2</tabstop>
- </tabstops>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/DlgRef/DlgRef_1Sel4Spin_QTD.ui b/src/DlgRef/DlgRef_1Sel4Spin_QTD.ui
deleted file mode 100644 (file)
index 43cbcba..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-<ui version="4.0" >
- <class>DlgRef_1Sel4Spin_QTD</class>
- <widget class="QWidget" name="DlgRef_1Sel4Spin_QTD" >
-  <property name="geometry" >
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>271</width>
-    <height>117</height>
-   </rect>
-  </property>
-  <property name="windowTitle" >
-   <string/>
-  </property>
-  <layout class="QGridLayout" >
-   <property name="leftMargin" >
-    <number>0</number>
-   </property>
-   <property name="topMargin" >
-    <number>0</number>
-   </property>
-   <property name="rightMargin" >
-    <number>0</number>
-   </property>
-   <property name="bottomMargin" >
-    <number>0</number>
-   </property>
-   <property name="horizontalSpacing" >
-    <number>6</number>
-   </property>
-   <property name="verticalSpacing" >
-    <number>6</number>
-   </property>
-   <item row="0" column="0" >
-    <widget class="QGroupBox" name="GroupBox1" >
-     <property name="title" >
-      <string/>
-     </property>
-     <layout class="QGridLayout" >
-      <property name="leftMargin" >
-       <number>9</number>
-      </property>
-      <property name="topMargin" >
-       <number>9</number>
-      </property>
-      <property name="rightMargin" >
-       <number>9</number>
-      </property>
-      <property name="bottomMargin" >
-       <number>9</number>
-      </property>
-      <property name="horizontalSpacing" >
-       <number>6</number>
-      </property>
-      <property name="verticalSpacing" >
-       <number>6</number>
-      </property>
-      <item row="2" column="0" >
-       <widget class="QLabel" name="TextLabel6" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text" >
-         <string>TL6</string>
-        </property>
-        <property name="wordWrap" >
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="1" colspan="2" >
-       <widget class="SalomeApp_DoubleSpinBox" name="SpinBox_S" />
-      </item>
-      <item row="1" column="0" colspan="3" >
-       <widget class="QGroupBox" name="groupBox" >
-        <property name="title" >
-         <string/>
-        </property>
-        <layout class="QHBoxLayout" >
-         <property name="spacing" >
-          <number>6</number>
-         </property>
-         <property name="leftMargin" >
-          <number>9</number>
-         </property>
-         <property name="topMargin" >
-          <number>9</number>
-         </property>
-         <property name="rightMargin" >
-          <number>9</number>
-         </property>
-         <property name="bottomMargin" >
-          <number>9</number>
-         </property>
-         <item>
-          <widget class="QLabel" name="TextLabel3" >
-           <property name="sizePolicy" >
-            <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-             <horstretch>0</horstretch>
-             <verstretch>0</verstretch>
-            </sizepolicy>
-           </property>
-           <property name="text" >
-            <string>TL3</string>
-           </property>
-           <property name="wordWrap" >
-            <bool>false</bool>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="SalomeApp_DoubleSpinBox" name="SpinBox_DX" />
-         </item>
-         <item>
-          <widget class="QLabel" name="TextLabel4" >
-           <property name="sizePolicy" >
-            <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-             <horstretch>0</horstretch>
-             <verstretch>0</verstretch>
-            </sizepolicy>
-           </property>
-           <property name="text" >
-            <string>TL4</string>
-           </property>
-           <property name="wordWrap" >
-            <bool>false</bool>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="SalomeApp_DoubleSpinBox" name="SpinBox_DY" />
-         </item>
-         <item>
-          <widget class="QLabel" name="TextLabel5" >
-           <property name="sizePolicy" >
-            <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-             <horstretch>0</horstretch>
-             <verstretch>0</verstretch>
-            </sizepolicy>
-           </property>
-           <property name="text" >
-            <string>TL5</string>
-           </property>
-           <property name="wordWrap" >
-            <bool>false</bool>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="SalomeApp_DoubleSpinBox" name="SpinBox_DZ" />
-         </item>
-        </layout>
-       </widget>
-      </item>
-      <item row="0" column="2" >
-       <widget class="QLineEdit" name="LineEdit1" />
-      </item>
-      <item row="0" column="1" >
-       <widget class="QPushButton" name="PushButton1" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text" >
-         <string/>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="0" >
-       <widget class="QLabel" name="TextLabel1" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text" >
-         <string>TL1</string>
-        </property>
-        <property name="wordWrap" >
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <layoutdefault spacing="6" margin="11" />
- <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
- <customwidgets>
-  <customwidget>
-   <class>SalomeApp_DoubleSpinBox</class>
-   <extends>QDoubleSpinBox</extends>
-   <header location="global" >SalomeApp_DoubleSpinBox.h</header>
-  </customwidget>
- </customwidgets>
- <tabstops>
-  <tabstop>PushButton1</tabstop>
-  <tabstop>LineEdit1</tabstop>
-  <tabstop>SpinBox_DX</tabstop>
-  <tabstop>SpinBox_DY</tabstop>
-  <tabstop>SpinBox_DZ</tabstop>
-  <tabstop>SpinBox_S</tabstop>
- </tabstops>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/DlgRef/DlgRef_1Sel5Spin_QTD.ui b/src/DlgRef/DlgRef_1Sel5Spin_QTD.ui
deleted file mode 100644 (file)
index 1b945b5..0000000
+++ /dev/null
@@ -1,232 +0,0 @@
-<ui version="4.0" >
- <class>DlgRef_1Sel5Spin_QTD</class>
- <widget class="QWidget" name="DlgRef_1Sel5Spin_QTD" >
-  <property name="geometry" >
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>174</width>
-    <height>123</height>
-   </rect>
-  </property>
-  <property name="windowTitle" >
-   <string/>
-  </property>
-  <layout class="QGridLayout" >
-   <property name="leftMargin" >
-    <number>0</number>
-   </property>
-   <property name="topMargin" >
-    <number>0</number>
-   </property>
-   <property name="rightMargin" >
-    <number>0</number>
-   </property>
-   <property name="bottomMargin" >
-    <number>0</number>
-   </property>
-   <property name="horizontalSpacing" >
-    <number>0</number>
-   </property>
-   <property name="verticalSpacing" >
-    <number>0</number>
-   </property>
-   <item row="0" column="0" >
-    <widget class="QGroupBox" name="GroupBox1" >
-     <property name="title" >
-      <string/>
-     </property>
-     <layout class="QGridLayout" >
-      <property name="leftMargin" >
-       <number>9</number>
-      </property>
-      <property name="topMargin" >
-       <number>9</number>
-      </property>
-      <property name="rightMargin" >
-       <number>9</number>
-      </property>
-      <property name="bottomMargin" >
-       <number>9</number>
-      </property>
-      <property name="horizontalSpacing" >
-       <number>6</number>
-      </property>
-      <property name="verticalSpacing" >
-       <number>6</number>
-      </property>
-      <item row="1" column="0" colspan="3" >
-       <layout class="QGridLayout" >
-        <property name="leftMargin" >
-         <number>0</number>
-        </property>
-        <property name="topMargin" >
-         <number>0</number>
-        </property>
-        <property name="rightMargin" >
-         <number>0</number>
-        </property>
-        <property name="bottomMargin" >
-         <number>0</number>
-        </property>
-        <property name="horizontalSpacing" >
-         <number>6</number>
-        </property>
-        <property name="verticalSpacing" >
-         <number>6</number>
-        </property>
-        <item row="2" column="0" >
-         <widget class="QLabel" name="TextLabel4" >
-          <property name="sizePolicy" >
-           <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="text" >
-           <string>TL4</string>
-          </property>
-          <property name="wordWrap" >
-           <bool>false</bool>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="2" >
-         <widget class="QLabel" name="TextLabel3" >
-          <property name="sizePolicy" >
-           <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="text" >
-           <string>TL3</string>
-          </property>
-          <property name="wordWrap" >
-           <bool>false</bool>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="3" >
-         <widget class="SalomeApp_DoubleSpinBox" name="SpinBox5" />
-        </item>
-        <item row="0" column="0" >
-         <widget class="QLabel" name="TextLabel2" >
-          <property name="sizePolicy" >
-           <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="text" >
-           <string>TL2</string>
-          </property>
-          <property name="wordWrap" >
-           <bool>false</bool>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="1" >
-         <widget class="SalomeApp_DoubleSpinBox" name="SpinBox1" />
-        </item>
-        <item row="1" column="2" >
-         <widget class="QLabel" name="TextLabel6" >
-          <property name="sizePolicy" >
-           <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="text" >
-           <string>TL6</string>
-          </property>
-          <property name="wordWrap" >
-           <bool>false</bool>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="3" >
-         <widget class="SalomeApp_DoubleSpinBox" name="SpinBox2" />
-        </item>
-        <item row="2" column="1" >
-         <widget class="SalomeApp_DoubleSpinBox" name="SpinBox3" />
-        </item>
-        <item row="1" column="1" >
-         <widget class="SalomeApp_DoubleSpinBox" name="SpinBox4" />
-        </item>
-        <item row="1" column="0" >
-         <widget class="QLabel" name="TextLabel5" >
-          <property name="sizePolicy" >
-           <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="text" >
-           <string>TL5</string>
-          </property>
-          <property name="wordWrap" >
-           <bool>false</bool>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-      <item row="0" column="1" >
-       <widget class="QPushButton" name="PushButton1" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text" >
-         <string/>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="0" >
-       <widget class="QLabel" name="TextLabel1" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text" >
-         <string>TL1</string>
-        </property>
-        <property name="wordWrap" >
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="2" >
-       <widget class="QLineEdit" name="LineEdit1" />
-      </item>
-     </layout>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <layoutdefault spacing="6" margin="11" />
- <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
- <customwidgets>
-  <customwidget>
-   <class>SalomeApp_DoubleSpinBox</class>
-   <extends>QDoubleSpinBox</extends>
-   <header location="global" >SalomeApp_DoubleSpinBox.h</header>
-  </customwidget>
- </customwidgets>
- <tabstops>
-  <tabstop>PushButton1</tabstop>
-  <tabstop>LineEdit1</tabstop>
-  <tabstop>SpinBox1</tabstop>
-  <tabstop>SpinBox2</tabstop>
-  <tabstop>SpinBox4</tabstop>
-  <tabstop>SpinBox5</tabstop>
-  <tabstop>SpinBox3</tabstop>
- </tabstops>
- <resources/>
- <connections/>
-</ui>
index 3e5d05b635a86ce8de9ddc45f1e340ade54b6345..6816361661a5041f3b4c2306e885d10a380af3b8 100644 (file)
@@ -48,10 +48,7 @@ UIC_FILES =                                  \
        ui_DlgRef_1Sel3Spin_QTD.h               \
        ui_DlgRef_1Sel3Spin1Check_QTD.h         \
        ui_DlgRef_1Sel3Spin2Check1Spin_QTD.h    \
-       ui_DlgRef_1Sel4Spin2Check_QTD.h         \
-       ui_DlgRef_1Sel4Spin_QTD.h               \
        ui_DlgRef_1Sel5Spin1Check_QTD.h         \
-       ui_DlgRef_1Sel5Spin_QTD.h               \
        ui_DlgRef_1Sel_QTD.h                    \
        ui_DlgRef_1SelExt_QTD.h                 \
        ui_DlgRef_1Spin_QTD.h                   \
index c0ec2c7925b4c2594f5d5ad599d96357e0958584..8b0e0e82c873759ba75cb8c8e355fd510b9a3e3b 100644 (file)
@@ -1082,6 +1082,10 @@ Please, select face, shell or solid and try again</translation>
         <source>GEOM_MINDIST_TITLE</source>
         <translation>Minimun Distance Between Two Objects</translation>
     </message>
+    <message>
+        <source>GEOM_MINDIST_NAME</source>
+        <translation>MinDist</translation>
+    </message>
     <message>
         <source>GEOM_MIRROR</source>
         <translation>Mirror</translation>
@@ -1202,6 +1206,10 @@ Please, select face, shell or solid and try again</translation>
         <source>GEOM_SOURCE_OBJECT</source>
         <translation>Source vertex, edge or wire</translation>
     </message>
+    <message>
+        <source>GEOM_SOLUTION</source>
+        <translation>Solution :</translation>
+    </message>
     <message>
         <source>GEOM_TARGET_OBJECT</source>
         <translation>Target face</translation>
index 6f4194500a588a3251eea990b7b4eb7163270331..b81e5c7ab629d497ad8ab37e7ba9ad19191d8808 100644 (file)
@@ -1542,6 +1542,36 @@ TCollection_AsciiString GEOMImpl_IMeasureOperations::WhatIs (Handle(GEOM_Object)
   return Astr;
 }
 
+//=============================================================================
+/*!
+ *  AreCoordsInside
+ */
+//=============================================================================
+std::vector<bool> GEOMImpl_IMeasureOperations::AreCoordsInside(Handle(GEOM_Object) theShape,
+                                                               const std::vector<double>& coords,
+                                                               double tolerance)
+{
+  std::vector<bool> res;
+  if (!theShape.IsNull()) {
+    Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
+    if (!aRefShape.IsNull()) {
+      TopoDS_Shape aShape = aRefShape->GetValue();
+      if (!aShape.IsNull()) {
+        BRepClass3d_SolidClassifier SC(aShape);
+        unsigned int nb_points = coords.size()/3;
+        for (int i = 0; i < nb_points; i++) {
+          double x = coords[3*i];
+          double y = coords[3*i+1];
+          double z = coords[3*i+2];
+          gp_Pnt aPnt(x, y, z);
+          SC.Perform(aPnt, tolerance);
+          res.push_back( ( SC.State() == TopAbs_IN ) || ( SC.State() == TopAbs_ON ) );
+        }
+      }
+    }
+  }
+  return res;
+}
 
 //=======================================================================
 //function : CheckSingularCase
@@ -1845,38 +1875,6 @@ static bool CheckSingularCase(const TopoDS_Shape& aSh1,
 }
 */
 
-
-//=============================================================================
-/*!
- *  AreCoordsInside
- */
-//=============================================================================
-std::vector<bool> GEOMImpl_IMeasureOperations::AreCoordsInside(Handle(GEOM_Object) theShape,
-                                                               const std::vector<double>& coords,
-                                                               double tolerance)
-{
-  std::vector<bool> res;
-  if (!theShape.IsNull()) {
-    Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
-    if (!aRefShape.IsNull()) {
-      TopoDS_Shape aShape = aRefShape->GetValue();
-      if (!aShape.IsNull()) {
-        BRepClass3d_SolidClassifier SC(aShape);
-        unsigned int nb_points = coords.size()/3;
-        for (int i = 0; i < nb_points; i++) {
-          double x = coords[3*i];
-          double y = coords[3*i+1];
-          double z = coords[3*i+2];
-          gp_Pnt aPnt(x, y, z);
-          SC.Perform(aPnt, tolerance);
-          res.push_back( ( SC.State() == TopAbs_IN ) || ( SC.State() == TopAbs_ON ) );
-        }
-      }
-    }
-  }
-  return res;
-}
-
 //=============================================================================
 /*!
  *  GetMinDistance
@@ -1941,7 +1939,7 @@ Standard_Real GEOMImpl_IMeasureOperations::GetMinDistance
     // additional workaround for bugs 19899, 19908 and 19910 from Mantis
     gp_Pnt Ptmp1, Ptmp2;
     double dist = CheckSingularCase(aShape1, aShape2, Ptmp1, Ptmp2);
-    if(dist>-1.0) {
+    if (dist > -1.0) {
       Ptmp1.Coord(X1, Y1, Z1);
       Ptmp2.Coord(X2, Y2, Z2);
       SetErrorCode(OK);
@@ -1978,6 +1976,84 @@ Standard_Real GEOMImpl_IMeasureOperations::GetMinDistance
   return MinDist;
 }
 
+//=======================================================================
+/*!
+ *  Get coordinates of closest points of two shapes
+ */
+//=======================================================================
+Standard_Integer GEOMImpl_IMeasureOperations::ClosestPoints (Handle(GEOM_Object) theShape1,
+                                                             Handle(GEOM_Object) theShape2,
+                                                             Handle(TColStd_HSequenceOfReal)& theDoubles)
+{
+  SetErrorCode(KO);
+  Standard_Integer nbSolutions = 0;
+
+  if (theShape1.IsNull() || theShape2.IsNull()) return nbSolutions;
+
+  Handle(GEOM_Function) aRefShape1 = theShape1->GetLastFunction();
+  Handle(GEOM_Function) aRefShape2 = theShape2->GetLastFunction();
+  if (aRefShape1.IsNull() || aRefShape2.IsNull()) return nbSolutions;
+
+  TopoDS_Shape aShape1 = aRefShape1->GetValue();
+  TopoDS_Shape aShape2 = aRefShape2->GetValue();
+  if (aShape1.IsNull() || aShape2.IsNull()) {
+    SetErrorCode("One of Objects has NULL Shape");
+    return nbSolutions;
+  }
+
+  // Compute the extremities
+  try {
+#if OCC_VERSION_LARGE > 0x06010000
+    OCC_CATCH_SIGNALS;
+#endif
+
+    // skl 30.06.2008
+    // additional workaround for bugs 19899, 19908 and 19910 from Mantis
+    gp_Pnt P1, P2;
+    double dist = CheckSingularCase(aShape1, aShape2, P1, P2);
+    if (dist > -1.0) {
+      nbSolutions = 1;
+
+      theDoubles->Append(P1.X());
+      theDoubles->Append(P1.Y());
+      theDoubles->Append(P1.Z());
+      theDoubles->Append(P2.X());
+      theDoubles->Append(P2.Y());
+      theDoubles->Append(P2.Z());
+
+      SetErrorCode(OK);
+      return nbSolutions;
+    }
+
+    BRepExtrema_DistShapeShape dst (aShape1, aShape2);
+    if (dst.IsDone()) {
+      nbSolutions = dst.NbSolution();
+      if (theDoubles.IsNull()) theDoubles = new TColStd_HSequenceOfReal;
+
+      gp_Pnt P1, P2;
+      for (int i = 1; i <= nbSolutions; i++) {
+        P1 = dst.PointOnShape1(i);
+        P2 = dst.PointOnShape2(i);
+
+        theDoubles->Append(P1.X());
+        theDoubles->Append(P1.Y());
+        theDoubles->Append(P1.Z());
+        theDoubles->Append(P2.X());
+        theDoubles->Append(P2.Y());
+        theDoubles->Append(P2.Z());
+      }
+    }
+  }
+  catch (Standard_Failure) {
+    Handle(Standard_Failure) aFail = Standard_Failure::Caught();
+    SetErrorCode(aFail->GetMessageString());
+    return nbSolutions;
+  }
+
+  SetErrorCode(OK);
+  return nbSolutions;
+}
+
 //=======================================================================
 /*!
  *  Get coordinates of point
index eff6fdacad9a73d0cdb2790874b809e0febc4f63..1a907183869cf1bb1a8ee442e969ec703a126d1b 100644 (file)
@@ -144,6 +144,10 @@ class GEOMImpl_IMeasureOperations : public GEOM_IOperations {
                                                 Standard_Real& X1, Standard_Real& Y1, Standard_Real& Z1,
                                                 Standard_Real& X2, Standard_Real& Y2, Standard_Real& Z2);
 
+  Standard_EXPORT Standard_Integer ClosestPoints (Handle(GEOM_Object) theShape1,
+                                                  Handle(GEOM_Object) theShape2,
+                                                  Handle(TColStd_HSequenceOfReal)& theDoubles);
+
   Standard_EXPORT void PointCoordinates (Handle(GEOM_Object) theShape,
                                          Standard_Real& theX, Standard_Real& theY, Standard_Real& theZ);
 
index 257822004e75ea606d95618ad28e82d6e7f88996..b6132132ce491f8cfe60708a52c4402a0434d3e0 100644 (file)
@@ -531,7 +531,7 @@ CORBA::Long GEOM_IMeasureOperations_i::ClosestPoints
   GetOperations()->SetNotDone();
 
   // allocate the CORBA array
-  int nbSols = -1;
+  int nbSols = 0;
   GEOM::ListOfDouble_var aDoublesArray = new GEOM::ListOfDouble();
 
   //Get the reference shape
@@ -541,23 +541,12 @@ CORBA::Long GEOM_IMeasureOperations_i::ClosestPoints
   if (!aShape1.IsNull() && !aShape2.IsNull()) {
     Handle(TColStd_HSequenceOfReal) aDoubles = new TColStd_HSequenceOfReal;
     // Get shape parameters
-    //nbSols = GetOperations()->ClosestPoints(aShape1, aShape2, aDoubles);
-    //int nbDbls = aDoubles->Length();
-    //aDoublesArray->length(nbDbls);
-    //for (int id = 0; id < nbDbls; id++) {
-    //  aDoublesArray[id] = aDoubles->Value(id + 1);
-    //}
-    // tmp
-    double X1, Y1, Z1, X2, Y2, Z2;
-    GetOperations()->GetMinDistance(aShape1, aShape2, X1, Y1, Z1, X2, Y2, Z2);
-    aDoublesArray->length(6);
-    aDoublesArray[0] = X1;
-    aDoublesArray[1] = Y1;
-    aDoublesArray[2] = Z1;
-    aDoublesArray[3] = X2;
-    aDoublesArray[4] = Y2;
-    aDoublesArray[5] = Z2;
-    nbSols = 1;
+    nbSols = GetOperations()->ClosestPoints(aShape1, aShape2, aDoubles);
+    int nbDbls = aDoubles->Length();
+    aDoublesArray->length(nbDbls);
+    for (int id = 0; id < nbDbls; id++) {
+      aDoublesArray[id] = aDoubles->Value(id + 1);
+    }
   }
 
   theCoords = aDoublesArray._retn();
index ea9e31c862d72e96727ef93afa0df3bb93bc2c93..cd9c07dd0f565816b28bcc833c7e42b1cc6bffe3 100644 (file)
@@ -164,6 +164,16 @@ def TestMeasureOperations (geompy, math):
   print "\nMinimal distance between Box and Cube = ", MinDistComps[0]
   print "Its components are  (", MinDistComps[1], ", ", MinDistComps[2], ", ", MinDistComps[3], ")"
 
+  # Get all closest points
+  [nbSols, listCoords] = geompy.ClosestPoints(box, cube)
+  for i in range(nbSols):
+    v1 = geompy.MakeVertex(listCoords[i*6 + 0], listCoords[i*6 + 1], listCoords[i*6 + 2])
+    v2 = geompy.MakeVertex(listCoords[i*6 + 3], listCoords[i*6 + 4], listCoords[i*6 + 5])
+
+    geompy.addToStudy(v1, 'MinDist_%d_on_Box'%(i+1))
+    geompy.addToStudy(v2, 'MinDist_%d_on_Cube'%(i+1))
+    pass
+
   ####### Angle #######
 
   OX  = geompy.MakeVectorDXDYDZ(10, 0,0)
index 9d750572a59db572f16747ba70d51174bbb97b10..0dc6009ef869666f5f77b4bedb6f75d615134427 100644 (file)
@@ -8878,6 +8878,28 @@ class geompyDC(GEOM._objref_GEOM_Gen):
             aRes = [aTuple[0], aTuple[4] - aTuple[1], aTuple[5] - aTuple[2], aTuple[6] - aTuple[3]]
             return aRes
 
+        ## Get closest points of the given shapes.
+        #  @param theShape1,theShape2 Shapes to find closest points of.
+        #  @return The number of found solutions (-1 in case of infinite number of
+        #          solutions) and a list of (X, Y, Z) coordinates for all couples of points.
+        #
+        #  @ref tui_measurement_tools_page "Example"
+        def ClosestPoints (self, theShape1, theShape2):
+            """
+            Get closest points of the given shapes.
+
+            Parameters: 
+                theShape1,theShape2 Shapes to find closest points of.
+
+            Returns:    
+                The number of found solutions (-1 in case of infinite number of
+                solutions) and a list of (X, Y, Z) coordinates for all couples of points.
+            """
+            # Example: see GEOM_TestMeasures.py
+            aTuple = self.MeasuOp.ClosestPoints(theShape1, theShape2)
+            RaiseIfFailed("ClosestPoints", self.MeasuOp)
+            return aTuple
+
         ## Get angle between the given shapes in degrees.
         #  @param theShape1,theShape2 Lines or linear edges to find angle between.
         #  @note If both arguments are vectors, the angle is computed in accordance
index 55cfcf7a5a899aaeac31136f770d7f19a1ad4a23..c739ca76b8a2415ff8b6a8ddfbd8bb36b6bc9f65 100644 (file)
@@ -15,7 +15,6 @@
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 #
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
 
 # GEOM MEASUREGUI : 
 # File    : Makefile.am
@@ -95,7 +94,6 @@ UIC_FILES =                                           \
        ui_MeasureGUI_1Sel3LineEdit_QTD.h               \
        ui_MeasureGUI_1Sel6LineEdit_QTD.h               \
        ui_MeasureGUI_2Sel1LineEdit_QTD.h               \
-       ui_MeasureGUI_2Sel4LineEdit_QTD.h               \
        ui_MeasureGUI_SkeletonBox_QTD.h
 
 BUILT_SOURCES = $(UIC_FILES)
diff --git a/src/MeasureGUI/MeasureGUI_2Sel4LineEdit_QTD.ui b/src/MeasureGUI/MeasureGUI_2Sel4LineEdit_QTD.ui
deleted file mode 100644 (file)
index d63fb5a..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-<ui version="4.0" >
- <class>MeasureGUI_2Sel4LineEdit_QTD</class>
- <widget class="QWidget" name="MeasureGUI_2Sel4LineEdit_QTD" >
-  <property name="geometry" >
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>198</width>
-    <height>197</height>
-   </rect>
-  </property>
-  <property name="windowTitle" >
-   <string/>
-  </property>
-  <layout class="QGridLayout" >
-   <property name="leftMargin" >
-    <number>0</number>
-   </property>
-   <property name="topMargin" >
-    <number>0</number>
-   </property>
-   <property name="rightMargin" >
-    <number>0</number>
-   </property>
-   <property name="bottomMargin" >
-    <number>0</number>
-   </property>
-   <item row="0" column="0" >
-    <widget class="QGroupBox" name="GroupBox1" >
-     <property name="title" >
-      <string/>
-     </property>
-     <layout class="QGridLayout" >
-      <item row="0" column="0" >
-       <widget class="QLabel" name="TextLabel1" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text" >
-         <string>TL1</string>
-        </property>
-        <property name="wordWrap" >
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1" >
-       <widget class="QPushButton" name="PushButton1" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="2" >
-       <widget class="QLineEdit" name="LineEdit1" >
-        <property name="minimumSize" >
-         <size>
-          <width>100</width>
-          <height>0</height>
-         </size>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="0" >
-       <widget class="QLabel" name="TextLabel2" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text" >
-         <string>TL2</string>
-        </property>
-        <property name="wordWrap" >
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="1" >
-       <widget class="QPushButton" name="PushButton2" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="2" >
-       <widget class="QLineEdit" name="LineEdit2" >
-        <property name="minimumSize" >
-         <size>
-          <width>100</width>
-          <height>0</height>
-         </size>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="0" >
-       <widget class="QLabel" name="TextLabel3" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text" >
-         <string>TL3</string>
-        </property>
-        <property name="wordWrap" >
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="1" colspan="2" >
-       <widget class="QLineEdit" name="LineEdit3" />
-      </item>
-      <item row="3" column="0" >
-       <widget class="QLabel" name="TextLabel4" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text" >
-         <string>TL4</string>
-        </property>
-        <property name="wordWrap" >
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="1" colspan="2" >
-       <widget class="QLineEdit" name="LineEdit4" />
-      </item>
-      <item row="4" column="0" >
-       <widget class="QLabel" name="TextLabel5" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text" >
-         <string>TL5</string>
-        </property>
-        <property name="wordWrap" >
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="1" colspan="2" >
-       <widget class="QLineEdit" name="LineEdit5" />
-      </item>
-      <item row="5" column="0" >
-       <widget class="QLabel" name="TextLabel6" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text" >
-         <string>TL6</string>
-        </property>
-        <property name="wordWrap" >
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="5" column="1" colspan="2" >
-       <widget class="QLineEdit" name="LineEdit6" />
-      </item>
-     </layout>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
index d0d9fda91d51ea75577c31f1e5c6cdb466382ff3..8d670a9d00a43005fde100ce429539b632c18fa2 100644 (file)
@@ -77,19 +77,28 @@ MeasureGUI_DistanceDlg::MeasureGUI_DistanceDlg (GeometryGUI* GUI, QWidget* paren
   mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose);
   mainFrame()->RadioButton3->close();
 
-  myGrp = new MeasureGUI_2Sel4LineEdit (centralWidget());
+  mainFrame()->GroupBoxName->hide();
+
+  myGrp = new MeasureGUI_DistanceGroup (centralWidget());
   myGrp->GroupBox1->setTitle(tr("GEOM_MINDIST_OBJ"));
+
+  // Arguments
   myGrp->TextLabel1->setText(tr("GEOM_OBJECT_I").arg("1"));
   myGrp->TextLabel2->setText(tr("GEOM_OBJECT_I").arg("2"));
+  myGrp->PushButton1->setIcon(image1);
+  myGrp->PushButton2->setIcon(image1);
+  myGrp->LineEdit1->setReadOnly(true);
+  myGrp->LineEdit2->setReadOnly(true);
+
+  // Solutions combobox
+  myGrp->TextLabel7->setText(tr("GEOM_SOLUTION"));
+
+  // Distance, dx, dy and dz
   myGrp->TextLabel3->setText(tr("GEOM_LENGTH"));
   myGrp->TextLabel4->setText(tr("GEOM_DX"));
   myGrp->TextLabel5->setText(tr("GEOM_DY"));
   myGrp->TextLabel6->setText(tr("GEOM_DZ"));
   myGrp->LineEdit3->setReadOnly(true);
-  myGrp->PushButton1->setIcon(image1);
-  myGrp->PushButton2->setIcon(image1);
-  myGrp->LineEdit1->setReadOnly(true);
-  myGrp->LineEdit2->setReadOnly(true);
   myGrp->LineEdit4->setReadOnly(true);
   myGrp->LineEdit5->setReadOnly(true);
   myGrp->LineEdit6->setReadOnly(true);
@@ -128,10 +137,11 @@ void MeasureGUI_DistanceDlg::Init()
   connect(myGrp->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
   connect(myGrp->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
 
+  connect(myGrp->ComboBox1, SIGNAL(currentIndexChanged(int)), this, SLOT(SolutionSelected(int)));
+
   connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
           this, SLOT(SelectionIntoArgument()));
 
-  initName(tr("GEOM_DISTANCE"));
   globalSelection();
   SelectionIntoArgument();
 }
@@ -184,6 +194,38 @@ void MeasureGUI_DistanceDlg::enterEvent(QEvent*)
     ActivateThisDialog();
 }
 
+//=================================================================================
+// function : SolutionSelected()
+// purpose  : Called when ComboBox selection has changed
+//=================================================================================
+void MeasureGUI_DistanceDlg::SolutionSelected (int i)
+{
+  if (i < 0 || myDbls->length() <= i*6) {
+    myGrp->LineEdit3->setText("");
+    myGrp->LineEdit4->setText("");
+    myGrp->LineEdit5->setText("");
+    myGrp->LineEdit6->setText("");
+    erasePreview();
+    return;
+  }
+
+  SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+  int aPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 );
+
+  gp_Pnt p1 (myDbls[i*6 + 0], myDbls[i*6 + 1], myDbls[i*6 + 2]);
+  gp_Pnt p2 (myDbls[i*6 + 3], myDbls[i*6 + 4], myDbls[i*6 + 5]);
+
+  double aDist = p1.Distance(p2);
+  myGrp->LineEdit3->setText(DlgRef::PrintDoubleValue(aDist, aPrecision));
+
+  gp_XYZ aVec = p2.XYZ() - p1.XYZ();
+  myGrp->LineEdit4->setText(DlgRef::PrintDoubleValue(aVec.X(), aPrecision));
+  myGrp->LineEdit5->setText(DlgRef::PrintDoubleValue(aVec.Y(), aPrecision));
+  myGrp->LineEdit6->setText(DlgRef::PrintDoubleValue(aVec.Z(), aPrecision));
+
+  redisplayPreview();
+}
+
 //=================================================================================
 // function : SelectionIntoArgument()
 // purpose  : Called when selection has changed
@@ -260,56 +302,29 @@ void MeasureGUI_DistanceDlg::processObject()
   myGrp->LineEdit1->setText(!myObj1->_is_nil() ? GEOMBase::GetName(myObj1) : "");
   myGrp->LineEdit2->setText(!myObj2->_is_nil() ? GEOMBase::GetName(myObj2) : "");
 
-  gp_Pnt aPnt1, aPnt2;
-  double aDist = 0.;
-  if (getParameters(aDist, aPnt1, aPnt2)) {
-    SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
-    int aPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 );
+  myGrp->ComboBox1->clear();
+  erasePreview();
 
-    myGrp->LineEdit3->setText(DlgRef::PrintDoubleValue(aDist, aPrecision));
+  int nbSols = 0;
 
-    gp_XYZ aVec = aPnt2.XYZ() - aPnt1.XYZ();
-    myGrp->LineEdit4->setText(DlgRef::PrintDoubleValue(aVec.X(), aPrecision));
-    myGrp->LineEdit5->setText(DlgRef::PrintDoubleValue(aVec.Y(), aPrecision));
-    myGrp->LineEdit6->setText(DlgRef::PrintDoubleValue(aVec.Z(), aPrecision));
+  QString msg;
+  if (!isValid(msg)) return;
 
-    redisplayPreview();
+  GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation());
+  try {
+    nbSols = anOper->ClosestPoints(myObj1, myObj2, myDbls);
   }
-  else {
-    myGrp->LineEdit3->setText("");
-    myGrp->LineEdit4->setText("");
-    myGrp->LineEdit5->setText("");
-    myGrp->LineEdit6->setText("");
-    erasePreview();
+  catch (const SALOME::SALOME_Exception& e) {
+    SalomeApp_Tools::QtCatchCorbaException(e);
+    return;
   }
-}
 
-//=================================================================================
-// function : getParameters()
-// purpose  : Get distance between objects
-//=================================================================================
-bool MeasureGUI_DistanceDlg::getParameters (double& theDistance, gp_Pnt& thePnt1, gp_Pnt& thePnt2)
-{
-  QString msg;
-  if (isValid(msg)) {
-    GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation());
-
-    try {
-      double x1, y1, z1, x2, y2, z2;
-      theDistance = anOper->GetMinDistance(myObj1, myObj2, x1, y1, z1, x2, y2, z2);
-
-      thePnt1.SetCoord(x1, y1, z1);
-      thePnt2.SetCoord(x2, y2, z2);
-    }
-    catch (const SALOME::SALOME_Exception& e) {
-      SalomeApp_Tools::QtCatchCorbaException(e);
-      return false;
+  if (anOper->IsDone() && nbSols > 0) {
+    for (int i = 0; i < nbSols; i++) {
+      myGrp->ComboBox1->addItem(QString("Solution %1").arg(i + 1));
     }
-
-    return anOper->IsDone();
+    myGrp->ComboBox1->setCurrentIndex(0);
   }
-
-  return false;
 }
 
 //=================================================================================
@@ -318,16 +333,19 @@ bool MeasureGUI_DistanceDlg::getParameters (double& theDistance, gp_Pnt& thePnt1
 //=================================================================================
 SALOME_Prs* MeasureGUI_DistanceDlg::buildPrs()
 {
-  double aDist = 0.;
-  gp_Pnt aPnt1 (0, 0, 0), aPnt2 (0, 0, 0);
-
   SUIT_ViewWindow* vw = SUIT_Session::session()->activeApplication()->desktop()->activeWindow();
 
-  if (myObj1->_is_nil() || myObj2->_is_nil() ||
-      !getParameters(aDist, aPnt1, aPnt2) ||
+  int currSol = myGrp->ComboBox1->currentIndex();
+
+  if (myObj1->_is_nil() || myObj2->_is_nil() || currSol == -1 ||
       vw->getViewManager()->getType() != OCCViewer_Viewer::Type())
     return 0;
 
+  gp_Pnt aPnt1 (myDbls[currSol*6 + 0], myDbls[currSol*6 + 1], myDbls[currSol*6 + 2]);
+  gp_Pnt aPnt2 (myDbls[currSol*6 + 3], myDbls[currSol*6 + 4], myDbls[currSol*6 + 5]);
+
+  double aDist = aPnt1.Distance(aPnt2);
+
   try
   {
     if (aDist <= 1.e-9) {
@@ -408,15 +426,19 @@ bool MeasureGUI_DistanceDlg::execute (ObjectList& objects)
   GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation());
   GEOM::GEOM_IBasicOperations_var aBasicOper = getGeomEngine()->GetIBasicOperations(getStudyId());
 
-  double x1, y1, z1, x2, y2, z2;
-  double aDist = anOper->GetMinDistance(myObj1, myObj2, x1, y1, z1, x2, y2, z2);
+  GEOM::ListOfDouble_var aDbls;
+  int nbSols = anOper->ClosestPoints(myObj1, myObj2, aDbls);
 
-  GEOM::GEOM_Object_var anObj1 = aBasicOper->MakePointXYZ(x1, y1, z1);
-  GEOM::GEOM_Object_var anObj2 = aBasicOper->MakePointXYZ(x2, y2, z2);
+  if (anOper->IsDone()) {
+    for (int i = 0; i < nbSols; i++) {
+      GEOM::GEOM_Object_var anObj1 = aBasicOper->MakePointXYZ(aDbls[i*6 + 0], aDbls[i*6 + 1], aDbls[i*6 + 2]);
+      GEOM::GEOM_Object_var anObj2 = aBasicOper->MakePointXYZ(aDbls[i*6 + 3], aDbls[i*6 + 4], aDbls[i*6 + 5]);
 
-  if (!anObj1->_is_nil() && !anObj2->_is_nil()) {
-    objects.push_back(anObj1._retn());
-    objects.push_back(anObj2._retn());
+      if (!anObj1->_is_nil() && !anObj2->_is_nil()) {
+        objects.push_back(anObj1._retn());
+        objects.push_back(anObj2._retn());
+      }
+    }
   }
 
   return true;
@@ -449,3 +471,95 @@ void MeasureGUI_DistanceDlg::redisplayPreview()
     SalomeApp_Tools::QtCatchCorbaException(e);
   }
 }
+
+//================================================================
+// Function : getNewObjectName
+// Purpose  : Redefine this method to return proper name for a new object
+//================================================================
+QString MeasureGUI_DistanceDlg::getNewObjectName (int currObj) const
+{
+  QString aName = tr("GEOM_MINDIST_NAME") + QString("_%1_").arg((currObj+1)/2);
+  aName += GEOMBase::GetName(currObj%2 ? myObj1 : myObj2);
+
+  return aName;
+}
+
+//=================================================================================
+// function : MeasureGUI_DistanceGroup
+// purpose  :
+//=================================================================================
+MeasureGUI_DistanceGroup::MeasureGUI_DistanceGroup (QWidget *parent)
+{
+  gridLayout = new QGridLayout (parent);
+  gridLayout->setSpacing(6);
+  gridLayout->setContentsMargins(11, 11, 11, 11);
+  gridLayout->setHorizontalSpacing(0);
+  gridLayout->setVerticalSpacing(0);
+  gridLayout->setContentsMargins(0, 0, 0, 0);
+
+  GroupBox1 = new QGroupBox (parent);
+
+  gridLayout1 = new QGridLayout (GroupBox1);
+  gridLayout1->setSpacing(6);
+  gridLayout1->setContentsMargins(11, 11, 11, 11);
+  gridLayout1->setHorizontalSpacing(6);
+  gridLayout1->setVerticalSpacing(6);
+  gridLayout1->setContentsMargins(9, 9, 9, 9);
+
+  // 2Sel
+  TextLabel1 = new QLabel(GroupBox1);
+  TextLabel2 = new QLabel(GroupBox1);
+
+  PushButton1 = new QPushButton (GroupBox1);
+  PushButton2 = new QPushButton (GroupBox1);
+
+  LineEdit1 = new QLineEdit(GroupBox1);
+  LineEdit2 = new QLineEdit(GroupBox1);
+
+  gridLayout1->addWidget(TextLabel1, 0, 0, 1, 1);
+  gridLayout1->addWidget(TextLabel2, 1, 0, 1, 1);
+  gridLayout1->addWidget(PushButton1, 0, 1, 1, 1);
+  gridLayout1->addWidget(PushButton2, 1, 1, 1, 1);
+  gridLayout1->addWidget(LineEdit1, 0, 2, 1, 1);
+  gridLayout1->addWidget(LineEdit2, 1, 2, 1, 1);
+
+  // 1Combo
+  TextLabel7 = new QLabel (GroupBox1);
+
+  ComboBox1 = new QComboBox (GroupBox1);
+
+  gridLayout1->addWidget(TextLabel7, 2, 0, 1, 1);
+  gridLayout1->addWidget(ComboBox1, 2, 1, 1, 2);
+
+  // 4Text
+  TextLabel3 = new QLabel (GroupBox1);
+  TextLabel4 = new QLabel (GroupBox1);
+  TextLabel5 = new QLabel (GroupBox1);
+  TextLabel6 = new QLabel (GroupBox1);
+
+  LineEdit3 = new QLineEdit(GroupBox1);
+  LineEdit4 = new QLineEdit(GroupBox1);
+  LineEdit5 = new QLineEdit(GroupBox1);
+  LineEdit6 = new QLineEdit(GroupBox1);
+
+  gridLayout1->addWidget(TextLabel3, 3, 0, 1, 1);
+  gridLayout1->addWidget(TextLabel4, 4, 0, 1, 1);
+  gridLayout1->addWidget(TextLabel5, 5, 0, 1, 1);
+  gridLayout1->addWidget(TextLabel6, 6, 0, 1, 1);
+
+  gridLayout1->addWidget(LineEdit3, 3, 1, 1, 2);
+  gridLayout1->addWidget(LineEdit4, 4, 1, 1, 2);
+  gridLayout1->addWidget(LineEdit5, 5, 1, 1, 2);
+  gridLayout1->addWidget(LineEdit6, 6, 1, 1, 2);
+
+  gridLayout->addWidget(GroupBox1, 0, 0, 1, 1);
+}
+
+//=================================================================================
+// function : ~MeasureGUI_DistanceGroup()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+MeasureGUI_DistanceGroup::~MeasureGUI_DistanceGroup()
+{
+  // no need to delete child widgets, Qt does it all for us
+}
index 83a44272c7d319c83e8b5f4818e5162f98368790..9f4c7992cbe0a4647276ad3d98f5c74f548d7cbe 100644 (file)
 
 #include <GEOMBase_Skeleton.h>
 
-class MeasureGUI_2Sel4LineEdit;
+// IDL Headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(GEOM_Gen)
+
+#include <QGridLayout>
+#include <QGroupBox>
+#include <QLabel>
+#include <QPushButton>
+#include <QLineEdit>
+#include <QComboBox>
+
 class gp_Pnt;
 
+//=================================================================================
+// class    : MeasureGUI_DistanceGroup
+// purpose  :
+//=================================================================================
+class MeasureGUI_DistanceGroup : public QWidget
+{
+  Q_OBJECT
+
+ public:
+  MeasureGUI_DistanceGroup (QWidget *parent);
+  ~MeasureGUI_DistanceGroup();
+
+ public:
+  QGridLayout *gridLayout;
+  QGroupBox *GroupBox1;
+  QGridLayout *gridLayout1;
+
+  // 2Sel
+  QLabel *TextLabel1;
+  QLabel *TextLabel2;
+  QPushButton *PushButton1;
+  QPushButton *PushButton2;
+  QLineEdit *LineEdit1;
+  QLineEdit *LineEdit2;
+
+  // 1Combo
+  QLabel *TextLabel7;
+  QComboBox *ComboBox1;
+
+  // 4Text
+  QLabel *TextLabel3;
+  QLabel *TextLabel4;
+  QLabel *TextLabel5;
+  QLabel *TextLabel6;
+  QLineEdit *LineEdit3;
+  QLineEdit *LineEdit4;
+  QLineEdit *LineEdit5;
+  QLineEdit *LineEdit6;
+};
+
 //=================================================================================
 // class    : MeasureGUI_DistanceDlg
 // purpose  :
@@ -48,6 +98,7 @@ protected:
   virtual GEOM::GEOM_IOperations_ptr  createOperation();
   virtual bool                        isValid (QString&);
   virtual bool                        execute (ObjectList&);
+  virtual QString                     getNewObjectName (int CurrObj = -1) const; 
 
   void                                redisplayPreview();
   virtual void                        processObject();
@@ -56,13 +107,13 @@ protected:
 private:
   void                                Init();
   void                                enterEvent (QEvent*);
-  bool                                getParameters (double&, gp_Pnt&, gp_Pnt&);
 
 private:
   GEOM::GEOM_Object_var               myObj1;
   GEOM::GEOM_Object_var               myObj2;
 
-  MeasureGUI_2Sel4LineEdit*           myGrp;
+  MeasureGUI_DistanceGroup*           myGrp;
+  GEOM::ListOfDouble_var              myDbls;
 
 private slots:
   void                                ClickOnOk();
@@ -70,6 +121,7 @@ private slots:
   void                                ActivateThisDialog();
   void                                SelectionIntoArgument();
   void                                SetEditCurrentArgument();
+  void                                SolutionSelected (int i);
 };
 
 #endif // MEASUREGUI_DISTANCEDLG_H
index 5cb2936fdd519c02e78c282a25eeeeb0d3bf7d09..d9b93cf1e037bbea106677a02ec207afcc413f24 100644 (file)
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
 
 // File   : MeasureGUI_Widgets.cxx
 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
-//
+
 #include "MeasureGUI_Widgets.h"
 
 //////////////////////////////////////////
@@ -121,20 +120,6 @@ MeasureGUI_2Sel1LineEdit::~MeasureGUI_2Sel1LineEdit()
 {
 }
 
-//////////////////////////////////////////
-// MeasureGUI_2Sel4LineEdit
-//////////////////////////////////////////
-
-MeasureGUI_2Sel4LineEdit::MeasureGUI_2Sel4LineEdit( QWidget* parent, Qt::WindowFlags f )
-: QWidget( parent, f )
-{
-  setupUi( this );
-}
-
-MeasureGUI_2Sel4LineEdit::~MeasureGUI_2Sel4LineEdit()
-{
-}
-
 //////////////////////////////////////////
 // MeasureGUI_SkeletonBox
 //////////////////////////////////////////
index 17067d0675c4d1d662f01a99320746525bc4c7a5..651b652982030935ea66f97c59439559216fe0e4 100644 (file)
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
 
 // File   : MeasureGUI_Widgets.h
 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
-//
+
 #ifndef MEASUREGUI_WIDGETS_H
 #define MEASUREGUI_WIDGETS_H
 
@@ -135,22 +134,6 @@ public:
   ~MeasureGUI_2Sel1LineEdit();
 };
 
-//////////////////////////////////////////
-// MeasureGUI_2Sel4LineEdit
-//////////////////////////////////////////
-
-#include "ui_MeasureGUI_2Sel4LineEdit_QTD.h"
-
-class MeasureGUI_2Sel4LineEdit : public QWidget, 
-                                 public Ui::MeasureGUI_2Sel4LineEdit_QTD
-{
-  Q_OBJECT
-
-public:
-  MeasureGUI_2Sel4LineEdit( QWidget* = 0, Qt::WindowFlags = 0 );
-  ~MeasureGUI_2Sel4LineEdit();
-};
-
 //////////////////////////////////////////
 // MeasureGUI_SkeletonBox
 //////////////////////////////////////////