]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
0022765: [EDF] Improvement of local selection mechanism ana/22765
authorana <ana@opencascade.com>
Wed, 19 Nov 2014 12:40:00 +0000 (15:40 +0300)
committerana <ana@opencascade.com>
Wed, 19 Nov 2014 12:40:00 +0000 (15:40 +0300)
First step

38 files changed:
doc/salome/gui/GEOM/images/point4.png
doc/salome/gui/GEOM/input/angle.doc
doc/salome/gui/GEOM/input/basic_prop.doc
doc/salome/gui/GEOM/input/bounding_box.doc
doc/salome/gui/GEOM/input/center_mass.doc
doc/salome/gui/GEOM/input/creating_point.doc
doc/salome/gui/GEOM/input/inertia.doc
doc/salome/gui/GEOM/input/min_distance.doc
doc/salome/gui/GEOM/input/tolerance.doc
src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx
src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h
src/BasicGUI/BasicGUI_PointDlg.cxx
src/BasicGUI/BasicGUI_PointDlg.h
src/GEOMBase/GEOMBase_Helper.cxx
src/GEOMBase/GEOMBase_Helper.h
src/GEOMGUI/GEOM_Displayer.cxx
src/GEOMGUI/GEOM_Displayer.h
src/GenerationGUI/GenerationGUI_FillingDlg.cxx
src/GenerationGUI/GenerationGUI_FillingDlg.h
src/MeasureGUI/MeasureGUI_AngleDlg.cxx
src/MeasureGUI/MeasureGUI_AngleDlg.h
src/MeasureGUI/MeasureGUI_BndBoxDlg.cxx
src/MeasureGUI/MeasureGUI_BndBoxDlg.h
src/MeasureGUI/MeasureGUI_CenterMassDlg.cxx
src/MeasureGUI/MeasureGUI_CenterMassDlg.h
src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.cxx
src/MeasureGUI/MeasureGUI_DistanceDlg.cxx
src/MeasureGUI/MeasureGUI_DistanceDlg.h
src/MeasureGUI/MeasureGUI_InertiaDlg.cxx
src/MeasureGUI/MeasureGUI_InertiaDlg.h
src/MeasureGUI/MeasureGUI_MaxToleranceDlg.cxx
src/MeasureGUI/MeasureGUI_MaxToleranceDlg.h
src/MeasureGUI/MeasureGUI_PointDlg.cxx
src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx
src/MeasureGUI/MeasureGUI_PropertiesDlg.h
src/MeasureGUI/MeasureGUI_Skeleton.cxx
src/MeasureGUI/MeasureGUI_Skeleton.h
src/MeasureGUI/MeasureGUI_WhatisDlg.cxx

index dc3e08641294a28f28cc5761d7cae25718d471f4..3be67dbca1f2a8cea42414df116ccffe2a007fe5 100755 (executable)
Binary files a/doc/salome/gui/GEOM/images/point4.png and b/doc/salome/gui/GEOM/images/point4.png differ
index 0a3e46b7d79d445bdbcf65584a6b4646e2214c3a..3e81e3340c59dab069b93103a4a3cbc5873e0c6a 100644 (file)
@@ -4,6 +4,10 @@
 
 This operation returns the angle in degrees between two lines or linear edges.
 
+\n The appropriate "local" selection is automatically switched on. If there are several entities of allowed types under the mouse cursor, first of them (top-level one) is highlighted. 
+Press <CTRL> button and scroll the mouse wheel to switch between different available shapes that are pointed by the mouse cursor. The corresponding entities are highlighted in the viewer. 
+Press left mouse button to select appropriate object to the dialog box.
+
 \image html angle.png
 
 If both objects are <b>vectors</b>, the angle is computed in accordance with their orientations, otherwise the minimum angle is computed.
index 05b539e0c3e540fa8c0818ffe7910105924dc863..2a1c8b9ad3e0d54569f9426ad9ffbfefa7f2cd26 100644 (file)
@@ -5,6 +5,10 @@
 This operation returns Length, Surface and Volume properties for the selected
 geometrical object.
 
+\n The appropriate "local" selection is automatically switched on. If there are several entities of allowed types under the mouse cursor, first of them (top-level one) is highlighted. 
+Press <CTRL> button and scroll the mouse wheel to switch between different available shapes that are pointed by the mouse cursor. The corresponding entities are highlighted in the viewer. 
+Press left mouse button to select appropriate object to the dialog box.
+
 \image html neo-basicprop.png
 
 \n<b>TUI Command:</b> <em>geompy.BasicProperties(Shape),</em> where
index 5d963b0976981c13f36232ecca67df8a8565918d..71e2b3f752235e420c034f0fd4cb08cf263efd31 100644 (file)
@@ -4,6 +4,10 @@
 
 This operation performs precise computation of bounding box for the selected geometrical object and displays its dimensions.
 
+\n The appropriate "local" selection is automatically switched on. If there are several entities of allowed types under the mouse cursor, first of them (top-level one) is highlighted. 
+Press <CTRL> button and scroll the mouse wheel to switch between different available shapes that are pointed by the mouse cursor. The corresponding entities are highlighted in the viewer. 
+Press left mouse button to select appropriate object to the dialog box.
+
 \image html measures5.png
 
 The coordinates of two corners of its bounding box are shown in the table. 
index c50370de5d1165532461579e5115354753e100f1..7cab8da4532e1309924f34b7453defef60871d6e 100644 (file)
@@ -5,6 +5,10 @@
 This operation calculates and returns the coordinates of the gravity center for
 the selected geometrical object.
 
+\n The appropriate "local" selection is automatically switched on. If there are several entities of allowed types under the mouse cursor, first of them (top-level one) is highlighted. 
+Press <CTRL> button and scroll the mouse wheel to switch between different available shapes that are pointed by the mouse cursor. The corresponding entities are highlighted in the viewer. 
+Press left mouse button to select appropriate object to the dialog box.
+
 \image html measures3.png
 
 Press \b Apply or <b>Apply and Close</b> button to publish the \b Point in the study. 
index a235bf0cd6a35f7e58e1566f91e178b793791085..c4641a7a58308c9da3ce8f8d529485077be66b25 100644 (file)
@@ -53,8 +53,10 @@ projected on the given edge to produce the resulting point.
 projected point.
 \image html point3_2.png
 
-\n Fourthly, we can define a point by intersection of two \b Lines or \b Wires (or a Wire and a Line). 
-If they intersect only once, a point will be created. If there are several intersections, a compound of points will be created. The type of the selected object (Line or Wire) can be changed in the popup menu, after clicking the corresponding selection button. 
+\n Fourthly, we can define a point by intersection of two \b Lines or \b Wires (or a Wire and a Line).
+The appropriate "local" selection is automatically switched on. If there are several entities of allowed types under the mouse cursor, first of them (top-level one) is highlighted. 
+Press <CTRL> button and scroll the mouse wheel to switch between different available shapes that are pointed by the mouse cursor. The corresponding entities are highlighted in the viewer. Press left mouse button to select appropriate object to the dialog box. 
+If they intersect only once, a point will be created. If there are several intersections, a compound of points will be created.
 \n <b>TUI Command:</b> <em>geompy.MakePointOnLinesIntersection(myLine1,myWire1).</em>
 \n <b>Arguments:</b> Name + 2 1D objects
 
index 70b368497b767128eab193a1b9e40f5f1ede8720..d2fe665dcf7eb504dc45297c51906ff99476c6d9 100644 (file)
@@ -4,6 +4,10 @@
 
 This operation returns the axial moments of inertia for the selected geometrical object.
 
+\n The appropriate "local" selection is automatically switched on. If there are several entities of allowed types under the mouse cursor, first of them (top-level one) is highlighted. 
+Press <CTRL> button and scroll the mouse wheel to switch between different available shapes that are pointed by the mouse cursor. The corresponding entities are highlighted in the viewer. 
+Press left mouse button to select appropriate object to the dialog box.
+
 \image html measures4.png
 
 The table displays:
index d4fa336b77bb3320a8461b055dce45df7b5c5472..4188890f9f8e3edac14279489fbde7b0096117c7 100644 (file)
@@ -4,6 +4,10 @@
 
 This operation returns the minimum distance between two geometrical objects.
 
+\n The appropriate "local" selection is automatically switched on. If there are several entities of allowed types under the mouse cursor, first of them (top-level one) is highlighted. 
+Press <CTRL> button and scroll the mouse wheel to switch between different available shapes that are pointed by the mouse cursor. The corresponding entities are highlighted in the viewer. 
+Press left mouse button to select appropriate object to the dialog box.
+
 \image html distance.png
 
 The query for minimum distance can find one or more solutions, or even an infinite set of solutions. 
index 2b0bdd0c697ea9cb4cd35bd15a4b1b39aeeccff2..2dd15097c64a361aca6e615b1b21514f63f1a2c6 100644 (file)
@@ -5,6 +5,10 @@
 This operation returns the maximum and the minimum tolerance for the selected
 geometrical object.
 
+\n The appropriate "local" selection is automatically switched on. If there are several entities of allowed types under the mouse cursor, first of them (top-level one) is highlighted. 
+Press <CTRL> button and scroll the mouse wheel to switch between different available shapes that are pointed by the mouse cursor. The corresponding entities are highlighted in the viewer. 
+Press left mouse button to select appropriate object to the dialog box.
+
 \image html new-tolerance.png
 
 The table displays \b Min and \b Max tolerance values for \b Face, \b Edge and \b Vertex tolerance. 
index 89c5f68ce9ccf3934dfdd5524d6d5d493d170f36..2f276ef1e8577669eecb1a4e6b961cbf5bd83728 100644 (file)
@@ -119,6 +119,8 @@ void AdvancedGUI_SmoothingSurfaceDlg::Init()
 
   showOnlyPreviewControl();
 
+  globalSelection();
+  localSelection(GEOM::GEOM_Object::_nil(), TopAbs_VERTEX );
   //@@ initialize dialog box widgets here @@//
 
   // Signal/slot connections
@@ -160,7 +162,8 @@ bool AdvancedGUI_SmoothingSurfaceDlg::ClickOnApply()
     return false;
 
   initName();
-
+  globalSelection();
+  localSelection(GEOM::GEOM_Object::_nil(), TopAbs_VERTEX );
   return true;
 }
 
@@ -171,6 +174,8 @@ bool AdvancedGUI_SmoothingSurfaceDlg::ClickOnApply()
 void AdvancedGUI_SmoothingSurfaceDlg::ActivateThisDialog()
 {
   GEOMBase_Skeleton::ActivateThisDialog();
+  globalSelection();
+  localSelection(GEOM::GEOM_Object::_nil(), TopAbs_VERTEX );
   //displayPreview();
 }
 
@@ -249,6 +254,16 @@ bool AdvancedGUI_SmoothingSurfaceDlg::execute (ObjectList& objects)
   return res;
 }
 
+//=================================================================================
+// function : addSubshapesToStudy
+// purpose  : virtual method to add new SubObjects if local selection
+//=================================================================================
+void AdvancedGUI_SmoothingSurfaceDlg::addSubshapesToStudy()
+{
+  for ( int i = 0; i < myPoints.count(); i++ )
+    GEOMBase::PublishSubObject( myPoints[i].get() );
+}
+
 //=================================================================================
 // function : getNbPoints()
 // purpose  : Returns the number of points in myPoints list.
@@ -337,5 +352,7 @@ void AdvancedGUI_SmoothingSurfaceDlg::SetEditCurrentArgument()
   if ( sender() == GroupPoints->PushButton1 )
     myEditCurrentArgument = GroupPoints->LineEdit1;
   myEditCurrentArgument->setFocus();
+  globalSelection();
+  localSelection(GEOM::GEOM_Object::_nil(), TopAbs_VERTEX );
   SelectionIntoArgument();
 }
index 822d2aa0f8db29d965c866b85953cfa23faf1cac..23e800647c81c39cb49eb9a13306035f915138c8 100644 (file)
@@ -45,6 +45,7 @@ protected:
   virtual GEOM::GEOM_IOperations_ptr createOperation();
   virtual bool                       isValid( QString& );
   virtual bool                       execute( ObjectList& );
+  virtual void                       addSubshapesToStudy();
 
 private:
   void                               Init();
index 868c607bbca6af9a08a1f45efc0716ff390cb792..cf535621480e71bf541cb8a7461e16ecf0a5869e 100644 (file)
@@ -45,6 +45,7 @@
 #include <QRadioButton>
 #include <QMenu>
 #include <QTimer>
+#include <QList>
 
 #include <gp_Pnt.hxx>
 #include <TopoDS_Shape.hxx>
@@ -68,8 +69,6 @@
 #define SPACING 6
 #define MARGIN  9
 
-enum { SelectEdge, SelectWire };
-
 //=================================================================================
 // class    : BasicGUI_PointDlg()
 // purpose  : Constructs a BasicGUI_PointDlg which is a child of 'parent', with the
@@ -150,20 +149,15 @@ BasicGUI_PointDlg::BasicGUI_PointDlg(GeometryGUI* theGeometryGUI, QWidget* paren
   GroupRefPoint->TextLabel4->setText(tr("GEOM_DZ"));
 
   /* popup menu for line intersect buttons */
-  myBtnPopup = new QMenu(this);
   QIcon ico_line = QIcon(image6);
   QIcon ico_wire = QIcon(image7);
-  myActions[myBtnPopup->addAction(ico_line, tr("GEOM_EDGE"))] = SelectEdge;
-  myActions[myBtnPopup->addAction(ico_wire, tr("GEOM_WIRE"))] = SelectWire;
 
   GroupLineIntersection = new DlgRef_2Sel(centralWidget());
   GroupLineIntersection->GroupBox1->setTitle(tr("GEOM_LINE_INTERSECTION"));
   GroupLineIntersection->TextLabel1->setText(tr("GEOM_LINE1"));
   GroupLineIntersection->TextLabel2->setText(tr("GEOM_LINE2"));
   GroupLineIntersection->PushButton1->setIcon(image2);
-  GroupLineIntersection->PushButton1->setMenu(myBtnPopup);
   GroupLineIntersection->PushButton2->setIcon(image2);
-  GroupLineIntersection->PushButton2->setMenu(myBtnPopup);
   GroupLineIntersection->LineEdit2->setEnabled(false);
 
   myCoordGrp = new QGroupBox(tr("GEOM_COORDINATES_RES"), centralWidget());
@@ -286,9 +280,7 @@ void BasicGUI_PointDlg::Init()
   connect(GroupOnSurface->PushButton1,        SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
   connect(GroupLineIntersection->PushButton1, SIGNAL(pressed()), this, SLOT(SetEditCurrentArgument()));
   connect(GroupLineIntersection->PushButton2, SIGNAL(pressed()), this, SLOT(SetEditCurrentArgument()));
-
-  connect(myBtnPopup, SIGNAL(triggered(QAction*)), this, SLOT(onBtnPopup(QAction*)));
-
+  
   connect(GroupOnCurve->SpinBox_DX,   SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
   connect(GroupOnSurface->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
   connect(GroupOnSurface->SpinBox_DY, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
@@ -391,8 +383,9 @@ void BasicGUI_PointDlg::ConstructorsClicked(int constructorId)
   case GEOM_POINT_INTINT:
     {
       globalSelection(); // close local contexts, if any
-      myNeedType = TopAbs_EDGE;
-      localSelection(GEOM::GEOM_Object::_nil(), myNeedType);
+      std::list<int> needTypes;
+      needTypes.push_back( TopAbs_EDGE ), needTypes.push_back( TopAbs_WIRE );
+      localSelection(GEOM::GEOM_Object::_nil(), needTypes );
 
       myEditCurrentArgument = GroupLineIntersection->LineEdit1;
       GroupLineIntersection->LineEdit1->setText("");
@@ -500,7 +493,14 @@ void BasicGUI_PointDlg::SelectionIntoArgument()
       myLine2.nullify();
   }
 
-  GEOM::GeomObjPtr aSelectedObject = getSelected(myNeedType);
+  GEOM::GeomObjPtr aSelectedObject;
+  if (id == GEOM_POINT_INTINT) {
+    QList<TopAbs_ShapeEnum> needTypes;
+    needTypes << TopAbs_EDGE, needTypes << TopAbs_WIRE;
+    aSelectedObject= getSelected(needTypes);
+  }
+  else 
+    aSelectedObject= getSelected(myNeedType);
   TopoDS_Shape aShape;
   if (aSelectedObject && GEOMBase::GetShape(aSelectedObject.get(), aShape) && !aShape.IsNull()) {
     QString aName = GEOMBase::GetName(aSelectedObject.get());
@@ -535,19 +535,13 @@ void BasicGUI_PointDlg::SelectionIntoArgument()
       if (myEditCurrentArgument == GroupLineIntersection->LineEdit1) {
         myLine1 = aSelectedObject;
         if (myLine1 && !myLine2) {
-          GroupLineIntersection->PushButton2->setMenu(0);
           GroupLineIntersection->PushButton2->click();
-          GroupLineIntersection->PushButton2->setDown(true);
-          GroupLineIntersection->PushButton2->setMenu(myBtnPopup);
         }
       }
       else if (myEditCurrentArgument == GroupLineIntersection->LineEdit2) {
         myLine2 = aSelectedObject;
         if (myLine2 && !myLine1) {
-          GroupLineIntersection->PushButton1->setMenu(0);
           GroupLineIntersection->PushButton1->click();
-          GroupLineIntersection->PushButton1->setDown(true);
-          GroupLineIntersection->PushButton1->setMenu(myBtnPopup);
         }
       }
     }
@@ -992,17 +986,6 @@ void BasicGUI_PointDlg::updateParamCoord(bool theIsUpdate)
     QTimer::singleShot(50, this, SLOT(updateSize()));
 }
 
-//=================================================================================
-// function : onBtnPopup()
-// purpose  :
-//=================================================================================
-void BasicGUI_PointDlg::onBtnPopup(QAction* a)
-{
-  globalSelection(); // close local contexts, if any
-  myNeedType = myActions[a] == SelectEdge ? TopAbs_EDGE : TopAbs_WIRE;
-  localSelection(GEOM::GEOM_Object::_nil(), myNeedType);
-}
-
 //=================================================================================
 // function : updateSize
 // purpose  : adjust dialog size to minimum
index ddd413f7b96573070f2161a85d89d8c0c195ec80..ec691ae945fa654d5d01336508159f625aa27b1f 100644 (file)
@@ -99,7 +99,6 @@ private:
   QGroupBox*                         myParamGroup;
   QButtonGroup*                      myParamCoord;
 
-  QMenu*                             myBtnPopup;
   QMap<QAction*, int>                myActions;
 
   TopAbs_ShapeEnum                   myNeedType;
@@ -116,7 +115,6 @@ private slots:
   void                               SetDoubleSpinBoxStep( double );
   void                               ClickParamCoord( int );
   void                               CheckBoxClicked( int );
-  void                               onBtnPopup( QAction* );
   void                               updateSize();
 };
 
index e7b02e6b4e3779ab1c6ef61fdea586bad48f2b4b..ba67388e9d909f5740602224ed7010fda0235980 100755 (executable)
@@ -460,9 +460,9 @@ void GEOMBase_Helper::activate( const int theType )
 //================================================================
 // Function : localSelection
 // Purpose  : Activate selection of sub-shapes in accordance with mode
-//            theMode is from TopAbs_ShapeEnum
+//            modes are from TopAbs_ShapeEnum
 //================================================================
-void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const int theMode )
+void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const std::list<int> modes )
 {
   SALOME_ListIO aListOfIO;
 
@@ -478,7 +478,7 @@ void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const int theMo
         anEntry.toLatin1().constData(), "GEOM", strdup( GEOMBase::GetName( anObj ).toLatin1().constData() ) ) );
   }
 
-  getDisplayer()->LocalSelection( aListOfIO, theMode );
+  getDisplayer()->LocalSelection( aListOfIO, modes );
 }
 
 //================================================================
@@ -486,19 +486,42 @@ void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const int theMo
 // Purpose  : Activate selection of sub-shapes in accordance with mode
 //            theMode is from TopAbs_ShapeEnum
 //================================================================
-void GEOMBase_Helper::localSelection( GEOM::GEOM_Object_ptr obj, const int mode )
+void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const int theMode )
+{
+  std::list<int> modes;
+  modes.push_back( theMode );
+  localSelection( theObjs, modes );
+}
+
+//================================================================
+// Function : localSelection
+// Purpose  : Activate selection of sub-shapes in accordance with mode
+//            modes are from TopAbs_ShapeEnum
+//================================================================
+void GEOMBase_Helper::localSelection( GEOM::GEOM_Object_ptr obj, const std::list<int> modes )
 {
   // If object is null local selection for all objects is activated
   if ( obj->_is_nil() ) {
-    getDisplayer()->LocalSelection( Handle(SALOME_InteractiveObject)(), mode );
+    getDisplayer()->LocalSelection( Handle(SALOME_InteractiveObject)(), modes );
     return;
   }
 
   ObjectList objList;
   objList.push_back( obj );
-  localSelection( objList, mode );
+  localSelection( objList, modes );
 }
 
+//================================================================
+// Function : localSelection
+// Purpose  : Activate selection of sub-shapes in accordance with mode
+//            mode is from TopAbs_ShapeEnum
+//================================================================
+void GEOMBase_Helper::localSelection( GEOM::GEOM_Object_ptr obj, const int mode )
+{
+  std::list<int> modes;
+  modes.push_back( mode );
+  localSelection( obj, modes );
+}
 
 //================================================================
 // Function : globalSelection
index 438c3c26dd3806ad10c591a50440cc5b1a5918f0..731b63d06a8db714d1ca95f7ff91d26cd11d82fb 100755 (executable)
@@ -95,7 +95,9 @@ protected:
                          const bool = true );
   void erasePreview    ( const bool = true );
 
+  void localSelection( const ObjectList&, const std::list<int> );
   void localSelection( const ObjectList&, const int );
+  void localSelection( GEOM::GEOM_Object_ptr, const std::list<int> );
   void localSelection( GEOM::GEOM_Object_ptr, const int );
   void activate( const int );
   void globalSelection( const int = GEOM_ALLOBJECTS, const bool = false  );
index c6815497053b078a0f285e15bb55a08473fe0c7b..fe124e69ecd309717455cd3d8c905783e34b9b5e 100644 (file)
@@ -1772,7 +1772,7 @@ void GEOM_Displayer::internalReset()
  *  of their sub-shapes (with opened local context for OCC viewer)
  */
 //=================================================================
-void GEOM_Displayer::LocalSelection( const Handle(SALOME_InteractiveObject)& theIO, const int theMode )
+void GEOM_Displayer::LocalSelection( const Handle(SALOME_InteractiveObject)& theIO, const std::list<int> modes )
 {
   SUIT_Session* session = SUIT_Session::session();
   SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( session->activeApplication() );
@@ -1789,11 +1789,25 @@ void GEOM_Displayer::LocalSelection( const Handle(SALOME_InteractiveObject)& the
     if (!theIO.IsNull() && !vf->isVisible(theIO))
       Display(theIO);
     SALOME_Prs* prs = vf->CreatePrs( theIO.IsNull() ? 0 : theIO->getEntry() );
-    vf->LocalSelection( prs, theMode );
+    vf->LocalSelection( prs, modes );
     delete prs;  // delete presentation because displayer is its owner
   }
 }
 
+//=================================================================
+/*!
+ *  GEOM_Displayer::LocalSelection
+ *  Activate selection of CAD shapes with activisation of selection
+ *  of their sub-shapes (with opened local context for OCC viewer)
+ */
+//=================================================================
+void GEOM_Displayer::LocalSelection( const Handle(SALOME_InteractiveObject)& theIO, const int theMode )
+{
+  std::list<int> modes;
+  modes.push_back( theMode );
+  LocalSelection( theIO, modes );
+}
+
 //=================================================================
 /*!
  *  GEOM_Displayer::globalSelection
@@ -1907,11 +1921,25 @@ void GEOM_Displayer::GlobalSelection( const TColStd_MapOfInteger& theModes,
  *  of their sub-shapes (with opened local context for OCC viewer)
  */
 //=================================================================
-void GEOM_Displayer::LocalSelection( const SALOME_ListIO& theIOList, const int theMode )
+void GEOM_Displayer::LocalSelection( const SALOME_ListIO& theIOList, const std::list<int> modes )
 {
   SALOME_ListIteratorOfListIO Iter( theIOList );
   for ( ; Iter.More(); Iter.Next() )
-    LocalSelection( Iter.Value(), theMode );
+    LocalSelection( Iter.Value(), modes );
+}
+
+//=================================================================
+/*!
+ *  GEOM_Displayer::LocalSelection
+ *  Activate selection of CAD shapes with activisation of selection
+ *  of their sub-shapes (with opened local context for OCC viewer)
+ */
+//=================================================================
+void GEOM_Displayer::LocalSelection( const SALOME_ListIO& theIOList, const int theMode )
+{
+  std::list<int> modes;
+  modes.push_back( theMode );
+  LocalSelection( theIOList, modes );
 }
 
 //=================================================================
index 7f0d01d9987dc9642d99833ff33dd05faba20d37..bc90d12c88381a5dae7cbbc55a5226cfe728a46d 100644 (file)
@@ -183,7 +183,9 @@ public:
   bool          ToActivate() const;
 
   /* Activate/Deactivate selection*/
+  void         LocalSelection( const Handle(SALOME_InteractiveObject)&, const std::list<int> );
   void         LocalSelection( const Handle(SALOME_InteractiveObject)&, const int );
+  void         LocalSelection( const SALOME_ListIO& theIOList, const std::list<int> );
   void         LocalSelection( const SALOME_ListIO& theIOList, const int );
   void         GlobalSelection( const int = GEOM_ALLOBJECTS, const bool = false );
   void         GlobalSelection( const TColStd_MapOfInteger&, const bool = false, const QList<int>* = 0 );
index 141b9598f91301ffde8e47ca6a14704eb9687178..e45cd85c6624c480b5b46fededc56bda3506619e 100644 (file)
@@ -105,7 +105,8 @@ void GenerationGUI_FillingDlg::Init()
   myEditCurrentArgument = GroupPoints->LineEdit1;
   GroupPoints->LineEdit1->setReadOnly(true);
 
-  globalSelection(GEOM_COMPOUND);
+  globalSelection();
+  localSelection(GEOM::GEOM_Object::_nil(), TopAbs_COMPOUND );
 
   int SpecificStep1 = 1;
   double SpecificStep2 = 0.0001;
@@ -227,6 +228,7 @@ void GenerationGUI_FillingDlg::SetEditCurrentArgument()
     GroupPoints->LineEdit1->setFocus();
     myEditCurrentArgument = GroupPoints->LineEdit1;
     globalSelection(GEOM_COMPOUND);
+    localSelection(GEOM::GEOM_Object::_nil(), TopAbs_COMPOUND );
     this->SelectionIntoArgument();
   }
 }
@@ -240,7 +242,8 @@ void GenerationGUI_FillingDlg::ActivateThisDialog()
   GEOMBase_Skeleton::ActivateThisDialog();
   connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(),
            SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
-  globalSelection(GEOM_COMPOUND);
+    globalSelection(GEOM_COMPOUND);
+    localSelection(GEOM::GEOM_Object::_nil(), TopAbs_COMPOUND );
   processPreview();
 }
 
@@ -372,3 +375,12 @@ bool GenerationGUI_FillingDlg::execute(ObjectList& objects)
 
   return true;
 }
+
+//=================================================================================
+// function : addSubshapesToStudy
+// purpose  : virtual method to add new SubObjects if local selection
+//=================================================================================
+void GenerationGUI_FillingDlg::addSubshapesToStudy()
+{
+  GEOMBase::PublishSubObject( myCompound.get() );
+}
\ No newline at end of file
index a6a828a0431a65d79599a76e503010876d04f2b2..650d048f3f24b206a871d43df118325f3d6684a5 100644 (file)
@@ -49,6 +49,7 @@ protected:
   virtual GEOM::GEOM_IOperations_ptr createOperation();
   virtual bool                       isValid( QString& );
   virtual bool                       execute( ObjectList& );    
+  virtual void                       addSubshapesToStudy();
 
 private:
   void                               Init();
index 9afe3b9226713522d1155c02ee663fe373216f60..6241fbb38572322f34b8afb2faeff3b86814a80d 100644 (file)
@@ -136,7 +136,10 @@ void MeasureGUI_AngleDlg::Init()
   // init variables
   myGrp->LineEdit1->setText("");
   myGrp->LineEdit2->setText("");
-  myObj = myObj2 = GEOM::GEOM_Object::_nil();
+  myGrp->LineEdit1->setEnabled(true);
+  myGrp->LineEdit2->setEnabled(false);
+  myObj.nullify();
+  myObj2.nullify();
 
   mySelBtn   = myGrp->PushButton1;
   mySelEdit  = myGrp->LineEdit1;
@@ -149,7 +152,7 @@ void MeasureGUI_AngleDlg::Init()
   connect(mySelEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
   connect(mySelBtn2,  SIGNAL(clicked()),       this, SLOT(SetEditCurrentArgument()));
 
-  globalSelection(GEOM_LINE);
+  activateSelection();  
   MeasureGUI_Skeleton::Init();
 }
 
@@ -159,15 +162,7 @@ void MeasureGUI_AngleDlg::Init()
 //=================================================================================
 void MeasureGUI_AngleDlg::SelectionIntoArgument()
 {
-  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() );
-  }
+  GEOM::GeomObjPtr aSelectedObject = getSelected( TopAbs_EDGE );
 
   // clear selection
   disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
@@ -177,12 +172,12 @@ void MeasureGUI_AngleDlg::SelectionIntoArgument()
 
   if (myEditCurrentArgument == mySelEdit) {
     myObj = aSelectedObject;
-    if (!myObj->_is_nil() && myObj2->_is_nil())
+    if (myObj && !myObj2)
       myGrp->PushButton2->click();
   }
   else {
     myObj2 = aSelectedObject;
-    if (!myObj2->_is_nil() && myObj->_is_nil())
+    if (myObj2 && !myObj)
       myGrp->PushButton1->click();
   }
 
@@ -195,8 +190,8 @@ void MeasureGUI_AngleDlg::SelectionIntoArgument()
 //=================================================================================
 void MeasureGUI_AngleDlg::processObject()
 {
-  myGrp->LineEdit1->setText(!myObj->_is_nil()  ? GEOMBase::GetName(myObj ) : "");
-  myGrp->LineEdit2->setText(!myObj2->_is_nil() ? GEOMBase::GetName(myObj2) : "");
+  myGrp->LineEdit1->setText(myObj  ? GEOMBase::GetName(myObj.get()) : "");
+  myGrp->LineEdit2->setText(myObj2 ? GEOMBase::GetName(myObj2.get()) : "");
 
   double anAngle = 0.;
   if (getParameters(anAngle)) {
@@ -220,7 +215,7 @@ bool MeasureGUI_AngleDlg::getParameters (double& theAngle)
   if (isValid(msg)) {
     GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow( getOperation() );
     try {
-      theAngle = anOper->GetAngle(myObj, myObj2);
+      theAngle = anOper->GetAngle(myObj.get(), myObj2.get());
     }
     catch(const SALOME::SALOME_Exception& e) {
       SalomeApp_Tools::QtCatchCorbaException(e);
@@ -262,7 +257,7 @@ void MeasureGUI_AngleDlg::SetEditCurrentArgument()
   }
 
   disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
-  globalSelection(GEOM_LINE);
+  activateSelection();
   connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
           this, SLOT(SelectionIntoArgument()));
 
@@ -304,10 +299,11 @@ void MeasureGUI_AngleDlg::LineEditReturnPressed()
 SALOME_Prs* MeasureGUI_AngleDlg::buildPrs()
 {
   double anAngle = 0.;
+  myGrp->LineEdit3->setText("");
 
   SUIT_ViewWindow* vw = SUIT_Session::session()->activeApplication()->desktop()->activeWindow();
 
-  if (myObj->_is_nil() || myObj2->_is_nil() || !getParameters(anAngle) ||
+  if (!myObj || !myObj2 || !getParameters(anAngle) ||
        vw->getViewManager()->getType() != OCCViewer_Viewer::Type())
     return 0;
 
@@ -315,8 +311,8 @@ SALOME_Prs* MeasureGUI_AngleDlg::buildPrs()
     try {
       OCC_CATCH_SIGNALS;
       TopoDS_Shape S1, S2;
-      if (GEOMBase::GetShape(myObj , S1, TopAbs_EDGE) &&
-           GEOMBase::GetShape(myObj2, S2, TopAbs_EDGE)) {
+      if (GEOMBase::GetShape(myObj.get() , S1, TopAbs_EDGE) &&
+        GEOMBase::GetShape(myObj2.get(), S2, TopAbs_EDGE)) {
         TopoDS_Edge anEdge1 = TopoDS::Edge(S1);
         TopoDS_Edge anEdge2 = TopoDS::Edge(S2);
 
@@ -399,5 +395,15 @@ SALOME_Prs* MeasureGUI_AngleDlg::buildPrs()
 //=================================================================================
 bool MeasureGUI_AngleDlg::isValid (QString& msg)
 {
-  return MeasureGUI_Skeleton::isValid(msg) && !myObj2->_is_nil();
+  return MeasureGUI_Skeleton::isValid(msg) && myObj2;
+}
+
+//=================================================================================
+// function : activateSelection()
+// purpose  :
+//=================================================================================
+void MeasureGUI_AngleDlg::activateSelection()
+{
+  globalSelection(GEOM_LINE);
+  localSelection(GEOM::GEOM_Object::_nil(), TopAbs_EDGE );
 }
index 46615265d6c2578913099c8063b4eca48e92efa2..d12a22666cce69fa62cb308f4a5224e170b2f97c 100644 (file)
@@ -52,6 +52,7 @@ protected:
 private:
   void                          Init();
   bool                          getParameters( double& );
+  void                          activateSelection();
 
 private:
   QLineEdit*                    myEditCurrentArgument;
@@ -59,7 +60,7 @@ private:
   QPushButton*                  mySelBtn2;
   MeasureGUI_2Sel1LineEdit*     myGrp;
 
-  GEOM::GEOM_Object_var         myObj2;
+  GEOM::GeomObjPtr              myObj2;
 };
 
 #endif // MEASUREGUI_ANGLEDLG_H
index 0da5051ba80048134ca09d06f4b8e36bcae91a15..436c4a0036760c978ead28b039b679a057fc54e2 100644 (file)
@@ -124,7 +124,7 @@ void MeasureGUI_BndBoxDlg::Init()
           this, SLOT(SelectionIntoArgument()));
 
   initName(tr("GEOM_BNDBOX"));
-  globalSelection();
+  activateSelection();
   SelectionIntoArgument();
 }
 
@@ -148,6 +148,7 @@ bool MeasureGUI_BndBoxDlg::ClickOnApply()
     return false;
 
   initName();
+  activateSelection();
   return true;
 }
 
@@ -162,7 +163,7 @@ void MeasureGUI_BndBoxDlg::ActivateThisDialog()
   connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
           this, SLOT(SelectionIntoArgument()));
 
-  globalSelection();
+  activateSelection();
   redisplayPreview();
 }
 
@@ -216,11 +217,11 @@ bool MeasureGUI_BndBoxDlg::getParameters (double& theXmin, double& theXmax,
                                           double& theYmin, double& theYmax,
                                           double& theZmin, double& theZmax)
 {
-  if (myObj->_is_nil())
+  if (!myObj)
     return false;
 
   GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation());
-  anOper->GetBoundingBox(myObj, true, theXmin, theXmax, theYmin, theYmax, theZmin, theZmax);
+  anOper->GetBoundingBox(myObj.get(), true, theXmin, theXmax, theYmin, theYmax, theZmin, theZmax);
 
   return anOper->IsDone();
 }
@@ -249,28 +250,19 @@ SALOME_Prs* MeasureGUI_BndBoxDlg::buildPrs()
 void MeasureGUI_BndBoxDlg::SelectionIntoArgument()
 {
   myEditCurrentArgument->setText("");
-  myObj = GEOM::GEOM_Object::_nil();
+  myObj.nullify();
 
-  LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
-  SALOME_ListIO aSelList;
-  aSelMgr->selectedObjects(aSelList);
+  QList<TopAbs_ShapeEnum> aTypes;
+  aTypes << TopAbs_VERTEX << TopAbs_EDGE << TopAbs_WIRE << TopAbs_FACE << TopAbs_SHELL << TopAbs_SOLID << TopAbs_COMPSOLID << TopAbs_COMPOUND << TopAbs_SHAPE;
+  myObj = getSelected( aTypes );
 
-  if (aSelList.Extent() != 1) {
+  if ( !myObj ) {
     processObject();
     erasePreview();
     return;
   }
 
-  GEOM::GEOM_Object_var aSelectedObject = GEOMBase::ConvertIOinGEOMObject(aSelList.First());
-
-  if (aSelectedObject->_is_nil()) {
-    processObject();
-    erasePreview();
-    return;
-  }
-
-  myObj = aSelectedObject;
-  myEditCurrentArgument->setText(GEOMBase::GetName(myObj));
+  myEditCurrentArgument->setText(GEOMBase::GetName(myObj.get()));
   processObject();
   redisplayPreview();
 }
@@ -290,7 +282,7 @@ GEOM::GEOM_IOperations_ptr MeasureGUI_BndBoxDlg::createOperation()
 //=================================================================================
 bool MeasureGUI_BndBoxDlg::isValid (QString&)
 {
-  return !myObj->_is_nil();
+  return myObj;
 }
 
 //=================================================================================
@@ -300,7 +292,7 @@ bool MeasureGUI_BndBoxDlg::isValid (QString&)
 bool MeasureGUI_BndBoxDlg::execute (ObjectList& objects)
 {
   GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation());
-  GEOM::GEOM_Object_var anObj = anOper->MakeBoundingBox(myObj, true);
+  GEOM::GEOM_Object_var anObj = anOper->MakeBoundingBox(myObj.get(), true);
 
   if (!anObj->_is_nil())
     objects.push_back(anObj._retn());
@@ -308,6 +300,20 @@ bool MeasureGUI_BndBoxDlg::execute (ObjectList& objects)
   return true;
 }
 
+//=================================================================================
+// function : activateSelection()
+// purpose  :
+//=================================================================================
+void MeasureGUI_BndBoxDlg::activateSelection()
+{
+  globalSelection( GEOM_ALLSHAPES );
+  std::list<int> needTypes;
+  needTypes.push_back( TopAbs_SHAPE ), needTypes.push_back( TopAbs_VERTEX ), needTypes.push_back( TopAbs_EDGE ); 
+  needTypes.push_back( TopAbs_WIRE ), needTypes.push_back( TopAbs_FACE ), needTypes.push_back( TopAbs_SHELL );
+  needTypes.push_back( TopAbs_SOLID ), needTypes.push_back( TopAbs_COMPSOLID ), needTypes.push_back( TopAbs_COMPOUND );
+  localSelection(GEOM::GEOM_Object::_nil(), needTypes );
+}
+
 //=================================================================================
 // function : redisplayPreview()
 // purpose  :
@@ -337,3 +343,12 @@ void MeasureGUI_BndBoxDlg::redisplayPreview()
   catch (...) {
   }
 }
+
+//=================================================================================
+// function : addSubshapeToStudy
+// purpose  : virtual method to add new SubObjects if local selection
+//=================================================================================
+void MeasureGUI_BndBoxDlg::addSubshapesToStudy()
+{
+  GEOMBase::PublishSubObject( myObj.get() );
+}
index 1386f0c30a239f2d4a18cf23fda6b1ed66d922e7..0a7a3d9a11d244291df0d2b4ad1a7b48df178ce0 100644 (file)
@@ -48,7 +48,7 @@ protected:
   virtual GEOM::GEOM_IOperations_ptr createOperation();
   virtual bool                       isValid (QString&);
   virtual bool                       execute (ObjectList&);
-
+  virtual void                       addSubshapesToStudy();
   void                               redisplayPreview();
   virtual void                       processObject();
   virtual SALOME_Prs*                buildPrs();
@@ -56,10 +56,11 @@ protected:
 private:
   void                               Init();
   void                               enterEvent (QEvent*);
+  void                               activateSelection();
   bool                               getParameters (double&, double&, double&, double&, double&, double&);
 
 private:
-  GEOM::GEOM_Object_var              myObj;
+  GEOM::GeomObjPtr                   myObj;
   MeasureGUI_1Sel6LineEdit*          myGrp;
 
 private slots:
index 64a3f556eae2376a79452de55bd64dd0dfbbeadb..8a6a2cc22a6673a675b179caf93d46c2e1734ae0 100644 (file)
@@ -120,10 +120,23 @@ void MeasureGUI_CenterMassDlg::Init()
            SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
 
   initName( tr( "GEOM_POINT") );
-  globalSelection();
+  activateSelection();
   SelectionIntoArgument();
 }
 
+//=================================================================================
+// function : activateSelection
+// purpose  : 
+//=================================================================================
+void MeasureGUI_CenterMassDlg::activateSelection()
+{
+  globalSelection( GEOM_ALLSHAPES );
+  std::list<int> needTypes;
+  needTypes.push_back( TopAbs_SHAPE ), needTypes.push_back( TopAbs_VERTEX ), needTypes.push_back( TopAbs_EDGE ); 
+  needTypes.push_back( TopAbs_WIRE ), needTypes.push_back( TopAbs_FACE ), needTypes.push_back( TopAbs_SHELL );
+  needTypes.push_back( TopAbs_SOLID ), needTypes.push_back( TopAbs_COMPSOLID ), needTypes.push_back( TopAbs_COMPOUND );
+  localSelection(GEOM::GEOM_Object::_nil(), needTypes );
+}
 
 //=================================================================================
 // function : ClickOnOk()
@@ -146,6 +159,7 @@ bool MeasureGUI_CenterMassDlg::ClickOnApply()
     return false;
 
   initName();
+  activateSelection();
   return true;
 
 //    myMeasureGUI->MakeCDGAndDisplay( myGeomShape );
@@ -159,26 +173,17 @@ bool MeasureGUI_CenterMassDlg::ClickOnApply()
 void MeasureGUI_CenterMassDlg::SelectionIntoArgument()
 {
   erasePreview();
-  myObj = GEOM::GEOM_Object::_nil();
-
-  LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
-  SALOME_ListIO aSelList;
-  aSelMgr->selectedObjects(aSelList);
-
-  if (aSelList.Extent() != 1) {
-    processObject();
-    return;
-  }
 
-  GEOM::GEOM_Object_var aSelectedObject =
-    GEOMBase::ConvertIOinGEOMObject( aSelList.First() );
+  myObj.nullify();
+  QList<TopAbs_ShapeEnum> aTypes;
+  aTypes << TopAbs_VERTEX << TopAbs_EDGE << TopAbs_WIRE << TopAbs_FACE << TopAbs_SHELL << TopAbs_SOLID << TopAbs_COMPSOLID << TopAbs_COMPOUND << TopAbs_SHAPE;
+  myObj = getSelected( aTypes );
 
-  if ( aSelectedObject->_is_nil() ) {
+  if ( !myObj ) {
     processObject();
     return;
   }
 
-  myObj = aSelectedObject;
   processObject();
   displayPreview(true);
 }
@@ -220,7 +225,7 @@ void MeasureGUI_CenterMassDlg::ActivateThisDialog()
   connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), 
            SIGNAL(currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
 
-  globalSelection();
+  activateSelection();
   displayPreview(true);
 }
 
@@ -230,7 +235,7 @@ void MeasureGUI_CenterMassDlg::ActivateThisDialog()
 //=================================================================================
 void MeasureGUI_CenterMassDlg::processObject()
 {
-  if ( myObj->_is_nil() ) {
+  if ( !myObj ) {
     myGrp->LineEdit1->setText( "" );
     myGrp->LineEdit2->setText( "" );
     myGrp->LineEdit3->setText( "" );
@@ -242,7 +247,7 @@ void MeasureGUI_CenterMassDlg::processObject()
     
     getParameters( x, y, z );
     
-    myGrp->LineEdit1->setText( GEOMBase::GetName( myObj ) );
+    myGrp->LineEdit1->setText( GEOMBase::GetName( myObj.get() ) );
 
     SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
     int aPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 );
@@ -280,7 +285,7 @@ GEOM::GEOM_IOperations_ptr MeasureGUI_CenterMassDlg::createOperation()
 //=================================================================================
 bool MeasureGUI_CenterMassDlg::isValid( QString& )
 {
-  return !myObj->_is_nil();
+  return myObj;
 }
 
 //=================================================================================
@@ -289,12 +294,12 @@ bool MeasureGUI_CenterMassDlg::isValid( QString& )
 //=================================================================================
 bool MeasureGUI_CenterMassDlg::getParameters( double& theX, double& theY, double& theZ )
 {
-  if ( myObj->_is_nil() )
+  if ( !myObj )
     return false;
   else {
     try {
       GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow( getOperation() );
-      GEOM::GEOM_Object_var anObj = anOper->GetCentreOfMass( myObj );
+      GEOM::GEOM_Object_var anObj = anOper->GetCentreOfMass( myObj.get() );
       if ( !anOper->IsDone() )
         return false;
 
@@ -328,10 +333,19 @@ bool MeasureGUI_CenterMassDlg::getParameters( double& theX, double& theY, double
 bool MeasureGUI_CenterMassDlg::execute( ObjectList& objects )
 {
   GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow( getOperation() );
-  GEOM::GEOM_Object_var anObj = anOper->GetCentreOfMass( myObj );
+  GEOM::GEOM_Object_var anObj = anOper->GetCentreOfMass( myObj.get() );
 
   if ( !anObj->_is_nil() )
     objects.push_back( anObj._retn() );
 
   return true;
 }
+
+//=================================================================================
+// function : addSubshapeToStudy
+// purpose  : virtual method to add new SubObjects if local selection
+//=================================================================================
+void MeasureGUI_CenterMassDlg::addSubshapesToStudy()
+{
+  GEOMBase::PublishSubObject( myObj.get() );
+}
index f279c6c3364e42a56a399d1a4904b99fb53c22bf..ce1bbf335ce518a77f09c599b97d674f87540050 100644 (file)
@@ -47,6 +47,7 @@ protected:
   // redefined from GEOMBase_Helper
   virtual GEOM::GEOM_IOperations_ptr  createOperation();
   virtual bool                        isValid( QString& );
+  virtual void                        addSubshapesToStudy();
   virtual bool                        execute( ObjectList& );
 
 private slots:
@@ -61,10 +62,11 @@ private:
   void                                Init();
   void                                enterEvent( QEvent* );
   void                                processObject();
+  void                                activateSelection();
   bool                                getParameters( double&, double&, double& );
   
 private:
-  GEOM::GEOM_Object_var               myObj;
+  GEOM::GeomObjPtr                    myObj;
   MeasureGUI_1Sel3LineEdit*           myGrp;
 };
 
index 8debf294c6edb78936deedd8a9a0d3ab70d56bb3..e8a250b60f9f36b6bdd1ca62ebe7b579043dace8 100644 (file)
@@ -125,7 +125,7 @@ void MeasureGUI_CheckSelfIntersectionsDlg::processObject()
   myGrp->ListBox2->clear();
   erasePreview();
 
-  if (myObj->_is_nil())
+  if (!myObj)
     return;
 
   QString aMsg ("");
@@ -133,7 +133,7 @@ void MeasureGUI_CheckSelfIntersectionsDlg::processObject()
   bool isGood = false, isFailed = false;
   int nbPairs = 0;
   try {
-    isGood = anOper->CheckSelfIntersections(myObj, myInters);
+         isGood = anOper->CheckSelfIntersections(myObj.get(), myInters);
     nbPairs = myInters->length()/2;
     if (nbPairs*2 != myInters->length()) {
       isFailed = true;
@@ -197,7 +197,7 @@ void MeasureGUI_CheckSelfIntersectionsDlg::onErrorsListSelectionChanged()
 
   QStringList aSubShapeList;
   TopoDS_Shape aSelShape;
-  if (!myObj->_is_nil() && GEOMBase::GetShape(myObj, aSelShape)) {
+  if (myObj && GEOMBase::GetShape(myObj.get(), aSelShape)) {
     TopTools_IndexedMapOfShape anIndices;
     TopExp::MapShapes(aSelShape, anIndices);
 
@@ -239,7 +239,7 @@ void MeasureGUI_CheckSelfIntersectionsDlg::onSubShapesListSelectionChanged()
   TopoDS_Shape aSelShape;
   TopoDS_Shape aSubShape;
   TopTools_IndexedMapOfShape anIndices;
-  if (!myObj->_is_nil() && GEOMBase::GetShape(myObj, aSelShape)) {
+  if (myObj && GEOMBase::GetShape(myObj.get(), aSelShape)) {
     SALOME_Prs* aPrs = 0;
     TopExp::MapShapes(aSelShape, anIndices);
     QList<int>::iterator it;
index 4fcbc5796127aa454981e4c186f4e60e315fd173..64e58fb082ff49f5ed39f1a630ffe12b75f44d03 100644 (file)
@@ -128,6 +128,12 @@ void MeasureGUI_DistanceDlg::Init()
   myEditCurrentArgument = myGrp->LineEdit1;
   myDbls = new GEOM::ListOfDouble();
 
+  myGrp->LineEdit1->setEnabled(true);
+  myGrp->LineEdit2->setEnabled(false);
+
+  myObj1.nullify();
+  myObj2.nullify();
+
   // signals and slots connections
   connect(buttonOk(),         SIGNAL(clicked()), this, SLOT(ClickOnOk()));
   connect(buttonApply(),      SIGNAL(clicked()), this, SLOT(ClickOnApply()));
@@ -140,7 +146,7 @@ void MeasureGUI_DistanceDlg::Init()
   connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
           this, SLOT(SelectionIntoArgument()));
 
-  globalSelection();
+  activateSelection();
   SelectionIntoArgument();
 }
 
@@ -164,6 +170,7 @@ bool MeasureGUI_DistanceDlg::ClickOnApply()
     return false;
 
   initName();
+  activateSelection();
   return true;
 }
 
@@ -178,7 +185,7 @@ void MeasureGUI_DistanceDlg::ActivateThisDialog()
   connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
           this, SLOT(SelectionIntoArgument()));
 
-  globalSelection();
+  activateSelection();
   redisplayPreview();
 }
 
@@ -230,15 +237,9 @@ void MeasureGUI_DistanceDlg::SolutionSelected (int i)
 //=================================================================================
 void MeasureGUI_DistanceDlg::SelectionIntoArgument()
 {
-  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());
-  }
+  QList<TopAbs_ShapeEnum> aTypes;
+  aTypes << TopAbs_VERTEX << TopAbs_EDGE << TopAbs_WIRE << TopAbs_FACE << TopAbs_SHELL << TopAbs_SOLID << TopAbs_COMPSOLID << TopAbs_COMPOUND << TopAbs_SHAPE;
+  GEOM::GeomObjPtr aSelectedObject = getSelected( aTypes );
 
   // clear selection
   disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
@@ -248,12 +249,12 @@ void MeasureGUI_DistanceDlg::SelectionIntoArgument()
 
   if (myEditCurrentArgument == myGrp->LineEdit1) {
     myObj1 = aSelectedObject;
-    if (!myObj1->_is_nil() && myObj2->_is_nil())
+    if (myObj1 && !myObj2)
       myGrp->PushButton2->click();
   }
   else {
     myObj2 = aSelectedObject;
-    if (!myObj2->_is_nil() && myObj1->_is_nil())
+    if (myObj2 && !myObj1)
       myGrp->PushButton1->click();
   }
 
@@ -297,8 +298,8 @@ void MeasureGUI_DistanceDlg::SetEditCurrentArgument()
 //=================================================================================
 void MeasureGUI_DistanceDlg::processObject()
 {
-  myGrp->LineEdit1->setText(!myObj1->_is_nil() ? GEOMBase::GetName(myObj1) : "");
-  myGrp->LineEdit2->setText(!myObj2->_is_nil() ? GEOMBase::GetName(myObj2) : "");
+  myGrp->LineEdit1->setText(myObj1 ? GEOMBase::GetName(myObj1.get()) : "");
+  myGrp->LineEdit2->setText(myObj2 ? GEOMBase::GetName(myObj2.get()) : "");
 
   myGrp->ComboBox1->clear();
   myDbls->length(0);
@@ -311,7 +312,7 @@ void MeasureGUI_DistanceDlg::processObject()
 
   GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation());
   try {
-    nbSols = anOper->ClosestPoints(myObj1, myObj2, myDbls);
+    nbSols = anOper->ClosestPoints(myObj1.get(), myObj2.get(), myDbls);
   }
   catch (const SALOME::SALOME_Exception& e) {
     SalomeApp_Tools::QtCatchCorbaException(e);
@@ -340,7 +341,7 @@ SALOME_Prs* MeasureGUI_DistanceDlg::buildPrs()
 
   int currSol = myGrp->ComboBox1->currentIndex();
 
-  if (myObj1->_is_nil() || myObj2->_is_nil() ||
+  if (!myObj1 || !myObj2 ||
       currSol == -1 || (currSol+1)*6 > myDbls->length() ||
       vw->getViewManager()->getType() != OCCViewer_Viewer::Type())
     return 0;
@@ -424,7 +425,7 @@ GEOM::GEOM_IOperations_ptr MeasureGUI_DistanceDlg::createOperation()
 //=================================================================================
 bool MeasureGUI_DistanceDlg::isValid (QString& msg)
 {
-  return !myObj1->_is_nil() && !myObj2->_is_nil();
+  return myObj1 && myObj2;
 }
 
 //=================================================================================
@@ -437,7 +438,7 @@ bool MeasureGUI_DistanceDlg::execute (ObjectList& objects)
   GEOM::GEOM_IBasicOperations_var aBasicOper = getGeomEngine()->GetIBasicOperations(getStudyId());
 
   GEOM::ListOfDouble_var aDbls;
-  int nbSols = anOper->ClosestPoints(myObj1, myObj2, aDbls);
+  int nbSols = anOper->ClosestPoints(myObj1.get(), myObj2.get(), aDbls);
 
   if (anOper->IsDone()) {
     bool doPublishAll = true;
@@ -482,6 +483,20 @@ bool MeasureGUI_DistanceDlg::execute (ObjectList& objects)
   return true;
 }
 
+//=================================================================================
+// function : activateSelection()
+// purpose  :
+//=================================================================================
+void MeasureGUI_DistanceDlg::activateSelection()
+{
+  globalSelection( GEOM_ALLSHAPES );
+  std::list<int> needTypes;
+  needTypes.push_back( TopAbs_SHAPE ), needTypes.push_back( TopAbs_VERTEX ), needTypes.push_back( TopAbs_EDGE ); 
+  needTypes.push_back( TopAbs_WIRE ), needTypes.push_back( TopAbs_FACE ), needTypes.push_back( TopAbs_SHELL );
+  needTypes.push_back( TopAbs_SOLID ), needTypes.push_back( TopAbs_COMPSOLID ), needTypes.push_back( TopAbs_COMPOUND );
+  localSelection(GEOM::GEOM_Object::_nil(), needTypes );
+}
+
 //=================================================================================
 // function : redisplayPreview()
 // purpose  :
@@ -517,11 +532,21 @@ void MeasureGUI_DistanceDlg::redisplayPreview()
 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);
+  aName += GEOMBase::GetName(currObj%2 ? myObj1.get() : myObj2.get());
 
   return aName;
 }
 
+//=================================================================================
+// function : addSubshapeToStudy
+// purpose  : virtual method to add new SubObjects if local selection
+//=================================================================================
+void MeasureGUI_DistanceDlg::addSubshapesToStudy()
+{
+  GEOMBase::PublishSubObject( myObj1.get() );
+  GEOMBase::PublishSubObject( myObj2.get() );
+}
+
 //=================================================================================
 // function : MeasureGUI_DistanceGroup
 // purpose  :
index 04c9ed8209f27e324edd70c271352126a3cbe8fc..9b0b35d268e40609b7058b9d7e455de44d06b53a 100644 (file)
@@ -99,6 +99,7 @@ protected:
   virtual GEOM::GEOM_IOperations_ptr  createOperation();
   virtual bool                        isValid (QString&);
   virtual bool                        execute (ObjectList&);
+  virtual void                        addSubshapesToStudy();
   virtual QString                     getNewObjectName (int CurrObj = -1) const; 
 
   void                                redisplayPreview();
@@ -108,10 +109,11 @@ protected:
 private:
   void                                Init();
   void                                enterEvent (QEvent*);
+  void                                activateSelection();
 
 private:
-  GEOM::GEOM_Object_var               myObj1;
-  GEOM::GEOM_Object_var               myObj2;
+  GEOM::GeomObjPtr                    myObj1;
+  GEOM::GeomObjPtr                    myObj2;
 
   MeasureGUI_DistanceGroup*           myGrp;
   GEOM::ListOfDouble_var              myDbls;
index 47a240e486ecb3216af9c335d9b06307ea22194b..9d529f2f93db88e5672285fff95d8a2723898e68 100644 (file)
@@ -114,6 +114,19 @@ void MeasureGUI_InertiaDlg::Init()
   MeasureGUI_Skeleton::Init();
 }
 
+//=================================================================================
+// function : activateSelection()
+// purpose  :
+//=================================================================================
+void MeasureGUI_InertiaDlg::activateSelection()
+{
+  MeasureGUI_Skeleton::activateSelection();
+  std::list<int> needTypes;
+  needTypes.push_back( TopAbs_VERTEX ), needTypes.push_back( TopAbs_EDGE ), needTypes.push_back( TopAbs_WIRE ), needTypes.push_back( TopAbs_FACE ), needTypes.push_back( TopAbs_SHELL ), needTypes.push_back( TopAbs_SOLID ), needTypes.push_back( TopAbs_COMPOUND );
+  localSelection(GEOM::GEOM_Object::_nil(), needTypes );
+}
+
+
 //=================================================================================
 // function : processObject
 // purpose  :
@@ -168,13 +181,13 @@ void MeasureGUI_InertiaDlg::processObject()
 bool MeasureGUI_InertiaDlg::getParameters( gp_Mat& I,
                                            gp_XYZ& theIXYZ )
 {
-  if ( myObj->_is_nil() )
+  if ( !myObj )
     return false;
   else {
     GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow( getOperation() );
     try {
       double x, y, z;
-      anOper->GetInertia( myObj,
+      anOper->GetInertia( myObj.get(),
                           I( 1, 1 ), I( 1, 2 ), I( 1, 3 ),
                           I( 2, 1 ), I( 2, 2 ), I( 2, 3 ),
                           I( 3, 1 ), I( 3, 2 ), I( 3, 3 ),
@@ -190,3 +203,22 @@ bool MeasureGUI_InertiaDlg::getParameters( gp_Mat& I,
     return anOper->IsDone();
   }
 }
+
+void MeasureGUI_InertiaDlg::SelectionIntoArgument()
+{
+  myObj.nullify();
+  QList<TopAbs_ShapeEnum> aTypes;
+  aTypes << TopAbs_VERTEX << TopAbs_EDGE << TopAbs_WIRE << TopAbs_FACE << TopAbs_SHELL << TopAbs_SOLID << TopAbs_COMPSOLID << TopAbs_COMPOUND << TopAbs_SHAPE;
+  myObj = getSelected( aTypes );
+  if (!myObj) {
+    mySelEdit->setText("");
+    processObject();
+    erasePreview();
+    return;
+  }
+
+  mySelEdit->setText(GEOMBase::GetName(myObj.get()));
+  processObject();
+  redisplayPreview();
+}
\ No newline at end of file
index 48fa73f3ee361b1f2f87ca302f59a72550b6fae7..79712359b2d4a97ccef764416d8dbf25dcd825fb 100644 (file)
@@ -49,6 +49,8 @@ public:
 protected:
   // redefined from GEOMBase_Helper and MeasureGUI_Skeleton
   virtual void                        processObject();
+  virtual void                        activateSelection();
+  virtual void                        SelectionIntoArgument();
   
 private:
   void                                Init();
index 0e34b765084a07a890ce93fb8b087c3dc172564a..612ac65b87ad171a0f4c8159752593eab6ea60d2 100644 (file)
@@ -26,6 +26,7 @@
 //
 #include "MeasureGUI_MaxToleranceDlg.h"
 #include "MeasureGUI_Widgets.h"
+#include <GEOMBase.h>
 #include "DlgRef.h"
 
 #include <SUIT_Session.h>
@@ -163,7 +164,7 @@ bool MeasureGUI_MaxToleranceDlg::getParameters( double& theMinFaceToler,
   else {
     GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow( getOperation() );
     try {
-      anOper->GetTolerance( myObj, 
+      anOper->GetTolerance( myObj.get()
                             theMinFaceToler, theMaxFaceToler,   theMinEdgeToler,
                             theMaxEdgeToler, theMinVertexToler, theMaxVertexToler );
     }
@@ -175,3 +176,35 @@ bool MeasureGUI_MaxToleranceDlg::getParameters( double& theMinFaceToler,
     return anOper->IsDone();
   }
 }
+
+//=================================================================================
+// function : activateSelection()
+// purpose  :
+//=================================================================================
+void MeasureGUI_MaxToleranceDlg::activateSelection()
+{
+  globalSelection( GEOM_ALLSHAPES );
+  std::list<int> needTypes;
+  needTypes.push_back( TopAbs_SHAPE ), needTypes.push_back( TopAbs_EDGE ); 
+  needTypes.push_back( TopAbs_WIRE ), needTypes.push_back( TopAbs_FACE ), needTypes.push_back( TopAbs_SHELL );
+  needTypes.push_back( TopAbs_SOLID ), needTypes.push_back( TopAbs_COMPSOLID ), needTypes.push_back( TopAbs_COMPOUND );  localSelection(GEOM::GEOM_Object::_nil(), needTypes );
+}
+
+void MeasureGUI_MaxToleranceDlg::SelectionIntoArgument()
+{
+  myObj.nullify();
+  QList<TopAbs_ShapeEnum> aTypes;
+  aTypes << TopAbs_EDGE << TopAbs_WIRE << TopAbs_FACE << TopAbs_SHELL << TopAbs_SOLID << TopAbs_COMPSOLID << TopAbs_COMPOUND << TopAbs_SHAPE;
+  myObj = getSelected( aTypes );
+  if (!myObj) {
+    mySelEdit->setText("");
+    processObject();
+    erasePreview();
+    return;
+  }
+
+  mySelEdit->setText(GEOMBase::GetName(myObj.get()));
+  processObject();
+  redisplayPreview();
+}
index c225d6efa3fd7e860dc100f0cfd2a63f31580ad6..69113b314248c2d6a5c3ce9250e0b64f7e9f6e73 100644 (file)
@@ -46,9 +46,11 @@ public:
 protected:
   // redefined from GEOMBase_Helper and MeasureGUI_Skeleton
   virtual void                        processObject();
+  virtual void                        SelectionIntoArgument();
 
 private:
   void                                Init();
+  void                                activateSelection();
   bool                                getParameters( double&, double&, double&, 
                                                      double&, double&, double& );
   
index e21d5252ff0bf2667267eb713163d67bbb6a5d2f..7f4c89798273953a469162b43f5024e80bb323a2 100644 (file)
@@ -122,7 +122,7 @@ void MeasureGUI_PointDlg::activateSelection()
 void MeasureGUI_PointDlg::SelectionIntoArgument()
 {
   try {
-    myObj = GEOM::GEOM_Object::_nil();
+    myObj.nullify();
     myGrp->LineEdit1->setText( "" );
     myGrp->LineEdit2->setText( "" );
     myGrp->LineEdit3->setText( "" );
@@ -135,23 +135,20 @@ void MeasureGUI_PointDlg::SelectionIntoArgument()
     if (aSelList.Extent() < 1)
       return;
 
-    GEOM::GEOM_Object_var aSelectedObject =
-      GEOMBase::ConvertIOinGEOMObject( aSelList.First() );
+    myObj = GEOMBase::ConvertIOinGEOMObject( aSelList.First() );
 
-    if ( aSelectedObject->_is_nil() )
+    if ( !myObj )
       return;
 
-    myObj = aSelectedObject;
-
     TColStd_IndexedMapOfInteger anIndexes;
     aSelMgr->GetIndexes(aSelList.First(), anIndexes);
 
     TopoDS_Shape aShape;
-    if ( anIndexes.Extent() > 1 || !GEOMBase::GetShape( myObj, aShape ) || aShape.IsNull() )
+    if ( anIndexes.Extent() > 1 || !GEOMBase::GetShape( myObj.get(), aShape ) || aShape.IsNull() )
       return;
 
     TopoDS_Vertex aPoint;
-    QString aName = GEOMBase::GetName( myObj );
+    QString aName = GEOMBase::GetName( myObj.get() );
     if ( anIndexes.Extent() == 0 ) {
       if ( aShape.ShapeType() == TopAbs_VERTEX )
         aPoint = TopoDS::Vertex( aShape );
@@ -180,7 +177,7 @@ void MeasureGUI_PointDlg::SelectionIntoArgument()
   }
   catch( ... )
   {
-    myObj = GEOM::GEOM_Object::_nil();
+    myObj.nullify();
     myGrp->LineEdit1->setText( "" );
     myGrp->LineEdit2->setText( "" );
     myGrp->LineEdit3->setText( "" );
index 9e434c969b44bd9d46a6244494c29774a96549b3..c3ace18a2ba3c0dd3eb9383386a2cff688b64d2a 100644 (file)
@@ -122,8 +122,30 @@ void MeasureGUI_PropertiesDlg::activateSelection()
   }
 
   globalSelection( aTypes );
+
+  std::list<int> needTypes;
+  needTypes.push_back( TopAbs_EDGE ), needTypes.push_back( TopAbs_WIRE ), needTypes.push_back( TopAbs_FACE ), needTypes.push_back( TopAbs_SHELL ), needTypes.push_back( TopAbs_SOLID ), needTypes.push_back( TopAbs_COMPOUND );
+  localSelection(GEOM::GEOM_Object::_nil(), needTypes );
 }
 
+void MeasureGUI_PropertiesDlg::SelectionIntoArgument()
+{
+  myObj.nullify();
+  QList<TopAbs_ShapeEnum> aTypes;
+  aTypes << TopAbs_EDGE << TopAbs_WIRE << TopAbs_FACE << TopAbs_SHELL << TopAbs_SOLID << TopAbs_COMPOUND;
+  myObj = getSelected( aTypes );
+  if (!myObj) {
+    mySelEdit->setText("");
+    processObject();
+    erasePreview();
+    return;
+  }
+
+  mySelEdit->setText(GEOMBase::GetName(myObj.get()));
+  processObject();
+  redisplayPreview();
+}
 //=================================================================================
 // function : processObject
 // purpose  :
@@ -155,12 +177,12 @@ bool MeasureGUI_PropertiesDlg::getParameters( double& theLength,
                                               double& theArea,
                                               double& theVolume )
 {
-  if ( myObj->_is_nil() )
+  if ( !myObj )
     return false;
   else {
     GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow( getOperation() );
     try {
-      anOper->GetBasicProperties( myObj, theLength, theArea, theVolume );
+      anOper->GetBasicProperties( myObj.get(), theLength, theArea, theVolume );
     }
     catch( const SALOME::SALOME_Exception& e ) {
       SalomeApp_Tools::QtCatchCorbaException( e );
@@ -180,8 +202,8 @@ SALOME_Prs* MeasureGUI_PropertiesDlg::buildPrs()
   SALOME_Prs* prs = 0;
   TopoDS_Shape shape;
 
-  if ( GEOMBase::GetShape( myObj, shape, TopAbs_EDGE ) &&
-       getDisplayer()->IsDisplayed( GEOMBase::GetEntry(myObj) ) ) {
+  if ( GEOMBase::GetShape( myObj.get(), shape, TopAbs_EDGE ) &&
+       getDisplayer()->IsDisplayed( GEOMBase::GetEntry(myObj.get()) ) ) {
     shape = GEOMBase::CreateArrowForLinearEdge( shape );
     if ( !shape.IsNull() )
       prs = getDisplayer()->BuildPrs( shape );
index 4911b4c18bb1536ff4dd536d5f9e4fbd0884c495..41cf932fb6cbf82cb6ca8be4d7e79b72f9c074db 100644 (file)
@@ -48,6 +48,7 @@ protected:
   // redefined from GEOMBase_Helper and MeasureGUI_Skeleton
   virtual void                        processObject();
   virtual void                        activateSelection();
+  virtual void                        SelectionIntoArgument();
   virtual SALOME_Prs*                 buildPrs();
 
 private:
index 1a5943a07aa62489dff95c083986240b3995bc4c..b254c4f9ce12d1682f7213eb7ee0f865fcaa0e3f 100644 (file)
@@ -245,27 +245,24 @@ void MeasureGUI_Skeleton::SetEditCurrentArgument()
 //=================================================================================
 void MeasureGUI_Skeleton::SelectionIntoArgument()
 {
-  myObj = GEOM::GEOM_Object::_nil();
+  myObj.nullify();
 
   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() );
+    myObj = GEOMBase::ConvertIOinGEOMObject( aSelList.First() );
   }
 
-  if (aSelectedObject->_is_nil()) {
+  if ( !myObj ) {
     mySelEdit->setText("");
     processObject();
     erasePreview();
     return;
   }
 
-  myObj = aSelectedObject;
-  mySelEdit->setText(GEOMBase::GetName(myObj));
+  mySelEdit->setText(GEOMBase::GetName(myObj.get()));
   processObject();
   redisplayPreview();
 }
@@ -356,7 +353,7 @@ void MeasureGUI_Skeleton::activateSelection()
 //=================================================================================
 bool MeasureGUI_Skeleton::isValid( QString& )
 {
-  return !myObj->_is_nil();
+  return myObj;
 }
 
 //================================================================
index a12b40bf322b36b938bb0008ec39c33998c3ea9d..fa5ceef21c4c1f7b6e5319a0a3ca3695228b92f7 100644 (file)
@@ -77,7 +77,7 @@ protected:
 protected:    
   QPushButton*                       mySelBtn;
   QLineEdit*                         mySelEdit;
-  GEOM::GEOM_Object_var              myObj;
+  GEOM::GeomObjPtr                   myObj;
   
   GeometryGUI*                       myGeomGUI;
   GEOM_Displayer*                    myDisplayer;
index 1a6e03c8d98c50341f8d72316f1f1fc9d12eac80..f9d2ea9027e38b66bf7727d1777dcf863c57518e 100644 (file)
@@ -202,13 +202,13 @@ void MeasureGUI_WhatisDlg::ClickOnProperties()
 //=================================================================================
 bool MeasureGUI_WhatisDlg::getParameters( QString& theText )
 {
-  if ( myObj->_is_nil() )
+  if ( !myObj )
     return false;
 
   GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow( getOperation() );
   try
   {
-    theText = anOper->WhatIs( myObj );
+    theText = anOper->WhatIs( myObj.get() );
   }
   catch( const SALOME::SALOME_Exception& e )
   {
@@ -231,7 +231,7 @@ QString MeasureGUI_WhatisDlg::getKindOfShape( QString& theParameters )
   SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
   int aLenPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 );
 
-  if ( myObj->_is_nil() )
+  if ( !myObj )
     return aKindStr;
 
   GEOM::GEOM_IKindOfShape::shape_kind aKind;
@@ -242,7 +242,7 @@ QString MeasureGUI_WhatisDlg::getKindOfShape( QString& theParameters )
 
   try
   {
-    aKind = anOper->KindOfShape( myObj, anInts, aDbls );
+    aKind = anOper->KindOfShape( myObj.get(), anInts, aDbls );
   }
   catch( const SALOME::SALOME_Exception& e ) {
     SalomeApp_Tools::QtCatchCorbaException( e );